-目录第一章EDA_VHDL实验设计1-1、应用QuartusII完成基本组合电路设计1-2.应用QuartusII完成基本时序电路的设计1-3.设计含异步清0和同步时钟使能的加法计数器1-4.7段数码显示译码器设计1-5.8位数码扫描显示电路设计1-6.数控分频器的设计1-7.在QuartusII中用原理图输入法设计8位全加器1-8.在QuartusII中用原理图输入法设计较复杂数字系统1-9.用QuartusII设计正弦信号发生器1-10.8位16进制频率计设计1-11.序列检测器设计1-12.VHDL状态机A/D采样控制电路实现1-13.数据采集电路和简易存储示波器设计1-14.比较器和D/A器件实现A/D转换功能的电路设计1-15移位相加硬件乘法器设计1-16采用流水线技术设计高速数字相关器1-17线性反馈移位寄存器设计1-18循环冗余校验(CRC)模块设计附录:GW48EDA/SOPC主系统使用说明第一节:GW48教学系统原理与使用介绍,第二节:实验电路结构图第三节:步进电机和直流电机使用说明第四节:SOPC适配板使用说明第五节:GWCK/PK2/PK3系统万能接插口与结构图信号/与芯片引脚对照表第一章EDA_VHDL实验设计1-1.应用QuartusII完成基本组合电路设计(1)实验目的:熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。(2)实验内容1:首先利用QuartusⅡ完成2选1多路选择器(例1-1)的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出图3-3所示的仿真波形。最后在实验系统上进行硬件测试,验证本项设计的功能。(3)实验内容2:将此多路选择器看成是一个元件mux21a,利用元件例化语句描述图1-1,并将此文件放在同一目录中。以下是部分参考程序:...COMPONENTMUX21APORT(a,b,s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDCOMPONENT;...u1:MUX21APORTMAP(a=a2,b=a3,s=s0,y=tmp);u2:MUX21APORTMAP(a=a1,b=tmp,s=s1,y=outy);ENDARCHITECTUREBHV;【例1-1】ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)-BEGINIFs='0'THENy=a;ELSEy=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;图1-1双2选1多路选择器图1-2mux21a功能时序波形按照本章给出的步骤对上例分别进行编译、综合、仿真。并对其仿真波形作出分析说明。(4)实验内容3:引脚锁定以及硬件下载测试。若选择目标器件是EP1C6Q240C8,建议选实验电路模式5(附录图7),用键1(PIO0,引脚号为1)控制s0;用键2(PIO1,引脚号为2)控制s1;a3、a2和a1分别接clock5(引脚号为16)、clock0(引脚号为93)和clock2(引脚号为17);输出信号outy仍接扬声器spker(引脚号为129)。通过短路帽选择clock0接256Hz信号,clock5接1024Hz,clock2接8Hz信号。最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使扬声器输出不同音调)。(5)实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。(6)附加内容:根据本实验以上提出的各项实验内容和实验要求,设计1位全加器。首先用QuartusⅡ完成全加器的设计,包括仿真和硬件测试。实验要求分别仿真测试底层硬件或门和半加器,最后完成顶层文件全加器的设计和测试,给出设计原程序,程序分析报告、仿真波形图及其分析报告。(7)实验习题:以1位二进制全加器为基本元件,用例化语句写出8位并行二进制全加器的顶层文件,并讨论此加法器的电路特性。1-2.应用QuartusII完成基本时序电路的设计(1)实验目的:熟悉QuartusⅡ的VHDL文本设计过程,学习简单时序电路的设计、仿真和测试。(2)实验内容1:设计触发器(使用例1-2-1,给出程序设计、软件编译、仿真分析、硬件测试及详细实验过程。【例1-2-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点BEGINPROCESS(CLK,Q1)BEGINIFCLK'EVENTANDCLK='1'THENQ1=D;ENDIF;ENDPROCESS;Q=Q1;--将内部的暂存数据向端口输出(双横线--是注释符号)ENDbhv;(3)实验内容2:设计锁存器(使用例1-2-2,同样给出程序设计、软件编译、仿真分析、硬件测试及详细实验过程。-【例1-2-2】...PROCESS(CLK,D)BEGINIFCLK='1'--电平触发型寄存器THENQ=D;ENDIF;ENDPROCESS;(4)实验内容3:只用一个1位二进制全加器为基本元件和一些辅助的时序电路,设计一个8位串行二进制全加器,要求:1、能在8-9个时钟脉冲后完成8位二进制数(加数被加数的输入方式为并行)的加法运算,电路须考虑进位输入Cin和进位输出Cout;2、给出此电路的时序波形,讨论其功能,并就工作速度与并行加法器进行比较;3、在FPGA中进行实测。对于GW48EDA实验系统,建议选择电路模式1(附录图3),键2,键1输入8位加数;键4,键3输入8位被加数;键8作为手动单步时钟输入;键7控制进位输入Cin;键9控制清0;数码6和数码5显示相加和;发光管D1显示溢出进位Cout。4、键8作为相加起始控制,同时兼任清0;工作时钟由clock0自动给出,每当键8发出一次开始相加命令,电路即自动相加,结束后停止工作,并显示相加结果。就外部端口而言,与纯组合电路8位并行加法器相比,此串行加法器仅多出一个加法起始/清0控制输入和工作时钟输入端。(提示:此加法器有并/串和串/并移位寄存器各一)。(5)实验报告:分析比较实验内容1和2的仿真和实测结果,说明这两种电路的异同点。详述实验内容3。1-3.设计含异步清0和同步时钟使能的加法计数器(1)实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。(2)实验原理:实验程序为例1-3。【例1-3】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS='0');--计数器异步复位ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿IFEN='1'THEN--检测是否允许计数(同步使能)IFCQI9THENCQI:=CQI+1;--允许计数,检测是否小于9ELSECQI:=(OTHERS='0');--大于9,计数值清零ENDIF;ENDIF;ENDIF;IFCQI=9THENCOUT='1';--计数大于9,输出进位信号ELSECOUT='0';ENDIF;CQ=CQI;--将计数值向端口输出ENDPROCESS;ENDbehav;(3)实验内容1:在QuartusⅡ上对例1-3进行编辑、编译、综合、适配、仿真。说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。(4)实验内容2:引脚锁定以及硬件下载测试。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。(5)实验内容3:使用SignalTapII对此计数器进行实时测试。(6)实验内容4:从设计中去除SignalTapII,要求全程编译后生成用于配置器件EPCS1编程的压缩POF文件,并使用ByteBlasterII,通过AS模式对实验板上的EPCS1进行编程,最后进行验证。(7)实验内容4:为此项设计加入一个可用于SignalTapII采样的独立的时钟输入端(采用时钟选择clock0=12MHz,-计数器时钟CLK分别选择256Hz、16384Hz、6MHz),并进行实时测试。(8)思考题:在例1-3中是否可以不定义信号CQI,而直接用输出端口信号完成加法运算,即:CQ=CQ+1?为什么?(9)实验报告:将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。1-4.7段数码显示译码器设计(1)实验目的:学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。(2)实验原理:7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。例1-4作为7段译码器,输出信号LED7S的7位分别接如图5-18数码管的7个段,高位在左,低位在右。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,例5-18中的LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0)应改为…(7DOWNTO0)。(3)实验内容1:说明例1-4中各语句的含义,以及该例的整体功能。在QuartusII上对该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例图如图1-3所示。图1-37段译码器仿真波形【例1-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECL7SISPORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFDECL7SISBEGINPROCESS(A)BEGINCASEAISWHEN0000=LED7S=0111111;WHEN0001=LED7S=0000110;WHEN0010=LED7S=1011011;WHEN0011=LED7S=1001111;WHEN0100=LED7S=1100110;WHEN0101=LED7S=1101101;WHEN0110=LED7S=1111101;WHEN0111=LED7S=0000111;WHEN1000=LED7S=1111111;WHEN1001=LED7S=1101111;WHEN1010=LED7S=1110111;WHEN1011=LED7S=1111100;WHEN1100=LED7S=0111001;WHEN1101=LED7S=1011110;WH