2012-2013年海南大学EDA期末考试卷
2012-2013年海南大学信息学院EDA技术及应用考试
试卷(A卷)
时间:120分钟(2012年12月)考试形式:闭卷
一、选择题(20分)
1.下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程:(B)
A. 原理图/HDL文本输入→适配→综合→功能仿真→编程下
载→硬件测试
B. 原理图/HDL文本输入→功能仿真→综合→适配→编程下
载→硬件测试
C. 原理图/HDL文本输入→功能仿真→综合→编程下载→→
适配硬件测试;
D. 原理图/HDL文本输入→功能仿真→适配→编程下载→综
合→硬件测试
2.综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中,____C_____是错误的。
A. 综合就是将电路的高级语言转化成低级的,可与FPGA /
CPLD的基本结构相映射的网表文件;
B. 为实现系统的速度、面积、性能的要求,需要对综合加以
约束,称为综合约束;
C. 综合是纯软件的转换过程,与器件硬件结构无关;
D. 综合可理解为,将软件描述与给定的硬件结构用电路网表
文件表示的映射过程,并且这种映射关系不是唯一的。3.CPLD的可编程是主要基于什么结构:(D)
A .查找表(LUT);
B. ROM可编程;
C. PAL可编程;
D. 与或阵列可编程;
4. IP核在EDA技术和开发中具有十分重要的地位,以HDL方
式提供的IP被称为:(C)
A. 硬IP;
B. 固IP;
C. 软IP;
D. 都不是;
5. 流水线设计是一种优化方式,下列哪一项对资源共享描述正
确_ C。
A. 面积优化方法,不会有速度优化效果
B. 速度优化方法,不会有面积优化效果
C. 面积优化方法,可能会有速度优化效果
D. 速度优化方法,可能会有面积优化效果
6.在VHDL语言中,下列对时钟边沿检测描述中,错误的是___
D____。
A. if clk’event and clk = ‘1’ then
B. if falling_edge(clk) then
C. if clk’event and clk = ‘0’ then
D.if clk’stable and not clk = ‘1’ then
7状态机编码方式中,其中_____C____占用触发器较多,但其实现比较适合FPGA的应用
A. 状态位直接输出型编码
B. 顺序编码
C. 一位热码编码
D. 以上都不是
8.子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速
度(即速度优化);指出下列那种方法是速度优化___A______。
A. 流水线设计
B. 资源共享
C. 逻辑优化
D. 串行化
9. 不完整的IF语句,其综合结果可实现____A____。
A. 时序电路
B. 双向控制电路
C. 条件相或的逻辑电路
D. 三态控制电路
10.在一个VHDL设计中Idata是一个信号,数据类型为std_logic_vector,试指出下面那个赋值语句是错误的。(D)
A. idata <= “00001111”
B. idata <= b”0000_1111”;
C. idata <= X”AB”
D. idata <= 16”01”;
二、VHDL程序填空(20分)
下面程序是一个10线-4线优先编码器的VHDL描述,试补充完整。
LIBRARY __IEEE________ ;
USE IEEE.________ STD_LOGIC_1164_____________.ALL; ENTITY coder IS
PORT ( din : IN STD_LOGIC_VECTOR(____9 DOWNTO 0________________);
output : _____OUT_____ STD_LOGIC_VECTOR(3 DOWNTO 0) );
END coder;
ARCHITECTURE behav OF ________ CODER _____ IS
SIGNAL SIN : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS (_____DIN ______)
BEGIN
IF (din(9)='0') THEN SIN <= "1001" ;
_ELSIF (din(8)=’0’)_________________ THEN SIN <= "1000" ;
ELSIF (din(7)='0') THEN SIN <= "0111" ;
ELSIF (din(6)='0') THEN SIN <= "0110" ;
ELSIF (din(5)='0') THEN SIN <= "0101" ;
ELSIF (din(4)='0') THEN SIN <= "0100" ;
ELSIF (din(3)='0') THEN SIN <= "0011" ;
ELSIF (din(2)='0') THEN SIN <= "0010" ;
ELSIF (din(1)='0') THEN SIN <= "0001" ;
ELSE _ SIN <= “0000”______________ ;
_____ END IF ___________
END PROCESS ;
__ Output <= sin _____________;
END behave;
三、VHDL程序改错(20分)
仔细阅读下列程序,回答问题:
1.在程序中存在两处错误,试指出,并说明理由:
14行,Q1是矢量,不能直接和整数1相加,需要使用重载函数2.修改相应行的程序(如果是缺少语句请i指出大致的行数):错误1 行号:12 程序改为:BEGIN 改为 THEN
错误 2 行号: 3 程序改为:USE
IEEE.STD_LOGIC_UNSIGNED.ALL;
1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3
4 ENTITY CNT4 IS
5 PORT ( CLiK : IN STD_LOGIC ;
6 Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;
7 END CNT4;
8 ARCHITECTURE bhv OF CNT4 IS
9 SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);
10 BEGIN
11 PROCESS (CLK) BEGIN
12 IF RISING_EDGE(CLK) begin
13 IF Q1 < 15 THEN
14 Q1 <= Q1 + 1 ;
15 ELSE
16 Q1 <= (OTHERS => '0');
17 END IF;
18 END IF;
19 END PROCESS ;
20 Q <= Q1;
21 END bhv;
22
四、编写VHDL程序(20分,每题10分)
1. 试描述一个带进位输入、输出的8位全加器
端口:A、B为加数,CIN为进位输入,S为加和,COUT为进位输出
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADDER8 IS
PORT (A, B : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
CIN : IN STD_LOGIC;
COUT : OUT STD_LOGIC;
S : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END ADDER8;
ARCHITECTURE ONE OF ADDER8 IS
SIGNAL TS : STD_LOGIC_VECTOR (8 DOWNTO 0);
BEGIN
TS <= (‘0’ & A) + (‘0’ & B) + CIN;
S <= TS(7 DOWNTO 0);
COUT <= TS(8);
END ONE;
2. 看下面原理图,写出相应VHDL 描述
D
Q DFF
D Q
DFF
OR
yout
OUTPUT
xin
INPUT
clk
INPUT
LIBARRY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY MYCIR IS
PORT ( XIN, CLK : IN STD_LOGIC; YOUT : OUT STD_LOGIC); END MYCIR;
ARCHITECTURE ONE OF MYCIR IS SIGNAL A, B, C; BEGIN
B <= XIN OR A; PROCESS (CLK) BEGIN
IF CLK ’EVENT AND CLK = ‘1’ THEN A <= C; C <= B; END IF; END PROCESS; YOUT <= C; END ONE;
五、综合题(20分)
已知状态机状态图如图(a)所示;完成下列各题: (一)已知状态机状态图如图a 所示;完成下列各题:
out_a <= “0101“1000”;
“01”
out_a <= “1101
;
图a 状态图
1.试判断该状态机类型,并说明理由。
该状态机为moore型状态机,输出数据outa和输入ina没有直接逻辑关系,outa是时钟clk的同步时序逻辑。
2.根据状态图,写出对应于结构图b,分别由主控组合进程和主
控时序进程组成的VHDL有限状态机描述。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mooreb is
Port (clk, reset : in std_logic;
Inia : in std_logic_vector (1 downto 0);
Outa : out std_logic_vector (3 downto 0) );
End mooreb;
Architecture one of mooreb is
Type ms_state is (st0, st1, st2, st3);
Signal c_st, n_st : ms_state;
Begin
Process (clk, reset)
Begin
If reset = ‘1’ then c_st <= st0;
Elsif clk’event and clk = ‘1’ then c_st <= n_st; End if;
End process;
Process (c_st)
Begin
Case c_st is
When st0 => if ina = “00” then n_st <= st0;
Else n_st <= st1;
End if;
Outa <= “0101”;
When st1 => if ina = “00” then n_st <= st1;
Else n_st <= st2;
End if;
Outa <= “1000”;
When st2 => if ina = “11” then n_st <= st0;
Else n_st <= st3;
End if;
Outa <= “1100”;
When st3 => if ina = “11” then n_st <= st3;
Else n_st <= st0;
End if;
Outa <= “1101”;
When others => n_st <= st0;
End case;
End process;
End one;
3.若已知输入信号如下图所示,分析状态机的工作时序,画出
该状态机的状态转换值(c_state)和输出控制信号(out_a);
4. 若状态机仿真过程中出现毛刺现象,应如何消除;试指出两种方法,并简单说明其原理。
方法1,添加辅助进程对输出数据进行锁存
方法2,将双进程状态机改写为单进程状态机,其输出也是锁存过了,故能消除毛刺
方法3,使用状态位直接输出型状态机编码方式,其输出直接由当前状态输出,也没有毛刺