vhdl实验手册.docx
《vhdl实验手册.docx》由会员分享,可在线阅读,更多相关《vhdl实验手册.docx(30页珍藏版)》请在冰豆网上搜索。
vhdl实验手册
EDA实验指导书
ElectronicDesignAutomation
张伟、郭顺京编
电工电子实验中心
目录
实验一七人表决器设计1
实验二计数器3
实验三多路选择器6
实验四8-3优先编码器的VHDL设计8
实验五七段数码显示译码器设计11
实验六扫描显示驱动电路设计13
实验七半加器的VHDL设计16
实验八全加器的VHDL设计18
实验九触发器的VHDL设计20
实验十多功能数字钟的VHDL设计23
实验一七人表决器设计
一、实验任务及要求
实验目的:
学习VHDL的CASE语句应用及多层次设计方法。
实验内容:
参加表决者7人,同意者过半则表决通过。
二、实验仪器
计算机、Max+plusII或QuartusII软件、GW48型EDA实验箱
三、设计说明与提示
开关设置:
JP1:
K1-k8
L9-L16
其它
插上
插上
不插
操作运行:
K1~K7代表七个表决者,同意时将开关设为高电平,否则置为低;表决通过时绿灯亮(L16),不通过则黄灯亮(L15)。
程序设计提示
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYvote7IS
PORT
(men:
INstd_logic_vector(6downto0);
pass,stop:
bufferstd_logic
);
ENDvote7;
ARCHITECTUREbehaveOFvote7IS
BEGIN
stop<=notpass;
PROCESS(men)
variabletemp:
std_logic_vector(2downto0);
BEGIN
temp:
="000";
foriin0to6loop
if(men(i)='1')then
temp:
=temp+1;
else
temp:
=temp+0;
endif;
endloop;
pass<=temp
(2);
ENDPROCESS;
ENDbehave;
四、实验报告要求
实验报告:
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。
实验二计数器
一、实验任务及要求
1、设计一个带使能输入及同步清0的增1计数器,仿真波形图见图20-1,实验源程序名是counter1.vhd;
2、设计一个带使能输入及同步清0的增1/减1的8位计数器,仿真波形图见图20-2A和20-2B,实验源程序名是up-down.vhd。
二、实验仪器
计算机、Max+plusII或QuartusII软件、GW48型EDA实验箱
三、设计说明与提示
图20-1计数器2波形图
图20-2A加减控制计数器波形图
在用VHDL语言描述一个计数器时,如果使用了程序包ieee.std_logic_unsigned,则在描述计数器时就可以使用其中的函数“+”(递增计数)和“-”(递减计数)。
假定设计对象是增1计数器并且计数器被说明为向量,则当所有位均为‘1’时,计数器的下一状态将自动变成‘0’。
举例来说,假定计数器的值到达“111”是将停止,则在增1之前必须测试计数器的值。
图20-2B加减控制计数器波形图
如果计数器被说明为整数类型,则必须有上限值测试。
否则,在计数顺值等于7,并且要执行增1操作时,模拟器将指出此时有错误发生。
实验连线:
实验输入信号有clk(时钟信号)、clr(复位信号)、en(使能控制输入信号),clk用CPLD/FPGA适配器板子上的时钟信号,接数字信号源的CLK5,频率调节到1Hz左右,clr、en接拨码开关,工作时clr为低电平,en为高电平;输出信号有Q0~Q3,接LED灯。
实验2输入信号有clk(时钟信号)、rst(复位信号)、en(使能控制输入信号)、up(加减控制输入信号),clk用CPLD/FPGA适配器板子上的时钟信号,接数字信号源的CLK5,频率调节到1Hz左右,rst、en、up接拨码开关,工作时rst和en为高电平,up为高电平时增计数,为低电平时减计数;输出信号有SUM0~SUM2(代表输出数据)和COUT(代表进位或借位),都接LED灯。
在做实验时,请注意仿真波形图中各个输入信号的有效电平。
下面的例子是一个3位增1/减1计数器:
当输入信号UP等于1时计数器增1;当输入信号UP等于0时计数器减1。
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityup_downis
Port(clk,rst,en,up:
instd_logic;
Sum:
outstd_logic_vector(2downto0);
Cout:
outstd_logic);
End;
Architectureaofup_downis
Signalcount:
std_logic_vector(2downto0);
Begin
Process(clk,rst)
Begin
Ifrst=’0’then
Count<=(others=>’0’);
Elsifrising_edge(clk)then
Ifen=’1’then
Caseupis
When‘1’=>count<=count+1;
Whenothers=>count<=count-1;
Endcase;
Endif;
Endif;
Endprocess;
Sum<=count;
Cout<=’1’whenen=’1’and((up=’1’andcount=7)or(up=’0’andcount=0))else‘0’;
End;
参考以上实例完成实验目的中所要求的3个计数器的设计。
四、实验报告要求
实验报告:
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。
实验三多路选择器
一、实验任务及要求
实验目的:
熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
实验内容:
1、利用QuartusⅡ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出图2-2所示的仿真波形。
最后在实验系统上进行硬件测试,验证本项设计的功能。
2、引脚锁定以及硬件下载测试。
若选择目标器件是EP1C6,建议选实验电路模式5(附录图1),用键1(PIO0,引脚号为1)控制s0;用键2(PIO1,引脚号为2)控制s1;a3、a2和a1分别接clock5(引脚号为16)、clock0(引脚号为93)和clock2(引脚号为17);输出信号outy仍接扬声器spker(引脚号为129)。
通过短路帽选择clock0接256Hz信号,clock5接1024Hz,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使扬声器输出不同音调)。
二、实验仪器
计算机、Max+plusII或QuartusII软件、GW48型EDA实验箱
三、设计说明与提示
系统顶层框图:
图2-1双2选1多路选择器
2-2mux21a功能时序波形
程序设计提示
ENTITYmux21aIS
PORT(a,b,s:
INBIT;
y:
OUTBIT);
ENDENTITYmux21a;
ARCHITECTUREoneOFmux21aIS
BEGIN
PROCESS(a,b,s)
BEGIN
IFs='0'THENy<=a;ELSEy<=b;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREone;
四、实验报告要求
实验报告:
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。
附加内容:
根据本实验以上提出的各项实验内容和实验要求,设计1位全加器。
首先用QuartusⅡ完成给出的全加器的设计,包括仿真和硬件测试。
实验要求分别仿真测试底层硬件或门和半加器,最后完成顶层文件全加器的设计和测试,给出设计原程序,程序分析报告、仿真波形图及其分析报告。
实验习题:
以1位二进制全加器为基本元件,用例化语句写出8位并行二进制全加器的顶层文件,并讨论此加法器的电路特性。
实验四8-3优先编码器的VHDL设计
一、实验的目的
1、通过常见基本组合逻辑电路的设计,熟悉EDA设计流程。
2、熟悉文本输入及仿真步骤。
3、掌握VHDL设计实体的基本结构及文字规则。
4、掌握组合逻辑电路的静态测试方法。
5、理解硬件描述语言和具体电路的映射关系。
二、实验仪器
计算机、Max+plusII或QuartusII软件、GW48型EDA实验箱
三、实验内容
1、实验原理:
允许同时在几个输入端有输入信号,编码器按输入信号排定的优先顺序,只对同时输入的几个信号中优先权最高的一个进行编码。
2、实验步骤:
1)、创建工程。
2)、新建文件夹。
3)、输入正确的源程序,保存,编译。
4)、波形仿真,分配引脚,编译。
5)、下载到试验箱,进行功能验证。
(原理图及仿真的波形界面在备注)
8-3编码器如图8-1所示,其真值表如表8-1。
图8-18-3编码器
表8-18-3优先编码器真值表
输入
输出
EIN
0N
1N
2N
3N
4N
5N
6N
7N
A2N
A1N
A0N
GSN
EON
1
X
X
X
X
X
X
X
X
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
0
0
X
X
X
X
X
X
X
0
0
0
0
0
1
0
X
X
X
X
X
X
0
1
0
0
1
0
1
0
X
X
X
X
X
0
1
1
0
1
0
0
1
0
X
X
X
X
0
1
1
1
0
1
1
0
1
0
X
X
X
0
1
1
1
1
1
0
0
0
1
0
X
X
0
1
1
1
1
1
1
0
1
0
1
0
X
0
1
1
1
1
1
1
1
1
0
0
1
0
0
1
1
1
1
1
1
1
1
1
1
0
1
实验源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYENCODERIS
PORT(
D:
INSTD_LOGIC_VECTOR(0TO7);
A:
OUTSTD_LOGIC_VECTOR(0TO2)
);
END;
ARCHITECTUREXIANIOFENCODERIS
BEGIN
PROCESS(D)
BEGIN
IF(D(7)='0')THENA<="111";
ELSIF(D(6)='0')THENA<="110";
ELSIF(D(5)='0')THENA<="101";
ELSIF(D(4)='0')THENA<="100";
ELSIF(D(3)='0')THENA<="011";
ELSIF(D
(2)='0')THENA<="010";
ELSIF(D
(1)='0')THENA<="001";
ELSIF(D(0)='0')THENA<="000";
ELSEA<="ZZZ";
ENDIF;
ENDPROCESS;
END;
四、实验研究与思考
实验报告:
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。
1、时序电路的设计与组合电路的设计有何差别?
2、时序电路的同步设计和异步设计有何不同?
3、异步设计的竞争冒险现象如何产生,应该如何克服竞争冒险现象?
实验五七段数码显示译码器设计
一、实验任务及要求
实验目的:
学习7段数码显示译码器设计;学习VHDL的CASE语句应用及多层次设计方法。
实验原理:
7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。
实验三作为7段译码器设计,输出信号LED7S的7位分别接如图3-1数码管的7个段,高位在左,低位在右。
例如当LED7S输出为“1101101”时,数码管的7个段:
g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。
注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h,例3中的LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)应改为…(7DOWNTO0)。
实验内容:
1、设计7段数码显示译码器电路。
在QuartusII上对该程序进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。
提示:
用输入总线的方式给出输入信号仿真数据,仿真波形示例图如图3-3所示。
2、引脚锁定及硬件测试。
建议选GW48系统的实验电路模式6(参考附录图8),用数码8显示译码输出(PIO46-PIO40),键8、键7、键6和键5四位控制输入,硬件验证译码器的工作性能。
二、实验仪器
计算机、Max+plusII或QuartusII软件、GW48型EDA实验箱
三、设计说明与提示
共阴数码管电路图:
图3-1共阴数码管及其电路
系统顶层框图:
图3-2计数器和译码器连接电路的顶层文件原理图
图3-37段译码器仿真波形
程序设计提示
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECL7SIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREoneOFDECL7SIS
BEGIN
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>LED7S<="0111111";
WHEN"0001"=>LED7S<="0000110";
WHEN"0010"=>LED7S<="1011011";
WHEN"0011"=>LED7S<="1001111";
WHEN"0100"=>LED7S<="1100110";
WHEN"0101"=>LED7S<="1101101";
WHEN"0110"=>LED7S<="1111101";
WHEN"0111"=>LED7S<="0000111";
WHEN"1000"=>LED7S<="1111111";
WHEN"1001"=>LED7S<="1101111";
WHEN"1010"=>LED7S<="1110111";
WHEN"1011"=>LED7S<="1111100";
WHEN"1100"=>LED7S<="0111001";
WHEN"1101"=>LED7S<="1011110";
WHEN"1110"=>LED7S<="1111001";
WHEN"1111"=>LED7S<="1110001";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
四、实验报告要求
实验报告:
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。
实验六扫描显示驱动电路设计
一、实验目的
1、了解实验系统中8位八段数码管显示模块的工作原理;
2、掌握计数器和地址发生器的VHDL描述方法;
3、掌握LED数码管7段译码器的VHDL描述方法;
4、掌握编码器的VHDL描述方法;
5、设计标准扫描驱动电路模块,以备后面实验用。
二、实验仪器
计算机、Max+plusII或QuartusII软件、GW48型EDA实验箱
三、实验内容
图9.1所示的是8位数码扫描显示电路,其中每个数码管的8个段:
h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
其VHDL示例程序如程序10.1所示。
图9.18位数码扫描显示电路图
1、实验内容1:
理解程序中各语句的含义,以及该例的整体功能。
对该例进行编辑、编译、综合、适配、仿真,给出仿真波形。
实验方式:
若考虑小数点,SG的8个段分别与PIO49、PIO48、…、PIO42(高位在左)、BT的8个位分别与PIO34、PIO35、…、PIO41(高位在左);电路模式不限,引脚图参考附图11。
将GW48EDA系统左下方的拨码开关全部向上拨,这时实验系统的8个数码管构成图10.1的电路结构,时钟CLK可选择clock0,通过跳线选择16384Hz信号。
引脚锁定后进行编译、下载和硬件测试实验。
将实验过程和实验结果写进实验报告。
2、实验内容2:
修改例9.1的进程P1中的显示数据直接给出的方式,增加8个4位锁存器,作为显示数据缓冲器,使得所有8个显示数据都必须来自缓冲器。
缓冲器中的数据可以通过不同方式锁入,如来自A/D采样的数据、来自分时锁入的数据、来自串行方式输入的数据,或来自单片机等。
3、自行设定实验步骤和设计纪录方式,完成实验报告
【例9.1】
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSCAN_LEDIS
PORT(CLK:
INSTD_LOGIC;
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);--段控制信号输出
BT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));--位控制信号输出
END;
ARCHITECTUREoneOFSCAN_LEDIS
SIGNALCNT8:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALA:
INTEGERRANGE0TO15;
BEGIN
P1:
PROCESS(CNT8)--编码器
BEGIN
CASECNT8IS
WHEN"000"=>BT<="00000001";A<=1;
WHEN"001"=>BT<="00000010";A<=3;
WHEN"010"=>BT<="00000100";A<=5;
WHEN"011"=>BT<="00001000";A<=7;
WHEN"100"=>BT<="00010000";A<=9;
WHEN"101"=>BT<="00100000";A<=11;
WHEN"110"=>BT<="01000000";A<=13;
WHEN"111"=>BT<="10000000";A<=15;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP1;
P2:
PROCESS(CLK)--计数器
BEGIN
IFCLK'EVENTANDCLK='1'THENCNT8<=CNT8+1;
ENDIF;
ENDPROCESSP2;
P3:
PROCESS(A)–-译码电路
BEGIN
CASEAIS
WHEN0=>SG<="0111111";WHEN1=>SG<="0000110";
WHEN2=>SG<="1011011";WHEN3=>SG<="1001111";
WHEN4=>SG<="1100110";WHEN5=>SG<="1101101";
WHEN6=>SG<="1111101";WHEN7=>SG<="0000111";
WHEN8=>SG<="1111111";WHEN9=>SG<="1101111";
WHEN10=>SG<="1110111";WHEN11=>SG<="1111100";
WHEN12=>SG<="0111001";WHEN13=>SG<="1011110";
WHEN14=>SG<="1111001";WHEN15=>SG<="1110001";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP3;
END;
例9.1是扫描显示的示例程序,其中clk是扫描时钟;SG为7段控制信号,由高位至低位分别接g、f、e、d、c、b、a7个段;BT是位选控制信号,接图5-20中的8个选通信号:
k1、k2、…k8。
程序中CNT8是一个3位计数器,作扫描计数信号,