2017-08-29 5 views
0

Je tente actuellement d'utiliser TypeDef dans SystemVerilog afin de définir un nouvel objet de structure de données contenant un registre non signé de 8 bits et un entier signé de 32 bits mais l'erreur persiste:SystemVerilog TypeDef Can; t index objet avec zéro dimension de tableau compressé ou non compressé

erreur (10053): erreur Verilog HDL à UART.v (35): ne peut pas l'objet d'index "données" avec zéro dimensions tableau emballés ou déballés

J'ai recréé un implémentation simple ci-dessous où topLevelModule installe un lowLevelModule qui détermine les valeurs de l'entier et du registre non signé de 8 bits dans lequel la structure est composée de et les sort dans topLevelModule. En utilisant un module UART séparé, j'essaye d'envoyer cette structure/objet (qui a une longueur de 40 bits) à un ordinateur hôte - pour simplifier le code ci-dessous, j'ai omis ce module et omis la majorité du code non associé .

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 

Toute aide serait grandement appréciée, je ne sais pas si j'ai utilisé TypeDef dans le bon manoir.

Répondre

2

Vous avez déclaré data comme structure décompressée - vous ne pouvez pas y accéder en tant que matrice groupée intégrale. Modifiez vos missions aux membres non emballés de la struct:

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

Ou changer votre typedef pour définir une struct emballé

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