zoukankan      html  css  js  c++  java
  • 一个关于拼接符“{}”的问题

    首先附上一段程序,如下:

    module led_test(
    	output	[2:0]	o_led_display,
    	input			i_sys_clk,
    	input			i_sys_reset,
    	input			i_key1,
    	input			i_key2,
    	input			i_key3
        );
    
    	reg	[24:0]		cnt_num;
    	reg	[2:0]		led_display;
    	wire	[2:0]	key;
    	
    always @ (posedge i_sys_clk or posedge i_sys_reset) begin
    	if(i_sys_reset)
    		cnt_num <= 25'd0;
    	else
    		cnt_num <= cnt_num + 1;
    end
    
    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
    		case(key)
    			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};
    		endcase
    	end
    end
    
    assign o_led_display = led_display;
    
    endmodule

    代码运行环境: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 with unsized literal; 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 with unsized literal; 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
    		case(key)
    			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};
    		endcase
    	end
    end

    在此写出这个小细节引发的问题,以供以后写程序的时候注意表述的严密完整,不再犯同样的错误。

  • 相关阅读:
    node 安装及环境配置
    vue 多级嵌套组件的通信方式
    uniapp 直播(推流)
    css3 弹出层居中(防止穿透滚动)
    uniapp App打开没有关掉后台,去查看其它东西一段时候回来后,页面会变空白
    uniapp 根据给定的经纬度、地址address,调取地图导航
    208道面试题,答案
    十分钟了解单元测试
    异常处理的一些见解
    MySQL(MariaDB)常用DOM命令
  • 原文地址:https://www.cnblogs.com/icelyb24/p/2178043.html
Copyright © 2011-2022 走看看