结构的VERILOG问题

时间:2016-04-19 16:32:22

标签: struct verilog system-verilog

我在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

1 个答案:

答案 0 :(得分:1)

Verilog不支持struct数据类型。 SystemVerilog(Verilog的继任者)确实如此。所有现代Verilog仿真器都是SystemVerilog仿真器。您可以通过将文件消失从.v更改为.sv来启用SystemVerilog 大多数模拟器都有一个编译选项来强制所有Verilog文件作为SystemVerilog,但是您需要参考手册,不建议这样做。有很多遗留的Verilog代码使用与SystemVerilog关键字(ex bitbyte)冲突的变量/网络名称。如果正确使用了文件扩展名,模拟器可以正确解析文件。

同样initial只会分配一次。在时间0之后,Over_I的值不会为Reg.Over_I。在程序块中无法分配线(输出的默认类型)(例如initial和{{1} }块)。使用always语句或将其设为assign并将其分配给(假设SystemVerilog)output regalways_comb块或Verilog always_ff块。