电子秒表 用VHDL描述,要求如下

[复制链接]
查看11 | 回复1 | 2011-6-17 06:30:38 | 显示全部楼层 |阅读模式
功能:实现秒的计数和显示
输入信号:时钟信号clk(50Hz),开始计时信号,结束计时信号(低电平有效)
输出信号:4位数字的LED数码管(共阳极)显示码
回复

使用道具 举报

千问 | 2011-6-17 06:30:38 | 显示全部楼层
用两个60进制计数器就是了。我以前做了一个24/12小时的电子钟,其counter60如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitys_counter60is
port(clk:instd_logic;
bcd10,bcd1:bufferstd_logic_vector(3downto0);
preset:instd_logic;
co:outstd_logic);
ends_counter60;

architecturertlofs_counter60is
signalco_1:std_logic;
begin
process(clk,preset)
begin
ifpreset=\'0\'then
bcd1=\"0000\";
else
ifclk\'eventandclk=\'1\'then
ifbcd1=\"1001\"then
bcd1=\"0000\";
else
bcd1=bcd1\'1\';
endif;
endif;
endif;
endprocess;
process(clk,preset,bcd1)
begin
ifpreset=\'0\'then
bcd10=\"0000\";
co_1=\'0\';
else
ifclk\'eventandclk=\'1\'then
ifbcd1=\"1000\"andbcd10=\"0101\"then
co_1=\'1\';
elsifbcd1=\"1001\"andbcd10=\"0101\"then
bcd10=\"0000\";
co_1=\'0\';
elsifbcd1=\"1001\"then
bcd10=bcd10\'1\';
co_1=\'0\';
endif;
endif;


显示部分DISPLAY如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydisplayis
port(din0,din1,din2,din3,din4,din5:instd_logic_vector(3downto0);
clk:instd_logic;
led_sa,led_sb,led_sc:outstd_logic;
led_a,led_b,led_c,led_d,led_e,led_f,led_g,led_dp:outstd_logic);
enddisplay;
architecturebehavofdisplayis
signalseg:std_logic_vector(6downto0);
signalsel:std_logic_vector(2downto0);
signalnum:std_logic_vector(3downto0);
signals:std_logic_vector(2downto0);
begin
led_sa=sel(0);
led_sb=sel(1);
led_sc=sel(2);
led_a=seg(0);
led_b=seg(1);
led_c=seg(2);
led_d=seg(3);
led_e=seg(4);
led_f=seg(5);
led_g=seg(6);
process(clk)
begin
ifrising_edge(clk)then
ifs=\"101\"then
s=\"000\";
elses=s\'1\';
endif;
endif;
endprocess;

process(s,din0,din1,din2,din3,din4,din5)
begin
ifs=\"000\"then
sel=\"000\";
num=din0;
led_dp=\'0\';
elsifs=\"001\"then
sel=\"001\";
num=din1;
led_dp=\'0\';
elsifs=\"010\"then
sel=\"010\";
num=din2;
led_dp=\'0\';
elsifs=\"011\"then
sel=\"011\";
num=din3;
led_dp=\'0\';
elsifs=\"100\"then
sel=\"100\";
num=din4;
led_dp=\'0\';
elsifs=\"101\"then
sel=\"101\";
num=din5;
led_dp=\'0\';
elsesel=\"XXX\";
num=\"XXXX\";
led_dp=\'0\';
endif;
endprocess;
seg=\"0111111\"whennum=0else
\"0000110\"whennum=1else
\"1011011\"whennum=2else
\"1001111\"whennum=3else
\"1100110\"whennum=4else
\"1101101\"whennum=5else
\"1111101\"whennum=6else
\"0000111\"whennum=7else
\"1111111\"whennum=8else
\"1101111\"whennum=9else
\"1110111\"whennum=10else
\"1111100\"whennum=11else
\"0111001\"whennum=12else
\"1011110\"whennum=13else
\"1111001\"whennum=14else
\"1110001\"whennum=15else
\"0000000\";
end;

可以参考,功能端和原件例化自己解决吧,如果还有什么问题,可以通过电子邮件联系。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行