我在Verilog中使用struct时遇到了一个未解决的问题。
这是我的代码:
//Other technic
//typedef struct{bit Over_I;}reg_type;
// Code
module Overload(rst_n,clock,vlowp,IHigh,Over_I);
// Port declaration
input rst_n,clock,vlowp,IHigh;
output Over_I;
reg S_NOM = 0;
reg S_OVL = 1;
struct{
reg Over_I;
} reg_type;
reg_type Reg,NextReg;
initial
begin
Over_I = Reg.Over_I;
end
我尝试在模块外部使用typedef但没有成功。
控制台提供的错误是:
"错误:HDLC编译器:806 - " C:/....../ Lattice_tests / Test_Verilog / sources / overload_test.v"第26行:" {"。
附近的语法错误第26行是我定义struct的行。
如果有人可以帮助我,我将不胜感激。 谢谢。 Franckois
答案 0 :(得分:1)
Verilog不支持struct数据类型。 SystemVerilog(Verilog的继任者)确实如此。所有现代Verilog仿真器都是SystemVerilog仿真器。您可以通过将文件消失从.v
更改为.sv
来启用SystemVerilog
大多数模拟器都有一个编译选项来强制所有Verilog文件作为SystemVerilog,但是您需要参考手册,不建议这样做。有很多遗留的Verilog代码使用与SystemVerilog关键字(ex bit
和byte
)冲突的变量/网络名称。如果正确使用了文件扩展名,模拟器可以正确解析文件。
同样initial
只会分配一次。在时间0之后,Over_I
的值不会为Reg.Over_I
。在程序块中无法分配线(输出的默认类型)(例如initial
和{{1} }块)。使用always
语句或将其设为assign
并将其分配给(假设SystemVerilog)output reg
或always_comb
块或Verilog always_ff
块。