电子设计自动化实验指导书电气工程及其自动化版.docx
《电子设计自动化实验指导书电气工程及其自动化版.docx》由会员分享,可在线阅读,更多相关《电子设计自动化实验指导书电气工程及其自动化版.docx(32页珍藏版)》请在冰豆网上搜索。
电子设计自动化实验指导书电气工程及其自动化版
实验一:
VHDL组合逻辑电路设计
一、实验目的
1、熟悉QuartusII软件的使用,熟练进行程序输入、综合、仿真。
2、熟悉实验箱硬件资源的使用,熟练进行引脚锁定和硬件测试,掌握EDA技术设计流程,掌握数字逻辑电路设计的方法;
3、学习简单数字逻辑电路的设计、仿真和硬件测试。
二、实验内容
1、设计四选一多路选择器,利用QuartusII软件完成程序输入、综合和仿真验证,给出仿真波形并进行结果分析。
2、利用GW48EDA实验系统完成硬件测试,验证本项目设计的功能,记录引脚设置和测试结果。
三、实验原理、方法和手段
多路选择器可以从多组数据源中选取一组送入目的地,应用相当广泛,从组合逻辑的执行到数据路径的选择,经常可以看到它的踪影。
多路选择器的结构是
个输入数据对应N个数据输出选择控制线和一个输出线。
在VHDL中描述一个多路选择器的方法有多种,例如:
在一个进程中使用if-then-else语句;在一个进程中使用case语句;使用选择信号带入语句或条件信号代入语句(when-else语句)。
推荐使用when-else语句,如:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
……ENTITYMUX41IS
PORT(DATA0,DATA1,DATA2,DATA3:
INSTD-LOGIC_VECTOR(3DOWNTO0);
A,B:
INSTD_LOGIC;
Y:
OUTSTD-LOGIC_VECTOR(3DOWNTO0)
……ENDENTITYMUX41
ARCHITECTUREARTOFMUX41IS
SIGNALSEL:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
SEL<=B&A;
Y<=DATA0WHENSEL=”00”ELSE
DATA1WHENSEL=”01”ELSE
DATA2WHENSEL=”10”ELSE
DATA3WHENSEL=”11”ELSE
“0000”;
ENDARCHITECTUREART;
五、实验条件
1、提供一台具有WINDOWS2000/XP操作系统的计算机;
2、提供QuartusII软件开发环境。
六、实验步骤
1.前期准备,首先新建一个工作库目录文件夹,如F:
/mywork,便于存储工程项目。
此文件夹在后面操作中将被软件默认为工作库,不同的设计项目最好放在不同的文件夹中,同一工程的所有文件必须放在同一文件夹中。
再双击桌面图标“QuartusII7.2”进入QuartusII软件用户界面。
2.编辑设计文件(VHDL文本输入法)
选择File|New,在New窗口中的DeviceDesignFiles中选择设计文件类型为VHDLFile,确认后将打开VHDL文本编辑器,输入所设计的四选一多路选择器的源程序,并选择File|Save命令进行存盘,存储在如F:
/mywork文件夹中,存储的文件名应与实体名相同,如MUX41.vhd。
3.创建工程项目
1)在File菜单中选择NewProjectWizard项,将出现工程项目建立向导对话框。
2)首先出现的对话框中,在最上面的文本输入框中输入项目所在的目录名(F:
/mywork),在中间的文本输入框中输入项目名称(MUX41,也可以用其他名称),在最下面的文本输入框中输入最顶层模块的名称(MUX41,必须是最顶层模块的实体名)。
3)点击“Next”,进入到设计文件选择对话框,添加与工程相关的所有VHDL文件。
本例中只有一个MUX41.vhd。
4)点击“Next”,进入到器件选择对话框,在“Family”下拉菜单中选择“Cyclone”,在“AvailableDevices”列表栏中选择“EP1C6T240C8“(根据实验箱硬件资源选取)。
5)点击“Next”进入到第三方EDA工具选择对话框,在这个界面我们可以选择第三方的综合工具、仿真工具和时延分析工具。
由于在本例中我们的综合、仿真和时延分析都采用QuartusII内置的工具,所以在这个页面不作任何选择。
6)点击“Next”进入到“Summary”对话框,在这个窗口列出了前面所作设置的全部信息。
点击“Finish”完成工程项目建立过程,回到主窗口。
4.编译前设置,可参考教材第五章,本实验可省略这些操作。
5.编译综合选择菜单Processing|StartCompilation,启动全程编译。
注意下方Processing栏中的编译信息,深红色标记条即为文件中的错误,修改后再次编译直至排除所有的错误。
编译成功后,可在界面各栏中参看编译与分析结果的详细信息。
6.时序仿真
在做仿真之前,必须要先建立波形激励文件,具体步骤如下:
1)打开波形编辑器,选择File|New,选择New窗口中的“OtherFiles”中“VectorWaveformFile”项后选择“OK”。
2)
设置仿真时间区域,选择菜单Edit|EndTime,在弹出的对话框中输入时间和单位(如50,us)。
3)导入端口信号名,首先选择View|UtilityWindows|NodeFinder,在弹出框中Filter栏下选择Pin:
all,在单击List按钮,将显示本设计中所有的端口引脚名,再将所需要的各端口信号拖入到波形编辑器,完成后关闭NodesFound窗口。
4)编辑输入波形,并保存。
利用波形编辑器工具栏提供的工具为输入信号赋值,工具栏中主要按钮的功能介绍如下:
放大和缩小工具:
利用鼠标左键放大/右键缩小显示仿真波形区域;
全屏显示:
全屏显示当前波形编辑器窗口;
赋值“0”:
对某段已选中的波形,赋值‘0’,即强0;
赋值“1”:
对某段已选中的波形,赋值‘1’,即强1;
时钟赋值:
为周期性时钟信号赋值;
十进制、十六进制等数值赋值。
选择File|Saveas,以默认名存盘。
5)仿真参数设置,选择Assignment|Settings,在Settings窗口下选择Category|SimulatorSettings,在右侧的Simulationmode项下选择Timing(时序仿真),Simulationinput栏中选中前面设计好的波形文件(默认)。
6)启动仿真器,选择Processing|StartSimulation,直到出现Simulatewassuccessful,仿真结束。
7)观察并记录仿真结果。
7.硬件测试
先要将程序中输入输出信号和实验箱芯片的引脚进行锁定,再编译后下载,完成硬件测试。
根据附录,选择适当的电路模式(如No.5)。
1)选择Tools菜单中的Assignments项,进入AssignmentEditor编辑器窗。
在Category栏中选择Pin,或直接单击右上侧的Pin按钮。
2)双击“To”栏的New,在出现的下拉栏中分别选择本工程要锁定的端口信号;再双击Location栏New,通过查阅附录“GW48-EDA芯片引脚对照表”选择好对应端口号的器件引脚号,
3)重新保存文件,再编译(启动StartCompilation)一次,才能将引脚锁定信息编译进编程下载文件中。
4)首先将实验系统和USB通信线连接上电脑,打开电源,安装好驱动文件。
驱动文件默认在安装路径c:
\Altera\quartus72\drive\Usb-Blaster下。
5)打开编程窗口,选择菜单Tools中Programmer。
Mode栏中选择编程模式JTAG(默认)。
核实文件路径和文件名,可单击左侧AddFile按钮手动选择配置文件。
6)设置编程器,单击上图界面中左上角HardwareSetup…按钮,在弹出对话框中,选择Hardwaresetting页,选好合适的下载方式(如,Usb-Blaster)。
可点击AddHardware按钮,添加下载方式。
关闭对话框。
7)单击Star按钮,进入配置文件的下载操作。
当Progress显示100%,表示编程下载成功。
8)下载成功后,操作实验箱各按键,进行硬件测试,观察和记录实验结果。
七、思考题
除了使用选择信号带入语句或条件信号代入语句(when-else语句)实现四选一选择器,还有其他很多方法,试列写1~2种实现方法。
八、实验报告撰写要求
1、撰写实验预习报告,包含实验目的、实验内容,并根据实验内容撰写相关的实验原理和实验程序;完成思考题。
以备实验前检查。
2、记录仿真波形,完成仿真结果的详细分析。
3、整理硬件测试记录,验证本项目的功能。
4、撰写实验心得,简述在实验过程中出现的问题,是何原因以及如何解决的。
实验二:
VHDL时序逻辑电路设计
一、实验目的
1、熟悉十进制加法计数器的原理与功能应用;
2、学习计数器的设计、仿真和硬件测试;
3、进一步掌握多层次电路设计、仿真和硬件测试。
二、实验内容
1、程序设计一个带异步清零、同步时钟使能和并行置数的十进制加法计数器,再通过QuartusII软件进行编辑输入、综合、仿真和硬件测试。
2、采用多层次电路设计方法,设计一个数字时钟,再进行仿真和硬件测试。
三、实验原理、方法和手段
计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频、定时、进行数字运算等。
十进制计数器有控制线4个,清零信号Clrn、时钟使能信号En、置数信号Load、时钟信号Clk;并行数据输入线4个D3、D2、D1、D0;数据输出线4位:
Q3、Q2、Q1、Q0;输出进位线端口1个C0。
真值表如下:
Clk
Clrn
Load
En
D[3..0]
Q[3..0]
D3
D2
D1
D0
Q3
Q2
Q1
Q0
↑
0
X
X
X
X
X
X
0
0
0
0
↑
1
0
X
D3
D2
D1
D0
D3
D2
D1
D0
↑
1
1
0
X
X
X
X
Q(不变)
↑
1
1
1
X
X
X
X
计数
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST=‘1’THENCQI:
=(OTHERS=>‘0’);--计数
器异步复位
ELSIFCLK‘EVENTANDCLK=’1‘THEN--检测时钟上升沿
IFEN='1'THEN-检测是否允许计数(同步使能)
IFCQI<9THENCQI:
=CQI+1;--允许计数,
检测是否小于9
ELSECQI:
=(OTHERS=>‘0’);--大于9,
计数值清零
ENDIF;
ENDIF;
ENDIF;
IFCQI=9THENCOUT<='1';--计数大于9,输出进位信号
ELSECOUT<='0';
ENDIF;
CQ<=CQI;--将计数值向端口输出
ENDPROCESS;
ENDbehav;
两位十进制计数器可由2个十进制计数器级联构成,个位计数器的进位输出信号作为十位计数器的时钟驱动信号即可。
数字时钟实际上是对一个标准1Hz秒脉冲信号进行计数的计数器,秒计数器满60后向分计数器进位,分计数器满60后向时计数器进位,时计数器按24进制计数器规律计数,各计数器的数值经译码器送LED显示。
提示:
分别设计带清零和时钟控制的2个模60计数器和1个模24计数器,按照串行进位的关系连接即可实现一个简易的数字时钟;
五、实验条件
1、提供一台具有WINDOWS2000/XP操作系统的计算机;
2、提供QuartusII软件开发环境。
六、实验步骤
操作步骤参见实验一,这里不在详述。
七、思考题
60/24进制的2位数十进制计数器除了用2个一位数十进制计数器串接实现之外,怎样用其他方法实现?
八、实验报告撰写要求
1、撰写实验预习报告,包含实验目的、实验内容,并根据实验内容撰写相关的实验原理和实验程序;完成思考题。
以备实验前检查。
2、记录仿真波形,完成仿真结果的详细分析。
3、整理硬件测试记录,验证本项目的功能。
4、撰写实验心得,简述在实验过程中出现的问题,是何原因以及如何解决的。
实验三:
VHDL下状态机电路设计
一、实验目的
1、进一步熟悉序列检测器的原理;
2、学习用状态机实现序列检测器的设计,掌握一般状态机的设计与应用;
3、进一步熟悉QuartusII的使用,掌握多层次电路的设计、仿真和硬件测试。
二、实验内容
1、设计一个序列检测器,检测“11100101”序列,给出设计方案(包括状态图)和源程序,完成软件仿真和硬件测试。
2、利用实验系统中ADC0809芯片,用状态机方式实现数据采集。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSCHKIS
PORT(DIN,CLK,CLR:
INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号
AB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));--检测结果输出
ENDSCHK;
ARCHITECTUREbehavOFSCHKIS
SIGNALQ:
INTEGERRANGE0TO8;
SIGNALD:
STD_LOGIC_VECTOR(7DOWNTO0);--8位待检测预置数(密码=E5H)
BEGIN
D<="11100101";--8位待检测预置数
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENQ<=0;
ELSIFCLK'EVENTANDCLK='1'THEN--时钟到来时,判断并处理当前输入的位
CASEQIS
WHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;
WHEN1=>IFDIN=D(6)THENQ<=2;ELSEQ<=0;ENDIF;
WHEN2=>IFDIN=D(5)THENQ<=3;ELSEQ<=0;ENDIF;
WHEN3=>IFDIN=D(4)THENQ<=4;ELSEQ<=0;ENDIF;
WHEN4=>IFDIN=D(3)THENQ<=5;ELSEQ<=0;ENDIF;
WHEN5=>IFDIN=D
(2)THENQ<=6;ELSEQ<=0;ENDIF;
WHEN6=>IFDIN=D
(1)THENQ<=7;ELSEQ<=0;ENDIF;
WHEN7=>IFDIN=D(0)THENQ<=8;ELSEQ<=0;ENDIF;
WHENOTHERS=>Q<=0;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(Q)--检测结果判断输出
BEGIN
IFQ=8THENAB<="1010";--序列数检测正确,输出“A”
ELSEAB<="1011";--序列数检测错误,输出“B”
ENDIF;
ENDPROCESS;
ENDbehav;
三、实验原理、方法和手段
序列检测器可用于检测一组或者多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
这就要求检测器必须记住前一次的正确的代码及正确序列,直到在连续的检测中所收到的每一位码都与预置的对应码相同。
提示:
本实验中要求检测“11100101”序列,电路需要分别记忆:
初始状态、1、11、111、1110、11100、111001、1110010、11100101共9种状态。
先构造序列检测器的状态图,再使用状态机进行程序设计。
ADC0809的采样控制原理已在教材中作了详细说明。
ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。
转换时间约100μs,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电。
主要控制信号如下图所示:
START是转换启动信号,高电平有效;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。
当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号,当启动转换约100μs后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线,至此ADC0809的一次转换结束。
四、实验组织运行要求
1、学生在进行实验前必须进行充分的预习,熟悉实验内容;
2、学生拟定实验方案,编写完整的实验程序;
3、学生严格遵守实验室的各项规章制度,注意人身和设备安全,服从管理;
4、教师在学生实验过程中予以必要的辅导,帮助学生独立完成实验;
5、采用开放运行方式。
五、实验条件
1、提供一台具有WINDOWS2000/XP操作系统的计算机;
2、提供QuartusII软件开发环境。
六、实验步骤
学生自行进行设计方案,写出实验程序,在QuartusII软件上进行仿真验证,软件操作步骤参见
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTDKZIS
PORT(CLK,SM,SB:
INSTD_LOGIC;
MR,MY,MG,BR,BY,BG:
OUTSTD_LOGIC);
ENDENTITYJTDKZ;
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK)IS
VARIABLES:
INTEGERRANGE0TO45;
VARIABLECLR,EN:
BIT;
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFCLR='0'THENS:
=0;
ELSIFEN='0'THENS:
=S;
ELSES:
=s+1;
ENDIF;
CASESTATEIS
WHENA=>MR<='0';MY<='0';MG<='1';BR<='1';BY<='0';BG<='0';
IF(SBANDSM)='1'THEN
IFS=45THENSTATE<=B;CLR:
='0';EN:
='0';
ELSESTATE<=A;CLR:
='1';EN:
='1';
ENDIF;
ELSIF(SBAND(NOTSM))='1'THENSTATE<=B;CLR:
='0';EN:
='0';
ELSESTATE<=A;CLR:
='1';EN:
='1';
ENDIF;
WHENB=>MR<='0';MY<='1';MG<='0';BR<='1';BY<='0';BG<='0';
IFS=5THENSTATE<=C;CLR:
='0';EN:
='0';
ELSESTATE<=B;CLR:
='1';EN:
='1';
ENDIF;
WHENC=>MR<='1';MY<='0';MG<='0';BR<='0';BY<='0';BG<='1';
IF(SMANDSB)='1'THEN
IFS=25THENSTATE<=D;CLR:
='0';EN:
='0';
ELSESTATE<=C;CLR:
='1';EN:
='1';
ENDIF;
ELSIFSB='0'THENSTATE<=D;CLR:
='0';EN:
='0';
ELSESTATE<=C;CLR:
='1';EN:
='1';
ENDIF;
WHEND=>MR<='1';MY<='0';MG<='0';BR<='0';BY<='1';BG<='0';
IFS=5THENSTATE<=A;CLR:
='0';EN:
='0';
ELSESTATE<=D;CLR:
='1';EN:
='1';
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESSCNT;
ENDARCHITECTUREART;
5s计时器程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT05SIS
PORT(CLK,EN05M,EN05B:
INSTD_LOGIC;
DOUT5:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYCNT05S;
ARCHITECTUREARTOFCNT05SIS
SIGNALCNT3B:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(CLK,EN05M,EN05B)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFEN05M='1'OREN05B='1'THEN
CNT3B<=CNT3B+1;
ELSE
CNT3B<="000";
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CNT3B)IS
BEGIN
CASECNT3BIS
WHEN"000"=>DOUT5<="00000101";
WHEN"001"=>DOUT5<="00000100";
WHEN"010"=>DOUT5<="00000011";
WHEN"011"=>DOUT5<="