位宽一定要对齐,要不害死人
时间:10-02
整理:3721RD
点击:
以前一直觉得VHDL规则这么多,一点都没verilog灵活好用,昨天调试pcie接口时遇到的一个问题让我真真切切的感觉到了规则的威力
synplify下综合下面两种表述的结果是不一样的
表述1:
if((waddr-raddr) <= 1)
alempty = 1'b1;
else
alempty = 1'b0;
表述2:
if((waddr-raddr) <= 6'd1)
alempty = 1'b1;
else
alempty = 1'b0;
其中waddr和raddr均为6bit
表述1中如果waddr<raddr 例如6'h00 - 6'h3f , alempty为1的条件是不成立的
做fpga的兄弟们,任何时候位宽都要对齐啊
这种如果在vhdl中是会报错的
synplify下综合下面两种表述的结果是不一样的
表述1:
if((waddr-raddr) <= 1)
alempty = 1'b1;
else
alempty = 1'b0;
表述2:
if((waddr-raddr) <= 6'd1)
alempty = 1'b1;
else
alempty = 1'b0;
其中waddr和raddr均为6bit
表述1中如果waddr<raddr 例如6'h00 - 6'h3f , alempty为1的条件是不成立的
做fpga的兄弟们,任何时候位宽都要对齐啊
这种如果在vhdl中是会报错的
在verilog里面不会报错
以前我写VHDL,也是FIFO地址处理时,通常会加两种判断,
if (addr_a > addr_b + num) or (addr_a < addr_b && addr_a + fifo_deep > addr_b + num)
大致如此,语法现在都印象模糊了。
判断要用加法呀,怎么用减法呢
又不是有符号数
