第五章 可编程逻辑 习题答案白中英主编第五版Word文档下载推荐.docx
《第五章 可编程逻辑 习题答案白中英主编第五版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第五章 可编程逻辑 习题答案白中英主编第五版Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
![第五章 可编程逻辑 习题答案白中英主编第五版Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/f4c4de16-6643-43de-8b34-654f8850a311/f4c4de16-6643-43de-8b34-654f8850a3111.gif)
8.用VHDL写出布尔表达式
ENTITYbooleanIS
PORT(a,b,c:
f:
ENDboolean;
ARCHITECTUREboolean_arcOFbooleanIS
f<=(aOR(NOTb)ORc)AND(aORbOR(NOTc))AND((NOTa)OR(NOTb)OR(NOTc));
ENDboolean_arc;
9.用VHDL结构法写出SOP表达式
――三输入与非门的逻辑描述
ENTITYnand3IS
PORT(a,b,c:
ENDnand3;
ARCHITECTUREnand3_arcOFnand3IS
x<=NOT(aANDbANDc);
ENDnand3_arc;
――顶层结构描述文件
LIBRARYIEEE;
PORT(in1,in2,in3,in4,in5,in6,in7,in8,in9:
out4:
COMPONENTnand3
ENDCOMPONENT;
SIGNALout1,out2,out3:
STD_LOGIC;
u1:
nand3PORTMAP(in1,in2,in3,out1);
u2:
nand3PORTMAP(in4,in5,in6,out2);
u3:
nand3PORTMAP(in7,in8,in9,out3);
u4:
nand3PORTMAP(out1,out2,out3,out4);
10.用VHDL数据流法写出SOP表达式
PORT(in1,in2,in3,in4,in5,in6,in7,in8,in9:
out4<=(in1ANDin2ANDin3)OR(in4ANDin5ANDin6)OR(in7ANDin8ANDin9);
ENDsop_arc;
13.用VHDL设计3-8译码器
ENTITYdecoder_3_to_8IS
PORT(a,b,c,g1,g2a,g2b:
y:
OUTSTD_LOGIC_VECTOR(7downto0));
ENDdecoder_3_to_8;
ARCHITECTURErt1OFdecoder_3_to_8IS
SIGNALindata:
STD_LOGIC_VECTOR(2downto0);
indata<=c&
b&
a;
PROCESS(indata,g1,g2a,g2b)
IF(g1=′1′ANDg2a=′0′ANDg2b=′0′)THEN
CASEindataIS
WHEN"
000"
=>y<="
11111110"
;
001"
11111101"
010"
11111011"
011"
11110111"
100"
11101111"
101"
11011111"
110"
10111111"
WHENothers=>y<="
01111111"
ENDCASE;
ELSE
y<="
11111111"
ENDIF;
ENDPROCESS;
ENDrt1;
14.用VHDL设计七段显示译码器
ENTITYsegment7IS
PORT(xin:
INSTD_LOGIC_VECTOR(3downto0);
lt,rbi:
yout:
OUTSTD_LOGIC_VECTOR(6downto0);
birbo:
INOUTSTD_LOGIC);
ENDsegment7;
ARCHITECTUREseg7448OFsegment7IS
SIGNALsig_xin:
STD_LOGIC_VECTOR(3downto0);
sig_xin<=xin;
PROCESS(sig_xin,lt,rbi,birbo)
IF(birbo=′0′)THEN
yout<="
0000000"
ELSIF(lt=′0′)THEN
1111111"
birbo<=′1′;
ELSIF(rbi=′0′ANDsig_xin="
0000"
)THEN
birbo<=′0′;
ELSIF(rbi=′1′ANDsig_xin="
1111110"
CASEsig_xinIS
0001"
=>yout<="
0110000"
0010"
1101101"
0011"
1111001"
0100"
0110011"
0101"
1011011"
0110"
0011111"
0111"
1110000"
1000"
1001"
1110011"
WHENothers=>yout<="
0100011"
ENDseg7448;
15.用VHDL设计8/3优先编码器
ENTITYpriorityencoderIS
PORT(din:
INSTD_LOGIC_VECTOR(7downto0);
ei:
OUTSTD_LOGIC_VECTOR(2downto0);
eo,gs:
ENDpriorityencoder;
ARCHITECTUREcod74148OFpriorityencoderIS
PROCESS(ei,din)
IF(ei=′1′)THEN
111"
eo<=′1′;
gs<=′1′;
ELSE
IF(din(7)=′0′)THEN
gs<=′0′;
ELSIF(din(6)=′0′)THEN
yout<="
ELSIF(din(5)=′0′)THEN
ELSIF(din(4)=′0′)THEN
ELSIF(din(3)=′0′)THEN
ELSIF(din
(2)=′0′)THEN
ELSIF(din
(1)=′0′)THEN
ELSIF(din(0)=′0′)THEN
ELSIF(din="
)THEN
eo<=′0′;
ENDcod74148;
16.用VHDL设计BCD码至二进制码转换器。
libraryieee;
useieee.std_logic_1164.all;
entitybcdtobiis
port(
bcdcode:
INSTD_LOGIC_VECTOR(7DOWNTO0);
start:
instd_logic;
qbit:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
end;
architecturebehavioralofbcdtobiis
begin
process(start)
begin
ifstart='
0'
then
casebcdcode(7downto0)is
when"
00000000"
=>
qbit(3downto0)<
="
;
00000001"
00000010"
00000011"
00000100"
00000101"
00000110"
00000111"
00001000"
00001001"
00010000"
1010"
00010001"
1011"
00010010"
1100"
when"
00010011"
1101"
00010100"
1110"
00010101"
1111"
whenothers=>
endcase;
else
qbit(3downto0)<
endif;
endprocess;
endbehavioral;
17.用VHDL设计4位寄存器
异步复位
源代码:
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYregister_4IS
PORT(clk,r:
din:
qout:
OUTSTD_LOGIC_VECTOR(3downto0));
ENDregister_4;
ARCHITECTURErge_arcOFregister_4IS
SIGNALq_temp:
STD_LOGIC_VECTOR(3downto0);
PROCESS(clk,r)
IF(r=′1′)THEN
q_temp<="
ELSIF(clk′eventANDclk=′1′)THEN
q_temp<=din;
qout<=q_temp;
ENDrge_arc;
18.用VHDL设计4位双向移位寄存器
s1、s0控制工作方式,dsl为左移数据输入,dsr为右移数据输入。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYshiftregIS
PORT(clk,r,dsr,dsl:
s1,s0:
--functionselect
--datain
--dataout
ENDshiftreg;
ARCHITECTUREls74194OFshiftregIS
SIGNALiq:
SIGNALs:
STD_LOGIC_VECTOR(1downto0);
BEGIN
s<=s1&
s0;
IF(r=′0′)THEN
iq<="
CASEsIS
00"
=>null;
01"
=>iq<=dsr&
din(3downto1);
--right
10"
=>iq<=din(2downto0)&
dsl;
--left
11"
=>iq<=din;
--load
WHENothers=>null;
ENDCASE;
qout<=iq;
ENDls74194;
19.用VHDL设计8421码十进制加法计数器
异步清零,同步置数
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcount10IS
PORT(clk,clr,load:
din:
co:
OUTSTD_LOGIC;
ENDcount10;
ARCHITECTUREcount10_archOFcount10IS
PROCESS(clr,clk,load)
IF(clr=′0′)THEN
IF(load=′0′)THEN
iq<=din;
ELSIF(iq=9)THEN
iq<=iq+1;
co<=′1′WHENiq="
′0′;
ENDcount10_arch;
20.用VHDL设计可逆格雷码计数器
ENTITYgray_countIS
PORT(clk,y:
OUTSTD_LOGIC_VECTOR(2downto0));
ENDgray_count;
ARCHITECTUREarch_grayOFgray_countIS
STD_LOGIC_VECTOR(2downto0);
PROCESS(clk)
IF(clk′eventANDclk=′1′)THEN
IF(y=′1′)THEN
CASEiqIS
WHEN"
=>iq<="
WHENothers=>iq<="
IF(y=′0′)THEN
qout<=iq;
ENDarch_gray;
21.用VHDL设计有限状态机
ENTITYasmIS
PORT(clk,k,reset:
OUTSTD_LOGIC_VECTOR(1downto0));
ENDasm;
ARCHITECTUREasm_archOFasmIS
TYPEasm_stIS(s0,s1,s2,s3);
SIGNALcurrent_state,next_state:
asm_st;
reg:
PROCESS(clk,reset)
IF(reset=′1′)THEN
current_state<=s0;
current_state<=next_state;
com:
PROCESS(current_state,k)
CASEcurrent_stateIS
WHENs0=>qout<="
IF(k=′0′)THEN
next_state<=s1;
next_state<=s0;
ENDIF;
WHENs1=>qout<="
next_state<=s2;
E