资源描述
现代计算机组成原理实验讲义现代计算机组成原理实验讲义 杭州康芯电子有限公司www.kx- -1目 录前 言 .1实验一 QUARTUSII EDA 工具与 VHDL 基础实验.41-1. 应用 QuartusII 完成基本组合电路设计 .41-2. 应用 QuartusII 完成基本时序电路的设计 .51-3. 设计含异步清 0 和同步时钟使能的加法计数器 .61-4. 7 段数码显示译码器设计.71-5. 8 位数码扫描显示电路设计.81-6. 数控分频器的设计 .91-7. 32 位并进/并出移位寄存器设计.101-8. 在 QuartusII 中用原理图输入法设计 8 位全加器 .101-9. 在 QuartusII 中用原理图输入法设计较复杂数字系统 .111-10. 用 QuartusII 设计正弦信号发生器 .111-11. 8 位 16 进制频率计设计.131-12. 序列检测器设计 .161-13. VHDL 状态机 A/D 采样控制电路实现.17实验二 运算器组成实验 .191算术逻辑运算实验 .192带进位算术运算实验 .223. 移位运算器实验 .23实验三 存储器实验 .241、FPGA 中 LPM_ROM 定制与读出实验.242FPGA 中 LPM_RAM 读写实验.263FIFO 定制与读/写实验.274FPGA 与外部 16 位 RAM 接口实验.28实验四 微控制器实验 .301 节拍脉冲发生器时序电路实验 .302. 程序计数器 PC 与地址寄存器 AR 实验 .323.微控制器组成实验 .34实验五 总线控制实验 .36实验六 基本模型机设计与实现 .39实验七 带移位运算的模型机设计与实现 .47实验八 复杂模型机的设计与实现 .52实验九较复杂 CPU 设计示例 .56实验十16 位精简指令 CPU 设计实验.58实验十一 32 位 NIOS CPU 嵌入式系统软硬件设计实验.671 NIOS 软硬件开发流程.673 SOPC 整体系统生成.734 Nios 硬件系统生成.74实验十二 32 位 NIOS CPU 测控系统串口接收程序设计.77实验十三 GSM 短信模块程序设计.77实验十四 基于 32 位 NIOS CPU 的秒表程序设计.78实验十五 NIOS AVALON SLAVE 总线外设(PWM 模块)设计 .81实验十六 NIOS AVALON SLAVE 总线外设(数码管动态扫描显示模块)设计.81实验十七 基于 NIOS 的 VGA 显示终端设计 .81实验十八 DMA 应用和俄罗斯方块游戏设计.82实验十九 为 NIOS 嵌入式系统增加算法加速协处理模块控制指令 .82实验二十. 计算机体系结构实验 .82实验二十一. 89K51 单片机核应用系统软硬件设计实验.82附录:GW48 EDA/SOPC 主系统使用说明.82- -1前 言随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,现场可编程(FPGA)技术含量正以惊人的速度上升。电子类的新技术项目的开发也更多地依赖于 FPGA 技术的应用,特别是随着 VHDL 等硬件描述语言综合工具功能和性能的提高,计算机中许多重要的元件,包括 CPU 都用硬件描述语言来设计和表达,许多 CPU(如 8051单片机、8086 等) ,硬核嵌入式系统(如 ARM、Excalibue 系列 FPGA) 、软核嵌入式系统(如 Nios) ,微机 CPU,乃至整个计算机系统都用 FPGA 来实现,即所谓的单片系统:SOC 和 SOPC(System On a Chip、System On a Programmerble Chip ) 。计算机和 CPU 的设计技术及其现方法进入了一个全新的时代!不但如此,传统的 CPU 结构模式,纽曼结构和哈佛结构正在受到巨大的挑战。例如,美国赢通系统公司(Wincom Systems)推出一款令人惊叹的服务器,其核心部分由 FPGA 完成的超强功能 CPU。该系统工作能力超过 50 台戴尔或 IBM 计算机,或 Sun Microsytems 公司的服务器。该服务器的处理速度要比传统服务器快 50 到 300 倍。我们知道,传统的个人电脑及服务器通常采用英特尔的奔腾处理器或 SUN 公司的 SPARC 芯片作为中央处理单元,而赢通的这一产品却没有采用微处理器,而是由FPGA 芯片驱动。FPGA 芯片的运行速度比奔腾处理器慢,但可并行处理多项任务,而微处理器一次仅能处理一项任务。因此,赢通公司的服务器只需配置几个价格仅为 2000 多美元的 FPGA 芯片,便可击败 SUN公司的服务器或采用英特尔处理器的电脑。50 多年前,匈牙利数学家纽曼(John von Neumann)提出了电脑的设计构想:通过中央处理器从存储器中存取数据,并逐一处理各项任务。现在,通过采用 FPGA,SOPC 及顺序与并行方式相结合的软核嵌入式系统取代传统微处理器,导致 Xlinx 的 CEO Willem Roelandts 所说的“由纽曼提出的电脑架构已经走到尽头” , “可编程芯片将掀起下一轮应用高潮。FPGA 芯片以操作灵活著称,可以重复擦写无限次,而微处理器均采用固定电路,只能进行一次设计。设计人员可通过改变 FPGA 中晶体管的开关状态对电路进行重写,即重配置。从而,尽管 FPGA 芯片的时钟频率要低于奔腾处理器,但是由于 FPGA 芯片可并行处理各种不同的运算,所以可完成许多复杂的任务。例如网页显示,全球天气建模及基因组合核对等,而且处理速度比奔腾处理器或数字信号处理器快得多。戴尔和 SUN 公司生产的某些标准服务器也采用了 ALTERA 公司的 FPGA 芯片。时代逻辑公司对这些标准服务器加以改进之后,生产了一种用于基因研究的高速处理设备。时代逻辑公司总监 Christopher Hoover 说该设备比原来的产品至少快 1000 倍。美国的 Annapolis Micro Systems 公司在其电脑芯片电路板中也集成了 FPGA 芯片,以便提高其产品性能。该公司首席执行官 Jane Donaldson 指出,相关产品的销售量与前两年相比翻了一番。IBM 和 Xilinx 公司正在合力开发一种混合芯片,以整合前者的 PowerPC 微处理器和后者的 FPGA 芯片。这种芯片的好处是:一台网络服务器的 FPGA 部分可以根据不同的标准进行订制,而不用为每个国家开发一种新的芯片。美国 Star Bridge Systems 公司也声称已在进行一项技术尝试,即采用 FPGA 芯片和该公司自己的 Viva编程语言开发出“超级电脑(hypercomputer) ” ,对该超级电脑进行测试的美国国家航空航天局(NASA)科学家表示“其运行速度无与伦比,这一产品的性能令人过目难忘” 。超级电脑是科技世界中的极品:售价奇高、速度飞快、集成了数以千计的微处理器。但这种超级电脑也浪费了非常多的芯片资源,每个处理器只能进行单任务操作,大部分功能难以充分发挥。现在有了另一种更为简洁的设计:设计工程师采用 FPGA 芯片来武装超级电脑,取代了原先大量的英特尔奔腾处理器。经过使用硬件描述语言和相关软件语言的设计,FPGA 芯片可并行处理多项任务,从而使所有电路都能随时发挥作用。又由于 FPGA 芯片可以反复编程培植,而且几乎可瞬时完成。例如可通过利用 FPGA 的重配置功能,在某一时刻它可以用来预报全球天气状况,而下一时刻又可根据某公司做的主要利率对冲情况来评估债券市场的风险,或是转而去做图象信息处理。其它公司或机构的研究人员,如美国加州大学伯克利分校(University of California, Berkeley)和杨百翰大学(Brigham Young University)的研究员也正在设计基于 FPGA 的电脑,这些电脑可在运行中实现动态- -2重配置。这对定位危险目标等军事应用和面容识别一类的计算密集型安全应用十分有用。不言而喻,全新的计算机设计技术和实现技术向传统的计算机组成原理的教学内容和实验方式提出尖锐的挑战。相形之下,传统的计算机组成原理实验方式已显得十分不合时宜。显然,传统的实验方式,就教学实验内容上看,与现代的计算机组成模式、理念、基本理论和构成形式及方案上都无任何吻合之处;就实验方法上看,完全是一种脱离现代计算机实际组成技术和测试技术(现代测试技术包括 JTAG、嵌入式逻辑分析仪等)的,由实验系统设计者一相情愿的构建,难免引出诸多对初学者产生误导的实验方法;就实验模式和模型上看,与真实的现代计算机组成和构建方式相去更远。现代计算机,包括嵌入式系统绝不可能是由一大堆独立的、低速的、传统逻辑器件连接而成,而是由硬件描述语言来表达,由 ASIC 或 FPGA来实现的计算机系统;就教学实验内容上看,传统的计算机组成原理实验只能模拟普通 CPU 的工作,然而现代计算机应用领域,RSIC 精简指令 CPU 的设计和应用正以前所未有的巨大规模向前发展,当前,无论在开发技术的投入还是应用市场的开拓都远远超过了基于传统构架的 CPU(国内绝大多数学校仍然基于此CPU 的教学) 。不久前,清华大学对美国一些知名大学计算机实验室(如斯坦富大学)的调研表明,那里计算机方面的硬件实验,包括计算机组成原理实验早已不用那种传统接插式实验,而是全部采用 EDA 技术进行所有的软硬件实验!显然,使用大规模 FPGA、EDA 软件工具和 IEEE 标准硬件描述语言构建的现代计算机组成原理实验系统取代传统的计算机组成原理实验已成为势在必行。利用 FPGA 技术,在实验中能方便灵活地设计出简单完整的模型机。基于查找表硬件结构的商用 FPGA 是当前进行快速系统原型设计最流行的 ASIC 手段。ALTERA 的 ACEX 系列 FPGA 产品具有片上EAB,可以构成构成各种类型的存储器结构,利用在其内部的 LPM 可以实现微程序控制和管理复杂逻辑电路。现代计算机组成原理实验为实验者提供了全新的学习平台,彻底克服传统组成原理实验项目与实际CPU 设计技术完全脱钩,学用脱节,甚至误导的缺陷。让学生有机会接触到最新的计算机组成与设计方面的知识,使学习与工程实际相结合。传统计算机组成原理实验系统与现代计算机组成实验系统性能特点比较 结构与功能特点结构与功能特点传统计算机组成原理实验系统传统计算机组成原理实验系统现代计算机组成原理实验系统现代计算机组成原理实验系统 实验特点本身只是一验证性模型,与实际的计算机设计模型无关真实反映了现代计算机设计工程实现原理、测试方法和设计技术 结构特点由规模不等的离散集成电路块和 CPLD 等器件构成CPU 模型整个 CPU,乃至 RAM、ROM 和通信接口可在单片 FPGA 中实现实验 CPU 总线控制方式采用三态门控制,仅适用于 74 系列小规模集成电路构成方式采用总线多路开关,适于 VLSI 和 FPGA 等大规模集成电路工程CPU 指令与微指令存储与形成方式通过外部 ROM 或 EEPROM 构成,指令的数量和微指令的宽度受到限制,难以扩展,CPU 模型结构被限制。既可以采用传统的 ROM 或 EEPROM 存储,又可以采用 FPGA 中的 EAB 嵌入式方式,构成单片系统,更符合现代 CPU 设计理念。CPU 指令和微指令的实现方式手工设计、画微指令流程图;手工(烧写或键入)输入方式实现。设计效率低、可靠性低,查错、排错、调试困难,耗时费力。利用计算机输入,形成专用文件格式,由EDA 工具自动配置进 FPGA 中设定的RAM、ROM 中,便捷、高效、实用,规范可用硬件资源采用中小规模集成电路,硬件资源非常有限,且结构固定,不便于系统扩展、设计思路受限制,有创意的设想无从得到验证采用 FPGA 超大规模集成电路,可利用资源丰富,灵活,设计者可根据需要反复调整和改变电路结构,创新设想易得到验证和实现观察计算机内部指令执行情况,及软硬件排错通过有限的发光二极管和数码管设置观察点,难以观察指令执行的细节情况,如竞争、毛刺等。硬件电路和软件排错都十分困难除了能在 PC 上对整个软硬件系统进行时序仿真外,还可通过 JTAG 口使用嵌入式逻辑分析仪对 CPU 内部任意点,跟踪指令与测试。- -3实验设计、连线方式及可靠性元件间通过硬件连线,手工完成,费时费力,效率低、可靠性差。外部连线过多、导线与器件反复插拔,导致导线内部折断损伤。各功能部件间无外部连线,几乎所有接线都在 FPGA 片内通过计算机连接实现,并自动检测排错,现场配置,可靠性高,无寿命限制。设计可移植性和可保存性由于需当场连线,故功能模型无可移植性和保存性,且必须有实验系统才能做实验,所以绝难保证每一同学给出自己特色的设计可保存,可移植,可在自己的 PC 上设计和软硬件仿真。最后到实验室在实验系统上作硬件测试即可,每一同学的设计都有自己特点各功能模块可改进性基本不能各模块功能都可改变,如 ALU,移位器,RAM/ROM 的容量位宽等工作速度由于大多采用 74 系列、TTL 器件,工作速度低采用高速、低压、低功耗 FPGA,速度可达100MHz真实 CPU嵌入式模块的利用不能利用Nios、各种 I/O 接口模块,如并行接口、串行通信接口,VGA 等 可扩展性 不能可扩展形成计算机构成中不同 CPU 结构,总线宽,及实用接口等 多功能性 只能对计算机组成原理作传统方式的验证性实验,功能单一、模式陈旧,国外一流大学,如斯坦福大学计算机系完全不用此类实验方式,而用 EDA 技术完成相关的实验,可实现现代计算机组成原理实验、EDA实验、硬件描述语言 VHDL、Verilog 教学实验、电子设计竞赛开发、实用 CPU 或单片机设计或验证等等RSIC CPU 设计实验 完全不能 实现容易嵌入式系统硬件实现和软件开发实验 完全不能利用 QuartusII、SOPC Builder 和嵌入式软核 Nios 可以实现。现代计算机组成原理实验系统 GW-48 CCP 的 CPU 核心部分由 FPGA 设计实现,通过 FPGA 与单片机的接口,将 CPU 核心部件中的指令寄存器、程序计数器、地址寄存器、暂存寄存器、运算寄存器、缓冲寄存器、存储器、微地址寄存器、输入缓冲寄存器等大量的数据实时地在数码管和 LCD 液晶显示屏显示出来。各类操作指示、数据动态流向显示,直观明了,一目了然,摆脱了与电脑联机的麻烦。该实验仪采用FPGA 设计 CPU 内部结构,采用模块化设计,单元电路分开,模块间连接通过内部总线和总线选择多路开关连接相,不必进行硬件连线,从而大大提高了实验的成功率。传统的计算机组成原理实验台体积庞大,使用的芯片种类繁多,实验中需要花许多时间进行大量的连线,系统的可靠性低,由于芯片或连线出现的各种故障排查困难。GW48 C+计算机组成原理实验台采用模块化的系统结构,学生可通过一系列基本单元实验和模型计算机综合设计实验,对 CPU 的运算功能、控制功能、总线结构、指令系统的设计和微指令的实现,以及CPU 内部是如何工作的,有直观、深刻的认识。学生在进行各个单元实验和综合实验时,既可以通过系统计算机进行综合设计,系统软件仿真、观察仿真波形,更重要的是可以在 GW48 CP+实验平台上,将自己设计的 CPU 电路下载到 FPGA 中进行硬件仿真。观察 CPU 内部的各种信息:包括数据总线、地址寄存器、程序计数器、指令译码器、指令寄存器、控制信号、内部寄存器、数据寄存器、微指令存储器 LPM_ROM 中的数据等,都实时、直观地显示在 LCD 屏幕上,使学生实时观察每条指令及微指令的执行情况,从而对计算机的原理、结构,从部件到系统,直到计算机整机有一个形象的、生动的、本质的认识。 通过利用 GW48 CP+现代计算机组成原理实验系统的学习,还能使学生在 VHDL 语言、EDA 软件工具和 FPGA 的应用方面获得大量实用的技术。本实验的先期课程为不少于 20 学时的 EDA 技术课,包括 FPGA 应用技术、MaxplusII/QuartusII 软件、原理图输入设计方法,以及 VHDL 基础。推荐选择用科学出版社的EDA 技术实用教程或清华大学出版社的EDA 技术与 VHDL一书。- -4实验一 QuartusII EDA 工具与 VHDL 基础实验本实验中所配的 13 个实验主要作为计算机组成原理实验的前期练习,以便熟悉 VHDL 语言、原理图输入方法,以及 EDA 工具和 EDA 实验系统的使用方法。主要参考清华大学出版社的EDA 技术与 VHDL或现代计算机组成原理一书。实验内容和数量可根据实际需要选择,每一个实验,在所配的光盘中都有对应的实验示例和实验指导课件。1-1.1-1. 应用应用 QuartusIIQuartusII 完成基本组合电路设计完成基本组合电路设计示例程序和实验指导课件位置示例程序和实验指导课件位置:ExperimentsExpmt1chpt4Ep1c6_41_mux21A 工程工程 mux21A(1) 实验目的:熟悉 Quartus的 VHDL 文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。(2) 实验内容 1:首先利用 Quartus完成 2 选 1 多路选择器(例 3-3)的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出图 3-3 所示的仿真波形。最后在实验系统上进行硬件测试,验证本项设计的功能。(3) 实验内容 2:将此多路选择器看成是一个元件 mux21a,利用元件例化语句描述图 3-18,并将此文件放在同一目录中。以下 是部分参考程序:. COMPONENT MUX21A PORT ( a,b,s : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT ;. u1 : MUX21A PORT MAP(a=a2,b=a3,s=s0,y=tmp); u2 : MUX21A PORT MAP(a=a1,b=tmp,s=s1,y=outy); END ARCHITECTURE BHV ;【例 3-3】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ;END IF; END PROCESS;END ARCHITECTURE one ;图 3-18 双 2 选 1 多路选择器3-3 mux21a功能时序波形- -5按照本章给出的步骤对上例分别进行编译、综合、仿真。并对其仿真波形作出分析说明。(4) 实验内容 3:引脚锁定以及硬件下载测试。若选择目标器件是 EP1C3,建议选实验电路模式 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完成 3.3 节给出的全加器的设计,包括仿真和硬件测试。实验要求分别仿真测试底层硬件或门和半加器,最后完成顶层文件全加器的设计和测试,给出设计原程序,程序分析报告、仿真波形图及其分析报告。(7) 实验习题:以 1 位二进制全加器为基本元件,用例化语句写出 8 位并行二进制全加器的顶层文件,并讨论此加法器的电路特性。1-2.1-2. 应用应用 QuartusIIQuartusII 完成基本时序电路的设计完成基本时序电路的设计(1) 实验目的:熟悉 Quartus的 VHDL 文本设计过程,学习简单时序电路的设计、仿真和测试。(2) 实验内容 1:根据实验 4-1 的步骤和要求,设计触发器(使用例 3-6),给出程序设计、软件编译、仿真分析、硬件测试及详细实验过程。【例 3-6】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ;Q = Q1 ; -将内部的暂存数据向端口输出(双横线-是注释符号) END bhv;(3) 实验内容 2:设计锁存器(使用例 3-14),同样给出程序设计、软件编译、仿真分析、硬件测试及详细实验过程。【例 3-14】.PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器 THEN Q 0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数(同步使能) IF CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出 END PROCESS;END behav;(3) 实验内容 1:在 Quartus上对例 3-22 进行编辑、编译、综合、适配、仿真。说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。(4) 实验内容 2:引脚锁定以及硬件下载测试(参考 4.2 节) 。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。(5) 实验内容 3:使用 SignalTap II 对此计数器进行实时测试,流程与要求参考 4.3 节。(6) 实验内容 4:从设计中去除 SignalTap II,要求全程编译后生成用于配置器件 EPCS1 编程的压缩POF 文件,并使用 ByteBlasterII,通过 AS 模式对实验板上的 EPCS1 进行编程,最后进行验证。(7) 实验内容 4:为此项设计加入一个可用于 SignalTap II 采样的独立的时钟输入端(采用时钟选择clock0=12MHz,计数器时钟 CLK 分别选择 256Hz、16384Hz、6MHz) ,并进行实时测试。(8) 思考题:在例 3-22 中是否可以不定义信号 CQI,而直接用输出端口信号完成加法运算,即:CQ LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S NULL ; END CASE ; END PROCESS ; END ;(4) 实验内容 2:引脚锁定及硬件测试。建议选 GW48 系统的实验电路模式 6(参考附录图 8) ,用数码8 显示译码输出(PIO46-PIO40),键 8、键 7、键 6 和键 5 四位控制输入,硬件验证译码器的工作性能。(5) 实验内容 3:用第 3 章介绍的例化语句,按图 5-19 的方式连接成顶层设计电路(用 VHDL 表述) ,图中的 CNT4B 是一个 4 位二进制加法计数器,可以由例 3-22 修改获得;模块 DECL7S 即为例 5-18 实体元件,重复以上实验过程。注意图 5-19 中的 tmp 是 4 位总线,led 是 7 位总线。对于引脚锁定和实验,建议选- -8电路模式 6,用数码 8 显示译码输出,用键 3 作为时钟输入(每按 2 次键为 1 个时钟脉冲),或直接接时钟信号 clock0。(6) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。 图 5-18 共阴数码管及其电路 图 5-19 计数器和译码器连接电路的顶层文件原理图1-5.1-5. 8 8 位数码扫描显示电路设计位数码扫描显示电路设计示例程序和实验指导课件位置示例程序和实验指导课件位置:ExperimentsExpmt1chpt5Ep1c6_52_SCAN 工程:工程:SCAN_LED(1) 实验目的:学习硬件扫描显示电路的设计。(2) 实验原理:图 5-20 所示的是 8 位数码扫描显示电路,其中每个数码管的 8 个段:h、g、f、e、d、c、b、a(h 是小数点)都分别连在一起,8 个数码管分别由 8 个选通信号 k1、k2、k8 来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3 为高电平,其余选通信号为低电平,这时仅 k3 对应的数码管显示来自段信号端的数据,而其它 7 个数码管呈现关闭状态。根据这种电路状况,如果希望在 8 个数码管显示希望的数据,就必须使得 8 个选通信号 k1、k2、k8 分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。例 5-19 是扫描显示的示例程序,其中 clk 是扫描时钟;SG 为 7 段控制信号,由高位至低位分别接g、f、e、d、c、b、a 7 个段;BT 是位选控制信号,接图 5-20 中的 8 个选通信号:k1、k2、k8 。程序中CNT8 是一个 3 位计数器,作扫描计数信号,由进程 P2 生成;进程 P3 是 7 段译码查表输出程序,与例 5-18相同;进程 P1 是对 8 个数码管选通的扫描程序,例如当 CNT8 等于001 时,K2 对应的数码管被选通,同时,A 被赋值 3,再由进程 P3 译码输出1001111,显示在数码管上即为“3” ;当 CNT8 扫变时,将能在 8个数码管上显示数据:13579BDF 。图 5-20 8 位数码扫描显示电路【例 5-19】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED IS PORT ( CLK : IN STD_LOGIC; SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -段控制信号输出 BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );-位控制信号输出 END;ARCHITECTURE one OF SCAN_LED IS SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); - -9 SIGNAL A : INTEGER RANGE 0 TO 15;BEGINP1:PROCESS( CNT8 ) BEGIN CASE CNT8 IS WHEN 000 = BT = 00000001 ; A BT = 00000010 ; A BT = 00000100 ; A BT = 00001000 ; A BT = 00010000 ; A BT = 00100000 ; A BT = 01000000 ; A BT = 10000000 ; A NULL ; END CASE ; END PROCESS P1; P2:PROCESS(CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN CNT8 SG SG SG SG SG SG SG SG SG SG SG SG SG SG SG SG NULL ; END CASE ; END PROCESS P3; END;(3) 实验内容 1:说明例 5-19 中各语句的含义,以及该例的整体功能。对该例进行编辑、编译、综合、适配、仿真,给出仿真波形。实验方式:若考虑小数点,SG 的 8 个段分别与PIO49、PIO48、PIO42(高位在左) 、BT 的 8 个位分别与 PIO34、PIO35、PIO41(高位在左) ;电路模式不限,引脚图参考附录图 12。将 GW48EDA 系统左下方的拨码开关全部向上拨,这时实验系统的 8个数码管构成图 5-20 的电路结构,时钟 CLK 可选择 clock0,通过跳线选择 16384Hz 信号。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。(4) 实验内容 2:修改例 5-19 的进程 P1 中的显示数据直接给出的方式,增加 8 个 4 位锁存器,作为显示数据缓冲器,使得所有 8 个显示数据都必须来自缓冲器。缓冲器中的数据可以通过不同方式锁入,如来自 A/D 采样的数据、来自分时锁入的数据、来自串行方式输入的数据,或来自单片机等。1-6.1-6. 数控分频器的设计数控分频器的设计示例程序和实验指导课件位置示例程序和实验指导课件位置:Experiments Expmt1chpt5Ep1c6_53_DVF 工程:工程:DVF(1) 实验目的:学习数控分频器的设计、分析和测试方法。(2) 实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例 5-20 所示。(3) 分析:根据图 5-21 的波形提示,分析例 5-20 中的各语句功能、设计原理及逻辑功能,详述进程P_REG 和 P_DIV 的作用,并画出该程序的 RTL 电路图。- -10 100.0s 200.0s 300.0s 400.0s 图 5-21 当给出不同输入值 D 时,FOUT 输出不同频率(CLK 周期=50ns)(4) 仿真:输入不同的 CLK 频率和预置值 D,给出如图 5-21 的时序波形。(5) 实验内容 1:在实验系统上硬件验证例 5-20 的功能。可选实验电路模式 1(参考附录图 3) ;键 2/键 1 负责输入 8 位预置数 D(PIO7-PIO0);CLK 由 clock0 输入,频率选 65536Hz 或更高(确保分频后落在音频范围);输出 FOUT 接扬声器(SPKER)。编译下载后进行硬件测试:改变键 2/键 1 的输入值,可听到不同音调的声音。(6) 实验内容 2:将例 5-20 扩展成 16 位分频器,并提出此项设计的实用示例,如 PWM 的设计等。(7) 思考题:怎样利用 2 个由例 5-20 给出的模块设计一个电路,使其输出方波的正负脉宽的宽度分别由两个 8 位输入数据控制?(8) 实验报告:根据以上的要求,将实验项目分析设计,仿真和测试写入实验报告。【例 5-20】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC );END;ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC;BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF CNT8 = 11111111 THEN CNT8 := D; -当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL = 1; -同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; -否则继续作加1计数 FULL = 0; -且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULLEVENT AND FULL = 1 THEN CNT2 := NOT CNT2; -如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 = 1 THEN FOUT = 1; ELSE FOUT = 0; END IF; END IF; END PROCESS P_DIV ;END;1-7.1-7. 3232 位并进位并进/ /并出移位寄存器设计并出移位寄存器设计仅用例 5-8 一个 8 位移位寄存器,再增加一些电路,如 4 个 8 位锁存器等,设计成为一个能为 32 位二进制数进行不同方式移位的移位寄存器。这个电路模型十分容易用到 CPU 的设计中。1-8.1-8. 在在 QuartusIIQuartusII 中用原理图输入法设计中用原理图输入法设计 8 8 位全加器位全加器(1) 实验目的:熟悉利用 Quartus的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个 8 位全加器的设计把握利用 EDA 软件进行原理图输入方式的电子线路设计的详细流程。- -11(2) 实验原理:一个 8 位全加器可以由 8 个 1 位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出 cout 与相临的高位加法器的最低进位输入信号 cin 相接。而一个 1 位全加器可以按照6.1 节的方法来完成。(3) 实验内容 1:按照 6.1 节介绍的方法与流程,完成半加器和全加器的设计,包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个硬件符号入库。键 1、键 2、键3(PIO0/1/2)分别接 ain、bin、cin;发光管 D2、D1(PIO9/8)分别接 sum 和 cout。(4) 实验内容 2,建立一个更高层次的原理图设计,利用以上获得的 1 位全加器构成 8 位全加器,并完成编译、综合、适配、仿真和硬件测试。建议选择电路模式 1(附录图 3) ;键 2、键 1 输入 8 位加数;键4、键 3 输入 8 位被加数;数码 6/5 显示加和;D8 显示进位 cout。(5) 实验报告:详细叙述 8 位加法器的设计流程;给出各层次的原理图及其对应的仿真波形图;给出加法器的时序分析情况;最后给出硬件测试流程和结果。1-9.1-9. 在在 QuartusIIQuartusII 中用原理图输入法设计较复杂数字系统中用原理图输入法设计较复杂数字系统(1) 实验目的:熟悉原理图输入法中 74 系列等宏功能元件的使用方法,掌握更复杂的原理图层次化设计技术和数字系统设计方法。完成 8 位十进制频率机的设计。(2) 原理说明:利用 6.2 节介绍的 2 位计数器模块,连接它们的计数进位,用 4 个计数模块就能完成一个 8 位有时钟使能的计数器;对于测频控制器的控制信号,在仿真过程中应该注意它们可能的毛刺现象。最后按照 6.2 节中的设计流程和方法即可完成全部设计。(3) 实验内容:首先完成 2 位频率计的设计,然后进行硬件测试,建议选择电路模式 2;数码 2 和 1 显示输出频率值,待测频率 F_IN 接 clock0;测频控制时钟 CLK 接 clock2,若选择 clock2 = 8Hz,门控信号CNT_EN 的脉宽恰好为 1 秒。然后建立一个新的原理图设计层次,在此基础上将其扩展为 8 位频率计,仿真测试该频率计待测信号的最高频率,并与硬件实测的结果进行比较。(4) 实验报告:给出各层次的原理图、工作原理、仿真波形图和分析,详述硬件实验过程和实验结果。1-10.1-10. 用用 QuartusIIQuartusII 设计正弦信号发生器设计正弦信号发生器示例程序和实验指导课件位置示例程序和实验指导课件位置:Experiments Expmt1chpt7Ep1c6_71_SINGT 工程:工程:SINGT(1)实验目的:进一步熟悉 QuartusII 及其 LPM_ROM 与 FPGA 硬件资源的使用方法。(2)实验原理:参考本章相关内容。(3)实验内容 1:根据例 7-4,在 Quartus II 上完成正弦信号发生器设计,包括仿真和资源利用情况了解(假设利用 Cyclone 器件) 。最后在实验系统上实测,包括 SignalTap II 测试、FPGA 中 ROM 的在系统数据读写测试和利用示波器测试。最后完成 EPCS1 配置器件的编程。【例 7-4】 正弦信号发生器顶层设计LIBRARY IEEE; -正弦信号发生器源文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SINGT IS PORT ( CLK : IN STD_LOGIC; -信号源时钟 DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );-8 位波形数据输出END;ARCHITECTURE DACC OF SINGT ISCOMPONENT data_rom -调用波形数据存储器 LPM_ROM 文件:data_rom.vhd 声明 PORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);-6 位地址信号 inclock : IN STD_LOGIC ;-地址锁存时钟- -12 q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT; SIGNAL Q1 : STD_LOGIC_VECTOR (5 DOWNTO 0); -设定内部节点作为地址计数器 BEGINPROCESS(CLK ) -LPM_ROM 地址发生器进程 BEGINIF CLKEVENT AND CLK = 1 THEN Q1Q1, q = DOUT,inclock=CLK);-例化END;信号输出的 D/A 使用实验系统上的 DAC0832,注意其转换速率是 1s,其引脚功能简述如下:ILE:数据锁存允许信号,高电平有效,系统板上已直接连在5V 上;WR1、WR2:写信号 1、2,低电平有效;XFER:数据传送控制信号,低电平有效;VREF:基准电压,可正可负,10V10V;RFB:反馈电阻端;IOUT1/IOUT2:电流输出端。D/A 转换量是以电流形式输出的,所以必须将电流信号变为电压信号;AGND/DGND:模拟地与数字地。在高速情况下,此二地的连接线必须尽可能短,且系统的单点接地点须接在此连线的某一点上。建议选择 GW48 系统的电路模式 No.5,由附录对应的电路图可见,DAC0832 的 8 位数据口 D7.0分别与FPGA 的 PIO31、30.、24 相连,如果目标器件是 EP1C3T144,则对应的引脚是:72、71、70、69、68、67、52、51;时钟 CLK 接系统的 clock0,对应的引脚是 93,选择的时钟频率不能太高(转换速率 1s, ) 。还应该注意,DAC0832 电路须接有+/12V 电压:GW48 系统的+/-12V 电源开关在系统左侧上方。然后下载 SINGT.sof 到 FPGA 中;波形输出在系统左下角,将示波器的地与 GW48 系统的地(GND)相接,信号端与“AOUT”信号输出端相接。如果希望对输出信号进行滤波,将 GW48 系统左下角的拨码开关的“8”向下拨,则波形滤波输出,向上拨则未滤波输出,这可从输出的波形看出。基本步骤如下(详细步骤可参考该书第 4 章):一、顶层文件设计一、顶层文件设计1 创创建建工工程程和和编编辑辑设设计计文文件件 正弦信号发生器的结构由 3 部分组成(图 3-1):数据计数器或地址发生器、数据 ROM 和 D/A。性能良好的正弦信号发生器的设计要求此 3 部分具有高速性能,且数据 ROM 在高速条件下,占用最少的逻辑资源,设计流程最便捷,波形数据获最方便。图3-1 所示是此信号发生器结构图,顶层文件 SINGT.VHD 在FPGA中实现,包含2 个部分:ROM 的地址信号发生器由5 位计数器担任,和正弦数据ROM,拒此,ROM 由LPM_ROM 模块构成能达到最优设计, LPM_ROM 底层是FPGA 中的EAB 或ESB 等。地址发生器的时钟CLK的输入频率 f0与每周期的波形数据点数(在此选择 64 点) ,以及 D/A 输出的频率 f 的关系是: f = f0 /64 图 3-1 正弦信号发生器结构图2 创建工程 3 编译前设置在对工程进行编译处理前,必须作好必要的设置。具体步骤如下:1、选择目标芯片;2、选择目标器件编程配置方式;3、选择输出配置;4 编译及了解编译结果- -135、正弦信号数据 ROM 定制(包括设计ROM 初始化数据文件)另两种方法要快捷的多,可分别用 C 程序生成同样格式的初始化文件和使用 DSP Builder/MATLAB 来生成。6 仿真 7 引脚锁定、下载和硬件测试 8 使用嵌入式逻辑分析仪进行实时测试图 3-33 SignalTapII 数据窗的实时信号9 对配置器件 EPCS4/EPCS1 编程 10 了解此工程的RTL 电路图图 3-35 工程 singt 的 RTL 电路图实验内容 2:修改例 7-3 的数据 ROM 文件,设其数据线宽度为 8,地址线宽度也为 8,初始化数据文件使用 MIF 格式,用 C 程序产生正弦信号数据,最后完成以上相同的实验。实验内容 3:设计一任意波形信号发生器,可以使用 LPM 双口 RAM 担任波形数据存储器,利用单片机产生所需要的波形数据,然后输向 FPGA 中的 RAM(可以利用 GW48 系统上与 FPGA 接口的单片机完成此实验,D/A 可利用系统上配置的 0832 或 5651 高速器件) 。实验报告:根据以上的实验内容写出实验报告,包括设计原理、程序设计、程序分析、仿真分析、硬件测试和详细实验过程。1-11.1-11. 8 8 位位 1616 进制频率计设计进制频率计设计示例程序和实验指导课件位置示例程序和实验指导课件位置:Experiments Expmt1chpt7Ep1c6_72_FREQTEST 工程:工程:FREQTEST(1) 实验目的:设计 8 位 16 进制频率计,学习较复杂的数字系统设计方法。(2) 实验原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为 1 秒的输入- -14信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清 0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生,即图 7-34 中的 FTCTRL。根据测频原理,测频控制时序可以如图 7-33 所示。设计要求是:FTCTRL 的计数使能信号 CNT_EN 能产生一个 1 秒脉宽的周期信号,并对频率计中的 32 位二进制计数器 COUNTER32B(图 7-34)的 ENABL 使能端进行同步控制。当 CNT_EN 高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号 LOAD 的上跳沿将计数器在前 1 秒钟的计数值锁存进锁存器 REG32B 中,并由外部的 16 进制 7 段译码器译出,显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清 0 信号而不断闪烁。锁存信号后,必须有一清 0 信号 RST_CNT 对计数器进行清零,为下 1 秒的计数操作作准备。(3) 实验内容 1:分别仿真测试模块例 7-7、例 7-8 和例 7-9,再结合例 7-10 完成频率计的完整设计和硬件实现,并给出其测频时序波形及其分析。建议选实验电路模式 5;8 个数码管以 16 进制形式显示测频输出;待测频率输入 FIN 由 clock0 输入,频率可选 4Hz、256HZ、3Hz.50MHz 等;1HZ 测频控制信号CLK1HZ 可由 clock2 输入(用跳线选 1Hz)。注意,这时 8 个数码管的测频显示值是 16 进制的。(4) 实验内容 2:参考例 3-22,将频率计改为 8 位 10 进制频率计,注意此设计电路的计数器必须是 8个 4 位的 10 进制计数器,而不是 1 个。此外注意在测频速度上给予优化。(5) 实验内容 3:用 LPM 模块取代例 7-8 和例 7-9,再完成同样的设计任务。(6) 实验内容 4:用嵌入式锁相环 PLL 的 LPM 模块对实验系统的 50MHz 或 20MHz 时钟源分频率,PLL 的输出信号作为频率计的待测信号。注意 PLL 的输入时钟必须是器件的专用时钟输入脚CLKpin16(clock5)或 pin17(clock2) ,且输入频率不能低于 16MHz。 (实验中可以将 50MHz 频率用线引向 Clock2,但要拔除其上的短路帽)(7) 实验报告:给出频率计设计的完整实验报告。【例7-7】LIBRARY IEEE; -测频控制电路USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS PORT (CLKK : IN STD_LOGIC; - 1Hz CNT_EN : OUT STD_LOGIC; - 计数器时钟使能 RST_CNT : OUT STD_LOGIC; - 计数器清零 Load : OUT STD_LOGIC ); - 输出锁存信号 END FTCTRL;ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC;BEGIN PROCESS( CLKK ) BEGIN IF CLKKEVENT AND CLKK = 1 THEN - 1Hz时钟2分频 Div2CLK = NOT Div2CLK; END IF; END PROCESS; PROCESS (CLKK, Div2CLK) BEGIN IF CLKK=0 AND Div2CLK=0 THEN RST_CNT=1;- 产生计数器清零信号 ELSE RST_CNT = 0; END IF; END PROCESS; Load = NOT Div2CLK; CNT_EN = Div2CLK;END behav;【例7-8】LIBRARY IEEE; -32位锁存器USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT ( LK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );- -15END REG32B;ARCHITECTURE behav OF REG32B ISBEGIN PROCESS(LK, DIN) BEGIN IF LKEVENT AND LK = 1 THEN DOUT = DIN; END IF; END PROCESS;E
展开阅读全文