VHDL程序设计题.docx
《VHDL程序设计题.docx》由会员分享,可在线阅读,更多相关《VHDL程序设计题.docx(18页珍藏版)》请在冰点文库上搜索。
VHDL程序设计题
四、编程题(共50分)
VHDL程序设计题
1、请补全以下二选一VHDL程序(本题10分)Entitymuxis
port(d0,d1,sel:
inbit;
q:
outBIT);
(2)
endmux;
architectureconnectofMUXis(4)signaltmp1,TMP2,tmp3:
bit;(6)
begin
cale:
block
begin
tmp1<=d0andsel;tmp2<=d1and(notsel)
tmp3<=tmp1andtmp2;
q<=tmp3;(8)
endblockcale;
endCONNECT;(10)
2、编写一个2输入与门的VHDL程序,请写出库、程序包、实体、构造体相关语句,将端口定义为标准逻辑型数据结构(本题10分)
a&yb
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
(2)
ENTITYnand2IS
PORT(a,b:
INSTD_LOGIC;(4)
y:
OUTSTD_LOGIC);(6)
ENDnand2;
ARCHITECTUREnand2_1OFnand2IS(8)BEGIN
y<=aNANDb;--与y<=NOT(aANDb);等价(10)ENDnand2_1;
3、根据下表填写完成一个3-8线译码器的VHDL程序(16分)。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdecoder_3_to_8IS
PORT(a,b,c,g1,g2a,g2b:
INSTD_LOGIC;
y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
(2)
ENDdecoder_3_to_8;
ARCHITECTURErtlOFdecoder_3_to_8IS
SIGNALindata:
STD_LOGIC_VECTOR(2DOWNTO0);(4)BEGIN
indata<=c&b&a;(6)
PROCESS(indata,g1,g2a,g2b)BEGIN
IF(g1='1'ANDg2a='0'ANDg2b='0')THEN(8)
CASEindataIS
WHEN"000"=>y<="11111110";
WHEN"001"=>y<="11111101";
WHEN"010"=>y<="11111011";(10)WHEN"011"=>y<="11110111";
WHEN"100"=>y<="11101111";
WHEN"101"=>y<="11011111";
WHEN"110"=>y<="10111111";(12)WHEN"111"=>y<="01111111";
WHENOTHERS=>y<="XXXXXXXX";ENDCASE;
ELSE
y<="11111111";(14)
ENDIF;
ENDPROCESS;(16)
ENDrtl;
4、三态门电原理图如右图所示,真值表如左图所示,请完成其VHDL程序构造体部分。
(本题14分)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYtri_gateISPORT(din,en:
INSTD_LOGIC;
s:
instd_logic_vector(1downto0);
(4)
d:
instd_logic_vector(3downto0);
(6)
y:
);
outstd_logic
(8)
endMUX4;
architecturebehaveofMUX4isbegin
process(s)
begin
if(s="00")then
y<=d(0);
elsif(s="01")theny<=d
(1);
elsif(s="10")theny<=d
(2);
elsif(s="11")then
y<=d(3);
else
null;endif;
endprocess;endbehave;
2、编写一个数值比较器VHDL程序的进程(不必写整个结构框架),要求使能信号g低电平时比较器开始工作,输入信号p=q,输出equ为‘0’,否则为‘1’。
(本题10分)
process(p,q)
(2)
begin
ifg='0'then(4)
ifp=qthen
equ<='0';(6)
else
equ<='1';(8)
else
endif;
equ<='1';(10)
endif;endprocess;
3、填写完成一个8-3线编码器的VHDL程序(16分)。
Libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityeight_triisport(
);
endeight_tri;
b:
instd_logic_vector(7downto0);
(2)
en:
instd_logic;
y:
outstd_logic_vector(2downto0)(4)
architectureaofeight_triis(6)
signalsel:
std_logic_vector(8downto0);begin
sel<=en&b;(8)
y<=“000”when(sel=”100000001”)else
“001”when(sel=”100000010”)else(10)“010”when(sel=”100000100”)else
“011”when(sel=”100001000”)else
“100”when(se1l=0001”0000”)else(12)“101”wh(esnel=”100100000”)else
“110”when(sel=”101000000”)else(14)
“111”when(se1l=1000”0000”)else(16)“zzz”;
enda;
4、图中给出了4位逐位进位全加器,请完成其VHDL程序。
(本题16分)
libraryIEEE;
useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;
entityfull_addisport(
a,b:
in
std_logic_vector(3downto0);
(2)
carr:
sum:
inout
out
std_logic_vector(4downto0);
std_logic_vector(3downto0)
);
endfull_add;
architecturefull_add_archoffull_addis
componentadder(4)
port(
a,b,c:
instd_logic;carr:
inoutstd_logic;
sum:
outstd_logic(6)
);
endcomponent;
begin
carr(0)<='0';
u0:
adderportmap(a(0),b(0),carr(0),carr
(1),sum(0));
u1:
adderportmap(a
(1),b
(1),carr
(1),carr
(2),sum
(1));(8)(10)
u2:
adderportmap(a
(2),b
(2),carr
(2),carr(3),sum
(2));(12)
u3:
adderportmap(a(3),b(3),carr(3),carr(4),sum(3));(14)(16)endfull_add_arch;
四、编程(共50分)
1、完成下图所示的触发器。
(本题10分)
CLRQ
CLK
DQN
libraryIEEE;
useIEEE.std_logic_1164.all;
entityVposDffis
port(CLK,CLR,D:
inSTD_LOGIC;----------2分
Q,QN:
outSTD_LOGIC);----------4分
endVposDff;
architectureVposDff_archofVposDffisbegin
process(CLK,CLR)----------6分
begin
ifCLR='1'thenQ<='0';QN<='1';
elsifCLK'eventandCLK='1'then
Q<=D;QN<=notD;----------8分
endif;
endprocess;----------10分
endVposDff_arch;
2、完成以下4位全加器代码(本题10分)
libraryIEEE;
useIEEE.std_logic_1164.all;
entityfull_addisport(
a,b:
in
std_logic_vector(3downto0);
cin:
in
std_logic;
cout:
sum:
out
outstd_logic;
std_logic_vector(3downto0)
);
endfull_add;
architecturefull_add_archoffull_addiscomponentadder
port(a,b,c:
instd_logic;carr:
outstd_logic;
sum:
outstd_logic);
endcomponent;
signalc1,c2,c3:
std_logic;2分
3、补充完整如下代码,使之完成
4状态不断循环。
(本题
10分)
ARCHITECTUREarcOFssIS
typestatesis(st0,st1,st2,st3
signaloutc:
states;
);
2分
4分
BEGIN
endif;ENDPROCESS;
ENDarc;
WHENOTHERS=>outc<=st0;ENDCASE;
4、设计异或门逻辑:
(本题20分)
如下异或门,填写右边的真值表。
(此项5分)
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0
其表达式可以表示为:
(此项5分)a
这一关系图示如下:
a
b&
y
b+
&
试编写完整的VHDL代码实现以上逻辑。
可以采用任何描述法。
(此项10分)libraryieee;
useieee.std_logic_1164.all;1分
entityyihuo1is
port(a,b:
instd_logic;
y:
outstd_logic);
endyihuo1;4分
architectureyihuo1_behaviorofyihuo1is
begin7分
process(a,b)y<=axorb;
begin(第2种写法)
ifa=bthen
y<='0';
else
y<='1';
;.'
endif;endprocess;
endyihuo1_behavior;10分
四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个二选一电路,要求输入a、b,sel为选择端,输出q。
(本题10分)
Entitysel2isPort(
a,b:
instd_logic;sel:
instd_logic;q:
outstd_logic
);
Endsel2;(3)
Architectureaofsel2isbegin
ifsel=‘0’then
q<=a;(6)
else
q<=b;(9)
endif;
enda;(10)
2、编写一个4位加法计数器VHDL程序的进程(不必写整个结构框架),要求复位信号
reset低电平时计数器清零,变高后,在上升沿开始工作;输入时钟信号为clk,输出为q。
(本题10分)
Process(reset,clk)
(2)
begin
en
b
y0y1y2
1
00000000
000
1
00000010
001
1
00000100
010
1
00001000
011
1
00010000
100
1
00100000
101
1
01000000
110
1
10000000
111
0
xxxxxxxx
高阻态
entityeight_triisport(
b:
instd_logic_vector(7downto0);en:
instd_logic;
y:
outstd_logic_vector(2downto0)
);
endeight_tri;(3)
architectureaofeight_triis
signalsel:
std_logic_vector(8downto0);(4)begin
sel<=en&b;
y<=“000”when(sel=”100000001”)else“001”when(sel=”100000010”)else“010”when(sel=”100000100”)else“011”when(sel=”100001000”)else
“100”
when(sel=
”100010000
”)else
“101”
when(sel=
”100100000
”)else
“110”
when(sel=
”101000000
”)else
“111”
when(sel=
”110000000
”)else
(9)
“zzz”;
(10)
enda;
4、根据已给出的全加器的VHDL程序,试写出一个4位逐位进位全加器的VHDL程序。
(本题15分)libraryIEEE;
useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;
useIEEE.std_logic_unsigned.all;entityadderis
port(
);
endadder;
a,b,c:
instd_logic;carr:
inoutstd_logic;
sum:
outstd_logic
architectureadder_archofadderisbegin
sum<=axorbxorc;
carr<=(aandb)or(bandc)or(aandc);endadder_arch;
entityfull_addis
port(
a,b:
instd_logic_vector(3downto0);
carr:
inoutstd_logic_vector(4downto0);
sum:
outstd_logic_vector(3downto0)
);
endfull_add;(5)
architecturefull_add_archoffull_addiscomponentadder
port(
a,b,c:
instd_logic;carr:
inoutstd_logic;sum:
outstd_logic
);
endcomponent;(10)
begin
carr(0)<='0';
u0:
adderportmap(a(0),b(0),carr(0),carr
(1),sum(0));
u1:
adderportmap(a
(1),b
(1),carr
(1),carr
(2),sum
(1));
u2:
adderportmap(a
(2),b
(2),carr
(2),carr(3),sum
(2));
u3:
adderportmap(a(3),b(3),carr(3),carr(4),sum(3));
endfull_add_arch;(15)
四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个四选一电路,要求输入d0~d3,s为选择端,输出y。
(本题10分)
entityMUX4isport(
s:
instd_logic_vector(1downto0);
d:
instd_logic_vector(3downto0);y:
outstd_logic
);
endMUX4;(3)
architecturebehaveofMUX4isbegin
process(s)
begin
if(s="00")then
y<=d(0);(4)
elsif(s="01")then
y<=d
(1);(5)
elsif(s="10")then
y<=d
(2);(6)
elsif(s="11")then
y<=d(3);(7)
else
null;(9)
endif;endprocess;
endbehave;(10)
2、编写一个数值比较器VHDL程序的进程(不必写整个结构框架),要求使能信号g低电平时比较器开始工作,输入信号p=q,输出equ为‘0’,否则为‘1’。
(本题10分)
process(p,q)
(2)
begin
ifg='0'then(4)
ifp=qthen
equ_tmp<='0';(6)
else
equ_tmp<='1';(8)
else
endif;
equ_tmp<='1';(10)
endif;endprocess;
3、填写完成一个3-8线译码器的真值表(5分),并写出其VHDL程序(10分)。
3-8译码器的真值表
en
a2a1a0
y
1
000
00000001
1
001
00000010
1
010
00000100
1
011
00001000
1
100
00010000
1
101
00100000
1
110
01000000
1
111
10000000
entitytri_eightisport(
a:
instd_logic_vector(2downto0);
en:
instd_logic;
y:
outstd_logic_vector(7downto0)
);
endtri_eight;
(2)
architectureaoftri_eightis
signalsel:
std_logic_vector(3downto0);(4)begin
sel(0)<=a(0);sel
(1)<=a
(1);sel
(2)<=a
(2);sel(3)<=en;(5)withselselect
y<="00000001"when"1000",
"00000010"when"1001",
"00000100"when"1010",
"00001000"when"1011",
"00010000"when"1100",
"00100000"when"1101",
"01000000"when"1110",
"10000000"when"1111",
"00000000"whenothers;(9)
enda;(10)
4、根据已给出的二-十(BCD)进制优先权编码器功能表,试写出其VHDL程序。
(本题
15分)
输入
输出
I1
I2
I3
I4
I5
I6
I7
I8
I9
Y3
Y2
Y1
Y0
1
1
1
1
1
1
1
1
1
1
1
1
1
X
X
X
X
X
X
X
X
0
0
1
1
0
X
X
X
X
X
X
X
0
1
0
1
1
1
X
X
X
X
X
X
0
1
1
1
0
0
0
X
X
X
X
X
0
1
1
1
1
0
0
1
X
X
X
X
0
1
1
1
1
1
0
1
0
X
X
X
0
1
1
1
1
1
1
0
1
1
X
X
0
1
1
1
1
1
1
1
1
0
0
X
0
1
1
1
1
1
1
1
1
1
0
1
0
1
1
1
1
1
1
1
1
1
1
1
0
entityprioris
port(
);
d:
instd_logic