PFGA期末考试试卷c卷
临沂人事考试-工作经验证明
PFGA期末考试试卷c卷
三1.
为什么IEEE修订了新的数据类型STD_LOGIC?
2
分别指出如下的VHDL描述是否可综合?说明理
由。
(1) architecture
beh2 of (3) process
mux2 is
begin
with sel_0 select
q<= a after
10ns
when‘0’;
b after 10ns
when others;
end beh2;
(2) process(a ,b)
begin
c1<= not a;
c2<=a and b;
end
process;
3.传统设计方法和EDA设计方法的主要的不同点?
4.现代数字系统常用设计方法有哪些?
语言可以把任意复杂的电路系统视作一个模块,一个
模块可主要分为哪三个组成部分?
语言有哪些主要的描述方式是什么?
器件按照编程方式不同,可以分为哪几类?
begin
wait on a
C<= not a;
end
process;
(4) process (clk) begin
if
(clk’event and
clk=‘1’) then
q<= d;
else
q<= a;
end if
end process;
器件的编程模式可以分为哪两大类。两大类的特点是
什么?
9.请问基于乘积项结构的CPLD和基于查找表结构的FPGA在
性能上有的主要不同点?
10.为什么在FPGA构成的数字系统中要配备一个PROM或
EPROM?
10K系列的FPGA结构由哪几部分组成?每部分实现
什么功能?
12.使用VHDL语言设计数字系统有什么优点?
13.说明VHDL语言中Signal与Variable的区别?
六1.设计一个“01111110”序列检测器,采用VHDL语言编
写。
2.设计一4-2编码器(10分)
3.设计一异步复位、模60计数器(10分)
4.试编写“01111110”序列发生器的VHDL语言程序。
5.采用VHDL语言描述该电路
2
6.编写16选1数据选择器的VH
DL源程序。设电路的16位数
据输入为A[15..0],使能控制端为ENA,高电平有效,数据选择输出为Y。
7.编写8位二进制数据比较器的VHDL源程序。设电路的两
个8
位二进制输入为A[7..0]和B[7..0],当
A[7..0]>B[7..0]是时输出GT=
1,当A[7..0]输出LT=1,当A[7..0]=B[7..0]是时输
出EQ=1。
8.采用VHDL语言描述该电路。
9.下表为双向数据缓冲器的
功能表,根据该功能表采用
VHDL语言编写双向数据缓冲器(a位宽8)。
En
0
0
1
Dr
0
1
X
10.采用VHDL语言描述该电路
功能
a=b
b=a
三态
11.编写程序(10分)
试编写上升沿触发的D触发器的VHDL语言程序。
12.编写程序(10分)
试编写下降沿触发的D触发器的VHDL语言程序。
问答题答案:
1.在VHDL的标准数据类型“BIT”,它是一个逻辑的数据类
型。这个类型取值只能是“
0”和“1”,由于该类型数据不
存在不定状态‘X’,故不便于仿真。另外,由于它不存在
高
阻状态,因此也很难用它来描述双向数据总线。
2.(1)不可以综合,因为after
10ns这个语句只能用于
仿真,不能进行综合(2) 可以综合。
1.
不可以综合,wait on语句不能综合。
2. 不可以综合,if (clk’event
and clk=‘1’) then
描述不能有else项
3.传统设计方法和EDA设计方法的主要的不同点?
传统设计方法
EDA设计方法
自底向上
自顶向
下
手动设计
自动设
计
原理图方式设计
原理图,VHDL语言等
多种设计方式
系统功能固定
系统功能
易变
不易仿真
易仿真
设计周期长
设计周期
短
4.原理图、HDL语言、波形图、状态机、功能模块输入法、
IP芯核
5.程序包、实体、结构体
6.行为描述、结构描述
7,可以分为一次性编程,浮栅编程和无限次编程(SRAM编
程)器件。
8.PL
D器件的编程模式可以分为两大类主模式和从模式。主
模式是由起主导作用的PLD器件引导编程操作过
程。而从模
式由计算机、微处理器或其它主导可编程逻辑器件控制编程
的过程。
9.
乘积项结构的CPLD是浮栅编程,非易失性器件,采用连
续布线,布线延时可以精确预测,工作速度较
僈,功耗较高。
基于查找表结构的FPGA是无限次编程器件(SRAM编程)器
件,易失性器
件,采用分段布线,布线延时很难精确预测,
工作速度较快,功耗较低。
10.大多FPGA
采用SRAM编程器件,掉电易失性器件,必须
外配备一个PROM或EPROM来保持编程数据,每次
上电后,
FPGA自动加载编程数据,完成配制。
11.FLEX10K系列的FPGA结构LAB,快速布线通道,和IOB
组成。
12. 1.设计技术齐全,方法灵活、支持广泛
2.系统硬件描述能力强
语言可以与工艺无关编程
4. VHDL语言标准、规范、易于共享和复用。
2
13. 1.信号的赋值至少有延迟,而变量赋值没有延迟。
2.信号有许多相关信息,而变量只有当前值。
3.作用范围不同。
4.信号是硬件连线的抽象,而变量无类似的对应关
系。
5.变量的值可以传给信号,而信号的值不能传给变
量。
四、1. 正确程序如下
use
use
_logic_unsigned.
all;
downto 0)
library ieee;
inout std_logic_vector(7
_logic_; );
architecture
terminal_count of
count:
end terminal_count;
entity
terminal_count is terminal_count is
port(
signal
clock,reset,enable :in downto
0);
std_logic_vector(7
bit;
begin
std_logic_vector(7
downto 0);
data: in process(data)
begin
if
data=count then
equals, term_cnt :
equals<= count<=count + 1;
end if;
end if;
end process;
end process;
process(clock)
term_cnt<=
begin
when enable='0'else
if reset='1' then
count<=equals;
count<=
term_cnt<=count;
elsif clock'event and
end terminal_count;
clock='1' then
2. 分析以下程序的正误,并将正确的程序写出来。
正确的程序:
2.1、程序1
USE
ENTITY sels IS
BIT;
s :IN
out1:OUT BIT);
END sels;
sels IS
WITH s SELECT
d1 WHEN
1,
2,
LIBRARY ieee;
ARCHITECTURE sels_arc OF
_logic_; BEGIN
PORT(d0,d1,d2,d3:IN out1 <= d0 WHEN 0,
INTEGER RANGE 0 TO 3;
d2 WHEN
d3 WHEN
3;
2.2、程序2
END sels_arc;
I2 WHEN sel= 2
LIBRARY ieee;
ELSE
USE
_logic_;
ENTITY mux4 IS
PORT(I0,I1,I2,I3,A,B:IN
std_logic;
Q :OUT
std_logic);
END
mux4;
ARCHITECTURE mux4_arc OF
mux4 IS
SIGNAL sel :INTEGER;
BEGIN
Q <=
I0 WHEN sel= 0
ELSE
I1 WHEN sel=
1
ELSE
I3
sel <=
0 WHEN A= ‘0’
AND B= ‘0’ ELSE
1
WHEN A= ‘1’
AND B= ‘0’ ELSE
2
WHEN A= ‘0’
AND B= ‘1’ ELSE
3
END mux4_arc;
3.
分析以下程序的正误,并
将正确的程序写出来。
3.1、四路数据选择器
正确的程序:
LIBRARY IEEE;
USE
_logic_
l
entity four is
port ( A0,A1,A2,A3:
IN std_logic
SEL: in
std_logic_vector (1
downto 0);
Y: out
std_logic );
end four;
architecture
four_arch of four is
begin
3.2、多位加法器
正确程序:
ENTITY adder IS
PORT(a,b:IN
std_logic_vector(7
process
(SEL,A0,A1,A2,A3)
begin
case SEL
is
when
when
when
when
others=> Y <= A3;
end
case;
end process;
end
four_arch;
downto 0);
c:IN std_logic;
s :OUT
std_logic(8 downto 0);
END adder;
ARCHITECTURE
adder_arc OF adder IS
BEGIN
s <=(’0’ & a) +( (’
0’ & b)+
(’00000000’ &
c);
END adder_arc;
答案
1.检测电路的建立时间,当
电路建立时间不满足要求时
报错。
2.“111”序列检测器
3.双向总线缓冲器
4.移位寄存器
5.为
一个序列检测电路,当
检测到输入din为预设值d
时,check_out输出为1,否则为0。
6.该电路为一个可控分频器
电路,输入d来控制分频数。
7.该电路为两输入与非门。
8.四选一电路
9.异或门
10.全加器
11.解:该VHDL源程序设计
的是8选1数据选择器,d7~d0
是数据输入端,
S2、S1和S0
是控制输入端,Y是数据输
入端。当s2s1s0=000时,d0
数据被选中,输出Y=d0;当
s2s1s0=001时,d1数据被选
中,输出Y=d1;依
次类推。
12.解:该VHDL源程序设计4
位二进制数据比较器电路。
A[3..0
]和B[3..0]是两个4
位二进制数输入,当
A[3..0]>B[3..0]时,大于输
出端GT=1;当
A[3..0]出端LT=1;当A[3..0]=B[3..0]时,等于输
出端EQ=1。
13.解:该VHDL源程序设计二输入端的8与门电路。8个与
门的输入端为ABIN7~A
BIN0和DIN7~DIN0,输出为
DOUT7~DOUT0。该电路可作为8位数据并行开关,A
BIN是数
据输入,DIN是数据开关,当DIN=1时,输出DOUT=ABIN,
当DIN
=0时,开关断开,DOUT=0。
14.解:该VHDL源程序设计下降沿触发的JK触发器电路。
15.解:tim1<=sec; tim2<=year; tim3<=year;
tim4<=sec;
tim5<=month; tim6<=min;
tim7<=month; tim8<=min;
tim9<=6;
16.上升沿触发的D触发器
17.“111”序列检测器
18.3-8译码器
19.“01111110”序列发生器
20.多位加法器
当a=“00000000”,
b=“00000001”,c=‘0’时,s=“000000001”
21.三态门电路
当a=‘0’, b=‘1’; en=‘1’时,f=‘0’
22.三八译码器
当sel=“000”时,dout=(‘0’,’0’,’0’,’0’,’0’,’
0’,’0’,
’1’);
23.门电路
当a=‘0’, b=‘1’时,s1=’1’,s2=’0’
24.总线缓冲器
当a=”00000000”,
en=’1’时,f=”00000000”
25.四路数据选择器
当s=2,
d0=’0’,d1=’1’,d2=’1’,d3=’0’时,out1=’
1’
26.试说明程序运行的先后顺序,并说明该程序实现何种逻
辑功能。
PROCESS每隔1000ns运行一次,该程序实现对1000ns的时
间进行累加计数。
六答案
y IEEE;
use
entity rplcont is
port(
clk,rst,datain
STD_LOGIC;
end rplcont;
rplcont is
type states
(st0,st1,st2,st3,st4,st5
,st6,st7,st8);
:
signal
cur_state,next_state
states;
process(clk,rst)
begin
in if rst='1' then
cur_state<=st0;
clk='1' then
cur_state<=next_state;
is end if;
end process;
process(cur_state,next_s
:
_LOGIC_; begin
q : out STD_LOGIC);
elsif clk'event and
architecture rplcont of
tate)
begin
q<='0';
case cur_state is
when
st0=>
if datain='0' then
next_state<=st1;
else next_state<=st0;
end if;
when st1=>
if datain='1'
then
next_state<=st2;
else
next_state<=st1;
end if;
when
st2=>
if datain='1' then
next_state<=st3;
else
next_state<=st1;
end if;
when st3=>
if datain='1' then
next_state<=st4;
else
next_state<=st1;
end if;
when
st4=>if datain='1'
then next_state<=st5;
else next_state<=st1;
end if;
when
st5=>if datain='1'
then next_state<=st6;
else next_state<=st1;
end if;
when
st6=>if datain='1'
then next_state<=st7;
else
next_state<=st1;
end if;
when
st7=>if datain='0'
then next_state<=st8;
q<='1';
else
next_state<=st0;
end if;
when st8=> if datain='0'
then
next_state<=st1;
else next_state<=st2;
end if;
2.设计一4-2编码器(10分)
library
ieee;
use
_logic_;
entity code4 is
port(
a,b,c,d : in std_logic;
y0,y1
: out std_logic
);
end code4;
architecture code4 of
code4 is
signal
ddd:std_logic_vector(3
downto 0);
signal
q:std_logic_vector(1
3.设计一异步复位、模60计
数器(10分)
end case;
end process;
end rplcont;
downto
0);
begin
ddd<=a&b&c&d;
process(d)
begin
if (ddd(0)='0') then
q <=
elsif (ddd(1)='0') then
q
<=
elsif(ddd(2)='0') then
q<=
else
q <=
end if;
end process;
y1<=q(0);y0<=q(1);
end
code4;
library ieee;
use
_logic_;
use
_logic_unsigned.
all;
entity cnt60 is
port(
clk,rst :
in std_logic;
m60 : out
std_logic_vector(5
downto 0)
);
end cnt60;
architecture cnt60 of
cnt60 is
signal
cnt60:std_logic_vector(5
downto 0);
begin
4. library IEEE;
use
_LOGIC_;
use
_LOGIC_unsigned.
process(clk,rst)
begin
if rst='1' then
cnt60<=(others=>'0');
elsif clk'event
and
clk='1' then
if cnt60=59 then
cnt60<=(others=>'0');
else
cnt60<=
cnt60+1;
end
if;
end if;
end process;
m60<=cnt60;
end cnt60;
all;
entity rplcont is
port(
clk,rst : in
STD_LOGIC;
zo : out
STD_LOGIC);
end rplcont;
architecture rplcont of
rplcont is
signal
count:std_logic_vector(2
downto 0);
signal z:std_logic;
begin
process(clk,rst)
begin
if
rst='1' then
count<=
elsif
clk'event and
clk='1' then
if
count=7 then
count<=
else
count<=count+1;
end
if;
end if;
end process;
process(count)
begin
case count is
when
when
when
when
when
when
when
when
others=>z<='0';
end case;
end process;
process(rst,clk)
begin
if rst='1'
then
zo<='0';
elsif
clk'event and
clk='1' then
5.程序如下
library IEEE;
use
_LOGIC_;
entity
rplcont is
port(
clk : in
STD_LOGIC;
count : out
STD_LOGIC_VECTOR(7
downto 0));
end rplcont;
architecture rplcont of
rplcont is
signal
count_in_bar:std_logic_v
ector(7
downto 0);
component dff
port (clk,d:in
std_logic;
zo<=z;
end
if;
end process;
end rplcont;
q,qb:out std_logic);
end component
begin
count_in_bar(0)<=clk;
gen1:for i in 0 to 7
generate
U:dff port
map
(clk=>count_in_bar(i),
d=>count_in_bar(i+1),
q=>count(i),qb=>count_in
_bar(i+1));
end generate;
end rplcont;
程序如下
library ieee;
use
_logic_;
begin
use
_logic_unsigned.
all;
entity mux16_1 is
s<=s3&s2&s1&s0;
y<=d0 when s=
else
d1 when
s=
port( s3,s2,s1,s0: in
std_logic;
d15,d14,d13,d12:
in std_logic;
d11,d10,d9,d8: in
std_logic;
d7,d6,d5,d4: in
std_logic;
d3,d2,d1,d0: in
std_logic;
y: out
std_logic);
end mux16_1;
architecture one of
mux16_1 is
signal
s:
std_logic_vector(3
downto 0);
else
d2
else
d3
else
d4
else
d5
else
d6
else
d7
else
d8
else
d9
else
d10
when s=
when s=
when s=
when
s=
when s=
when s=
when s=
when
s=
when s=
else
else
else
d13 when s=
d15;
d11 when s=else
d12 when s=end one;
在源程序中,d15~d0是电路的16位数据输入端:s3、s2、
s1和s0是选择控制输入端,当
s3s2s1s0=0000时,数据选
择输出y=d0,当s3s2s1s0=0001时,数据选择
输出y=d1,
依次类推。
源程序如下:
library ieee;
use
use
_logic_unsigned.
all;
entity comp8_1 is
port(
downto 0);
downto 0);
gt,lt,eq:
a:
std_logic_vector(7
std_logic);
end
comp8_1;
architecture
begin
process(a,b)
begin
if a>b then
in gt<='1';
lt<='0';
eq<='0';
lt<='1';
out gt<='0';
one of
_logic_; comp8_1 is
b: in
std_logic_vector(7 elsif a
eq<='0';
else
lt<='0';
gt<='0';
eq<='1';
end if;
end process;
end one;
在源程序中,a[7..0]和b[7..0]是数据比较器的两个8位二
进制数输入端,当a[7..0]>b[7..0]时,输出GT=1(表示a
大于b),当a
[7..0]b),当a[7..0]=b[7..0
]时,输出EQ=1(表示a等于b)。
8.程序如下
architecture
shift of
shift is
begin
component dff
std_logic;
end component
signal
z:std_logic_vector(0 to
9.程序如下
library
IEEE;
use
entity buffer is
port(
a,b : inout
4);
begin
z(0)<=a;
g1:for i in 0 to 3
generate
(z(i),clk,z(i+1));
b<=z(4);
end
shift;
port (d,clk: in dffx:dff
port map
q: out std_logic); end
generate;
_LOGIC_; STD_LOGIC_vector(7
downto 0);
en,dr : in
STD_LOGIC);
end buffer;
architecture
buffer of
buffer r is
signal aout,bout:
STD_LOGIC_vector(7
downto 0);
begin
process(a,dr,en)
begin
if en='0' and
dr='1' then
bout<=a;
else
10.
程序如下
library IEEE;
use
_LOGIC_;
entity half_adder is
port(
a : in
STD_LOGIC;
b : in
bout<=
end if;
b<=bout;
end
process;
process(a,dr,en)
begin
if
en='0' and dr='0' then
aout<=b;
else
aout<=
end if;
a<=aout;
end
process;
STD_LOGIC;
s : out
STD_LOGIC;
co : out
STD_LOGIC
);
end half_adder;
architecture half_adder
of half_adder is
signal c,d:std_logic;
begin
c<=a or b;
d<=a nand b;
co<=not
d;
s<=c and d;
end half_adder;
library IEEE;
use
_LOGIC_;
entity
full_adder is
port(
a,b,cin :
in STD_LOGIC;
co,s
: out
STD_LOGIC);
end full_adder;
architecture full_adder
11.编写程序
试编写上升沿触发的D
触发器的VHDL语言程序。
LIBRARY IEEE;
of full_adder is
component half_adder
port(
a,b : in
STD_LOGIC;
s,co : out
STD_LOGIC );
end component
signal
u0_co,u0_s,u1_co:std_log
ic;
begin
u0:half_adder port
map(a,b,u0_s,u0_co);
u1:half_adder port
map(u0_s,b,cin,s,u1_co);
co<=u0_co or u1_co;
end
full_adder;
USE
_logic_
;
ENTITY
sels IS
PORT(d,clk:IN IF
clk= ‘1’ AND clk’EVENT
THEN
Nq<=NOT q;
STD_LOGIC;
STD_LOGIC);
q, nq: OUT q <= d;
END sels;
12. 编写程序
试编写下降沿触发的D
触发器的VHDL语言程序。
LIBRARY IEEE;
USE
_logic_
;
ENTITY sels IS
PORT(d,clk:IN
STD_LOGIC;
q, nq: OUT
STD_LOGIC);
END sels;
IF clk= ‘0’ AND clk’EVENT
THEN
q <=
d;
END IF;
Nq<=NOT q;
END IF;