EDA实验指导书

更新时间:2024-05-16 18:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2012.09

EDA技术实验指导书

第一章 针对HDL设计的EDA基本实验与设计 实验1.计数器设计

(1) 实验目的:熟悉Quartus II的Verilog/VHDL文本设计流程全过程,学习计数器的设计、仿真和硬件测试。掌握原理图与文本混合设计方法。

(2) 实验原理:参考教材[1]3.3节。实验程序为例3-22,设计流程参考本章。

(3) 实验内容1:根据教材[1]的4.1节在Quartus II上对例3-22进行编辑、编译、综合、适配、仿真。说明例中各语句的作用。给出其所有信号的时序仿真波形,根据波形详细描述此设计的功能特点,包括RST、EN、LOAD、DATA,CLK等信号等异步和同步特性。查阅编译后的计数器的时序特点,从时序仿真图和编况,给出分析报告。

(4) 实验内容2:用教材[1]第4章介绍的不同方式锁定引脚并硬件下载测试。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。硬件实验中,注意测试所有控制信号和显示信号,包括RST、EN、LOAD、DATA等的同步、异步特性,进位信号等。时钟CLK换不同输入:手动有抖动或无抖动键输入,1Hz或4Hz时钟脉冲输入,这需要附录1.3的模块B4板才能获得,或直接使用KX_DN5/7系列EDA/SOPC实验系统。

(5) 实验内容3:使用SignalTap II对此计数器进行实时测试,流程与要求参考教材[1]第4章,给出报告。

(6) 实验内容4:从设计中去除SignalTap II,要求全程编译后,将生成的SOF文件转变成用于配置器件EPCS4的压缩的间接配置文件 *. jic,并使用USB-Blaster对实验板上的EPCS4进行编程,最后进行验证。编程和全程编译前,按教材[1]图4-6所示,设定所有控制和参数。

(7) 实验内容5:为此项设计加入一个可用于SignalTap II采样的独立的时钟输入端CLK0。计数时钟可以低一点,而采样时钟可高一些,如选择clock0=2MHz,而计数时钟CLK可分别选择256Hz、16384Hz、6MHz,并进行实时测试。

(8) 实验内容6:建立一个原理图工程,将教材[1]例3-22文件变成图4-1所示的CNT10元件。然后按照此图的连接方式完成设计。对此电路进行仿真,并说明此电路的功能特点。如何利用此电路设计一个不同模的计数器,或可预置的分频器? 最后在开发板上硬件实现,验证分频情况。

(9) 实验内容7:利用Synplify综合教材[1]例3-22,并用QuartusII适配和下载验证。利用Chip Planner分别对此计数器的RST和所有输出位取反,然后下载验证。

(10) 实验报告:将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果写进实验报告。

示例路径:\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP3_CNT10B(注意参考对应的ppt实验指导课件,以下大部分实验示例都包含对应的ppt实验指导课件)。PPT文件路径:\\KX_DN7\\EDA_EP3C5E\\EXPxx_PPT_3C5E,此路径也对应以下KX_DN5/7系列创新实验开发系统的实验示例和对应的ppt实验指导课件。

另请注意,对多数实验都给出了经硬件验证调试好的演示示例,目的就是为读者能顺利完成实验验证或设计,有的示例的目的是希望能启发或引导读者完成更有创意的设计,其中一些示例尽管看上去颇有创意,但都不能说是最佳或最终结果,这给读者留有许多改进和发挥的余地。此外还有少数示例未提供源代码,是考虑到实验示例设计者的著作权,这些示例仍能给读者在设计的可行性、创意和创新方面以宝贵的启示。示例分两部分:

对应KX_DN5/7系统,在文件夹\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs中的示例包含完整的源代码,并公开全部设计;而在文件夹\\KX_DN7\\EDA_EP3C5E\\DEMOs中的设计,仅供演示,无源代码。所有的示例演示操作都有详细说明,可分别参考对应文件夹中的PDF/PPT文件。

1 原理图示意图

译报告中了解计数时钟输入至计数数据输出的延时情况,包括设定不同优化约束后的改善情况以及当选择不同FPGA后的延时情

实验2.多路选择器设计

(1) 实验目的:进一步熟悉Quartus II的Verilog/VHDL文本设计流程,组合电路的设计仿真和硬件测试。

(2) 实验内容1:根据教材[1]4.1节的流程,利用Quartus II完成4选1多路选择器(例3-2)的文本编辑输入(MUX41a.v)和仿真测试等步骤,给出教材[1]图3-5所示的仿真波形。

(3) 实验内容2:在实验系统上硬件测试,验证此设计的功能。对于引脚锁定以及硬件下载测试,a、b、c和d分别接来自不

2

同的时钟或键;输出信号接蜂鸣器(5E+板的引脚标于板上)。最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使蜂鸣器输出不同音调)。

(4) 实验内容3:对Verilog/VHDL不同描述方式的4选1多路选择器进行硬件实验,比较它们的特性。

(5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考

ppt

实验指导课件。示例文件路径:

/EDA_EP3C5E/EXPERIMENTs/EXP0_MUX41/MUX41B。分别按下或放开键K1,K2,蜂鸣器将发出4种不同声音。

实验3.8位全加器设计

(1) 实验目的:熟悉利用Quartus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个8位全加器的设计把握文本和原理图输入方式设计的详细流程。

(2) 实验原理:一个8位全加器可以由8个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。

(3) 实验内容1:按照教材[1]4.5.1节完成半加器和1位全加器的设计,包括用文本或原理图输入,编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个元件符号入库。

(4) 实验内容2:参考教材[1]4.6节,使用keep属性,在仿真波形中了解信号e的输出情况。

(5) 实验内容3:参考教材[1]4.6,4.7节,使用keep属性和SignalProbe,在实验板上观察信号e随输入的变化情况。 (6) 实验内容4:建立一个更高层次的原理图或文本设计,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真和硬件测试。

实验4.原理图输入法设计频率计

(1) 实验目的:熟悉原理图输入法中74系列等宏功能元件的使用方法,掌握更复杂的原理图层次化设计技术和数字系统设计方法。完成8位十进制频率计的设计。

(2) 原理说明:利用教材[1] 4.5节介绍的2位计数器模块,连接它们的计数进位,用四个计数模块就能完成一个8位有时钟使能的计数器;对于测频控制器的控制信号,在仿真过程中应该注意它们可能的毛刺现象。最后按照设计流程和方法即可完成全部设计。

(3) 实验内容1:首先根据教材[1] 4.5节完成2位频率计的设计,包括各模块和顶层系统的仿真测试,然后进行硬件测试。

(4) 实验内容2:设计一个全新的电路,能取代教材[1] 图4-53电路的功能,仿真并硬件测试。

(5) 实验内容3: 然后建立一个新的原理图设计层次,在此基础上将其扩展为8位频率计,仿真测试该频率计待测信号的最高频率,并与硬件实测的结果进行比较。

(6) 实验报告: 给出各层次的原理图、工作原理、仿真波形,详述硬件实现过程验结果。KX_DN5/7实验系统演示示例: \\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP10_FTEST_6LED

1 7段译码器真值表

实验5.十六进制7段数码显示译码器设计

(1) 实验目的:学习7段数码显示译码器的Verilog/VHDL硬件设计。

(2) 实验原理:7段数码是纯组合电路。通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是二进制的,所以输出表达都是十六进制的。为了满足十六进制数的译码显示,最方便的方法就是利用

Verilog/VHDL译码程序在FPGA中来实现。所以首先要设计一段程序。该程序可按照教材[1]例3-2的case语句表述方法,再根据表4-1的真值表写出程序。设输入的4位码为A[3:0],输出控制7段共阴数码管(图3)的7位数据为LED7S[6:0]。输出信号LED7S的7位分别接图4-3的共阴数码管的7个段,高位在左,低位在右。例如当LED7S输出为“1101101”时,数码管的7个段g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,然后将LED7S改为8位输出。

(3) 实验内容1:将设计好的Verilog译码器程序在Quartus II上进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。提示:设仿真激励信号时用输入总线的方式给出输入信号仿真数据,仿真波形图如图4-2所示。

3

图2 7段译码器仿真波形

图3 共阴数码管 图4 计数器和译码器连接电路的顶层文件原理图 (4)实验内容2:引脚锁定及硬件测试。

(5) 实验内容3: 用教材[1]第3章介绍的例化语句,按图4的方式连接成顶层设计电路(用Verilog/VHDL表述), 图中的CNT4B是一个4位二进制加法计数器。模块DECL7S即为以上的7段译码设计文件。重复以上实验过程。 注意图4中的tmp是

4

位总线,led

7

位总线。KX_DN5/7

实验系统演示示例(含实验指导

pdf

课件):

\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP2_7S_DECODER即可。

(6) 实验内容4:用SignalProbe将图4-4的信号tmp引出,并于数码管上显示出来。

实验6 数码扫描显示电路设计

(1)实验目的:学习硬件扫描显示电路的设计。

(2)实验原理:图5所示的是8位数码扫描显示电路,其中每个数码管的8个段h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1~k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其他7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1~k8分别被单独选通,同时在段信号输入口加上希望该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。

图5 8位数码扫描显示电路

(3)实验内容:给出Verilog/VHDL设计程序。对其进行编辑、编译、综合、适配、仿真,给出仿真波形。进行硬件测试。将实验过程和实验结果写进实验报告。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):

\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP29_SCAN_LED。

实验7 半整数与奇数分频器设计

(1)实验目的:学习利用Verilog/VHDL完成实用程序的设计。

(2)实验内容1:实验原理参考教材[1]5.8节。结合教材[1]图5-34的时序和其他节点的时序波形(如果必要),详细分析与说明图5-33电路的工作原理。再给出此电路的Verilog程序。然后进行编译和仿真。改变模块M3的计数模数,使此电路成为一个输出为50%占空比的7分频器。最后进行FPGA硬件测试,其中包括完成3、5、7、9计数分频比测试和对应的占空比测试;以及对图5-34的信号C的占空比验证测试。

(3)实验内容2:结合教材[1]图5-35的时序波形,详细分析与说明程序例5-37描述的电路的工作原理,比较电路图5-33,说出它们工作原理上的异同点。设计7分频电路,对例5-36重复实验内容1的工作。

(4)实验内容3:结合图5-37的时序波形,详细分析与说明图5-36电路的工作原理。再给出此电路的Verilog/VHDL程序,然后进行编译和仿真。按实验内容1的要求完成所有设计和测试。

(5)实验内容4:给出图5-33电路的分频比与输出脉冲占空比之间的关系式。另外,用Verilog/VHDL设计一个电路,使之输出频率恒定,但占空比可随预置数控制,并用KX_DN5/7实验系统实测验证之。

实验8 模可控计数器设计

(1)实验内容1:分析并说明教材[1]例5-33至例5-36的设计思想。将它们都改成8位计数器形式,然后按照实验4-7的实验内容1的要求完成全部仿真测试和硬件测试内容。给出此四例对应的输入输出分频比一般公式,在较高输入频率上分别验证它们 4

的分频公式。评估其工作可靠性。

(2)实验内容2:选择较低速度的目标器件,如Flex10K、Acex1K、Cyclone等系列,甚至74系列宏模块,验证此类设计中毛刺造成提前清0或提前预置的情况,并详细讨论解决这些问题的方法。

图6 针对不同预置数,占空比均衡后的分频器输出

(3)实验内容3:由于此4例设计输出的占空比太小,没有功率驱动能力,如驱动蜂鸣器等。所以为以上程序加入一个二分频电路使之有50%的占空比。然后再测试它们的分频情况和占空比改变情况。图4-6就是针对不同预置数,占空比均衡(50%占空比)后的分频器输出信号波形。这个电路在后文有关硬件音乐演奏电路设计实验中将会用到。

(4)实验内容4:给出教材[1]例5-33电路预置数与输出脉冲占空比之间的关系式,用实验系统实测验证。 (5)实验内容5:讨论教材[1]图5-31波形图中几个信号的时延关系和产生的原因。

KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP30_FDIV。

实验9 VGA彩条信号显示控制电路设计

(1)实验目的:学习VGA图像显示控制电路设计。

(2)实验原理:实验原理和实验程序参考教材[1]的实验5-3。

(3) 实验内容1:根据VGA的工作时序,详细分析并说明例5-39程序的设计原理,给出仿真波形,并说明之。然后完成VGA彩条信号显示的硬件验证实验。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件): /EDA_EP3C5E/EXPERIMENTs/EXP11_VGA_COLOR_SQUR/,和/EXP11_VGA_COLOR_LINE/。 下载后,接上VGA显示器,连续按键K1即显示不同模式的彩条图像。 (4) 实验内容2:设计可显示横彩条与棋盘格相间的VGA彩条信号发生器。 (5) 实验内容3:设计可显示英语字母的VGA信号发生器电路。 (6) 实验内容4:设计可显示移动彩色斑点的VGA信号发生器电路。 实验

10 移位相加型8位硬件乘法器设计

(1)实验原理:实验原理参考教材[1]的实验5-4

(2)实验任务1:详细分析并说明教材[1]例5-18的组合电路乘法器程序设计原理,仿真测试,显示每一次移位相加的结果,回答产生的问题(为什么?)。基于此原理,结合教材[1]图5-42电路,设计一个时序方式工作的8位乘法器。要求在时钟驱动下,此乘法器每一时钟脉冲作一次移位相加,8个时钟信号后完成乘法运算。为了节省资源,此电路的加法器尽可能用少的位数。

(3)实验任务2:根据图4-7,实现此项设计必须的4个元件的Verilog/VHDL设计实现,并对它们分别仿真测试。再根据图4-7完成整体Verilog/VHDL程序设计(包括元件例化),再仿真测试,与图4-8比较。硬件验证中,CLK用无抖动键控制。

(4)实验任务3:设计一个时序控制器来控制图4-7中的CLK。每一次计算能自动产生8个脉冲,控制计算。另外,与教材[1]5.3.4节介绍的使用纯组合电路完成的移位相加乘法器的性能进行比较。包括逻辑宏单元的使用情况,工作速度,稳定性等方面进行比较。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP32_MULTI8X8/MLTL8X8。

图7 8位乘法器逻辑原理图

5

图8 8位移位相加乘法器运算逻辑波形图

实验11 移位寄存器设计

用Verilog/VHDL分别设计并进串出/并出型、串进串出/并出型8位移位寄存器。给出仿真波形和功能说明,然后硬件测试。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP39_SHIFTER/ 。

实验12 串行静态显示控制电路设计

(1)实验原理:通过扫描方式实现多数码管显示电路的缺点是,占用控制端口较多。如果使用串并转换器件74LS164,则仅用两根控制口线就能实现多个数码显示的目的。对于此类显示电路,FPGA一旦将数据串出进入74LS164,驱动LED显示后,就无需给出其它信号,如扫描信号。故称静态显示控制。图4-9是两个74LS164构成的静态串行显示电路,此电路可以十分容易地扩展到多个数码管。图4-9中,第9脚清0接高电平,第8脚的CP进入同步时钟,第1、2脚连在一起,用移位方式输入各数据位。8个时钟后,一个8位字节的数据被移入74LS164,并锁存于输出口。

图9 串/并转换数码管静态显示电路

由于此口有一定的驱动能力,可以在每一片74LS164的输出口直接接上7段共阴数码管。注意,如果要在数码管上显示一个数据,如5,则必须首先在FPGA内部通过七段译码器电路(真值表是表4-1)译码成8位数值(包括小数点)后才能串出显示。

此外还应注意,如果串接的74LS164较多,CP的同步时钟频率要适当,频率太高则会使显示不清晰,太低则会有闪烁感。

(2)实验任务1:在FPGA中设计一个能控制8个74LS164组成的串行静态8数码管显示模块。要求数据显示清晰,且无闪烁感。此电路可用于以后的实验,如频率计测频数据显示等。 对此实验可以先完成1个数码管的显示,再推广至8个。

第二章 针对LPM宏模块应用的EDA实验与设计 实验13.查表式硬件运算器设计

(1) 实验原理:对于高速测控系统,影响测控速度最大的因素可能是,在测得必要的数据并经过复杂的运算后,才能发出控制指令。因此数据的运算速度决定了此系统的工作速度。为了提高运算速度,可以用多种方法来解决,如高速计算机、纯硬件运算器、ROM查表式运算器等。用高速计算机属于软件解决方案,用纯硬件运算器属于硬件解决方案,而用ROM属于查表式运算解决方案。

(2)实验内容1:设计一个4X4bit查表式乘法器。包括创建工程、调用LPM_ROM模块、在原理图编辑窗中绘制电路图,全程编译,对设计进行时序仿真,根据仿真波形说明此电路的功能,引脚锁定编译,编程下载于FPGA中,进行硬件测试。完成实验报告。乘法表文件是例4-1。其中的地址/数据表达方式是,冒号左边写ROM地址值,冒号右边写对应此地址放置的16进制数据。如47﹕28,表示47为地址,28为该地址中的数据,这样,地址高4位和低4位可以分别看成是乘数和被乘数,输出的数据可以看成是它们的乘积。

WIDTH = 8 ; DEPTH = 256 ;

ADDRESS_RADIX = HEX ; DATA_RADIX = HEX ; CONTENT BEGIN

00:00; 01:00; 02:00; 03:00; 04:00; 05:00; 06:00; 07:00; 08:00; 09:00; 10:00; 11:01; 12:02; 13:03; 14:04; 15:05; 16:06; 17:07; 18:08; 19:09;

6

20:00; 21:02; 22:04; 23:06; 24:08; 25:10; 26:12; 27:14; 28:16; 29:18; 30:00; 31:03; 32:06; 33:09; 34:12; 35:15; 36:18; 37:21; 38:24; 39:27; 40:00; 41:04; 42:08; 43:12; 44:16; 45:20; 46:24; 47:28; 48:32; 49:36; 50:00; 51:05; 52:10; 53:15; 54:20; 55:25; 56:30; 57:35; 58:40; 59:45; 60:00; 61:06; 62:12; 63:18; 64:24; 65:30; 66:36; 67:42; 68:48; 69:54; 70:00; 71:07; 72:14; 73:21; 74:28; 75:35; 76:42; 77:49; 78:56; 79:63; 80:00; 81:08; 82:16; 83:24; 84:32; 85:40; 86:48; 87:56; 88:64; 89:72; 90:00; 91:09; 92:18; 93:27; 94:36; 95:45; 96:54; 97:63; 98:72; 99:81; END ;

注意以上“CONTENT BEGIN”下所示的数据格式只是为了节省篇幅,实用中应该使每一数据组(如01:00 ;)仅占一行。 (3) 实验内容2:利用查表完成算法的原理,对下式进行计算,并通过时序分析报告了解其“运算”速度。计算精度和数据区域根据所能设定的ROM的大小自行决定。按照以上实验的要求,完成完整的实验流程。

f(x,y)?8SIN2(2?xy)?2COS2(x) 2?实验14. 正弦信号发生器设计

(1)实验目的:进一步熟悉Quartus II及其LPM_ROM与FPGA硬件资源的使用方法。

(2)实验内容1:实验原理参考教材[1]6.4节相关内容。根据6.4.2节和例6-10,在Quartus II上完成简易正弦信号发生器设计,包括建立工程,生成正弦信号波形数据,仿真等。最后在实验系统上实测,包括SignalTap II测试、FPGA中ROM的在系统数据读写测试和利用示波器测试。最后完成EPCSx配置器件的编程。信号输出的D/A使用DAC0832,注意其转换速率是1μs。

(3)实验内容2:按照教材[1]图6-49所示,用原理图方法设计正弦信号发生器,硬件实现时可以通过SignalTap II观察波形。

(4)实验内容3:设计一任意波形信号发生器(可使用附录1的软件),可以使用LPM双口RAM担任波形数据存储器,利用单片机产生所需要的波形数据,然后输向FPGA中的RAM。

(5)实验报告:根据以上的实验内容写出实验报告,包括设计原理、程序设计、程序分析、仿真分析、硬件测试和详细实验过程。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP8_SINGT_DAC0832/SNGT。数码管显示地址信号。如果不用示波器,可以用逻辑分析仪,此文件已在示例中建立。键K8是EN,也是逻辑分析仪触发信号。

实验15. 八位数码显示频率计设计

(1)实验目的:设计8位频率计,学习较复杂的数字系统的设计方法。

(2)实验原理:根据频率的定义和频率测量的基本原理,并参考教材[1]第4章。测定信号的频率必须有一个脉宽为1s的脉冲计数允许的信号;1s计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期做好准备。

(3) 实验内容1:测频控制信号可以由一个独立的发生器来产生(教材[1]例6-13),即图4-10中的FTCTRL。根据测频原理,测频控制时序可以如图4-11所示。设计要求FTCTRL的计数使能信号CNT_EN能产生一个1s脉宽的周期信号,并对频率计中的32位二进制计数器COUNTER32B(图10)的ENABL使能端进行同步控制。当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒钟的计数值锁存进锁存器REG32B中,并由外部的十六进制7段译码器译出,显示计数值。锁存信号后,必须有一清零信号RST_CNT对计数器清零,为下一秒的计数操作做准备。对例1-2仿真测试,验证其功能。

用Verilog/VHDL设计另两个模块:REG32B和COUNTER32B,并对它们单独仿真测试。根据图10完成Verilog/VHDL设计,程序中例化这3个模块。最后完成频率计设计、仿真和硬件实现,并给出其测频时序波形及其分析。

图10 频率计电路框图 图11 频率计测频控制器FTCTRL测控时序图

7

module FTCTRL (CLKK, CNT_EN, RST_CNT, LOAD); input CLKK; output CNT_EN, RST_CNT,LOAD; wire CNT_EN, LOAD; reg RST_CNT,Div2CLK; always @(posedge CLKK) Div2CLK <= ~Div2CLK ; always @(CLKK or Div2CLK) begin

if (CLKK==1'b0 & Div2CLK==1'b0) RST_CNT <= 1'b1 ; else RST_CNT <= 1'b0 ; end

assign LOAD = ~Div2CLK ; assign CNT_EN = Div2CLK ; endmodule

(4)实验内容2:将频率计改为8位十进制频率计。

(5)实验内容3:对于实验2的频率计测频显示,分别利用数码扫描方式显示结果和利用实验4-12的串行静态方式来显示结果。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):

/EDA_EP3C5E/EXPERIMENTs/EXP36_FTEST_HEX/F_TESTER。

实验16.简易逻辑分析仪设计

(1)实验原理:逻辑分析仪就是一个多通道逻辑信号或逻辑数据采样、显示与分析的电子设备。逻辑分析仪可以将数字系统中的脉冲信号,逻辑控制信号,总线数据,甚至毛刺脉冲都能同步高速地采集进该仪中的高速RAM中暂存,以备显示和分析。因此逻辑分析仪在数字系统、甚至计算机的设计开发和研究中提供必不可少的帮助。本设计实验只是利用RAM和一些辅助器件设计一个简易的数字信号采集电路模块。但如果进一步配置好必要的控制电路和通信接口,就能构成一台实用的设备。图4-12是一个8通道逻辑数据采集电路,主要由3个功能模块构成:一个LPM_RAM、一个10位计数器LPM_COUNTER和一个锁存器74244。RAM0是一个8位RAM,存储1024个字节,有10根地址线address[9..0],它的data[7..0]和q[7..0]分别是8位数据输入和输出总线口;wren是写入允许控制,高电平有效;inclock是数据输入锁存时钟;inclocken是此时钟的使能控制线,高电平有效。

对图4-12电路的时序仿真报告波形图如图4-13所示。注意对激励信号,即输入信号CLK、CLK_EN、CLR、WREN和输入总线数据DIN(7..0)的激励信号波形的设置及时序安排。由图4-13的波形可以看到,在RAM数据读出时间段,能正确地将写入的数据完整地按地址输出。这表明,图4-12的电路确能成为一个8通道的数字信号采集系统。

图12 逻辑数据采样电路顶层设计

8

图13 逻辑数据采样电路时序仿真波形 图14 数字移相信号发生器电路模型图

(2)实验任务1:完成图4-12的完整设计(包括加入锁相环)和仿真,并进行硬件测试。首先根据实验系统的基本情况进行引脚锁定,编译,然后下载。被测的8路逻辑信号可以来自实验系统上的时钟信号源。利用QuartusII的在系统存储器内容编辑器In-System Memory Content Editor,或使用QuartusII的SignalTapII测试采样的波形数据。

(3)实验任务2:对电路作一些改进,如为不同的触发方式加一些逻辑控制,则容易将其设计成为一个8通道,深度1024位的简易逻辑分析仪。

实验17. DDS正弦信号发生器设计

(1)实验目的:学习利用EDA技术和FPGA实现直接数字频率综合器DDS的设计。

(2)实验内容1:实验原理参考教材[1]6.11节。详细叙述DDS的工作原理,根据教材[1]图6-72完成整体设计和仿真测试,深入了解其功能,并由仿真结果进一步说明DDS的原理。完成编译和下载,用示波器观察输出波形。

(3)实验内容2:将教材[1]图6-72的顶层原理图表述为Verilog/VHDL程序,重复实验1的内容。

(4)实验内容3:在教材[1]图6-72的设计中增加一些元件,设计成扫频信号源,扫频速率、扫频频域、扫频步幅可设置。所有控制可以用单片机完成,如使用8051核来完成。

(5)实验内容4:将此设计改成频率可数控的正交信号发生器,即使电路输出两路信号,且相互正交,一路为正弦(sin)信号,一路为余弦(cos)信号,它们所对应ROM波形数据相差90度,可用附录1介绍的软件生成。

(6)实验内容5:利用此电路设计一个FSK信号发生器,并硬件实现之。 (7)思考题:如果不作截断,此例的频率精度和相位精度分别是多少?

KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP23_DDS/DDSP。

实验18. 移相信号发生器设计

(1)实验原理:移相信号发生器是2003年大学生电子设计竞赛题中的一个设计项目。图2-14是基于DDS模型的数字移相信号发生器的电路模型图。FWORD是8位频率控制字,控制输出信号的频率;PWORD是8位相移控制字,控制输出信号的相移量;ADDER32B和ADDER10B分别为32位和10位加法器;SIN_ROM是存放正弦波数据的ROM,10位数据线,10位地址线,设其中的数据文件是LUT10X10.mif,可由附录1的软件或用MATLAB生成;REG32B和REG10B分别是32位和10位寄存器;POUT和FOUT分别为10位输出,可以分别与两个高速D/A相接,它们分别输出参考信号和可移相正弦信号。图4-14所示的相移信号发生器与教材[1]图6-72的不同之处是多了一个波形数据ROM,它的地址线没有经过移相用的10位加法器,而直接来自相位累加器,所以用于基准正弦信号输出。

(2)实验内容1:完成10位输出数据宽度的移相信号发生器的设计,要求使用锁相环,设计正弦波形数据MIF文件;给出仿真波形。最后进行硬件测试。

(3)实验内容2:修改设计,增加幅度控制电路(如可以用一乘法器控制输出幅度)。

(4)思考题:如果频率控制字宽度直接用32位,相位控制字宽度直接用10位,输出仍为10位,时钟为20MHz,计算频率、相位和幅度三者分别的步进精度是多少,给出输出频率的上下限。

(5)实验报告:根据以上的实验要求、实验内容和思考题写出实验报告。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF

9

课件):\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP9_DDS_PHASE_2DAC。此示例也可用双通道高速DAC模块。如果不用示波器,可以用逻辑分析仪,此文件已在示例中建立,打开即能测试输出的正弦波形。

实验19. 4X4阵列键盘键信号检测电路设计

(1)实验原理:4X4阵列键盘十分常用,图4-15是其电路和接口。假设其两个4位口,A[3:0]和B[3:0]都有上拉电阻。在应用中,当按下某键后,为了辨别和读取键信息,一种比较常用的方法是,向A口扫描输入一组分别只含一个0的4位数据,如1110,1101,1011等。若有键按下,则B口一定会输出对应的数据,这时,只要结合A,B口的数据,就能判断出键的位置。如当键S0按下,对于输入的A=1110时,那么输出的B=0111。于是{B,A}=0111_1110就成了S0的代码。例4-3就是根据此原理给出的Verilog设计程序。

图15 4X4键盘电路和10芯接口 图16 设置端口上拉

module KEY4X4 (CLK,A,B,R);

input CLK; input [3:0] A; output [3:0] B; output [3:0] R; reg [1:0] C ; reg [3:0] R,B ; always @ (posedge CLK) begin C<=C+1; case(C)

0: B=4'B0111; 1: B=4'B1011; 2: B=4'B1101; 3: B=4'B1110; endcase

case({B,A} )

8'B0111_1110 : R=4'H0; 8'B0111_1101 : R=4'H1; 8'B0111_1011 : R=4'H2; 8'B0111_0111 : R=4'H3; 8'B1011_1110 : R=4'H4; 8'B1011_1101 : R=4'H5; 8'B1011_1011 : R=4'H6; 8'B1011_0111 : R=4'H7; 8'B1101_1110 : R=4'H8; 8'B1101_1101 : R=4'H9; 8'B1101_1011 : R=4'HA; 8'B1101_0111 : R=4'HB; 8'B1110_1110 : R=4'HC; 8'B1110_1101 : R=4'HD; 8'B1110_1011 : R=4'HE; 8'B1110_0111 : R=4'HF; endcase end endmodule

(2)实验任务1:根据实验原理分析程序4-3,仿真并详细说明程序中各语句结构的功能。 (3)实验任务2:在实验系统上硬件验证。

(4)实验任务3:修改程序例4-3,使第二个case语句成为一个独立的有时钟敏感信号的过程结构,再根据教材[1]6.4.2节的方法使程序自动生成ROM替代模块(要检测键功能是否被改变);或干脆例化进一个LPM_ROM以取代第二个case语句。检测其功能和资源的变化情况。

(5)实验任务4:利用此项电路进而设计一个4位加、减、乘法计算器。

(6)实验任务5:为了更实用,参考教材[1]7.8节,为键盘电路加上去抖动电路模块。

(7)实验任务6:首先回答问题:例4-3的程序中为何没有加default语句,它希望借此实现什么功能?如果加上default语句会有什么后果?分别用仿真波形说明之。在default语句存在的条件下,需要增加什么电路才能实现例4-3同样的功能?试给出完整程序,并硬件验证之。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):

\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP31_SCAN_4X4KEY

10

模拟信号电压vi接于LM393的“+”输入端时,由FPGA产生自小到大的搜索数据加于DAC0832的数据输入口,而其变换后的输出电平接于LM393的“?”端,使之将得到一个比较电压vo。当vo < vi时,LM393的“1”脚输出高电平1,而当vo > vi时,LM393输出低电平0。在LM393输出由1到0的转折点处,FPGA输向0832的数据必定与待测信号电压vi成正比对应关系。由此数即可算得vi电压值的大小。

(2)实验内容1:首先设计图4-32的电路。注意LM393与FPGA接的输出口要接5K1上拉电阻于3.3V。另接限流电阻300欧姆于FPGA。然后编程序设计状态机实现此功能。实验操作中,首先调谐电位器输出一个电压值,然后用CLR复位一次,接着从数码管上看到与被测电压成正比的数值。此后,每调谐电位器输出一个新值,就要复位一次,以便能从头搜索到这个电压值。

(3)实验内容2:修改程序,要求:①能自动搜索被测信号,计算后显示出来;②由于每次搜索都是从0开始,从而“A/D转换”速度太慢。试设计一个控制搜索的状态机,尽量提高“转换”速度,如安排一个特定的算法(如黄金分割法)进行快速搜索。要求一切都用FPGA实现。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP26_DAC_TO_ADC/

图32 比较器和D/A构成A/D电路框图

实验34 通用异步收发器UART设计

(1) 实验目的:学习利用状态机设计通用异步RS232硬件通信模块,并通过此通信模块设计信号信号采集、分析、显示与处理模块。由于篇幅所限,不拟展开详细介绍,请首先查阅相关资料。

UART即Universal Asynchronous Receiver Transmitter通用异步收发器,是一种应用广泛的短距离串行传输接口。往往用于短距离、低速、低成本的微机与下位机的通讯中。8250、8251、NS16450等芯片都是常见的UART器件。相关的通信口是TXD和RXD,它们是交错连接的。TXD是UART发送端,为输出;RXD是UART接收端,为输入。在TXD、RXD信号线上的电平也不是普通的TTL 5V电平,而是RS232的接口电平。基本UART只需要两条信号线(TXD、RXD)就可以完成数据的相互通信,接收与发送是互不干扰的,也就是全双工的。但要求在TXD、RXD制定一定的规则,以使接收、发送之间能协调一致。需要注意的是,在UART上是不传送时钟信号的(这就是所谓的“异步”),而两个设备的时钟不可能是同步的,这就要求UART必须通过检测进行数据同步。

图33 UART通信设计顶层电路

(2) 实验内容1:验证检测示例设计(图4-33)。完成已有设计的验证性实验:将RS232通信线的一头接实验系统,另一头接PC机的串行1口(COM1口),接上USB电源。

下载EDA_EP3C5E/DEMOs/EXPL5_SPCTR_ANALZ_232/SPC,到FPGA中;按复位键K1,即与PC进行通信。进入“FOR_PC_FILE”目录,运行(双击)并安装通信软件:FASetup.exe 。

图2-33是UART通信与数据采集电路设计。其中KX232模块即本项基于状态机的UART综合通信模块;LPMRAM是数据

21

缓冲存储器,其控制状态机是KXRAM模块;ROMJ是正弦波示例数据ROM,如果改变其中数据,可以看到图4-34显示的波形随之而变。CNT8B是此ROM的地址发生器。

如果图4-33中增加一个高速的ADC采样控制电路,则输出口ADCLK是外部ADC的工作时钟(目前的示例还用不上)。串行通信口TXD前接的D触发器有滤波效应。

打开已安装好的“FreqAna”,在窗口中选择“连续取数”,则可在窗中看到如图4-34的来自FPGA的正弦波数据。在图1-34的上面的窗口可看到此波的频谱。通信软件:\\KX_DN7\\IMPTNT_FILE\\FOR_PC_FILE

(3) 实验内容2:用Verilog自主设计:1、波特率发生器;2、UART接收器;3、UART发送器;4、UART设计总模块;5、结合图4-30,设计数据采集模块,并与UART模块结合,进行数据传送。

(4) 实验内容3:为示例电路(图4-33)增加图4-30的ADC0809模块,使得能通过扩展模块B6的ADC0809将外部模拟信号数据通过串行通信方式送到PC,在图4-34所示窗口显示出来。

另一UART演示示例:KX_DN5/7实验系统演示示例:\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP42_RS232_PIANO 实验指导PPT文件:\\KX_DN7\\EDA_EP3C5E\\EXPxx_PPT_3C5E

图34 通过RS232通信来自实验系统的正弦波信号

实验35 点阵型与字符型液晶显示器驱动控制电路设计

(1)实验目的:学习设计Verilog/VHDL状态机控制不同类型液晶显示器的电路。

(2)实验原理:通常情况下,目前常用的字符或点阵型液晶都是使用单片机控制的。为了提高自主创新能力和自主知识产权系统设计水平,和提高Verilog/VHDL设计的功力,本设计中希望全部用Verilog/VHDL状态机设计并控制,不用任何CPU。从实用角度看这也是十分必要的。请读者查阅LCD控制资料:\\KX_DN7\\IMPTNT_FILE\\LCD_FILE

(3)实验任务1:设计点阵型液晶显示控制电路。查阅文件夹LCD_FILE中的“H128X64液晶显示使用说明”等文件。用状态机设计128X16点阵型液晶显示控制电路。显示内容自定。

(4)实验任务2:设计字符型液晶显示控制电路。查阅文件夹LCD_FILE中的“HS162-4液晶显示使用说明”和“JH16X04LCD”等文件。用状态机设计2行16字符或4行16(20)字符型液晶显示控制电路。显示内容自定。以上2类KX_DN5/7实验系统演示

(

含实

验指

pdf/PDF

):

/EDA_EP3C5E/DEMOs/EXPL18_PS2_64X128LCD/

/EXPERIMENTs/EXP20_8051_LCD128X64/;或/EXPERIMENTs/EXP17_KX8051_GPS_FTEST/。

实验36 串行ADC/DAC控制电路设计

通过网络查阅一些常用串行ADC、DAC的使用方法,包括它们的工作性能、用法、时序特点,设计出对应的电路,然后用状态机对其控制,最后就控制电路的速度,可靠性等几方面讨论比较用状态机和CPU进行控制的优缺点。特别是一些串行ADC/DAC器件是DSP系统中的常用器件,因此学习这些控制电路的设计很有实用意义。串行ADC/DAC资料查阅文件夹:\\KX_DN7\\adda_PDF

(1)实验任务1:10位ADC/DAC的状态机控制。ADC TLV1572 QSPI/SPI/DSP串行接口和DAC TLV5637双通道QSPI/SPI/DSP串行接口高速。首先设计状态机模块控制TLV1572进行数据采样和TLV5637的双通道信号输出,然后完成三项任务:1、根据实验8-3的要求,完成数据采集模块的设计;2、完成基于DDS的移相信号发生器设计(此例需要双通道DAC);3、设计利萨如图信号发生器,要求两路正弦信号频率可用键独立设置。

(2)实验任务2:16位ADC的状态机控制。用状态机控制ADC ADS110,设计一个精度较高的电压表,基本要求可参考实验8-2。可用附录1.3的扩展模块C3。

(3)实验任务3:高速12位串行ADC的状态机控制。实验器件选择ADS7816和TLV2541。

实验37 硬件消抖动电路设计

设计任务:FPGA中的去抖动电路十分常用,在以后的实验中会多次用到。参考教材[1]8.8节,设计不同类型的消抖动电路,比较并讨论它们的适用范围和性能特点。提出自己的设计方案,并硬件验证之。较方便的方法是用原理图作顶层设计,调入不同

22

的消抖动模块进行比较测试。5E+系统的8个键都有抖动,可以利用它们进入一个计数器,按键后观察其计数情况,即能很容易了解去抖动效果。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):

\\KX_DN7\\EDA_EP3C5E\\EXPERIMENTs\\EXP41_Di_TRemble

实验38 数字彩色液晶显示控制电路设计

(1)实验任务1:设计点阵彩色液晶显示控制电路。查阅\\KX_DN7\\IMPTNT_FILE\\LCD_FILE中的“AT070TN83V.1”等文件。用状态机设计数字TFT 800X480彩色点阵型液晶显示控制电路,注意此类液晶控制原理与VGA相同,可参考教材[1]实验5-3。TFT 800X480彩色液晶接口板上的跳线U/D是控制上下扫描方式的;跳线L/R是控制左右扫描方式的;跳线MODE是选择DE或HV时序控制方式。ED方式是普通LCD时序控制方式,而HV方式是类似VGA的控制方式,其行场控制信号分别是HS和VS;若选择DE方式,则另两跳线分别选择DCLK和DE;若选择HV方式,则另两跳线分别选择HS和VS。KX_DN5/7实验系统演示示例:/EDA_EP3C5E/ EXPERIMENTs/EXP13_COLOR_LCD/。实验课件:

\\KX_DN7\\EDA_EP3C5E\\EXPxx_PPT_3C5E\\ EXP13示例说明.ppt

(2)实验任务2:分别用DE和HV两种时序控制方式显示彩条和彩色方块图像。 (3)实验任务3:将逻辑分析仪采样的8路数字波形信号用彩色LCD显示。 (4)实验任务4:将简易存储示波器采样的模拟波形信号用彩色LCD显示。

(5)实验任务5:将DDS函数信号发生器的波形用彩色LCD显示。主要波形有正弦波、方波、三角波、锯齿波、移相双路正弦波、里萨如图、AM、FM、FSK和扫频等。

(6)实验任务6:利用彩色LCD显示动画游戏,并用普通键、PS2键盘/PS2鼠标控制游戏。

KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/DEMOs/EXPL9_Super_Mario2/,和/DEMOs/EXP7_LCD_light_GAME/。

图35 8位串行静态显示状态机控制电路

实验39 状态机控制串/并转换8数码静态显示

(1)实验原理:用状态机实现显示控制。图4-35是8位串行静态显示控制电路。其核心控制模块是状态机PULS8。其中状态机工作时钟CLK来自锁相环C0;信号P为移位寄存器提供时钟,信号LDO是移位寄存器的并入数据同步加载信号,即当高电平时,P的上升沿将数据D[7..0]锁入;CT是输出时钟;COUT是控制多路选择器的计数器时钟;当多路选择器遍历8个显示数据后,SS[2..0]=111,告诉状态机此信息,于是进入等待延时,以便稳定显示。这时ROUT输出清0信号,启动延时定时器,定时结束后,输出信号RU;状态机得此信号后,启动新一轮扫描。

(2)实验任务1:写出状态机PULS8的Verilog表述,并对其仿真波形进行详细说明。如果各状态机中出现大量重复性输出操作,试用任务语句简化之。

(3)实验任务2:根据图4-35的电路,完成全部设计,硬件实现并验证。特别注意从FPGA至74LS164显示板的连线不能过长,以免干扰,需设置成安全状态机!此外为了实现既显示清晰,又无闪烁,需合理控制状态机时钟频率和延时定时器延时量。

(4)实验任务3:为使数码管的小数点能独立显示控制,修改图4-35电路。

KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP43_74HC164_8LED/

23

实验40 基于CPLD的FPGA PS模式编程配置控制电路设计

(1)实验目的:为了利用FPGA的重构特性,学习PS模式FPGA编程配置电路设计。

(2)实验原理:Xilinx和Altera的FPGA都是SRAM型的,每次上电应用时,必须通过专用配置器件,如EPCS等器件,将配置文件载入FPGA后才能投入应用。为了某些目的的应用,如需不断改变硬件编译码方式、或硬件通信协议及算法的通信目的,需要面对大量不同方式的硬件控制(如高档编程器),如果只用一个配置器件,就无法使FPGA面对不断变化的大量硬件控制和算法要求。最好的方法是利用处理器、单片机或CPLD等器件将存储于大容量ROM中的FPGA的多个配置文件,根据需要选择载入特定的文件。这样一来,一片FPGA就能担当起数片乃至数十片同样FPGA的功能;即所谓多任务重配置,或多任务重构技术。然而用单片机等处理器来对FPGA配置的缺点是:1、速度慢。由于FPGA的配置文件都比较大,用CPU通过串行方式的配置(通常用PS模式)耗费时间长,对于有些需要FPGA快速投入功能实现的系统是无法容忍的;2、可靠性不高。由于配置时间长,在此期间,容易遇到外来干扰信号;3、电路结构大而复杂。所以使用CPLD作配置控制器件是最合适的,其优势是成本低、体积小、电路简单、速度高(比普通CPU的配置速度高4个数量级)。具体电路和时序可以参考教材[1]第2章。电路如教材[1]图2-54所示,此项设计可用MAX3000系列的EPM3128,或EPM3064。控制时序可参考图2-52。此种模式的配置口必须是PS模式,而普通FPGA板上留出的都是JTAG口。所以要注意设计一块含PS配置口的FPGA目标板。烧写到EPROM,EEPROM或Flash ROM中的FPGA的配置文件的文件格式是 .hexout。此文件的生成有两个途径:

1、全程编译前进行设置。首先进入如图4-6所示窗口,选择Programming Files页;点击选中Hexadecimal Output File项,Start address取0;Count取UP。全程编译后即输出 .hexout文件;

2、文件转换。进入图4-25所示的窗口。在Programming Files type栏选择Hexadecimal Output File项,最后与间接配置文件生成方式相类似,但要调入POF文件进行转换。

请特别注意以上两种方式生成的 .hexout的表面看上去容量大小是不同的,但实际能进入EPROM的文件容量大小是相同的,且不能压缩;因此生成的 .hexout文件的显示字节数并不等于实际占用ROM的字节数。对于EP1K30或EP1C3器件,对应的.hexout文件占用ROM的空间约50KB上下。

(3)实验任务1:首先利用状态机设计可实现单任务的FPGA配置控制电路,选择合适的系统时钟,保证能高速且可靠地对FPGA配置,探讨时钟频率大小。数据ROM可用27系列的EEPROM,如W27E040、W27C02、W27C512等,或29系列的Flash ROM:W29C040。

(4)实验任务2:将以上设计扩展为多任务可控型FPGA配置电路,将一片ROM以64KB划分多个区域(如8个区域)以存放配置文件。进而再扩展成无线或网络遥控配置模式。基于扩展模块C1和C8的示例演示程序:KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/DEMOs/EXPL17_FPGA_PS_CONFIG/

如果希望将此PS模式配置电路在FPGA中调试好后再烧写到价廉的CPLD(如EPM3064)中,FPGA的内部RAM必须足够大。而且注意在此类调试环境中,需要将生成的 .hexout文件的后缀改为 .hex,才能被LPM RAM作为初始化文件调用,或在In-System Memory Editor中调用。

实验41 基于FPGA的红外双向通信电路设计

(1)实验原理:参考实验6-17。对于图6-28,其红外管是与单片机接口的,而本实验是与FPGA接口(I/O电平是3.3V),为了I/O电平匹配即提高发射管的功率,将图6-28发射管的电路改为图4-36的形式,此外红外接收管的输入口需经300欧姆电阻串接后再接入FPGA。

图36 红外管发射电路

(2)实验任务。利用FPGA控制红外发射和接收管,进行双向通信。通信数据显示可用数码管实现,数据用4X4键盘输入。通信控制可采用多种方式。如单片机核、状态机、或普通逻辑电路。

第四章 EDA综合实验与设计

实验42 乐曲硬件演奏电路设计

24

(1)实验目的:学习利用实验4-8的分频器设计硬件乐曲演奏电路。

(2)实验原理:硬件乐曲演奏电路顶层模块图如图4-37所示,电路由6个子模块构成。本实验设计项目作为“梁祝”乐曲演奏电路的实现。组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素。问题是如何来获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。下面首先从几个方面来了解图4-37的工作原理:

① 音符的频率可以由图4-37中的SPKER获得,对应的程序是例4-10。这是一个数控分频器(其详细工作原理可参考实验4-8)。由其CLK端输入一具有较高频率(1MHz)的时钟,通过SPKER分频后,经由D触发器构成的分频电路,由SPK_KX口输出。由于直接从分频器中出来的输出信号是脉宽极窄的信号,为了有利于驱动扬声器,需另加一个D触发器分频以均衡其占空比,但这时的频率将是原来的1/2。SPKER对CLK输入信号的分频比由输入的11位预置数TN[10..0]决定。SPK_KX的输出频率将决定每一音符的音调;这样,分频计数器的预置值TN[10..0] 与输出频率就有了对应关系,而输出的频率又与音乐音符的发声有对应关系,例如在F_CODE模块(例4-9)中若取TN[10..0]=11'H40C,将由SPK_KX发出音符为“3”音的信号频率。详细的对应关系可以参考图4-38的电子琴音阶基频对照图。

② 音符的持续时间需根据乐曲的速度及每个音符的节拍数来确定,图4-37中模块F_CODE(例4-9)的功能首先是为模块SPKER(11位分频器)提供决定所发音符的分频预置数,而此数在SPKER输入口停留的时间即为此音符的节拍周期。模块F_CODE是乐曲简谱码对应的分频预置数查表电路,程序例4-9中的数据是根据图4-38得到的,程序中设置了“梁祝”乐曲全部音符所对应的分频预置数,共14个,每一音符的停留时间则由音乐节拍和音调发生查表模块MUSIC中简谱码和工作时钟inclock的频率决定,在此为4Hz。这4Hz频率来自分频模块FDIV,模块MUSIC是一个LPM_ROM。它的输入频率来自锁相环PLL20的2kHz输出频率。而模块F_CODE的14个值的输出由对应于MUSIC模块输出的q[3..0]及4位输入值INX[3..0]确定,而INX[3..0]最多有16种可选值。输向模块F_CODE中INX[3..0]的值在SPKER中对应的输出频率值与持续的时间由模块MUSIC决定。

③ 模块CNT138T是一个8位二进制计数器,内部设置计数最大值为139(例4-8),作为音符数据ROM的地址发生器。这个计数器的计数频率即为4Hz。即每一计数值的停留时间为0.25秒,恰为当全音符设为1秒时,四四拍的4分音符持续时间。例如,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为11'H40C,在SPKER的输入端停留了1秒。随着计数器CNT138T按4Hz的时钟速率作加法计数时,即随地址值递增时,音符数据ROM模块MUSIC中的音符数据将从 ROM中通过q[3..0]端口输向F_CODE模块,“梁祝”乐曲就开始连续自然地演奏起来了。CNT138T的节拍是139,正好等于ROM中的简谱码数,所以可以确保循环演奏。对于其他乐曲,此计数最大值要根据情况更改。

(3)实验内容1:定制音符数据ROM MUSIC。该ROM中对应“梁祝”乐曲的音符数据已列于例4-12中。注意该例数据表中的数据位宽、深度和数据的表达类型。此外,为了节省篇幅,例中的数据都横排了,实际程序中必须以每一分号为一行来展开。最后对该ROM进行仿真,确认例4-12中的音符数据已经进入ROM中。图4-39是利用Quartus II的在系统存储器读写编辑器(In-System Memory Content Editor)读取FPGA内MUSIC ROM中的数据,请与例4-12的数据比较。

(4)实验内容2:对图4-37中所有模块,分别仿真测试,特别是通过联合测试模块F_CODE和SPKER,进一步确认F_CODE中的音符预置数的精确性,因为这些数据决定了音准。可以根据图4-38的数据进行核对,如果有偏差要修正。

(5)实验内容3:完成系统仿真调试和硬件验证。演奏发音输出口是SPK_KX。与演奏发音相对应的简谱码输出显示可由LED[3:0]输出在数码管LEDA显示;HIGH为高八度音指示,可由发光管指示。

图37 乐曲演奏电路顶层设计

25

图38 电子琴音阶基频对照图(单位Hz)

(6)实验内容4:在模块MUSIC填入新的乐曲。针对新乐曲的曲长和节拍情况改变模块CNT138T的计数长度(注意,一个计数值就是一个1/4拍)。

(7)实验内容5:争取可以在一个ROM装上多首歌曲,可手动或自动选择歌曲。

(8)实验内容6:根据此项实验设计一电子琴,有16个键。用4X4键盘,程序可参考实验4-19。

(9)实验内容7:为以上的电子琴增加一到两个RAM,用以记录弹琴时的节拍,音符和对应的分频预置数。当演奏乐曲后,可以通过控制功能自动重播曾经弹奏的乐曲。

(10)实验报告:用仿真波形和电路原理图,详细叙述硬件电子琴的工作原理及其5个模块的功能,叙述硬件实验情况。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/EXPERIMENTs/EXP4_Music/。 【例】

module CNT138T (CLK, CNT8);

input CLK; output[7:0] CNT8 ; reg[7:0] CNT; wire LD; always @(posedge CLK or posedge LD ) begin

if (LD) CNT <= 8'b00000000 ; else CNT<=CNT+1; end assign CNT8=CNT; assign LD=(CNT==138) ; endmodule 【例】

module F_CODE (INX, CODE, H, TO);

input[3:0] INX; output[3:0] CODE; output H; output[10:0] TO; reg[10:0] TO; reg[3:0] CODE; reg H; always @(INX) begin

case (INX) // 译码电路,查表方式,控制音调的预置?

0 : begin TO <= 11'H7FF; CODE<=0; H<=0; end 1 : begin TO <= 11'H305; CODE<=1; H<=0; end 2 : begin TO <= 11'H390; CODE<=2; H<=0; end 3 : begin TO <= 11'H40C; CODE<=3; H<=0; end 4 : begin TO <= 11'H45C; CODE<=4; H<=0; end 5 : begin TO <= 11'H4AD; CODE<=5; H<=0; end 6 : begin TO <= 11'H50A; CODE<=6; H<=0; end 7 : begin TO <= 11'H55C; CODE<=7; H<=0; end 8 : begin TO <= 11'H582; CODE<=1; H<=1; end 9 : begin TO <= 11'H5C8; CODE<=2; H<=1; end 10 : begin TO <= 11'H606; CODE<=3; H<=1; end 11 : begin TO <= 11'H640; CODE<=4; H<=1; end 12 : begin TO <= 11'H656; CODE<=5; H<=1; end 13 : begin TO <= 11'H684; CODE<=6; H<=1; end 14 : begin TO <= 11'H69A; CODE<=7; H<=1; end 15 : begin TO <= 11'H6C0; CODE<=1; H<=1; end default : begin TO <= 11'H6C0; CODE<=1; H<=1; end endcase end endmodule 【例】

26

module SPKER (CLK, TN, SPKS);

input CLK; input[10:0] TN; output SPKS; reg SPKS; reg[10:0] CNT11;

always @(posedge CLK) begin : CNT11B_LOAD// 11位可预置计数器 if (CNT11==11'h7FF) begin CNT11=TN; SPKS<=1'b1; end else begin CNT11=CNT11+1; SPKS<=1'b0 ; end end endmodule 【例】

module FDIV (CLK,PM );

input CLK ; output PM ; reg [8:0] Q1; reg FULL; wire RST ; always @(posedge CLK or posedge RST) begin if (RST) begin Q1<=0; FULL<=1; end

else begin Q1 <= Q1+1; FULL<=0 ; end end assign RST = ( Q1==499 ) ; assign PM = FULL ;

assign DOUT = Q1 ; endmodule

图39 In-System Memory Content Editor对MUSIC模块的数据读取

【例】

WIDTH = 4 ; //“梁祝”乐曲演奏数据 DEPTH = 256 ; //实际深度139

ADDRESS_RADIX = DEC ; //地址数据类是十进制

DATA_RADIX = DEC ; //输出数据的类型也是十进制

CONTENT BEGIN //注意实用文件中要展开以下数据,每一组占一行

00: 3 ; 01: 3 ; 02: 3 ; 03: 3; 04: 5; 05: 5; 06: 5; 07: 6; 08: 8; 09: 8; 10: 8 ; 11: 9 ; 12: 6 ; 13: 8; 14: 5; 15: 5; 16:12; 17: 12;18: 12;19:15; 20:13 ; 21:12 ; 22:10 ; 23:12; 24: 9; 25: 9; 26: 9; 27: 9; 28: 9; 29: 9; 30: 9 ; 31: 0 ; 32: 9 ; 33: 9; 34: 9; 35:10; 36: 7; 37: 7; 38: 6; 39: 6; 40: 5 ; 41: 5 ; 42: 5 ; 43: 6; 44: 8; 45: 8; 46: 9; 47: 9; 48: 3; 49: 3; 50: 8 ; 51: 8 ; 52: 6 ; 53: 5; 54: 6; 55: 8; 56: 5; 57: 5; 58: 5; 59: 5; 60: 5 ; 61: 5 ; 62: 5 ; 63: 5; 64:10; 65:10; 66:10; 67:12; 68: 7; 69: 7; 70: 9 ; 71: 9 ; 72: 6 ; 73: 8; 74: 5; 75: 5; 76: 5; 77: 5; 78: 5; 79: 5; 80: 3 ; 81: 5 ; 82: 3 ; 83: 3; 84: 5; 85: 6; 86: 7; 87: 9; 88: 6; 89: 6; 90: 6 ; 91: 6 ; 92: 6 ; 93: 6; 94: 5; 95: 6; 96: 8; 97: 8; 98: 8; 99: 9; 100:12;101:12 ;102:12 ;103:10;104: 9; 105: 9;106:10;107: 9;108: 8;109: 8; 110: 6;111: 5 ;112: 3 ;113: 3;114: 3; 115: 3;116: 8;117: 8;118: 8;119: 8; 120: 6;121: 8 ;122: 6 ;123: 5;124: 3; 125: 5;126: 6;127: 8;128: 5;129: 5; 130: 5;131: 5 ;132: 5 ;133: 5;134: 5; 135: 5;136: 0;137: 0;138: 0; END ;

实验43 正交幅度调制与解调系统实现

(1)实验目的:掌握利用FPGA和Verilog/VHDL实现基于数字信号处理技术的通信模型的设计。

(2)实验原理:正交幅度调制电路框图如图4-40所示,a(t)和b(t)为两路相互独立的待传送的调制信号(通常为基带信号)。载频信号源由基于DDS的正交信号发生器产生,它输出两路互为正交的正弦信号。经过两个乘法器可以获得互为正交的平衡调幅波,即不带载频的双边带调幅波;其中一路为同相信号I(t),另一路为正交信号Q(t),二者的表达式如下:

I?t??a?t?cos?0t Q?t??b?t?sin?0t

这里假设乘法器的乘法系数为1,此两路信号经过加法器后产生了互为正交的调幅信号,表达式为(设加法器的系数为1):

X?t??I?t??Q?t??a?t?cos?0t?b?t?sin?0t

27

其中:X(t)是I(t)、Q(t)两信号相加而得,所以,X(t)的频带宽度等于I(t)或Q(t)信号中带宽最宽者(或等于a(t)或b(t)二者最宽带宽的2倍),而不是二者之和。如此可压缩已调信号的带宽,增加信道容量。如果要对调制信号X(t)进行解调,不失真地解出原调制信号a(t)和b(t),就需要用正交同步解调的方法,这一方法的原理框图如图4-41所示。

已调正交调幅信号X(t)分别与正交信号发生器产生的互为正交的余弦信号和正弦信号相乘后产生两路输出信号,它们分别为:

Va?X?t?cos?0t?a?t?cos2?0t?b?t?sin?0tcos?0t?1a?t??1a?t?cos2?0t?1b?t?sin2?0t

222111Vb?X?t?sin?0t?b?t?sin2?0t?a?t?sin?0tcos?0t?b?t??a?t?cos2?0t?a?t?sin2?0t

222 经过FIR低通滤波器滤波后,上式的低频信号(1/2)a(t)和(1/2)b(t)即被取出,故得解调输出为(设低通的传输系数为K):

Vc?KKa?t? Vd?b?t?

22由于基于DDS的正交信号发生器的两个正交信号cosω0t和sinω0t是严格正交的,且与I(t)、Q(t)信号的载波保持了良好的同步,因此能不失真地解调出a(t)和b(t)信号来。

图40 正交幅度调制原理图 图41 正交幅度信号解调原理图

(3)实验内容1:按照图4-40设计正交幅度调制电路。最后用FPGA实现,注意图4-40和图4-41中的所有模块都是有符号模块,DDS余弦正交载波信号发生器的设计可参考实验4-17。波形数据ROM中的文件可使用附录1的工具,生成有符号正弦波数据mif文件;余弦波可利用附录1的软件生成相位差90度的正弦波mif数据,使得两路输出的相位精确相差90度。当然也可利用NCO核来设计。乘法器可调用由Cyclone III内固有的硬件乘法器,并设置成有符号模式;加法器也需设置成有符号模式,且选择流水线结构。输入信号可以来自外部ADC对波形的采样,也可在FPGA中设计一个有符号的不同波形的信号发生器产生。 (4)实验内容2:按照图4-41设计正交幅度信号解调电路。FIR滤波器可以是一个16阶的滤波器,也可以用FIR IP核来担任。硬件实现并验证之。输出信号验证可以用逻辑分析仪,或直接通过DAC在示波器上显示,但DAC的速度要求高一些,并且是双通道的。

实验44 基于UART串口控制的模型电子琴设计

(1)实验原理:图4-42是本项实验的顶层设计电路。其中RXDS模块是UART串行通信模块,由于只接受来自PC键盘的

信号,故只有一个通信输入口RXT。这里由上位机通过一个简单程序将PC的键盘信号通过RS232串口进入FPGA的RXDS模块;RXDS(程序是例4-13)输出对应的键盘码信号,经由键盘码至二进制码编码器CODE3(程序是例4-14)输出二进制顺序码,对应键盘的键1、2、3、...等。用此二进制码控制一个译码器F_CODE,即二进制至分频预置数译码器。 【例4-13】

module RXDS (SYSCLK, RXD, DOUT);

input SYSCLK, RXD; output[7:0] DOUT; wire[7:0] DOUT; wire FRXD, GATE;

reg[9:0] B; reg[3:0] R; reg[15:0] J; reg GT, GTCLR, CCLK;

always @(posedge SYSCLK or negedge GT) begin : S1 if (GT==1'b0) J<=16'H0000;

else begin if (J==16'H0068) J<=16'H0000 ; else J<=J + 1 ; end end always @(J) begin : S2

if (J==16'H0039) CCLK<=1'b1; else CCLK<=1'b0 ; end always @(posedge GATE or posedge GTCLR) begin : S3 if (GTCLR==1'b1) R<=4'b0000 ; else R<=R+1 ; end

28

always @(GATE or R) begin : S4

if (R==4'b1010) GTCLR<=~GATE; else GTCLR<=1'b0; end always @(posedge GATE) begin : S5 B[9:0] <= {B[8:0], RXD} ; end

always @(posedge FRXD or posedge GTCLR) begin : S6 if (GTCLR==1'b1) GT<=1'b0; else GT<=1'b1 ; end assign DOUT = {1'b0, B[8:2]} ;

assign GATE = GT & CCLK ; assign FRXD = ~RXD ; endmodule 【例】

module CODE3 (DIN, KEY);

input[7:0] DIN; output[3:0] KEY; reg[3:0] KEY; always @(DIN) begin case (DIN)

8'b01000110 : KEY<=4'b0001; 8'b00100110 : KEY<=4'b0010 ; 8'b01100110 : KEY<=4'b0011; 8'b00010110 : KEY<=4'b0100 ; 8'b01010110 : KEY<=4'b0101; 8'b00110110 : KEY<=4'b0110 ; 8'b01110110 : KEY<=4'b0111; 8'b00001110 : KEY<=4'b1000 ; 8'b01001110 : KEY<=4'b1001; 8'b00000110 : KEY<=4'b0000 ; default : KEY<=4'b0000 ; endcase end endmodule

(2)实验内容1:首先完成验证性实验。分析并说明程序例4-13,详细说明图4-42的功能和工作原理,包括各模块的功能和设计表述。按图4-42和程序例4-13,例4-14,以及其他程序,完成整体设计,各模块仿真,系统仿真等(图4-42中的引脚锁定是根据5E+系统安排的)。下载FPGA,接上RS232串口通信线,另一头接PC机的串口,选择串口通信COM1。打开示例程序中文件夹README的串口通信程序RXDV.exe,双击后按计算机键盘的键1,2,3,…,即显示对应的键盘ASCII码,同时实验系统将有对应的音符发声。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件): /EDA_EP3C5E/EXPERIMENTs/EXP42_RS232_PIANO/ECHD。

(3)实验内容2:完善电子琴设计。充分利用计算机键盘键的数量,修改扩充模块CODE3和F_CODE,以便扩大音域,可以演奏完整的音乐。

(4)实验内容3:增加奏乐记录模块,能记录并播放已演奏的乐曲。

(5)实验内容4:增加VGA显示模块,能同时显示奏乐时的琴键变动,及对应的乐符。

另一较综合性设计示例: /EDA_EP3C5E/EXPERIMENTs/EXP16_KX8051_FTEST_RS232/。下载后接RS232串口通信线;在文件夹FOR_PC_FILE中运行串行通信软件serealcom.exe,选择COM1口;按键K1复位,即可看到此软件串口出现波形数据。再于“SEND”栏键入3个数据,如345,点击SEND按钮2此,此数据即传入实验系统的数码上显示出来。可以利用此示例,加入一个频率计,使实验系统将测频数据送到PC此通信窗口显示(在Receive栏)。

图42 UART串口控制模型电子琴电路顶层设计

29

图43 串口通信及键盘ASCII码显示程序窗口

实验45 基于M9K RAM型LPM移位寄存器设计

利用RAM结构的LPM移位寄存器模块设计移位寄存器,这些模块包括LPM_SHIFTREG和shift register(RAM-based)。

实验46 单片全数字型DDS函数信号发生器综合设计实验

所谓单片是指除了ADC、DAC及其以外的电路,所有功能电路模块都在一片FPGA中实现。所谓全数字型主要指乘法器,一些商业DDS函数信号发生器的乘法器多为模拟模块,但Cyclone III中含高速嵌入式数字乘法器。

试利用NCO核或直接用DDS模块设计全数字型DDS函数信号,基本功能包括:

1、PSK、MSK、AM、FM、FSK;PSK调制信号发生器(调制信号、载波信号频率可设);2、移相信号发生器(两路频率同步可数控,相差可数控);3、里萨如图信号发生器(两路频率独立可数控,相差可数控);4、扫频信号源,要求最大单程扫频0.1Hz至10MHz,在此范围内,扫频频幅可设(最小0.05Hz)、扫速可设、扫频起始终止点可设、线性/对数扫频方式可选、内外扫频时钟可选;5、三角波、锯齿波、方波(频率/占空比可数控)、任意波发生器;

6、频率、脉宽、占空比、相位可测(将等精度频率计功能嵌入其中)。

KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/DEMOs/EXP10_DDS_Core_DAC0832/。 操作方法参考所附资料:\\KX_DN7\\重要ppt_PDF文件

实验47 乒乓球游戏电路设计

(1) 实验内容1:用Verilog/VHDL程序设计一个乒乓球比赛游戏模型。完成全部设计,包括编辑、编译、综合和仿真操作等,给出仿真波形和完整电路图,硬件实现和测试。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):/EDA_EP3C5E/DEMOs/EXPL15_PINPANG_GAME/PINPANG。

(2) 实验内容2:完善以上设计,使之更符合乒乓球运动的各项规则,计分和球轨迹用64X128点阵液晶显示,选手按键用PS2键盘代替。

实验48 PS2键盘控制模型电子琴电路设计

(1) 实验原理:图4-44是PS2键盘控制模型电子琴电路顶层设计。除了PS2通信模块PS2_PIANO,以及图4-44中的模块CODE3与图4-42中的同名模块功能和表述(例4-14)稍有不同外,此电路所有其他模块与电路功能与以上的图4-42完全相同,对此不再重复说明。由于来自PS2_PIANO模块的键盘码有所不同,所以要根据表4-2的PS2键盘码修改例4-14中case语句的输入码。PS/2键盘接口是个6脚连接器。其4个脚的功能分别是时钟端口、数据端口、+5V电源端口和电源接地端口。PS/2键盘依靠PC的PS/2端口提供+5V电源。PS/2是双端口双向通信模式,即遵循双向同步通信协议。通信的双方过时钟口同步,然后通过数据口进行数据通信。通信中,主机若要控制另一方通信选择,可把时钟拉至低电平即可。PS2通信过程中,数据以帧为单位进行传输,每帧包含11至12位数据,具体方式是:

图44 PS2键盘控制模型电子琴电路顶层设计

1.数据的第1个位位起始位逻辑恒为0;2.接下来是8个数据位,低位在前;时钟下降沿读取;3.然后是一个1位奇偶校

30

验位,作奇校验;接下的第11位是停止位,恒为1;4.必要时1个答应位,用于主机对设备的通信。

通信过程中当PS/2设备等待发送数据时,首先检查时钟端以便确认其高电平;如果为低电平,则认为是主机抑制了通信,此时必须缓存待发送的数据,直到获得总线控制权。如果时钟信号为高电平,则PS/2设备将数据发送给主机。由于PS/2通信协议是一种双向同步串行通信协议,数据可以从主机发往设备,也可以由设备发往主机。实际应用中,PS/2键盘作为一种输入设备,都是由键盘往主机发送数据,主机读取数据。这时由PS/2键盘产生时钟信号,发送数据时按照数据帧格式顺序发送。其中数据位在时钟为高电平时准备好,在时钟的下降沿主机就可以读取数据。因此通常情况只有键盘向主机发送数据,PS2键盘的两个工作端口都是单向输出口。对于PS2通信的详细情况可参考相关资料。 KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):

/EDA_EP3C5E/DEMOs/EXPL6_PS2_PIANO/PIANO(PS2_PIANO模块是用状态机实现的,CLK是状态机工作时钟)。另一演示示例是: /EDA_EP3C5E/EXPERIMENTs/EXP35_PS2_LED/(在此示例基础上,试加入模型电子琴模块)。

(2)实验内容1:查阅PS2键盘通信协议资料,完成实验4-45提出的所有实验要求和内容。

(3)实验内容2:查阅PS/2鼠标相关通信协议的资料,实现PS2鼠标通信控制。然后设计VGA显示图像,使鼠标移动图像显示于

VGA

显示器上。KX_DN5/7

实验系统演示示例(含实验指导

pdf/PDF

课件):

/EDA_EP3C5E/DEMOs/EXPL12_PS2Mouse_VGA_GAME/。

表4-2 PS2键盘键控与输出码对照表

实验49 GPS应用的通信电路设计

实验任务:常用的GPS模块是UART通信方式。参考GPS模块使用文件:\\KX_DN7\\IMPTNT_FILE\\GPS文件,完成基于ProGin SR87 GPS模块,以9600波特率串行接口的GPS实用测控电路设计。

使用FPGA中的8051核与GPS通信,并将数据用液晶显示出来;读取GPS模块的数据,并显示于数码管或液晶屏上。KX_DN5/7实验系统演示示例(含实验指导pdf/PDF课件):

/EDA_EP3C5E/EXPERIMENTs/EXP16_KX8051_FTEST_RS232/和/EXP17_KX8051_GPS_FTEST/。

实验50 在ModelSim上进行4位计数器仿真

(1) 实验目的:熟悉ModelSim的Verilog仿真流程全过程,学习简单时序电路的仿真。

(2) 实验内容1:首先利用ModelSim完成4位计数器(教材[1]例10-1)的文本编辑输入(cnt4.v)和编译、仿真等步骤(除了输入程序外,其他步骤可以按照教材[1]10.2节内容进行),给出图10-14所示的仿真波形,仿真验证此设计的功能。

(3) 实验内容2:在ModelSim上对cnt4.进行重新仿真,要求修改仿真激励,把d的load值修改为4’d10,观察仿真波形结果。 (4) 实验报告:根据以上的实验内容写出实验报告,包括程序编写、软件编译、仿真分析和详细实验过程;给出软件应用分析报告、仿真波形图及其分析报告。

(5) 实验习题:如何修改ModelSim的设置,使得执行run,不只是100ns,更改为200ns?请查看ModelSim帮助以获取方法。

31

实验51 在ModelSim上进行16位累加器设计仿真

(1) 实验目的:熟悉ModelSim的Verilog仿真流程全过程,学习仿真激励产生的方法。学习简单的TestBench的编写。 (2) 实验内容1:首先利用ModelSim完成16位累加器(例4-15)的文本编辑输入和编译、仿真等步骤(除了输入程序外,其他步骤可以按照教材[1]10.2节内容进行),按照教材[1]10.7节的方法,设计16位累加器的复位和时钟激励的Verilog程序,并且在ModelSim上进行验证。

【例】

module acc16( input [15:0] a, input rst, input clk, output reg [15:0] c ); always @(posedge clk,negedge rst) if(!rst) c = 0;

else c=c+a; endmodule

(3) 实验内容2:为acc16设计一个Test Bench,要求Test Bench的仿真时间为2000ns;在100ns前完成复位,clk时钟激励为周期10ns,增加对acc16模块的a端口的仿真激励,把a端口值在仿真前1000ns为1,后1000ns为5。在ModelSim上验证Tech Bench,观察仿真波形结果。

(4) 实验内容3:修改ModelSim的wave波形观察窗中c的显示格式,修改成“模拟(Analog)”波形显示。实验报告要求同实验4-51。

(5) 实验习题:如何在acc16上添加模块,构成一个输出周期可控的波形发生器(例如正弦波发生器),如何在ModelSim上验证该设计。

32

本文来源:https://www.bwwdw.com/article/7rn7.html

Top