数字系统设计实验指导书.docx
- 文档编号:6835008
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:43
- 大小:2.12MB
数字系统设计实验指导书.docx
《数字系统设计实验指导书.docx》由会员分享,可在线阅读,更多相关《数字系统设计实验指导书.docx(43页珍藏版)》请在冰豆网上搜索。
数字系统设计实验指导书
第一章EDA实验板介绍
为配合设计性实验和综合性实验的顺利开展,华南理工大学自主开发了EDA实验平台,如图1-1所示。
该平台选用了Altera公司的CYCLONE1系列的EP1C6Q240C8为基本配置,一上电就可以工作,无需其他芯片配合。
该平台硬件资源丰富,主要包括电源稳压电路、流水灯、键盘、50M频率的晶振、4位七段数码管、FLASH、sdram、蜂鸣器、、USB接口、ps2接口、拨码开关等,各模块电路独立工作,可通过跳线设置是否与芯片连接。
此外,可以外接配套的电平开关转接板,扩充1到16路电平拨码开关,为芯片的任意管脚输入高低电平。
该实验平台配置灵活,能够完成多种实验和课程设计。
在实验的过程中,读者可以根据条件选择合适的硬件平台,书中第三章基础实验在进行管脚配置的时候是根据图1-1设定的,对于不同的实验平台,读者可以作出相应的修改。
图1-1EDA实验平台顶层PCB
EDA实验版功能模块分布如图1-2,读者可以根据本EDA实验版的功能结合配套资料进行FPGA的实验开发。
SCUT
图1-2EDA实验版结构框图
EDA实验版的具体原理图,管脚配置关系见附件。
第二章基于QuartusII的数字系统设计
2.1基于QuartusII的数字系统设计流程
AlteraQuartus®II设计软件提供完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统(SOPC)提供全面的设计环境。
QuartusII软件含有FPGA和CPLD设计所有阶段的解决方案。
QuartusII的开发流程如图2-1所示。
图2-1QuartusII的开发流程
图2-1中的流程:
设计输入->综合->布线布局->时序分析->仿真->编程配置,在QuartusII中综合、布线布局、时序分析都包含在编译中,也就是在点击StartCompilication后,软件会自动完成这三部分的功能。
设计输入一般有文本输入、图形输入、网表输入等几种方法,仿真之前需要编辑好输入信号激励文件,编程配置则需要根据开发板的说明书来对系统的输入输出管脚进行配置。
此外,QuartusII软件为设计流程的每个阶段提供QuartusII图形用户界面、EDA工具界面以及命令行界面。
可以在整个流程中只使用这些界面中的一个,也可以在设计流程的不同阶段使用不同界面。
2.2QuartusII软件使用介绍
QuartusII软件可以完成设计流程的所有阶段。
它是一个全面的、易于使用的独立解决方案。
图2-2显示QuartusII图形用户界面为设计流程每个阶段所提供的功能。
图2-2QuartusII图形用户界面的功能
下面就以一个例子来详细介绍QuartusII软件的使用流程,包括设计输入、编译、仿真、管脚配置、下载编程。
我们设计的例子是一个十六进制计数器,并要求用七段数码管进行显示计数值。
其步骤如下:
1.建立工程
1)启动QuartusII软件后,就会出现如图2-3所示的用户图形界面。
图2-3用户图形界面
2)使用NewProjectWizard(File菜单)或quartus_map可执行文件建立新工程。
建立新工程时,指定工程工作目录,分配工程名称,指定顶层设计实体的名称。
在用户图形界面点击File菜单,在File下拉菜单中点击NewProjectWizard,如图2-4所示。
点击NewProjectWizard后,出现如图2-5所示的界面。
图2-4点击File下拉菜单中的NewProjectWizard
图2-5新建工程向导:
目录,名称和顶层设计实体名
在指定路径之前,可以先新建一个工程文件夹,如在这里我们新建一个工程文件夹并命名为counter&displayer,将工程取名为counter_displayer,因为工程的顶层设计实体名应与工程名一致,所以工程的顶层设计实体名也是counter_displayer,设置后如图2-5所示。
然后点击next。
3)出现如图2-6所示的添加设计文件的对话框。
图2-6新建工程向导:
添加文件设计对话框
当然,在这里可以选择不添加文件而直接点击next进入下一步,因为在QuartusII用户图形界面中也可以通过点击assignment->setting->files来添加您所需要的文件。
所以在这里我们直接点击next进入下一步。
4)出现如图2-7所示的器件系列设置对话框。
图2-7新建工程向导:
器件系列设置对话框
对于不需要下载到开发板而只想软件仿真的设计,在这里可以不用指定特定的器件,让软件自动选择适当的器件,但对于需下载到开发板来实现的设计,就应该在这里选择与开发板上对应的芯片。
例如,若开发板上用的是MAX系列的EPM7128SL84-15的芯片,那么就应该在下拉菜单Family下应选择MAX7000S,在Availabledevices中选择EPM7128SL84-15,然后点击Next进入下一步。
5)出现如图2-8所示的EDA工具设置对话框。
图2-8新建工程向导:
EDA工具设置对话框
QuartusII软件本身包含了一套完整的开发流程,从设计输入、分析与综合、功能仿真、适配、时序分析、时序仿真,到下载都可以在QuartusII中完成,对于没有特别的要求可以不调用其他的EDA软件,在这里直接选择Next进入下一步。
6)出现如图2-9所示的新建工程摘要界面。
图2-9新建工程的摘要
至此,一个新工程已经建立好,点击Finish可以进入到此工程的编辑环境。
这个设计可以分为两个部分:
第一部分就是十六进制计数器,第二部分是七段数码管的显示部分。
对于计数器就直接调用软件库里面的模块,显示部分实际上也就是个译码电路,所以接下来我们将详细说明这两部分的设计来介绍从设计输入到下载的整个流程。
2.设计输入
可以使用QuartusII软件在QuartusIIBlockEditor中建立设计,或使用QuartusIITextEditor通过AHDL、VerilogHDL或VHDL设计语言来建立HDL设计。
QuartusII软件还支持采用EDA设计输入和综合工具生成的EDIFInputFiles(.edf)或VerilogQuartusMappingFiles(.vqm)建立的设计。
另外,还可以在EDA设计输入工具中建立VerilogHDL或VHDL设计,生成EDIF输入文件和VQM文件,或在QuartusII工程中直接使用VerilogHDL或VHDL设计文件。
在这个设计中,采用QuartusIIBlockEditor和QuartusIITextEditor两种输入组合来完成设计。
1)设计译码器电路
首先设计译码器电路,采用文本输入方式来描述此电路,它的输入来自十六进制计数器的输出:
qa、qb、qc和qd,译码器的输出连接到七段数码管,这是个典型组合逻辑电路。
在QuartusII图形用户界面下:
点击FileNew后,在如图2-10所示的对话框中选择VHDLFile。
图2-10新建文件类型选择
双击VHDLFile之后,保存文件VHDL1.vhd,文件名读者可以自己命名,但文件名一般都是和程序或电路相关的,如在这里我们取名为decode,保存后出现如图2-11所示的代码编辑窗口。
图2-11代码编辑窗口
图2-11中,decode.vhd是保存后的文件名,而counter_displayer是整个工程的工程名,因为在一个工程下可以包含多个文件(.vhd,.bsf等等),接下来就是编写此组合逻辑电路来实现译码的功能,如图2-12所示。
图2-12编写程序
完整程序如下:
LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
ENTITYdecodeIS
PORT(qa,qb,qc,qd:
INstd_logic;
seven_seg_input:
OUTstd_logic_vector(7DOWNTO0));
ENDdecode;
ARCHITECTUREdecode_archOFdecodeIS
SIGNALcounter_output_reg:
std_logic_vector(3DOWNTO0);
SIGNALseven_seg_input_reg:
std_logic_vector(7DOWNTO0);
BEGIN
counter_output_reg<=qa&qb&qc&qd;
display:
PROCESS(counter_output_reg,seven_seg_input_reg)
BEGIN
CASEcounter_output_regIS
WHEN"0000"=>seven_seg_input_reg<="00000010";
WHEN"0001"=>seven_seg_input_reg<="10011110";
WHEN"0010"=>seven_seg_input_reg<="00100100";
WHEN"0011"=>seven_seg_input_reg<="00001100";
WHEN"0100"=>seven_seg_input_reg<="10011000";
WHEN"0101"=>seven_seg_input_reg<="01001000";
WHEN"0110"=>seven_seg_input_reg<="01000000";
WHEN"0111"=>seven_seg_input_reg<="00011110";
WHEN"1000"=>seven_seg_input_reg<="00000000";
WHEN"1001"=>seven_seg_input_reg<="00001000";
WHEN"1010"=>seven_seg_input_reg<="00010000";
WHEN"1011"=>seven_seg_input_reg<="11000000";
WHEN"1100"=>seven_seg_input_reg<="01100010";
WHEN"1101"=>seven_seg_input_reg<="10000100";
WHEN"1110"=>seven_seg_input_reg<="01100000";
WHEN"1111"=>seven_seg_input_reg<="01110000";
WHENOTHERS=>seven_seg_input_reg<="00000010";
ENDCASE;
seven_seg_input<=seven_seg_input_reg;
ENDPROCESS;
ENDdecode_arch;
程序中信号的命名因人而异,但主要是为了方便自己阅读程序,当然对于复杂的程序,应养成给程序添加注释的习惯,以便日后查阅或供他人阅读。
其中qa、qb、qc和qd来自计数器的输出;seven_seg_input是译码器的输出信号,输入到七段数码管。
程序输入完之后,就可以对这段代码进行编译了。
但应该注意的是,先把decode.vhd设为顶层文件再进行编译,不然编译报错说找不到顶层文件,设置方法:
在QuartusII软件中点击Project菜单,出现如图2-13所示的对话框,并选择SetasTop-LevelEntity或直接使用组合键Ctrl+Shift+J,然后就可以点击编译进行编译了。
图2-13设为顶层文件
编译完之后,将此程序生成block块,在设计整体功能时要调用到这个模块,生成的方法是:
在用户界面中点击decode.vhd文件,使之处于当前活动窗口,然后点击File->Create\Update->CreateSymbolsforCurrentFile,等待symbol的生成,如图2-14所示。
图2-14生成block块
成功生成之后会有对话框提示:
Createsymbolfilewassuccessful,生成的block会自动添加到Project->decode下,如图2-15所示。
图2-15自动添加到元件库的decode模块
到这一步,译码器电路就已经完成了。
2)建立观察模块
为了仿真的方便,我们生成另一个小模块,在仿真的时候便于我们观察计数器的计数过程。
描述如下:
把计数器的输出信号qa、qb、qc和qd作为译码器输入的同时,又将此4个信号作为这个小模块的输入,小模块的输出信号是result,也就是计数器的输出,信号result的值是从0一直到15,其实和译码器的输出是一样的,不同的是:
小模块counter_output的输出信号result是为了在时序仿真是便于观察计数器的计数,而译码器decode的输出信号seven_segment[7..0]在下载配置的时候是和七段数码管相对应的,直接控制数码管上显示的计数值。
此模块的设计过程可以参考译码器电路的设计过程。
首先新建个.vhd文件,保存为counter.vhd文件,然后在此文件中编辑代码实现功能,接着编译并为此文件创建一个block块,程序如下:
LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
ENTITYcounter_outputIS
PORT(a,b,c,d:
INstd_logic;
result:
OUTstd_logic_vector(3DOWNTO0));
ENDcounter_output;
ARCHITECTUREcounter_output_archOFcounter_outputIS
SIGNALresult_reg:
std_logic_vector(3DOWNTO0);
BEGIN
result_reg<=d&c&b&a;
result<=result_reg;
ENDcounter_output_arch;
这个模块如图2-16所示。
图2-16counter_output模块
3)建立顶层文件
在步骤1)和2)中,都是先在文本编辑器中编辑程序,编译通过后再生成一个与之对应的模块,这两个模块在工程文件夹中的名字分别是:
decode.bsf和counter_output.bsf,下面需完成此设计的最后一步,点击File->new后,在弹出的对话框中(见图2-10)选择BlockDiagram/SchematicFile,用图形编辑器来新建一个图形输入文件。
双击BlockDiagram/SchematicFile后,就进入了图形输入的界面,如图2-17所示,将名为block.bdf的文件保存为counter_displayer.bdf,保存后的文件counter_displayer.bdf即为整个工程的Top-LevelEntity。
图2-17图形输入界面
在界面空白处双击左键,会弹出如图2-19左边所示的器件模块选择框,在图中,我们看到先前生成的两个模块:
decode以及counter_output都在Project下,依次双击decode、counter_output以及图中c:
/altera/quartus51/libraries->others->maxplus2->
74161,将这三个模块添加进图形编辑环境中,分别如图2-18、图2-19、图2-20所示。
图2-18选择counter_output模块
图2-19选择decode模块
图2-20选择74161模块
注意:
各个模块的后缀名是.bsf块符号文件,而工程的counter_displayer的top-level实体的后缀是.bdf的设计文件。
添加完毕三个模块之后,还应添加输入输出符号,接下来的工作就是用信号线把模块之间对应的端口连接起来,且系统的输入信号与输入符号相连,系统的输出信号与输出符号相连。
输入符号:
输出符号:
连接好的整个系统如图2-21所示。
图2-21连接好的整个系统
整个系统的输入信号分别是:
LDIN(预置输入使能)、A、B、C、D(A、B、C、D为预置输入端)、ENT、ENP、CLRN(置零使能)、CLK(时钟输入端),此计数器的工作方式请参74161的功能表。
图2-22的连线中,单根信号线由工具
来画出,而信号总线则由
来画出,双击输入输出符号可以改变输入输出信号的名字。
要删除某根信号线,可以先用鼠标单击选中要删除的信号线,然后按Delete键就可以删除了。
在对总线重命名的时候应注意要标明总线的宽度如result[3..0],不然在编译的时候也会出错。
3.编译
连接好并重命名之后,保存文件,然后就可以对这个顶层文件counter_displayer.bdf进行编译了,编译完将出现如图2-22所示的警告。
图2-22编译后出现警告
警告内容:
a)Warning:
OutputpinsarestuckatVCCorGND
Warning:
Pin"SEVEN_SEGMENT[0]"stuckatGND
b)Warning:
TimingAnalysisdoesnotsupPORTtheanalysisoflatchesassynchronouselementsforthecurrentlyselecteddevicefamily
c)Warning:
Foundpinsfunctioningasundefinedclocksand/ormemoryenables
Info:
Assumingnode"CLK"isanundefinedclock
出现的警告没有大碍。
警告a)指出有信号始终接地,因为在译码器电路中输出信号总线SEVEN_SEGMENT[7..0]中的SEVEN_SEGMENT(7)始终是0,对整个设计没有影响;警告b)指出现选的器件在时序分析时存在不足;警告c)在配置管脚时自动解除,对仿真也不会有什么影响。
4.时序仿真
首先建立波形文件,点击File->New->OtherFiles,在出现的对话框中双击VectorWaveformFile便进入了波形文件编辑环境。
在图2-23中,右键单击左边空白处,选择InsertNodeorBus…,添加用以仿真的输入输出信号。
图2-23波形文件编辑环境
在出现的InsertNodeorBus对话框中点击NodeFinder后,即会出现一个为仿真添加输入输出信号的界面,在界面的Filter中选择Post-Compilication在点击List,那么工程编译后所有内外部的信号都会被列出来,这里所指的外部信号即系统的所有输入输出信号,而内部信号则是系统内的一些寄存器的输入输出信号,不同进程间用于通信的信号等,一般只选择输入输出信号即可,如果需要更详细的分析系统,则通常也将与寄存器相关的一些信号添加到仿真波形文件中。
系统的所有信号如图2-24左边所示。
图2-24添加输入输出信号界面
选择需添加到波形文件的信号后点击ok,工程的波形文件如图2-25所示。
图2-25工程的波形文件
下一步工作是为波形文件中每个输入信号编辑激励信号,编辑激励信号的工具如图10-26的最左端所示,如欲编辑输入时钟信号clk,则只需要先点击clk信号,使之变为浅蓝色,然后运用左端的编辑工具
,输入它的周期,即时钟的频率;而对于其他输入信号一般用:
、
就可以完成对其编辑。
编辑好输入波形文件,保存后便可用于仿真。
仿真结果如图2-27所示,经观察,仿真结果符合设计要求。
图2-26仿真结果
5.管脚配置
在原理图输入设计中,两个输出信号RESULT及SEVEN_SEGMENT其中前者只是为了我们在波形仿真的时候方便看到计数结果,从0~15,如此循环,可以对这个输出信号不进行管脚匹配;而后者则是要真正输出到七段数码管的信号,从而以驱动数码管来显示相应的计数值,该信号的值和RESULT并不一样,如两个信号的第一个值RESULT是0,而SEVEN_SEGMENT是2,在前面的程序中,我们可以看到SEVEN_SEGMENT的值是根据decode.vhd中CASE语句来定义的。
根据开发板的原理图,可以将SEVEN_SEGMENT[7:
0]信号的8个信号即:
SEVEN_SEGMENT[7]~SEVEN_SEGMENT[0],分别对应到管脚13、12、11、10、9、15、14、49。
输入信号分两类,一类是时钟信号CLK,另一类是其他控制使能信号CLRN、ENP、ENT、LDN及设定初值的信号A、B、C、D。
其中CLK是有固定的输入管脚(第83脚),剩下的其他信号根据其使能特性接在高电平(与电源接在一起)或者低电平(接地),每一个都可以接在除时钟脚以外的管脚上。
在QuartusII中打开如图2-27所示界面,然后便可以逐个对输入信号、输出信号进行管脚的配置了,如双击Location下面的空表格就可以设定管脚的位置。
图2-27管脚配置界面
6.下载编程
管脚配置完之后,再进行一次编译,然后就可以下载了,只需要在图标工具栏里用鼠标指向Programmer图标,或者在Tools的下拉菜单中选择Programmer即可。
图2-28编译界面
当然在下载之前需要先安装下载驱动程序。
在此前提下,点击Programmer后便进入到下载的界面,如图2-29所示。
图2-29下载界面
在图2-29中看到HardwareSetup之后的栏目中显示NoHardware,此时需要将硬件添加进来,点击该按钮,按照提示一步步完成便可,完成后可以看到该按钮后的栏目中的显示为ByteBlasterMV[LPT1],如图2-30所示。
图2-30显示ByteBlasterMV
此时确保下载线与电脑并口已经连接好,选中要下载到板的程序文件,并选择编程选项,如图2-30中黑色长条所示,点击Start就可以对芯片编程,下载完成后如图2-31所示。
图2-31下载完成
下载完成后,看开发板上的显示是否与自己的想法一样,若有差异,回到程序中检查,并再度调试程序,直至得到正确的结果。
第三章实验内容
3.1设计性实验
实验一、数字频率计的设计
一、实验目的
1.了解时序电路设计的一般方法
2.了解利用可编程器件和VHDL语言进行数字系统开发的方法
3.掌握数字频率计的设计。
二、实验内容
本次实验要求设计一个数字频率计,频率测量范围为1Hz~50MHz,采用100MHz的基准时钟。
刷新时间不大于2秒(最长2秒刷新一次频率显示)。
功能示意框图如图3-1:
图3-1数字频率计功能示意图
三、实验提示
本次实验要求设计一个数字频率计,对输入频率进行测量。
根据实验的要求,频率测量的范
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 系统 设计 实验 指导书