可编程FPGA数字系统设计实验指导书.docx

上传人:b****6 文档编号:7352161 上传时间:2023-05-11 格式:DOCX 页数:41 大小:2.92MB
下载 相关 举报
可编程FPGA数字系统设计实验指导书.docx_第1页
第1页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第2页
第2页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第3页
第3页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第4页
第4页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第5页
第5页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第6页
第6页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第7页
第7页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第8页
第8页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第9页
第9页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第10页
第10页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第11页
第11页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第12页
第12页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第13页
第13页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第14页
第14页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第15页
第15页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第16页
第16页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第17页
第17页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第18页
第18页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第19页
第19页 / 共41页
可编程FPGA数字系统设计实验指导书.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

可编程FPGA数字系统设计实验指导书.docx

《可编程FPGA数字系统设计实验指导书.docx》由会员分享,可在线阅读,更多相关《可编程FPGA数字系统设计实验指导书.docx(41页珍藏版)》请在冰点文库上搜索。

可编程FPGA数字系统设计实验指导书.docx

可编程FPGA数字系统设计实验指导书

 

可编程FPGA

数字系统设计实验指导

 

西安电子科技大学

空间科学与技术学院编制

 

第一部分课程简介

一.课程简介

本课程是电子工程和计算机科学等的选修专业课。

VerilogHDL程序设计是电子信息类专业学生在学习完数字电子技术后的选修专业课程,主要内容是学习利用VerilogHDL进行数字逻辑电路和系统的开发和设计。

通过对该课程的学习,学生应该掌握VerilogHDL的词法、语法、句法,可综合程序的编写,仿真及测试程序的编写,一般数字逻辑的实现,复杂数字逻辑和算法的实现,并能够初步的利用VerilogHDL进行时序及逻辑系统的设计,并对寄存器传输级(RTL)上的设计方法掌握和理解。

VerilogHDL语言设计是一门理论与实践联系紧密的课程,所以本课程安排5个实验,以帮助学生掌握VerilogHDL程序设计技术,提高学生分析问题和解决问题的能力,并通过实验培养学生的创新意识。

本实验课的基本要求如下:

1.学会用VerilogHDL语言编写数字电路和系统的程序,通过上机实习加深对课堂所学知识的理解;

2.上机前应按照要求把实验内容准备好,即编好程序及需要改变的参数,能预计出可能出现的结果;

3.观察实验结果,得出结论;

4.实验结束时提交实验报告。

二.实验项目及学时安排

序号

项目

学时

实验性质

验证

综合

设计

1

简单的组合逻辑和时序逻辑的设计

4

2

复杂时序逻辑电路的设计

4

3

函数和任务的应用设计

4

4

有限状态机(FSM)的设计

4

5

基于模块多层次引用的结构化电路设计

4

第二部分实验基础知识

一.实验的基本过程

实验的基本过程,应包括:

1,熟悉实验平台;2,确定实验内容;3,选定最佳的实验方法和实验线路;4,拟出较好的实验步骤、进行仿真和调试、最后写出完整的实验报告。

在利用VerilogHDL进行数字系统设计实验时,充分掌握和正确利用Verilog语言独有的特点和规律,可以收到事半功倍的效果,对于完成每一个实验,应做好实验预习、实验记录和实验报告等环节。

(一)实验预习

认真预习是做好实验的关键。

预习好坏,不仅关系到实验能否顺利进行,而且直接影响实验效果。

预习应按本教材的实验预习要求进行,在每次实验前首先要认真复习有关实验的基本原理,对如何着手实验做到心中有数,通过预习还应做好实验前的准备。

(二)实验记录

实验记录是实验过程中获得的第一手资料。

测试过程中所测试的数据和波形必须和理论基本一致,所以记录必须清楚、合理、正确,若不正确,则要现场及时重复测试,找出原因。

(三)实验报告

实验报告是培养学生科学实验的总结能力和分析思维能力的有效手段,也是一项重要的基本功训练,它能很好地巩固实验成果,加深对基本理论的认识和理解,从而进一步扩大知识面。

实验报告是一份技术总结,要求文字简洁,内容清楚,图表工整。

报告内容应包括实验目的、实验内容和结果、实验使用仪器和元器件以及分析讨论等,其中实验内容和结果是报告的主要部分,它应包括实际完成的全部实验,并且要按实验任务逐个书写,每个实验任务应有如下内容:

1.实验课题的方框图、逻辑图、状态图,真值表以及文字说明等,对于设计性课题,还应有整个设计过程和关键的设计技巧说明。

2.实验结果分析、讨论及结论,对讨论的范围,没有严格要求,一般应对重要的实验现象、结论加以讨论,以便进一步加深理解,此外,对实验中的异常现象,可作一些简要说明,实验中有何收获,可谈一些心得体会。

二.实验中操作规范和常见故障检查方法

实验中操作的正确与否对实验结果影响甚大。

因此,实验者需要注意按以下规程进行。

1.搭接实验电路前,应对仪器设备进行必要的检查校准,对所用集成电路进行功能测试。

2.搭接电路时,应遵循正确的布线原则和操作步骤(即要按照先接线后通电,做完后,先断电再拆线的步骤)。

3.掌握科学的调试方法,有效地分析并检查故障,以确保电路工作稳定可靠。

4.仔细观察实验现象,完整准确地记录实验数据并与理论值进行比较分析。

5.实验完毕,经指导教师同意后,可关断电源拆除连线,整理好放在实验箱内,并将实验台清理干净、摆放整洁。

三、DE2-115型数字系统综合实验平台简介

DE2-115型数字系统综合实验平台是以FPGA芯片数数主的可进行数字逻辑、微机原理、接口技术等数字技术的课程实验。

本实验通过所需完成数字逻辑的器件配置图来配置FPGA核心芯片完成相关的逻辑功能。

1、DE2-115型FPGA综合实验平台介绍

FPGA核心芯片“

C7N”,配置方式有TJAG和AS模式两种,配置控制芯片为EPCS64,使用USBBlaster进行在线配置。

系统上电后不断进行自检。

2、本实验中涉及主要引脚

(1)拨动开关(SW)与FPGA引脚对应关系

(2)按钮开关(KEY)与FPGA引脚对应关系

(3)LED指示灯与FPGA引脚对应关系

(4)数码管与FPGA引脚对应关系

3、DE2-115下载器连接与配置

(1)配置CycloneIVEFPGA芯片

在QuartusII软件使用简介中,我们已经介绍了如何从PC下载一个硬件电路到DE2-115开发板。

这份使用说明书可以在DE2-115系统光盘里面的DE2_115_tutorials目录下面找到。

用户应该首先仔细阅读这份说明书,而把以下的介绍作为简短的参考。

DE2-115开发板包含一个存储有CycloneIVEFPGA芯片配置数据的串行配置芯片。

每次开发板上电的时候,芯片里面的配置数据会自动从配置芯片加载到FPGA芯片。

使用QuartusII软件,用户可以随时重新配置FPGA,并可以改变存储在非易失性串行存储器芯片(EPCS)里面的数据。

下面分述两种不同的配置方式:

1)JTAG编程:

这种下载方式-名字起源于IEEE标准,联合测试行动组-会把配置数据直接加载到CycloneIVEFPGA芯片。

FPGA芯片会保持这些配置信息直到芯片掉电。

2)AS编程:

这种下载方式被叫称作串行主动编程,它会下载配置数据到AlteraEPCS64芯片。

它将配置数据保存在非易失性器件中,即使DE2-115开发板掉电,数据也不会丢失。

在每次开发板上电的时候,EPCS64芯片里面的数据会自动加载到CycloneIVEFPGA芯片。

(2)DE2-115开发板上的JTAG链

当使用JTAG接口配置FPGA芯片的时候,DE2-115上的JTAG链必须形成一个回路,这样QuartusII软件才可以正确检测到JTAG链上的FPGA/CPLD器件。

给出了DE2-115开发板上的JTAG链。

短接JP3上的第一、二引脚会旁路HSMC接头的JTAG信号,直接在DE2-115上形成JTAG回路,这样只有DE2-115上的FPGA器件(CycloneIVE)才可以被QuartusII软件检测到。

如果用户想通过HSMC接头包含其它的FPGA器件或者包含FPGA器件的界面,短路JP3的第二、三脚,从而使能HSMC接头上的JTAG链。

以下是关于JTAG和AS编程的操作步骤。

对于这两种方式,DE2-115开发板均通过USB电缆连接到PC主机。

通过这种连接,主机将开发板当做一个AlteraUSB-Blaster设备。

在主机上安装USB-Blaster驱动的步骤在说明书“GettingStartedwithAltera’sDE2-115Board”(tut_initialDE2-115.pdf)中有详细描述。

这份说明书可以在DE2-115的系统光盘中找到。

(3)使用JTAG模式配置FPGA

给出了JTAG编程模式的设定信息。

执行以下步骤,以将配置数据下载到CycloneIVEFPGA:

∙确保DE2-115已经正确连接好电源

∙将RUN/PROG拨动开关(SW19)放置在RUN位置

∙将附带的USB电缆连接到DE2-115开发板的USB-Blaster电路上。

∙现在可以通过QuartusII编程器选择合适的以.sof为扩展名的配置数据来配置DE2-115的FPGA芯片了

(4)使用AS模式配置EPCS64芯片

图4-5给出了AS配置模式的设定。

执行以下步骤,以将配置数据下载到EPCS64芯片:

∙确保DE2-115已经连接好电源

∙连接附带的USB电缆到DE2-115的USB-Blaster接口

∙将RUN/PROG拨动开关(SW19)放置在PROG位置

∙现在可以通过QuartusII编程器通过选择以.pof位扩展名的配置文件来编程EPCS64器件了

∙编程结束后,将RUN/PROG开关拨回RUN位置,关闭然后打开DE2-115的电源开关。

通过这次重启,FPGA将从EPCS64器件读取新的配置数据

(5)拨动开关与按钮开关的使用

DE2-115提供了四个按钮开关,如图4-6所示。

每个按钮开关都通过一个施密特触发器进行了去抖动处理,如图4-7所示。

四个施密特触发器的输出信号,分别为KEY0,KEY1,KEY2,KEY3,直接连接到了CycloneIVEFPGA。

当按钮没有被按下的时候,它的输出是高电平,按下去则给出一个低电平。

得益于去抖动电路,这些按钮开关适合用来给内部电路提供(模拟的)时钟或者复位信号。

DE2-115开发板上还有18个拨动开关(参考图4-8)。

这些开关没有去抖动电路,它们可以作为对电平敏感的电路的输入数据。

每个开关都直接连接到CycloneIVEFPGA。

当拨动开关在DOWN位置(靠近开发板边缘)的时候,输出为低电平,当在UP位置时,输出为高电平。

CycloneIVEFPGA到拨动开关间的详细引脚连接信息请参考表见前面引脚对应表格。

(6)LED指示灯的使用

DE2-115开发板共有27个直接由FPGA控制的LED。

18个红色的LED位于18个拨动开关的正上方,8个绿色LED可以在按钮开关的上方找到(第九个LED位于七段数码管的中间)。

每一个LED都由CycloneIVEFPGA的一个引脚直接驱动,其输出高电平则点亮LED,输出低电平LED熄灭。

图4-9给出了LED和CycloneIVEFPGA之间的连接示意图。

四、Quartusii10.0在本实验中的使用

1.新建一个文件夹FPGA,再启动QuratusII

2.启动后界面

3.点

新建工程,出现以下界面

4.在出现的界面里第一行上选择新建的FPGA文件夹,第二行上输入myHDL,点finish完成后出现如下界面

5.再新建文件,选择“VerilogHDLFile”

6.出现编辑界面

7.文本文件编辑器里,键入上述语句.ClickSave.这样就完成了VerilogHDL的输入。

8.重新命名各信号引脚。

双击某信号引脚(输入或输出),出现界面后修改信号引脚名称。

再按“

”进行预编译,检查是否有错。

9.在主菜单点“Assignments”,下拉菜单中选“Device…”,在出现的界面中,“Family”选择“cycloneIVE”,在下面列表中选与实验板FPGA主芯片对应的芯片名称,如“EP4CE115F29C7”,点“OK”确定

10.点“

”选对应器件引脚。

在出现的界面上选与实验板上对应的引脚与原理图输入输出引脚对应。

引脚输入输出对应开关和指示灯见DE2-115实验板使用手册。

11.重新按“

”编译,编译时有“%”指示。

12.连接实验板(USB),查看设备管理中有无“USB-Blaster”连接

13.按主界面中图标“

”,在出现的界面中查看下载器件是否连接,编译后的文件是否在上面。

14.在上面界面上点“

”将编译后的文件“XX.sof”下载到实验板中,看下载指示条(等待一段时间或重)

15.运行实验板,看逻辑变化

第三部分VerilogHDL语言设计实验

实验一简单的组合逻辑和时序逻辑的设计

一、实验目的

1、掌握基本组合逻辑电路的实现方法,掌握连续赋值语句和条件赋值语句的使用方法;

2、掌握基本时序逻辑电路的实现,掌握always语句的使用方法。

二、实验原理、内容及步骤

1、简单组合逻辑设计

描述组合逻辑电路通常利用assign连续赋值语句的数据流方式。

连续赋值语句将值赋给线网(连续赋值不能为寄存器赋值)。

连续赋值语句只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算,如果结果值有变化,新结果就赋给左边的线网。

连续赋值的目标类型如下:

1)标量线网;2)向量线网;3)向量的常数型位选择;4)向量的常数型部分选择;5)上述类型的任意的拼接运算结果。

组合逻辑设计示例:

可综合的数据比较器。

它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。

描述组合逻辑时常使用assign结构。

注意equal=(a==b)?

1:

0,这是一种在组合逻辑实现分支判断时常使用的格式。

模块源代码:

//---------------compare.v-----------------

modulecompare(equal,a,b);

inputa,b;

outputequal;

assignequal=(a==b)?

1:

0;//a等于b时,equal输出为1;a不等于b时,

//equal输出为0。

endmodule

测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。

测试模块源代码:

`timescale1ns/1ns//定义时间单位。

`include"./compare.v"//包含模块文件。

在有的仿真调试环境中并不需要此语句。

//而需要从调试环境的菜单中键入有关模块文件的路径和名称

modulecomparetest;

rega,b;

wireequal;

initial//initial常用于仿真时信号的给出。

begin

a=0;

b=0;

#100a=0;b=1;

#100a=1;b=1;

#100a=1;b=0;

#100$stop;//系统任务,暂停仿真以便观察仿真波形。

end

comparecompare1(.equal(equal),.a(a),.b(b));//调用模块。

endmodule

2、简单时序逻辑设计

在VerilogHDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。

在可综合的VerilogHDL模型,我们通常使用always块和@(posedgeclk)或@(negedgeclk)的结构来表述时序逻辑。

时序逻辑设计示例:

可综合的1/2分频器模型。

//half_clk.v:

modulehalf_clk(reset,clk_in,clk_out);

inputclk_in,reset;

outputclk_out;

regclk_out;

always@(posedgeclk_in)

begin

if(!

reset)clk_out=0;

else

clk_out=~clk_out;

end

endmodule

在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的。

对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。

为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号reset,当reset为低电平时,对电路中的寄存器进行复位。

测试模块的源代码:

//-------------------clk_Top.v-----------------------------

`timescale1ns/100ps

`defineclk_cycle50

moduleclk_Top.v

regclk,reset;

wireclk_out;

always#`clk_cycleclk=~clk;

initial

begin

clk=0;

reset=1;

#100reset=0;

#100reset=1;

#10000$stop;

end

half_clkhalf_clk(.reset(reset),.clk_in(clk),.clk_out(clk_out));

endmodule

3、组合逻辑及时序设计题

1.设计一个字节(8位)比较器。

要求:

比较两个字节的大小,如a[7:

0]大于b[7:

0],则点亮LEDR0,否则点亮LEDR1;用DE2开发板上的switchesSW17-0作为输入,用LED和7-segmentdisplays显示为16进制。

2.作clk_in的二分频clk_out,要求输出与上例的输出正好反相。

编写测试模块,给出测试波形。

三、实验报告要求

1、简要描述VerilogHDL中实现组合逻辑和时序逻辑的不同语法结构;

2、实验报告应包括Modelsim环境下仿真得到的波形和QuatusII环境下综合得到RTL级电路图;

3、实验报告应附硬件仿真的波形或显示的照片。

实验二复杂时序逻辑电路的设计

一、实验目的

1、掌握条件语句if…else在复杂时序逻辑设计中的应用;

2、掌握阻塞赋值与非阻塞赋值的概念和区别,掌握阻塞赋值的使用情况。

二、实验原理、内容及步骤

1.条件语句在VerilogHDL中的使用

与常用的高级程序语言一样,为了描述较为复杂的时序关系,VerilogHDL提供了条件语句供分支判断时使用。

在可综合风格的VerilogHDL模型中常用的条件语句有if…else和case…endcase两种结构,用法和C程序语言中类似。

两者相较,if…else用于不很复杂的分支关系,实际编写可综合风格的模块、特别是用状态机构成的模块时,更常用的是case…endcase风格的代码。

条件语句示例:

可综合风格的分频器。

它的功能是将10M的时钟分频为500K的时钟。

基本原理与1/2分频器是一样的,但是需要定义一个计数器,以便准确获得1/20分频。

模块源代码:

//---------------fdivision.v-----------------------------

modulefdivision(RESET,F10M,F500K);

inputF10M,RESET;

outputF500K;

regF500K;

reg[7:

0]j;

always@(posedgeF10M)

if(!

RESET)//低电平复位。

begin

F500K<=0;

j<=0;

end

else

begin

if(j==19)//对计数器进行判断,以确定F500K信号是否反转。

begin

j<=0;

F500K<=~F500K;

end

else

j<=j+1;

end

endmodule

测试模块源代码:

//---------------fdivision_Top.v------------------------

`timescale1ns/100ps

`defineclk_cycle50

moduledivision_Top;

regF10M_clk,RESET;

wireF500K_clk;

always

#`clk_cycleF10M_clk=~F10M_clk;

initial

begin

RESET=1;

F10M=0;

#100RESET=0;

#100RESET=1;

#10000$stop;

end

fdivisionfdivision(.RESET(RESET),.F10M(F10M_clk),.F500K(F500K_clk));

endmodule

2.设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别

非阻塞赋值语句(<=)右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,而阻塞赋值语句(=)在每个右端表达式计算完成后立即赋值给左端变量。

非阻塞赋值不能用于assign语句中,而只能用于对寄存器型变量进行赋值,只能在intial和always等过程过程块中。

阻塞赋值既能用于assign语句,也能用于intial和always等过程赋值中。

对于时序逻辑的描述和建模,应尽量使用非阻塞赋值方式。

若在同一个always过程块中描述时序和组合逻辑混合电路时也最好使用非阻塞赋值方式。

在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。

实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用,有时为了在同一周期实现相互关联的操作,也使用了阻塞赋值语句。

可综合设计中阻塞赋值和非阻塞赋值设计要点:

1)非阻塞赋值不能用于assign持续赋值中,一般只出现在initial和always等过程块中,对reg型变量进行赋值;

2)当用always块来描述组合逻辑时,既可以用阻塞赋值,也可以用非阻塞赋值。

但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值;

3)在向函数funtion的返回值赋值时,应使用阻塞赋值;

4)不能在一个以上的always过程块中对同一个变量赋值,这样会引起冲突,在综合时会报错;

5)在一个模块中,严禁对同一个变量既进行阻塞赋值,又进行非阻塞赋值,这样会在综合时报错;

6)对时序逻辑的描述和建模,应尽量使用非阻塞赋值方式,此外,若在同一个always过程块中描述时序和组合逻辑混合电路时,最好使用非阻塞赋值方式。

阻塞赋值与非阻塞赋值示例:

分别采用阻塞赋值语句和非阻塞赋值语句的两个看上去非常相似的两个模块blocking.v和non_blocking.v来阐明两者之间的区别。

模块源代码:

//-------------blocking.v---------------

moduleblocking(clk,a,b,c);

output[3:

0]b,c;

input[3:

0]a;

inputclk;

reg[3:

0]b,c;

always@(posedgeclk)

begin

b=a;

c=b;

$display("Blocking:

a=%d,b=%d,c=%d.",a,b,c);

end

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2