数字系统设计与VHDL 实验指导书2014 - 图文

更新时间:2023-12-08 00:18:01 阅读量: 教育文库 文档下载

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

实验一 QuartusⅡ9.0快速入门

一、实验目的

通过实验让学生了解,熟悉和掌握QuartusⅡ9.0开发软件的使用方法及Verilog HDL的编程方法。学习简单时序电路的设计和硬件测试。

二、实验原理

在LED1~LED8引脚上周期性的输出流水数据,如原来输出的数据是11111100 则表示点亮LED1,LED2,流水一次后,输出地数据应该为11111000,而此时应该点亮LED1~LED3三个发光二极管,就可以实现LED流水灯。为了观察方便,流水速率最好在2Hz左右,在MagicSOPC核芯板上有一数字信号源,可选择CLOCK3的2HZ时钟信号源源作为流水灯的时钟源。

三、主要实验设备

计算机和MagicSOPC实验箱。

四、实验内容

本实验的内容是建立可用于控制LED流水灯的简单硬件电路,要求在MagicSOPC试验箱上实现LED1~LED8发光二极管流水灯显示。实验步骤如下:

1.启动Quartus II建立一个空白工程,然后命名为led_water.qpf。

2.新建Verilog HDL 源程序文件ledwater.v,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

程序清单:

module ledwater(led,clk); //模块名ledwater output[7:0] led; //定义LED输出口 input clk; //定义时钟输出口 reg[8:0] led_r; //定义输出寄存器

assign led = led_r[7:0]; //寄存器输出

always @(posedge clk) //在时钟上升沿触发进程 begin

led_r <= led_r <<1; //是,则输出左移一位 if(led_r == 9'd0) //循环完毕吗?

led_r <= 9'b111111111; //是,则重新赋初值 end

endmodule

3.从设计文件创建模块,由ledwater.v生成名为ledwater.bsf的模块符号文件。 4.新建图形设计文件命名为led_water.bdf并保存。

在空白处双击鼠标左键,将symbol对话框中libraries:project下的ledwater模块放在图形文件led_water.bdf中,加入输入、输出引脚,

双击各引脚符号,进行引脚命名。将与ledwater模块led[7..0]连接的引脚命名为led[7..0],与clk连接的引脚命名为clock3。完整的顶层模块原理图如图1-1所示。

ledwaterclock3INPUTVCCclkled[7..0]OUTPUTled[7..0]inst

图1-1 流水灯顶层模块

5.选择目标芯片并对相应的引脚进行锁定,在这里所选择的器件为Altera公司的CycloneII系列的EP2C35F672C8芯片,引脚锁定方法如下表所列。将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)设置方法。

信号 Led[0] Led[1] Led[2]

引脚 R5 P9 P7 信号 Led[3] Led[4] Led[5] 引脚 P6 P3 R8 信号 Led[6] Led[7] Clock3 引脚 R6 T3 AE14

6.将led_water.bdf设置为顶层实体。对该工程进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

7.最后确保数字源(B4区域)的JP11的短路帽是处于ON位置,JP6中CLOCK3的短路帽处于2Hz位置:拿出Z-Blaster下载电缆,并将此电缆的两端分别接到到PC机的USB接口和实验箱主板模块上的JTAG下载口(提示:下载线有小箭头指示的为第1脚,与JTAG接口的J1脚相连),打开电源,执行下载命令,把程序下载到FPGA器件中,此时,即可在MagicSOPC试验箱上看到流水灯。

8.更改JP6排针CLOCK3处短路帽的位置。观察流水灯的变化。

注意: 选择好器件后,先编译顶层文件,后分配引脚,是比较有利的,因为编译之后,Quartus II软件会自动将所有输入.输出引脚记录下来,不需要重新输入各个引脚的的信号名。分配引脚也可以通过编辑*qsf文件(该文件可以用记事本打开)实现。

五、实验总结

1.文本输入的文件存盘时,文件名与模块名一致,即ledwater.v。 2.项目名称与顶层文件名一样,即led_water.qpf。

3.USB接口和实验箱主板模块上的JTAG下载口(提示:下载线有小箭头指示的为第1脚,与JTAG接口的J1脚相连)。

4.驱动的安装:在初次使用USB-Blaster编程器前,需首先安装USB驱动程序。 将USB-Blaster编程器一端插入PC机的USB口,这时会弹出一个USB驱动程序对话框,根据对话框的引导,选择用户自己搜索驱动程序,假定QuartusⅡ安装在D盘,则驱动程序的路径为D:\\altera\\90sp2\\quartus\\divers\%usb-blaster。

安装完毕后,打开QuartusⅡ,选择编程器,单击左上角的Hardware Setup按钮,在弹出的窗口中选择USB-Blaster项,双击之,此后就能使用。

六、预习及思考

1.思考:如何实现左流水或其他花样流水呢?自己动手试试。

2.reg数据类型:Verilog HDL有两大类数据类型,线网类型和寄存器类型,形式如下: reg[msb:lsb] reg1,reg2....regN;

msb和lsb定义了范围,并且均为常数值表达式。范围定义是可选的:如果没有定义范围,缺省值为1位寄存器。

reg型数据的默认初始值是不定值X,它可以赋正值,也可以赋负值。当一个reg型数

据是一个表达式的操作数时,它的值被当做是无符号值,即正值。(如一个4位寄存器被赋值-1,则在表达式中进行运算时,其值被认为是+15。)

reg型只表示被定义的信号将用在always块内,理解这一点很重要。并不是说reg型信号一定是寄存器或触发器的输出。虽然reg型信号常常是寄存器或触发器的输出,但并不一定总是这样,只有在时序逻辑中它对应的才是寄存器,而在组合逻辑电路中它表示一个节点。

3.按照上述工程进行编译,会出现“Warning:Found pins functioning as undefined clocks and/or memory enables Info:Assuming node \”的警告。大概意思是说发现“clock”节点没有定义成时钟信号。消除之个警告的方法如下:

(1)选择Assignments | Timing Seting 命令,在弹出的对话框中的Clock Setting 项选中Individual Clocks项,如图1-2所示。

图1-2 Clock设置页面1

(2)在图1-2中按Clocks....进行设置,在弹出的对话框中按New...按钮添加节点,如图1-3所示,并按图1-3所示进行设置,图中Required fmax 为系统需求的最大时钟频率,在这里填50MHz就可以了。

图1-3 Clock设置页面2

(3)设置好之后一直按OK按钮保存设置,最后再进行编译,原先的Warning就会消除。以上的操作是将“clock3”加入时钟域。如时“clock3”不是一个时钟信号,可将设置属性改为“Not a clock”,也可以消除Warning。

注意:如果编译后有些Warning 或Error不能消除或解决,可选中提示信息,按F1按键,打开帮助文档,Quartus II的帮助文档将列出Warning或error产生的原因及解决办法。

实验二 一位全加器的设计

一、实验目的

通过此实验让用户逐渐料及、熟悉和掌握FPGA开发软件Quartu II的使用方法及原理图输入程序电路的方法。

二、实验原理

一位全加器的电路原理图如图2-1所示,真值表如表2-1所列。可根据全加器的电路原理图或真值表用Verilog HDL语言描述。

OR2h_adderainbinINPUTVCCINPUTVCCOUTPUTcoutabinstcosoh_adderabinst1inst5cosoOUTPUTsumcinINPUTVCC 图2-1 一位全加器原理图f_adder.bdf 表2-1 一位全加器逻辑功能真值表 ain 0 1 0 1 0 1 0 1 bin 0 0 1 1 0 0 1 1 cin 0 0 0 0 1 1 1 1 sum 0 1 1 0 1 0 0 1 cout 0 0 0 1 0 1 1 1 三、主要实验设备

计算机和MagicSOPC实验箱。

四、实验内容

1.为本项工程设计建立文件夹

假设本项设计的文件夹取名为adder,路径为F:\\adder。

2.建立原理图文件工程和仿真 原理图编辑输入流程如下:

(1)打开原理图编辑窗。打开QuartusⅡ,选菜单File | New,在弹出的New对话框中选择原理图文件编辑输入项Block Diagram/Schematic File(如图2-2所示),按OK按钮后打开原理图编辑窗口。

图2-2 选择编辑文件类型

(2)建立一个初始原理图。在编辑窗口中的任何一个位置上右击鼠标,将出现快捷菜单,选择其中的输入元件项Insert | Symbol(如图2-3所示),或直接双击原理图编辑窗口,于是将弹出如图2-4所示的输入元件的对话框。在左下的Name栏键入输入引脚符号input。然后单击Symbol窗口的Ok按钮,即可将元件调入原理图编辑窗口中。

(3)原理图文件存盘。选择菜单File | Save As,将此原理图文件存于刚才建立的目录F:\\adder中,将已设计好的原理图文件取名为h_adder.bdf(注意默认的后缀是.bdf,而且此原理图尚未完成,因为只加入了一个输入端口),并存盘在此文件夹内。

(4)建立原理图文件为顶层设计的工程。然后将此文件h_adder.bdf设定为工程。 (5)绘制半加器原理图。创建工程后即进入工程管理窗,设工程名是h_adder。注意工程管理窗左上角的工程路径和工程名是:F:/adder/h_adder。双击左侧的工程名,再次进入原理图编辑窗。再双击原理图编辑窗任何位置。再次弹出如图2-4所示的输入元件的对话框。分别在Name栏键入(调入)元件名and2、xor和输出引脚output,并用单击拖动的方法,连接好的电路如图2-5所示。然后分别在input和output引脚的PIN NAME上双击使其变黑

色,再用键盘分别输入各引脚名:a、b、co和so。最后,作为本项工程的顶层电路原理设计图如图2-5所示。

图2-3 选择打开元件输入窗 图2-4 在元件输入对话框输入引脚

aINPUTVCCAND2

OUTPUTcoinstXORbINPUTVCCOUTPUTsoinst3 图2-5 半加器原理图

(6)仿真测试半加器。仿真波形如图2-6所示,显然与表2-2的真值表有对应关系,半加器设计成功。

表2-2 半加器真值表 a 0 0 1 1 b 0 1 0 1 so 0 1 1 0 co 0 0 0 1

图2-6 半加器仿真波形

3.将设计项目设置成可调用的元件

为了构成全加器的顶层设计,必须将以上设计的半加器h_adder.bdf设置成可调用的底层元件。方法如图2-7所示,在半加器原理图文件h_adder.bdf处于打开的情况下,选择菜单命令File | Create/Update | Create Symbol Files for Current File,即可将当前电路图变成一个元件符号存盘(元件文件名是h_adder.bsf),以便在高层次设计中调用。

图2-7 将半加器封装成一个元件

可以使用完全相同的方法将Verilog文本文件变成原理图中的一个元件(Symbol),实现Veriog文本设计与原理图的混合输入设计方法。转换中需要注意以下三点。

(1)被转换的Verilog文本也要呈打开状态,而且必须在某工程打开状态下。 (2)转换好的元件必须存在当前工程的路径文件夹中,文件后缀也默认.bdf。 (3)按图2-7的方式进行转换,选择Create Symbol Files for Current File项。 4.设计全加器顶层文件

为了建立全加器的顶层文件,必须另打开一个原理图编辑窗口,方法同前,即再次选择菜单File | New | Block Diagram/Schematic File。然后将其设置成新的工程。

首先将打开的空的原理图存盘于F:\\adder,文件取名为f_adder.bdf,作为本项设计的顶层文件。然后按照前面介绍的方法将顶层文件f_adder.bdf设置为工程。图2-8是f_adder.bdf的工程设置窗口,其工程名和顶层文件名都是f_adder。

图2-8 全加器f_adder.bdf工程设置 图2-9 在f_adder工程下的原理图编辑

窗中加入半加器 建立工程后,在新打开的原理图编辑窗口双击鼠标,在弹出的窗口(图2-9)中选择Project

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

Top