EDA实验报告
姓 名: 肖敬轩
学 号:20101000639
班 级: 075102
老 师: 王巍
院 系:机电学院
实验一、3/8 译码器的实现
一. 实验目的:
1. 学习QuartusⅡ 的基本操作
2. 熟悉教学实验箱的使用
3. 设计一个3/8 译码器
4. 初步掌握VHDL语言和原理图的设计输入,编译,仿真和调试过程
二.实验说明:
1、本实验要求使用VHDL语言描述3/8译码器,并在实验平台上面实现这个译码器。描述的时候要注意VHDL语言的结构和语法,并熟悉QuartusⅡ的文本编辑器的使用方法。尝试使用不同的VHDL语言描述语句实现3/8译码器,并查看其RTL结构区别,理解不同描述方法对综合结果的影响。将程序下载到实验箱上,分别用按键和LED作为输入和输出对结果进行验证,进一步熟悉所用EDA实验箱系统。
2、所用器件:
EDA实验箱、EP1K10TC100-3器件
三.实验步骤:
按照教学课件《QUARTUS II 使用方法》,学习QuartusⅡ 软件的使用方法:
1、在WINDOWS 界面双击QuartusⅡ 图标进入QuartusⅡ环境;
2、单击File 菜单下的New Project Wizard: Introduction 按照向导里面的介绍新建一个工程并把它保存到自己的路径下面。(注意路径当中不要有中文和空格)
3、单击File 菜单下的New,选择VHDL File(原理图方式时选择Block Diagram/Schematic File),后单击OK,就能创建一个后缀名为.vhd (*.bdf)的文本(原理图)文件。此vhd文件名必须与设计实体名相同。另外,如果已经有设计文件存在,可以按File 菜单里面的Open 来选择你的文件。
4、输入完成后检查并保存,编译。
5、改错并重新编译;
6、建立仿真波形文件并进行仿真。单击File 菜单下的New,选择Vector Waveform File,单击OK,创建一个后缀名为*.vwf的仿真波形文件,按照课件上的方法编辑输入波形,保存,进行仿真,验证仿真结果是否正确;
7、选择器件及分配引脚,重新编译;
8、根据引脚分配在试验箱上进行连线,使用LED进行显示;
9、程序下载,观察实验结果并记录;
Diagram/Schematic File),后单击OK,就能创建一个后缀名为.vhd (*.bdf)的文本(原理图)文件。此vhd文件名必须与设计实体名相同。另外,如果已经有设计文件存在,可以按File 菜单里面的Open 来选择你的文件。
四.实验要求:
1、用VHDL语言编写3/8译码器(if语句,case语句,布尔方程,以及并行语句中的when??else语句,with??select??when);
2、编写3/8译码器模块的源程序,完成半加器的原理图;
3、在QuartusII 平台上仿真;
4、在实验板上面实现这个3/8译码器。
实验二、BCD七段显示译码器实验
一.实验内容:
1、写出七段译码器的工作原理;
2、用VHDL语言进行硬件描述的过程;
3、写出实验步骤;
4、画出实验原理图(或逻辑构造图),写出实验源程序;
二.实验目的:
1、了解和熟悉组合逻辑电路的设计方法和特点;
2、掌握LED显示器的工作原理;
3、设计一个BCD七段显示的译码器,并在实验箱上面实现你的译码器。
三.实验说明:
LED数码显示器是数字系统实验里面经常使用的一种显示器件,因为它经常显
示的是十进制或十六进制的数,所以我们就要对实验里面所用到的二进制数进行译 码,将它们转换成十进制的或是十六进制的数。LED数码显示器分为共阴和共阳两 种,本实验使用的是共阴的连接,高电平有效。输入信号为D0,D1,D2,D3,相应的输出8段为a、b、c、d、e、f、g、Dp。
四.实验要求:
1、 用VHDL语言进行描写;代码必须有注释 !
2、 进行波形仿真测试;
3、 严格按照实验流程进行;
4、 管脚映射按芯片要求进行,在数码管上显示译码后的数字;
5、 查看资料,描述七段译码器的工作原理;
实验三、数字钟设计
一.实验目的
1)熟练地运用数字系统的设计方法进行数字系统设计;
2)能进行较复杂的数字系统设计;
3)按要求设计一个数字钟。
二.功能设计
1)有时、分、秒计数显示功能,以24小时循环计时;
2)设置复位、清零等功能;
3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;
4)时钟计数显示时有LED灯显示;
5)具有整点报时功能。
三.性能指标
1)时、分、秒计时器:时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。
2)校时电路:当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。
总体方框图
四.详细设计
1.数字钟的基本工作原理:
由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。
2.调时、调分信号的产生
由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。
3.计数显示电路
由计数部分、数据选择器、译码器组成,是时钟的关键部分。
1、计数部分:由两个60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;24 进制的小时计数同样可用6 进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。
2、数据选择器:84 输入14 输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—’)。
3、译码器:七段译码器。译码器必须能译出‘—’,由实验二中译码器真值表可得:字母F 的8421BCD 码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。
4.设计思路
根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。
1)时钟计数:首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmin可以调整分钟,步进为1。由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT( 6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。
5)LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。
5.工程项目的编译
单击工具条上的编译符号开始编译,并随着进度不断变化,编译完成后的屏幕如图所示:
6.目标芯片的选择Assignments 选项的下拉菜单中选择器件 Device,如图:
7.时序仿真
建立波形文件:选择 File→New,在New窗中选中“Other File”标签。在出现的屏幕中选择“Vector Waveform File”项出现一新的屏幕。在出现的新屏幕中,双击“Name”下方的空白处,弹出“Insert Nod or Bus”对话框,单击该对话框的“Node Finder……”。在屏幕中的 Filter 中选择 Pins,单击“List”。而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。然后单击屏幕右上脚的 “OK”。在出现的小屏幕上单击“OK”。
设定仿真时间宽度。选择 Edit → End time…选项,在End time选择窗中选择适当的仿真时间域,以便有足够长的观察时间。
波形文件存盘。选择File→Save as 选项,直接存盘即可。
运行仿真器。在菜单中选择项,直到出现,仿真结束。
8.引脚锁定
将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:
1.选择 Assignments → Assignments Editor ,即进入 Assignments Editor编辑器。在Category 栏选择 Pin,或直接单击右上侧的 Pin 按钮。
2.双击 TO 栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如 D[0]);然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。
9.硬件测试
10.实验结果
实验箱使用模式7,键8为复位按键,键8为1时正常工作。键4设置小时,键7设置分钟。
下载成功后,按下键8,及使六个LED复位清零,显示数秒的自动计时,可以通过4键设置小时数,7键设置分钟数。当秒数满60则进一位,分钟数满60进一位,当显示为23:59:59时,秒数在加一则显示00:00:00,之后从新计时。
五.设计总结
通过这次课程设计,我进一步加深了对EDA的了解,并进一步熟练的掌握了对QuartusII软件的操作。在自己设计的东西的时候,可以通过上网查阅自己的想要了解的东西,解决自己所不懂的东西,扩大了知识面。在编写程序的过程中,遇到了很多问题,通过对程序的不断调试与改进终于达到了设计所要求的功能。
课程设计的整个过程也是个学习的过程,首先要明白实验内容做什么、然后才知道怎么做。在把握原理的前提下进行实验设计。EDA设计实验自上而下的设计理念,大到小逐个设计实验模块,为我们以后的实验设计也是很有帮助的。总之通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。
在此,也感谢王老师的悉心指导,陪我们一起度过了每一个实验,为我们指点迷津,使我学到了更多课本上没有的知识。
第二篇:EDA实验报告之数字钟 中国地质大学
EDA实验报告——简单数字钟的设计
一、实验目的
1、了解数字钟的工作原理。
2、进一步学习Quartus II中基于VHDL设计的流程。
3、掌握VHDL编写中的一些小技巧。
4、掌握简单时序逻辑电路的设计方法与功能仿真技巧。
二、实验原理及内容
实验原理
简单数字钟应该具有显示时-分-秒的功能。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转
三.实验内容
1、用原理图的方式编写一个12/24进制的计数器,并创建为SYMBOL文件。
2、用VHDL的方式编写一个60进制的计数器,并创建为SYMBOL文件。
3、创建顶层文件。调用已编写的SYMBOL文件,设计简单的数字钟电路。
2、对所编写的电路进行编译及正确的仿真。
二十四进制VHDL
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT24 IS PORT(
CP, EN, Rd, LD :IN STD_LOGIC;
D :IN STD_LOGIC_VECTOR(5 DOWNTO 0);
Co :OUT STD_LOGIC;
Q :OUT STD_LOGIC_VECTOR(5 DOWNTO 0) );
END CNT24;
ARCHITECTURE STR OF CNT24 IS
SIGNAL QN : STD_LOGIC_VECTOR(5 DOWNTO 0 ) ;
BEGIN
Co<= '1'WHEN (QN = "010111"AND EN='1')
ELSE '0';
PROCESS (CP, RD)
BEGIN
IF (Rd ='0') THEN
QN<= "000000";
ELSIF (CP'EVENT AND CP='1') THEN
IF (LD='0') THEN
QN <= D;
ELSIF (EN='1') THEN
QN <= QN+1;
END IF;
END IF;
END PROCESS;
Q <= QN;
END STR ;
六十进制VHDL
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jsq60 IS
PORT(en,rd,cp :IN STD_LOGIC;
qh:buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
ql :buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
Co :OUT STD_LOGIC);
END jsq60;
ARCHITECTURE b OF jsq60 IS
BEGIN
Co<='1'when(qh="0101"and ql="1001" and en='1')else'0';
PROCESS (cp,rd)
BEGIN
IF (rd='0') THEN
qh<="0000";ql<="0000";
ELSIF (cp'EVENT AND cp='1') THEN
IF (en='1') THEN
IF (ql=9) THEN
ql<="0000";
IF (qh=5) THEN
qh<="0000";
ELSE qh<=qh+1;
end if;
else
ql<=ql+1;
end if;
end if;
END IF;
END PROCESS;
END b;
原理图
四、运行结果
24进制
60进制
时钟仿真结果
五、实验总结
此设计问题可分为主控电路,计数器模块和扫描显示三大部分,计数器在之前的学习中已经非常熟悉,只要掌握60,12进制的技术规律,用同步或异步计数器都可以实现。二扫描电路我们学过两种驱动方式:BCD码驱动方式和直接驱动方式。