EDA模块化实验指导书docxWord格式.docx
《EDA模块化实验指导书docxWord格式.docx》由会员分享,可在线阅读,更多相关《EDA模块化实验指导书docxWord格式.docx(14页珍藏版)》请在冰豆网上搜索。
用层次化设计方法利用已完成的2位计数器设计一个4位的计数器。
实验3计数译码显示电路的设计
(1)学会简单的计数译码显示电路的VHDL设计;
(2)学会VHDL的多进程及多层次设计方法。
译码显示通常采用小规模专用集成电路,如74或4000系列的器件。
它们一般只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以4位二进制计数器是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA和CPLD中来实现。
程序8-1是能够完成4位二进制计数和7段BCD码译码的VHDL源程序,输出信号DOUT的7位分别与图8-20所示数码管的7个段相接,高位在左,低位在右。
例如当DOUT输出为“1101101”时,数码管的7个段:
g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;
接高电平的段发亮,于是数码管显示“5"
。
这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,然后将LED7S改为8位输出。
(1)说明程序8-1中各语句的含义以及该例的整体功能。
在MAX+plusII中对程序8-1进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形(提示:
用输入总线的方式给出输入信号仿真数据)。
(2)引脚锁定及硬件测试。
操作方法:
建议将CLK,EN,CLR,锁定在JP3插槽内然后将三者的引脚与实验箱上“高低电平输出控制开关”模块连接来控制输入高低电平,将7个输出锁定于JP2插槽内同时将7个输出引脚与实验箱上的“七段译码显示”数码管相连接通过此数码管来观察译码显示结果。
(注意:
在锁定7个输出引脚时一定要注意锁定的顺序,防止因锁定顺序不对而产生错误结果。
)锁定引脚时,要根据选用的芯片,系统结构图信号名与芯片引脚对照表来确定引脚号。
用输入总线的方式给出输入信号仿真数据)。
(3)将程序8-1改成10进制7段译码器重复以上实验。
4.选做内容
试用层次化设计方式重复以上实验。
可用VHDL文本输入法先设计底层文件,即4位二进制计数器COUNT4B和译码器DECL7S,其源程序分别见程序8-2和程序8-3,然后用元件例化语句按图8-21的方式或用原理图方式完成顶层文件设计,并重复以上实验过程。
图8-21用计数器和译码器构成顶层文件
5.举一反三
(1)设计一个能递增显示各种不同符号的显示器,工作方式同此示例。
(2)设计一个26进制加法计数器和一个译码器,利用状态机的逻辑表达方式来设计译码器,将此加法计数器的26个输出数分别译成对应于7段数码显示的26个英语字母。
说明计数译码显示电路的工作原理;
写出VHDL源程序、软件编译、仿真过程中存在的问题及解决方法,并给出仿真波形图及硬件测试和实验方法。
7.参考程序
【程序8-1]
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDECLEDIS
PORT(CLK:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
-7段输出
ENDDECLED;
ARCHITECTUREbehavOFDECLEDIS
SIGNALCNT4B:
STD_LOGIC_VECTOR(3DOWNTO0);
-4位加法计数器足义
BEGIN
PROCESS(CLK)-4位二进制计数器工作进程
IFCLK'
EVENTANDCLK=TTHEN
CNT4B<
=CNT4B+1;
--当CLK上升沿到来时计数器加1否则保持原值
ENDIF;
ENDPROCESS;
PROCESS(CNT4B)
CASECNT4BIS-CASE_WHEN语句构成的译码输出电路功能类似于真值表
WHEN"
0000"
=>
DOUT<
="
0111111"
;
-显示0
0001"
="
0000110"
-显示1
0010"
1011011"
-显示2
0011"
1001111"
-显示3
0100"
1100110"
-显示4
0101"
1101101"
-显示5
0110"
DOUT<
1111101"
-显示6
0111"
0000111"
-显示7
1000"
1111111"
-显示8
1001"
1101111"
-显示9
1010"
1110111"
-显示A
1011"
1111100"
-显示B
1100"
0111001"
-显示C
1101"
1011110"
-显示D
1110"
1111001"
-显示E
1111"
1110001"
-显示F
WHENOTHERS=>
0000000"
-必须有此项
ENDCASE;
ENDbehav;
【程序8-2】
ENTITYcount4bIS
PORT(elk:
clr,en:
q:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcount4b;
ARCHITECTUREbehavOFcount4bIS
PROCESS(elk,clr,en)
IFclk'
EVENTANDelk=TTHEN
IFen='
l'
then
IFclr=TTHEN
q<
ELSE
qv=q+l;
【程序8-3]
ENTITYDecl7sIS
PORT(a:
INSTD_LOGIC_VECTOR(3DOWNTO0);
led7s:
ENDDec17s;
ARCHITECTUREbehavOFDecl7sIS
PROCESS(a)
CASEaIS-CASE.WHEN语句构成的译码输出电路功能类似于真值表
led7s<
-
显示
显示1
显示2
3
显示4
显示5
led7sv=”1111101”;
显示6
7
led7sv=”1111111”;
8
1001"
9
A
1011"
B
=”0111001”;
显示C
lOllllO"
D
1110"
E
1111"
F
—
必须有此项
实验4——计数器的设计
1.实验目的:
(1)学会各种计数器的VHDL描述方法;
2.实验原理:
程序8-4描述的是一个含计数使能、异步复位和计数值并行预置功能的8位并行预置加法计数器。
其中,d(7DOWNTO0)为8位并行预置输入值;
Id、ce、elk和rst分别是计数器的并行预置输入的使能信号、计数时钟使能信号、计数时钟信号和复位信号。
需要注意的是,由程序8-4可见,在加载信号Id为高电平的时间内必须至少含有一个时钟上升沿。
3.实验步骤
(1)将程序8-4取名counter.vhd存入自己设定的目录,在MAX+plusII上进行编译直到通过,然后选择目标器件为EP3C40Q240C8,再进行一次编译,这一步对各个实验都一样,故以后不再重复。
(2)在做硬件测试时,建议将时钟脉冲输入端,时钟使能端,清零端,加减控制端锁定在JP2插槽内,另外将时钟脉冲输入端与“标准时钟信号源“模块相连接以此获得脉冲的输入。
将其余几个引脚与实验箱上“高低电平输出控制开关”模块连接来控制输入高低电平。
将输出端锁定于JP3插槽内,然后将输出引脚与实验箱上有“六个数码管”的副板上一个数码管下的插槽相连接,通过数码管来观察计数结果。
(注意:
在锁定输出引脚时一定要注意锁定的顺序,防止因锁定顺序不对而产生错误结果)。
4.选做内容:
(1)修改程序8-4,使计数器变为以时钟下降沿触发,并作减法计数。
(2)程序8-5描述的计数器对程序8-4作了扩展,它扩展了加减计数可控功能,且程序的计数位宽可通过类属GENERIC设置。
试将程序8-5设置成8位计数器,并在EP3C40Q240C8系统上测试其功能。
5.实验报告
(1)在QuartusII中完成程序8-4的完整仿真时序波形,并给出波形分析报告。
(2)写出硬件测试和实验过程;
(3)在QuartusII中完成程序8-5的完整仿真时序波形,并给出波形分析报告。
6.参考程序
【程序8-4】文件名:
counter,vhd
ENTITYcounterIS
PORT(Id,ce,elk,rst:
d:
INSTD_LOGIC_VECTOR(7DOWNTO0);
-8位预置值定义
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDcounter;
ARCHITECTUREbehaveOFcounterIS
SIGNALcount:
STD_LOGIC_VECTOR(7DOWNTO0);
PROCESS(elk,rst)
IFrst='
1'
THENcount<
=(OTHERS=>
0'
);
--复位有效,计数置0
ELSIFRISING_EDGE(clk)THEN--有脉冲上升沿,贝U
IFld=TTHENcount<
=d;
--预置信号为1时,进行加载操作
ELSIFce=TTHEN--否则,在计数使能信号为高电平时
count<
=count+1;
--进行一次加1操作
q<
=count;
--将计数器中的值向端口输出
ENDbehave;
【程序8-5】文件名:
counterl.vhdLIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcounterlISGENERIC(width:
INTEGER:
=4);
--设置计数器位宽为4
PORT(elk,rst:
up,down,load:
data:
INSTD_LOGIC_VECTOR(width-1DOWNTO0);
BUFFERSTD_LOGIC_VECTOR(width-1DOWNTO0));
ENDcounterl;
ARCHITECTUREbehaveOFcounterlISBEGIN
VARIABLEcount:
STD_LOGIC_VECTOR(width-1DOWNTO0);
BEGIN
IFrst=TTHEN
count:
=(OTHERS=>
ELSIFRISING_EDGE(elk)THENIF(load=T)THENcount:
=data;
ELSIF(up=TORdown='
)THENIF(up=T)THENcount:
=count+1;
ELSEcount:
=count-1;
ENDIF;
q<
ENDPROCESS;
ENDbehave;
实验5—用LPM设计8位数控分频器和4位乘法器
掌握LPM模块的参数设置方法以及设计和应用方法。
2,实验原理
对于高速测控系统,影响测控速度最大的因素可能是,在测得必要的数据并经过复杂的运算后,才能发出控制指令。
因此数据的运算速度决定了此系统的工作速度。
为了提高运算速度,可以用多种方法来解决,如高速计算机、纯硬件运算器、ROM查表式运算器等。
用高速计算机属于软件解决方案,
用纯硬件运算器属于硬件解决方案,而用ROM属于查表式运算解决方案。
数控分频器和乘法器的设计原理已在6.2.1节中作了详细描述。
8位数控分频器原理图
4位乘法器原理图
AD[3..O]
|ADI[3..O]|>
唧|_T
,AD[7..41
1ADh〔7..4]耕
(1)设计一个4X4bit查表式乘法器。
包括创建工程、调用LPM_ROM模块、在原理图编辑窗中绘制电路图,全程编译,对设计进行时序仿真,根据仿真波形说明此电路的功能,引脚锁定编译,编程下载于FPGA中,进行硬件测试。
完成实验报告。
乘法表文件是例4-1o其中的地址/数据表达方式是,冒号左边写ROM地址值,冒号右边写对应此地址放置的16进制数据。
如47:
28,表示47为地址,28为该地址中的数据,这样,地址高4位和低4位可以分别看成是乘数和被乘数,输出的数据可以看成是它们的乘积。
按照6.2.1节介绍的设计原理和流程,分别使用LPM_COUNTER和LPM_ROM设计8位数控分频器和4位乘法器。
然后进行波形仿真和硬件测试,建议选择实验电路结构图NO.3o
(2)按照以上流程和要求分别对LPM库中的先进先出寄存器LPM_FIFO、乘法器LPM_MULT、双口随机存储器LPM_RAM_DQ和移位寄存器LPM_SHIFTREG进行仿真测试与旎件实验验证。
(1)在做硬件测试时建议对于8位数控分频器它的8个预置数端锁定于JP2插槽内然后再将其引脚与实验箱上有“六个数码管”的副板上HEX码输出控制键插槽相连接以此获取预置数。
然后将udcnt,clk,clken,clr,qout锁定于JP3插槽内,然后将qout与实验箱上"
发光管显示模块”相连接来观察。
将其余几个引脚与实验箱上“高低电平输出控制开关”模块连接来控制输入高低电平,接着将8个本位输出引脚与实验箱上有“六个数码管”的副板上一个数码管下的插槽相连接,通过数码管来观察分频器数据变化情况。
(2)对于4位乘法器的硬件测试建议将8个数据输入端锁定于JP2插槽内然后将输入引脚与实验箱上有“六个数码管”的副板上"
HEX码输出控制键“插槽相连接以此获取乘法器的输入。
然后时钟输入端CLK锁定于137引脚,再将此引脚与“标准时钟信号源“模块相连接以此获得脉冲的输入。
然后将8个输出锁定于JP3插槽内,接着将8个输出引脚与实验箱上有"
六个数码管”的副板上一个数码管下的插槽相连接,通过数码管来观察数据相乘后的结果。
(注意在锁定引脚时要按顺序来锁定,例如AD[3..O]锁于PIN37,PIN38,PIN39,PIN41引脚,同样的对于总线形式的引脚锁定更应注意引脚锁定的顺序。
根据以上的实验内容写出实验报告,包括原理图设计、编译出现的问题及解决办法、仿真波形图,并分析硬件测试和实验过程等。
【例4-1】
WIDTH=8;
DEPTH=256;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENTBEGIN
00:
00;
01
:
02
03
04
05
06
07:
08:
09:
10:
11
:
01;
12
02;
13
03;
14
04;
15
05;
16
06;
17
07;
18
08;
19
09
20:
21
22
23
24
25
10;
26
12;
27:
14;
28:
16;
29:
18;
30:
31
32
33
09;
34
35
15;
36
37:
21;
38:
24;
39:
27;
40:
41
42
43
44
45
20;
46
47:
28;
48:
32;
49:
36;
50:
51
52
53
54
55
25;
56
30;
57:
35;
58:
40;
59:
45;
60:
61
62
63