杭州电子科技大学2005 年EDA 技术与VHDL 考试试题
考试课程EDA 技术与VHDL 考试日期年月日成绩
课程号B0405010 教师号任课教师姓名曾毓
考生姓名学号(8 位)年级专业
一、单项选择题:(20 分)
1.大规模可编程器件主要有FPGA、CPLD 两类,下列对CPLD 结构与工作原理的描述中,正确的是。
A.CPLD 是基于查找表结构的可编程逻辑器件;
B.CPLD 即是现场可编程逻辑器件的英文简称;
C.早期的CPLD 是从GAL 的结构扩展而来;
D.在Xilinx 公司生产的器件中,XC9500 系列属CPLD 结构;
2.综合是EDA 设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中,是正确的。
A.综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD 的基本结构相映射的网表文件;
B.综合是纯软件的转换过程,与器件硬件结构无关;
C.为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为强制综合。
D.综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系是唯一的;
3.IP 核在EDA 技术和开发中具有十分重要的地位,IP 分软IP、固IP、硬IP;下列所描述的IP 核中,对于硬IP 的正确描述为。
A.提供用VHDL 等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路;
B.提供设计的最总产品--- 模型库;
C.以网表文件的形式提交用户,完成了综合的功能块;
D.都不是。
4.基于EDA 软件的FPGA / CPLD 设计流程为:原理图/HDL 文本输入→→ 综合→适配→→编程下载→硬件测试。
①功能仿真②时序仿真③逻辑综合④配置⑤引脚锁定
A.③① B. ⑤② C.④⑤ D. ①②5.下面对利用原理图输入设计方法进行数字电路系统设计,那一种说法是不正确的。
A.原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计;
B.原理图输入设计方法一般是一种自底向上的设计方法;
C.原理图输入设计方法无法对电路进行功能描述;
D.原理图输入设计方法也可进行层次化设计。
6.在VHDL 语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是。
A.PROCESS 为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。
B.敏感信号参数表中,不一定要列出进程中使用的所有输入信号;
C.进程由说明部分、结构体部分、和敏感信号三部分组成;
D.当前进程中声明的变量不可用于其他进程。
7.嵌套使用IF 语句,其综合结果可实现。
A.带优先级且条件相与的逻辑电路;
B.条件相或的逻辑电路;
C.三态控制电路;
D.双向控制电路。
8.电子系统设计优化,主要考虑提高资源利用率减少功耗---- 即面积优化,以及提高运行速度 --- 即速度优化;指出下列那种方法不属于速度优化:。
A. 流水线设计
B. 串行化
C. 关键路径法
D. 寄存器配平
9.在一个VHDL 设计中idata 是一个信号,数据类型为integer,数据范围0 to 127,下面哪个赋值语句是正确的。
A.idata := 32;
B.idata <= 16#A0#;
C. idata <= 16#7#E1;
D. idata := B#1010#;
10.下列EDA 软件中,哪一不具有逻辑综合功能:。
A.Max+Plus II
B.ModelSim
C.Quartus II
D.Synplify
第1 页共5 页
二、EDA 名词解释,写出下列缩写的中文(或者英文)含义:(14 分)
1.SOPC
2.LUT
3.JTAG
4.GAL
5.EAB
6.IP
7.HDL
三、VHDL 程序填空:(10 分)
下面程序是n 输入与门的VHDL 描述,试补充完整。
ieee;
use ........................................... a ll;
entity andn is
(n : integer); -- 类属参数声明
port ( a : in std_logic_vector( downto 0);
c : out std_logic);
end;
behav of is -- 结构体声明
begin
process ( )
int : std_logic; -- 变量声明
begin
int := ; -- 变量赋初值
for I in a'length – 1 downto 0 loop -- 循环判断
if a(i) = '0' then
int := '0';
end if;
end loop;
c <= ; -- 输出判断结果
end process;
end behav;
四、VHDL 程序改错:(10 分)
本题程序为EDA 实验中的示例程序sch.vhd,仔细阅读程序,回答问题。
1.对该程序进行编译时出现错误提示:“VHDL Design File “sch” must contain an entity of the same name.”
这是什么原因?如何修改?
2.修改问题1 的错误后,如果编译时出现“Can’t open VHDL “WORK””这样的错误提示。
这又是什么原因,如何修改?library ieee;
--1
use ieee.std_logic_1164.all; --2 entity schk is
--3
port (din, clk, clr : in std_logic; -- 串行输入数据位/工作时钟/复位信号
--4
--5 --6
ab : out std_logic_vector(3 downto 0) -- 检测结果输出);
end schk;
--7
architecture bhv of schk is -- 8
signal q : integer range 0 to 8; --9
signal d : std_logic_vector(7 downto 0); -- 8 位待检测预置数--10 begin
--11
d = "11100101"; -- 8 位待检测预置数
--12
process (clk, clr) -- 13
begin --14
--17 if clr = '1' then q<= 0; --15 else if clk'event and clk = '1' then --16 case q is
when 0 => if din = d(7) then q <= 1; else q <= 0; end if; --18
when 1 => if din = d(6) then q <= 2; else q <= 0; end if; --19
when 2 => if din = d(5) then q <= 3; else q <= 0; end if; --20
when 3 => if din = d(4) then q <= 4; else q <= 0; end if; --21
when 4 => if din = d(3) then q <= 5; else q <= 0; end if; --22
when 5 => if din = d(2) then q <= 6; else q <= 0; end if; --23
when 6 => if din = d(1) then q <= 7; else q <= 0; end if; --24
when 7 => if din = d(0) then q <= 8; else q <= 0; end if; --25
when others => q <= 0;
--26 --27
--28 end if;
end case;
-29
end process; -
process (q)
--30
begin
--31
32
--33 --34 if q = 8 then ab <= "1010"; -- else ab <= "1011";
end if;
end process; - -35
end bhv;
--36
1.在上述程序代码中存在两处错误,编译时出现如下提示,试修改错误:
Error: Line 12: File f:\eda\schk.vhd: VHDL syntax error: unexpected signal “d” in Concurrent Statement Part
Error: Line 29:File f:\eda\schk.vhd: VHDL syntax error: if statement must have END IF, but found PROCESS instead
错误1 行号:程序改为:
错误2 行号:程序改为:
第2 页共5 页
五、VHDL 程序设计:(16 分)
设计一数据选择器MUX,其系统模块图和功能表如下图所示。试采用下面三种方式中的两种来描述该数据选择器MUX 的结构体。
(a)用if 语句。(b) 用case 语句。(c) 用when else 语句。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mymux is
Port ( sel : in std_logic_vector(1 downto 0); -- 选择信号输入
Ain, Bin : in std_logic_vector(1 downto 0); -- 数据输入
Cout : out std_logic_vector(1 downto 0) );
End mymux;
六、根据原理图写出相应的VHDL 程序:(10 分)
第3 页共5 页
七、综合题(20 分)
下图是一个A/D 采集系统的部分,要求设计其中的FPGA 采集控制模块,该模块由三个部分构成:控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。控制器(control)是一个状态机,完成AD574 的控制,和adram 的写入操作。Adram 是一个LPM_RAM_DP 单元,在wren 为’1’时允许写入数据。试分别回答问题
下面列出了AD574 的控制方式和控制时序图
AD574 逻辑控制真值表(X 表示任意)
CE CS RC K12_8 A0 工作状态
0 X X X X 禁止
X 1 X X X 禁止
1 0 0 X 0 启动1
2 位转换
1 0 0 X 1 启动8 位转换
1 0 1 1 X 1
2 位并行输出有效
1 0 1 0 0 高8 位并行输出有效
1 0 1 0 1 低4 位加上尾随4 个0 有效
AD574 工作时序:
问题:
1.要求AD574 工作在12 位转换模式,K12_8、A0 在control 中如何设置?
2.试画出control 的状态机的状态图
3.地址计数器每当ClkInc 时钟上升沿到达,输出地址加1,请对该模块进行VHDL 描述。
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity cnt10 is
Port ( ClkInc, Cntclr : in std_logic; -- 时钟信号和清零信号输入Wraddr : out std_logic_vector (9 downto 0) );
End cnt10;
第4 页共5 页
4.根据状态图,试对control 进行VHDL 描述
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity control is
Port ( CLK, STATUS : in std_logic; -- 时钟信号和AD 转换状态信
号输入
End control; ADDATA : in std_logic_vector (11 downto 0); -- 转换数据输入CS, CE, A0, RC, K12_8 : out std_logic; -- AD574 控制信号ClkInc : out std_logic; -- 地址计数器时钟信号
rddata : out std_logic_vector (11 downto 0) ); -- 转换数据输出
5.已知adram 的端口描述如下
ENTITY adram IS
PORT
( data : IN STD_LOGIC_VECTOR (11 DOWNTO 0); -- 写入数据
wraddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 写入地址
rdaddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 读地址
wren : IN STD_LOGIC := '1'; -- 写使能
q : OUT STD_LOGIC_VECTOR (11 DOWNTO 0) -- 读出数据); END adram;
试用例化语句,对整个FPGA 采集控制模块进行VHDL 描述
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity ADC574 is
Port ( CLK, STATUS : in std_logic; -- 时钟信号和AD 转换状态信号输入
ADDATA : in std_logic_vector (11 downto 0); -- 转换数据输入
Cntclr : in std_logic; -- 计数器清零信号
Rdaddr : in std_logic_vector (9 downto 0); -- adram 读数地址
CS, CE, A0, RC, K12_8 : out std_logic; -- AD574 控制信号
rddata : out std_logic_vector (11 downto 0) ); -- adram 读数据输出End ADC574;