EDA VHDL 4位全加器实验报告.docx
《EDA VHDL 4位全加器实验报告.docx》由会员分享,可在线阅读,更多相关《EDA VHDL 4位全加器实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
EDAVHDL4位全加器实验报告
姓名:
车琳班级:
通信1101班
学号:
*************
实验一用原理图输入法设计4位全加器
一、实验目的
1)熟悉利用QuartusII的原理图输入方法设计简单组合电路;
2)掌握层次化设计的方法;
3)通过一个4位全加器的设计把握利用EDA软件进行原理图输入方式的电子线路设计的详细流程。
二、实验内容
1)完成半加器、全加器和4位全加器的设计,包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设计成一个硬件符号入库。
键1、键2、键3(PIO0/1/2)分别接ain、bin、cin;发光管D2、D1(PIO9/8)分别接sum和cout。
2)建立一个更高的层次的原理图设计,利用以上获得的1位全加器构成的4位全加器,并完成编译、综合、适配、仿真和硬件测试。
建议选择电路模式1:
键2、键1输入4位加数:
键4、键3输入4位被加数:
数码6和数码5显示加和:
D8显示进位cout。
三、实验仪器
1)计算机及操作系统;
2)QuartusII软件;
3)编程电缆。
四、实验原理
一个4位全加器可以由4个一位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。
一个1位全加器可以参考教材介绍的方法来完成。
1位全加器示意图如图1所示。
其中,其中CI为输入进位位,CO为输出进位位,输入A和B分别为加数和被加数。
S为输出和,其功能可用布尔代数式表示为:
五、实验步骤
1、完成半加器和全加器的设计,包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设计成一个硬件符号入库。
键1、键2、键3(PIO0/1/2)分别接ain、bin、cin;发光管D2、D1(PIO9/8)分别接sum和cout。
2、建立一个更高层次的原理图设计,利用以上获得的1位全加器构成4位全加器,并完成编译、综合、适配、仿真、和硬件测试。
建议选择电路模式1(附图F-2):
键2、键1输入4位加数:
键4、键3输入4位被加数:
数码6和数码5显示加和:
D8显示进位cout。
1、一位全加器设计输入
1)创建文件。
采用File\new菜单,创建图形文件。
2)添加元件。
采用菜单symbol\entersymbol,在弹出的对话框中选中相应的库与元件,添加元件,构成一位全加器并保存。
2、一位全加器元件的创建
1)对上述文件编译综合仿真。
2)生成元件。
3)采用菜单FILE\CREATESYMBOL生成一位全加器元件。
3、4位全加器设计输入
1)创建文件。
采用File\new菜单,创建图形文件。
2)添加元件。
采用菜单symbol\entersymbol,选中生成的元件yiweiadder。
3)级联。
前级1位全加器CO与后级CI相连。
4、添加I/O
5、设计编译
6、器件选择及管脚分配
7、设计仿真
8、时序分析
9、编程下载
六、实验结果及分析
1、半加器原理图如图2所示:
图1半加器原理图
半加器仿真波形图如下图3所示:
图2半加器仿真波形图
2、一位全加器原理图如图4所示:
图3全加器原理图
一位全加器仿真波形如图5所示:
图4全加器仿真波形图
3、四位全加器原理图如图6所示:
图5四位全加器原理图
四位全加器仿真波形图如图7所示。
从波形可以得出,输入输出满足表达式S=A+B+CI,S>15时进位位置‘1’,设计电路功能达到设计要求。
图6四位全加器仿真波形图
结论:
采用图形编程法实现了四位全加器的设计,并完成了电路的设计编译、综合、逻辑仿真。
实验二8位十六进制频率计设计
一、实验目的
1)熟悉原理图输入法中74系列等宏功能元件的使用方法;
2)掌握更复杂的原理层次化设计和数字系统设计方法;
3)完成8位16进制频率计的设计。
二、实验内容
首先完成2位频率计的设计,然后进行硬件测试,建议选择电路模式2(附录图F-3);数码2和1显示输出频率值,带测频率F_IN接clock0;测频控制是中年CLK接clock2,若选择clock2=8Hz,门控信号CNT_EN的脉宽恰好为1s。
然后建立一个新的原理图设计层次,在此基础上将其扩展为8位频率计,仿真测试改频率计待测信号的最高频率,并与硬件实测的结果进行比较。
三、实验仪器
1)计算机及操作系统;
2)QuartusII软件。
3)编程电缆。
四、实验原理
利用教材介绍的2位计数器模块,连接它们的计数进位,用四个计数模块就能完成一个8位有时钟使能的计数器;对于测频控制器的控制信号,在仿真过程中应该注意它们可能的毛刺现象。
最后按照设计流程和方法即可完成全部设计。
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉冲宽度为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号并为下一测频计数周期做准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即TESTCTL。
TESTCTL的计数是能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA是能端进行同步控制。
当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进个锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。
锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。
数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包含外电路的信号整形电路、脉冲发生器、译码驱动电路和显示电路,其原理框图如图1所示。
图1数字频率计原理框图
工作原理:
系统正常工作时,脉冲信号发生器输入1Hz的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。
测量信号时,将被测信号通过信号整形电路,产生同频率的矩形波,输入计数器作为时钟。
当计数闸门信号高电平有效时,计数器开始计数,并将计数结果送入锁存器中。
设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
最后将锁存的数值由外部的七段译码器译码并在数码管上显示。
五、实验步骤
1、完成32位寄存器的设计
1)32位锁存器程序编译;
2)32位锁存器程序允许生成模块;
3)32位锁存器模块。
2、完成32位计数器的设计
1)32位计数器程序编译;
2)32位计数器程序允许生成模块;
3)32位计数器。
3、完成频率计控制电路的设计
1)频率计控制电路程序编译;
2)频率计控制电路程序允许生成模块;
3)频率计控制电路。
4、完成一个8位16进制频率计电路的设计
1)8位16进制频率计电路程序编译;
2)8位16进制频率计电路程序允许生成模块;
3)8位16进制频率计电路。
六、实验结果及分析
1、测频控制器仿真波形:
图2测频控制器仿真波形图
2、32位锁存器仿真波形:
图3锁存器仿真波形图
3、32位计数器仿真波形:
图4计数器仿真波形图
4、8位16进制频率计仿真波形如图7所示:
图58位十六进制频率计仿真波形
七、思考题
1、简述Quartus的设计流程。
答:
QuartusII图形用户界面的基本设计流程如下:
1)使用NewProjectWizard(File菜单)建立新工程,并指定目标器件或器件系列;
2)使用TextEditor建立Verilog、VHDL或AHDL(Altera)设计,用BlockEditor建立原理图或示意图;示意图中可以包含代表其他设计文件的符号,还可以使用MegaWizardPlug–InManager(Tools菜单)生成宏功能模块和IP功能模块。
3)(可选)使用AssignmentEditor、Settings对话框(Assignment菜单)、FloorplanEditor、LogicLock功能指定初始设计约束条件。
4)(可选)使用SOPCBuilder或DSPBuilder建立系统级设计。
5)(可选)使用SoftwareBuilder为Excalibur器件处理器或Nios嵌入式处理器建立软件和编程文件。
6)使用Analysis&Synthesis综合设计。
7)(可选)使用Simulator和GenerateFunctionalSimulationNetlist命令在设计中仿真。
8)使用Fitter对设计执行布局布线。
9)使用PowerPlay、PowerAnalyzer执行功耗估算和分析。
10)使用TimingAnalyzer对设计进行时序分析。
11)使用Simulator对设计进行时序仿真。
12)(可选)使用物理综合、时序逼近(TimingClosure)布局图、LogicLock功能、Settings对话框和AssignmentEditor进行时序改进,实现时序逼近。
13)使用Assembler为设计建立编程文件。
14)使用编程文件Programmer和Altera硬件对器件进行编程,或将编程文件转换为其他文件格式以供嵌入式处理器等其他系统使用。
15)(可选)使用SignalTapIILogicAnalyzre、SignalProbe功能或ChipEditor对设计进行调试。
16)(可选)使用ChipEditor、ResourcePropertyEditor和ChangeManager进行工程更改管理。
2.功能仿真与时序仿真有什么不同?
时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。
3.还有什么其他方法实现频率计功能?
答:
用STC89C52RC单片机可以实现频率计的功能。
附1:
全加器原理图
附2:
频率计相关程序:
测频控制电路
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFTCTRLIS
PORT(
CLKK:
INSTD_LOGIC;
CNT_EN:
OUTSTD_LOGIC;
RST_CNT:
OUTSTD_LOGIC;
Load:
OUTSTD_LOGIC
);
ENDFTCTRL;
ARCHITECTUREbehavOFFTCTRLIS
SIGNALDiv2CLK:
STD_LOGIC;
BEGIN
PROCESS(CLKK)
BEGIN
IFCLKK'EVENTANDCLKK='1'THEN
Div2CLK<=NOTDiv2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLKK,Div2CLK)
BEGIN
IFCLKK='0'ANDDiv2CLK='0'THENRST_CNT<='1';
ELSERST_CNT<='0';
ENDIF;
ENDPROCESS;
Load<=NOTDiv2CLK;
CNT_EN<=Div2CLK;
ENDbehav;
计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTER32BIS
PORT(
FIN:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENABL:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0)
);
ENDCOUNTER32B;
ARCHITECTUREbehavOFCOUNTER32BIS
SIGNALCQI:
STD_LOGIC_VECTOR(31DOWNTO0);
BEGIN
PROCESS(FIN,CLR,ENABL)
BEGIN
IFCLR='1'THENCQI<=(OTHERS=>'0');
ELSIFFIN'EVENTANDFIN='1'THEN
IFENABL='1'THENCQI<=CQI+1;
ENDIF;
ENDIF;
ENDPROCESS;
DOUT<=CQI;
ENDbehav;
锁存器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(
LK:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0)
);
ENDREG32B;
ARCHITECTUREbehavOFREG32BIS
BEGIN
PROCESS(LK,DIN)
BEGIN
IFLK'EVENTANDLK='1'THENDOUT<=DIN;
ENDIF;
ENDPROCESS;
ENDbehav;
频率计顶层文件
LIBRARYIEEE;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFREQTESTIS--频率计顶层文件
PORT(
CLK1HZ:
INSTD_LOGIC;--输入引脚,输入1HZ信号作为时钟信号
FSIN:
INSTD_LOGIC;--待测频率信号
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0)--计数结果输出
);
ENDFREQTEST;
ARCHITECTUREstrucOFFREQTESTIS
COMPONENTFTCTRL--测频控制电路
PORT(
CLKK:
INSTD_LOGIC;--1HZ输入信号
CNT_EN:
OUTSTD_LOGIC;--0.5HZ信号,产生1s的计数时间
RST_CNT:
OUTSTD_LOGIC;--计数器清零信号,1HZ与使能信号同为低时清零
Load:
OUTSTD_LOGIC--0.5HZ锁存信号
);
ENDCOMPONENT;
COMPONENTCOUNTER32B--32位计数器
PORT(
FIN:
INSTD_LOGIC;--计数信号,与FSIN相连,输入待测信号
CLR:
INSTD_LOGIC;--清零信号,与RST_CNT相连
ENABL:
INSTD_LOGIC;--计数使能信号,与CNT_EN相连
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0)--计数结果输出,输入到锁存器中
);
ENDCOMPONENT;
COMPONENTREG32B--32位锁存器
PORT(
LK:
INSTD_LOGIC;--锁存器使能输入0.5HZ信号,与Load相连
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);--计数结果输入
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0)--计数结果输出
);
ENDCOMPONENT;
SIGNALTSTEN1:
STD_LOGIC;
SIGNALCLR_CNT1:
STD_LOGIC;
SIGNALLoad1:
STD_LOGIC;
SIGNALDTO1:
STD_LOGIC_VECTOR(31DOWNTO0);
SIGNALCARRY_OUT1:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
U1:
FTCTRLPORTMAP(
CLKK=>CLK1HZ,CNT_EN=>TSTEN1,
RST_CNT=>CLR_CNT1,Load=>Load1
);
U2:
REG32BPORTMAP(
LK=>Load1,DIN=>DTO1,DOUT=>DOUT
);
U3:
COUNTER32BPORTMAP(
FIN=>FSIN,CLR=>CLR_CNT1,
ENABL=>TSTEN1,DOUT=>DTO1
);
ENDstruc;