EDA课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA课程设计报告
题目:(一)设计一个自动计
数并译码显示
电子工程系
2013年5月
一、设计要求
1.计数器的计数范围为0~999;计数值显示在扫描型4位(七段)数码管上;
2.计数器带复位端Rst,从0开始计数。
3.各模块要求用VHDL语言描述。
二、设计思路
计数范围为0~999的计数器并在七段显示数码管上显示出来加法计数器的动作,每次时钟脉冲信号CLK的上升沿到来时,计数器会将计数值加1。作为计数器还应该由一个使能端EN和清零端CLR:当使能端EN为高电平“1”时,计数器开始计数;当使能端EN为低电平“0”时,计数器停止计数;清零端CLR一般由同步清零和异步清零两种,当清零端CLR为高电平“1”时有效;反之无效。
三、成员分工
四、源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bcdcounter is
port( clk, clk1,clr,en : in std_logic; --en:使能端,clr:清零端clk:
上升沿计数
Co : out std_logic; --进位标志
choice : out std_logic_vector( 2 downto 0); --用于选择数码管
data : out std_logic_vector(6 downto 0) --7段数码管);
end bcdcounter;
architecture rtl of bcdcounter is
signal q : std_logic_vector(3 downto 0);
signal q1 : std_logic_vector(3 downto 0); --个位计数器
signal q2 : std_logic_vector(3 downto 0); --十位计数器
signal q3 : std_logic_vector(3 downto 0); --百位计数器
signal count : std_logic_vector(2 downto 0);
begin
Co<='1' when (q3= "1001" and q2= "1001" and q1= "1001") else '0'; process (clk, clr, en)
begin
if clr = '1' then -- clk上升沿到来时计数
q1<= "0000"; q2<= "0000"; q3<= "0000";
elsif (clk'event and clk = '1') then
if en= '1' then
if(q3= "1001" and q2= "1001" and q1= "1001") then
q1<= "0000"; q2<= "0000"; q3<= "0000";
--q1,q2,q3都计数到9,q1,q2,q3都清零
elsif (q1="1001" and q2="1001" )then
q1<="0000"; q2<="0000";q3<=q3+1;
--q1,q2都计数到9,q1,q2清零,q3加1
elsif q1="1001"then
q1<="0000";q2<=q2+1; --q1计数到9,q1清零,q2加1
else q1<=q1+1;
end if;
end if;
end if;
end process;
------------------3进制计数器,用于选择数码管
process (clk1,count)
begin
if (clk1'event and (clk1='1'))then
if (count>"001")then
count<="000";
else
count<=count+1;
end if;
end if;
end process;
----------------数码管的选择
choice<="001"when count="000"else
"010"when count="001"else
"100";
q<=q1 when count="000"else
q2 when count="001"else
q3;
---------------数码管的显示
with q select
data <= "1111110" when "0000", --数码管显示0 "0110000" when "0001", --数码管显示1
"1101101" when "0010", --数码管显示2
"1111001" when "0011", --数码管显示3
"0110011" when "0100", --数码管显示4
"1011011" when "0101", --数码管显示5
"1011111" when "0110", --数码管显示6
"1110000" when "0111", --数码管显示7
"1111111" when "1000", --数码管显示8
"1111011" when "1001", --数码管显示9
"0000000" when others; --数码管不显示