gpt4 book ai didi

verilog - 将枚举转换为逻辑

转载 作者:行者123 更新时间:2023-12-04 02:24:34 32 4
gpt4 key购买 nike

考虑以下模块声明:

module DFF(d, q, CLK, RESET);
parameter W = 2;
input [W-1:0] d;
input CLK;
input RESET;
output logic [W-1:0] q;

//....
endmodule

在 d 和 q 是枚举类型的情况下实例化它的正确方法是什么?这是我的枚举类型:

typedef enum logic [1:0] {ENUM_IDLE = 0,
ENUM_S1 ,
ENUM_S2
} T_STATE;

我想为 T_STATE 变量类型实例化 DFF:

T_STATE d, q;
DFF dff_inst (.d(d), .q(q), .CLK(CLK), .RESET(RESET));

这会产生编译/枚举错误。我也试过不成功:

DFF dff_inst (.d(logic'(d)), .q(logic'(q)), .CLK(CLK), .RESET(RESET));

DFF dff_inst (.d(logic[1:0]'(d)), .q(logic[1:0]'(q)), .CLK(CLK), .RESET(RESET));

我想保持 DFF 定义不变,但将枚举类型转换为逻辑。

编辑:

这一个,在 IEEE Std 1800-2012 中建议, 6.24.1, 也产生了详细说明错误:

typedef logic [$bits(T_STATE) - 1 : 0] T_STATE_LOGIC; 
DFF dff_inst (.d(T_STATE_LOGIC'(d)), .q(T_STATE_LOGIC'(q)), .CLK(CLK), .RESET(RESET));

最佳答案

d 不需要转换。

我只能用 ModelSim 重现错误,我可以访问的所有其他模拟器都没有生成任何错误或警告并且模拟正确。

对于 ModelSim,我发现这行得通:

DFF dff_inst (.q(q[1:0]), .*);

这有效:

DFF dff_inst (.q({q}), .*);

关于 here 的工作示例

关于verilog - 将枚举转换为逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896809/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com