EDA设计报告

时间:2019-05-12 03:43:32下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《EDA设计报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《EDA设计报告》。

第一篇:EDA设计报告

EDA

多 功 能 数 字 时 钟

专业:11级应用电子技术 班级:二班

学号:110372021307 姓名:贺成林 指导老师:祝宏

日期:2012年6月29日

一、实验目的

1、课程设计是一实践教学环节,是针对《数字电子技术》课程的要求,结合实践对学生进行综合设计性训练,在自学和实践训练中培养学生理论联系实践和实践动手能力,独立地解决实际问题能力。

2、通过课程设计是使学生熟悉和了解可编程专用数字逻辑电路的设计、开发流程,熟悉和了解现代EDA设计工具,掌握数字电子系统层次化的设计方法。

已知条件:MAX+Plus软件

基本功能:

1、以数字形式显示时、分、秒的时间;

2、小时计数器为24进制;

3、分秒计数器为60进制。

二、实验要求、综合应用《数字电子技术基础》课程中的理论知识去独立地完成一个设计课题;

2、熟悉和了解现代EDA设计、编程、编译、仿真及下载技术的全过程。

三、EDA 技术介绍

1、EDA 技术概况

EDA 是电子设计自动化(Electronic Design Automation)的缩写,在 20 世 纪 90 年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA 技术就是以计算机为工 具,设计者在 EDA 软件平台上,用硬件描述语言 HDL 完成设计文件,然后由计算机 自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特 定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA 技术的出现,极大地提 高了电路设计的效率和可*性,减轻了设计者的劳动强度。

2、ALTERA QUARTUS II 软件介绍

Quartus II 是 Altera 公司的综合性 PLD 开发软件,支持原理图、VHDL、VerilogHDL 以及 AHDL(Altera Hardware Description Language)等多种 设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件 配置的完整 PLD 设计流程。

四、关键词

数字计数器、动态显示、快速校分、整点报时、时段控制。

五、实验步骤

1、秒计数器是60进制的。当下面的74161到9时等下一个脉冲来是向上面的74161计数,到5时将两个74161共同预置。从而实现00—59秒的计数功能。

电路图如下:

进行编译及波形仿真,如下图: 将上述文件保存并打包,如图:

2、分计数器是60进制的。功能如秒计数器。其电路图如下:

波形图仿真及打包图如下:

3、小时计数器是24进制的。当下面的74161到9时等下一个脉冲来是向上面的74161计数。但是等到上面的记到2时下面的将不能超过4,所以等上面的记到2,下面的记到4时就将两个74161共同预置。从而实现00—24秒的计数功能。

原理图如下:

仿真的波形图及打包的文件图如下:

4、校时。校时是通过加快时分的计数速度来快速校准时间的。实际上我们把秒脉冲cps加到分计数和时计数上,是他们加快计数速度。所以其中我们需要通过开关来选择。

原理图及打包图如下:

5、时段控制:时段控制是通过7485集成电路的数据比较来控制的。

原理图及打包图如下:

6、整点报时:整点报时是通过整点时的二进制数据规律来报时的。

原理图及打包图如下:

7、将时分秒打包文件连成多功能数字电路图如下:

8、多功能数字钟硬件测试原理图如下:

9、部分制作过程图,如下:

六、实验工具

装有QuartusⅡ软件的电脑,EDA开发板,相关EDA设计方面的书籍。

七、设计中遇到问题及解决方法

1、实验后期的引脚分配及下载方法不当,实验所用电脑没有

quartus11.0 的 驱动。耗费时间较多。解决方法:参阅西安电子科技大学出版社出版的《数字电路设计及 Verilog HDL 实现》第 394 页关于引脚分配和下载验证的介绍;

2、下载验证过程中时段控制部分有错误,原代码在软件上仿真没有错误,但是下载到实验板验证时,出现错误。解决方法:通过去请教同学及查阅相关资料得到解决。

八、特点和实用性

利用 QuartusII 软件,结合所学的数字电路的知识设计一个 24 时多功能数 字钟,具有正常分、秒计时,动态显示、快速校分、整点报时、时段控制的功能。分析整个电路的工作原理,分别说明各子模块的设计原理和调试、仿真、编 程下载的过程,并对最终结果进行总结,最后提出在实验过程中出现的问题和解 决的方案。通过实验掌握一些逻辑组合器件的基本功能和用法,同时体会利用软件设计 电路的方便快捷,避免硬件布线的繁琐,提高效率。

九、心得体会

1、设计必须要有整体概念,提前熟悉软件。刚开始时没头绪,不知道该怎 样分块,进度很慢,加上对软件不是很熟悉,比如:封装要注意哪些,哪些不能 运行,哪些是不正确的操作等等,走了很多冤枉路。

2、设计的模块要分块调试,免得等所有都完工了再调试出错,那样的话很 难确定是什么出错,更加没头绪。有必要的话做一部分后就送到平台上调试,这 样会大大减少出错率。

3、没有硬件软件化的概念,开始设计时没有总体的规划,不知道什么是可行 的,什么是封装,怎样使搭配组合最优化。

4、遇到问题先自己摸索,查阅资料要有技巧,避免没有目的和思路。明白 自己要解决什么问题。同时请教老师,和同学交流。良好的沟通很重要。针对本次的毕业设计,用我国著名的数学家的话概括一下我的感受: “科学上没有平坦的大道,真理长河中有无数礁石险滩。只有不为畏攀登的采药者,只有不怕 巨浪的弄潮儿,才能登上高峰采得仙草,深入水底觅得骊珠。”

十、参阅教材及文献

1、蒋立平编著《数字电路》.南京理工大学翻印;

2、南京理工大学电子技术中心编著.《EDA 设计实验指导书》 南京理工大学,2008 年;

3、谭会生,张昌凡.《EDA 技术及应用》.西安电子科技大学出版社,2001年;

4、《数字电路设计及 Verilog HDL 实现》 西安电子科技大学出版社出版;

5、《电子线路实验设计与仿真讲义》。

第二篇:EDA数字钟设计

数字钟

一、实验目的

1、掌握多位计数器相连的设计方法。

2、掌握十进制,六进制,二十四进制计数器的设计方法。

3、掌握扬声器的驱动及报时的设计。

4、LED灯的花样显示。

5、掌握CPLD技术的层次化设计方法。

二、实验器材

1、主芯片Altera EPF10K10LC84-4。2、8个LED灯。

3、扬声器。4、4位数码显示管。5、8个按键开关(清零,调小时,调分钟)。

三、实验内容

根据电路特点,运用层次设计概念设计。将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。

1、时计时程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity hour is

port(reset,clk : in std_logic;

daout : out std_logic_vector(7 downto 0));end hour;

architecture behav of hour is

signal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);begin

p1: process(reset,clk)

begin

if reset='0' then

count<=“0000”;

counter<=“0000”;

elsif(clk'event and clk='1')then

if(counter<2)then

if(count=9)then

count<=“0000”;

counter<=counter + 1;

else

count<=count+1;

end if;

else

if(count=3)

then

counter<=“0000”;

else

count<=count+1;

count<=“0000”;

end if;

end if;

end if;

end process;

daout(7 downto 4)<=counter;daout(3 downto 0)<=count;

end behav;

2、分计时程序: library ieee;

use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity minute is

port(reset,clk,sethour: in std_logic;

daout : out std_logic_vector(7 downto 0);

enhour : out std_logic);end minute;

architecture behav of minute is

signal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);signal carry_out1 : std_logic;signal carry_out2 : std_logic;begin

p1: process(reset,clk)begin

if reset='0' then

count<=“0000”;

counter<=“0000”;

elsif(clk'event and clk='1')then

if(counter<5)then

if(count=9)then

count<=“0000”;

counter<=counter + 1;

else

count<=count+1;

end if;

carry_out1<='0';

else

if(count=9)then

count<=“0000”;

counter<=“0000”;

carry_out1<='1';

else

count<=count+1;

carry_out1<='0';

end if;

end if;end if;end process;

p2: process(clk)begin

if(clk'event and clk='0')then

if(counter=0)then

if(count=0)then

carry_out2<='0';

end if;

else

carry_out2<='1';

end if;end if;end process;

daout(7 downto 4)<=counter;daout(3 downto 0)<=count;enhour<=(carry_out1 and carry_out2)or sethour;end behav;

3、秒计时程序: library ieee;

use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity second is

port(reset,clk,setmin : in std_logic;

daout : out std_logic_vector(7 downto 0);

enmin : out std_logic);end second;

architecture behav of second is

signal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);signal carry_out1 : std_logic;signal carry_out2 : std_logic;begin

p1: process(reset,clk)begin

if reset='0' then

count<=“0000”;

counter<=“0000”;

elsif(clk'event and clk='1')then

if(counter<5)

then

if

(count=9)

then

count<=“0000”;

counter<=counter + 1;

else

count<=count+1;

end if;

carry_out1<='0';

else

if(count=9)

then

count<=“0000”;

counter<=“0000”;

carry_out1<='1';

else

count<=count+1;

carry_out1<='0';

end if;

end if;end if;end process;daout(7 downto

4)<=counter;

daout(3

downto

0)<=count;enmin<=carry_out1 or setmin;end behav;6

4、alert程序: library ieee;

use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity alert is port(clkspk : in std_logic;

second : in std_logic_vector(7 downto 0);

minute : in std_logic_vector(7 downto 0);

speak : out std_logic;

lamp : out std_logic_vector(8 downto 0));end alert;

architecture behav of alert is signal divclkspk2 : std_logic;begin p1: process(clkspk)begin

if(clkspk'event and clkspk='1')then

divclkspk2<=not divclkspk2;

end if;end process;p2: process(second,minute)begin if(minute=“01011001”)then case second is

when “01010001”=>lamp<=“000000001”;speak<=divclkspk2;when “01010010”=>lamp<=“000000010”;speak<='0';when “01010011”=>lamp<=“000000100”;speak<=divclkspk2;when “01010100”=>lamp<=“000001000”;speak<='0';when “01010101”=>lamp<=“000010000”;speak<=divclkspk2;when “01010110”=>lamp<=“000100000”;speak<='0';when “01010111”=>lamp<=“001000000”;speak<=divclkspk2;when “01011000”=>lamp<=“010000000”;speak<='0';when “01011001”=>lamp<=“100000000”;speak<=clkspk;when others=>lamp<=“000000000”;end case;end if;end process;end behav;8

5、seltime程序 library ieee;

use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity seltime is port(ckdsp : in std_logic;

reset : in std_logic;

second : in std_logic_vector(7 downto 0);

minute : in std_logic_vector(7 downto 0);

hour : in std_logic_vector(7 downto 0);

daout : out std_logic_vector(3 downto 0);

sel : out std_logic_vector(2 downto 0));end seltime;

architecture behav of seltime is signal sec : std_logic_vector(2 downto 0);begin

process(reset,ckdsp)begin

if(reset='0')then sec<=“000”;

elsif(ckdsp'event and ckdsp='1')then

sec<=“000”;else

sec<=sec+1;end if;end if;end process;

process(sec,second,minute,hour)begin case sec is

when “000”=>daout<=second(3 downto 0);when “001”=>daout<=second(7 downto 4);when “011”=>daout<=minute(3 downto 0);when “100”=>daout<=minute(7 downto 4);when “110”=>daout<=hour(3 downto 0);when “111”=>daout<=hour(7 downto 4);when others=>daout<=“1111”;end case;end process;

if(sec=“111”)then

sel<=sec;end behav;

6、deled程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;

ENTITY deled IS PORT(S: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

A,B,C,D,E,F,G,H: OUT STD_LOGIC);END deled;

ARCHITECTURE BEHAV OF deled IS

SIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DOUT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN DATA<=S;PROCESS(DATA)BEGIN

CASE DATA IS

WHEN “0000”=>DOUT<=“00111111”;WHEN “0001”=>DOUT<=“00000110”;WHEN “0010”=>DOUT<=“01011011”;WHEN “0011”=>DOUT<=“01001111”;WHEN “0100”=>DOUT<=“01100110”;WHEN “0101”=>DOUT<=“01101101”;WHEN “0110”=>DOUT<=“01111101”;WHEN “0111”=>DOUT<=“00000111”;WHEN “1000”=>DOUT<=“01111111”;WHEN “1001”=>DOUT<=“01101111”;WHEN “1010”=>DOUT<=“01110111”;WHEN “1011”=>DOUT<=“01111100”;WHEN “1100”=>DOUT<=“00111001”;WHEN “1101”=>DOUT<=“01011110”;WHEN “1110”=>DOUT<=“01111001”;WHEN “1111”=>DOUT<=“01000000”;WHEN OTHERS=>DOUT<=“00000000”;END CASE;END PROCESS;H<=DOUT(7);

G<=DOUT(6);

F<=DOUT(5);

E<=DOUT(4);D<=DOUT(3);C<=DOUT(2);B<=DOUT(1);A<=DOUT(0);END BEHAV;

7、顶层原理图:

四、实验结果 顶层原理图仿真波形:

五、心得体会

1、系统设计进要行充分的方案论证,不可盲目就动手去做;

2、实验中对每一个细节部分都要全面思考,要对特殊情况进行处理;

3、对于数字系统,要考虑同步、异步问题;

4、数字电路的理论分析要结合时序图;

5、遇到问题,要顺藤摸瓜,分析清楚,不可胡乱改动,每做一次改变都要有充分的理由;

6、模块化设计方法的优点在于其简洁性,但是在实验设计中也发现,在实验最终电路确定之前,要尽量减少模块重叠嵌套,因为在总的电路敲定之前,电路还不成熟,很多地方需要改进,如果在开始时就进行多层模块化,里层模块电路的修改将影响其外层的全部电路,这样就是牵一发动全身,很显然,这样将导致电 数字钟课程设计 电路设计的低效,所以在设计过程中,一定要尽量减少超过两层的模块;

7、遇到问题花了很长时间没有解决掉,要学会想他人请教,别人的不经意一点,可能就能把自己带出思维死区。

第三篇:EDA设计论文

EDA课程设计报告书

交通灯设计

设 计 者: 邱春华 吕云兰

指导老师: 李 敏

学 号: 09387105 09387114 专业班级:通信工程0911班

摘要………………………………………………………………………………3

1、设计任务………………………………………………………………………4

2、方案选择与论证………………………………………………………4

3、实现方案原理及说明…………………………………………………………5

4、系统设计详述…………………………………………………………………6 a、分频器的设计……………………………………………………………………6 b、控制器的设计……………………………………………………………………7 c、计数器的设计……………………………………………………………………7 d、分位译码电路的设计……………………………………………………………8 e、数码管驱动的设计——绿灯和红灯驱动………………………………………9 f、数码管驱动的设计--黄灯驱动……………………………………………9

5、程序设计………………………………………………………………………10 5.1 分频器的设计…………………………………………………………………10 5.2 控制器的设计…………………………………………………………………10 5.3 计数器的设计…………………………………………………………………11 5.4 分位译码电路的设计…………………………………………………………14 5.5数码管驱动的设计……………………………………………………………15

6、整个系统的构成及仿真图……………………………………………………17

7、心得体会………………………………………………………………………18

8、参考文献………………………………………………………………………18

语言实现交通灯的设计

作者:邱春华、吕云兰

指导老师:李 敏(湖北文理学院理工学院 襄阳 230036)

【摘要】:伴随着社会的发展以及人类生活水平的提高,汽车的数量在EDA技术的发展和应用领域的扩大与深入,EDA 技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。随着技术市场与人才市场对DEA 的不断的增加,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了。所以,设计交通灯来完成这个需求就显的越加迫切。

【关键字】:EDA技术、VHDL语言、交通灯

QuartusII 设计软件为用户提供完整的多平台设计环境,它可以轻易满足特定设计的需要。它是单芯片可编程系统(SOPC)设计的综合性环境,EDA技术作为现代电子设计技术的核心,它依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、逻辑简化、逻辑分割、逻辑综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。下面详细介绍在QUARTUS II软件环境下开发基于VHDL语言交通灯的设计。、设计任务

a、设计内容

设计一个十字路口的交通灯控制系统,用实验平台上的LED 发光二极管显示车辆通过的方向(甲车道和乙车道各一组),用数码管显示该方向的亮灯时间。

b、设计要求:

交通灯按正常状态依次点亮红、黄、绿灯,交警可以根据路口车流量的情况分别设置红、绿、黄灯持续点亮的时间。在红、绿灯点亮时,能够显示其点亮持续的时间。

2、方案选择与论证

本次实验设计交通灯设计采用自顶向下、由粗到细, 逐步分解的设计方法, 最顶层电路是指系统的整体要求, 最下层是具体的逻辑电路的实现。自顶向下的设计方法将一个复杂的系统逐渐分解成若干功能模块, 从而进行设计描述, 并且应用EDA 软件平台自动完成各功能模块的逻辑综合与优化, 门级电路的布局, 再下载到硬件中实现设计。对于交通灯来说首先是分频器、控制器、计数器、分位译码电路及数码管驱动的设计,然后能在LED中显示红、绿、黄灯的转化,并带有数码管计时功能。通过参考EDA课程设计指导书,有以下方案:

(1)、顶层文件输入端口:时钟脉冲信号、复位按键及绿灯计数器的计数范围输入端t1;输出端口:两个车道的红、绿、黄输出,及其所对应各灯所输出时间计数共16个。

(2)、底层文件分为:a.分频模块、b.计数器模块、c.控制器模块、d.分位译码模块、e.数码管驱动模块。

、实现方案原理及说明

从题目中计数值与交通灯的亮灭的关系如图(1)所示:

图(1)

交通灯控制器系统框图如图2 所示:

图(2)考虑到黄灯的作用是警示已过停车线的司机尽快离开路口,而路口总宽度不变,因此将其固定为5 秒,而红灯亮的时间等于绿灯亮的时间加上黄灯亮的时间,因此紧对绿灯点亮时间进行设置就可以同时改变红灯亮的时间,这里将绿灯所能设置的最长时间设置为40 秒即(0

4、系统设计详述

其输入及输出端口有:

clkin——输入的高频时钟脉冲; reset——复位端,高电平有效; t1——绿灯计数器的计数范围输入端;

r1、g1、y1——分别为第一车道红、绿、黄灯输出;

r1A、r1B、g1A、g1B、y1A——分别为第一车道红、绿、黄灯对应的数码管计数输出;

r2、g2、y2——分别为第二车道红、绿、黄灯输出;

r2A、r2B、g2A、g2B、y2A——分别为第二车道红、绿、黄灯对应的数码管计数输出; a、分频器的设计

分频器实现的是将高频时钟信号转换成低频的时钟信号,用于触发控制器和计数器。该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。生成的Symbol 文件如图

图(3)3 和仿真波形如图4 所示。

图(4)

b、控制器的设计

控制器的作用是根据计数器的计数值及t1 的输入数据控制发光二极管的亮、灭,以及输出正计时数值给七段数码管的分位译码电路。本控制器是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;生成的实体模块如图5 和仿真波形如图6 所 图(5)示。

图(6)

c、计数器的设计

计数器rcounter的计数范围为由t1引脚输入。计到t1 后,下一个时钟沿恢复到0,开始下一轮计数。仿真波形如图当t1 取7 时,计数器计数到7 后清零。实体模块如图7 和仿真波形如图8。计数器grounter和计数器ycounter的实体模块如图9 和图10 所示。

图(7)图(9)图(10)

图(8)

d、分位译码电路的设计

由于控制器输出的正计时数值可能是1 位或者2 位十进制数,因此在七段数码管的译码电路前要加上分位电路(即将其分成2 个1 位的十进制数,如40 分成4 和0,5分为0 和5)。与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄

图(11)存器。本电路中分位电路使用组合逻辑电路实现。生成的实体模块如图11 及仿真波形如图12。

图(12)

e、数码管驱动的设计——绿灯和红灯驱动

要求数码管共阳极连接(共阳极的公共端为低电平时,LED 不亮),在设计中为每个数码管都添加了一个驱动电路,在使用时通过调用模块来实现。本模块设计为时序逻

图(14)

辑电路,采用下降沿触发。实体模块如图14 和仿真波形如图15。

图(15)

f、数码管驱动的设计——黄灯驱动

由于黄灯固定时间是5 秒,因此变化范围是0 至5 秒,七段数码管只要能显示0-5 的数就行了,所以单独用一个数码管驱动。实体模块如图16和仿真波形如图17。图(16)

图(17)

、程序设计

5.1 分频器的设计

library ieee;use ieee.std_logic_1164.all;entity fredevider is port(clkin:in std_logic;clkout:out std_logic);end;architecture devider of fredevider is constant N:integer:=499;signal counter:integer range 0 to N;signal clk:std_logic;begin process(clkin)begin if rising_edge(clkin)then if counter=N then counter<=0;clk<=not clk;else counter<=counter+1;end if;end if;end process;clkout<=clk;end;5.2 控制器的设计

library ieee;use ieee.std_logic_1164.all;entity control is port(clk :in std_logic;c1,c2,c3:out std_logic;w1,w2,w3:in std_logic;r1,r2 :out std_logic;y1,y2 :out std_logic;g1,g2 :out std_logic;reset :in std_logic);end control;architecture a of control is type state_space is(s3,s2,s1,s0);

begin process(clk)begin if reset='1' then state<=s0;else if(clk'event and clk='1')then case state is when s0=> if w1='1' then state<=s1;end if;when s1=> if w2='1' then state<=s2;end if;when s2=> if w3='1' then state<=s3;end if;when s3=> if w2='1' then state<=s0;end if;end case;end if;end if;end process;c1<='1'when state =s0 else '0';c2<='1'when state =s1 or state =s3 else '0';c3<='1'when state =s2 else '0';r1<='1'when state =s1 or state =s0 else '0';y1<='1'when state =s3 else '0';g1<='1'when state =s2 else '0';r2<='1'when state =s2 or state =s3 else '0';y2<='1'when state =s1 else '0';g2<='1'when state =s0 else '0';end a;5.3 计数器的设计 5.3.1 绿灯计数器

library ieee;use ieee.std_logic_1164.all;

port(clk :in std_logic;enable :in std_logic;t1 :in integer range 0 to 40;c1 :out std_logic;m1 :out integer range 0 to 5);end gcounter;architecture a of gcounter is begin process(clk)variable cnt : integer range 0 to 40;begin if(clk'event and clk='1')then if enable='1'and cnt

library ieee;use ieee.std_logic_1164.all;entity rcounter is port(clk :in std_logic;enable :in std_logic;t1 :in integer range 0 to 40;c2 :out std_logic;m2:out integer range 0 to 32);end rcounter;architecture a of rcounter is constant y:Integer:=5;signal t2: integer range 0 to 45;begin process(clk)variable cnt : integer range 0 to 45;

t2<=t1+y;if(clk'event and clk='1')then if enable='1'and cnt

library ieee;use ieee.std_logic_1164.all;entity ycounter is port(clk :in std_logic;enable :in std_logic;c3 :out std_logic;m3 :out integer range 0 to 5);end ycounter;architecture a of ycounter is begin process(clk)variable cnt : integer range 0 to 5;begin if(clk'event and clk='1')then if enable='1'and cnt<5 then cnt:=cnt+1;else cnt:=0;end if;if cnt=5 then c3<='1';else c3<='0';end if;end if;

end process;end a;5.4 分位译码电路设计 5.4.1分位器-1 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY fenwei1 IS PORT(Numin:IN integer RANGE 0 TO 45;NumA,NumB:OUT Integer RANGE 0 to 9);END;ARCHITECTURE behavior OF fenwei1 IS BEGIN process(Numin)BEGIN IF Numin>=40 THEN NumA<=4;NumB<=Numin-40;ELSIF Numin>=30 THEN NumA<=3;NumB<=Numin-30;ELSIF Numin>=20 THEN NumA<=2;NumB<=Numin-20;ELSIF Numin>=10 THEN NumA<=1;NumB<=Numin-10;ELSE NumA<=0;NumB<=Numin;END IF;END PROCESS;END;5.4.2分位器-2 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY fenwei2 IS PORT(Numin:IN integer RANGE 0 TO 45;);END;ARCHITECTURE behavior OF fenwei2 IS BEGIN process(Numin)BEGIN IF Numin>=40 THEN NumC<=4;NumD<=Numin-40;ELSIF Numin>=30 THEN NumC<=3;NumD<=Numin-30;ELSIF Numin>=20 THEN NumC<=2;NumD<=Numin-20;ELSIF Numin>=10 THEN NumC<=1;NumD<=Numin-10;ELSE NumC<=0;NumD<=Numin;END IF;END PROCESS;END;5.5数码管驱动的设计 5.5.1 红绿灯驱动

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ygqudong IS PORT(clk:in STD_LOGIC;enable :in std_logic;data:IN integer RANGE 0 TO 9;segout: out STD_LOGIC_VECTOR(6 downto 0));END;ARCHITECTURE behavior OF ygqudong IS BEGIN process(Clk,data)BEGIN IF falling_edge(Clk)and enable='1' then case data is

when 1=>segout<=“0110000”;when 2=>segout<=“1101101”;when 3=>segout<=“1111001”;when 4=>segout<=“0110011”;when 5=>segout<=“1011011”;when 6=>segout<=“0011111”;when 7=>segout<=“1110000”;when 8=>segout<=“1111111”;when 9=>segout<=“1110011”;when others =>null;END CASE;END IF;END PROCESS;END;5.5.2 黄灯驱动

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hqudong IS PORT(clk:in STD_LOGIC;enable :in std_logic;data:IN integer RANGE 0 TO 5;segout: out STD_LOGIC_VECTOR(6 downto 0));END;ARCHITECTURE behavior OF hqudong IS BEGIN process(Clk,data)BEGIN IF falling_edge(Clk)and enable='1' then case data is when 0=>segout<=“1111110”;when 1=>segout<=“0110000”;when 2=>segout<=“1101101”;when 3=>segout<=“1111001”;when 4=>segout<=“0110011”;when 5=>segout<=“1011011”;when others =>null;END CASE;END IF;END PROCESS;END;

、整个系统的构成及仿真图

图(18)

图(19)

结果说明:在图18 中,绿灯计数器直接接分位译码器1,红灯计数器直接接分位译码器2,每个译码器分别接两个驱动电路,然后接输出。左边5 个驱动器接的数码管显示的是甲车道各个灯亮的时间,右边5 个驱动器接的数码管显示的是乙车道各个灯亮的时间。在19 图中可以看出甲车道绿灯亮的时间加上黄灯亮

乙车道红灯亮的时间,乙车道绿灯亮的时间加上黄灯亮的时间等于甲车道红灯亮的时间。与此同时具有灯亮时间计数显示,可以看出该系统满足我们所需的要求。

7、心得体会

一段时间的EDA课程设计,使我们学到了很多,本次课程设计的交通灯所需底层模块很多,其实现的VHDL语言程序较多,整个过程中调试程序是很重要的,要有很好的耐心,开始编译时总是会有很多错误,比如输入错误、语法错误等,发现错误之后再一遍一遍的仔细查错,直到没有错误,然后进行波型仿真。现在,对EDA 的认识有了很大的提高,能够熟练的使用QuartsII,能够用VHDL 语言编写简单的、实用的小程序,这次EDA 课程设计重点学习了交通灯部分程序的编写、调试、还有硬件下载、操作等过程。在整个课程设计的过程中,我们查阅了大量的关于EDA 的资料,特别是在网上和图书馆我找到了大量的关于硬件编程的资料。在李敏老师平时认真的授课及严格的治学态度下,让我有了一定的基础,同时还得感谢老师在实验课上的细心指导,让我们学到了很多,受益终生。

【参考文献】

[1] 潘松, 黄继业.EDA 技术实用教程[M] 第2版 北京: 科学出版社, 2006 [2] 曹昕燕,周凤臣,聂春燕.EDA技术实验与课程设计 北京:清华大学出版社,2006.5

第四篇:EDA实习报告

EDA实验报告

系别:

班级:

姓名:

学号:

目录

1.EDA介绍

2.Quartus II软件介绍

3.实习任务

4.封装引脚图

5.设计程序

6.结果显示

7.实习心得

1.EDA介绍

EDA是电子设计自动化(Electronic Design Automation)缩写。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL[1]。

几乎所有适于大学生做的数字逻辑电路实验都可以在计算机上利用EDA(Electronic Design Automatic—电子设计自动化)软件进行设计、仿真,只有极少量外部配件不能在计算机上进行仿真。因此,在实验前期阶段,即实验预习阶段的主要应用工具是EDA软件,利用EDA软件可以设计、仿真实验课题,进行虚拟实验。通过虚拟实验使实验者在进入真实实验前就能对预做的实验有相当的了解,甚至可以预测到实验的结果。这样在实际做实验时,可以把许多设计型实验的难度降低,同时能有更多的时间让实验者动手做实验,研究问题,提高实验效率。当前数字电路设计已由计算机辅助设计进入到以计算机为主的设计时代。

2.Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。

此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。

3.1 设计信号发生器使其能在仪器上显示正弦、三角、方波、锯齿波(其中的两种波形)

2设计频率计使其能测出制定波形的频率

4.波形发生器封装引脚图

5.波形发生器程序(正弦波,方波)

Boxing4

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY boxing4 IS PORT(RIN:in std_logic;

clk: IN std_logic;SINT:in std_logic_VECTOR(1 downto 0);--set:in std_logic;--_vector;--(1 downto 0);rs,rw,en,lcdon,lcdbon : OUT STD_LOGIC;YOUT:out std_logic_vector(7 downto 0);data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END boxing4;ARCHITECTURE fwm OF boxing4 IS

TYPE states IS(clear_display,set_initial,set_cgram,write_cgram,set_addram1,diaplay_cgram,set_addram2,diaplay_cgrom);--clear_display-清屏;--set_initial-初始化设置;--set_cgram-设置 cgram 地址;--write_cgram-字模写入 cgram;--set_addram1-设置显示 cgram 字符的 addram 地址;--diaplay_cgram-显示 cgram 字符;--set_addram2-设置显示 cgrom 字符的 addram 地址;--diaplay_cgrom-显示 cgrom 字符 SIGNAL state:states;TYPE ram_array0 IS ARRAY(0 TO 7)OF STD_LOGIC_VECTOR(7 DOWNTO 0);--定义 ram_array0 为二维数组

TYPE ram_array1 IS ARRAY(0 TO 7)OF ram_array0;--定义 ram_array1 为三维数组 SIGNAL lcd_clk : STD_LOGIC;SIGNAL data1,data2,data3:INTEGER RANGE 0 TO 9;--signal n:std_logic;SIGNAL net1,net2:std_logic_vector(7 downto 0);--signal net3:std_logic;

COMPONENT choice4_1

PORT(s:in std_logic_vector(1 downto 0);

d1,d2: in std_logic_vector(7 downto 0);

y: out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT fangbo PORT(clkf,rf:in std_logic;

qf:out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT sin PORT(clksin,rsin:in std_logic;

da:out std_logic_vector(7 downto 0));END COMPONENT;BEGIN u1: fangbo PORT MAP(clkf=>CLK,rf=>RIN,qf=>net1);u2: sin PORT MAP(clksin=>CLK,rsin=>RIN,da=>net2);u3: choice4_1 PORT MAP(s=>SINT,d1=>net1,d2=>net2,y=>YOUT);en <=lcd_clk;rw<= '0';lcdon<='1';lcdbon<='1';data1<=1;data2<=2;data3<=5;

PROCESS(clk)

CONSTANT m : INTEGER:=50000;--50M 分频到 1kHz。

VARIABLE cout : INTEGER RANGE 0 TO 50000000:=0;BEGIN

IF clk'EVENT AND clk='0' THEN cout:=cout+1;

IF cout<=m/2 THEN lcd_clk<='1';

ELSIF cout

ELSE cout:=0;

END IF;

END IF;

END PROCESS;

PROCESS(lcd_clk)CONSTANT cgram : ram_array1:=(--自定义 8 个 5*8 字符的字模(X“00”,X“0E”,X“00”,X“0E”,X“00”,X“1F”,X“00”,X“00”),--SAN(X“04”,X“1F”,X“04”,X“07”,X“05”,X“09”,X“13”,X“01”),--FANG(X“00”,X“1f”,X“04”,X“04”,X“17”,X“14”,X“14”,X“1f”),--ZHENG(X“0E”,X“02”,X“0E”,X“08”,X“08”,X“0e”,X“02”,X“0e”),--ZUO XIAN(X“04”,X“1E”,X“04”,X“08”,X“1e”,X“04”,X“09”,X“1f”),--YOU XIAN(X“00”,X“13”,X“0A”,X“03”,X“1a”,X“02”,X“0a”,X“13”),--ZUO BO(X“08”,X“1F”,X“09”,X“1E”,X“14”,X“08”,X“14”,X“03”),--YOU BO(X“18”,X“18”,X“07”,X“08”,X“08”,X“08”,X“07”,X“00”)--℃字符数据存储器);

VARIABLE datacnt:INTEGER RANGE 0 TO 15;

VARIABLE cnt: STD_LOGIC_VECTOR(7 DOWNTO 0);

VARIABLE num:INTEGER RANGE 0 TO 7;BEGIN--wait until net3='0';RISING_EDGE(lcd_clk);

IF RISING_EDGE(lcd_clk)THEN

--if sint=“00”then

case sint is

when “11”=>

CASE state IS

WHEN clear_display=> rs<='0';data<=“00000001”;state<=set_Initial;--清屏

WHEN set_initial=>

IF datacnt<3 THEN rs<='0';data<=“00111000”;datacnt:=datacnt+1;--设置功能:8 位,两行,5×8/每字符,重复 3 次

ELSIF datacnt=3 THEN rs<='0';data<=“00000110”;datacnt:=datacnt+1;--显示模式:完成一个字符码传送后,AC 自动加 1;显

ELSIF datacnt=4 THEN rs<='0';data<=“00001100”;datacnt:=datacnt+1;--显示控制:显示开,光标关,光标不闪烁

ELSE rs<='0';datacnt:=0;state <= set_cgram;

END IF;

WHEN set_cgram=>rs<='0';--设置 CGRAM 字符地址

data<=“01000000”+cnt;state<=write_cgram;--设置 CGRAM 字符地址 000

IF num <8 THEN cnt:=cnt+“00001000”;--设置 CGRAM 字符地址加 1

END IF;

WHEN write_cgram=> rs<='1';--在 指 定 的--CGRAM 字符地址写入对应的 8 个 5*8 字符字模

data <= cgram(num)(datacnt);datacnt:=datacnt+1;state <= write_cgram;--写入 CGRAM 字符地址 000 的 5*8--字符字模

IF datacnt=8 THEN num:=num+1;datacnt:=0;state <= set_cgram;--写入下一个自定义--的 5*8 字符字模

IF num =7 THEN num:=0;cnt:=“00000000”;state<=set_addram1;--8 个 5*8 字符字模写--入完成

END IF;

END IF;

WHEN set_addram1=>rs<='0';--设置 ADDRAM 地址 1

data<=“10000000”;state<=diaplay_cgram;

WHEN diaplay_cgram=>rs<='1';--显示 ADDRAM 地址对应的 CGRAM 字符

--if sint=“00”then

IF datacnt=0 THEN data<=X“02”;datacnt:=datacnt+1;

ELSIF datacnt=1 THEN data<=X“03”;datacnt:=datacnt+1;

ELSIF datacnt=2 THEN data <= X“04”;datacnt:=datacnt+1;

ELSIF datacnt=3 THEN data<=X“05”;datacnt:=datacnt+1;

ELSIF datacnt=4 THEN data<=X“06”;datacnt:=datacnt+1;

ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=7 THEN data<=X“46”;datacnt:=datacnt+1;

ELSIF datacnt=8 THEN data<=X“3a”;datacnt:=datacnt+1;

ELSIF datacnt=9 THEN data<=X“31”;datacnt:=datacnt+1;

ELSIF datacnt=10 THEN data<=X“30”;datacnt:=datacnt+1;

ELSIF datacnt=11 THEN data<=X“4d”;datacnt:=datacnt+1;

ELSIF datacnt=12 THEN data<=X“48”;datacnt:=datacnt+1;

ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;--显示 cgrom 中指定的

ELSIF datacnt=14 THEN data<=X“5a”;datacnt:=datacnt+1;

ELSE data<=X“20”;datacnt:=0;state <= set_addram2;

END IF;

WHEN set_addram2=>rs<='0';--设置 ADDRAM 地址 2

data<=“11000000”;state<=diaplay_cgrom;

WHEN diaplay_cgrom=>rs<='1';

IF datacnt=0 THEN data<=X“4A”;datacnt:=datacnt+1;

ELSIF datacnt=1 THEN data<=X“41”;datacnt:=datacnt+1;

ELSIF datacnt=2 THEN data<=X“43”;datacnt:=datacnt+1;

ELSIF datacnt=3 THEN data<=X“4B”;datacnt:=datacnt+1;

ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=7 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=8 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=9 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=10 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=11 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;

ELSIF datacnt=12 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data2+48,8);datacnt:=datacnt+1;

ELSIF datacnt=14 THEN data<=CONV_STD_LOGIC_VECTOR(data1+48,8);datacnt:=datacnt+1;

ELSE data<=X“56”;datacnt:=0;state <= set_addram1;

END IF;

END CASE;

--end if;

when “01”=>

--elsif sint =“01”then

CASE state IS

WHEN clear_display=> rs<='0';data<=“00000001”;state<=set_Initial;--清屏

WHEN set_initial=>

IF datacnt<3 THEN rs<='0';data<=“00111000”;datacnt:=datacnt+1;--设置功能:8 位,两行,5×8/每字符,重复 3 次

ELSIF datacnt=3 THEN rs<='0';data<=“00000110”;datacnt:=datacnt+1;--显示模式:完成一个字符码传送后,AC 自动加 1;显

ELSIF datacnt=4 THEN rs<='0';data<=“00001100”;datacnt:=datacnt+1;--显示控制:显示开,光标关,光标不闪烁

ELSE rs<='0';datacnt:=0;state <= set_cgram;

END IF;

WHEN set_cgram=>rs<='0';--设置 CGRAM 字符地址

data<=“01000000”+cnt;state<=write_cgram;--设置 CGRAM 字符地址 000

IF num <8 THEN cnt:=cnt+“00001000”;--设置 CGRAM 字符地址加 1

END IF;

WHEN write_cgram=> rs<='1';--在 指 定 的--CGRAM 字符地址写入对应的 8 个 5*8 字符字模

data <= cgram(num)(datacnt);datacnt:=datacnt+1;state <= write_cgram;--写入 CGRAM 字符地址 000 的 5*8--字符字模

IF datacnt=8 THEN num:=num+1;datacnt:=0;state <= set_cgram;--写入下一个自定义--的 5*8 字符字模

IF num =7 THEN num:=0;cnt:=“00000000”;state<=set_addram1;--8 个 5*8 字符字模写--入完成

END IF;

END IF;

WHEN set_addram1=>rs<='0';--设置 ADDRAM 地址 1

data<=“10000000”;state<=diaplay_cgram;

WHEN diaplay_cgram=>rs<='1';--显示 ADDRAM 地址对应的 CGRAM 字符

--if sint=“00”then

IF datacnt=0 THEN data<=X“01”;datacnt:=datacnt+1;

ELSIF datacnt=1 THEN data<=X“05”;datacnt:=datacnt+1;

ELSIF datacnt=2 THEN data <= X“06”;datacnt:=datacnt+1;

ELSIF datacnt=3 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=7 THEN data<=X“46”;datacnt:=datacnt+1;

ELSIF datacnt=8 THEN data<=X“3a”;datacnt:=datacnt+1;

ELSIF datacnt=9 THEN data<=X“31”;datacnt:=datacnt+1;

ELSIF datacnt=10 THEN data<=X“30”;datacnt:=datacnt+1;

ELSIF datacnt=11 THEN data<=X“4d”;datacnt:=datacnt+1;

ELSIF datacnt=12 THEN data<=X“48”;datacnt:=datacnt+1;

ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;--显示 cgrom 中指定的

ELSIF datacnt=14 THEN data<=X“5a”;datacnt:=datacnt+1;

ELSE data<=X“20”;datacnt:=0;state <= set_addram2;

END IF;

WHEN set_addram2=>rs<='0';--设置 ADDRAM 地址 2

data<=“11000000”;state<=diaplay_cgrom;

WHEN diaplay_cgrom=>rs<='1';

IF datacnt=0 THEN data<=X“4A”;datacnt:=datacnt+1;

ELSIF datacnt=1 THEN data<=X“41”;datacnt:=datacnt+1;

ELSIF datacnt=2 THEN data<=X“43”;datacnt:=datacnt+1;

ELSIF datacnt=3 THEN data<=X“4B”;datacnt:=datacnt+1;

ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=7 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=8 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=9 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=10 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=11 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;

ELSIF datacnt=12 THEN data<=X“20”;datacnt:=datacnt+1;

ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data2+48,8);datacnt:=datacnt+1;

ELSIF datacnt=14 THEN data<=CONV_STD_LOGIC_VECTOR(data1+48,8);datacnt:=datacnt+1;

ELSE data<=X“56”;datacnt:=0;state <= set_addram1;

END IF;

END CASE;

--end if;

when others =>null;

end case;

END IF;end process;END fwm;

Choice4-1

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

--程序包 entity choice4_1 is

--定义实体 port(s:in std_logic_vector(1 downto 0);

--信号选择端口s d1,d2: in std_logic_vector(7 downto 0);--d1d2d3d4分别连接四个波形发生模块

y: out std_logic_vector(7 downto 0));--定义输出信号端口 end choice4_1;architecture behav of choice4_1 is

--结构体 begin

process(s)

begin

case s is

--case when语句进行信号位的选择

when “01”=>y<=d1;

when “11”=>y<=d2;

when others=>null;

end case;end process;

--进程结束 end behav;

--结构体结束

fangbo

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fangbo is port(clkf,rf:in std_logic;qf:out std_logic_vector(7 downto 0));end entity;architecture behav of fangbo is signal a:bit;begin process(clkf,rf)--计数分频

variable cnt:integer range 0 to 256;begin if(rf='0')then a<='0';elsif clkf'event and clkf='1' then if cnt<255 then--进行分频 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;end process;process(clkf,a)--信号输出 begin if clkf'event and clkf='1' then if a='1' then qf<=“11111111”;else

qf<=“00000000”;end if;end if;end process;end behav;

sin

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sin is port(clksin,rsin:in std_logic;da:out BIT_vector(7 downto 0));end entity;architecture behav of sin is signal a:bit;begin process(clksin,rsin)--计数分频 variable cnt:integer range 0 to 256;begin if(rsin='0')then a<='0';elsif clksin'event and clksin='1' then if cnt<4 then--进行分频 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;end process;--process(clksin,a)process(a)

variable tmp:std_logic_vector(7 downto 0);variable d:BIT_vector(7 downto 0);begin--if a='0' then--d:=“00000000”;--elsif clksin'event and clksin='1' then if a'event and a='1' then if tmp=“00111111” then tmp:=“00000000”;else tmp:=tmp+1;end if;case tmp is when “00000000”=>d:=“11111111”;when “00000001”=>d:=“11111110”;when “00000010”=>d:=“11111100”;when “00000011”=>d:=“11111001”;when “00000100”=>d:=“11110101”;when “00000101”=>d:=“11101111”;when “00000110”=>d:=“11101001”;when “00000111”=>d:=“11100001”;when “00001000”=>d:=“11011001”;when “00001001”=>d:=“11001111”;when “00001010”=>d:=“11000101”;when “00001011”=>d:=“10111010”;when “00001100”=>d:=“10101110”;when “00001101”=>d:=“10100010”;when “00001110”=>d:=“10010110”;when “00001111”=>d:=“10001010”;when “00010000”=>d:=“01111100”;when “00010001”=>d:=“01100000”;when “00010010”=>d:=“01100011”;when “00010011”=>d:=“01010111”;when “00010100”=>d:=“01001011”;when “00010101”=>d:=“01000000”;when “00010110”=>d:=“00110101”;when “00010111”=>d:=“00101011”;when “00011000”=>d:=“00100010”;when “00011001”=>d:=“00011010”;when “00011010”=>d:=“00010011”;when “00011011”=>d:=“00001101”;when “00011100”=>d:=“00001000”;when “00011101”=>d:=“00000001”;when “00011110”=>d:=“00000001”;when “00011111”=>d:=“00000000”;when “00100000”=>d:=“00000000”;when “00100001”=>d:=“00000001”;when “00100010”=>d:=“00000001”;when “00100011”=>d:=“00001000”;when “00100100”=>d:=“00001101”;when “00100101”=>d:=“00010011”;when “00100110”=>d:=“00011010”;when “00100111”=>d:=“00100010”;when “00101000”=>d:=“00101011”;when “00101001”=>d:=“00110101”;when “00101010”=>d:=“01000000”;when “00101011”=>d:=“01001011”;when “00101100”=>d:=“01010111”;when “00101101”=>d:=“01100011”;when “00101110”=>d:=“01100000”;when “00101111”=>d:=“01111100”;when “00110000”=>d:=“10001001”;when “00110001”=>d:=“10010110”;when “00110010”=>d:=“10100010”;when “00110011”=>d:=“10101110”;when “00110100”=>d:=“10111010”;when “00110101”=>d:=“11000101”;when “00110110”=>d:=“11011001”;when “00110111”=>d:=“11011001”;when “00111000”=>d:=“11100001”;when “00111001”=>d:=“11101001”;when “00111010”=>d:=“11101111”;when “00111011”=>d:=“11110101”;when “00111100”=>d:=“11111001”;when “00111101”=>d:=“11111100”;when “00111110”=>d:=“11111110”;when “00111111”=>d:=“11111111”;when others=>null;end case;end if;da<=d SRL 1;--幅度调整 end process;end behav;

频率计

1、频率产生器: library ieee;use ieee.std_logic_1164.all;library lpm;use lpm.lpm_components.all;entity lpm_counter0 is port(clock: in std_logic;q: out std_logic_vector(26 downto 0));end lpm_counter0;architecture syn of lpm_counter0 is signal sub_wire0 : std_logic_vector(26 downto 0);component lpm_counter generic(lpm_direction : string;

lpm_port_updown : string;lpm_type : string;lpm_width : natural);port(clock : in std_logic;

q : out std_logic_vector(26 downto 0));end component;begin q <= sub_wire0(26 downto 0);lpm_counter_component : lpm_counter generic map(lpm_direction => “up”,lpm_port_updown => “port_unused”,lpm_type => “lpm_counter”,lpm_width => 27)port map(clock => clock,q => sub_wire0);end syn;

2、测频控制信号发生器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;--1Hz信号

tsten:out std_logic;--计数器使能信号 clr_cnt:out std_logic;--计数器清零信号 load:out std_logic);--锁存器输出控制信号 end testpl;architecture art of testpl is signal div2clk:std_logic;begin process(clk)begin if clk'event and clk='1'then div2clk<=not div2clk;--div2clk为0.5Hz end if;end process;process(clk ,div2clk)begin if(clk='0'and div2clk='0')then clr_cnt<='1';--当div2clk与clk同时为零时计数器清零 else clr_cnt<='0';--当div2clk处于的高电平时计数器计数 end if;end process;load<=not div2clk;--锁存器输出与计数器使能信号反相 tsten<=div2clk;end art;

3、有时钟使能的十进制计数器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic;--clk:计数器时钟,clr:清零信号,en:计数使能信号

q: out std_logic_vector(3 downto 0);--q:4位计数结果输出 c10: out std_logic);--计数进位 end cnt10;architecture art of cnt10 is signal cqi: std_logic_vector(3 downto 0);begin process(clk,clr)begin if clr='1' then cqi<=“0000”;--当输入的clr_cnt为低电平1时清零 elsif clk'event and clk='1' then if en='1' then--当输入的tesen为高电平1时允许计数 if(cqi<9)then cqi<=cqi+1;else cqi<=“0000”;--等于9则计数器清零 end if;--当输入的tesen为低电平0时禁止计数,锁定计数值 end if;end if;end process;--产生进位

process(cqi)begin if cqi=“1001” then c10<='1';--当加的9时产生进位输出 else c10<='0';end if;end process;q<=cqi;end art;4、16位锁存器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(load: in std_logic;--输出锁存控制信号 din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end reg16b;architecture art of reg16b is begin process(load,din)begin if load'event and load='1'then--load为高电平时teten为低电平,计数器禁止 dout<=din;--锁存输入的数据 end if;end process;end art;

5、数码管控制器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledcom is port(clk:in std_logic;--数码管扫描频率

datain: in std_logic_vector(15 downto 0);--锁存器输入的16位信号 dataout: out std_logic_vector(3 downto 0);-输出至译码器的4位信号 com: out std_logic_vector(3 downto 0));--输出数码管选择信号 end ledcom;architecture art of ledcom is signal comclk: std_logic_vector(1 downto 0);begin--comclk同扫描频率clk循环变化 process(clk)begin if rising_edge(clk)then if comclk>=3 then

comclk <=“00”;

else comclk<=comclk+1;end if;end if;end process;--数码管选择

process(comclk)begin case comclk is when “00” => com<=“1000”;when “01” => com<=“0100”;when “10” => com<=“0010”;when “11” => com<=“0001”;when others =>NULL;end case;end process;--对应数码管的输出

process(comclk,datain)begin case comclk is when “11”=> dataout<=datain(3 downto 0);when “10”=> dataout<=datain(7 downto 4);when “01”=> dataout<=datain(11 downto 8);when “00”=> dataout<=datain(15 downto 12);when others =>NULL;end case;end process;end art;

6、七段数码管的译码器 library IEEE;use IEEE.std_logic_1164.all;entity ymq is port(d_in: in std_logic_vector(3 downto 0);--数码管控制器输入四位信号

d_out: out std_logic_vector(7 downto 0));--输出8位信号 end ymq;--第8位d_out[7]为逗号 architecture art of ymq is begin process(d_in)begin case d_in is--第8位为1高电平逗号不显示 when “0000” => d_out<=“11000000”;--0 when “0001” => d_out<=“11111001”;--1 when “0010” => d_out<=“10100100”;--2 when “0011” => d_out<=“10110000”;--3 when “0100” => d_out<=“10011001”;--4 when “0101” => d_out<=“10010010”;--5 when “0110” => d_out<=“10000010”;--6 when “0111” => d_out<=“11111000”;--7 when “1000” => d_out<=“10000000”;--8 when “1001” => d_out<=“10010000”;--9 when others =>NULL;end case;end process;end art;

7、元件声明及例化将各个元器件依据设计相连 library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic;led: out std_logic_vector(7 downto 0);ledc: out std_logic_vector(3 downto 0));end lx;architecture art of lx is component lpm_counter0--待调用的频率生成器端口定义 PORT(clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(26 DOWNTO 0));end component;--十进制计数器

component cnt10--待调用的有时钟使能的十进制计数器端口定义

port(clk,clr,en: in std_logic;q: out std_logic_vector(3 downto 0);c10: out std_logic);end component;--16位锁存器

component reg16b--待调用的32位锁存器端口定义 port(load: in std_logic;din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end component;--测频控制器

component testpl--待调用的测频控制信号发生器端口定义 port(clk:in std_logic;tsten:out std_logic;clr_cnt:out std_logic;load:out std_logic);end component;--数码管选择器

component ledcom--待调用的数码管选择器端口定义 port(clk:in std_logic;datain: in std_logic_vector(15 downto 0);dataout: out std_logic_vector(3 downto 0);com: out std_logic_vector(3 downto 0));end component;--译码器

component ymq--待调用的译码器端口定义 port(d_in: in std_logic_vector(3 downto 0);d_out: out std_logic_vector(7 downto 0));end component;signal clk1,clk2,clk3: std_logic;--clk1为1Hz信号,clk2为被测信号,clk3为数码管扫描信号

signal tsten,clr,load: std_logic;signal c1,c2,c3,c4: std_logic;signal qout,rout: std_logic_vector(15 downto 0);signal datao: std_logic_vector(3 downto 0);begin u0:testpl port map(clk1,tsten,clr,load);u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1);u2:cnt10 port map(c1,clr,tsten,qout(7 downto 4),c2);u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3);u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4);u5:reg16b port map(load,qout(15 downto 0),rout);u6:ledcom port map(clk3,rout,datao,ledc);u8:ymq port map(datao,led);u9:lpm_counter0 port map(clk,q(25)=>clk1,q(15)=>clk2,q(17)=>clk3);end art;

6.结果显示

7.实习心得

第五篇:EDA实习报告

贵州师范大学学生

实习报告

科目:EDA实习

专业: 电气工程及其自动化 班级: 10电气

姓名: 李启应

学号: 101401010202

实验项目名称:数字电子钟的设计 实验项目性质:普通试验 所属课程名称:VHDL程序设计

一、实验目的 学习VHDL语言的一些基本特点。2 掌握VHDL程序的基本结构。3掌握VHDL程序设计方法。要能够用vhdl语言读懂并编写eda程序,对eda设计的总体框架能有较好的把握,掌握各模块的调用方式。

二、实验内容和要求

设计一个数字时钟,显示时(2位),分(2位),秒(2位),具体要求是:具有时分秒计数显示功能,以24小时循环计时;数码管动态显示时,分,秒;具有清零功能。

在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。

三、实验主要仪器设备和材料

计算机,开发环境MAX-PLUSII,ZY11EDA实验系统,VHDL语言。

四、实验方法、步骤及结果测试

1、设计思路:

数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分位60进制计数器,小时为24进制计数器,分别产生3位BCD码。BCD码经译码,驱动后接数码显示电路。

根据实验要求,将设计分为5个主要部分,时功能模块、分功能模块、秒功能模块、扫描仪功能模块和7段LED功能模块。在时、分、秒模块中,包括复位和预置数,其主要思路如下:

秒钟的模块:设计一个60进制的计数器,以clk为其时钟信号,每60个clk后产 生一个进位信号CF给分钟模块,作为分钟进程的响应信号。秒钟模块VHDL程序见附录1: 仿真波形如下:

封装如下图:

分钟的模块:同理于秒钟的模块,设计一个60进制的计数器,以CFM为其时钟信号,每60个CFM后产生一个进位信号CFM给小时模块,作为小时模块进程的响应信号。分钟模块VHDL程序见附录二: 仿真波形如下:

封装如下图:

小时的模块:为24进制计数器,在分的进位信号CFM的激发下计数,从0到23的时候产生一个信号CFH,全部清0,重新开始计时。小时模块VHDL程序见附录三: 仿真波形如下:

封装如下图:

扫描仪模块:在扫描仪内部,有一个3-8译码器的片选信号,当3-8译码器的片选信号为000时,片选信号选中7段LED模块中的秒的个位,当3-8译码器的片选信号为001时,片选信号选中7段LED模块中的秒的十位,当3-8译码器的片选信号为010时,片选信号选中7段LED模块中的分的个位,当3-8译码器的片选信号为011时,片选信号选中7段LED模块中的分的十位,当3-8译码器的片选信号为100时,片选信号选中7段LED模块中的时的个位,当3-8译码器的片选信号为101时,片选信号选中7段LED模块中的时的十位,就这样动态扫描,当输入的时钟信号频率很高的时候,就形成了我们的时钟。

扫描仪模块VHDL程序见附录四: 仿真波形如下:

封装如下图:

7段LED模块:根据动态扫描仪的片选信号来依次点亮我们所需的时间。7段LED模块VHDL程序见附录五: 仿真波形如下:

封装如下图: 综合以上5大模块,把它们用线连接起来就得到我们的总的电路图:如下图所示: 其工作原理为:扫描仪3-8译码器的片选信号根据时分秒的输入选中7段LED模块,然后再由时分秒中产生的3位BCD码来输出秒的个位,十位、时的个位,十位、小时的个位,十位。

4.总结:

在实验这两周的时间里,我们做过DC触发器、DQ触发器、3-8译码器、二选一电路和四选一电路等,最后综合做了数字时钟电路,通过这次实习,我对用VHDL来编程有了更深的了解,在要编程的时候,我学会了分模块进行,因为一开始的时候设计一个时钟系统比较麻烦,没有分模块之前总是会有差错,而之后思路就会比较清晰,有明确的方案,在对照书本里的编程规则与语句,就完成了这次的设计,总之就是获益良多。附录1:秒钟模块VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port(clk,reset:in std_logic;cf:out std_logic;second1_out:out std_logic_vector(3 downto 0);second10_out:out std_logic_vector(2 downto 0));end entity second;architecture one of second is signal second1n:std_logic_vector(3 downto 0);signal second10n:std_logic_vector(2 downto 0);begin second1_out<=second1n;second10_out<=second10n;process(clk,reset)begin if(reset='1')then second1n<=“0000”;second10n<=“000”;elsif(clk' event and clk='1')then if(second1n=“1001”)then 7 second1n<=“0000”;if(second10n=“101”)then second10n<=“000”;cf<='1';else second10n<=second10n+1;end if;else second1n<=second1n+1;end if;end if;end process;end architecture one;附录二:分钟模块VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port(clk,reset:in std_logic;cf:out std_logic;minute1_out:out std_logic_vector(3 downto 0);minute10_out:out std_logic_vector(2 downto 0));end entity minute;architecture one of minute is signal minute1n:std_logic_vector(3 downto 0);signal minute10n:std_logic_vector(2 downto 0);begin minute1_out<=minute1n;minute10_out<=minute10n;process(clk,reset)begin if(reset='1')then minute1n<=“0000”;minute10n<=“000”;elsif(clk' event and clk='1')then if(minute1n=“1001”)then minute1n<=“0000”;if(minute10n=“101”)then minute10n<=“000”;cf<='1';else minute10n<=minute10n+1;end if;else minute1n<=minute1n+1;end if;end if;end process;end architecture one;附录三:小时模块VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port(clk,reset:in std_logic;hour1_out:out std_logic_vector(3 downto 0);hour10_out:out std_logic_vector(1 downto 0));end entity hour;architecture one of hour is signal hour1n:std_logic_vector(3 downto 0);signal hour10n:std_logic_vector(1 downto 0);begin hour1_out<=hour1n;hour10_out<=hour10n;process(clk,reset)begin if(reset='1')then hour1n<=“0000”;hour10n<=“00”;elsif(clk' event and clk='1')then if(hour1n=“1001”or(hour1n=“0011”and hour10n=“0010”))then hour1n<=“0000”;if(hour10n=“10”)then hour10n<=“00”;else hour10n<=hour10n+1;end if;else hour1n<=hour1n+1;end if;end if;end process;end architecture one;附录四:扫描仪模块VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity saomiaoyi is port(clk:in std_logic;reset:in std_logic;second1,minute1,hour1:in std_logic_vector(3 downto 0);second_10,minute_10:in std_logic_vector(2 downto 0);hour_10:in std_logic_vector(1 downto 0);dataout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end entity saomiaoyi;architecture one of saomiaoyi is signal count:std_logic_vector(2 downto 0);begin sel<=count;process(clk,reset)begin if(reset='1')then dataout<=“0000”;elsif(clk'event and clk='1')then if count>=“101” then count<=“000”;else count<=count+1;end if;end if;case count is when“000”=>dataout<=second1;when“001”=>dataout<='0'& second_10;when“010”=>dataout<=minute1;when“011”=>dataout<='0'& minute_10;when“100”=>dataout<=hour1;when others =>dataout<=“00”& hour_10;end case;end process;end architecture one;

附录五:7段LED模块VHDL程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY led_7 IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END entity led_7;ARCHITECTURE one OF led_7 IS BEGIN PROCESS(A)BEGIN CASE A(3 DOWNTO 0)IS WHEN “0000” => LED7S <= “0111111”;--X“3F” 0 WHEN “0001” => LED7S <= “0000110”;--X“06” 1 WHEN “0010” => LED7S <= “1011011”;--X“5B” 2 WHEN “0011” => LED7S <= “1001111”;--X“4F” 3 WHEN “0100” => LED7S <= “1100110”;--X“66” 4 WHEN “0101” => LED7S <= “1101101”;--X“6D” 5 WHEN “0110” => LED7S <= “1111101”;--X“7D” 6 WHEN “0111” => LED7S <= “0000111”;--X“07” 7 WHEN “1000” => LED7S <= “1111111”;--X“7F” 8 WHEN “1001” => LED7S <= “1101111”;--X“6F” 9 WHEN OTHERS => NULL;END CASE;END PROCESS;END ARCHITECTURE one;

下载EDA设计报告word格式文档
下载EDA设计报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    EDA实习报告

    电子设计自动化技术EDA实习报告 目录 引 言 (1)EDA简介 (2)EDA的设计流程 第一章实训目的 第二章 实训内容 一、EDA 开发软件Max+plus II 或Quartus II 1.1基本原理 1.2条件......

    EDA课程 跑马灯设计

    EDA目录 第一章 设计思路 ..............................................................................................................................................

    跑马灯设计EDA课程设计

    第一章 设计内容与设计方案 1.1课程设计内容 控制8个LED进行花样性显示。 设计4种显示模式:s0,从左到右逐个点亮LED;s1,从右到左逐个点亮LED;s2,从两边到中间逐个点亮LED;s3,从中见......

    EDA万年历课程设计报告

    《EDA技术及其应用》 实 训 报 告 班 级 姓 名 学 号 指导教师 目 录 一 设计要求 ...................................... 2 1.0 设计目的及意义 ...........................

    EDA课程设计报告(大全5篇)

    时 间 学 院 专业班级 姓 名 学 号 教 师 成 绩 北京科技大学——自1105班——王玮——41151133 EDA课程设计报告 2013年12月 北京科技大学——自1105班——王玮——4115......

    EDA实训报告

    《EDA技术及其应用》 实 训 报 告 班 级 08级电子信息工程技术2班 姓 名 学 号 指导教师 2010年 5 月 26 日 郑州信息科技职业学院 机械电子工程系 目录 一、 实训名称„„......

    EDA综合实验设计报告

    Beijing Jiaotong University EDA实验设计报告 指导老师:刘彪 学院:电子信息工程学院 姓名:黄家维 学号:13213012 班级:电子1301 实验地点:电气楼406 实验日期:2014年5月29日星......

    基于EDA的自动售货机系统的设计 开题报告

    毕业设计开题报告 课题名称:基于学院: 专业: EDA的自动售货机系统的设计 电子电气工程学院 电子信息工程 一 自动售货机设计简介 自动售货是20世纪70年代在日本、欧美发展起来......