Friday, January 16, 2015

[verilog] 계층적 이름(Hierarchical Names)

verilog는 계층적 설계방법을 지원한다. 이건 verilog에서만 중요한 것이 아니다. 필자는 무엇을 하던간에 제일먼저 숲이 보이지 않으면 움직이지 않는다. 그 숲이라함은 계층구조의 상위를 말한다. 목차를 잡을 때도 큰 그림이 보여야 잡기가 쉬우며 업무를 할 때도 큰 그림을 보고 움직여야 삽질을 줄일 수 있다. 그냥 그냥 노하우 인데 아무리 조사해도 숲이 안보이면 일단 가장 간단한걸로 부딧치면서 겪어보면 전체 프로세스를 한번 겪기 때문에 숲을 보는 '안목' 이 생긴다. verilog 해야하는데 쓸데 없는 말을... ㅡ.ㅡ;

verilog 계층적 이름을 지원한다. 이게 무슨소리냐 하면

                stimulus
                     |
       module1      module2
            |                 |
     and1 and2      or1 or2

다음과 같은 계층구조로 verilog를 작성했다고 할 때
최상위에 있는 stimulus를 root(루트)라고 부른다. 여기에 사용된 각 모듈들을 계층적 이름 참조(hierarchical name referncing)를 통해서 유일한 이름을 가지고 모든 모듈을 나타낼 수 있다.

계층적 이름은 각 계층 수준의 지시어 리스트를 도트(".")로 분리 한다.

위의 계층 모듈을 한번 분리해 보면
stimulus
stimulus.module1
stimulus.module2
stimulus.module1.and1
stimulus.module1.and2
stimulus.module2.or1
stimulus.module2.or2

와 같이 나타낼 수 있다. 심지어 각 모듈의 포트(신호선)까지도 나타낼 수 있다.

stimulus.module1.and1.clock
stimulus.module1.and1.reset
.
.
.

이전에 작성했던 system task 에서 $display나 $monitor 에서 %m 포멧을 통해서 계층적 수준을 확인할 수 있다.




No comments :

Post a Comment