数码管动态扫描设计与验证

1 实验现象:在Quartus II中,使用In system sources and probes editor工具,输入需要显示在数码管上的数据,则数码管显示对应数值

2 知识点:(1)数码管动态扫描 (2)In system sources and probes editor(ISSP)调试工具的使用

(a)4输入查找表,8位输出 (b)分频模块,从系统时钟分频得到1KHz的扫描时钟     (c)8选1多路器,选择端为当前扫描的数码管位置  (d)8位循环移位寄存器sel0=0000_0001,sel1=0000_0010,左移一位。

代码段

1> 分频器:1KHz的周期是1ms,使用二分频,即50%的占空比,为500000ns,而系统时钟周期为20ns,所以计数500000/20=25000,所以计数值为15位。

// 分频计数器计数模块 
	reg [14:0]divider_cnt;//24_999
	always@(posedge Clk or negedge Rst_n)
	if(!Rst_n)
		divider_cnt <= 15'd0;
	else if(!En)
		divider_cnt <= 15'd0;
	else if(divider_cnt == 15'd24_999)
		divider_cnt <= 15'd0;
	else
		divider_cnt <= divider_cnt + 1'b1;
	
//	1K扫描时钟生成模块
	reg  Clk_1K;
	always@(posedge Clk or negedge Rst_n)	
	if(!Rst_n)
		Clk_1K <= 1'b0;
	else if(divider_cnt == 15'd24_999)
		Clk_1K <= ~Clk_1K;
	else
		Clk_1K <= ~Clk_1K;

2> 8位循环移位寄存器

	reg [7:0]sel_r;
	always@(posedge Clk_1K or negedge Rst_n)
	if(!Rst_n)
		sel_r <= 8'b0000_0001;
	else if(sel_r == 8'b1000_0000)
		sel_r <= 8'b0000_0001;
	else
		sel_r <= sel_r <<1;

3> 8选1多路选择器

	reg data_tmp[3:0];
	always@(*)
		case(sel_r)
			8'b0000_0001:data_tmp = disp_data[3:0];
			8'b0000_0010:data_tmp = disp_data[7:4];
			8'b0000_0100:data_tmp = disp_data[11:8];
			8'b0000_1000:data_tmp = disp_data[15:12];
			8'b0001_0000:data_tmp = disp_data[19:16];
			8'b0010_0000:data_tmp = disp_data[23:20];
			8'b0100_0000:data_tmp = disp_data[27:24];
			8'b1000_0000:data_tmp = disp_data[31:28];
			default:data_tmp = 4'b0000;
		endcase	

4> 查找表

	always@(*)
		case(data_tmp)
			4'h0:seg = 7'b1000000;
			4'h1:seg = 7'b1111001;
			4'h2:seg = 7'b0100100;
			4'h3:seg = 7'b0110000;
			4'h4:seg = 7'b0011001;
			4'h5:seg = 7'b0010010;
			4'h6:seg = 7'b0000010;
			4'h7:seg = 7'b1111000;
			4'h8:seg = 7'b0000000;
			4'h9:seg = 7'b0010000;
			4'ha:seg = 7'b0001000;
			4'hb:seg = 7'b0000011;
			4'hc:seg = 7'b1000110;
			4'hd:seg = 7'b0100001;
			4'he:seg = 7'b0000110;
			4'hf:seg = 7'b0001110;
		endcase

5> 2选1多路器

assign sel = (En)?sel_r : 8'b0000_0000;

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值