SystemVerilog TypeDef Can; t索引具有零打包或解包数组维度的对象

时间:2017-08-29 04:42:59

标签: verilog typedef fpga system-verilog

我目前正在尝试在SystemVerilog中使用TypeDef来定义一个包含8位无符号寄存器和32位有符号整数的新数据结构对象,但我不断收到错误:

错误(10053):UART.v(35)处的Verilog HDL错误:无法索引对象"数据"零打包或解包的数组维度

我在下面重新创建了一个简单的实现,其中topLevelModule实例是一个lowLevelModule,它确定结构由其组成的整数和8位无符号寄存器的值,并将它们输出到topLevelModule。

使用单独的UART模块我试图将此结构/对象(长度为40位)发送到主机 - 为了简化下面的代码,我省略了这个模块并省略了大部分非关联代码。

typedef struct {
            reg[7:0] identifier;
            integer currentSynapticWeight;
        } dataPacket;

module topLevel(clk, reset, UART_TXD);

    input clk; // Clock Signal
    input reset; // Reset Signal
    output UART_TXD; // Output Signal

    dataPacket data; // Instance the dataPacket Object

    lowLevelModule LLM1(clk, reset, data);

    // CODE TO DRIVE THE UART CONNECTION OMMITED

endmodule

module lowLevelModule(clk, reset, data);

    input clk; // Clock Signal
    input reset; // Reset Signal
    output dataPacket data; // Instance the dataPacket Object

    reg[7:0] someUnsigned8BitUnsignedReg = 8'b10001000;
    integer someIntegerValue = 25;

    always @(*)
        begin
            data[39:32] = someUnsigned8BitUnsignedReg;
            data[31:0]  = someIntegerValue;
        end

endmodule

任何帮助都会非常感激,我不确定我是否在正确的庄园中使用过TypeDef。

1 个答案:

答案 0 :(得分:2)

您将data声明为解压缩结构 - 您无法将其作为整数打包数组进行访问。将分配更改为结构的解压缩成员:

data.identifier = someUnsigned8BitUnsignedReg;
data.currentSynapticWeight  = someIntegerValue;

或者更改您的typedef以定义打包结构

typedef struct packed {
            reg[7:0] identifier;
            integer currentSynapticWeight;
        } dataPacket;