2013-10-19 93 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.