EDA课程实验四.docx
- 文档编号:5735678
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:21
- 大小:669.75KB
EDA课程实验四.docx
《EDA课程实验四.docx》由会员分享,可在线阅读,更多相关《EDA课程实验四.docx(21页珍藏版)》请在冰豆网上搜索。
EDA课程实验四
班 级:
11电子
(1)
姓 名:
朱杰
学 号:
20110310161
指导教师:
秦玉龙
开课时间:
2013至2014学年第1学期
实验名称
数字秒表的设计
实验时间
2013,11,29
姓名
朱杰
实验成绩
一、实验目的
1.掌握VHDL语言的基本结构。
2.掌握VHDL层次化的设计方法。
3.掌握VHDL基本逻辑电路的综合设计应用。
二、实验设备
计算机软件:
QuartusII
EDA实验箱。
主芯片:
EPM7128SLC84-15或EP1K100QC208-3。
下载电缆,导线等。
三、实验内容
设计并调试好一个计时范围为0.01秒~1小时的数字秒表。
要求编写上述数字秒表逻辑图中的各个模块的VHDL语言程序,并完成数字秒表的顶层设计,然后利用开发工具软件对其进行编译和仿真,最后要通过实验开发系统对其进行硬件验证。
(一)分频器模块CLKGEN的设计
1.编写CLKGEN分频器模块的VHDL程序,并对其进行编译和仿真,初步验证设计的正确性。
(二)十进制计数器的设计
编写十进制计数器CNT10模块的VHDL程序,并对其进行编译和仿真,初步验证设计的正确性。
(三)6进制计数器的设计
编写六进制计数器CNT6模块的VHDL程序,并对其进行编译和仿真,初步验证设计的正确性。
VHDL源程序:
(四)数码管动态扫描显示电路设计
(五)数字秒表的顶层设计
利用前面所设计的模块,完成数字秒表的顶层设计,并对其进行编译和仿真,初步验证设计的正确性。
(六)逻辑综合结果
使用QuartusⅡ进行逻辑综合,给出电路的RTL视图及逻辑综合后的资源使用情况。
(七)管脚锁定及硬件验证情况
数字秒表的时钟CLK输入端锁定到EP1K100QC208-3芯片的78,对应实验箱上的CLK0;seg7[7..0]:
段码输出分别锁定到EP1K100QC208-3芯片的132,131,128,127,126,125,122,121引脚上,对应实验箱上8个数码管的段码输入端;LEDW[2..0]分别锁定到EP1K100QC208-3芯片的53,47,46引脚上。
CLK0设置为1KHZ,观察数码管显示情况,验证是否满足预期功能。
四、实验设计
1、系统设计
要求设计一个计时范围为0.01秒~1小时的秒表,首先需要获得一个比较精确的计时基准信号,这里是周期为1/100s的计时脉冲。
其次,计数器需设置清零信号和计数使能信号,以便控制秒表的清零和计时起停。
图1 秒表电路逻辑图
如图1所示,数字秒表可由1个分频器、1/100秒计数器(即十进制计数器U1)、1/10秒计数器(即十进制计数器U2)、秒计数器(即十进制计数器U3和六进制计数器U4组成的60进制计数器)、分计数器(即十进制计数器U5和六进制计数器U6组成的60进制计数器)组成。
每个计数器的4位输出经段译码后送数码管显示,数码显示采用动态扫描方式。
其中DOUT[3..0]为1/100秒计数值、DOUT[7..4]为1/10秒计数值、DOUT[11..8]和DOUT[15..12]为秒计数值的个位和十位、DOUT[19..16]和DOUT[23..20]为分计数值的该位和十位。
2、VHDL程序
分频器设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
useieee.std_logic_unsigned.all;
ENTITYCLKGENIS
PORT(CLK:
INSTD_LOGIC;
NEWCLK:
OUTStd_LOGIC);
ENDCLKGEN;
ARCHITECTUREARTOFCLKGENIS
SIGNALCNTER:
integerrange0to10;
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IF(CNTER=10)THEN
CNTER<=0;
ELSE
CNTER<=CNTER+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNTER)
BEGIN
IF(CNTER<5)THEN
NEWCLK<='1';
ELSE
NEWCLK<='0';
ENDIF;
ENDPROCESS;
ENDART;
十进制计数器的设计
VHDL源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEWORK.PAKG.ALL;
ENTITYCNT10IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTDIGIT_T;
CARRY_OUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREARTOFCNT10IS
SIGNALCQI:
DIGIT_T;
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI=9THEN
CQI<=0;CARRY_OUT<='1';
ELSECQI<=CQI+1;CARRY_OUT<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDART;
进制计数器的设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEWORK.PAKG.ALL;
ENTITYCNT6IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTDIGIT_T;
CARRY_OUT:
OUTSTD_LOGIC);
ENDCNT6;
ARCHITECTUREARTOFCNT6IS
SIGNALCQI:
DIGIT_T;
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<=0;
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI=5THENCQI<=0;CARRY_OUT<='1';
ELSECQI<=CQI+1;CARRY_OUT<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
CQ<=CQI;
ENDART;
数码管动态扫描显示电路设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEWORK.PAKG.ALL;
ENTITYdisp_scanIS
PORT(CLK:
INSTD_LOGIC;
num:
INDISP_T;
LEDW:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
SEG7:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYdisp_scan;
ARCHITECTUREARTOFdisp_scanIS
signaltemp:
DIGIT_T;
signalcnt:
STD_LOGIC_VECTOR(2DOWNTO0);
begin
PROCESS(CLK)IS
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNT="111"THEN
CNT<="000";
ELSE
CNT<=CNT+'1';
ENDIF;
ENDIF;
ENDPROCESS;
LEDW<=CNT;
PROCESS(CNT,num,temp)IS
BEGIN
CASECNTIS
WHEN"000"=>TEMP<=num(0);
WHEN"001"=>TEMP<=num
(1);
WHEN"010"=>TEMP<=num
(2);
WHEN"011"=>TEMP<=num(3);
WHEN"100"=>TEMP<=num(4);
WHEN"101"=>TEMP<=num(5);
--WHEN"110"=>TEMP<=num(6);
--WHEN"111"=>TEMP<=num(7);
WHENOTHERS=>TEMP<=0;
ENDCASE;
CASETEMPIS
WHEN0=>SEG7<="00111111";
WHEN1=>SEG7<="00000110";
WHEN2=>SEG7<="01011011";
WHEN3=>SEG7<="01001111";
WHEN4=>SEG7<="01100110";
WHEN5=>SEG7<="01101101";
WHEN6=>SEG7<="01111101";
WHEN7=>SEG7<="00000111";
WHEN8=>SEG7<="01111111";
WHEN9=>SEG7<="01101111";
WHENOTHERS=>SEG7<="00111111";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;
数字秒表的顶层设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEWORK.PAKG.ALL;
ENTITYTIMESIS
PORT(CLR:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
LEDW:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
SEG7:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDTIMES;
ARCHITECTUREARTOFTIMESIS
COMPONENTCLKGENPORT(CLK:
INSTD_LOGIC;
NEWCLK:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTCNT10PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTDIGIT_T;
CARRY_OUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTCNT6
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTDIGIT_T;
CARRY_OUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTdisp_scanIS
PORT(CLK:
INSTD_LOGIC;
num:
INDISP_T;
LEDW:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);
SEG7:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCOMPONENTdisp_scan;
SIGNALNEWCLK1:
STD_LOGIC;
SIGNALCARRY1:
STD_LOGIC;
SIGNALCARRY2:
STD_LOGIC;
SIGNALCARRY3:
STD_LOGIC;
SIGNALCARRY4:
STD_LOGIC;
SIGNALCARRY5:
STD_LOGIC;
SIGNALDOUT:
DISP_T;
BEGIN
U0:
CLKGENPORTMAP(CLK=>CLK,NEWCLK=>NEWCLK1);
U1:
CNT10PORTMAP(CLK=>NEWCLK1,CLR=>CLR,ENA=>ENA,CQ=>DOUT(0),CARRY_OUT=>CARRY1);
U2:
CNT10PORTMAP(CLK=>CARRY1,CLR=>CLR,ENA=>ENA,CQ=>DOUT
(1),CARRY_OUT=>CARRY2);
U3:
CNT10PORTMAP(CLK=>CARRY2,CLR=>CLR,ENA=>ENA,CQ=>DOUT
(2),CARRY_OUT=>CARRY3);
U4:
CNT6PORTMAP(CLK=>CARRY3,CLR=>CLR,ENA=>ENA,CQ=>DOUT(3),CARRY_OUT=>CARRY4);
U5:
CNT10PORTMAP(CLK=>CARRY4,CLR=>CLR,ENA=>ENA,CQ=>DOUT(4),CARRY_OUT=>CARRY5);
U6:
CNT6PORTMAP(CLK=>CARRY5,CLR=>CLR,ENA=>ENA,CQ=>DOUT(5));
U7:
disp_scanPORTMAP(CLK,DOUT,LEDW,SEG7);
ENDART;
3、仿真波形
分频器设计
十进制计数器的设计
进制计数器的设计
数码管动态扫描显示电路设计
数字秒表的顶层设计
4、芯片引脚锁定文件
五、实验结果及总结
1、系统仿真情况
分频器设计
十进制计数器的设计
进制计数器的设计
数码管动态扫描显示电路设计
数字秒表的顶层设计
2、逻辑综合结果
分频器设计
十进制计数器的设计
进制计数器的设计
数码管动态扫描显示电路设计
数字秒表的顶层设计
3、硬件验证情况
清零:
计数;
4、实验过程出现的问题及解决方法
这次实验做的比较顺利,基本上是没有错误的。
但是细细想来,我发现从实验课开始到现在,我都没有仔细看过代码。
就像这次,刚开始的时候就出现显示倒了。
后来修改了dis_scan里面的显示顺序就能够正常显示。
本来还以为是times里面出问题,怎么修改也不出结果。
现在我明白,数码管显示问题,首先从仪器看是否有问题,然后看dis_scan,再然后就是其他关联的代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程 实验