在日常学习、工作或生活中,大家总少不了接触作文或者范文吧,通过文章可以把我们那些零零散散的思想,聚集在一块。范文怎么写才能发挥它最大的作用呢?以下是我为大家搜集的优质范文,仅供参考,一起来看看吧
eda实验数字频率计的设计 eda简易时钟设计篇一
一、实验目的
1、掌握多位计数器相连的设计方法。
2、掌握十进制,六进制,二十四进制计数器的设计方法。
3、掌握扬声器的驱动及报时的设计。
4、led灯的花样显示。
5、掌握cpld技术的层次化设计方法。
二、实验器材
1、主芯片altera epf10k10lc84-4。2、8个led灯。
3、扬声器。4、4位数码显示管。5、8个按键开关(清零,调小时,调分钟)。
三、实验内容
根据电路特点,运用层次设计概念设计。将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。
1、时计时程序: library ieee;use ;use ;
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 ;use ;
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 ;use ;
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 ;use ;
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 ;use ;
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 ;use ;
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简易时钟设计篇二
简单频率计设计
物理与电子工程学院 电子信息科学与技术专业 2011级 董思林
指导教师 何传红
摘 要:随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,因此测频计常受到人们的青睐。eda技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术,其设计的灵活性使得eda技术.快速发展和广泛应用。
关键词:可编程逻辑器件;计数;分频;脉冲;扫描 引言
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得非常重要。测量频率的方法有多种,其中电子计数器测量具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内量被测信号的脉冲个数;二是间接测频法,如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频号的频率测量。本设计采用直接测频法,以quartusⅱ软件为设计平台,采用vhdl语言实现数字频率计的整体设计。伴随着集成电路(ic)技术的发展,电子设计自动化(eda)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术,它与电子技术,微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机作为工作平台,促进了工程发展。eda的一个重要特征就是使用硬件描述语言(hdl)来完成的设计文件,在电子
第 1 页(共 7 页)设计领域受到了广泛的接受。
eda技术就是以计算机为工具,设计者在eda软件平台上,有硬件描述语言vhdl完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作,最终形成集成电子系统或专业集成芯片的一门新技术。eda技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。设计原理
2.1 基本原理
数字频率计的主要功能是测量周期信号的频率。频率是单位时间(1秒)内信号发生周期变化的次数。在给定的1秒时间内对信号波形计数,并将所计数值显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,然后通过计数器计算这一段时间间隔内的方波脉冲个数并显示出来。这就是数字频率计的基本原理。
2.2 系统框图
通过测频控制信号发生器将由脉冲发生器产生的信号转换成所需要的控制信号clk1和en,待测信号计数器在en的控制下对待测信号进行测量并通过锁存与译码器在clk1的控制下按要求进行显示,大体结构如图1所示:
图2.2 系统框图
第 2 页(共 7 页)整体功能介绍
3.1 计数器设计
频率计的核心元件之一是含有时钟使能及进位扩展输出的十进制计数器。为此,这里用一个双十进制计数器器件74390和其他一些辅助元件来完成。电路框图如图3.1所示。
图3.1 含有时钟使能的2位十进制计数器
图中,74390连接成两个独立的十进制计数器,待测频率信号clk通过一个与门进入74390的计数器“1”端的时钟输入端1clka。与门的另一端由计数使能信号enb控制:当enb=1时允许计数;enb=0时禁止计数。计数器1的4位输出q[3]、q[2]、q[1] 和q[0] 并成总线表达方式,即q[3..0],由图左下角的output输出端口向外输出计数值。同时由一个4输入与门和两个反相器构成进位信号,进位信号进入第二个计数器的时钟输入端2clka。第二个计数器的4位计数输出是q[7]、q[6]、q[5] 和q[4],总线输出信号是q[7..4].这两个计数器的总得进位信号,可由一个6输入与门和两个反相器产生,由cout输出。clr是计数器的清零信号。对图3.1所示电路进行仿真,其波形图如下图3.1.1所示。
第 3 页(共 7 页)
图3.1.1 仿真波形图
3.2 时序控制电路设计
欲使电路能自动测频,还需增加一个测频时序控制电路,如图3.2所示。该电路由三部分组成:4位二进制计数器7493、4-16译码器74154和两个由双与非门构成的rs触发器。
图3.2 测频时序控制电路
3.3 时钟分频模块设计
由于设计中利用了一个50mhz的时钟信号输入,需要将其分频为合适的频率供给本设计中的各个模块。其程序代码如下:
module clk_div(clk,divclk);input clk;
output divclk;
reg divclk;
reg [div_width-1:0]counter;
parameter div_num = 500000;
parameter div_width = 19;
//时钟偶数分频模块
//定义输入时钟 //定义输出时钟 //定义寄存器
//定义计数寄存器 //参数,定义分频参数
//参数,定义分频参数占用的位宽
第 4 页(共 7 页)always @(posedge clk)
//分频过程
begin
if(counter ==((div_num>>1)-1))//注意分频数的计算公式
begin
counter <= 0;
divclk <= ~divclk;
end
else
counter <= counter + 1'b1;end endmodule
利用此代码生成元件命名为clk_div,供上层文件调用。3.4 数码管动态扫描显示驱动模块设计
本设计利用8位7段led数码管,但只需要2位,需采用动态扫描驱动,为显示频率计的结果,需要在计数器和数码管之间放置一个驱动电路模块,由于数码管的现实字符段码过于冗长,这里只作简要说明。代码总共分为三部分:第一部分是相关参数的定义和段码字符的赋值;第二部分有两个case语句,第一个case语句实现对莫一位数码管的定义,第二个case语句实现对数码管某一个段进行定义;第三部分则是对数码管具体要显示哪个字符进行初始化。3.5 顶层电路设计
将图3.1所示电路包装入库,元件名取为counter8;将图3.2所示电路包装入库,元件名取为ft_ctrl。有了counter8和ft_ctrl,就可以做成自动测频和数据显示的实用频率计了,电路如图3.5所示。图中counter8为第1步生成的2位十进制计数器模块,ft_ctrl为第2步生成的时序控制模块,只含有两个输入信号:待测频率输入信号f_in和测频控制时钟clk。时钟分频模块clk_div在此设计中被调用(例化)了3次,因为此模块采用了参数可配置的设计模式,所以调用同一个原型,通过改变参数就可以实现不同的特性,其中最上面一个时钟分频模块把50mhz分频到1024hz(参数div_num为48828,所以输出频率为50mhz/48828≈1024hz;参数div_width随div_num而变;中间一个分频模块把1024hz分频到8hz作为时序控制模块的时钟,则计数使能信号cnt_en的脉冲宽度即
第 5 页(共 7 页)为1秒,从而可使数码管直接显示f_in的频率值了;下面一个分频模块把1024hz分频到约51hz作为被测频率f_in输入到十进制计数器。
图3.5 顶层电路设计电路 设计总结
通过这次eda课程设计,我对课堂上所学到的理论知识的理解加深了许多,自己动脑、动手设计的能力也得到了较大提高。在这次课程设计的过程中,我对 vhdl 语言有了更深的认识。通过查阅相关资料和动手设计我发现我以前对 vhdl 语言的认识太过肤浅,认为 vhdl 语言只能用于设计小型的电路系统。但有了更深刻的认识之后我发现学好 vhdl 语言可以设计出大规模的、功能复杂的电路系统。以前之所以会有错误的认识是因为自己对 vhdl 语言的了解和掌握还不够。现在仔细想想,这次课程设计使得我对 vhdl 语言的理解与应用能力得到了较大的提升,也让我认识到只要深入学习,提升的空间永远是存在的。在设计的过程中我遇到了一些问题,通过查阅书本我发现了产生错误的原因并解决了问题完成了设计。经过反思我发现较大一部分错误是因为操作的不熟练造成的,这也让我明白了要保持设计的高效率必须经常练习。另一方面我第 6 页(共 7 页)也发现了动手实践的重要性。动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。只有遇到实际问题并根据自己对课堂上获得的专业知识的理解来解决才能真正的提高自己的能力。这也提醒我在平时的学习生活中不能一味埋头于课本知识,当今社会竞争越来越激烈,社会对人才的要求越来越全面,只有理论知识是远远不够的,必须靠实践作支撑。虽然此次设计完成了,但是我意识到,我对fpga 技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。因此在学习之余我们应该积极参加各种与专业知识有关的实践活动和竞赛,巩固所学的理论知识,多注重培养实际动手能力和专业技术能力,这样才能在以后的工作岗位上有所作为。
参考文献: [1] 技术实用教程-verilog hdl版(第四版).科学出版社 [2] 杨欣.电子设计从零开始(第2版),清华大学出版社 [3] 康华光.电子技术基础·模拟部分,高等教育出版社 [4] 康华光.电子技术基础·数字部分,高等教育出版社
[5] 顾斌,赵明忠,姜志鹏,马才根.数字电路eda设计,西安电子科技大学出版社
第 7 页(共 7 页)
eda实验数字频率计的设计 eda简易时钟设计篇三
工学院实验报告
姓名:黄娟
学号:32214125
班级:自动141
成绩:
实验名称:2位十进制频率计设计
一、实验目的
1.掌握eda工具quartus ⅱ的使用; 2.掌握quartus ⅱ的原理图设计流程。3.掌握2位十进制频率计设计方法。
二、2位十进制频率计设计
1、quartus ⅱ原理图设计流程
(1)计数器设计 a.设计电路原理图 b.建立工程 c.系统仿真 d.生成元件符号(2)频率计主结构电路设计(3)时序控制电路设计
(4)顶层电路设计 2、2位十进制频率计(1)原理图
工学院实验报告
(2)仿真测试结果
(2)rtl图
工学院实验报告
三、实验小结
通过这次实验,我们掌握eda工具quartus ⅱ的使用; 了解了quartus ⅱ的原理图设计流程。掌握2位十进制频率计设计方法。其中原理图中运用主线和线的命名实现连接更加简单方便。基于前面的设计基础,所以我们在搞清楚实验目的和要求之后,便开始了设计实验,而且整个过程中思路比较清晰,我们首先设计了计数器,然后将计数器封装置后,设置为可以在后边的设计电路中调用的工具文件,然后设计了2位十进制数字频率计的电路,最后经过仿真测试,实现了实验要求的功能。
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实验数字频率计的设计 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 ;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 ;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 ; 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 ;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 ;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 ;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 ;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 ;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 ;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] 潘松, 技术实用教程[m] 第2版 北京: 科学出版社, 2006 [2] 曹昕燕,周凤臣,技术实验与课程设计 北京:清华大学出版社,2006.5