Verilog中的Always语句

Verilog中的Always语句,verilog,Verilog,我正在使用异步清除的t_触发器为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; en

我正在使用异步清除的t_触发器为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

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

开始和结束后不需要冒号

你不应该把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

开始和结束后不需要冒号

你不应该把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

如果在开始/结束关键字后使用冒号,则需要在其后加上标识符。请记住,这是SystemVerilog功能,请参阅第9.3.4节块名。例如,可以将块命名为dff:

为块命名是可选的。在end关键字后使用名称也是可选的


另外,我认为你应该在港口申报单中将D改为T。正如另一个答案所说,您不应该在敏感度列表中使用E或T。

如果在开始/结束关键字之后使用冒号,则需要在它们后面加上标识符。请记住,这是SystemVerilog功能,请参阅第9.3.4节块名。例如,可以将块命名为dff:

为块命名是可选的。在end关键字后使用名称也是可选的

另外,我认为你应该在港口申报单中将D改为T。正如另一个答案所说,你不应该在敏感度列表中使用E或T

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