电子设计自动化技术实训 CSH 1
CSH
2007.3
电子设计自动化技术实训 CSH 2
前 言
电子设计自动化技术实训 CSH 3
EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助 设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可靠性,减轻了设计者的劳动强度。VHDL是一门非常重要的、是目前标准化程度最高的硬件描述语言。它在1987年就被IEEE采纳为IEEE#1076标准。用其书写的源文件既是程序又是文档,既是工程技术员之间交换信息的文件,以可作为合同签约者之间的文件。
在《电子设计自动化技术》课程的理论学习中,我们已仔细地介绍了基本数字电路的VHDL描述,为进一步掌握VHDL的综合应用,通过专门实训周以加强实践操作能力。本次实训现提供以上几个数字系统综合课题供大家进行分析 练习 修改与矿。为了提高分析 实践效果,
在此只提供简单的课题框图与注释作为提示。同时将VHDL源代码给出以便对照调试之用。
电子设计自动化技术实训 CSH 4
课题1 带数字显示的秒表
一、 设计任务及要求
1、 设计一块用数码管显示的秒表。 2、 能够准确的计时并显示。 3、 开机显示00.00.00。
4、 用户可随时清零、暂停、计时。
5、 最大计时59分钟,最小精确到0.01秒。
二、 可选器件
EPM130208-2、共阴极七段数码管、发光二极管、按键开关、电阻、电容。
三、 设计总体框图
数字显示器的秒表总体框图如图1所示。 时钟输入 分频电路
时分复用 译码显示 计时模块 图1带数字显示的秒表总体框图
四、 源程序
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity watch is
port (sel:out std_logic_vector(6downto1); ——信号。 seg:out std_logic_vector(7downto 0); ——管的输出信号。 beginstop:in std_logic;——、停止计数。 reset:in std_logic; ——复位 cp2:in std_logic);
end watch;
architecture behave of watch is
signal numl:std_logic_vector(3downto0); signal num2:std_logic_vector(3downto 0); signal num3:std_logic_vector (3 downto 0); signal num4:std_logic_vector (3 downto 0);
电子设计自动化技术实训 CSH
signal num5:std_logic_vector(3 downto 0); signal num6:std_logic_vector(3 downto 0); signal num: std_logic_vector(3 downto 0); signal numlet:std_logic_vector(2 downto 0); signal count:std_logic_vector( 17 downto 1); signal selsig:std__logic_vector(6 downto 1); signal segsig:std_logic_vector(7 downto 0); signal cp1:std_logic; signal cp3:std_logic; begin
process(cp2)——分频。 Begin
If(cp2’event and cp2=’1’)then If(count=”11000011010011111”)then
count<=”00000000000000000”;cp1<=not cp1; else count<=count+1; end if; end if;
cp3<=count(10); end process;
process(cp1)——计数控制。 Begin
If reset=’1’ then num1(3downto 0)<=”0000”; Num2(3downto 0)<=”0000”; Num3(3downto 0)<=”0000”; Num4(3downto 0)<=”0000”; Num5(3downto 0)<=”0000”; Num6(3downto 0)<=”0000”; Else if cp1’event and cp1=’1’ then If biginstop=’1’ then num1<=num1+1; If num1(3downto 0)=”1001” then
Num1 (3downto 0)<=”0000”;num2<=num2+1; If num2(3downto 0)=”1001” then
Num2(3 downto 0)<=”0000”;num3=num3+1; If num3(3downto 0)=”1001” then
Num3(3downto 0)<=”0000”;unm4<=num4+1; If num4(3downto 0)=”0101”then
Num4(3downto0)<=”0000”;num5<=num5+1; If num5(3downto 0)=”1001” then
Num5(3downto 0)<=”0000” ;num6=num6+1;
5