我的项目最终编译成功,没有错误,但是警告“饥渴且数量众多”。例如,我有这行:
i_temp_reg <= {{SPI_WIDTH{'b0}}, i_temp_reg[BANK_DATA_WIDTH-1:SPI_WIDTH]};
Run Code Online (Sandbox Code Playgroud)
我将参数定义为:
parameter SPI_WIDTH = 8;
parameter BANK_DATA_WIDTH = 32;
Run Code Online (Sandbox Code Playgroud)
顾名思义,i_temp_reg是一个寄存器。我还有更多类似的语句(相同的格式,不同的寄存器),并且所有这些语句都会出错:
Concatenation with unsized literal; will interpret as 32 bits
Run Code Online (Sandbox Code Playgroud)
但是我认为我已经很清楚地指定了此字面量('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.
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我准确地确定我在做什么错,我将不胜感激。
'b0实际上,它是数字零的无大小文字,以二进制形式指定。如果要指定宽度,则应在文字前面加上前缀。
1'b0 // single bit 0
1'b1 // single bit 1
4'b1001 // 4 bits, value = 9
Run Code Online (Sandbox Code Playgroud)
在生成警告的代码中,您有:
{SPI_WIDTH{'b0}}
Run Code Online (Sandbox Code Playgroud)
此处使用的语法是复制运算符,其中SPI_WIDTH复制的次数'b0。复制是连接的一种特殊情况,并且由于'b0它是不定大小的文字,因此您会得到警告。
如果要复制单个位SPI_WIDTH时间,得到一个SPI_WIDTH位向量,则需要将内部值调整为单个位,正如Greg在注释中指出的那样。
{SPI_WIDTH{1'b0}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2728 次 |
| 最近记录: |