您的位置:首页 > 其它

Zedboard---实验五点亮另一个数码管

2017-04-21 16:40 357 查看

Zedboard—实验五点亮另一个数码管

本节实验将点亮上节实验中的另一个数码管。通过频率为500kHz的ssdcat信号来选通两位数码管。开关输入将用到低位switch[3:0]和高位switch[7:4]。

计数1ms

输入时钟信号频率为100MHz,计数器计数100000个周期,产生一个脉冲。这里使用一个寄存器来实现:

integer count = 0;
reg ms_pulse = 0;
always @(posedge clk)
if (count == 99999)
begin
count <= 0;
ms_pulse <= 1;
end
else
begin
count <= count+1;
ms_pulse <= 0;
end


上述代码实现每隔1个毫秒产生一个脉冲,由此产生ssdcat信号:

always @(posedge clk)
if (ms_pulse) ssdcat <= ~ssdcat;


不要忘了初始化ssdcat为零:

initial ssdcat = 0;


如上设计,可以看到两个数码管同时显示,但是没有之前那么亮。当然,显示数字是相同的,因为驱动ssd输出值都是通过Switch[3:0]。

是两个数码管显示不同

交替显示两个数码管,同样输入也使用case语句。声明digit的4位输入:

wire [3:0] digit;


接下来设置数字显示值,并且适应位选信号:

assign digit = ssdcat? switch[3:0] : switch[7:4];


代码文件

top.v

`timescale 1ns / 1ns
module top
(
input clk,
input [7:0] switch,
output reg [7:0] led,
output reg [6:0] ssd,
output reg ssdcat
);

always @(posedge clk) led <= switch;

wire [3:0] digit;
always @(posedge clk)
case (digit)
0: ssd <= 7'b1111110;
1: ssd <= 7'b0110000;
2: ssd <= 7'b1101101;
3: ssd <= 7'b1111001;
4: ssd <= 7'b0110011;
5: ssd <= 7'b1011011;
6: ssd <= 7'b1011111;
7: ssd <= 7'b1110000;
8: ssd <= 7'b1111111;
9: ssd <= 7'b1110011;
10: ssd <= 7'b1110111;
11: ssd <= 7'b0011111;
12: ssd <= 7'b1001110;
13: ssd <= 7'b0111101;
14: ssd <= 7'b1001111;
15: ssd <= 7'b1000111;
endcase

integer count = 0;
reg ms_pulse = 0;
always @(posedge clk)
if (count == 99999)
begin
count <= 0;
ms_pulse <= 1;
end
else
begin
count <= count+1;
ms_pulse <= 0;
end

always @(posedge clk) if (ms_pulse) ssdcat <= ~ssdcat;

assign digit = ssdcat ? switch[3:0] : switch[7:4];

endmodule


硬件效果



原文连接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数码管