vivdo作业:用quartusii II实现74LS160 可预置BCD异步清除、同步置数同步计数器?

当前位置: >>
quartus ii超详细实验讲义
目录一、基础研究方法实验.................................................................................... 1 基础研究方法实验的基本要求 ....................................................................................... 2 预习要求 ....................................................... 2 基本步骤 ....................................................... 2 实验报告要求 ................................................... 2 实验 1.1 Quartus II 原理图方式设计――4 位全加器............................................. 3 1.Quartus II 的原理图输入法与电路设计 .......................... 3 2.Quartus II 的原理图方式设计――4 位全加器 ................... 19 实验 1.2 Quartus II 文本方式设计――N 进制计数器 .......................................... 20 1.Quartus II 的文本输入法 ..................................... 20 2.用文本输入方式设计 N 进制计数器 ............................ 23 实验 1.3 多层次结构电路设计 .................................................................................. 25 ――一位十进制计数器与 LED 数码显示 .................... 25 1.图形与文本混合设计......................................... 25 2.一位十进制计数器与 LED 数码显示电路设计 .................... 29 实验 1.4 状态机设计――序列检测器 ...................................................................... 31 1.有限状态机设计的基本知识 ................................... 31 2.序列检测器设计 ............................................. 37 实验 1.5 时序逻辑电路设计――多位数码管动态扫描显示 .................................. 39 1. 多位数码管动态扫描显示原理 ................................. 39 2. 4 位数码管动态显示电路设计 ................................. 45 实验 1.6 ModelSim 6.2 SE 仿真软件的使用――计数器及其测试错误!未定义书 签。 1.ModelSim 仿真软件简介...................... 错误!未定义书签。 2.ModelSim 使用练习 .......................... 错误!未定义书签。 二、实验的综合设计与研究 ................................................... 错误!未定义书签。 实验综合设计与研究的基本要求 ................................................. 错误!未定义书签。 预习要求 ...................................... 错误!未定义书签。 基本步骤 ...................................... 错误!未定义书签。 实验报告要求 .................................. 错误!未定义书签。 实验 2.1 流水线技术及应用――加法器与流水线技术 .......................................... 47 1. 流水线技术原理及其应用 ..................................... 47 2. 流水线设计技术及性能分析 ................................... 51 实验 2.2 键盘接口与应用设计――数字密码锁 ...................................................... 52 1.数字密码锁设计举例 ......................................... 52 2.数字密码锁设计 ............................................. 56 实验 2.3 交通灯控制逻辑电路 .................................................. 错误!未定义书签。 1.简易交通灯控制电路设计举例 ................. 错误!未定义书签。 2.行人自助式交通灯控制器设计................. 错误!未定义书签。 实验 2.4 洗衣机控制电路 .......................................................... 错误!未定义书签。 1.洗衣机控制电路设计举例 ..................... 错误!未定义书签。 《EDA 技术与应用》研究性实践教学指导书(第二版)2.洗衣机控制电路设计 ......................... 错误!未定义书签。 实验 2.5 顺序控制设计 .............................................................. 错误!未定义书签。 1.汽车尾灯控制器电路设计举例 ................. 错误!未定义书签。 2.顺序控制电路设计 ........................... 错误!未定义书签。 实验 2.6 简易数字钟 .................................................................. 错误!未定义书签。 1.简易数字钟设计举例 ......................... 错误!未定义书签。 2.简易数字钟设计 ............................. 错误!未定义书签。 三、课题研究与设计实现 ...................................................... 错误!未定义书签。 课题研究与设计实现的基本要求 ................................................. 错误!未定义书签。 选题与设计要求 ................................ 错误!未定义书签。 课题研究与设计论文的规范化要求 ................ 错误!未定义书签。 课题 3.1 全自动电梯控制电路设计 .......................................... 错误!未定义书签。 课题 3.2 8 位数字密码锁设计 .................................................. 错误!未定义书签。 课题 3.3 通行时间可变的交通灯控制器设计 .......................... 错误!未定义书签。 课题 3.4 8 路彩灯控制电路设计 .............................................. 错误!未定义书签。 课题 3.5 出租车计费系统设计 .................................................. 错误!未定义书签。 课题 3.6 自动售货控制系统设计 .............................................. 错误!未定义书签。 课题 3.7 IC 卡公用电话自动计费系统设计 ............................ 错误!未定义书签。 课题 3.8 电话按键显示器设计 .................................................. 错误!未定义书签。 课题 3.9 多量程频率计设计 ...................................................... 错误!未定义书签。 课题 3.10 多功能数字钟设计 ................................................... 错误!未定义书签。 参考文献 ............................................................................ 错误!未定义书签。 附录一 设计论文封面.......................................................... 错误!未定义书签。 附录二 课程设计评分表 ...................................................... 错误!未定义书签。-1- 《EDA 技术与应用》研究性实践教学指导书(第二版)一、基础研究方法实验实验 1.1 实验 1.2 实验 1.3 实验 1.4 实验 1.5 实验 1.6Quartus II 原理图方式设计――4 位全加器 Quartus II 文本方式设计――十进制计数器 多层次结构电路设计――1 位十进制计数器与 LCD 数码显示 状态机设计――序列检测器 时序逻辑电路设计――多位数码管动态扫描显示 ModelSim 6.2 SE 仿真软件的使用――计数器及其测试1 《EDA 技术与应用》研究性实践教学指导书(第二版)基础研究方法实验的基本要求预习要求每次实验前,先阅读该实验的实验指导,完成如下内容并填写实验预习报告: (1)进行系统的分析建模,画出原理框图,并说明系统各模块的功能; (2)Verilog HDL 源程序的设计; (3)波形仿真文件中各个输入信号的设置; (4)实验芯片的选择(教师可事先给定) 、管脚锁定文件的编制以及进行硬件验证 方案的制定。基本步骤EDA 技术实验,由于所使用的软件不同,具体的实验操作步骤有差异,但其基本步 骤如下: (1)源程序的编辑、编译以及逻辑综合; (2)实验芯片的选择、管脚的锁定,再进行逻辑适配; (3)功能仿真、时序仿真和仿真结果分析; (4)硬件验证(可选) ; (5)性能指标测试(可选) 。实验报告要求为了写出一个完整、规范的实验报告,下面给出了实验报告的写作格式及每项报告 内容的写作要点。实验 X1.实验目的 2.实验内容 3.实验条件 (1)开发软件: (2)实验设备: (3)所用芯片: 4.实验设计 (1)系统的原理框图; (2)Verilog HDL 源程序; (3)波形仿真文件; (4)管脚锁定文件(可选) ; 5.实验结果及总结 (1) 系统仿真情况; (2) 硬件验证情况(可选) ;并行加法器的设计实验(3)实验过程中出现的问题及解决办法;2 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.1 Quartus II 原理图方式设计――4 位全加器Quartus II 是 Altera 公司近几年推出的新一代、功能强大的可编程逻辑器件设计环 境。 Quartus II 支持 Altera 公司最新器件,如 ACEX 1K、APEX 20K、APEX 20KC、 APEX 20KE、APEX II、ARM-based Excalibur、FLEX 6000、FLEX 10KE、MAX 3000A、 MAX 7000AE、MAX 7000B、Mercury 和 Stratix、Stratix II 器件。 Quartus II 支持多种编辑输入法,包括原理图编辑输入法、VHDL、Verilog HDL 的 文本编辑输入法,符号编辑输入法,以及内存编辑输入法。先介绍原理图输入法。 1.Quartus II 的原理图输入法与电路设计 在 Quartus II 平台上, 使用原理图编辑输入法设计电路的操作流程包括编辑、 编译、 仿真、 编程下载等基本过程。 用 Quartus II 图形编辑方式生成的图形文件的扩展名为.bdf 或.gdf。 (1) 建立工程目录 为了方便电路设计,设计者首先应当在计算机中建立自己的 工程目录, 例如用\mywork\add\文件夹存放半加器文件。 每个工程都要建立一个文件夹。 注意:不要直接将工程文件放在根目录下,目录路径中不得有汉字。 (2)创建工程 启动 Quartus II 6.0 后,出现主界面如图 1.1-1,各工作区和工具 条说明见教材 P56。图 1.1-1Quartus II 主窗口界面 3 《EDA 技术与应用》研究性实践教学指导书(第二版)1) 新建工程 (Project) : 选择“File”?“New Project Wizard”命令, 按提示操作。 图 1.1-2 所示是创建新的工程对话框。假定文件夹名为 add,当前工程名为 adder,顶 层实体名一般可以和当前工程同名。填入工程所在 的文件夹名 填入当前工程名 填入顶层实体名图 1.1-2创建新的工程对话框2)将设计文件加入工程:单击图 1.2-2 中的“NEXT”按钮,进入增加文件对话框 “ADD FILE” ,见图 1.1-3。如果在此之前已经建立了文件,则用查找(?)按钮找到文 件后,按“ADD”选中并逐个添加文件。若添加全部文件,则选“ADD ALL” ;如果尚 未建立文件,可以直接“NEXT” ,进入下一步。图 1.1-3增加文件对话框 4 《EDA 技术与应用》研究性实践教学指导书(第二版)可以随时增加文件的简便方法是:在 Quartus II 主界面中,在“Project”菜单下选 择“Add Current File to Project”将当前文件加入工程,或者选择“Add/Move File in Project” ,出现“Settings”对话框后,按增加文件的方法操作或将选定文件移出工程。 3)目标芯片系列与器件设置:按“NEXT”按钮进入“Family & Device Settings” 对话框,见图 1.1-4。在 Family 的下拉列表框中选择合适的芯片――若仅作设计和仿真 则可根据仿真实际要求选择,如果已连接实验箱则应该按实验箱中配置的芯片型号选 择。 在“Target device”单选框中,如果选择“Auto device” , 则右边的选项 Package(封 装形式)、Pin count(引脚数)、Speed grade(速度等级)均可不选;如果选择“Specific device selected in ‘Available devices’ list”,则应根据工程设计要求或实验箱配置情况选 择。图 1.1-4目标芯片系列与器件设置对话框4)设定 EDA 工具:按“NEXT”按钮进入“EDA Tool Settings”对话框,如图 1.1-5 所示。 EDA 工具设定对话框有 EDA Design Entry/Synthesis Tool(EDA 设计输入/综合工 具) 、EDA Simulation Tool(EDA 仿真工具) 、EDA Timing Analysis Tool(EDA 定时分析 工具)三类选项。 每一类选项均在下拉列表框中列出了至 2006 年 6 月为止,世界各个厂商推出的各 种可供选择的工具软件,应根据实际安装情况选择。如果全部工具都采用 Altera 公司开 发平台 Quartus II 中默认配置,这三项都可以不选。如果系统已安装了某工具软件,比 如仿真软件 ModelSim,当工程编译通过后,进入仿真进程时系统将自动启动 ModelSim5 《EDA 技术与应用》研究性实践教学指导书(第二版)运行。运行完毕后,返回 Quartus II 主界面。图 1.1-5设定 EDA 工具对话框5)工程设置报告:按“NEXT”按钮进入“Summary”页面,如图 1.1-6 所示。图 1.1-6工程创建报告工程创建报告列出以下选择与配置情况:工程目录、工程名、顶层文件名、工程添 加的文件数和用户库文件数、选择的芯片系列和型号、EDA 工具的选择情况。 (3)原理图输入 在主界面的工具条中“New”或选择菜单“File”?“New”, 出现新建文件类型选择框,如图 1.1-7 所示。 1) 选择新建文件类型: 在 “Device Design Files” 选项卡中列出了以下选项: AHDL、 Block Diagram/Schematic(原理图) 、EDIF、SOPC Buider System、Verilog HDL(程序 文本) 、VHDL(程序文本)对应不同的文件类型。 在 Other Files 选项卡中列出了 AHDL Include、Block Symbol、Chain Description、6 《EDA 技术与应用》研究性实践教学指导书(第二版)Hexadecimal 、 Logic Analyzer Interface 、 Memory Initialization (存储器初始化) 、 SignalTap II、Tcl Script、Text、Vector Wavefome(向量波形)等文件类型。 采用原理图输入时应选 Block Diagram/Schematic File ,采用程序文本输入时选 Verilog HDL File,而后面将要进行的波形仿真则应选 Vector Wavefome File。图 1.1-7新建文件类型选择对话框2)放置器件符号:选择 Block Diagram/Schematic File 后,出现如图 1.1-8 所示原 理图输入与编辑窗。窗口左侧是工程浏览窗和状态窗,右侧是编辑窗,下边是信息区。 在编辑窗内双击鼠标左键或单击编辑窗右侧工具栏的“Symbol Tool” (鼠标指向对象时 有工具提示) ,可以弹出 Symbol(符号)窗口,见图 1.1-9。图 1.1-8原理图输入与编辑窗 7 《EDA 技术与应用》研究性实践教学指导书(第二版)符号窗在 Library 下分类显示了 megafunctions(宏单元库) 、others(其他,在 maxplus2 文件夹下包括常用的 74 系列数字集成电路) 、primitives(基本或原语)包含 常用的缓冲器、逻辑门、地线与电源、输入输出引脚、各类触发器等。图 1.1-9符号选择窗口选择器件的方法有三种。 ①已知器件名称:可直接在 Name 栏内键入名称,对应器件出现在图 1.1-9 右侧显 示区, 同时 Library 列表中对应器件名被加亮。 光标停在 Name 栏内时, 按回车键或 “OK” 可将选中符号送入原理图编辑窗,然后按鼠标左键定位即可; 双击被加亮的器件名,也可将选中的一般器件符号(LPM 宏单元除外)送入原理图 编辑窗。 ②不知器件名称:可以在 Library 窗口内将子文件夹展开查找,找到后双击器件名 可将选中符号送入原理图编辑窗。 ③用查找按钮:点击“Name”窗右侧的查找按钮“...” ,弹出“打开”对话框。在 安装目录的\quartus60\library 路径下可以找到与 Library 显示窗口类似的各个子文件 夹,再行选择。 选中符号选择窗的左下角的检查框“Repeat-insert mode”,可将选择的图形符号重 复多次插入原理图编辑窗,直至按鼠标右键取消。 在原理图编辑窗,先选中器件符号,后按下 Ctrl 键进行拖放操作可以复制器件。 3)编辑/保存图形文件:使用编辑窗左侧工具栏的连线工具将各器件符号按设计电 路原理图正确连接。错误连线、不需要的器件可以先选中,然后用 delete 键删除。 选中输入/输出端子之后双击“pin_name” ,将其改为合适的输入/输出端口名。8 《EDA 技术与应用》研究性实践教学指导书(第二版)保存图形文件:按工作区顶层工具按钮“Save” (软盘符号) ,将图形文件保存在事 先建立的文件夹 add 内,其文件名是定义的 adder,扩展名为.bdf。 (4) 编译设计文件 包括编译前目标器件的选择和编译工具的使用方法。 1)编译前设置:首先是选择目标器件,在前面利用“New Project Wizard”对话框 建立设计工程时已经选定了目标器件。如果没有选定或需要修改,可以在主窗口或 “Assignments” 下选择 “Settings” 项或 “Settings” 按钮, 在弹出的对话框中选 “Device” 项设定器件,出现与图 1.1-4 相似的界面。见图 1.1-10。图 1.1-10设置窗口设定好器件之后,单击“Device & Pin Options”按钮,出现“Device & Pin Options” 选择窗,可以对器件配置方式及配置器件、配置文件格式、闲置引脚处置方式等项目进 行选择和配置,详细方法可参考 Altera 公司的用户指南。图 1.1-11器件与管脚选择窗口 9 《EDA 技术与应用》研究性实践教学指导书(第二版)2)编译:在 Quartus II 的主窗口界面顶部主菜单之下,完全编译(Compilation) 、 分析与综合 (Analisis & Synthesis) 、 时序分析 (Timing Analyzer) 、 波形仿真 (Simulation) 都有对应的工具按钮,形如 可以单击它们启动相应的操作。另外, 也可以主菜单 Processing 中分别选择 Compiler Tool、 Simulator Tool、 Timing Analyzte Tool 进行编译、 仿真、 时序分析等。 图 1.1-12 是在 Processing 中选择 Compiler Tool 后弹出的编译工具窗口。 按下编译窗口的 Start 按钮, 或主界面工具栏的启动编译按钮 (Start Compilation) , 即启动了完全编译。完全编译包含了分析与综合(Analysis & Synthsis) 、适配(Fitter) 、 装配(Assembler) 、定时分析(Timing Analyzer) 、网表文件提取等过程。使用编译工 具窗口内的按钮或者用主菜单 Processing 下的 Start 项进行选择,可以单独启动某个过 程,为设计者提供了方便。图 1.1-12编译工具窗口编译过程中,主界面工作区内随编译进程的推进,会显示相关信息并产生各种相关 文件和报告,如定时分析文件、器件编程文件、各种报告文件等供设计者参考和研究。 系统提示编译成功之后,就可以进行波形仿真。若仿真成功,为了设计全加器时方 便调用,可以选择菜单“File”→“Create/Update”→“Create Symbol Files for Current File ”将半加器封装成一个元件符号。全加器的图形建立过程与方法与前述半加器完全 相同,完成的电路如图 2.1-13。启动完全编译,全加器编译成功后再进行波形仿真。10 《EDA 技术与应用》研究性实践教学指导书(第二版)图 2.1-13全加器电路(5)波形仿真 Quartus II 支持功能仿真和时序仿真,功能仿真只检验设计项目 的逻辑功能,时序仿真则将延时信息也考虑在内,更符合系统的实际工作情况。 仿真一般需要经过建立波形文件、输入信号节点、设置波形参量、编辑输入信号、 波形文件存盘、运行仿真器和分析仿真波形等过程。 1)打开波形编辑器:选择主界面的 “New” 按钮或主菜单“File”→“New” , 在“New”窗口中选择“Others Files”选项卡,双击“Vector Wavefome File”出现如 图 1.1-14 所示波形编辑界面。图 1.1-14波形编辑界面2)输入信号节点:在波形编辑方式下输入信号节点有四种方法。 ①在波形文件编辑窗口的“Name”栏中双击鼠标左键; ②在波形文件编辑窗口的“Name”栏中点鼠标右键, 在弹出的菜单中选择“Insert Node or Bus…”命令; ③执行“Edit”的“Insert Node or Bus…”命令。 以上三种方法都可以弹出插入节点或总线(Insert Node or Bus)对话框,如图 1.1-15。11 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.1-15插入节点或总线对话框单击“Node Finder”按钮进入“Node Finder”对话框,见图 1.1-16。在“Fiter” 框中选择“Pins:all” ,再单击“List”按钮,即在下面的“Node Found”框中出现本设 计项目中的全部端口引脚列表。将找到的端口用移动工具逐个或全部移到窗口右侧的 “Selected Nodes”中。单击“OK”就将选定的节点移入了波形编辑窗口。图1.1-16节点搜索对话框1④选择菜单“View”→“Utility Windows” →“Node Fider” ,弹出“Node Finder” 窗口,如图 1.1-17。此节点搜索对话框“Filer”与“List”操作与前相同,只是需要从 “Nodes Found”列表中将端口逐个拖入波形编辑窗的“Name”栏。图 1.1-17节点搜索对话框 2 12 《EDA 技术与应用》研究性实践教学指导书(第二版)3)设置波形参量:Quartus II 6.0 默认的仿真时间域是 1μs,如果需要更长时间观 察仿真结果, 可执行“Edit”→“End Time…”选项,在弹出的“End Time”选择窗中, 选择适当的仿真时间域。 Quartus II 6.0 默认的网格宽度 10ns, 可以选“Edit”→ “Grid Size…”在弹出“Grid Size”选择窗中根据需要设置。 上述菜单仅在波形编辑窗下出现。 4)编辑输入信号:为输入信号 A、B 和 CIN,需要编辑测试输入信号。 波形编辑窗左侧的信号编辑工具可以用于快捷编辑各输入信号的激励波形。常用的 信号是计数、时钟和波形编辑工具。 单击欲编辑信号端子,信号编辑工具加亮,然后可以选择所需工具。编辑界面如图 1.1-18。波形编 辑工具时钟计数值图 1.1-18信号编辑与设置界面图 1.1-18 中,计数值“Count Value”设定对话框的“Counting”下可以设定数制, 可以有 6 种选择:二进制(Binary) 、小数(Fractional) 、16 进制(Hexadecimal) 、8 进制 (Octal) 、 有符号 10 进制 (Signed Decimal) 、 无符号 10 进制 (Unsigned Decimal) 。 起始值(Start Value)默认为 0,可以修改为 1。计数类型“Count Type”默认为二进 制,可以另选为格雷码(即循环码) “Gray Code” 。 “Timing”选项卡用于设定仿真起始时间、结束时间、计数周期(Count Every) 和倍乘系数(Multiplied by) 。结束时间受“Edit”→“End Time…”选项设定值的约束。 倍乘系数在设置多个计数形式输入信号时特别方便。比如有 4 个输入信号,将它们的倍 乘系数顺序设为 1、2、4、8,则输入信号构成一个 4bits 遍历的递增/递减计数信号。 倍乘系数(Multiplied by)也可以根据仿真需要设置为其他整数值。见图 1.1-19。13 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.1-19Timing 设置界面图 1.1-20Clock 设置界面时钟(Overwrite Clock)主要用于设置仿真时钟信号,其界面如图 1.1-20 所示。仿 真的起始、结束时间、时钟周期、偏置、占空比(Duty cycle)都可以单独设置。 应注意的是:与前述“Count Value”中情况相同,End Time 默认值是 1μs,它不 可大于“Edit”→“End Time…”选项的设定值,即如果要增加仿真时间,应该先修改 “Edit”→“End Time…”的设定值。 波形编辑工具(Wavefome Editing Tool)用于编辑非计数信号特别方便,单击该工 具按钮后,在波形显示区压下鼠标左键,可以方便地将信号高电平改为低电平或执行相 反操作。 信号设置编辑完成之后,双击信号端子(Name 栏左侧) ,弹出“Node Properties” 窗口可以对信号端子的名称、类型、数制、总线宽度等参数进行修改。 5) 波形文件存盘: 单击主界面的保存 (Save) 按钮或执行“File”→“Save”命令, 在弹出的“Save as”对话框中直接按“OK”键即可完成波形文件的存盘。在波形文件 存盘操作中,系统自动将波形文件名设置与设计文件名同名,但文件类型是.vwf。例如, 全加器设计电路的波形文件名为“f_adder.vwf”。 波形文件修改之后也应该存盘, 或在启动波形仿真后系统提示修改时, 应答 “Yes” 。 6)仿真器设置与运行:Quartus II 下仿真分为时序仿真和功能仿真。仿真类型除 了在主界面下单击“Settings”工具按钮进入设置对话框,选择相应类型和波形文件之 外,使用“Processing”→“Simulator Tool”弹出的仿真器设定对话框是一种方便快捷 的方法。仿真工具对话框如图 1.1-21。 模式选择:在仿真模式(Simulation mode)框中可以选择功能仿真(Functional) 或时序仿真(Timing)或使用快速时序模型仿真(Timing using Fast Timing Model) 。 确认仿真输入文件(Simulation input) :如果第(5)步保存的 f_adder.vwf 矢量波 形文件名没有出现,可以按搜索按钮查找。14 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.1-21仿真工具对话框对于功能仿真,在启动仿真之前还需要产生功能仿真网表文件。只需按下对话框顶 部右侧的产生功能仿真网表文件按钮(Generate Functional Simulation Netlist) , 系统会自动执行。 执行完毕之后,系统有提示信息。而对于时序仿真则不需执行要此 操作。 如果需要还可以对仿真过程和结果进行相关设置。 最后,点击下方“Start”按钮即可对全加器电路进行仿真,也可点击主界面的 “Start Simulation”工具按钮或执行“Processing”→“Start Simulation”菜单项启动 仿真。图 1.1-21 仿真工具对话框下方的“Open”和“Report”按钮分别用来打开仿真 输入文件和报告文件,以检验仿真结果正确与否。在 Quartus II 波形仿真文件中,波形 文件(*.vwf)与波形仿真报告文件(Simulation Report)是分开的,可以单独打开。如 果在启动仿真运行后,并未出现仿真完成后的波形图,而是出现文字“ Can’t open Simulation Report Window” ,但报告仿真成功,则可自己打开仿真波形报告观察结果。 如果无法展开波形显示时间轴上所有的波形,可以右键单击波形编辑器中任何位 置,弹出菜单后选择“Zoom”→“Fit in Window” ,就可以显示所有波形。 ( 6)应用 RTL 电路图观察器 Quartus II 可以实现硬件描述语言或网表文件 (VHDL、Verilog HDL、BDF、TDF、EDIF)对应的 RTL 电路图的生成。方法如下。 选中 Tools→“Netlist Viewer”菜单项,在出现的下拉菜单中有三个选项: 1)RTL Viewer:HDL 的 RTL 级图形观察器; 2)Technology Map Viewer:HDL 对应的 FPGA 底层门级布局观察器; 3)State Machine Viewer:HDL 对应的状态机观察器。 选择第 1)项,可以打开 f_adder 工程的 RTL 电路图,见图 1.1-22。15 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.1-22全加器 f_adder 工程的 RTL 电路图RTL 电路图对于原理图输入法创建的数字电路而言, 似乎意义不大。 但是可以设想: 如果用 Verilog HDL 或其他硬件描述语言描述的电路或数字系统,在完成编译、仿真之 后可以通过 RTL 电路图观察器看到与程序对应的电路图,该是多么令人激动的事情! 双击图形中有关模块或选择左侧各项,可以逐层了解各层次的电路结构。对于复杂 的 RTL 电路,可以利用功能过滤器“Filter”简化电路。即用右键单击该模块,在弹出 的菜单中选择“Sources”或“Destinations” ,用于产生相应的简化电路。以下是将数字系统设计文件写入芯片――编程下载,如果仅作仿真则不 必执行此项操作。(7) 编程下载设计文件 编程下载设计文件包括引脚锁定和编程下载两个步骤操 作。此处以全加器为例说明引脚锁定和编程下载的操作方法。 1)引脚锁定 在目标芯片引脚锁定前,需要确定使用的 EDA 硬件开发平台及相应的工作模式。 确认已经打开了工程文件,如 f_adder 工程,然后确定设计电路的输入和输出端与目标 芯片引脚的连接关系,再进行引脚锁定。 ①单击工具条“Assignments Editor” 赋值编辑按钮,或者执行“Assignments” 项中的赋值编辑“Assignments Editor”命令,单击工具按钮“Pin”或在弹出的赋值编 辑对话框“Category”栏目选择“Pin”项。全加器的所有引脚出现在列表框中,见图 1.1-23。16 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.1-23引脚赋值编辑对话框② 用鼠标双击引脚“A”对应的“Location”栏目下的空格,在其下拉菜单中列出 了所选芯片的全部可使用的 I/O 端口,例如 PIN_1、PIN_2…等。 不同的芯片引脚数不同, 系统保留的引脚数量和引脚序号也各不相同, 如图 1.1-23 所示 PIN_1 为 Global Clear、PIN_2 为 Ded.Input、PIN_14 为 TDI 等,系统保留的引脚 不可由用户分配锁定。 用鼠标选择其中的一个 I/O 端口作为信号 A 的输入端口。例如,全加器的 A、B、 CIN、COUT 和 SUM 端口,可分别选择 Pin_22 、Pin_21、 Pin_20、Pin_36 和 Pin_37。 赋值编辑操作结束后,存盘并关闭此窗口,完成引脚锁定。 ③ 锁定引脚后还需要对设计文件重新编译,产生设计电路的下载文件(.sof) 。 在引脚锁定中使用了 Assignments Editor。事实上 Assignments Editor 还有许多其 他功能,它是 Quartus II 中建立和编辑的界面,可用于在设计中为逻辑指定各种选项和 设置,包括位置、I/O 标准、时序、逻辑选项、参数、仿真、布局布线控制、适配优化 和引脚设置等。详细情况可参考相关书籍。 2)编程下载设计文件 在编程下载设计文件之前, 要将硬件实验测试系统接口与计算机连接好, 打开电源。 ①首先设定编程方式:直接按工具按钮“Programmer”或选择主菜单“Tools”→ “Programmer”命令,弹出设置编程方式窗口。用鼠标点击下载方式窗口左边的“Add File”(添加文件)按键,在弹出的“Select Programming File”(选择编程文件)的对 话框中,选择全加器设计工程目录下的下载文件“Adder.sof”。17 《EDA 技术与应用》研究性实践教学指导书(第二版)开始编程 自动检测 删除文件 添加文件图 1.1-24编程方式设置对话框② 设 置 硬件 :用 鼠 标点击 “Hardware Setup”(硬 件 设 置) 按钮 , 在弹出 的 “Hardware Setup”硬件设置对话框“Curently selected hadware”栏下拉列表框中选 择“ByteBlaster[LPT1]”后按“Close”键,见图 1.1-25。究竟采用哪一种编程方式取 决于 Quartus II 对实验系统上的编程口的测试。图 1.1-25硬件设置对话框硬件设置完成且实验测试系统与计算机连接之后,可以单击图 1.1-24 中“Auto Detect” (自动检测)按钮,系统能自动检测硬件连接情况和编程方式并报告检测结果。 ③编程下载:单击按钮“Start” 或者直接按工具栏的“Programmer”按钮,即可 实现设计电路到目标芯片的编程下载。18 《EDA 技术与应用》研究性实践教学指导书(第二版)2.Quartus II 的原理图方式设计――4 位全加器 (1)实验目的 1)参考本节的第一部分,学习掌握 Quartus II 软件的基本使用。 2)熟悉利用 Quartus II 的原理图输入方法设计简单组合逻辑电路,掌握层次化设 计方法。 3)熟练掌握 4 位全加器设计的原理图输入方式。 (2)实验原理 一个 4 位全加器可以由 4 个一位全加器构成, 加法器之间的进位可以用串行方式实 现,即将低位加法器的进位输出 COUT 与相邻的高位加法器的进位输入信号 CIN 相连。 1 位加法器设计方法可参考本实验的第一部分――Quartus II 的原理图编辑输入法与电 路设计、教材 3.2 Quartus II 原理图设计和《数字电子技术基础》 (阎石主编) 。(3)实验步骤 1)完成 1 位半加器和 1 位全加器的设计,包括原理图输入、编译、综合、适配、 仿真,并将此全加器设置成一个硬件符号入库; 2)建立一个更高层次的原理图设计,利用第(1)步设计的 1 位全加器构成 8 位全 加器,完成原理图输入、编译、综合、适配、仿真运行。 实验芯片的型号可选 Altera 的 MAX7000S 系列的 EPM7128SLC84-15, FLEX10K 系 列的 EPF10K10LC84-3 FPGA, ACEX1K 系列的 EP1K30 FPGA 等。 (4)实验要求 1)画出系统各层次的原理框图,说明系统中各主要组成部分的功能。 2)记录系统各层次的仿真波形,分析仿真结果。 3)记录实验过程中出现的问题及解决办法。 (5)问题思考 参考高等教育出版社阎石主编的《数字电子技术基础》 ,4 位全加器的结构设计除 了串行进位之外,还有哪几种方式?串行进位的缺点是什么,如何改进?19 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.2 Quartus II 文本方式设计――N 进制计数器1.Quartus II 的文本输入法 Quartus II 的文本编入法与图形输入法的设计步骤基本相同。在设计电路时,首先 要建立设计项目,然后在 Quartus II 集成环境下,执行“File”?“New”命令,在弹 出的编辑文件类型对话框,选择“Verilog HDL File”或“VHDL File” ,或者直接按主窗 口上的创建新的文本文件按键,进入 Quartus II 文本编辑方式。 在文本编辑窗口中,完成 Verilog HDL 或 VHDL 设计文件的编辑,然后再对设计文 件进行编译、仿真和下载操作。根据需要,还可以进行硬件测试等操作。 除新建文件类型选择为 “Verilog HDL File” 之外, 其余详细步骤和方法见本讲义 “实 验 1.1 Quartus II 原理图方式设计” 。 下面的例子说明了文本方式描述 74LS161 并附加其他逻辑门电路设计一个十进制 计数器的过程。 已知中规模可预置 4 位二进制加法计数器 74LS161 的功能表如表 1.2-1 所示。 由表 可知,74161 具有以下功能: (1) 异步清零: 当 CLRN=0 时, 不管其他输入端的状态如何 (包括时钟信号 CLK ) , 计数器输出将被直接置零,称为异步清零。 (2)同步并行预置数:在 CLRN=1 的条件下,当 LDN=0、且有时钟脉冲 CLK 的上 升沿作用时,A、B、C、D 输入端的数据将分别被 QA~QD 所接收。由于这个置数操作 要与 CLK 上升沿同步,且 A~D 的数据同时置入计数器,所以称为同步并行置数。 (3)保持:在 CLRN=LDN=1 的条件下,当 ET?EP=0,即两个计数使能端中有 0 时,不管有无 CLK 脉冲作用,计数器都将保持原有状态不变(停止计数) 。需要说明的 是,当 ENP=0,ENT=1 时,进位输出 RCO 也保持不变;而当 ENT=0 时,不管 ENP 状 态如何,进位输出 RCO=0。 (4)计数:当 CLRN=LDN=ENP=ENT=1 时,74161 处于计数状态。表 1.2-1 74LS161 功能表清零 预置 使 能 时钟 CLRN LDN ENP ENT CLK L × × × × ↑ H L × × H H H H H H L × H × L H × × ↑预置数据输入 A B C D × × × × A B C D × × × × × × × × × × × ×QA L A输 出 QB QC L L B C 保 持 保 持 计 数QD L D本例题采用的设计方法是由已知(或利用数字电路知识先行设计)一个时序逻辑电 路功能表,然后用 Verilog HDL 语言描述其功能模块,再设计另外一个模块调用它来实 现设计目标。例如已知由可预置数的 4 位二进制加法计数器 74LS161 和两个门电路可20 《EDA 技术与应用》研究性实践教学指导书(第二版)以组成一位 8421BCD 码十进制计数器的顶层电路如图 1.2-1 所示。图 1.2-1用 74LS161 和门电路构成 1 位 8421BCD 码十进制计数器的顶层电路下面用 Verilog HDL 语言进行程序设计,建立具有复位、置数、加 1 计数功能的 74LS161 模块 ls161,它然后用 counter 模块调用,完成计数器设计。 module ls161(Q,RCO,D,ET,EP,LOAD,CLR,CLK); output[3:0]Q; output RCO; input[3:0]D; input LOAD,ET,EP,CLR,CLK; reg[3:0] Q; wire EN; assign EN=ET&EP; always@(posedge CLK or negedge CLR) begin if(!CLR) Q=4'b0000; else if (!LOAD) else if(EN) begin if(Q==15) Q=0; else Q=Q+1;end end assign RCO=((Q==4'b1111)&EN)?1:0; endmodule21// TTL74LS161 逻辑功能设计//声明 74LS161 的全部引脚,见内层虚线框内的引脚名//复位 //置数 //加法计数 //产生进位信号Q=D; 《EDA 技术与应用》研究性实践教学指导书(第二版)module counter(Q, CO, RRCO, CLK); output Q,CO,RRCO; input CLK; wire[3:0] Q; wire CO,RCOL,RRCO,LOADL; wire[3:0]D; wire VCC,GND; assign D=4'b0000,VCC=1,GND=0;// 调用 ls161 和内置门元件设计计数器//module ls161(Q,RCO,D,ET,EP,LOAD,CLR,CLK); ls161 u1(.Q(Q), .RCO(RCOL), .D(D), .ET(VCC), .EP(VCC), .LOAD(LOADL), .CLR(VCC), .CLK(CLK)); //模块 ls161 例化,见外层虚线框内的引脚名 nand u2(LOADL,Q[3],Q[0]); not u3(CO,LOADL); not u4(RRCO,RCOL); endmodule 本设计采用了元件例化方法,模块 ls161 定义了具有复位、置数、加 1 计数功能的 74LS161 芯片,然后在 counter 模块中用元件例化方法调用。例化语句为: ls161 u1(.Q(Q) , .RCO(RCOL) , .D(D) , .ET(VCC) , .EP(VCC) , .LOAD(LOADL) , .CLR(VCC) ,.CLK(CLK)); ☆例化语句格式为:已定义模块名(ls161)例化名(u1,由设计者定义)后面括 号内每组参数的格式是: .定义模块中的端口名(例化调用端口名) ,??每组参数用逗 号分隔。定义模块中的端口名与例化调用端口名可以相同或不同。 ☆内置门元件 not, nand 等调用方法: 内置门元件名 (输出端口名, 输入端口名) 。 图 1.2-2 是上述 Verilog HDL 程序设计的具有 74LS161 功能的 ls161 模块以及使用 元件例化调用设计完成的十进制计数器 counter 的顶层图形文件。 //Quartus II 内置门元件 nand 调用 //Quartus II 内置门元件 not 调用 //Quartus II 内置门元件 not 调用图 1.2-2Verilog HDL 程序生成的 ls161 和十进制计数器符号22 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.2-3 是用 Verilog HDL 程序设计的 ls161 计数器的仿真波形。图 1.2-3ls161 计数器的波形仿真结果利用本实验指导书实验 1.1“Quartus II 原理图方式设计”中讲述的方法,在主菜 单 Tools 下选择 Netlist Viewerss→RTL Viewer 可以生成 RTL(寄存器传输级)图形,见 图 1.2-4。展开图中左边的树形目录,可以浏览 ls161 的内部结构及电路的各层构成元 件,如连线、引脚、逻辑门等。图 1.2-4计数器的 RTL 图形2.用文本输入方式设计 N 进制计数器 (1)实验目的 1)学习用 Verilog HDL 语言描述已知数字集成电路芯片的方法。已知电路图如图 1.2-5 所示,参考本节的第一部分完成 74161 的 Verilog HDL 语言描述。 2)掌握利用 Quartus II 的文本输入方式设计计数器方法。 3)熟练掌握计数器波形仿真方法,能够正确设计输入波形以检验计数器功能。23 《EDA 技术与应用》研究性实践教学指导书(第二版)图 1.2-5实验硬件电路示意图(2)实验原理 1)74LS161 是一个 4 位二进制计数器通用数字集成电路芯片,适当连接其外部引 脚可以构成不同进制的计数器电路。两输入低电平有效的或非门 BNOR2 在 Quartus II 的 Symbol 库 primitives/logic 目录下,可以在 NAME 窗口直接输入 BNOR2 搜索。 2) 74LS161 的 Verilog HDL 语言描述方法可参考本实验的第一部分――Quartus II 的文本方式设计、例化语句和内置门元件调用可以参考第一部分程序中的相关语句。 3)计数器设计方法可参阅《数字电子技术基础》 (阎石主编,高等教育出版社)有 关章节。74LS161 功能表参见本实验的第一部分。 (3) 实验步骤 1)完成计数器内核 LS161 和 N 进制计数器的 Verilog HDL 语言文本设计,包括程 序输入、编译、综合、适配、仿真,并将此计数器设置成一个硬件符号入库; 2)分析第 1)步设计完成的电路,它的硬件逻辑功能和仿真结果是否一致。 实验芯片的型号可选 Altera 的 MAX7000S 系列的 EPM7128SLC84-15, FLEX10K 系 列的 EPF10K10LC84-3 FPGA,ACEX1K 系列的 EP1K30 FPGA 等。 (4)实验要求 1)画出系统硬件原理图和 RTL 图,说明系统中各元件的功能。 2)记录系统的仿真波形,分析仿真结果。这个计数器是几进制? 3)记录实验过程中出现的问题及解决办法。 (5)问题思考与习题 ①参考高等教育出版社阎石主编的《数字电子技术基础》 ,在本计数器设计的基础 上如何利用 74LS161 内核模块 ls161 设计 N 进制计数器?比如 13 进制、 24 进制计数器? ②网上查阅 74LS90 异步十进制计数器功能表,并设计 60 进制、12 进制计数器。24 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.3 多层次结构电路设计 ――一位十进制计数器与 LED 数码显示使用原理图或文本方式这种单一的描述方法实现某种电路,其实现的功能很有限。 多层次结构电路设计就是为了设计实用数字系统而提出的,多层次结构电路的含义是: 一个数字系统可以由多层设计模块构成,一般系统底层采用文本方式设计,而顶层采用 图形方式或文本方式设计。多层次结构电路也包含混合工程设计的含义,所谓“混合” 有两个方面的意义:一是采用不同的设计方法如图形方式或文本方式进行设计,二是采 用不同的程序设计语言如 Verilog HDL、VHDL、AHDL 等设计一个工程。混合工程设计 的意义在于可以由一个团队的多人采用不同程序设计语言、自行设计或直接引用来源不 同的功能模块共同完成一个复杂工程的设计。多层次的混合工程设计可以采用自顶向下 或自底向上设计方法。 1.图形与文本混合设计 如果数字系统比较复杂,一般均应采用“Top-down”的方法进行设计。首先把系统 分为几个模块,每个模块再分为几个子模块,以此类推,直到易于实现为止。这种 “Top-down”的方法能够把复杂的设计分解为许多简单的逻辑来实现,同时也适合多 人进行合作开发,如同用 C 语言编写大型软件一样。Verilog HDL 语言能够很好地支持 这种自顶向下的设计方法。下面用一个 8 位累加器 ACC 的设计说明图形和文本混合设 计方法。 (1)文本方式设计 8 位全加器 module add8(sum, cout, a, b, cin); output [7:0] input [7:0] a, assign { cout, sum}=a+b+ endmodule (2)文本方式设计 8 位寄存器 module reg8(qout, in, clk, clear); output [7:0] input [7:0] input clk, reg[7:0] always@(posedge clk or posedge clear) begin if (clear) qout&=0; else qout&= end endmodule (3)顶层连接25 《EDA 技术与应用》研究性实践教学指导书(第二版)顶层连接有两种方法:图形方式和文本方式。 1)图形方式:对 8 位全加器和 8 位寄存器模块用 Quartus II 软件分别进行编译, 生成两个模块符号,再在顶层图形方式下把两个模块连接,加上信号端就构成了累加器 电路,如图 1.3-1。顶层电路采用图形方式设计,具有端口连接清晰、直观的优点。图 1.3-18 位累加器的图形方式顶层连接2) 文本方式: 采用文本方式描述顶层连接, 可以实现全文本方式的设计。 用 Project →Add/Remove Files in Project 或用 Settins/Files 将 add8 和 reg8 添加到 acc 工程中再进行编译、仿真工作,也可以参考(4)文件调用方法中的库管理方法。 累加器的顶层连接文本描述如下。注意应该先设计好 acc 的顶层连接关系。 module acc(accout, cout, accin, cin, clk, clear); output [7:0] input [7:0] input cin, clk, wire [7:0] add8 accadd8(sum, cout, accout, accin, cin); reg8 accreg8(accout, sum, clk, clear); endmodule 该文本方式描述的顶层连接调用了 add8 和 reg8,调用时需要特别注意这两个模块 端口信号名与顶层模块端口名的一一对应。图 1.3-2 是该 8 位累加器的 RTL 综合效果。图 1.3-28 位累加器的 RTL 综合效果 26 《EDA 技术与应用》研究性实践教学指导书(第二版)由图 1.3-1 和图 1.3-2 可以看出两种方法实现的顶层连接效果完全相同。这个例子 采用了图形和文本混合设计方法, 底层都是使用文本设计, 顶层采用了图形或文本方式。 (4)文件调用方法 在前面举例说明文本方式的顶层连接时, 是将 add8 和 reg8 两个模块放在同一个工 程 accGraph 中,系统编译、综合时能够自动寻找调用目标。文件调用还有三种方法: 1)文件复制:将 add8 和 reg8 的代码复制到 acc 工程目录中,在综合时指明顶层 模块,一般文件名对应的模块就是顶层模块。 2)使用`include 语句:用`include 语句将低层文件 add8.v 和 reg8.v 包含到顶层 文件 acc 所在工程中,方式如同 C 语言中的#include。注意说明文件所在路径:假定 add8.v 和 reg8.v 都在 C:\altera\MyDesign\Experiments\Exp1_3TopTX 下,则可写出: `include “C:\altera\MyDesign\Experiments\Exp1_3TopTX\add8.v” `include “C:\altera\MyDesign\Experiments\Exp1_3TopTX\reg8.v” module acc(accout, cout, accin, cin, clk, clear); output [7:0] input [7:0] input cin, clk, wire [7:0] add8 accadd8(sum, cout, accout, accin, cin); reg8 accreg8(accout, sum, clk, clear); endmodule 使用`include 语句要注意两点①一个`include 语句只能指定一个被包含文件其文件 名应放在双引号内。②`include 语句可以出现在源程序的任何地方。被包含文件若与包 含文件不在同一个子目录下,必须指定其路径名。 对于上述模块调用,可以采用位置对应方式,即调用时模块端口列表中信号的排列 顺序与模块定义时端口列表中的信号排列顺序相同;也可以采用信号名对应方式,此时 不必按顺序排列。例如对 reg8 的调用: module reg8(qout, in, clk, clear); reg8 accreg8(accout, sum, clk, clear ); //reg8 的模块声明; //调用方式 1,位置对应;reg8 accreg8(. Qout (accout), . clear (clear), . in (sum), . clk( clk)); //调用方式 2, 信号名对应; reg8、reg8 是模块定义时的名字,accreg8、accreg8 是例化(调用)名,可以由设 计者定义。 本讲义的实验 1.2 Quartus II 文本方式设计――N 进制计数器中采用的 LS161 调 用方式就是采用了方式 2――信号名对应。 3)库管理方式:有的综合器提供了库管理功能,只需用户指明所调用的低层文件27 《EDA 技术与应用》研究性实践教学指导书(第二版)所在目录即可。 例如 Quartus II 软件, 若文件 add8.v 和 reg8.v 都在目录 C:\altera\MyDesign\Experiments\Exp1_3TopTX 下,只要在综合 acc.v 项目文件时选择主界面工具按钮 Settings, 弹出如图 1.3-3 所示的设置窗口, 选择 User Libraries (Current Project) , 在 Library name 框 右 侧 用 … 按 钮 找 到 add8.v 、 reg8.v 所 在 目 录 C:\altera\MyDesign\Experi ments\Exp1_3TopTX,双击文件名再按 ADD 按钮,add8.v 或 reg8.v 所在目录就会出现 在 Libraries 框中。这样在综合 acc.v 时会自动调用 add8.*和 reg8.*等文件。图 1.3-3用户库设置窗口(4)不同程序设计语言的混合设计 Quartus II 支持不同程序设计语言的混合设计。 下面使用 AHDL、 VHDL、 Verilog HDL 语言分别实现“与” 、 “或” 、 “或非”门逻辑功能。 //Verilog HDL 语言描述的与门: module b_and(and_a,and_b,and_f); input and_a; input and_b; output and_f; reg and_f; always @(and_a or and_b) begin if(and_a==1’b1&&and_b==1’b1) else and_f&=1’b0; end endmoduleand_f&=1’b1;28 《EDA 技术与应用》研究性实践教学指导书(第二版)//AHDL 语言描述的或门: subdesign b_or ( or_a,or_b : or_f : ) begin or_f=or_a or or_b; //VHDL 语言描述的或非门: use ieee.std_logic_1164. use ieee.std_logic_unsigned. entity b_nor is port( nor_a : in std_ nor_b : in std_ nor_f : out std_ ); end b_nor architecture behaver of b_nor is begin p1: process(nor_a, nor_b) begin if(nor_a=’0’ and nor_b=’0’) nor_f&=’1’; else nor_f&=’0’; end process p1; end
使用 AHDL、VHDL、Verilog HDL 语言分别实现的“与门” 、 “或门” 、 “或非门”可 以放在同一个工程项目中编译。 采用不同程序设计语言的混合工程设计为多种输入方式、多种语言和多人共同开发 工程提供了方便。 2.一位十进制计数器与 LED 数码显示电路设计 (1)实验目的 1)掌握 Quartus II 原理图设计和文本混合设计的设计方式。29then 《EDA 技术与应用》研究性实践教学指导书(第二版)2)熟悉多层次结构的电路设计方法。 3)熟练掌握计数器与 LED 数码管电路的波形仿真方法,能够正确设计输入波形以 检验电路功能。 (2)实验原理 1)1 位十进制计数器与 LED 数码管显示是设计简单工程项目最常用的电路,熟练 掌握其设计方法,为多位计数及数码显示电路设计打下基础。 2) 1 位十进制计数器的 Verilog HDL 语言描述方法可参考教材《数字系统设计与 Verilog HDL (第三版) 》 (王金明编著, 电子工业出版社)P106 [例 5.2]和 P180 [例 8.44] 以及《数字电子技术基础》 (阎石主编,高等教育出版社)有关章节。 3)1 位数码管显示电路可参考同一教材 P145 [例 7.12],显示原理可参阅《数字电 子技术基础》 (阎石主编,高等教育出版社)有关章节。 (3)实验步骤 1) 完成 1 位十进制计数器 counter10 的 Verilog HDL 语言文本设计, 包括程序输入、 编译、综合、适配、仿真,并将此计数器设置成一个硬件符号入库; 2)完成 1 位数码管显示电路 decoder7 的 Verilog HDL 语言文本设计,包括程序输 入、编译、综合、适配、仿真,并将此数码管显示电路设置成一个硬件符号入库; 3) 建立顶层图形文件 CountDispTop.bdf, 将 counter10 和 decoder7 符号调入图形 界面,增加输入、输出引脚后,保存。完成顶层图形文件编译、综合、适配、仿真。 4)练习顶层连接的不同方法。比如用文本方式、文件调用可用`include,语句。 实验芯片的型号可选 Altera 的 MAX7000S 系列的 EPM7128SLC84-15, FLEX10K 系 列的 EPF10K10LC84-3 FPGA,ACEX1K 系列的 EP1K30 FPGA 等。 (4)实验要求 1)画出系统硬件原理图,说明中各元件的功能。 2)正确设计仿真输入信号,启动系统仿真,记录仿真波形,分析仿真结果。 3)记录实验过程中出现的问题及解决办法。 (5)问题思考 1)LED 数码管分为共阴极和共阳极两种,应该根据实际采用的器件类型设计显示 程序, 示例程序中使用的 LED 数码管是共阴极还是共阳极?如果要改变数码管的公共极 性,程序应该如何修改? 2)如果要求显示小数点,程序该如何设计?30 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.4 状态机设计――序列检测器1.有限状态机设计的基本知识 有限状态机(Finite State Machine,FSM)是一类很重要的时序逻辑电路,尤其适 合设计数字系统的控制模块,是许多数字电路的核心部件。有限状态机的标准模型如图 1.4-1 所示,主要由三部分组成:一是次态组合逻辑电路,二是由状态触发器构成的现 态时序逻辑电路, 三是输出组合逻辑电路。 根据电路的输出信号是否与电路的输入有关, 有限状态机可以分为两种类型:一类是 Mealy(米里型)状态机,其输出信号不仅与电 路的当前状态有关,还与电路的输入有关;另一类是 Moore(摩尔型)状态机,其输出 状态仅与电路的当前状态有关,与电路的输入无关。此虚线只对 Mealy 状态机 机 组合逻辑 时序逻辑 触发器 构成的 现态时 序电路 组合逻辑输入次态组 合逻辑 电路CLK当前状态输出 逻辑 电路输出图 1.4-1 有限状态机的标准模型实用的状态机一般都应该设计为由唯一时钟边沿触发的同步时序电路, 由同一个时 钟信号触发,完成各个状态之间的转移。 (1)利用 Verilog HDL 设计状态机 对于有限状态机的设计,首先根据设计电路的功能画出其状态转移图,然后,就可 以用 Verilog HDL 语言来描述了。最常用的方法是用 always 语句、case 语句和 if_else 等语句对状态机的转换进行描述。 下面通过设计一个序列检测器的过程,来说明利用 Verilog HDL 语言描述有限状态 机的设计方法。 例 1.4-1 设计一个序列检测器电路。其功能是检测出串行输入数据 data 中的 3 位二进制序列 110(自左至右输入) ,当检测到该序列时,电路输出 out=1;没有检测 到该序列时,电路输出为 0。 要求: (1)给出电路的状态编码,画出状态转换图。 (2)用 Verilog HDL 语言对该电路进行描述。 设计步骤:31 《EDA 技术与应用》研究性实践教学指导书(第二版)1)给出电路的状态编码,画出状态转换图由设计要求可知, 要设计的电路有一个输入信号 data 和一个输出信号 out, 电路功 能是对输入信号进行检测。 因为该电路在连续收到信号 110 时,输出为 1,其它情况下输出为 0,因此要求该 电路能记忆收到的输入为 0、收到一个 1、连续收到两个 1 和连续收到 110 后的状态, 由此可见该电路应由四个状态, 用 S0 表示输入为 0 时的电路状态 (或称初始状态) , S1、 S2、S3 分别表示收到一个 1,连续收到两个 1 和连续收到 110 的状态。 先假设电路处于状态 S0,在此状态下,电路可能输入有 data=0 和 data=1 两种情 况。若 data=0,则输出 out=0,且电路就保持在状态 S0 不变;若 data=1,则 out=0, 但电路就转向状态 S1,表示电路收到一个 1。 现在以 S1 为现态,若这时输入为 data=0,则输出为 out=0,电路应回到 S0,重 新开始检测;若 data=1,则 out=0,且应进入 S2,表示已连续收到两个 1。 又以 S2 为现态,若输入 data=0 则输出 out=1,电路应进入 S3 状态,表示已连续 收到了 110;若输入 data=1,则 out=0,且电路应保持在状态 S2 不变。 再以 S3 为现态,若输入 data=0,则输出 out=0,电路应回到状态 S0,重新开始 检测;若 data=1,则 out=0,电路应转向状态 S1,表示又重新收到一个 1。根据上述 分析,可以画出原始状态图入图 4.1-2(a)所示。图中 0/0、1/0、0/1 表示的是 I/O 状 态,即 0/0 表示输入为 0,输出为 0;1/0 表示输入为 1,输出为 0;0/1 表示输入为 0, 输出为 1 等。0/0 1/0 S0 0/0 0/0 S3 1/0 0/1 1/0 0/0 S2 2 1/0 11 S10/0 1/0 00 0/0 1/0 0/1 10 1/0 01(a)图 1.4-2 序列检测的原始状态图(b)该电路有四个状态,可以用两位二进制代码组合( 00,01,10,11)表示,即令 S0=00,S1=01,S2=10,S3=11。于是得到编码形式的状态图如图 4.1-2(b)所示。 2) 用 Verilog HDL 语言对该电路进行描述 在 Verilog HDL 中,可以用一个 always 块描述 FSM 电路,也可以根据时序电路的 组成框图由两个 always 块描述 FSM:①在时钟的有效沿到来之前,根据电路当前所处 的状态和电路输入所确定的输出和电路的次态可以用一个组合的 always 块进行描述;32 《EDA 技术与应用》研究性实践教学指导书(第二版)②在时钟的有效沿到来时,电路会由当前的状态转换到次态,这种转换可以用一个时序 的 always 块进行描述。 还可以对第二种描述方法进一步细化, 由三个 always 块描述 FSM 电路: ①电路的输出用一个组合的 always 块描述 ②电路的次态用另一个组合的 always 块描述 ③电路状态的转换用一个时序的 always 块进行描述。 一般来说,在仿真一个 always 块描述的 FSM 电路时,由于电路输入信号只需要在 时钟的有效沿到来时才会进行检测,所以其仿真的效率会比其他两种描述方式高一些。 但是这种描述方式所写的代码修改和调试起来可能会困难一些, 而且由于电路的输出信 号放在 always 块内部,使得输出信号与时钟信号有关,所以在综合时,电路的输出不 是组合电路,而是经过触发器之后才会将信号输出。而对于 Mealy 型 FSM 电路来说, 由于电路的输出除了与电路的现态有关外,还与电路的输入信号有关,如果输入信号的 变化不能及时被检测,而要等待时钟有效沿到来时才进行检测的话,则电路的输出很可 能是错误的。所以在设计 FSM 电路时,建议采用两个 always 块或者三个 always 块 的方法进行描述。 下面结合序列检测器电路的设计,给出这三种描述方式。/*由于该电路属于 Mealy 型,输出信号不能写在时序 always 块内,所以将电路的输出信号专 门用一个 always 块进行描述*///-----------------pulse-check1.v-----------脉冲检测 1------module pulse-check1(data, clk, nclr, out); input data, clk, reg[2:0] //The state labels and their assignments 状态表及状态值 parameter[1:0] s0=0, s1=1, s2=2, s3=3; always @(posedge clk) // 时序逻辑块 begin if(!nclr) state=s0; else case(state) s0:state &=(data==1) ?s1:s0; s1:state &=(data==1) ?s2:s0; s2:state &=(data==1) ?s2:s3; s3:state &=(data==1) ?s1:s0; endcase end33 《EDA 技术与应用》研究性实践教学指导书(第二版)//The combinational logic block for outputs always @(state or data) begin case(state) s0:out=0; s1:out=0; s2: if (data==1) out=0; else out=1; s3:out=0; endcase end endmodule/*用两个 always 块描述电路*/输出组合逻辑块//-----------------pulse-check2.v----------------------脉冲检测 2------module pulse-check2(data, clk, nclr, out); input data,clk, reg[2:0] current_state, next_ //The state labels and their assignments parameter[1:0] s0=0, s1=1, s2=2, s3=3; always @(posedge clk) //The state register begin if (!nclr) current_state&=s0; else current_state&=next_ end //The combinational logic, assign the next_state always @ (current_state or data) begin case (current_state) s0:begin out=0; next_state=(data==1) ? s1:s0; end s1:begin out=0; next_state=(data==1) ? s2:s0; end s2: if(data==1) begin out=0; next_state=s2; end else34 《EDA 技术与应用》研究性实践教学指导书(第二版)begin out=1; next_state=s3; end s3:begin out=0;next_state=(data==1) ? s1:s0; end endcase end endmodule/*用三个 always 块描述电路*///-----------------pulse-check3.v-------------------脉冲检测 3------module pulse-check3(data,clk,nclr,out); input data, clk, reg[2:0] current_state, next_ //The state labels and their assignments parameter[1:0] s0=0, s1=1, s2=2, s3=3; always @(posedge clk) //The state register begin if(! nclr) current_state&=s0; else current_state&=next_ end //The combinational logic, assign the next_state always @(current_state or data) begin case (current_state) s0: next_state=(data= =1)? s1:s0; s1: next_state=(data= =1)? s2:s0; s2: if (data= =1) next_state=s2; s3: next_state=(data= =1)? s1:s0; endcase end //The combinational logic block for outputs always @ (current_state or data) begin case(current_state) s0:out=0; s1:out=0;35else next_state=s3; 《EDA 技术与应用》研究性实践教学指导书(第二版)s2: if(data= =1) out=0; else out=1; s3:out=0; endcase end endmodule 例 1.4-2 用状态图法设计基本时序逻辑电路――六进制计数器 module count6(QOUT,CO,CLR,CLK); output[2:0] QOUT; output CO; input CLR,CLK; reg[2:0] QOUT; wire CO; reg[2:0] STATE, NEXT_STATE; parameter STATE0=3’b000, STATE1=3’b001, STATE2=3’b010, STATE3=3’b011, STATE4=3’b100, STATE5=3’b101, STATE6=3’b110, STATE7=3’b111; always @(posedge CLK or posedge CLR) begin if (CLR) STATE&=STATE0; else STATE&=NEXT_STATE; end always @(STATE) begin case(STATE) STATE0: STATE1: STATE2: STATE3: STATE4: begin begin begin begin begin // 定义状态转移 NEXT_STATE&=STATE1;end NEXT_STATE&=STATE2;end NEXT_STATE&=STATE3;end NEXT_STATE&=STATE4;end NEXT_STATE&=STATE5;end // 定义起始状态 // 用 parameter 定义状态STATE5: begin NEXT_STATE&=STATE0;end STATE6: begin NEXT_STATE&=STATE0;end STATE7: begin NEXT_STATE&=STATE0;end endcase end36 《EDA 技术与应用》研究性实践教学指导书(第二版)always @(STATE) begin case(STATE) STATE0:QOUT&=3’b000; STATE1:QOUT&=3’b001; STATE2:QOUT&=3’b010; STATE3:QOUT&=3’b011; STATE4:QOUT&=3’b100; STATE5:QOUT&=3’b101; STATE6:QOUT&=3’b110; STATE7:QOUT&=3’b111; endcase end assign CO=(QOUT= =3’b101)? 1:0; endmodule 3)状态机设计要点 ①起始状态的选择: 起始状态是指系统复位之后所处的状态, 可以选择 state0 或其 他状态,应以简洁高效为原则,合理进行选择。 ②状态编码:有二进制编码、格雷码(循环码) 、一热码等。循环码因为对相同状 态数编码所用代码位数与二进制编码相同,但是相邻状态变化时仅有 1 位代码变化,避 免了二进制编码引起的毛刺和一些暂态的可能。对于 FPGA 芯片,建议采用一热码。 ③状态编码的定义:在 Verilog HDL 语言中,有两种方式可用于定义状态编码,分 别是 parameter 和`define,常用的是前一种方式,如例 1.4-1 和 1.4-2。 ④状态转换的描述:一般使用 case、casez、casex 语句描述,在 case 语句最后, 不要忘了加上 default 分支语句,以避免锁存器产生。 2.序列检测器设计 设计一个序列检测器电路。功能是检测出串行输入数据 data 中的 4 位二进制序列 0101(自左至右输入) ,当检测到该序列时,输出 out 为 1;没有检测到该序列时,输 出为 0。 (1)实验目的: 1)学习 Quartus II 下状态机设计方法。 2)熟悉两种状态机结构、状态机编码方法和应用状态机设计电路的方法。 3)熟练掌握序列检测器的波形仿真方法,能够正确设计输入波形检验电路功能。 (2)实验原理:参阅本实验第一部分。分别用 J K 触发器和门电路、Verilog HDL37// 定义状态输出 《EDA 技术与应用》研究性实践教学指导书(第二版)语言设计序列检测器电路,并写出测试激励文件。J K 触发器的 Verilog HDL 语言描述方 法可参考教材《数字系统设计与 Verilog HDL(第三版) 》 (王金明编著,电子工业出版 社)P178 [例 8.38]和《数字电子技术基础》 (阎石主编,高等教育出版社)有关章节。 测试激励文件的编写可参考教材 P256 “11.4.1 测试平台”和 P262[例 11.21]。 (3)实验步骤 1)用 J K 触发器和门电路设计检测器电路,包括图形元件输入、编译、综合、适配、 仿真,并将此监测器电路设置成一个硬件符号入库; 2)用 Verilog HDL 语言设计检测器电路,并写出测试激励文件,包括程序输入、编 译、综合、适配、仿真,并将此电路设置成一个硬件符号入库; 3)设计输入脉冲序列,应考虑序列重叠并尽可能设计输入多种不同脉冲的组合。 实验芯片的型号可选 Altera 的 MAX7000S 系列的 EPM7128SLC84-15, FLEX10K 系 列的 EPF10K10LC84-3 FPGA,ACEX1K 系列的 EP1K30 FPGA 等。 (4)实验要求 1) 给出电路的状态编码, 画出状态转换图。 注意考虑序列重叠的可能性, 如 010101, 相当于出现两个 0101 序列。 2)正确设计仿真输入信号,启动系统仿真,记录仿真波形,分析仿真结果。 3)记录实验过程中出现的问题及解决办法。 (5)问题思考 1)如果需要统计输入序列中出现 0101 组合的次数,应该如何设计、修改程序? 2)修改程序,自行设计可以检测 4Bits 输入序列的 Verilog HDL 语言程序。 3)状态机编码常使用格雷码(循环码) ,即相邻两个代码之间仅有 1 位发生变化的 一种编码。采用格雷码有何优点?附表 1.4-1 所示是 4 位格雷码真值表,如何用数字电 路或用程序产生? 附表 1.4-1 4 位格雷码真值表十进制数 0 1 2 3 4 5 6 7 循环码 11 11
十进制数 8 9 10 11 12 13 14 15 循环码 11 11 38 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.5 时序逻辑电路设计――多位数码管动态扫描显示1. 多位数码管动态扫描显示原理 在译码器设计时,常用发光二极管的状态验证设计是否满足要求。这种方式是很直 观的,但在计数器设计时,这样的验证方式就显得很不直观,尤其当计数器的位数增加 时(如百进制计数) ,太多的发光管将使结果的读出非常困难。此时应采用数码管显示, 但是当用七段数码显示器显示的位数较多时(如显示 8 位 BCD 码十进制数) ,为了节省 硬件开支, 常用动态显示方法, 即对各 LED 数码管循环扫描, 分时使用显示器驱动电路。 (1)七段数码管的显示驱动方式――BCD 码驱动和直接驱动。 1)BCD 码驱动方式 这种驱动方式由 7448 BCD-七段显示驱动器给出数码管所需的驱动电平,硬件连接 关系如图 1.5-1 所示,当 7448 的输入端 D、C、B、A 为 4 位二进制数时,数码管根据 表 1.5-1 的关系显示相应字形。D C B A图 1.5 -17448 显示驱动器的 BCD-七段显示驱动电路表 1.5-1 BCD-七段显示译码器的真值表输 D 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 C 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 入 B 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 A 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Ya 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 Yb 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 输 Yc 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 39 Yd 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 出 Ye 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 Yf 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 Yg 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 字 0 1 2 3 4 5 6 7 8 9 A B C D E F 形 《EDA 技术与应用》研究性实践教学指导书(第二版)2)直接驱动方式 这种驱动方式直接对数码管相应的字段给出驱动电平,以显示字形。其真值表如表 1.5-2 所示。 表 1.5-2 直接驱动显示真值表 实际 PLD 验证结果时,两种驱动方式都 可以使用。但是,当采用直接驱动方式时, 驱动一个数码管需要七个电平信号,如果系 统需要显示结果的数码管较多,应考虑数字 系统输出信号占用 PLD 芯片管脚的问题,因 为 PLD 芯 片 的 管 脚 总 数 是 有 限 的 , 例 如 F10K10, 它的管脚总数是 84 个, 其中还有一 些特定功能的管脚不能给用户使用,能使用 的管脚不到 60 个,所以直接驱动时,必须设 法减少占用 PLD 芯片的管脚的数量。 解决的方法是采用动态扫描显示。 (2)动态扫描显示 动态扫描的 CPLD/FPGA 实现可以采用图 1.5-2 的结构形式, 将所有数码管 (比如 8 个) 的相同字段并联,由 CPLD/FPGA 芯片的输出 信号 a, b, c, d, e, f, g 直接驱动相应字段,由 sel0,sel1,sel2 三位计数信号经 3-8 译 码器 74LS138(图 1.5-2 中未画出)或软件编程产生片选信号 MS1,MS2,…,MS8 循 环选中 8 个数码管。数码管显示的字形由表 1.5-2 决定,可以用一个十进制或十六进制 计数器产生 0―9 或 0―A…F 的计数信号。a 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 b 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 输 入 c d e 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 f 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 g 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 输出 字形 0 1 2 3 4 5 6 7 8 9 A B C D E FQA QBQC图 1.5-2动态扫描的 CPLD/FPGA 硬件结构CPLD/FPGA 芯片内部程序模块设计可以采用原理图和文本混合设计,由两片40 《EDA 技术与应用》研究性实践教学指导书(第二版)74161、一个七段显示译码电路 led 和一个 3-8 译码器 decoder 构成,见图 1.5-3。图 1.5-3动态扫描的 CPLD/FPGA 程序模块结构显示字符 0…9,A、B、C、D、E、F 的七段显示译码电路 led 程序如下。 module led(a,b,c,d,e,f,g,D); output a, b, c, d, e, f, input [3:0] D; reg a,b,c,d,e,f,g; always@(D) begin case(D) 4'd0: {a, b, c, d, e, f, g}=7'b'd1: {a, b, c, d, e, f, g}=7'b'd2: 4'd3: 4'd4: 4'd5: 4'd6: {a, {a, {a, {a, {a, b, b, b, b, b, c, c, c, c, c, d, e, d, e, d, e, d, e, d, e, f, f, f, f, f, g}=7'b1101101; g}=7'b1111001; g}=7'b0110011; g}=7'b1011011; g}=7'b1011111;4'd7: {a, b, c, d, e, f, g}=7'b'd8: {a, b, c, d, e, f, g}=7'b'd9: {a, b, c, d, e, f, g}=7'b'hA: {a, b, c, d, e, f, g}=7'b1110111;41 《EDA 技术与应用》研究性实践教学指导书(第二版)4'hB: {a, b, c, d, e, f, g}=7'b'hC: {a, b, c, d, e, f, g}=7'b'hD: {a, b, c, d, e, f, g}=7'b'hE: {a, b, c, d, e, f, g}=7'b'hF: {a, b, c, d, e, f, g}=7'b1000111; default: {a, b, c, d, e, f, g}=7'b1111110; endcase end endmodule 8 位动态扫描和译码也可以全部用 Verilog HDL 程序设计。与图 1.5-2 比较,该程序 包含计数和译码,并用两条语句代替了两个计数器 74161,其中包括 8 位数码管选择。 module saomiao(reset,clk,clk1,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g); input clk,reset,clk1; reg [3:0] in1; output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g; reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g; reg [3:0] reg [2:0] always@(posedge clk) begin {ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b; flag=flag+1; // 对 clk 计数,以得到 8 个片选信号 case (flag) 0:begin temp=in1;ms1=1;end 1:begin temp=in1;ms2=1;end 2:begin temp=in1;ms3=1;end 3:begin temp=in1;ms4=1;end 4:begin temp=in1;ms5=1;end 5:begin temp=in1;ms6=1;end 6:begin temp=in1;ms7=1;end 7:begin temp=in1;ms8=1;end default: begin temp=in1;ms1=1;end endcase case(temp) 4'd0:{a,b,c,d,e,f,g}=7'b'd1:{a,b,c,d,e,f,g}=7'b'd2:{a,b,c,d,e,f,g}=7'b'd3:{a,b,c,d,e,f,g}=7'b1111001;42//产生片选信号 ms1,ms2,…ms8// 将计数信号 temp 译码成 0...9,A...F 《EDA 技术与应用》研究性实践教学指导书(第二版)4'd4:{a,b,c,d,e,f,g}=7'b'd5:{a,b,c,d,e,f,g}=7'b'd6:{a,b,c,d,e,f,g}=7'b'd7:{a,b,c,d,e,f,g}=7'b'd8:{a,b,c,d,e,f,g}=7'b'd9:{a,b,c,d,e,f,g}=7'b'hA:{a,b,c,d,e,f,g}=7'b'hB:{a,b,c,d,e,f,g}=7'b'hC:{a,b,c,d,e,f,g}=7'b'hD:{a,b,c,d,e,f,g}=7'b'hE:{a,b,c,d,e,f,g}=7'b'hF:{a,b,c,d,e,f,g}=7'b1000111; default:{a,b,c,d,e,f,g}=7'b1111110; endcase end always@(posedge clk1) begin if(!reset) in1=4'b0000; else in1=in1+1; // 对 clk1 计数,产生顺序递增计数信号 0000、 0001……1111,送字符显示译码 end endmodule 时钟 clk 的频率决定动态显示循环扫描频率,利用人眼的视觉惯性,临界闪烁频率 应不小于 50Hz,对于 8 位动态扫描显示,应有 clk=400 Hz。字符产生和显示译码的输 入时钟可选择 clk1=1 Hz 或根据需要选择其他频率值。 上述 Verilog HDL 程序生成模块符号见图 1.5-4。 (3)多位数码管动态扫描显示举例 例 1.5-1 设计一个电路,使两个数码管显示 1?12 的十二进制计数,两个数码管显 示 0?59 的六十进制计数。 问题是要把两个计数器输出的个位和十位数分别显示在不同的数码管上,用 Selb 模块实现。 原理是:in1,in2……in8 为八个数码管的 BCD 码输入端数据,sel[2..0]=000 时, 左边数码管(ms1)选中,in1 送 ms1; sel[2..0]=001 时,第二数码管(ms2)选中,in1 送 ms2;……….sel[2..0]=111 时, 第八数码管(ms8)选中,in1 送 ms8; 八组数据可以不全部都有,如此例中,十二进制数的低四位送 in1,高四位送 in2, 六十进制数的低四位送 in3,高四位送 in4,其余数据端为空。43图 1.5-4动态扫描程序模块 《EDA 技术与应用》研究性实践教学指导书(第二版)例 1.5-1 的电路模块结构如图 1.5-5 所示,动态扫描和字符译码程序 selb 如下,其 中 in1,in2,in3,in4 来自 60 进制和 12 进制计数器的输出。sel[2] sel[1] sel[0]图 1.5-5例 1.5-1 电路模块结构module selb(in1,in2,in3,in4,in5,in6,in7,in8,clk,flag,a,b,c,d,e,f,g); input [3:0] in1,in2,in3,in4,in5,in6,in7,in8; output a,b,c,d,e,f,g; output [2:0] reg a,b,c,d,e,f,g; reg [3:0] reg [2:0]always@(posedge clk) begin flag=flag+1; case (flag) 0:begin temp=in1;end 1:begin temp=in2;end 2:begin temp=in3;end 3:begin temp=in4;end 4:begin temp=in5;end 5:begin temp=in6;end 6:begin temp=in7;end 7:begin temp=in8;end default: begin temp=in1; end44 《EDA 技术与应用》研究性实践教学指导书(第二版)endcase case(temp) 4'd0:{a, b, c, d, e, f, g}=7'b'd1: {a, b, c, d, e, f, g}=7'b'd2: {a, b, c, d, e, f, g}=7'b'd3: {a, b, c, d, e, f, g}=7'b'd4: {a, b, c, d, e, f, g}=7'b'd5: {a, b, c, d, e, f, g}=7'b'd6: {a, b, c, d, e, f, g}=7'b'd7: {a, b, c, d, e, f, g}=7'b'd8: {a, b, c, d, e, f, g}=7'b'd9: {a, b, c, d, e, f, g}=7'b1111011; /* 显示 A、B、C、D、E、F,对于十进制显示以下 6 行可以去掉 4'hA: {a, b, c, d, e, f, g}=7'b'hB: {a, b, c, d, e, f, g}=7'b'hC: {a, b, c, d, e, f, g}=7'b'hD: {a, b, c, d, e, f, g}=7'b'hE: {a, b, c, d, e, f, g}=7'b'hF: {a, b, c, d, e, f, g}=7'b1000111; */ default: {a, b, c, d, e, f, g}=7' endcase end endmodule 2. 4 位数码管动态显示电路设计 (1)实验目的 1)学习 Quartus II 下多位数码管动态扫描显示电路的不同设计方法。 2)熟练掌握原理图和文本输入法两种设计方法及其模块结构。 3)熟练掌握多位数码管动态扫描显示电路的波形仿真方法,能够正确设计输入波 形检验电路功能。 (2) 实验原理: 设计一个 4 位数码管动态扫描显示电路, 其中两个数码管显示 1?12 的十二进制计数,两个数码管显示 0?59 的六十进制计数,为数字钟设计做好准备。45 《EDA 技术与应用》研究性实践教学指导书(第二版)(3)实验步骤 1)用 Verilog HDL 语言设计 12 进制计数器 jsq12 和 60 进制计数器 jsq60,编译仿 真之后创建成元件符号后入库保存。 2) 修改动态扫描程序 selb: 增加模块输出信号 sel[2..0] (即 3-8 译码器输入信号) , 编译、仿真通过之后创建成元件符号并保存。 3)建立顶层图形文件 ScanTop,调入 jsq60、jsq12、selb 三个元件符号,定义 I/O 端口之后,连线、编译、仿真,得出最后结果,验证设计的正确性。 实验芯片的型号可选 Altera 的 MAX7000S 系列的 EPM7128SLC84-15, FLEX10K 系 列的 EPF10K10LC84-3 FPGA,ACEX1K 系列的 EP1K30 FPGA 等。 (4)实验要求 1)正确设计仿真输入信号,启动系统仿真,记录仿真波形,分析仿真结果。 2)记录实验过程中出现的问题及解决办法。 (5)问题思考 1)如果采用两个计数器 74161 分别实现片选信号 1…8 和 0…9 的计数输出作为七 段数码管显示字符译码信号,应该如何设计、修改程序? 计数器 74161 还可以用文本方式描述,参见本讲义“实验 1.2 Quartus II 的文本输 入法” 。 2)如果要求 selb 程序内包含片选信号 ms1,ms2,ms3,ms4,ms5,ms6,ms7, ms8 输出,如何修改程序?请参阅本节的 saomiao 模块程序设计。 3)若采用文本方法建立顶层图形文件ScanTop,如何连接jsq60、jsq12、selb三个 元件符号、定义I/O端口?46 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.6 流水线技术及应用――加法器与流水线技术加法、乘法作为基本运算,大量应用在数字信号处理和数字通信的各种算法中。由 于加法器、乘法器使用频繁,所以其速度往往影响着整个系统的运行速度。快速加法器 和乘法器的设计,可以提高整个系统的运行速度。根据数字电子技术相关知识,加法器 可以设计为级连、并行、超前进位、流水线等结构形式。 级连加法器将本级的进位输出作为下一级的进位输入,具有结构简单的特点,但是 N 位级连加法运算的延时是 1 位全加器的 N 倍,延时主要是进位信号级连造成的。在高 性能的设计中,不宜采用级连相加结构。 并行加法器的特点是运算速度快,用 Verilog HDL 描述语言容易实现,但是耗用资 源多,尤其是当加法运算的位数较宽时,其耗用的资源将会比较大。 超前进位加法器是提高运算速度的一种解决方案,它采用超前进位链,各个进位彼 此独立产生,去除了级连传播,有效地减少了进位的延时。 并行加法器和超前进位加法器虽然尽量减少了延时,但是不可避免地有多级门延时 和布线延时,随着位数增加,延时还会增加。为了设计更快的加法器,可以采用流水线 设计(Pipeline Design)技术,以提高系统的运行频率。 1. 流水线技术原理及其应用 流水线设计(Pipeline Design)技术是经常用于提高设计系统运行速度的一种有效 方法。为了保障数据的快速传输,必须使系统运行在尽可能高的频率上,但是某些复杂 逻辑功能的完成需要较长的延时,就会使系统很难运行在较高的频率上。此时可以使用 流水线技术,即在长延时的逻辑功能块中插入触发器用于暂存中间结果,使复杂的逻辑 操作分步完成,减少每个部分的延时,从而提高系统的运行频率。流水线设计的代价是 寄存器资源开销增加。 流水线设计技术可以有效提高系统的运行频率,对于 FPGA 器件尤其如此。FPGA 的逻辑单元中存在大量的 4-5 变量的查找表(LUT:Look Up Table)以及大量触发器, 因此在 FPGA 设计中采用流水线技术可以有效地提高系统速度。 下面以 8 位全加器设计为例,对比流水线设计和非流水线设计的性能。 例1.6-1 非流水线方式8位全加器 module adder8(cout,sum,ina,inb,cin,clk); output[7:0] input[7:0] ina, input cin, reg[7:0] tempa,tempb,47 《EDA 技术与应用》研究性实践教学指导书(第二版) always @(posedge clk) begin tempa= tempb= tempc= end //输入数据锁存 always @(posedge clk) begin {cout,sum}=tempa+tempb+ end endmodule 图 1.6-1 是非流水线方式 8 位全加器的 RTL 综合视图。由图可见全加器的输入 ina、 inb、cin 和输出 sum、cout 都带有锁存器。它包含两个加法器 Add0 和 Add1,Add0 先 将两个经锁存的 8 位输入相加并考虑可能产生进位,然后将其输出(和与进位)与低位 的进位输入一起送到 Add1 相加,最后经由锁存器输出两数之和及进位。 例1.6-2 两级流水线8位全加器 module pipelineadder8(cout,sum,ina,inb,cin,clk); output[7:0] input[7:0] ina, input cin, reg[7:0] reg[3:0] tempa,tempb, always @(posedge clk) begin {firstc, firsts}=ina[3:0]+inb[3:0]+ tempa=ina[7:4]; tempb=inb[7:4]; end always @(posedge clk) begin {cout,sum[7:4]}=tempa+tempb+ sum[3:0]= end endmodule 图1.6-2是流水线方式8位全加器的RTL综合视图。由图可见,全加器不仅输入、输 出都带有锁存器,中间还有两个锁存器firstc、firsts。它包含四个加法器Add0、Add1、 Add2、Add3。两个输入数据低4位锁存的同时在Add0进行相加,然后Add1对低4位和进 位输入求和、Add2对低4位锁存数据求和,Add1的输出经锁存后与Add2输出在Add3求 和,最后由锁存器输出8位相加之和与进位。两级流水线加法器显然耗用资源较多。48 《EDA 技术与应用》研究性实践教学指导书(第二版)49图 1.6-1 非流水线方式 8 位全加器 RTL 综合视图 《EDA 技术与应用》研究性实践教学指导书(第二版)50图 1.6-2 两级流水线方式 8 位全加器 RTL 综合视图 《EDA 技术与应用》研究性实践教学指导书(第二版)2. 流水线设计技术及性能分析 题目:流水线设计技术及应用 (1)实验目的 1)掌握流水线设计技术。 2)对流水线设计和非流水线设计进行比较。 (2)实验原理 在较为复杂的电路设计中,尤其是在高速通信系统的设计中,如何提高系统速度是 一个非常重要的问题,流水线设计技术是一种有效地提高系统运行速度的方法。 为了保证数据吞吐率,电路设计中的一个主要问题就是要维持系统时钟的速度出于 或高于某一频率。例如,如果整个系统是一个全同步系统,同时又必须运行在 25MHz 频率上,那么从任何寄存器的输出到其目标寄存器的输入路径间的最大延时必须小于 40ns。如果通过某些复杂逻辑的延时路径比较长,系统时钟将很难维持。这时,就必须 在组合逻辑间插入触发器,使复杂的组合逻辑块形成流水线。虽然流水线会增加器件资 源的开销,但是可以有效降低寄存器间的传播延时,保证系统维持高的系统时钟速度。 (3)实验步骤 1)最高工作频率比较 将上述两个程序分别适配到 EPM7128SLC84-5 (CPLD) 和 EPF10K10LC84-3 (FPGA) 器件中,比较电路最高工作频率。 在 Quartus II 主界面下,选 Processing→Timing Analizer Tool,启动定时分析工具, 可以查看电路最高工作频率、延时等信息。 2)耗用资源情况比较 查看报告文件,比较两个设计资源开销情况。在系统编译结束之后,打开相关报告 文件就可以查看耗用资源情况。资源耗用情况报告的路径是: Compilation Report→Fitter→Resource Section→Resource Usage Summary (4)实验要求 1)查看系统综合后的 RTL 图,分析两种加法器的特点。 2)正确设计仿真输入信号,启动系统仿真,记录仿真波形,分析仿真结果。 3)记录实验过程中出现的问题及解决办法。 (5)问题思考 1)如果采用超前进位方式设计 8 位加法器,如何用 Verilog HDL 语言描述?(可以 参考教材) 。采用并行进位方式又该如何描述呢? 2)采用不同器件适配非流水线、流水线、超前进位或并行进位 8 位加法器,分别 比较它们的最高工作频率、资源开销情况,写出分析报告。51 《EDA 技术与应用》研究性实践教学指导书(第二版)实验 1.7 键盘接口与应用设计――数字密码锁1.数字密码锁设计举例 设计一个数字密码锁,在锁开的状态下输入密码,设置密码共 4 位,用数据开关 K1--K10 分别代表数字 1,2,……9,0,输入的密码用七段数码管显示。具体要求如下。 (1)设计要求 1)密码长度:十进制数 4 位。 2)密码设置与删除显示功能:用数码管显示,最后输入的 1 位密码显示在最右边。 每输入 1 位数, 密码显示自动左移 1 位; 可删除输入的数字, 删除的是最后输入的数字, 从最右边开始每删除 1 位,密码数字显示自动右移 1 位,并在左边空位上补“0” 。 3)万能密码设置:供主人忘记密码时使用。 4)状态提示:用 1 位 LED 状态表示锁的开闭状态。 (2)设计提示 此系统可以分为密码输入删除控制模块、寄存模块、比较模块、扫描显示模块几部 分。数字密码锁系统框图如图 2.2-1 所示。 密码输入与删除控制模块设计考虑: 1)编码器:对数据开关 K1---K10 的电平信号,分别代表数字 1― 9,0;采用一热 码方式编码。 2)设置与删除密码操作及显示按设计要求处理。 3)信号设置 set:密码确认信号――当 4 位密码输入完成后,按 set 键则密码送锁存器锁存, 比较模块得数据 A、密码显示电路清零。 back:数字删除按键――每按一次删除最后输入的数字,密码显示右移 1 位,同 时左边空位补“0” ,详见表 2.2-1 密码输入/删除控制电路状态表。 lock:密码锁状态显示信号――lock=0(LED 灯灭)表示锁未开、lock=1(LED 灯 亮)锁已开。 close:关锁信号――当密码送寄存器锁存后,按下 close,则密码锁 lock=0,锁 被锁上。 check:

我要回帖

更多关于 quartus实现小游戏 的文章

 

随机推荐