最新EDA程序设计试题及答案讲解资料文档格式.docx
《最新EDA程序设计试题及答案讲解资料文档格式.docx》由会员分享,可在线阅读,更多相关《最新EDA程序设计试题及答案讲解资料文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
eventANDclk='
1'
)THEN
IF(q=5)THENq<
ELSEq<
=q+1;
ENDIF;
ENDPROCESS;
ENDbd;
带进位借位的4位加/减法器。
…………………………………..3分
输入输出波形图如下:
………………………………………………………7分
m
a[3..0]
b[3..0]
c[3..0]
d
1.试用VHDL语言编程实现74LS273芯片的功能。
LIBRARYieee;
USEieee.std_logic_1164.ALL;
2’
ENTITYls273IS1’
PORT(
clr,clk:
INstd_logic;
d:
INstd_logic_vector(7DOWNTO0);
q:
OUTstd_logic_vector(7DOWNTO0);
4’
);
ENDls273;
ARCHITECTURElock8OFls273IS1’
BEGIN
PROCESS(clk)1’
BEGIN
IF(CLR=’0’)THENq<
=”00000000”;
2’
ELSEIF(clk’eventANDclk=’1’)THENq<
=d;
3’
ELSEIF(clk=’0’)THENq<
=q;
1’
ENDIF;
ENDPROCESS;
ENDlock8;
3.请用VHDL语言编程实现一个状态向量发生器。
ENTITYstasIS1’
cp,rst:
INstd_logic;
p:
BUFFERstd_logic_vector(7DOWNTO0);
2’
ENDstas;
ARCHITECTUREarstasOFstasIS1’
PROCESS(cp)1’
IF(rst=”0”)THENp<
=”00000000”;
1’
ELSEIF(cp’eventANDcp=’1’)1’
WITHpSELECT
p<
=”10101010”WHEN“00000000”;
”01010101”WHEN“10101010”;
”00001111”WHEN“01010101”;
”11110000”WHEN“00001111”;
”11111111”WHEN“11110000”;
”00000000”WHEN“11111111”;
”00000000”WHENOTHERS;
6’
ENDIF
ENDarstas;
1.阅读下段程序,画出该电路的真值表,并详细说明该电路的功能。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYab_8IS
PORT(a,b:
INSTD_LOGIC_VECTOR(7DOWNTO0);
ahb,alb,aeb:
OUTSTD_LOGIC);
ENDab_8;
ARCHITECTUREbdOFab_8IS
PROCESS(a,b)
IFa>
bTHENahb<
=’1’;
alb<
=’0’;
aeb<
ELSIFa<
ELSEahb<
1.
(1)真值表如下:
(5’)
输入
输出
a、b
ahb
alb
aeb
a>
b
1
a<
a=b
(2)该电路是一个8位两输入比较器,(2’)
a、b是两个8位输入端;
(1’)
ahb、alb和aeb为比较结果输出端,某种比较结果为真时,相应的输出端为“1”,其余端输出为“0”。
(2’)
1.试用VHDL语言编程实现一个2-4译码器,其真表如下:
输入端
输出端
en
select
y
XX
“1111”
00
“1110”
01
“1101”
10
“1011”
11
“0111”
2-4译码器码参考程序如下:
(答案不唯一,用case语句、with…select语句都可以。
)
(1’)
ENTITYym24IS
PORT(en:
select:
OUTSTD_LOGIC_VECTOR(1DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)(3’)
ENDym24;
ARCHITECTUREbdOFym24IS
PROCESS(en)(1’)
IF(en=’1’)THEN
y<
=”1110”WHENselect=”00”ELSE
”1101”WHENselect=”01”ELSE
”1011”WHENselect=”10”ELSE
”0111”WHENselect=”11”ELSE(4’)
”1111”;
ELSEy<
=”1111”;
2.试用VHDL语言设计一个六路8位总线复用器,其中A、B、C、D、E、F都是8位输入总线,Q为8位输出总线,S为3位选择端,其功能如下:
S2
S1
S0
Q7~Q0
Q=A
Q=B
Q=C
Q=D
Q=E
Q=F
其它
B=“00000000”
六路8位总线复用器参考程序:
(答案不唯一)
USEieee.std_logic_1164.ALL;
ENTITYmux6IS(1’)
PORT(S:
INstd_logic_vector(2DOWNTO0);
A,B,C,D,E,F:
INstd_logic_vector(7DOWNTO0);
Q:
OUTstd_logic_vector(7DOWNTO0)
);
(3’)
ENDmux6;
ARCHITECTUREbdOFmux6IS
PROCESS(S)
BEGIN(1’)
CASESIS
WHEN"
=>
Q<
=A;
001"
=B;
010"
=C;
011"
=D;
100"
=E;
101"
=F;
WHENOTHERS=>
00000000"
(4’)
ENDCASE;
2、已知三选一电路如图,判断下列程序是否有错误,如有则指出错误所在,并给出完整程序。
(10分)
libraryieee;
useieee.std_logic_1164.all;
ENTITYMAXis
port(a1,a2,a3,s0,s1:
inbit;
outy:
outbit);
endmax;
(2’)
architectureoneofmaxis
componentmux21a
port(a,b,s:
instd_logic;
y:
outstd_logic);
endcomponent;
signaltempstd_logic;
begin
u1:
mux21aportmap(a2,a3,s0,temp);
u2:
mux21aportmap(a1,temp,s1,outy);
endone;
1.已知电路原理图如下,请用VHDL语言编写其程序
答:
entitymux21is
endmux21;
(4’)
architectureoneofmux21is
singled,e:
bit;
d<
=aand(not)s;
e<
=bands;
=dore;
endone;
2.设计一个带有异步清零功能的十进制计数器。
计数器时钟clk上升沿有效、清零端CLRN、进位输出co。
entitycounter10is
port(clk,CLRN:
dout:
outintegerrange0to9);
endcounter10;
(5’)
architecturebehavofcounter10IS
process(clk)
variablecnt:
integerrange0to9;
(3’)
begin
IFCLRN='
THEN
CNT:
=0;
ELSIF
clk='
andclk'
eventthen
ifcnt=9then
cnt:
else
=cnt+1;
endif;
endif;
dout<
=cnt;
endprocess;
endbehav;
(7’)
3.1)用VHDL语言编写半加器和或门器件的程序,如图所示:
答:
半加器程序:
entityh_adderis
port(a,b:
co,so:
endh_adder;
architectureoneofh_adderis
so<
=not(axor(notb));
co<
=aandb;
或门程序:
entityor2ais
port(a,b:
c:
endor2a;
architectureoneofor2ais
c<
=aorb;
2)在上道题目的基础上用元件例化语句设计1位全加器。
主程序:
entityf_adderis
port(ain,bin,cin:
cout,sum:
endentityf_adder;
architecturefd1off_adderis
componenth_adder
endcomponent;
componentor2a
signald,e,f:
std_logic;
u1:
h_adderportmap(a=>
ain,b=>
bin,co=>
d,so=>
e);
u2:
e,b=>
cin,co=>
f,so=>
sum);
u3:
or2aportmap(d,f,cout);
endfd1;
1.试用VHDL语言编程实现一个总线开关,其真值表如下:
A0~A6
B0~B6
Y0~Y6
‘0’
‘x’
“ZZZZZZZ”
‘1’
A
B
1.总线开关的参考程序如下:
(1’)
PORT(en,select:
INSTD_LOGIC;
A,B:
INSTD_LOGIC_VECTOR(6DOWNTO0);
Y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
PROCESS(en,select)
IFen=’0’THENY<
=”ZZZZZZZ”;
ELSIFen=’1’THEN
IFselect=’0’THENY<
ELSIFselect=’1’THENY<
2.试用VHDL语言编程实现一个M10计数器,要求该计数器有一个时钟输入端clk,一个复位端rst(低电平复位),一个使能端en(高电平时允许计数),一个“计数到”输出端cout,一个4位二进制当前计数值输出口q;
cout端仅当计数满的一个时钟周期输出高电平,其余时刻全保持低电平。
2.M10计数器参考程序:
PORT(clk,rst,en:
cout:
OUTSTD_LOGIC;
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)
PROCESS(clk,reset,en)
BEGIN
IF(rst='
0000"
IFen=’1’THEN
IF(q=9)THENq<
(10’)
3.请用VHDL语言编程,用一个状态机模型实现一个七段码LED字符发生器。
该电路有一个复位输入端RST,一个时钟输入端CP,一组七段码输出端a~g。
在LED上七个段的排列位置如图所示。
该电路的功能为,当复位输入端RST为低电平时,输出端口输出全零,无显示;
当RST为高电平时,在时钟信号CP的每个上升沿,输出端依次轮流输出5个字符“HAPPY”的七段码(共阴极接法),周而复始。
3.用VHDL语言编程实现一个LED字符发生器参考程序:
ENTITYgencIS(1’)
PORT(rst,cp:
a,b,c,d,e,f,g:
OUTSTD_LOGIC
(1’)
ENDgenc;
ARCHITECTUREaaOFgencIS
TYPEstateIS(s0,s1,s2,s3,s4,s5);
SIGNALpstate:
state;
SIGNALdout:
STD_LOGIC_VECTOR(6DOWNTO0);
pr1:
PROCESS(cp,rst,)
IFrst='
THENpstate<
=s0;
ELSIF(cp'
eventANDcp='
)THEN
CASEpstateIS
WHENs0=>
pstate<
=s1;
WHENs1=>
=s2;
WHENs2=>
=s3;
WHENs3=>
=s4;
WHENs4=>
=s5;
WHENs5=>
WHENOTHERS=>
ENDIF;
(5’)
pr2:
PROCESS(pstate)
CASEstateIS
WHENs0=>
0000000"
--无显示
WHENs1=>
0110111"
--“H”
WHENs2=>
1110111"
--“A”
WHENs3=>
1100111"
--“P”
WHENs4=>
WHENs5=>
0111011"
--“Y”
--无显示
a<
=dout(6);
=dout(5);
c<
=dout(4);
=dout(3);
=dout
(2);
f<
=dout
(1);
g<
=dout(0);
ENDaa;
(1’)
2.试用VHDL语言和进程语句,编程实现一个3-8译码器。
该译码器的功能为,当使能信号EN为低电平时,输出端Y7~Y0全为高电平(没有输出端被选中);
当EN为高电平时,每一种ABC的输入状态组合能惟一地选中一路输出(被选中的端输出低电平)。
真值表如下:
C
EN
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
×
LIBRARYieee;
ENTITYym38IS1’
a,b,c,en:
y:
OUTstd_