posted by 샛별의꿈 2022. 4. 20. 13:42

VSCode 를 사용하면서 기본 폰트를 Ligature 폰트로 설정했었다.

 

최근 C와 Verilog 를 같이 보는데 Verilog 파일에서 <= 를 입력하니 

 

 

이렇게 보여버리는 문제가 생겨 버렸다.

C와 verilog 에서 의미가 다르니...

 

하지만 방법이 역시 있었다.

 

Ctrl + Shift + P를 눌러 설정을 고르는 메뉴를 열고, 

Configure Language Specific Settings...

를 찾아서 누르면 언어를 고르는 메뉴가 나오는데, 여기에서 설정을 변경하고자 하는 언어를 고른다.

그러면 나오는 화면의 좌측 탭에서 텍스트 편집기 -> 글꼴 을 선택하면 글꼴을 설정할 수 있는데,

일단은 기본 값이 설정되어 있을 것이다. 이상태에서 변경을 하면 언어별로 설정할 수 있다. 

아무것도 변경하지 않으면 기본값을 그대로 따라가고 settings.json 파일에 언어별 반영이 안되므로,

일단 Font Size 숫자를 한번 바꿔보자.

 

그리고 나서 "settings.json에서 편집" 을 눌러 열리는 settings.json 파일을 보면,

내가 선택한 언어 탭이 따로 추가되어 있을 것이다.

 

{
    "editor.fontFamily": "D2coding, Consolas, monospace, 'Courier New'",
    "editor.fontSize": 18,
    "editor.fontLigatures": false,
    "[verilog]": {
        "editor.fontFamily": "D2coding, monospace, Consolas, 'Courier New'",
        "editor.fontSize": 18,
        "editor.fontLigatures": false
    },
    "[c]": {
        "editor.fontFamily": "'D2coding ligature'",
        "editor.fontSize": 18,
        "editor.fontLigatures": true
    },
    "[c++]": {
        "editor.fontFamily": "'D2coding ligature'",
        "editor.fontSize": 18,
        "editor.fontLigatures": true
    },
    "[csharp]": {
        "editor.fontSize": 15
    },
}
 
대충 이런 식이다. 글 작성을 위해 c#을 선택하고 fontsize 만 15로 변경하고 "settings.json에서 편집" 을 눌렀다.
 
그러면 내가 바꾸고 싶은 font 탭에 fontFamily, fontLigatures, fontSize 설정 정도를 입력해 주고 저장하면 된다.
 
이후로는 언어별로 font가 설정된 대로 표시될 것이다.
 
긴 삽질은 아니었지만 아무튼 나중에 또 찾아볼 것 같으니 저장.

 

posted by 샛별의꿈 2019. 11. 20. 16:06
  1. asc 파일을 PADS import 시, " *pads Not valid pin name for part type xxxx " 에러
    찾아보면 OrCAD 에서 네트 이름을 숫자가 아닌 문자로 했다던지, 두번을 import 시켜서 그렇다던지 하는 얘기가 있는데,
    결론은 PADS 에서 쓰려던 부품의 Library 에서 Parts 의 Pins 탭에 보면, 핀 넘버가 숫자가 아닌 영문으로 되어 있는 경우였다.
    OrCAD 가 아니라 PADS 쪽에서 그렇게 되어 있어서, 아예 새로운 Parts 를 생성해버리고 연결하니 에러가 사라졌다.

  2. asc 파일을 PADS import 시, " *Bad *CONNECTION* ascii data format, nets must contain more than one pin. Signal ..." 에러
    에러 그대로 해석하면 엉뚱한 삽질을 하기 십상인데, 내 경우에는 BUS를 BUS[0:13] 까지 설정해놓고, 각 네트 네임을 BUS00 ~ BUS13 으로 설정한 문제였다. 그래놓고 다른 쪽에는 BUS0 ~ BUS13 으로 잘 설정했으니, 해당 네트가 떠버린 형태가 되었다. 정신차리자!
    아! 실제로 의도적으로 네트 이름을 지정해놓고 아무데도 연결하지 않아도 뜬다. 이 경우에는 무시해도 된다.

  3. PADS 에서 Decal 을 Library 에 Import 해놓고 Part Type 은 생성하지 않은 채, 해당 Decal Name 으로 OrCAD에서 footprint 를 지정하면 없는 Part 로 뜬다.
    아니 뭐 이건 당연히 그런데 깜빡 잊고 그랬으니, 놓치지 말고 Decal 은 Parts 와 연결되든 새로 생성하든 해야한다.

  4. PADS 에서 처음으로 4층기판으로 설계를 하다보니, 하는건 Copper Pour 깔듯이 내층을 plane 으로 설정하고 VCC와 GND로 깔아주면 되고 VIA를 partial 타입으로 층간 지정해놓고 Router 돌리니 지가 알아서 해당하는 VIA 로 선택해서 쓰고 뭐 그러는데...
    에...문제는 이렇게 해서 모든 net 를 다 router 로 돌렸는데 영 100% 로 라우팅이 끝나질 않았다. 아니 근데 눈에 보이는 unrouted net 이 없는게 문제다. 복잡하지도 않은 pcb를 한 이틀동안 붙잡고 어디가 unrouted 인가 찾아봤는데 눈만 버렸다. 여튼 layout 으로 돌아와서 unrouted net 필터걸고 선택해보니 GND와 VCC가 전부 다 선택되었는데, pin pair 를 카운트하는게 아니라 net로 카운트해서 몇개 안되는것처럼 보였던 것 같다.
    아무튼, 이 문제가 정확히 뭐때문인지는 아직 모르겠다. plane층을 pour 상태로 만들지 않아서 그런가? (아니 그러면 router 놈아 니가 알아서 pour 하든가 하지...)
    이건 나중에 4층기판 다시 설계할 일 생기면 확인해볼 생각이다. 결국은 2층으로 일단 만들고 말았다. (다 그리고 보니 2층 네트도 딱히 복잡하지 않았던 게 함정)

 

또 꺼리가 생기면 계속 적어나갈 예정.

 

posted by 샛별의꿈 2019. 2. 21. 10:25

일이 일이다보니 이 오래된 걸 쓰게 될 줄이야...

그나마도 좀 덜 오래된 CUPL 로 컨버전하다가 겪은 일들.

이게 다 Ti 와 ROM Writer 떄문이다

이것도 ABEL로 컴파일 하다가 IC 구하기 힘들어서 그나마 구하기쉬운 ATF22V10C 쓰려고 컨버전 하고있는 건 안비밀


어쨌든 잊을거같아서 정리 해두자.


  • ABEL 의 := 는 CUPL에 없다.

그래서 컨버전 문서를 찾아봤더니 = 를 쓰랜다. 알아서 지가 판단한다고?!

뭔 말도 안되는 소리야 하고 ABEL에서 := 를 왜 쓰나 찾아봤더니, Sequential Logic 표현할 때 쓴다.

Combinational Logic은 그냥 = 만 쓴다.

  * 참고로 PAL/GAL22V10  은 1번핀 입력을 CLK 로 쓰게 되어 있다 *

 

자 그럼, := 로 작성된 코드는 다 어떻게 바꾸지?


22V10 은 D Flip-Flop 을 가지고 있으니 그걸 쓰면 된다. 그리고 그것의 표현법(업계에선 Extensions)은 .D

22V10 이 지원하는 Extensions 는 총 4개, D, AR, SP, OE


아무튼 OUTPIN.d = Logic expression;

 

하면 되는 줄 알았더니 컴파일러가 에러를 막 뱉는다.

.AR 과 .SP 를 안넣었으니 넣으란다.


  • 위 에러를 보며 검색하니 보통 Preset 이나 Reset 을 외부입력받아 DFF 입력들에 넣도록 설계하는 게 일반적.

아놔 하필 내가 만드려는 원래놈이 이런 입력 1도 안 받는다.

....그럼 강제로 1을 넣든 0을 넣든 해야 하는데, 여기서 갑자기 막혔다. 0이 enable 인가 1이 Enable 인가?


나중에 와서야 이게 네번만 해보면 되는 조합이라는걸 알았지만 고정관념에 사로잡혀서 Reset에는 1을 집어넣어야 할거야 라고 생각하며 AR에 1 SP도 1로 초기화되게 해야겠다 하고 넣었더니 시뮬 돌려보니 아무것도 안해?!

(그와중에 0아니면 1나오면 되니 대충 반은 정상인걸로 나오는 개그)

막 AR은 1넣고 SP는 0 넣고 해봐도 안돼? 그럼 0 1 은 되냐?


하다가 모르겠다 다 0으로 넣어보자 하니까 된다. 아놔 시발


  • .OE는 써도 그만 안 써도 그만.

이거 안써서 그런가싶어 위에서 삽질할때 다 넣어봤지만(그래서 경우의 수 상승) 아니었다. 기본적으로 출력을 쓰는게 일반적이니 기본값이 ENABLE 상태인것같다.


  • 보통 .D를 먼저 쓰고 .AR과 .SP 를 나중에 쓰는데 관계없다.

순서가 있을까 싶어 이것도 해봤지만(경우의 수 또 상승) 아니었다. 삽질하지 말자. 난 AR SP 먼저 다 썼다.


  • 큰 문제는, 하나의 DFF AR이나 SP에 강제로 0이든 1이든 넣었으면 다른 DFF에도 똑같이 넣어야 한다는 점.

이건 아직 답을 모르겠다. 다르게 쓰는순간 컴파일러가 에러 뱉는다. (내부적으로 다 묶여있냐?-_-)


  • ABEL에서 node 로 핀을 선언하고 실제 없는 번호의 핀을 할당하는데 CUPL에선 필요없고 컴파일도 안된다.

그 node 가 무슨 역할을 하는지는 코드를 봐야 안다. 무턱대고 삭제할수는 없다. CUPL에서도 PINNODE는 있지만 이것도 실제 없는 핀번호를 할당할 수는 없다. 이 이상은 아직 모르겠다.


  • 만일 컴파일 했는데 JED 파일이 없다면 이유는 PLD 파일내용 상단에 기재된 Device 가 정확히 적혀있지 않기 때문이다.

뭘 적냐면 WinCUPL의 Options - Devices 에서 내가 쓰는 IC 찾으면 Device mnemonic 이 나오니 그거 적으면 됨.



이정도만 알아도 ABEL 을 CUPL로 바꾸는데 큰 문제 없을 거 같다.

생각보단 쓰기 간편해서 좋다.


걍 기록만 하려다가 누가 혹시 와서 보면 도움될까 싶어 발행해놓음.

posted by 샛별의꿈 2016. 1. 11. 17:38

MLX90614 붙이다보니 겪은 일들.


1. Slave Address 가 0x5A 가 기본값이다. 라고 데이터 시트에 나와 있다. MCU의 코드에 따라 어떻게 될지 모르겠지만, 
    결과적으로 전송되어야 하는 바이트 값은

0b1011010x (x는 0:Write, 1:Read)이다. 

STM32 keil 컴파일러용 Periphiral Driver 에서 제공하는 

I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction)

이 녀석은 Address 에 8bit 데이터를 줘야 하므로, 0x5A가 아니라 0xB4를 줘야 된다. Direction 가지고 마지막 비트를 0이든 1로 바꿔주는 녀석이라..


2. 어드레스도 맞고 해서 전송하는 데 오류는 하나도 안 나는데, 수신된 값이 죄다 0xFF 가 뜨는 경우가 있다.

이건, I2C 버스 프로토콜을 보면 Repeated Start 를 어떻게 실제로 구동하느냐의 문제인데, 

어떤 소자는 이 Repeated Start 를 Stop+Start 로 요구하는 경우가 있기도 한데, MLX90614 의 경우에는 그냥 다시 Start 만 해주면 된다. Stop 하고나서 Start 하면 죄다 0xFF 뜬다. 아오 이거 찾느라 삽질한거 생각하면 ㅡ.ㅡ;

(막상 데이터시트 프로토콜 그림 보면 딱 1비트로 표현되어있으니 사실 Start만 다시 해주는게 맞다는 것은 나의 불찰로 하고...)


3. 데이터가 들어오는 데 표현되는 값이 막 섭씨 수백도 이상 왔다갔다 한다.

보....통은 MSB First 인데, 이건 LSB First(.........). 데이터시트에 있으니 할말은 없다만 아 쫌..ㅠㅠ


4. crc 값이 안맞는다.

이것도 보....통은 전송되는 데이터만 가지고 CRC 계산해서 붙여보내는데,
MLX90614는 무려 

SlaveAddress[tx] byte + Command byte + SlaveAddress[rx] byte + Data(LSB) byte + Data(MSB) byte

이만큼 갖고 만들어서 붙여보내고 있다. 뭐, 고....고맙다ㅠㅠ귀찮게 해 주셔서....


1,2번 항목이 동시에 불확실한 상태로 삽질하니까 뭐가 맞는 줄 몰라서 온갖 삽질을...



뭐 여튼 그래서 잘 동작은 하는데, 문제는 이놈의 것이 거리가 어느정도 떨어진 것까지 잘 재는건지 대충 봐서 모르겠다;;

얼음 갖다 찍어봤더니 -10도 뜨는데, 이것도 맞는건지 당최...접촉식 센서하고 같이 놓고 평가해야 하나;