EDA课程设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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; --数码管不显示

相关文档
最新文档