Verilog:与未大小的文本连接,但为什么?
我的项目最终编译成功,没有出现错误,但警告是“饥饿和无数”。例如,我有一行:Verilog:与未大小的文本连接,但为什么?,verilog,concat,Verilog,Concat,我的项目最终编译成功,没有出现错误,但警告是“饥饿和无数”。例如,我有一行: i_temp_reg <= {{SPI_WIDTH{'b0}}, i_temp_reg[BANK_DATA_WIDTH-1:SPI_WIDTH]}; i_temp_reg是一个寄存器,顾名思义。我还有几个类似的语句(相同的格式,不同的寄存器),它们都有错误: Concatenation with unsized literal; will interpret as 32 bits 但我认为我已经非常清
i_temp_reg <= {{SPI_WIDTH{'b0}}, i_temp_reg[BANK_DATA_WIDTH-1:SPI_WIDTH]};
i_temp_reg是一个寄存器,顾名思义。我还有几个类似的语句(相同的格式,不同的寄存器),它们都有错误:
Concatenation with unsized literal; will interpret as 32 bits
但我认为我已经非常清楚地指定了这个文本的大小(“b0”)。怎么了,Verilog?我必须在这里说,我通常使用VHDL,我对它相当满意,这种疯狂的语言让我有点疯狂。我把这个字的大小弄糟了吗
其次,有点相关,我有另一个问题。以下是相关声明和警告:
output [BANK_SIZE-1:0] wAddr;
reg [BANK_SIZE-1:0] i_wAddr;
assign w_Addr = i_wAddr;
Warning: Result of 4-bit expression is truncated to fit in 1-bit target.
如果有人能帮我准确地找出我做错了什么,我会非常感激的。
'b0
确实是一个不加大小的数字0,用二进制指定。如果要指定宽度,则应以文字为前缀
1'b0 // single bit 0
1'b1 // single bit 1
4'b1001 // 4 bits, value = 9
在生成警告的代码中,您有:
{SPI_WIDTH{'b0}}
这里使用的语法是复制操作符,其中SPI_WIDTH
是复制'b0
的次数。复制是连接的一种特殊情况,因为'b0
是一个未大小的文本,所以会出现警告
如果要复制单个位的SPI_WIDTH
次,从而产生SPI_WIDTH
位的向量,则需要将内部值调整为单个位,正如Greg在注释中指出的那样
{SPI_WIDTH{1'b0}}
'b0
实际上是以二进制指定的数字0的无大小文本。如果要指定宽度,则应以文字为前缀
1'b0 // single bit 0
1'b1 // single bit 1
4'b1001 // 4 bits, value = 9
在生成警告的代码中,您有:
{SPI_WIDTH{'b0}}
这里使用的语法是复制操作符,其中SPI_WIDTH
是复制'b0
的次数。复制是连接的一种特殊情况,因为'b0
是一个未大小的文本,所以会出现警告
如果要复制单个位的SPI_WIDTH
次,从而产生SPI_WIDTH
位的向量,则需要将内部值调整为单个位,正如Greg在注释中指出的那样
{SPI_WIDTH{1'b0}}
尝试用移位寄存器替换代码:
i_temp_reg <= i_temp_reg >> SPI_WIDTH;
i_temp_reg>SPI_WIDTH;
这更加直观和可扩展。尝试用移位寄存器替换代码:
i_temp_reg <= i_temp_reg >> SPI_WIDTH;
i_temp_reg>SPI_WIDTH;
这更直观、更可扩展。@Mewa,您需要
{SPI_WIDTH{1'b0}}
1'b0
,而不是'b0
@Mewa,你想要{SPI\u WIDTH{1'b0}}
<代码>1'b0,而不是'b0