一个党员个人问题整改清单接着一个党员个人问题整改清单

首先附上一段程序,如下:
module led_test(
output [2:0] o_led_display,
i_sys_clk,
i_sys_reset,
reg [24:0]
wire [2:0]
always @ (posedge i_sys_clk or posedge i_sys_reset) begin
if(i_sys_reset)
cnt_num &= 25'd0;
cnt_num &= cnt_num + 1;
assign key = {i_key1,i_key2,i_key3};
always @ (posedge i_sys_clk or posedge i_sys_reset) begin
if(i_sys_reset)
led_display &= {0,cnt_num[24],0};
else begin
3'b100 : led_display &= {cnt_num[24],0,0};
3'b010 : led_display &= {cnt_num[23],cnt_num[22],cnt_num[21]};
3'b001 : led_display &= {0,0,cnt_num[24]};
default : led_display &= {0,cnt_num[24],0};
assign o_led_display = led_
代码运行环境:ise12.4
这是一段用按键控制的3个led闪烁的程序,但就是如上的代码,在仿真的时候总是会出如下警告:
WARNING:HDLCompiler:327 - &E:/Source_code/Xilinx_ISE_12_4/fpga_test/led_test/led_test/led_test.v& Line 50: Concatenation
will interpret as 32 bits
WARNING:HDLCompiler:327 - &E:/Source_code/Xilinx_ISE_12_4/fpga_test/led_test/led_test/led_test.v& Line 51: Concatenation
will interpret as 32 bits
觉得很奇怪,我的程序里面没有设置32bit的数据呀,为什么会提示32bit呢。
细细分析一下原来问题就处在了 {} 里面的 “0” 了,原来在拼接符中的0,如果不指定其位数,则软件会将其默认为32bit,如果这个0不在高位,那么在进行赋值的时候就会形成了将一个很多位的数据赋值给了3bit的led_display,当然会出问题 ,不仅是这些警告,就在功能仿真的时候都会功能不正确。
正确的代码应该是:
always @ (posedge i_sys_clk or posedge i_sys_reset) begin
if(i_sys_reset)
led_display &= {1'b0,cnt_num[24],1'b0};
else begin
3'b100 : led_display &= {cnt_num[24],1'b0,1'b0};
3'b010 : led_display &= {cnt_num[23],cnt_num[22],cnt_num[21]};
3'b001 : led_display &= {1'b0,1'b0,cnt_num[24]};
default : led_display &= {1'b0,cnt_num[24],1'b0};
在此写出这个小细节引发的问题,以供以后写程序的时候注意表述的严密完整,不再犯同样的错误。
阅读(...) 评论()推荐到广播
110107 人聚集在这个小组
(探险家李狗蛋)
(Stranger)
第三方登录:

我要回帖

更多关于 个人问题清单整改措施 的文章

 

随机推荐