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로 바꾸는데 큰 문제 없을 거 같다.

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


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