SystemVerilog TypeDef 不能索引具有零压缩或解压缩数组维度的对象
SystemVerilog TypeDef Can;t index object with zero packed or unpacked array dimensions
我目前正在尝试在 SystemVerilog 中使用 TypeDef 来定义一个包含 8 位无符号寄存器和 32 位有符号整数的新数据结构对象,但我不断收到错误消息:
错误 (10053):UART.v(35) 处的 Verilog HDL 错误:无法索引对象 "data" 具有零压缩或解压缩数组维度
我在下面重新创建了一个简单的实现,其中 topLevelModule 实例是一个 lowLevelModule,它确定整数和 8 位无符号寄存器的值,结构由这些寄存器组成,并将它们输出到 topLevelModule。
使用单独的 UART 模块,我试图将这个 structure/object(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。
您将 data
声明为未压缩的结构 - 您无法将其作为完整的压缩数组进行访问。将您的分配更改为结构的解压缩成员:
data.identifier = someUnsigned8BitUnsignedReg;
data.currentSynapticWeight = someIntegerValue;
或者更改您的 typedef
以定义打包结构
typedef struct packed {
reg[7:0] identifier;
integer currentSynapticWeight;
} dataPacket;
我目前正在尝试在 SystemVerilog 中使用 TypeDef 来定义一个包含 8 位无符号寄存器和 32 位有符号整数的新数据结构对象,但我不断收到错误消息:
错误 (10053):UART.v(35) 处的 Verilog HDL 错误:无法索引对象 "data" 具有零压缩或解压缩数组维度
我在下面重新创建了一个简单的实现,其中 topLevelModule 实例是一个 lowLevelModule,它确定整数和 8 位无符号寄存器的值,结构由这些寄存器组成,并将它们输出到 topLevelModule。
使用单独的 UART 模块,我试图将这个 structure/object(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。
您将 data
声明为未压缩的结构 - 您无法将其作为完整的压缩数组进行访问。将您的分配更改为结构的解压缩成员:
data.identifier = someUnsigned8BitUnsignedReg;
data.currentSynapticWeight = someIntegerValue;
或者更改您的 typedef
以定义打包结构
typedef struct packed {
reg[7:0] identifier;
integer currentSynapticWeight;
} dataPacket;