现代数字系统实验
更新时间:2024-07-08 17:33:01 阅读量: 综合文库 文档下载
- 现代数字系统设计流程推荐度:
- 相关推荐
现代数字系统实验
林丽萍 2007/9
1
目 录
实验1:Quartus入门.................................................................................1
1、2输入与门(电路功能略)........................................................1 2、简单电路的设计.........................................................................15 实验2:简单的组合逻辑电路设计.......................................................22
1.2选1的数据选择器..................................................................22 2.8位宽2选1的数据选择器......................................................23 3.4选1的数据选择器..................................................................26 4.实现3位宽的4选1数据选择器。.........................................27 实验3:七段数码管显示.......................................................................29
1.显示简单字符.............................................................................29 2.显示0~9数字...........................................................................31 3.循环显示4个字符.....................................................................32 实验4:BCD码显示及运算...................................................................35
1.二进制码到BCD码的转换.........................................................35 2.1位BCD加法器..........................................................................36 3.2位BCD加法器..........................................................................38 实验5:触发器和计数器.......................................................................40
1.D触发器和D锁存器...................................................................40 2.计数器.........................................................................................42 3.分频器.........................................................................................51
2
4.时钟.............................................................................................53 实验6:存储器的设计...........................................................................56
1.用LPM实现32×8 RAM..............................................................57 2.用VHDL实现..............................................................................63 3.用片外RAM实现........................................................................65 4.SRAM的应用..............................................................................67 实验7:基于DE2的SOPC系统开发.....................................................68
1.建立一个新的SOPC系统..............................................................68 2.在SOPC Builder中定义目标系统.................................................69 3.分配基地址和中断请求优先级....................................................79 4.显示外设的连接关系....................................................................79 5.指定其他的NiosII设定..................................................................80 6.生成SOPC Builder目标系统.........................................................80 7.将目标集成到Quartus项目中........................................................81 8.下载硬件设计到目标FPGA..........................................................83 9.使用NiosII IDE开发软件..............................................................83 附录:.......................................................................................................88
3
实验1:Quartus入门
Quartus的学习以及了解DE2,通过简单step by step例子的引导。 本实验通过几个简单的例子向大家介绍FPGA开发软件QuartusII的使用流程。
1、2输入与门(电路功能略)
实验步骤:
第1步:打开QuartusII。 第2步:新建一个空项目。
执行File->New Project Wizard命令,进入新建项目向导。如下图所示,填入项目的名称,默认项目保存路径在Quartus安装下,也可修改为其他地址,视具体情况而定。
1
第3步:执行Next,进入向导的下一页进行项目内文件的添加操作,如果没有文件需要添加进项目,则直接按Next按钮既可。
第4步:指定CPLD/FPGA器件,如下图所示,选择芯片系列为“CycloneII”,型号为“EP2C35F672C6N”。选择型号时,可直接在列表框中查找,也可通过指定封装方式(Package)为“FBGA”、引脚数(Pin count)为“672”以及速度等级(Speed grade)为“6”这3个参数值来进行筛选。
7
第13步:功能仿真。
选择Processing->Simulator Tool,窗口如下图所示。选择仿真模式(Simulator mode)为“Functional”,并选择and2gate.vwf文件作为仿真输入(Simulation input)波形文件。点击Generate Functional Simulation Netlist按钮,生成仿真网表。然后点击Start按钮,开始仿真。在仿真完成后,点击Report按钮即可观看仿真的结果,如下图所示。从波形可以看出,程序的逻辑功能是正确的。
8
第14步:时序仿真。
再次选择Processing->Simulator Tool,并将仿真模式设为“Timing”,然后点击Start按钮。最后点击Report按钮查看仿真结果,结果如下图。与功能仿真结果图相比较,可以看出时序仿真的输出带有一定的延迟。
9
第15步:引脚分配。 在之前的编译过程中,Quartus软件已经自动为设计分配了引脚。而在DE2平台上,FPGA与外部器件的连接是确定的,其连接关系可参看附录A和B。如果选择SW0和SW1分别代表输入信号a和b、LEDG0代表输出信号y,则通过附录B查表可知它们分别对应FPGA的引脚PIN_N25、PIN_N26和PIN_AE22。
选择Assignments->Pins命令,打开引脚规划器(Pin Planner),如下图所示。接着双击信号a的Location栏,在下拉框中选择PIN_N25,其他信号通过相同的办法进行分配。
10
第16步:在仿真正确,并锁定自定引脚后,通过按钮对项目再次编译。
第17步:程序下载(配置FPGA)。
用USB连接线连接DE2的USB Blaster端口和电脑即可进行程序的下载。在DE2平台上,可以对FPGA进行两种模式配置:一种是JTAG模式,通过USB Blaster直接配置FPGA,但掉电后,FPGA中的配置内容会丢失,再次上电需要用电脑重新配置;另一种是在AS模式下,通过USB Blaster对DE2平台上的串行配置器件EPCS16进行编程,平台上电后,EPCS16会自动配置FPGA。通过DE2平台上的SW19选择配置模式,SW19置于RUN位置,即选择JTAG模式配置;置于PROG位置,则选择AS模式对EPCS16进行编程。
第18步:JTAG模式配置。
1)用USB连接线连接DE2和电脑,将SW19置于RUN位置。选择Tools->Programmer命令,打开配置窗口,如下图所示。
11
2)图中第一列显示“No Hardware”,说明未指定硬件设备,单击Hardware Setup按钮,打开硬件设置窗口,如下图所示。双击列表框中的USB-Blaster,然后点击Close按钮,完成硬件设置。
3)从下图可以看出,硬件已经设置完成,而且待配置的文件也已经在文件列表中。然后选中Program/Config选项,单击Start按钮,开始编程。编程结束后,即可在DE2上验证,将SW0和SW1置于1的位置,可以看到LEDG0灯亮。
12
第19步:AS模式配置。
1)首先需要设置串口配置器件,选择Assignments->Settings命令,打开设置窗口如下图所示。
2)单击Device&Pin Options..按钮,打开器件及引脚选项窗口,如下图所示。切换到Configuration页。在Configuration Device下拉框
13
中选择“EPCS16”,单击OK按钮结束配置。
3)将DE2上的SW19置于PROG位置。重新选择Tools->Programmer命令,打开编程窗口,在Mode下拉框中选择“Active Serial Programming”,这时会弹出下图的对话框,提示是否清除现有编程器件,选择“是”即可。
4)接着需要重新添加配置文件,单击Add Files按钮,添加and2.pof配置文件。选中Program/Config选项。单击Start按钮,开始编程。
14
编程结束后,将SW19置于RUN位置,再进行测试。
2、简单电路的设计
用上面同样的方法设计以下3个简单的电路。 1.三态门
电路中共有2个输入信号:数据输入信号din和三态使能信号en。还有一个输出信号dout。三态门的逻辑功能是:当en='1'时,dout<=din;当en='0'时,dout<='Z'。
VHDL程序如下: library ieee;
use ieee.std_logic_1164.all; entity trigate is port(
din,en:in std_logic;
15
dout:out std_logic); end trigate;
architecture behave_trigate of trigate is begin
process(en,din) begin
if (en='1')then dout<=din; else
dout<='Z'; end if;
end process;
end behave_trigate; 实验步骤如下:
第1步:在前面那个项目的基础上新建一个VHDL文件,起名为trigate.vhd,并输入上方的源程序。
第2步:在项目导向(Project Navigator)窗口中,选择文件(Files)管理页面,点开Device Design Files项,右击trigate.vhd文件,选择“Set as Top-Level Entity”选项。目的是将trigate.vhd文件设为项目的顶层实体。
16
第3步:对源程序进行语法检查,直到程序无误。
第4步:功能仿真,新建矢量波形图,起名为trigate.vwf,仿真结果如下图。
第5步:按照下表进行引脚分配。重新编译,并下载。
FPGA信DE2板上号 引脚 器件 dPIN_SW0 in N25 ePIN_SW1 n N26 dPIN_LEDG0 out AE22
17
2.三态与门
利用前面已完成的与门和三态门组合成一个三态与门。与前面两个例子不同的是,在这里不是采用文本编辑器完成设计输入,而是采用图形编辑器。
实验步骤如下:
第1步:首先将上述两个VHDL文件生成为符号(Symbol),以供后续步骤使用。右击and2gate.vhd,选择Create Symbol Files for Current File命令,即生成了and2gate符号。用同样的方法生成trigate符号。
第2步:新建一个图形文件。选择File->New命令,选择“Diagram/Schematic File”,点击OK按钮完成。将该图形文件另存为tri_and_gate.bdf。图形编辑窗口如下图所示,窗口左边是图形编辑
18
工具条。
第3步:在图形编辑窗口的空白处双击,打开符号库,如下图所示。展开Project项,可以看到有两个之前生成的符号分别是and2gate和trigate。选择and2gate,单击OK按钮,该符号就会出现在图形编辑窗口,单击左键即在窗口内放置该符号。用同样的方法放置trigate符号。
19
第4步:再次打开符号,在name输入栏中输入“input”,符号库自动在库中找到输入(input)符号,并选中“Repeat-insert mode”点击OK按钮,可反复在编辑窗口中放入输入符号,直单击右键取消放置为止。由于输入信号一共有3个,所以需要放入3个输入符号,并将3个输入符号命名为dina、dinb和en。用同样的方法放置1个输出(output)符号,并命名为dout。再选择工具栏中的按钮,将各符号连接起来,结果如图所示。
20
第5步:保存图形文件,并将tri_and_gate.bdf设置为顶层实体。再次编译项目文件,并进行功能仿真,仿真结果如图所示。
第6步:按照下表分配引脚,重新编译并下载验证。
FPGA信DE2上的号 引脚 器件 dPIN_SW0 ina N25 dPIN_SW1 inb N26 ePIN_SW2 n P25 dPIN_LEDG0 out AE22
21
实验2:简单的组合逻辑电路设计 1.2选1的数据选择器
具体步骤:
第1步:新建一个Quartus项目。
第2步:在Quartus项目中新建一个VHDL文件,并命名为mux_2to1.vhd,实现2选1的电路功能,其真值表和电路符号如下图所示。即当s=1时,输出m=y;当s=0时,输出m=x。
代码一:VHDL程序代码如下。 library ieee;
use ieee.std_logic_1164.all; entity mux_2to1 is port(
22
s,x,y:in std_logic; m:out std_logic); end mux_2to1;
architecture behave_mux_2to1 of mux_2to1 is begin
m<=x when s='0' else y ;
end behave_mux_2to1;
第3步:语法检查通过后,进行引脚分配,分配表如下表所示。然后再编译,下载验证。
FPGA信DE2上的号 引脚 器件 sPIN_SW0 N25 xPIN_SW1 N26 yPIN_SW2 P25 mPIN_LEDG0 AE22
2.8位宽2选1的数据选择器
在完成2选1数据选择器之后,将信号x和y的位宽由1位扩展为8位。
更改后的电路图如下:
23
实验步骤如下:
第1步:在代码一中,实体部分关于端口的说明也更改为: entity mux_2to1_8bit is port(
s:in std_logic;
X,Y:in std_logic_vector(7 downto 0); M:out std_logic_vector(7 downto 0)); end mux_2to1_8bit;
而结构体部分代码不变,代码修改后另存为mux_2to1_8bit.vhd。 第2步:接着把mux_2to1_8bit.vhd设定为项目的顶层设计文件。实现方法如下图所示,在项目浏览器(Project Navigator)中选择文件(Files)页,选中mux_2to1_8bit.vhd,单击右键,选择“Set as Top-Level Entity”命令即可。
24
第3步:语法检查,检查通过后再进行引脚分配。
引脚数也由原来的4个增加到25个,引脚分配更改如下表所示。分配完后重新编译项目文件,并下载验证。 FPGA信DE2上的器引脚 号 件 s PIN_SW0 N25 X[查附SW8~7..0] 录表 SW1 Y[SW16~SW同上 7..0] 9 MLEDG7~L同上 [7..0] EDG0
25
3.4选1的数据选择器
在完成2选1电路之后,将电路扩展为4选1数据选择器,电路及其真值表如下图所示。
代码修改如下: library ieee;
use ieee.std_logic_1164.all; entity mux_4to1 is port(
s:in std_logic_vector(1 downto 0); u,v,w,x:in std_logic; m:out std_logic );
end mux_4to1;
architecture behave_mux_4to1 of mux_4to1 is begin
26
m<=u when s=\ v when s=\ w when s=\ x;
end behave_mux_4to1;
文件另存为mux_4to1.vhd。
接着将mux_4to1.vhd设定为项目的顶层设计文件,再进行语法检查和引脚分配。
引脚分配表如下表所示,具体的FPGA引脚可通过查找附录表获取。分配完后重新编译项目文件,并下载验证。
信DE2上的号 器件 SSW1~S[1..0] W0 u SW2 v SW3 w SW4 x SW5 mLEDG0
4.实现3位宽的4选1数据选择器。
电路如下图所示。代码完成后,另存为mux_4to1_3bit.vhd。
27 28
实验3:七段数码管显示 1.显示简单字符
七段数码管显示电路如下图所示:
图中包含一个七段解码器模块,c2~c0是解码器的3个输入,当输入值不同时,输出不同的字符。如表中所示,当输入值为100~111时,输出空格,即数码管全暗。七段数码管的不同段位用数字0~6表示,注意七段数码管是共阳极的,即各管段输入低电平时,数码管亮;否则数码管暗。
具体实验步骤如下:
第1步:新建一个Quartus项目。 第2步:新建一个VHDL文件,实现上述七段解码器。具体代码如下: library ieee;
use ieee.std_logic_1164.all; entity char_7seg is
29
port(
c:in std_logic_vector(2 downto 0); hex:out std_logic_vector(6 downto 0)); end char_7seg;
architecture behave_char_7seg of char_7seg is begin
with c(2 downto 0) select
hex<= \ \ \ \ \ end behave_char_7seg;
保存VHDL文件,并命名为char_7seg.vhd。
第3步:语法检查,通过后,进行引脚分配,分配表如下:
信DE2上的号 器件 C[2SW2~S..0] W0 hexHEX0[6.[6..0] .0]
第4步:编译项目,完成后下载到FPGA中,并验证其功能。
30
2.显示0~9数字
在完成简单字符显示电路之后,设计一个用于显示0~9数字的七段数码管电路。电路图如下图所示,c3~c0是七段数码器的输入,当输入0000~1001时,则输出0~9,如表中所示;当输入1010~1111时,输出空格。
对上述代码进行相应的修改,并将文件另存为num_7seg.vhd。 接着将num_7seg.vhd设定为项目的顶层设计文件,再进行语法检查和引脚分配。
引脚分配表如下表所示,具体的FPGA引脚可通过查找附录表获取。分配完后重新编译项目文件,并下载验证。
信DE2上的号 器件 C[3SW3~S..0] W0 hexHEX0[6.[6..0] .0]
31
3.循环显示4个字符
循环显示4个字符的电路图如下: 电路的工作原理是,输入端U、V、W和X的输入值分别是000、001、010和011,通过s1和s0选择四个输入端其中一个作为七段解码器的输入值,从而显示H、L、E和O任一字符。
这个实验的实现方法有两个,一个是采用图形编辑的方法实现,与实验1中三态与门的实现方法类似。不过事先需要将实验2中的mux_4to1_3bit.vhd添加到本项目中,并为其创建一个符号;同时,为char_7seg.vhd创建一个符号。另一个方法是采用VHDL文本输入,但也需要事先将实验2中的mux_4to1_3bit.vhd添加到本项目中。
方法一:
图形文件的最终效果图如下图所示。图中的inst1和inst分别是mux_4to1_3bit.vhd和char_7seg.vhd所生成的符号。
32
值得注意的是,s[1..0]与输入引脚SW[1..0]连接,其他输入端类似,而hex[6..0]与输出引脚HEX0[6..0]连接。这里的输入和输出引脚全部采用DE2的引脚名称(注意区分大小写),目的是可以省去手动分配引脚的工作。
第1步:首先将图形文件另存为char_4to1_7seg.bdf,并将该文件设定为项目的顶层设计文件,再进行语法检查。
第2步:检查通过后,打开引脚规划(Pin Planner)窗口,命令是Assignments->Pins。
第3步:选择Assignments->Import Assignments..命令,导入DE2_pin_assignments.csv文件,该文件是DE2板上所有引脚的分配。导入之后,可以发现所有输入和输出引脚已经自动完成引脚分配,原因是我们把引脚的名称设定为DE2默认的引脚名称。
第4步:编译下载。 方法二:
通过VHDL代码实现,这里需要用到元件的概念。整个文件的代码如下:
library ieee;
use ieee.std_logic_1164.all;
33
entity char_4to1_7segv is port(
s:in std_logic_vector(1 downto 0);
U,V,W,X:in std_logic_vector(2 downto 0); hex0:out std_logic_vector(6 downto 0)); end char_4to1_7segv;
architecture behave_char_4to1_7segv of char_4to1_7segv is component char_7seg is port(
c:in std_logic_vector(2 downto 0); hex:out std_logic_vector(6 downto 0)); end component;
component mux_4to1_3bit is port(
s:in std_logic_vector(1 downto 0);
u,v,w,x:in std_logic_vector(2 downto 0); m:out std_logic_vector(2 downto 0)); end component;
signal mout:std_logic_vector(2 downto 0); begin
34
u1:mux_4to1_3bit port map(s,U,V,W,X,mout); u2:char_7seg port map(mout,hex0) ; end behave_char_4to1_7segv;
代码中用红色标识出来的就是元件的定义和调用部分。将文件另存为char_4to1_7segv.vhd,并将其设定为项目的顶层设计文件。再进行语法检查、引脚分配和编译下载。
实验4:BCD码显示及运算 1.二进制码到BCD码的转换
二进制码与BCD码之间的转换关系见下表:
表中将4位二进制输入V=v3v2v1v0转换成2位十进制D=d1d0,实现办法是用SW[3..0]作为二进制输入,而用HEX1和HEX0作为十进制输出的显示。从上述表中可以看出,当V<=9时,d1=0、d0=V;反之,d1=1、d0=V-10。
35
实验步骤如下:
第1步:新建一个Quartus项目。 第2步:建立一个VHDL文件,根据上述工作原理编写代码以实现所要求的电路,文件另存为bin_bcd.vhd。由于程序中用到了二进制码与十进制数之间的比较,所以需要添加一个程序包如下:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
第3步:完成代码转换之后,需要将BCD码在数码管上显示,所以需要在项目中添加实验3中完成的num_7seg.vhd文件。
第4步:采用图形编辑方法或元件调用方法都可以完成最终的电路功能。
第5步:编译并下载验证。
2.1位BCD加法器
电路原理是输入两个BCD码A和B以及1位进位输入cin,输出是BCD码的和sum以及1位进位输出cout。例如当A=1001(9)、B=1001(9)、cin=1时,cout=1,sum=1001(9)。电路的输出最大值也就是19。
1位BCD加法器可以利用两个二进制加法器实现,其原理如下图所示。在VHDL中,二进制加法可以直接用A+B实现。不过前提
36
是需要使用std_logic_unsigned.all这个程序包。 程序的部分代码如下: …..
signal m:std_logic_vector(4 downto 0); signal c:std_logic; begin
m<=('0'&A)+('0'&B)+cin;
c<=m(4) or (m(3) and m(2)) or (m(3) and m(1)); cout<=c;
sum<=m(3 downto 0)+('0'&c&c&'0'); …….
这个程序完全是按照上述工作原理图得出的,文件另存为bcd_add_1bit.vhd。由于需要将结果值在数码管上显示,所以需要在项目中添加实验3中完成的num_7seg.vhd文件。
验证电路时可以用SW[0]作为cin输入端,SW[4..1]、SW[8..5]分别作为A和B的输入端,HEX0作为sum的输出端,LEDG[0]作
37
为cout的输出端。
3.2位BCD加法器
从1位BCD加法器扩展为2位BCD加法器,可以采用图形编辑器和VHDL文本输入两种方法实现。输入两个2位BCD码A1A0和B1以及1位进位输入cin,输出2位BCD码和S1S0和1位进位输出cout。验证电路时可用SW[8..1]表示A1A0,SW[16..9]表示B1,SW[0]表示cin;HEX1和HEX0
B0
B0
表示S1S0,LEDG[0]表示cout。
方法1:采用图形编辑器的方法,最终效果图如下所示。
方法2:采用1位BCD加法器的设计思路重新设计一个2位BCD加法器,以下是实现2位BCD加法器的伪代码,可作为编程的思路。
1 T0 = A0 + B0 2 if(T0 > 9) then 3 Z0 = 10; 4 c1 = 1; 5 else
正在阅读:
现代数字系统实验07-08
最新重大危险源公示牌(完整)01-06
山西省忻州市高中生物专题1课题1果酒和果醋的制作测试题新人教版06-03
高三山水田园诗鉴赏08-15
交直流调速实验报告(图形 文字)-电力牵引交流传动系统04-12
气功内练的三个层次04-07
莎士比亚说02-11
2018届高考地理课标版一轮总复习检测:第四单元 地球上的水 第二03-11
冀州中学官方网站02-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 数字
- 现代
- 系统
- 汾西两起事故附件1
- 2018山东省临沂市中考化学试题及答案
- SEL551微机保护说明书
- 谈谈工程项目快速报价系统资料库建立
- 2011年海南高考物理试题及答案(word) - 图文
- 基于matlab的FM调制
- 停车管理方案
- 2016农村发展党员自查报告
- 循环法测铁氰化钾
- 浙江钱江生物化学股份有限公司 - 图文
- 2016年危化生产管理人员题库
- 大力开发人才资源助推工业强县战略
- 酒店礼宾部英语新版 - 图文
- 语文s版三年级上册第五单元导学案
- 人教版《道德与法治》七年级上册重要知识点归纳
- 翻译研究中的概念混淆(翻译策略、方法与技巧)).
- 22015—2016学年第二学期小学六年级语文期末检测卷
- 张勇论文
- 中国碳排放交易产业研究报告
- 论文浅谈幼儿绘画活动中创造能力的培养