2017-08-29 144 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;