2017-08-29 140 views
0

我目前试图以定义包含一个8比特的无符号寄存器中的新的数据结构对象使用的TypeDef SystemVerilog中吨索引对象和32位整数签署但我不断收到错误:的SystemVerilog的TypeDef能;具有零个包装或未包装阵列尺寸

错误(10053):在UART.v Verilog HDL语言错误(35):不能索引对象的“数据”零个包装或未包装阵列尺寸

我已经重新创建一个下面的简单实现,其中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。

回答

2

您声明data作为解压结构 - 你不能访问它作为一个整体打包数组。要么改变你的任务的struct的解压成员:

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

或更改typedef定义包装结构

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