繁体   English   中英

枚举可以在 systemverilog 中输出吗?

[英]Can enum be made an output in systemverilog?

在verilog中,我可以做这样的事情:

module controller (
    input rstb, clk, start,
    output reg [1:0] state, next_state
);
    parameter S_idle = 2'b00, S_1 = 2'b01, S_2 = 2'b11;

    always @ (posedge clk, negedge rstb)
    begin
        if (!rstb) state <= S_idle;
        else state <= next_state;
    end
...
endmodule

但是在 systemverilog 中,这会产生一个错误,因为我声明了state, next_state两次:

module controller (
    input rstb, clk, start,
    output logic [1:0] state, next_state
);
    enum logic [1:0] {S_idle, S_1, S_2} state, next_state;

    always_ff @ (posedge clk, negedge rstb)
    begin
        if (!rstb) state <= S_idle;
        else state <= next_state;
    end
...
endmodule

我想我可以将我的输出端口重命名为state_out, next_state_out并将它们分配给state, next_state 有没有更简单的方法来使用枚举作为输出?

当使用用户定义的类型时,你应该使用typedef并将它们放在一个包中,以便它们可以在使用它们的模块之间共享。 否则,您会遇到类型不兼容分配错误。

package stuff;
  typedef enum logic [1:0] {S_idle, S_1, S_2} state_t;
endpackage


module controller import stuff::*; (
        input logic rstb, clk, start,
        output state_t state, next_state
    );
        always_ff @ (posedge clk, negedge rstb)
        begin
            if (!rstb) state <= S_idle;
            else state <= next_state;
        end
    ...
 endmodule

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM