这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » LED 移位显示问题,菜鸟再次请教各位大大

共3条 1/1 1 跳转至

LED 移位显示问题,菜鸟再次请教各位大大

助工
2014-04-09 21:52:24     打赏

自己尝试写了一个4位的LED 移位显示工程,可是Modelsim 的LED 输出一直是初始状态4'b1111,尝试配置到开发板里面之后,却又只能循环显示3个LED。

经过各位大大指点之后,把之前的阻塞,非阻塞赋值的混乱及时改过来了,可是还是不能解决无法4个LED移位显示的功能。

只有把 led 改成5位的register才能做到4位的LED移位显示,可是这样不是浪费了register资源么?请教各位大大还有哪里出了问题?谢谢

源代码:

module led_shift(sys_clk       ,
				   sys_rstn      ,
				   led
				   );
//
input              sys_clk       ;
input              sys_rstn      ;
output    [3:0]    led           ;
//
reg       [3:0]    led           ;
reg       [24:0]   delay_cnt     ;
//
always@(posedge sys_clk or negedge sys_rstn)
	begin
		if(!sys_rstn)
			delay_cnt<=25'd0;
		else if(delay_cnt==25'd24999999)
			delay_cnt<=25'd0;
		else
			delay_cnt<=delay_cnt+1'b1;	
	end
always@(posedge sys_clk or negedge sys_rstn)
	begin
		if(!sys_rstn)
			led <=4'b1111;
		else if(delay_cnt==25'd24999999)
			led <= led << 1;
		else if(led == 4'b0000)
			led <= 4'b1111;
		else
			led <=led;	
	end
endmodule 

 改了之后能够正常4位显示的工程源代码如下:

module led_shift(sys_clk       ,
				   sys_rstn      ,
				   led
				   );
//
input              sys_clk       ;
input              sys_rstn      ;
output    [4:0]    led           ;
//
reg       [4:0]    led           ;
reg       [24:0]   delay_cnt     ;
//
always@(posedge sys_clk or negedge sys_rstn)
	begin
		if(!sys_rstn)
			delay_cnt<=25'd0;
		else if(delay_cnt==25'd24999999)
			delay_cnt<=25'd0;
		else
			delay_cnt<=delay_cnt+1'b1;	
	end
always@(posedge sys_clk or negedge sys_rstn)
	begin
		if(!sys_rstn)
			led <=5'b11111;
		else if(delay_cnt==25'd24999999)
			led <= led << 1;
		else if(led == 5'b00000)
			led <= 5'b11111;
		else
			led <=led;	
	end
endmodule 

 






关键词: 移位     显示     请教    

高工
2014-04-10 08:38:00     打赏
2楼
我已经在楼主上一个帖子说了我的理解,楼主可以去看看。估计问题就是我说的那个

助工
2014-04-10 20:08:03     打赏
3楼
谢谢您的指点,我试一下

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]