2011-02-06 2 views
2

Google과 함께 여러 v2k 전체 문법을 찾을 수 있습니다. 그러나 포트를 선언하는 것과 같은 방식으로 모두 마음이 아플 수도 있습니다. 예 입력 :Verilog 2001 모듈 선언 문법을 찾으십시오.

module foo ( 
    input x, 
    output [2:0] y); 
endmodule; 

내가 그 구문을 분석하는 문법을 찾을 수 있지만,이 포트 _에서 '포트'로이 같은 것들을 받아 들일 것입니다 :

  { name[3:0], name2[2:0]} 
.. or .. .name(othername) 

즉, 모듈 인스턴스화 포트 바인딩을 위해 문법에서 볼 것으로 예상되는 것들은 모듈 포트 선언을 위해 제공됩니다.

http://www.syncad.com/VeriLogger_bnf_Syntax_Verilog_2001.htm#list_of_ports

http://www.externsoft.ch/download/verilog.html#module_declaration

나는 내가 루스 소스에 보면, 또는 Perl :: Verilog를 할 수 같아요. 위의 문법이 깨 졌음을 확인하기를 희망합니다. 그렇지 않으면 내가 누락 된 부분을 지적 할 수 있습니다. 정확한 문법 소스는 훌륭한 것입니다 ...

답변

3

첫 번째 코드 블록은 IEEE 1364-2001 (12.3.3 절) 및 이후 버전 모두에서 유효한 list_of_port_declarations 구문을 사용합니다. 첫 번째 링크의 문법은 불완전하고 두 번째 링크는 다음과 같습니다. this construct

두 번째 코드 블록이 유효합니다. 모듈 정의에서 인스턴스 포트처럼 보이는 구문은 명시 적 포트 구문입니다. 매우 자주 사용되지는 않지만 내부적으로 사용되는 것보다 외부 적으로 다른 신호 인터페이스를 제공하려는 경우에 사용됩니다. 다음은 몇 가지 예이다 : 여기

module mod1(portA); 
input portA; //Implicit port named portA connected to implicit wire portA 
endmodule 

가 간이 암시하고는 동일한 식별자를 공유하기 때문에 간이 입력 선언에서 속성을 상속한다.

module mod2(.expA(sigA)); 
wire sigA; 
endmodule 

module top; 
wire sigB; 
mod2 modInst(.expA(sigB)); 
endmodule 

이 예제에서는 mod2 모듈에 명시적인 포트를 사용합니다. 내부적으로 expA는 sigA에 연결되어 있지만 modInst 인스턴스에서 볼 수 있듯이 명명 된 연결에 외부 이름을 사용합니다.

module mod3 (.expA({sigC,sigD}), sigF, .expB(sigG[1],sigB[3:0])); 
output reg [3:0] sigC, sigD; 
input wire [1:0] sigG; 
input wire [7:0] sigB; 
output wire sigF; 
endmodule 

이것은 유효합니다. 포트 expA는 sigC 및 sigD 연결의 너비를 가정합니다. 포트 expB와 동일합니다.