VHDL程序设计题.docx
《VHDL程序设计题.docx》由会员分享,可在线阅读,更多相关《VHDL程序设计题.docx(19页珍藏版)》请在冰豆网上搜索。
![VHDL程序设计题.docx](https://file1.bdocx.com/fileroot1/2023-1/23/d1ada39d-050e-481e-aba6-3659f715221e/d1ada39d-050e-481e-aba6-3659f715221e1.gif)
VHDL程序设计题
VHDL程序设计题
四、编程题(共50分)
2、编写一个2输入与门的VHDL程序,请写出库、程序包、实体、构造体相关语句,将端
口定义为标准逻辑型数据结构(本题10分)
LIBRARYIEEE;
USE
(2)
ENTITYnand2IS
PORT(ab:
INSTD_LOGIC;(4)
ENDnand2:
(8)
ARCHITECTUREnand21OFnand2IS
BEGIN
y<=aNANDb:
--与y<=NOT(aANDb)等价
ENDnand2_1:
3、根据下表填写完成一个3-8线译码器的VHDL程序(16分)。
LIBRARYIEEE:
USEdecoder_3_to_8IS
PORT(a,b,c,g1,g2a,g2b:
INSTD_LOGIC:
y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)):
ENDdecoder_3_to_8:
ARCHITECTURErtlOFdecoder_3_to_8IS
SIGNALindata:
STD_LOGIC_VECTOR(2DOWNTO0):
BEGIN
indata<=c&b&a:
PROCESS(indata,g1,g2a,g2b)
BEGIN
IF(g1='1'ANDg2a='0'ANDg2b='0')THEN
CASEindataIS
WHEN
"000"=>y<="":
WHEN
"001"=>y<="":
WHEN
"010"=>y<="":
(10)
WHEN
"011"=>y<="":
WHEN
"100"=>y<="":
WHEN
"101"=>y<="":
WHEN
"110"=>y<="":
(12)
WHEN
"111"=>y<="01111111":
WHEN
OTHERS=>y<="XXXXXXXX":
ENDCASE:
ELSE
y
ENDIF:
ENDPROCESS;
ENDrtl;
选
週Wt
入
二iZEIM
■1人蠟
二
yo
yJ
ytt
yf
亡
b
A
■p
y2
-—™
y3
■7
T
y&
X
1
X
X
X
X
I
11
1
]
J
1
1
I
X
X
1
X
X
X
J
1
I
1
1
1
1
1
o
X
X
X
X
X
J
]
1
1
I
i
1J
J
1
o
o
Q
Q
o
0
I
1
1
]
1
I
]
0
o
O
O
]
1
Q
1
1
T
1
1
1
J
o
o
O
I
o
]
1
o
1
I
1
1
1
1
0
o
D
11
1
1
1
I
0
1
I
1
i
1
o
o
1
o
o
1
1
1
1
o
1
1
T
I
o
o
o
I
1
]
I
1
1
0
1
1
I
0
o
1
1
'o
1
1
I
1
1
1
4
I
I
0
o
1
1
1
1
1
1;
1
1
I
]
0
4、三态门电原理图如右图所示,真值表如左图所示,请完成其(本题14分)
VHDL程序构造体部分。
春7-5三态ns值表
S!
抿输人
控tel閱人
數据播21|
din
CJl
X
c
1—
E
0
1
0
]1
1
J
LIBRARYIEEE;
USEtri_gateIS
PORT(din,en:
INSTD_LOGIC;
dout:
OUTSTD_LOGIC);
ENDtri_gate;
ARCHITECTUREzasOFtri_gateIS
BEGIN
PROCESS(din,en)
BEGIN
IF(en=‘)THENdout<=din;
ELSEdout<=Z';
ENDIF;
ENDPROCESS;
ENDzas;
四、编程题(共50分)
1、根据一下四选一程序的结构体部分,完成实体程序部分(本题entityMUX4is
portt
instdlogicvector(1downto0);
8分)
S:
d:
instdlogicvector(3downto0);
y:
outstdlogic
⑵⑷⑹(8)
endMUX4;
architecturebehaveofMUX4isbegin
process(s)
begin
if(s="00")theny<=d(0);
elsif(s="01")theny<=d
(1);
elsif(s="10")theny<=d
(2);
elsif(s="11")theny<=d(3);
else
null;endif;
endprocess;
endbehave;
);
endeight_tri;
(6)
architectureaofeighttriis
(8)
signalsel:
std_logic_vector(8downto0);beginsel<=en_&b;
y<=“000”when(sel=”100000001”)else
”100000010”when(sel=”100000100
when(sel=”100001000
when(se1=001'0000”)elsewhen(sel=”100100000
001”when(sel=
“010”
“011”
“100”
“101”
110”when(sel=”101000000
“111”when(se1=0000000”)else
((”
zzz;
enda;
)else
(10)
4、图中给出了4位逐位进位全加器,请完成其
)else
)else
(12)
)else
)else
(14)
(16)
VHDL程序。
(本题16分)
libraryIEEE;usefull_addis
port(
a,b:
carr:
sum:
instd_logic_vector(3downto0);inoutstd_logic_vector(4downto0);
outstd_logic_vector(3downto0)
);
endfull_add;
architecturefull_addcomponentadderport(
archoffull_addis
a,b,c:
carr:
sum:
instd_logic;inoutstd_logic;outstd_logic
);
endcomponent;
endfull_add_arch;
四、编程(共50分)
1、完成下图所示的触发器。
(本题10分)
portmap(a(0),b(0),carr(0),carr
(1),sum(0));
portmap(a
(1),b
(1),carr
(1),carr
(2),sum
(1));
libraryIEEE;
useVposDffis
port(CLK,CLR,D:
inSTD_LOGIC:
Q,QN:
outSTD_LOGIC);
endVposDf;
architectureVposDff_archofVposDffisbegin
process(CLK,CLR)
begin
QN<='1';
ifCLR='1'thenQ<='0';
elsifCLK'eventandCLK='1'then
Q<=D;QN<=notD;8分
endif;
10分
endprocess;
endVposDff_arch;
2、完成以下
4位全加器代码(本题10分)
libraryIEEE;
usefull_addis
port(
a.b:
in
std_logic_vector(3downto0);
cin:
in
std_logic;
cout:
outstd_logic;
sum:
out
std_logic_vector(3downto0)
);
endfull_add;
architecturefull_add_componentadderport(a.b.c:
archoffull_addis
in
carr:
sum:
out
out
std_logic;std_logic;
std_logic);
endcomponent;
signalc1.c2.c3:
std_logic;
portmap(a(0).b(0).cin.c1.sum(0));
portmap(a
(1).b⑴.c1.c2.sum
(1));
portmap(a
(2).b
(2).c2.c3.sum
(2)):
portmap(a(3).b(3).c3.cout.sum(3));
3、补充完整如下代码,使之完成4状态不断循环。
(本题10分)
ARCHITECTUREarcOFssIS
typestatesis(_signaloutc:
states;BEGIN
PROCESS(clk)
BEGIN
IFreset='1'then
outc<=st0;
elsifclk'eventandclk='1'then
CASEoutcIS
WHENst0=>outc<=st1;
WHENst1=>outc<=st2:
WHENst2=>outc<=st3;
WHENst3=>outc<=st0:
8分
9分
10分
WHENOTHERS=>outc<=st0;
ENDCASE;
endif;
ENDPROCESS;
ENDarc;
4、设计异或门逻辑:
(本题20分)如下异或门,填写右边的真值表。
(此项5分)
A
-1
Y
J
A
B
Y
0^—
0
0
1
1、
1
0
1
C
1
0
其表达式可以表示为:
(此项5分)
这一关系图示如下:
试编写完整的VHDL代码实现以上逻辑。
可以采用任何描述法。
(此项10分)
libraryieee;
use
entityyihuo1is
port(
y
endyihuo1;
architectureyihuo1_behaviorofyihuo1isbegin
process
begin
ifa
a,b:
instd_logic;:
outstd_logic);
ab)
y<
:
=ax
(第
orb;
2种写法)
=btheny<='0';
els
y<='1';endif;endproCess;ehavior;
endyihuo1_b
10分
四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个二选一电路,要求输入a、b,sel为选择端,输出q。
(本题10分)
Entitysel2is
Port(
a,b:
instd_logic;sel:
instd_logic;q:
outstd_logic);
Endsel2;
Architectureaofsel2is
begin
ifsel=0'then
q<=a;
else
q<=b;endif;
enda;
(9)
(10)
2、编写一个4位加法计数器VHDL程序的进程(不必写整个结构框架),要求复位信号reset低电平时计数器清零,变高后,在上升沿开始工作;输入时钟信号为clk,输出为q。
(本
题10分)
Process(reset,clk)
begin
ifreset=0'hen
q<=0000”;
elsifclk'ventandclk=0'then
q<=q+1;endif;
endprocess;
(9)
(10)
3、填写完成一个8-3线编码器的真值表(5分),并写出其VHDL程序(10分)。
8-3线编码器真值表
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
111
0
xxxxxxxx
高阻态
architectureaofeight_triis
signalsel:
std_logic_vector(8downto0);beginsel<=en&b;
enda;
4、根据已给出的全加器的VHDL程序,试写出一个4位逐位进位全加器的VHDL程序。
(本题15分)
libraryIEEE;
useadderis
port(
四、编程(共50分,除特殊声明,实体可只写出PORT语句,结构体要写完整)
1、用IF语句编写一个四选一电路,要求输入dO〜d3,s为选择端,输出y。
(本题10分)
entityMUX4is
port(instd_logic_vector(1downto0);instd_logic_vector(3downto0);outstd_logic
(8)
(10)
equ_tmp<='1';endif;
else
equ_tmp<='1';
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
0
xxx
00000000
);
endtri_eight;
architectureaoftri_eightis
signalsel:
std_logic_vector(3downto0);
begin
sel(0)<=a(0);sel
(1)<=a
(1);sel
(2)<=a
(2);sel(3)<=en;withselselect
y<="00000001"when"1000",
"00000010"when"1001",
"00000100"when
"1010",
"00001000"when
"1011",
"00010000"when
"1100",
"00100000"when
"1101",
"01000000"when
"1110",
""when"1111",
"00000000"when
others;
enda;
(10)
4、根据已给出的二-十(BCD)分)
进制优先权编码器功能表,试写出其VHDL程序。
(本题15
二-十(BCD进制优先权编码器功能表
输入
输出
I1
12
13
14
15
16
17
18
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_vector(9downto1);
q:
outstd_logic_vector(3downto0));
(2)
(4)
endprior;
architecturebehaviorofpriorisbegin
process(d)
begin
ifd="1"thenq<="1111";
elsifd(9)='0'thenq<="0110";
elsifd(8)='0'thenq<="0111";
elsifd(7)='0'thenq<="1000";
elsifd(6)='0'thenq<="1001";
elsifd(5)='0'thenq<="1010";
elsifd(4)='0'thenq<="1011";
elsifd(3)='0'thenq<="1100";
elsifd
(2)='0'thenq<="1101";
elsifd
(1)='0'thenq<="1110";
endif;
endprocess;
endbehavior;