【发布时间】:2018-07-12 08:05:21
【问题描述】:
Quartus 编译这段代码没有任何错误。
代码.sv
module test013_LITERAL (
input A,
input B,
output C
);
struct{enum{IDLE,
SOME_STAGE_1} FSM;
logic some_register;
} first_machine;
struct{enum{IDLE,
SOME_STAGE_2} FSM;
logic some_register;
} second_machine;
assign C = A ^ B;
endmodule
testbench.vt
module testbench();
reg test_A;
reg test_B;
wire test_C;
test013_LITERAL DUT (.A(test_A),
.B(test_B),
.C(test_C));
initial begin
#100
test_A = 0;
test_B = 0;
#100
test_A = 1;
test_B = 0;
#100
test_A = 0;
test_B = 1;
#100
test_A = 1;
test_B = 1;
end
endmodule
但 ModelSim-Altera 显示错误:“枚举文字名称 'IDLE' 已存在。”
我可以在 SystemVerilog 上在一个模块中编写两个结构,然后在每个结构中使用相同的文字(例如“IDLE”)进行枚举吗?另一个结构是否意味着另一个作用域?
如果没有,谁能描述结构的用途?
如果是,谁能向我描述如何赢得 ModelSim-Altera?
附言
当然,如果一个模块中有两个枚举并且如果这些枚举具有相同的成员,我们就会出错。但我说的是放在结构中的枚举。
例子:
module test013_LITERAL (
output [3:0]first_literal,
output [3:0]second_literal
);
struct{enum{SOME_LITERAL_0_FIRST,
SOME_LITERAL_1_FIRST,
IDLE,
SOME_LITERAL_3_FIRST,
SOME_LITERAL_4_FIRST} enum_reg;
} first_struct;
struct{enum{SOME_LITERAL_0_SECOND,
SOME_LITERAL_1_SECOND,
SOME_LITERAL_2_SECOND,
IDLE,
SOME_LITERAL_4_SECOND} enum_reg;
} second_struct;
assign first_literal = first_struct.IDLE;
assign second_literal = second_struct.IDLE;
endmodule
在 Quartus Prime 17.1.0 (MAX-10 10M02SCE144C8G) 上编译的结果:
信息 (293000):Quartus Prime 完整编译成功。 0 个错误,32 个警告
8 个 LED 串上的结果:0010 0011
附言
我不明白 struct 是否创建了新的 not 范围。
此代码由 Quartus 和 ModelSim-Altera 编译,没有任何错误。
module test013_LITERAL (
input A,
input B,
output C
);
logic some_register;
struct{logic some_register;} first_struct;
struct{logic some_register;} second_struct;
assign C = A ^ B;
endmodule
【问题讨论】:
标签: struct enums system-verilog modelsim quartus