
信息科学与工程 学院 《数字系统设计》课程试题(B卷)
优选专业年级 学号 姓名 授课教师 座号
----------------装----------------订----------------线----------------
共 5 页 第 1 页
考试说明:本课程为开卷考试,可携带 纸笔、计算器 文具和 教材、参考书、笔记 资料,满分为:100分。
| 题号 | 一 | 二 | 三 | 四 | 五 | 六 | 总分 | 
| 得分 | 
1.专用集成电路ASIC的半定制制造方法有 门阵列法 、 门海法 、 标准单元法 和
可编程逻辑器件法 四种。
2.目前FPGA主要有 查找表、 多路开关 和 多路与非门 三种结构。
3.目前EDA工具主要有 设计输入 、 设计数据库 、 综合 、 分析验证 和 布局
布线 五类模块。
4.在不同设计层次中,主要有 行为 描述、 RTL(或者数据流)描述、 结构 描述
和 几何 描述。
5.优化资源利用率的方法通常有 逻辑优化 和 资源共享 。
6.综合主要有 行为 综合、 逻辑 综合和 版图 综合。
7.功能仿真中信号赋值的延迟是由 仿真Δ 机制引起的。
8. VHDL中的元件例化语句主要用于 结构 描述。
9.属性s′Active=Ture表明在当前仿真周期中信号s发生 了赋值操作 。
10.VHDL的延迟模型有 固有 延迟模型和 传输 延迟模型。
11.VHDL仿真器支持 数组,而VHDL综合器只支持 一维 数组。
12.函数只允许有 一个 返回值,而过程允许有 多个 返回值。
13. 函数中不能出现 信号赋值 语句和 WAIT 语句。
14.BUFFER模式的信号,是 带有反馈 的输出信号。
| 15. IP核分为 软件 IP、 固件 IP和 硬件 IP。 | 
1. 为什么在基于CPLD/FPGA设计系统时,要特别注意避免产生锁存器?
因为锁存器容易产生毛刺和时序分析困难,所以在CPLD/FPGA中,构造了很多寄存器,却没有构造可供使用的锁存器资源。因此,如果要在CPLD/FPGA中产生锁存器,则需要在寄存器之外增加组合逻辑才能实现。所以在CPLD/FPGA中产生锁存器会占用更多的芯片资源。
2. 简述设计实体中OUT模式的信号与BUFFER模式的信号的主要区别。
OUT模式的信号和BUFFER模式的信号都是输出模式的信号,所不同的是BUFFER模式的信号在输出的同时,还将输出值反馈回设计实体。
3. 简述s′Event和s′Active两种不同属性的区别。
在当前仿真周期内,信号s的值发生了变化,则s′Event属性为真;而对信号s进行了赋值操作(其值不一定发生变化),s′Active属性就为真。
三、图1是一个8位同步FIFO的逻辑图,请写出它的实体声明。(10分)
ENTITY fifo IS
PORT(clk,rd,wr:IN Bit;
din:IN Bit_Vector(7 DOWNTO 0);
dout:OUT Bit_Vector(7 DOWNTO 0);
full,empty:OUT Bit);
END fifo;
四、指出下列VHDL描述中的多处错误,并修改之:(10分)
ENTITY shift IS
PORT(clk,reset_n,s_in:IN Std_Logic;
s_out:OUT Std_Logic);
END shift;
ARCHITECTURE behavl OF shift IS
VARIABLE s_tmp:Std_Logic;
BEGIN
IF reset_n=′0′ THEN
s_tmp := ′0′;
s_out <= ′0′;
ELSIF clk′Event AND clk=′1′ THEN
s_tmp := s_in;
s_out <= s_tmp;
END IF;
| END behavl; | 
共 5 页 第 3 页
①未声明Std_Logic 类型;
②信号不能在进程中声明,表示信号的保留字SIGNAL书写错误;
③未在进程中引入挂起和激活机制;
④结束进程的书写表达错误。
①LIBRARY IEEE;
USE IEEE.Std_Logic_11.ALL;
ENTITY shift IS
PORT(clk,reset_n,s_in:IN Std_Logic;
s_out:OUT Std_Logic);
END shift;
ARCHITECTURE behavl OF shift IS
②SIGNAL s_tmp:Std_Logic;
BEGIN
③PROCESS(clk,reset_n)
BEGIN
IF reset_n=′0′ THEN
s_tmp <= ′0′;
s_out <= ′0′;
ELSIF clk′Event AND clk=′1′ THEN
s_tmp <= s_in;
s_out <= s_tmp;
END IF;
④END PROCESS;
END behavl;
五、写出60分频器的VHDL描述。(10分)
LIBRARY IEEE;
USE IEEE.Std_Logic_11.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;
ENTITY div IS
GENERIC(n: Integer:=60);
PORT(clk,reset_n:IN Std_Logic;
q:OUT Std_Logic);
END div;
ARCHITECTURE behavl_div OF div IS
SIGNAL count:Integer RANGE n-1 DOWNTO 0;
BEGIN
PROCESS(reset_n,clk)
BEGIN
| IF reset_n = ′0′ THEN | 
q <= ′0′;
count <= n-1;
ELSIF(clk′Event AND clk = ′1′ AND clk′Last_Value = ′0′)THEN
count <= count-1;
IF count >= (n/2) THEN
q <= ′0′;
ELSE
q <= ′1′;
END IF;
IF count <= 0 THEN
count <= n-1;
END IF;
END IF;
END PROCESS;
END behavl_div;
六、用并行赋值语句替代下面VHDL描述中的进程:(10分)
LIBRARY IEEE;
USE IEEE.Std_Logic_11.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;
ENTITY instr_decoder IS
GENERIC (data_width:Integer := 8);
PORT (code:IN Std_Logic_Vector (2 DOWNTO 0);
data_l,data_r:IN Std_Logic_Vector (data_width-1 DOWNTO 0);
result:OUT Std_Logic_Vector (data_width-1 DOWNTO 0));
END instr_decoder;
ARCHITECTURE decoder OF instr_decoder IS
BEGIN
PROCESS (code,data_l,data_r)
BEGIN
CASE code IS
WHEN "000" => result <= data_l AND data_r;
WHEN "001" => result <= data_l NAND data_r;
WHEN "010" => result <= data_l OR data_r;
WHEN "011" => result <= data_l NOR data_r;
WHEN "100" => result <= data_l XOR data_r;
WHEN "101" => result <= data_l XNOR data_r;
WHEN OTHERS => result <= (OTHERS => 'Z' );
END CASE;
END PROCESS;
| END decoder; | 
LIBRARY IEEE;
USE IEEE.Std_Logic_11.ALL;
USE IEEE.Std_Logic_Unsigned.ALL;
ENTITY instr_decoder IS
GENERIC (data_width:Integer := 8);
PORT (code:IN Std_Logic_Vector (2 DOWNTO 0);
data_l,data_r:IN Std_Logic_Vector (data_width-1 DOWNTO 0);
result:OUT Std_Logic_Vector (data_width-1 DOWNTO 0));
END instr_decoder;
ARCHITECTURE decoder OF instr_decoder IS
BEGIN
WITH code SELECT
result <= data_l AND data_r WHEN "000",
data_l NAND data_r WHEN "001",
data_l OR data_r WHEN "010",
data_l NOR data_r WHEN "011",
data_l XOR data_r WHEN "100",
data_l XNOR data_r WHEN "101",
(OTHERS => 'Z' ) WHEN OTHERS;
| END decoder; | 
