2013-10-19 3 views
0

안녕하세요, 저는 비동기 클리어로 t_flipflops를 사용하여 8 비트 동기 카운터 용 코드를 작성하고 있습니다. 여기 내 코드는 다음과 같습니다 그러나Verilog의 항상 문

module T_ff(CLK,E,CLEAR,T,Q); 
input CLK,E,CLEAR,D; 
output reg Q; 

[email protected](posedge CLK, negedge CLEAR,E,T) 
    begin: 
     if(~CLEAR) 
      Q<=1b'0; 
     else if (E == 1) 
      Q<=Q^T; 
    end: 
endmodule 

, 내가

Error (10170): Verilog HDL syntax error at lab5.v(25) near text "if"; expecting an identifier ("if" is a reserved keyword) 

어떤 도움을 말하는 if 문에서 오류가 무엇입니까? 또한 posedge 및 negedge 함수와 함께 감도 목록에 E와 T를 넣을 수 있습니까?

답변

2

시작과 끝 후에 콜론이 필요하지 않습니다.

감도 목록에 E와 T를 넣으면 안됩니다. 플립 플롭은 시계가 변경되거나 재설정 될 때 어떤 일을합니다. E 또는 T가 변경 될 때 블록이 트리거되는 것을 원하지는 않습니다.

2

시작/끝 키워드 뒤에 콜론을 사용하는 경우 식별자를 따라야합니다. 이것이 SystemVerilog 기능이라는 점에 유의하십시오 (IEEE Std 1800-2012, 9.3.4 "블록 이름"참조).

module T_ff(CLK,E,CLEAR,T,Q); 
input CLK,E,CLEAR,T; // D should be T 
output reg Q; 

[email protected](posedge CLK, negedge CLEAR) 
    begin: dff 
     if(~CLEAR) 
      Q<=1b'0; 
     else if (E == 1) 
      Q<=Q^T; 
    end: dff 
endmodule 

당신의 블록을 명명하는 것은 선택 사항입니다 : 예를 들어, 블록 dff의 이름을 수 있습니다. end 키워드 다음에 이름을 사용하는 것은 선택 사항입니다.

또한 포트 신고에서 DT으로 변경해야한다고 생각합니다. 다른 답변에서 말했듯이 감도 목록에 E 나 T를 사용하면 안됩니다.