始终在Verilog中陈述

时间:2013-10-19 18:06:15

标签: verilog

嘿,我正在使用带异步清除的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函数一起放在敏感列表中吗?

2 个答案:

答案 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.