EDA开发实践B实验指导书nWord格式.docx
《EDA开发实践B实验指导书nWord格式.docx》由会员分享,可在线阅读,更多相关《EDA开发实践B实验指导书nWord格式.docx(61页珍藏版)》请在冰豆网上搜索。
![EDA开发实践B实验指导书nWord格式.docx](https://file1.bdocx.com/fileroot1/2023-1/23/86257dcd-593a-4d96-b628-bce464cb720b/86257dcd-593a-4d96-b628-bce464cb720b1.gif)
3.单击“Next”按钮,进入工程名称的设定、工作目录的选择。
图1‐5
指定工程路径、工程名和顶层实体名
4.如图1‐5所示。
在对话框中第一行选择工程路径;
第二行输入工程名,第三行输入顶层文件的实体名(注意:
工程名必须与顶层实体名相同,工程目录可以随意设置,但必须是英文的目录,工程名跟顶层实体名必须也是英文开头。
不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。
文件夹所在的路径名和文件夹名不能用中文,不能用空格,不能用括号,也不能以数字开头)这里输入encoder8_3;
单击“Next”按钮,出现如图1‐6所示的对话框。
图1‐6
新建工程文件添加对话框
在图所示的对话框中,可以为工程添加先期已经输入的设计文件,制定用户自定义的元件库的路径,这里没有事先输入好的文件,也没有自定义的元件库,单击“Next”按钮进入下一步,出现如图1‐7所示的对话框。
图1‐7
新建工程器件选择对话框
在图所示的对话框中,我们根据本实验箱所选的芯片型号,在Family下拉菜单中选择Cyclone
系列。
然后在Filters下的Package下拉菜单中选择封装形式FBGA,Pin
count下拉菜单中选择管脚数672,Speed
grade下拉菜单中选择速度级别8;
然后在Available
devices中选择EP2C35F672C8器件。
点击“Next”进入下一步。
5.单击“Next”进入图1‐8所示的对话框,用户指定在Quartus
II之外的用于设计输入、综合、仿真、时序分析的第三方EDA工具对话框,这里都不选,直接单击“Next”进入工程信息对话框.
图1‐8在Quartus
II里面新建工程
最后单击“Finish”完成工程建立。
图1‐9新建工程完毕
6.新建设计文件,选择“File|New”
,在New对话框中选择Device
Design
Files下的VHDL
File,单击OK,完成新建设计文件。
如图1‐10所示。
图1‐10在Quattus
II里面新建文件
7.在新建设计文件中输入VHDL程序,源代码如下:
LIBRARY
IEEE;
USE
IEEE.STD_LOGIC_1164.ALL;
IEEE.STD_LOGIC_ARITH.ALL;
IEEE.STD_LOGIC_UNSIGNED.ALL;
entity
encoder8_3
is
port
(
DIN
:
in
std_logic_vector(7
downto
0);
DOUT:
out
std_logic_vector(2
0)
);
end
encoder8_3;
architecture
rt1
of
begin
process(DIN)
begin
case
DIN
is
when“10000000”=>
DOUT
<
=
“111”;
when“01000000”=>
“110”;
when“00100000”=>
“101”;
when“00010000”=>
“100”;
when“00001000”=>
“011”;
when“00000100”=>
“010”;
when“00000010”=>
“001”;
when“00000001”=>
“000”;
whenothers=>
“zzz”;
endcase;
end
process;
endrt1;
本例只有一个设计文件,即为顶层设计文件,它的实体名一定要与顶层设计文件名encoder8_3一致,然后保存到工程文件夹Project下,命名为encoder8_3,即为顶层设计文件。
如图1‐11所示。
图1‐11保存文件
8.
管脚分配。
在附录A中有详细的管脚分配说明,这里采用第二种方法即使用qsf文件的方法。
在这里,还是把这个过程详细的说明一遍。
管脚分配是FPGA设计的一项必须做的工作,我们在设计完FPGA芯片里面的内容后需要把设计的顶层的接口与FPGA片外的管脚连接起来,只有这样我们的设计才能运行。
从第七步可以得知,设计中的顶层接口就是DIN[7:
0]和DOUT[2:
0],一共11个。
就是说这11个接口要与FPGA片外的引脚相连。
8‐3编码器是通过8路编码,观察3路的输出。
所以DIN[7:
0]要与平台上的8个拨码开关相连,DOUT[2:
0]要与平台3个LED灯相连。
这样8个拨码开关的编码通过3个LED灯观察到。
在建立QuartusII工程的时候,会自动建立一个与工程名一样的qsf文件。
打开工程中的qsf文件,如图1‐12。
会看到工程的信息。
图1‐12
qsf文件内容
我们把FPGA所有的固定好的管脚做成一个FPGA2C35_pins.txt文件,要用到那个管脚都可以到这个记事本文件中查找。
打开FPGA2C35_pins.txt文件,找到拨码开关和LED灯的地方。
如图1‐13。
把8个sw全部复制到qsf文件中,同样把LED前3个复制到qsf文件。
图1‐13
FPGA2C35_pins.txt中拨码开关的位置
然后把sw名字改为DIN,
LED_DOWN名字改为DOUT。
改好后的qsf文件如图1‐14.
图1‐14
改好后的qsf文件
然后把这个qsf文件保存关闭。
9.
未使用的管脚置成三态。
高阻
平台核心板上的FPGA共有672个管脚,但是只是使用其中的2个,还有大量未使用管脚,我们需要对这些未使用的管脚进行设置,这一步是非常重要的。
QuartusII默认使用的输出接地(意思是设置为低电压,也可以称为逻辑0),如果不进行设置的话,这些管脚都处于工作状态,一方面FPGA的耗电量增加芯片会发烫,这样会降低FPGA芯片的寿命;
另一方面,处于工作状态的管脚可能相互影响。
双击图1‐15界面中的
CycloneII
:
EP2C35F672C8
.
弹出如图1‐16的界面,
图1‐15
打开FPGA设置
图1‐16
进入FPGA设置
在图1‐16中点击
Device
and
Pin
Options,
弹出图1‐17的界面。
找到
Unused
Pins栏,设置成Asinput
tri‐stated.
点击确定,回到图1‐16
,再点击OK返回QuartusII。
图1‐17
置成
input
tri‐stated
10.选择“Processing→Start
Compilation”,或者单击工具栏中的Start
Compilation按钮进行全程编译,也可以在“Processing”菜单中选择“Start”子菜单中的分布编译操作。
图1‐18
编译工程
11.编译的时候,Quartus
II会给出编译进度,“Compilation
Report”窗口会给出编译结果,编译
结果会随着编译进度随时更新。
Message窗口会给出编译过程的具体情况,包括“information,warning,error”等。
“information”多是完成的一些编译的进展描述;
可能会出现很多warning但并不影响编译的进行;
如果出现error,那么设计是不成功的,用户需要改正这些错误,然后重新
编译。
可以对错误进行定位,选中错误信息,右击,在弹出的菜单中选择Locate来实现对错误的定位。
编译成功以后,会出现如下图所示的提示。
图1‐19
编译结果提示
12.
下载配置FPGA。
连接好USB‐Blaster,具体的安装步骤在附录C中,然后把平台电源打开,这里需要的注意的是USB‐Blaster不能带电插拔。
在QuartusII中点击选择Tools‐Programmer或者单击工具栏上的
,弹出如图1‐20的界面。
如果USB‐Blaster连接正确会在
Hardware
Setup的右侧出现
USB‐Blaster[USB
‐0]
.
确认Program/Configure下面的勾打上。
下载的文件是QuartusII编译生成的encoder8_3.sof
。
点击
Start开始下载
图1‐20
下载界面
如果发现蜂鸣器在响,说明第9步的操作有问题,FPGA的管脚没有设置成输入三态。
任意操作SW1—SW8(注意,每一次只能有一位为高,比如00001000),观察LED灯的变化,分析是否与Verilog
HDL或VHDL编写的一致。
2.
3‐8译码器及QuartusII的仿真
1.学习组合逻辑电路,学习译码器的功能与定义,学习VHDL语言。
II软件的相关操作。
3.
掌握利用QuartusII做时序和功能仿真
编写3‐8译码器的Verilog代码和VHDL代码,首先在QuarutsII中做仿真,观察仿真结果与设计源码是否一致,再通过编译并下载到平台上验证。
译码是编码的逆过程,它的功能是将特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路成为译码器。
译码器可分为两种类型,一种是将一系列代码转换成与之一一对应得有效信号。
这种译码器可以称为唯一地址译码器,它常用于计算机中对存储器单元地址的译码,即将每一个地址代码换成一个有效信号,从而选中对应的单元。
另一种是将一种代码转换成另一种代码,
所以也称为代码变换器。
在本实验中我们先介绍二进制唯一地址译码器,在下一实验中,我们介绍代码变换器。
3线‐8线译码器的真值表见表2‐1,
表2‐1
3‐8译码器真值表
实验箱上的SW1—SW3作为控制信号输入,SW4—SW6作为片选信号输入,LED1—LED8显示输出译码值。
表2‐2
引脚分配
1.新建工程,取名decoder3_8,如下图所示。
图2‐1
指定工程的目录、工程名和顶层实体名
2.新建VHDL设计文件,选择“File|New”
Files下的VHDL
3.在新建设计文件中输入VHDL程序,源代码如下:
4、输入完毕,点击
Start
Complication
对QuartusII工程编译,如果有错误返回上一步检查错误,重新编译直到没有错误为止。
5、新建QuartusII的仿真文件。
File菜单下的New,弹出如图2‐2
选择Vector
Waveform
File,
点击OK。
弹出图2‐3的界面,在左侧栏中双击空白的地方,会弹出图2‐4的界面。
图2‐2
新建仿真文件
图2‐3
仿真文件
图2‐4
插入符号
点击图2‐4中的Node
Finder,
弹出图2‐5。
图2‐5
添加信号
在图2‐5中添加仿真信号,Filer:
选择Pins:
all
,点击List,在左侧栏中会出现设计源码中所有的信号都列出来,在这个列表中选择要仿真的信号,选中某一个信号后点击“>
”,就会添加到右侧栏中。
点击“》”是把所有信号都添加,这里添加DIN、DOUT、G1、G2和G3,如图2‐5。
然后点击OK返回。
在图2‐4点击OK。
那么会看到选择后的信号出现在图2‐3中。
仿真设计中需要给定输入观察输出的结果,这里DIN、G1、G2和G3是输入,DOUT是输出,分别给定DIN、G1、G2和G3赋初值,右键点击DIN,选择Value菜单中的Count
Value,也就是把DIN的初值赋为自动增一的变量,如图2‐6
同样把G1赋为Forcing
High
,G2和G3赋为Forcing
Low
图2‐6
为输入赋初值
赋初值后,如图2‐7所示。
然后保存vwf文件,要把
Add
to
Current
project前面的勾打上。
再重新编译QuartusII工程。
结束后点击图2‐8中的
Simulation
图2‐7
图2‐8
开始仿真
图2‐9
仿真结果
等待片刻后出现图2‐9的界面,图中显示的是仿真的结果。
根据VHDL源码分析查看仿真结果与源码中是否一致。
6、管脚分配。
下面把设计下载到FPGA中验证,与实验一和实验二一样,先进行管脚分配,具体步骤这里不再重复,不清楚的读者请查看前两个实验和附录A。
把G1、G2和G3分配给拨码开关的前三个sw0,sw1和sw2
,DIN分配给拨码开关的sw3、sw4和sw5,DOUT分配给8个LED。
注意管脚分配完毕后一定要把Qsf文件保存退出。
7、未使用的管脚设置三态。
双击QuartusII左上角的CycloneII
然后点击device
and
Pins
Options,选择Unused
Pins栏,设置As
Input
tri‐stated。
8、编译QuartusII工程,结束后连接好USB‐Blaster和平台的电源之后,在QuartusII中点击Programmer下载生成的.sof文件。
9、观察结果。
拨动SW0—SW5
,观察LED的变化。
验证是否与源码和仿真的结果一致。
半加器与全加器及图形设计方法
1.学习半加器和全加器的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus
II的使用方法
2.学习Verilog
HDL和VHDL的编程方法
3.巩固QuartusII的仿真和图形设计方法。
编写半加器和全加器的Verilog
代码和VHDL代码并仿真,编译下载验证。
算术运算式数值系统的基本功能,更是计算机中不可缺少的组成单元。
1、半加器
半加法和全加法是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路。
一位加法器的真值表见表3‐1;
由表中可以看见,这种加法没有考虑低位来的进位,所以称为半加。
半加器就是实现表3‐1中逻辑关系的电路。
表3‐1
半加器的真值表
2、全加器
全加器能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的
进位信号。
根据它的功能,可以列出它的真值表,如表3‐2所示。
表3‐2
全加器的真值表
3、半减法和全减法
半减法和全减法与加法器一样是算术运算电路中的基本单元。
半减器和全减器的设计方法和设计加法器相同,但是实际上,为了简化系统结构,通常不设计减法器,而是将减法运算变为加法运算来出来,使运算器即能实现加法器运算,又能实现减法器运算。
一般采用加补码的方法代替减法运算。
图3‐1
设计原理框图
从原理图中可见,需要有两个数据输入位还有一个低位进位,数据输入我们采用实验箱上的SW1和SW2,进位采用SW3,LED1显示和输出,LED2显示进位输出。
引脚分配情况
表3‐3
1.新建工程,取名为adder,如下图所示。
图3‐2
Files
下的VHDL
4、为设计源码生成图形设计文件。
在QuartusII中点击File菜单,在Create/Update
中点击
Create
Symbol
file
for
Current
project
,如图3‐3
这时QuartusII会检查VHDL源码是否有错误,没有错误的话就会为这个设计源码生成一个带外围接口的图形。
5、在QuartusII新建图形设计文件。
点击File菜单下的New
,选择Block
Diagram/Schematic
File
,如图3‐4
点击OK。
图3‐4
新建图形设计文件
6、在新建的图形设计文件中会看到有很多小点,在随意的一个地方双击鼠标左键,会弹出如图3‐5的界面,打开Project会出现一个adder,在右侧栏同时会显示它的顶层图形。
这个图形就是在第4步,QuarutsII为源码生成的图形设计。
7、点击OK,用鼠标把图形符号拖动到刚才新建的带小点的文件中,从这个图形符号可以看出,VHDL源码中port部分全部显示出来,左边的是输入接口,右侧的是输出接口。
现在需要做的是把这些输入和输出接口与FPGA片外的管脚连接在一起,首先要把这些输入输出接口从FPGA片内引出来。
还是在空白处双击鼠标左键,弹出3‐5的界面,在Name框里输入input
,会出现input引脚的界面,如图3‐6.
图3‐6
添加输入引脚
8、点击OK把input引脚添加到图形设计中,采用同样方法添加其他9个intput和output引脚。
连接adder的外围接口和intput引脚。
按住鼠标左键,从input引脚的末端拖出一条线直到adder对应的信号,每个引脚都是同样操作,完成后如图3‐7所示。
然后双击input引脚,修改名称,如pin_name修改为A
9、生成“Symbol”文件,新建“Block
File”文件,在文件中添加刚刚生成的“Symbol”以及输入输出管脚,最后完整的系统顶层模块图如图3‐3所示。
图3‐7
顶层模块图
10、保存文件,使用qsf或者tcl进行管脚分配(相应的文件在本工程里面都可以找到)。
11、对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
12、新建“Vector
File”文件进行波形仿真。
其中A,B为输入数据,Ci低位进位。
图3‐8
利用vector
file仿真数据选择器的波形
13、下载完成后,通过
SW1—SW3控制着输入的电平,观察实验结果。
4.
寄存器及SignalTapII的使用
1.学习时序逻辑电路的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus
II的使用方法
2.了解寄存器的工作原理和设计思路
3.学习嵌入式逻辑分析仪SignalTapII的使用
在实验寄存器功能后,增加SignalTapII嵌入式逻辑分析仪的使用。
最终下载到平台上用
SignalTapII观察FPGA内部信号的波形。
寄存器是计算机和其他数字系统中用来存储代码或数据的逻辑部件。
它的主要组成部分是触发器。
一个触发器能储存一位二进制代码,所以要存储n位二进制代码的寄存器需要n个触发器组成。
寄存器和数据锁存器功能是相同的,不同的区别在于锁存器是电平信号控制,属于电平敏感性,而寄存器一般是由同步时钟信号控制。
两者使用场合不一样,主要取决于控制方式及控制信号和数据之间的时序关系:
若数据有效滞后于控制信号有效,则只能使用锁存器;
若数据提前于控制信号,并要求同步操作,而可以选择寄存器来存放数据。
本实验就是设计一个8
位的数据寄存器,该寄存器可以对8位信号并行输入的数据进行同步寄存。
另外,该寄存器还有一个异步清零端,低电平有效。
其功能表如表4‐1所示;
设计原理框图如图4‐1所示。
表4‐1
8位数据寄存器功能表
图4‐1
从原理图中可见,需要有一组8bit的可变输入作为输入数据和1bit清零使能位。
数据输入我们采用实验箱上的SW1—SW8,BTN1作为CLR清零使能位。
LED1‐