数字系统设计与VHDL 实验指导书1.docx
- 文档编号:7444207
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:37
- 大小:416.97KB
数字系统设计与VHDL 实验指导书1.docx
《数字系统设计与VHDL 实验指导书1.docx》由会员分享,可在线阅读,更多相关《数字系统设计与VHDL 实验指导书1.docx(37页珍藏版)》请在冰豆网上搜索。
数字系统设计与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.对该工程文件进
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字系统设计与VHDL 实验指导书1 数字 系统 设计 VHDL 实验 指导书