2

我正在使用具有异步清除功能的 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 )

有什么帮助吗?另外,我可以将ET与 posedge 和 negedge 函数一起放在敏感度列表中吗?

4

2 回答 2

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也是可选的。

另外,我认为您应该在端口声明中更改DT。正如另一个答案所说,您不应在敏感度列表中使用 E 或 T。

于 2013-10-19T21:41:07.467 回答
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
于 2013-10-19T21:19:11.993 回答