EDA实验.docx
- 文档编号:3675424
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:38
- 大小:139.05KB
EDA实验.docx
《EDA实验.docx》由会员分享,可在线阅读,更多相关《EDA实验.docx(38页珍藏版)》请在冰豆网上搜索。
EDA实验
实验三 带使能端的3线-8线译码器
三、实验原理
1.设计分析
译码器是将输入的数码解出其对应的数码,例如:
BCD至7段显示器执行的动作就是把一个四位的BCD码转换成7个码的输出,以便在7段显示器上显示这个十进制数。
译码器有N个二进制选择线,那么最多可译码转换成
个数据。
当一个译码器有N条输入线和M条输出线时,则称
的译码器。
本次实验,要求实现
的译码器。
用8位数字开关组(A)的SW5接译码器的使能端EN,即SW5控制使能端EN。
用8位数字开关组(A)的SW6、SW7、SW8分别接译码器的数码输入端A2、A1、A0,即用作编码输入。
用红色信号指示灯的L8~L1分别指示输出信号Y7~Y0的输出电平。
2.VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDecoderIS
PORT(a,b,c,ena:
INBIT;
y:
OUTBIT_VECTOR(7DOWNTO0));
ENDDecoder;
ARCHITECTUREoneOFDecoderIS
BEGIN
PROCESS(a,b,c,ena)
VARIABLEcba:
BIT_VECTOR(2DOWNTO0);
BEGIN
cba:
=(c&b&a);
IF(ena='1')THENy<="11111111";
ELSE
CASE(cba)IS
WHEN"000"=>y<="11111110";
WHEN"001"=>y<="11111101";
WHEN"010"=>y<="11111011";
WHEN"011"=>y<="11110111";
WHEN"100"=>y<="11101111";
WHEN"101"=>y<="11011111";
WHEN"110"=>y<="10111111";
WHEN"111"=>y<="01111111";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
ENDPROCESS;
ENDone;
实验四4位同步二进制加法计数器
三、实验原理
1.设计分析
(1)4位同步二进制加法计数器是表示一个十六进制的加法器,同步是指当时钟信号clk的上升沿到来时,且复位信号clr有效,就把二进制加法计数器的状态清0。
其原理图如下所示
说明:
其中clr是复位信号,clk是时钟信号,上升沿是有效边沿。
co是进位输出信号,cnt[3..0]是4位二进制输出信号。
2.VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYcnt4eIS
PORT(clk,clr:
INSTD_LOGIC;
co:
OUTSTD_LOGIC;
cnt:
BUFFERINTEGERRANGE0TO15);
ENDcnt4e;
ARCHITECTUREoneOFcnt4eIS
BEGIN
PROCESS(clk,clr)
BEGIN
IFclk'EVENTANDclk='1'THEN
IFclr='1'THEN
IFcnt=15THEN
cnt<=0;
co<='0';
ELSIFcnt=14THEN
cnt<=cnt+1;
co<='1';
ELSE
cnt<=cnt+1;
ENDIF;
ELSEcnt<=0;
co<=’0’;
ENDIF;
ENDIF;
ENDPROCESS;
ENDone;
实验五CT74373的设计
三、实验原理
1.设计分析
CT74373是三态输出的8D锁存器,8D锁存器是一种有规律设计结构,用生成语句可以简化它的逻辑描述,生成元件符号,如下:
说明:
其中d[7...0]是8位数据输入信号。
oen是三态输出控制信号,当oen=1时,输出为高阻态,即q[7..0]=”ZZZZZZZZ”;oen=’0’时,锁存器位正常输出状态。
g是使能信号,当g=’1’时,锁存器处于工作状态,输出=输入;当g=‘0’时,锁存器的状态保持不变。
q[7..0]是数据输出信号。
2.VHDL源程序
采用两种方法。
方法一:
(直接在一个VHDL程序中实现8D锁存器的设计)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEwork.my_pkg2.ALL;
ENTITYCT74373IS
PORT(d:
INSTD_LOGIC_VECTOR(7DOWNTO0);
oen:
INBIT;
g:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCT74373;
ARCHITECTUREoneOFCT74373IS
SIGNALsig_save:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
Gelacth:
FORnIN0TO7GENERATE
BEGIN
Latchx:
Latch1PORTMAP(d(n),g,sig_save(n));
ENDGENERATE;
q<=sig_saveWHENoen='0'ELSE
"ZZZZZZZZ";
ENDone;
方法二:
(使用元件例化语句的设计,分三步)
第一步:
锁存器的设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYlatch1IS
PORT(d,ena:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDlatch1;
ARCHITECTUREexample4OFlatch1IS
BEGIN
PROCESS(d,ena)
BEGIN
IFena=’1’THEN
q<=d;
ENDIF;
ENDPROCESS;
ENDexample4;
第二步:
将设计的元件声明装入my_pkg程序包中,便于生成语句的元件例化。
包含latch1元件的my_pkg程序包的VHDL源程序my_pkg.vhd如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
PACKAGEmy_pkgIS
Componentlatch1--元件声明
PORT(d,ena:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDComponent;
ENDmy_pkg;
第三步:
在源程序种用生成语句重复8个latch1,具体的8D锁存器设计电路的VHDL源程序CT74373.vhd如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEwork.my_pkg.ALL;--打开程序包
ENTITYCT74373IS
PORT(d:
INSTD_LOGIC_VECTOR(7DOWNTO0);--声明8位输入信号
oen:
INBIT;--STD_LOGIC;
g:
INSTD_LOGIC:
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));--声明8位输出信号
ENDCT74373;
ARCHITECTUREoneOFCT74373IS--元件例化
SIGNALsig_save:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGINGeLacth:
FORnIN0TO7GENERATE--用FOR——GENERATE语句例化8个1位锁存器
Latchx:
Latch1PORTMAP(d(n),g,sig_save(n));
ENDGENERATE;
q<=sig_saveWHENoen=’0’else
“ZZZZZZZZ”;
ENDone;
实验六循环彩灯控制器(状态机)
三、实验原理
(1)循环彩灯按以下次序循环变化:
彩灯亮灭updown=0updown=1
00000000
00000011
00001100
00110000
11000000
11110000
11111100
11111111
参考生成元件符号如下:
说明:
其中CLK是时钟信号,UPDOWN为循环彩灯循环变化的控制信号,Q[7..0]是彩灯输出信号。
UPDOWN控制彩灯变化模式参考上图。
(3)VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYctrcnt4IS
PORT(clk:
INSTD_LOGIC;
updown:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDctrcnt4;
ARCHITECTUREoneOFctrcnt4IS
TYPEstateIS(s0,s1,s2,s3,s4,s5,s6,s7);
SIGNALcurrent_state,next_state:
state;
BEGIN
p1:
PROCESS(clk)
BEGIN
IFclk'EVENTANDclk='1'THEN
current_state<=next_state;
ENDIF;
ENDPROCESSp1;
p2:
PROCESS(current_state)
BEGIN
CASEcurrent_stateIS
WHENs0=>
q<="00000000";
IFupdown='0'THEN
next_state<=s1;
ELSE
next_state<=s7;
ENDIF;
WHENs1=>
q<="00000011";
IFupdown='0'THEN
next_state<=s2;
ELSE
next_state<=s0;
ENDIF;
WHENs2=>
q<="00001100";
IFupdown='0'THEN
next_state<=s3;
ELSE
next_state<=s1;
ENDIF;
WHENS3=>
q<="00110000";
IFupdown='0'THEN
next_state<=s4;
ELSE
next_state<=s2;
ENDIF;
WHENS4=>
q<="11000000";
IFupdown='0'THEN
next_state<=s5;
ELSE
next_state<=s3;
ENDIF;
WHENS5=>
q<="11110000";
IFupdown='0'THEN
next_state<=s6;
ELSE
next_state<=s4;
ENDIF;
WHENS6=>
q<="11111100";
IFupdown='0'THEN
next_state<=s7;
ELSE
next_state<=s5;
ENDIF;
WHENS7=>
q<="11111111";
IFupdown='0'THEN
next_state<=s0;
ELSE
next_state<=s6;
ENDIF;
ENDCASE;
ENDPROCESSp2;
ENDone;
实验七 简单交通灯控制器的设计
三、实验原理
1.设计分析
(1)基本功能
1)交通灯按以下次序循环变化
东西方向绿灯黄灯红灯南北方向绿灯黄灯红灯
a.亮灭灭灭灭亮(5秒)
b.灭闪灭灭灭亮(3秒,每秒闪一次)
c.灭灭亮亮灭灭(5秒)
d.灭灭亮灭闪灭(3秒,每秒闪一次)
2)有复位功能
用一个开关控制交通灯复位。
“1”为正常工作状态,“0”复位,即停在状态a。
(2)扩展功能(选做)
用两个开关设置通行时间(即绿灯亮的时间),用两个开关设计过渡时间(即黄灯闪的时间)。
设置通行时间
开关量:
00011011
时 间:
5秒10秒15秒20秒
设置过渡时间
开关量:
00011011
时 间:
3秒4秒5秒6秒
2.VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTD5IS
PORT(clk,ena:
INSTD_LOGIC;
b,c:
INSTD_LOGIC;
q0,q1,q2,q3,q4,q5:
outSTD_LOGIC);
ENDJTD5;
ARCHITECTUREoneOFJTD5IS
TYPEstateIS(s0,s1,s2,s3);
SIGNALsave:
state;
signalq1_temp,q4_temp:
STD_LOGIC;
BEGIN
p2:
PROCESS(ena,clk)
VARIABLEa:
INTEGER;
VARIABLEa0,a1:
INTEGER;
VARIABLEbc:
STD_LOGIC_VECTOR(1downto0);
BEGIN
BC:
=(b&c);
case(bc)is
when"00"=>
a0:
=4;
a1:
=2;
when"01"=>
a0:
=10;
a1:
=4;
when"10"=>
a0:
=15;
a1:
=5;
when"11"=>
a0:
=20;
a1:
=6;
whenothers=>null;
endcase;
ifena='1'then
q0<='1';
q1_temp<='0';
q2<='0';
q3<='0';
q4_temp<='0';
q5<='1';
save<=s0;
a:
=0;
elsifclk'EVENTANDclk='1'then
casesaveis
whens0=>
q0<='1';
q1_temp<='0';
q2<='0';
q3<='0';
q4_temp<='0';
q5<='1';
ifa>a0then
save<=s1;
a:
=1;
elsea:
=a+1;
endif;
whens1=>
q0<='1';
q1_temp<='0';
q2<='0';
q3<='0';
q4_temp<='1';
q5<='0';
ifa>a1then
save<=s2;
a:
=1;
elsea:
=a+1;
endif;
whens2=>
q0<='0';
q1_temp<='0';
q2<='1';
q3<='1';
q4_temp<='0';
q5<='0';
ifa>a0then
save<=s3;
a:
=1;
elsea:
=a+1;
endif;
whens3=>
q0<='0';
q1_temp<='1';
q2<='0';
q3<='1';
q4_temp<='0';
q5<='0';
ifa>a1then
save<=s0;
a:
=1;
elsea:
=a+1;
endif;
endcase;
endif;
ENDPROCESS;
q4<=clkandq4_temp;
q1<=clkandq1_temp;
ENDone;
实验八 数码管扫描显示电路
三、实验原理
1.原理
用层次化设计方法,设计一个数码管扫描显示控制器(方框部分)。
功能:
(1)输入8位十六进制数,分别显示在8个数码管上,其中,右起第2位和第7位有小数点,第5位不显示。
(2)显示方式为:
动态扫描显示,且送到数码管上的数据编码必须是8段译码输出。
(3)有复位输入端,复位时,不扫描显示,只右起第1个数码管上静态显示第1个数。
2.设计分析
可将所要设计的电路分解成如下图所示的两个模块,再用VHDL语言实现每个模块的设计。
7段译显示码器
状态机
3.引脚锁定
为了方便实验,8个十六进制数可以不从芯片外部输入,而直接在顶层原理图上将输入端接地或接高电平。
如下图所示,则显示的数据为“F0.FF0F.0”。
复位输入端可采用8位数字开关组的其中一个开关。
时钟输入端可选用1个空的IO口(MBIO_XX),用导线接至独立时钟信号接线组“CLOCK(T)”中的某一引脚(自选,观察采用不同的频率,会产生什么样的显示效果)。
数码管片选编码输出,可选用3个空的IO口(MBIO_XX),用导线接至信号接线组DS1-8A(T)的“SS0”“SS1”“SS2”。
8段码(7段码+小数点)输出,可选用8个空的IO口(MBIO_XX),用导线分别接至“数码管段位引线”接线组XPL-AH的“A”~“H”。
4.VHDL源程序
方法一:
七段译码显示器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLED1IS
PORT(onoff:
INSTD_LOGIC;
a:
inbit_VECTOR(3DOWNTO0);
led7s:
outbit_VECTOR(6DOWNTO0));
ENDLED1;
ARCHITECTUREoneOFLED1IS
BEGIN
p2:
PROCESS(a)
BEGIN
ifonoff='0'then
led7s<="0000000";
else
casea(3downto0)is
when"0000"=>led7s<="1111110";
when"0001"=>led7s<="0110000";
when"0010"=>led7s<="1101101";
when"0011"=>led7s<="1111001";
when"0100"=>led7s<="0110011";
when"0101"=>led7s<="1011011";
when"0110"=>led7s<="1011111";
when"0111"=>led7s<="1110000";
when"1000"=>led7s<="1111111";
when"1001"=>led7s<="1110111";
when"1010"=>led7s<="1110111";
when"1011"=>led7s<="0011111";
when"1100"=>led7s<="1001110";
when"1101"=>led7s<="0111101";
when"1110"=>led7s<="1001111";
when"1111"=>led7s<="1000111";
whenothers=>null;
endcase;
endif;
ENDPROCESS;
ENDone;
状态机
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLEDIS
PORT(clk,reset:
INSTD_LOGIC;
d1,d2,d3,d4,d5,d6,d7,d8:
inbit_VECTOR(3DOWNTO0);
sel:
outbit_VECTOR(2DOWNTO0);
dout:
outbit_VECTOR(3DOWNTO0);
dp:
outSTD_LOGIC;
onoff:
outSTD_LOGIC);
ENDLED;
ARCHITECTUREoneOFLEDIS
TYPEstateIS(s0,s1,s2,s3,s4,s5,s6,s7);
SIGNALsave,nex:
state;
BEGIN
p1:
PROCESS(clk)
BEGIN
IFclk'EVENTANDclk='1'THEN
save<=nex;
ENDIF;
ENDPROCESSp1;
p2:
PROCESS(save,nex)
BEGIN
casesaveis
whens0=>
sel<="000";
dout<=d8;
dp<='0';
onoff<='1';
nex<=s1;
whens1=>
Sel<="001";
dout<=d7;
dp<='1';
onoff<='1';
nex<=s2;
whens2=>
Sel<="010";
dout<=d6;
dp<='0';
onoff<='1';
nex<=s3;
whens3=>
Sel<="011";
dout<=d5;
onoff<='0';
dp<='0';
nex<=s4;
whens4=>
Sel<="100";
dout<=d4;
onoff<='1';
dp<='0';
nex<=s5;
whens5=>
Sel<="101";
dout<=d3;
onoff<='1';
dp<='0';
nex<=s6;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 实验