数字系统设计与VHDL 实验指导书1.docx

上传人:b****6 文档编号:7444207 上传时间:2023-01-24 格式:DOCX 页数:37 大小:416.97KB
下载 相关 举报
数字系统设计与VHDL 实验指导书1.docx_第1页
第1页 / 共37页
数字系统设计与VHDL 实验指导书1.docx_第2页
第2页 / 共37页
数字系统设计与VHDL 实验指导书1.docx_第3页
第3页 / 共37页
数字系统设计与VHDL 实验指导书1.docx_第4页
第4页 / 共37页
数字系统设计与VHDL 实验指导书1.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

数字系统设计与VHDL 实验指导书1.docx

《数字系统设计与VHDL 实验指导书1.docx》由会员分享,可在线阅读,更多相关《数字系统设计与VHDL 实验指导书1.docx(37页珍藏版)》请在冰豆网上搜索。

数字系统设计与VHDL 实验指导书1.docx

数字系统设计与VHDL实验指导书1

实验一QuartusⅡ9.0快速入门

一、实验目的

通过实验让学生了解,熟悉和掌握QuartusⅡ9.0开发软件的使用方法及VerilogHDL的编程方法。

学习简单时序电路的设计和硬件测试。

二、实验原理

在LED1~LED8引脚上周期性的输出流水数据,如原来输出的数据是11111100则表示点亮LED1,LED2,流水一次后,输出地数据应该为11111000,而此时应该点亮LED1~LED3三个发光二极管,就可以实现LED流水灯。

为了观察方便,流水速率最好在2Hz左右,在MagicSOPC核芯板上有一数字信号源,可选择CLOCK3的2HZ时钟信号源源作为流水灯的时钟源。

三、主要实验设备

计算机和MagicSOPC实验箱。

四、实验内容

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

实验步骤如下:

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

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

程序清单:

moduleledwater(led,clk);//模块名ledwater

output[7:

0]led;//定义LED输出口

inputclk;//定义时钟输出口

reg[8:

0]led_r;//定义输出寄存器

assignled=led_r[7:

0];//寄存器输出

always@(posedgeclk)//在时钟上升沿触发进程

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所示。

图1-1流水灯顶层模块

5.选择目标芯片并对相应的引脚进行锁定,在这里所选择的器件为Altera公司的CycloneII系列的EP2C35F672C8芯片,引脚锁定方法如下表所列。

将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)设置方法。

信号

引脚

信号

引脚

信号

引脚

Led[0]

R5

Led[3]

P6

Led[6]

R6

Led[1]

P9

Led[4]

P3

Led[7]

T3

Led[2]

P7

Led[5]

R8

Clock3

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处短路帽的位置。

观察流水灯的变化。

注意:

选择好器件后,先编译顶层文件,后分配引脚,是比较有利的,因为编译之后,QuartusII软件会自动将所有输入.输出引脚记录下来,不需要重新输入各个引脚的的信号名。

分配引脚也可以通过编辑*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Ⅱ,选择编程器,单击左上角的HardwareSetup按钮,在弹出的窗口中选择USB-Blaster项,双击之,此后就能使用。

六、预习及思考

1.思考:

如何实现左流水或其他花样流水呢?

自己动手试试。

2.reg数据类型:

VerilogHDL有两大类数据类型,线网类型和寄存器类型,形式如下:

reg[msb:

lsb]reg1,reg2....regN;

msb和lsb定义了范围,并且均为常数值表达式。

范围定义是可选的:

如果没有定义范围,缺省值为1位寄存器。

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

当一个reg型数据是一个表达式的操作数时,它的值被当做是无符号值,即正值。

(如一个4位寄存器被赋值-1,则在表达式中进行运算时,其值被认为是+15。

reg型只表示被定义的信号将用在always块内,理解这一点很重要。

并不是说reg型信号一定是寄存器或触发器的输出。

虽然reg型信号常常是寄存器或触发器的输出,但并不一定总是这样,只有在时序逻辑中它对应的才是寄存器,而在组合逻辑电路中它表示一个节点。

3.按照上述工程进行编译,会出现“Warning:

Foundpinsfunctioningasundefinedclocksand/ormemoryenablesInfo:

Assumingnode"clock"isanundefinedclock”的警告。

大概意思是说发现“clock”节点没有定义成时钟信号。

消除之个警告的方法如下:

(1)选择Assignments|TimingSeting命令,在弹出的对话框中的ClockSetting项选中IndividualClocks项,如图1-2所示。

图1-2Clock设置页面1

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

图1-3Clock设置页面2

(3)设置好之后一直按OK按钮保存设置,最后再进行编译,原先的Warning就会消除。

以上的操作是将“clock3”加入时钟域。

如时“clock3”不是一个时钟信号,可将设置属性改为“Notaclock”,也可以消除Warning。

注意:

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

实验二一位全加器的设计

一、实验目的

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

二、实验原理

一位全加器的电路原理图如图2-1所示,真值表如表2-1所列。

可根据全加器的电路原理图或真值表用VerilogHDL语言描述。

图2-1一位全加器原理图f_adder.bdf

表2-1一位全加器逻辑功能真值表

ain

bin

cin

sum

cout

0

0

0

0

0

1

0

0

1

0

0

1

0

1

0

1

1

0

0

1

0

0

1

1

0

1

0

1

0

1

0

1

1

0

1

1

1

1

1

1

3、主要实验设备

计算机和MagicSOPC实验箱。

四、实验内容

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

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

\adder。

2.建立原理图文件工程和仿真

原理图编辑输入流程如下:

(1)打开原理图编辑窗。

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

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

(2)建立一个初始原理图。

在编辑窗口中的任何一个位置上右击鼠标,将出现快捷菜单,选择其中的输入元件项Insert|Symbol(如图2-3所示),或直接双击原理图编辑窗口,于是将弹出如图2-4所示的输入元件的对话框。

在左下的Name栏键入输入引脚符号input。

然后单击Symbol窗口的Ok按钮,即可将元件调入原理图编辑窗口中。

(3)原理图文件存盘。

选择菜单File|SaveAs,将此原理图文件存于刚才建立的目录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引脚的PINNAME上双击使其变黑色,再用键盘分别输入各引脚名:

a、b、co和so。

最后,作为本项工程的顶层电路原理设计图如图2-5所示。

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

图2-5半加器原理图

(6)仿真测试半加器。

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

表2-2半加器真值表

a

b

so

co

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

图2-6半加器仿真波形

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

为了构成全加器的顶层设计,必须将以上设计的半加器h_adder.bdf设置成可调用的底层元件。

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

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

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

转换中需要注意以下三点。

(1)被转换的Verilog文本也要呈打开状态,而且必须在某工程打开状态下。

(2)转换好的元件必须存在当前工程的路径文件夹中,文件后缀也默认.bdf。

(3)按图2-7的方式进行转换,选择CreateSymbolFilesforCurrentFile项。

4.设计全加器顶层文件

为了建立全加器的顶层文件,必须另打开一个原理图编辑窗口,方法同前,即再次选择菜单File|New|BlockDiagram/SchematicFile。

然后将其设置成新的工程。

首先将打开的空的原理图存盘于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下的先前存入的h_adder元件,调入原理图编辑窗中。

最后调出相关元件,按照图2-1进行连接。

5.将设计项目进行时序仿真

工程完成后即可进行全程编译。

此后的所有流程都与以上介绍的方法和流程相同。

图2-10是全加器工程f_adder的仿真波形。

图2-10全加器工程f_adder的仿真波形

6.选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为altera公司cyclone

系列的EP2C35F672C8芯片,引脚锁定方法如图2-3所列。

将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。

注意,SW1-SW3的IO电平应设置为2.5V。

表3.8引脚锁定方法

信号

引脚

信号

引脚

信号

引脚

信号

引脚

SW1

L25

SW3

J21

bin

P9

sum

R6

SW2

L24

ain

R5

cin

P7

cout

T3

7.最后把程序下载到FPGA器件中。

拨动SW1-SW3,观察发光二极管LED1~LED3、LED7、led8的状态。

五、实验总结

1.总之,Verilog文本设计中可用例化语句调用原理图构成的元件,同样,原理图中也能调用文本程序构成的元件。

2.总结原理图输入方法的要点。

六、预习及思考

1.思考:

如何实现顶层文件的输入设计。

2.多种形式文件的输入方法和相互调用方法。

 

实验三4位加法计数器

一、实验目的

学习计数器的设计、仿真和硬件测试,进一步熟悉VerilogHDL的编程方法。

二、实验原理

图3-1是一个含计数使能、异步复位的4位加法计数器,图中间是4位锁存器;rst是异步清零信号,低电平有效;clk是锁存信号;当ena为‘1’时使能锁存器。

图3-1含计数使能、异步复位的4位加法计数器

三、主要实验设备

计算机和MagicSOPC实验箱。

四、实验内容

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

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

并将cnt4b.v封装生成cnt4b.bsf元件。

程序清单cnt4b.v

modulecnt4b(clk,rst,ena,dout,cout);//模块名cnt4b

inputclk,rst,ena;//输入信号

output[3:

0]dout;//计数输出

outputcout;//进位输出

reg[3:

0]cnt;//计数器

assigncout=&cnt;//进位输出

assigndout=cnt;//计数器输出

always@(posedgeclkornegedgerst)

begin

if(rst==1'b0)//异步清零,低电平有效

cnt<=4'h0;

elseif(ena==1'b1)//同步使能计数,高电平有效

cnt<=cnt+1'b1;

end

endmodule

3.建立波形仿真文件并进行仿真验证。

4.数码管动态驱动程序dec17s.v清单

moduledecl7s(d,seg);//模块名decl7s

input[3:

0]d;//输入4位二进制码

output[7:

0]seg;//七段译码输出

reg[7:

0]seg_r;//定义数码管输出寄存器

assignseg=seg_r;//输出数码管译码结果

always@(d)

begin

case(d)//七段译码

4'h0:

seg_r=8'hc0;//显示0

4'h1:

seg_r=8'hf9;//显示1

4'h2:

seg_r=8'ha4;//显示2

4'h3:

seg_r=8'hb0;//显示3

4'h4:

seg_r=8'h99;//显示4

4'h5:

seg_r=8'h92;//显示5

4'h6:

seg_r=8'h82;//显示6

4'h7:

seg_r=8'hf8;//显示7

4'h8:

seg_r=8'h80;//显示8

4'h9:

seg_r=8'h90;//显示9

4'ha:

seg_r=8'h88;//显示a

4'hb:

seg_r=8'h83;//显示b

4'hc:

seg_r=8'hc6;//显示c

4'hd:

seg_r=8'ha1;//显示d

4'he:

seg_r=8'h86;//显示e

4'hf:

seg_r=8'h8e;//显示f

endcase

end

endmodule

将dec17s.v封装生成dec17s.bsf元件。

5.新建图形设计文件(顶层模块)命名为cnt_4b.bdf并保存。

其模块原理图如图3-2所示。

图3-24位加法计数器顶层模块

6.选择目标器件并对对应的引脚进行锁定,在这里所选择的器件为Atera公司Cyclonell系列的EP2C35F672C8芯片,引脚锁定方法如表3-1所列。

注意ena信号是拨档开关的输入,I/OBank工作电压是2.5v,所在I/O电平要设置为2.5v。

将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。

设置方法见3.1节。

表3-1引脚锁定方法

信号

引脚

信号

引脚

信号

引脚

信号

引脚

seg[0]

J8

seg[6]

L10

dig[4]

J3

ena

L25

seg[1]

M3

seg[7]

L9

dig[5]

K4

Led1

R5

seg[2]

K6

dig[0]

L6

dig[6]

L3

Led2

P9

seg[3]

J6

dig[1]

K5

dig[7]

M4

Led8

T7

seg[4]

U10

dig[2]

G3

clock0

N2

seg[5]

N9

dig[3]

G4

sys_rst

AC13

注:

ena信号引脚输入应设为2.5v电平标准。

7.将cnt_4b.bdf设置为顶层实体。

对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,知道编译成功为止。

8.确保数字信号源(B4区域)的JP11的短路帽是处于ON位置,JP7中CLOCK0的短路帽处于4Hz位置;最后把程序下载到FPGA器件中。

拨动拨动开关SW1,按SYS_RST按键,观察数码管和发光二极管的状态,是否与设计想符合。

五、实验总结

1.文本文件生成原理图元件的方法及其元件调用。

2.多个源文件如何进行管理,放在同一个项目的文件夹下。

六、预习及思考

1.带异步复位的4位加法计数器程序

always@(posedgeclockornegedgerst_n)

begin

if(!

rst_n)

cnt<=4’d0;

else

cnt<=cnt+4’d1;

end

带异步复位的4位加法计数器RTL图如图3-3所示。

2.带同步复位的4位加法计数器程序

always@(posedgeclock)

begin

if(!

rst_n)

cnt<=4’d0;

else

cnt<=cnt+4’d1;

end

带同步复位的4位加法计数器RTL图如图3-4所示。

图3-3带异步复位4位加法计数器RTL图图3-4带同步复位4位加法计数器RTL图

实验四数字时钟设计

一、实验目的

学习数字时钟的硬件设计。

二、实验原理

一个完整的时钟应由3部分组成:

秒脉冲发生电路、计数显示部分和时钟调整部分。

一个时钟的准确与否主要取决于秒时钟的精确度。

为了保证计时准确对系统时钟50MHz进行了50000000分频,从而得到了1Hz的秒脉冲,至于显示部分与LED数码管原理相同,而校对电路用户可以自由发挥,如定义3个键keystart、keymon、keyadd,分别用于控制时钟的计时开始、调整功能选择和加1处理,从而完成对现在时间的调整。

本实验的校时电路在此仅仅完成了暂停、清零等基本功能。

三、主要实验设备

计算机和MagicSOPC实验箱。

四、实验内容

1.在QuartusII中建立了工程项目文件clock.qpf,并在该项目下新建VerilogHDL源程序文件clock..v输入程序代码并保存。

完整的VerilogHDL程序参考清单3.18.

2.FPGA的I/O管脚分配见表4-1。

注意,时钟信号应选择clk,而不是clock。

表4-1引脚锁定方法

信号

引脚

信号

引脚

信号

引脚

信号

引脚

seg[0]

J8

dig[1]

K5

Led[2]

P7

key[3]

P1

seg[1]

M3

dig[2]

G3

Led[3]

P6

key[4]

AD13

seg[2]

K6

dig[3]

G4

Led[4]

P3

key[5]

AF14

seg[3]

J6

dig[4]

J3

Led[5]

R8

key[6]

P25

seg[4]

U10

dig[5]

K4

Led[6]

R6

key[7]

P26

seg[5]

N9

dig[6]

L3

Led[7]

T7

clock/clk

B13

seg[6]

L10

dig[7]

M4

key[0]

C13

clock0

N2

seg[7]

L9

Led[0]

R5

key[1]

D13

fout

F18

dig[0]

L6

Led[1]

P9

key[2]

N1

3.对该工程文件进

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1