2013-10-19 52 views
0

嗨,我正在寫一個8位同步計數器的代碼,使用t_flipflops與異步清除。這裏是我的代碼:總是在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 

然而,我在if語句說

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

任何幫助,得到一個錯誤?我也可以把E和T放在靈敏度列表中以及posedge和negedge函數嗎?

回答

2

開始和結束後不需要冒號。

您不應該將E和T放入靈敏度列表中。 當時鍾改變或重置時,觸發器會做某些事情。當E或T改變時,您不希望塊被觸發。

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

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

如果在開始/結束關鍵字之後使用冒號,則需要使用標識符來關注它們。請記住,這是一個SystemVerilog功能(請參閱IEEE Std 1800-2012,第9.3.4節「塊名稱」)。例如,你可以命名塊dff

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 

命名你的模塊是可選的。在end關鍵字之後使用名稱也是可選的。

此外,我認爲你應該在你的端口聲明中將D更改爲T。正如另一個答案所說的,你不應該在敏感列表中使用E或T.