嘿,我正在使用带异步清除的t_flipflops编写8位同步计数器的代码。这是我的代码:
module T_ff(CLK,E,CLEAR,T,Q);
input CLK,E,CLEAR,D;
output reg Q;
always@(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函数一起放在敏感列表中吗?
答案 0 :(得分:2)
在开始和结束后你不需要冒号。
您不应将E和T放入敏感度列表中。 触发器在时钟改变或复位时执行某些操作。当E或T改变时,您不希望触发块。
module T_ff(CLK,E,CLEAR,T,Q);
input CLK,E,CLEAR,D;
output reg Q;
always@(posedge CLK or negedge CLEAR)
begin
if(~CLEAR)
Q<=1b'0;
else if (E == 1)
Q<=Q^T;
end
endmodule
答案 1 :(得分: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;
always@(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.