一、填空题(本大题共10小题,每空1分,共20分)
1.一般把EDA技术的发展分为 MOS时代、 CMOS时代和 ASIC 三个阶段。
2.EDA设计流程包括设计输入、设计实现、实际设计检验和下载编程四个步骤。
3.EDA设计输入主要包括图形输入、 HDL文本输入和状态机输入。
4.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为功能仿真。5.VHDL的数据对象包括变量、常量和信号,它们是用来存放各种类型数据的容器。
6.图形文件设计结束后一定要通过仿真,检查设计文件是否正确。
7.以EDA方式设计实现的电路设计文件,最终可以编程下载到 FPGA 和 CPLD 芯片中,完成硬件设计和验证。8.MAX+PLUS的文本文件类型是(后缀名) .VHD 。
9.在PC上利用VHDL进行项目设计,不允许在根目录下进行,必须在根目录为设计建立一个工程目录(即文件夹)。10.VHDL源程序的文件名应与实体名相同,否则无法通过编译。
一、填空题(本大题共10小题,每空1分,共20分)
1.一般把EDA技术的发展分为 MOS时代、 CMOS时代和 ASIC 三个阶段。
2.EDA设计流程包括设计输入、设计实现、实际设计检验和下载编程四个步骤。
3.EDA设计输入主要包括图形输入、 HDL文本输入和状态机输入。
4.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为功能仿真。5.VHDL的数据对象包括变量、常量和信号,它们是用来存放各种类型数据的容器。
6.图形文件设计结束后一定要通过仿真,检查设计文件是否正确。
7.以EDA方式设计实现的电路设计文件,最终可以编程下载到 FPGA 和 CPLD 芯片中,完成硬件设计和验证。8.MAX+PLUS的文本文件类型是(后缀名) .VHD 。
9.在PC上利用VHDL进行项目设计,不允许在根目录下进行,必须在根目录为设计建立一个工程目录(即文件夹)。10.VHDL源程序的文件名应与实体名相同,否则无法通过编译。
二、选择题:(本大题共5小题,每小题3分,共15分)。
11.在EDA工具中,能完成在目标系统器件上布局布线软件称为(C )
A.仿真器
B.综合器
C.适配器
D.下载器
12.在执行MAX+PLUSⅡ的(d )命令,可以精确分析设计电路输入与输出波形间的延时量。
A .Create default symbol B. Simulator
C. Compiler
D.Timing Analyzer
13.VHDL常用的库是(A )
A. IEEE
B.STD
C. WORK
D. PACKAGE
14.下面既是并行语句又是串行语句的是( C )
A.变量赋值
B.信号赋值
C.PROCESS语句
D.WHEN…ELSE语句
15.在VHDL中,用语句(D )表示clock的下降沿。
A. clock’EVENT
B. clo ck’EVENT AND clock=’1’
C. clock=’0’
D. clock’EVENT AND clock=’0’
VHDL和FPGA: 超高速硬件描述语言现场可编程门阵列
杭州电子科技大学2004年EDA技术与VHD学生考试卷答案
考试课程EDA技术与VHDL 考试日期2005年月日成绩参考答卷
课程号教师号任课教师姓名
考生姓名学号(8位)年级专业
一、单项选择题:(20分)
1.IP核在EDA技术和开发中具有十分重要的地位;提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路的IP核为__________。A
A .软IP B.固IP C.硬IP D.都不是
2.综合是EDA设计流程的关键步骤,在下面对综合的描述中,_________是错误的。D
A. 综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
B. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;
C. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
D. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系是唯一的(即综合结果是唯一的)。
3.大规模可编程器件主要有FPGA、CPLD两类,下列对FPGA结构与工作原理的描述中,正确的是__C__。
A. FPGA是基于乘积项结构的可编程逻辑器件;
B. FPGA是全称为复杂可编程逻辑器件;
C. 基于SRAM的FPGA器件,在每次上电后必须进行一次配臵;
D. 在Altera公司生产的器件中,MAX7000系列属FPGA结构。
4.进程中的变量赋值语句,其变量更新是_________。A
A. 立即完成;
B. 按顺序完成;
C. 在进程的最后完成;
D. 都不对。5.VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述___________。D
A. 器件外部特性;
B. 器件的综合约束;
C. 器件外部特性与内部功能;
D. 器件的内部功能。
6.不完整的IF语句,其综合结果可实现________。A
A. 时序逻辑电路
B. 组合逻辑电路
C. 双向电路
D. 三态控制电路
7.子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速度(即速度优化);指出下列哪些方法是面积优化_________。B
①流水线设计②资源共享③逻辑优化④串行化⑤寄存器配平⑥关键路径法
A. ①③⑤
B. ②③④
C. ②⑤⑥
D. ①④⑥
8.下列标识符中,__________是不合法的标识符。B
A. State0
B. 9moon
C. Not_Ack_0
D. signall
9.关于VHDL中的数字,请找出以下数字中最大的一个:__________。A
A. 2#1111_1110#
B. 8#276#
C. 10#170#
D. 16#E#E1
10.下列EDA软件中,哪一个不具有逻辑综合功能:________。B
A. Max+Plus II
B. ModelSim
C. Quartus II
D. Synplify
第1页共5页
二、EDA名词解释,写出下列缩写的中文(或者英文)含义:(10分)
1. VHDL 超高速集成电路硬件描述语言
2. FPGA 现场可编程门阵列
3. RTL 寄存器传输级
4. SOPC 可编程片上系统
5. EAB 嵌入式阵列块
三、VHDL程序填空:(10分)
下面程序是参数可定制带计数使能异步复位计数器的VHDL描述,试补充完整。
-- N-bit Up Counter with Load, Count Enable, and
-- Asynchronous Reset
library ieee;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_arith.all;
entity counter_n is
generic (width : integer := 8);
port(data : in std_logic_vector (width-1 downto 0);
load, en, clk, rst : in std_logic;
q : out std_logic_vector (width - 1 downto 0));
end counter_n;
architecture behave of counter is
signal count : std_logic_vector (width-1 downto 0);
begin
process(clk, rst)
begin
if rst = '1' then
count <= (others => ‘0’);―― 清零
elsif clk’event and clk = ‘1’ then―― 边沿检测
if load = '1' then
count <= data;
elsif en = '1' then
count <= count + 1;
end if;
end if;
end process;
q <= count;
end behave;
四、VHDL程序改错:(10分)
仔细阅读下列程序,回答问题
1 LIBRARY IEEE;
2 USE IEEE.STD_LOGIC_1164.ALL;
3
4 ENTITY CNT10 IS
5 PORT ( CLK : IN STD_LOGIC ;
6 Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;
7 END CNT10;
8 ARCHITECTURE bhv OF CNT10 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 < 9 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;
1. 在MAX+PlusII中编译时,提示的第一条错误为:
Error: Line 12: File e:\mywork\test\cnt10.vhd: VHDL syntax error: If statement must have THEN, but found BEGIN instead
指出并修改相应行的程序(如果是缺少语句请指出大致的行数):
错误1 行号:12 程序改为:IF RISING_EDGE(CLK) THEN
错误2 行号:3 程序改为:USE IEEE.STD_LOGIC_UNSIGNED.ALL;
12 行if语句配套关键字是then而非begin
3 行程序中使用了+号重载函数,应包含使用对应程序包ieee.std_logic_unsigned.all
2. 若编译时出现如下错误,请分析原因。
当前编译的程序文件没有放在指定文件夹内,所以系统找不到WORK工作库。
第2页共5页
五、VHDL程序设计:(15分)
设计一数据选择器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;
Architecture one of mymux is
Begin
Process (sel, ain, bin)
Begin
If sel = ?00? then cout <= ain or bin;
Elsif sel = ?01? then cout <= ain xor bin;
Elsif sel = ?10? then cout <= ain and bin;
Else cout <= ain nor bin;
End if;
End process;
End one;
Architecture two of mymux is
Begin
Process (sel, ain, bin)
Begin
Case sel is
when ?00? => cout <= ain or bin;
when ?01? => cout <= ain xor bin;
when ?10? => cout <= ain and bin;
when others => cout <= ain nor bin;
End case;
End process;
End two;
Architecture three of mymux is
Begin
Cout <= ain or bin when sel = ?00? else
Ain xor bin when sel = ?01? else
Ain and bin when sel = ?10? else ain nor bin; End three;
六、根据原理图写出相应的VHDL程序:(15分)
Library ieee;
Use ieee.std_logic_1164.all;
Entity mycir is
Port ( din, clk : in std_logic;
Qout : out std_logic);
End mycir;
Architecture behave of mycir is
Signal a, b, c;
Begin
Qout <= c nand (a xor b);
Process (clk)
Begin
If clk’event and clk = ‘1’ then
A <= din;
B <= A;
C <= B;
End if;
End process;
End behave;
第3页共5页
七、综合题:(20分)
(一)已知状态机状态图如图a所示;完成下列各题:
图a 状态图
图b 状态机结构图
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;
Ina : 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,使用状态位直接输出型状态机编码方式,其输出直接由当前状态输出,也没有毛刺
第4页共5页
(二)已知一个简单的波形发生器的数字部分系统框图如下图所示
图中lcnt、lrom都是在MAX+PlusII中使用MegaWizard调用的LPM模块,其VHDL描述中Entity部分分别如下:
ENTITY lcnt IS
PORT
(
clock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0)
);
END lcnt;
ENTITY lrom IS
PORT
(
address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0)
);
END lrom;
试用VHDL描述该系统的顶层设计(使用例化语句)。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mysg is
Port (clk : in std_logic;
To_da : out std_logic_vector (9 downto 0) );
End mysq;
Architecture one of mysq is
Signal addr : std_logic_vector (9 downto 0);
Component lcnt
Port (clock : in std_logic;
Q : out std_logic_vector (9 downto 0) );
End component;
Component lrom
Port (address : in std_logic_vector (9 downto 0);
Q : out std_logic_vector (9 downto 0) );
End component;
Begin
U1 : lcnt port map (clock => clk, q => addr);
U2 : lrom port map (address => addr, q => to_da);
End one;
第5页共5页
七、综合题:(20分)
根据如下所示状态图及其状态机结构图,回答问题
1.试判断该状态机类型,并说明理由。
改状态机可以为mealy型状态机,当输入ina变化时可影响输出outa立即变化
2.请问如何消除状态机输出信号毛刺?试列出至少两种方法,并说明理由。
方法1,添加辅助进程对输出数据进行锁存
方法2,将双进程状态机改写为单进程状态机,其输出也是锁存过了,故能消除毛刺
方法3,使用状态位直接输出型状态机编码方式,其输出直接由当前状态输出,也没有毛刺3.试由b、c两图中任选一图写出其完整的VHDL程序。LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY EX7 IS
PORT ( CLK, RESET : IN STD_LOGIC;
INA : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
OUTA : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END EX7;
-- MOORE型状态机
ARCHITECTURE ONE OF EX7 IS
TYPE STATE IS (S0, S1, S2, S3);
SIGNAL C_ST : STATE;
BEGIN
PROCESS (CLK, RESET, INA) BEGIN
IF RESET = '1' THEN C_ST <= S0; OUTA <= (OTHERS => '0');
ELSIF RISING_EDGE(CLK) THEN
CASE C_ST IS
WHEN S0 => IF INA = "101" THEN OUTA <= "0010";
ELSIF INA = "111" THEN OUTA <= "1100"; END IF;
C_ST <= S1;
WHEN S1 => IF INA = "000" THEN C_ST <= S1;
ELSIF INA = "110" THEN C_ST <= S2; END IF;
OUTA <= "1001";
WHEN S2 => IF INA = "100" THEN C_ST <= S2;
ELSIF INA = "011" THEN C_ST <= S1; ELSE C_ST <= S3;END IF;
OUTA <= "1111";
WHEN S3 => IF INA = "101" THEN OUTA <= "1101";
ELSIF INA = "011" THEN OUTA <= "1110"; END IF;
C_ST <= S3;
WHEN OTHERS => C_ST <= S0; OUTA <= (OTHERS => '0');
END CASE;
END IF;
END PROCESS;
END ONE;
-- MEALY型状态机
ARCHITECTURE TWO OF EX7 IS
TYPE STATE IS (S0, S1, S2, S3);
SIGNAL C_ST, N_ST : STATE;
BEGIN
REG : PROCESS (CLK, RESET) BEGIN
IF RESET = '1' THEN C_ST <= S0;
ELSIF CLK'EVENT AND CLK = '1' THEN C_ST <= N_ST;END IF;
END PROCESS;
COM : PROCESS (C_ST, INA) BEGIN
CASE C_ST IS
WHEN S0 => N_ST <= S1; IF INA = "101" THEN OUTA <= "0010";
ELSIF INA = "111" THEN OUTA <= "1100"; ELSE OUTA <= "0000";END IF;
WHEN S1 => OUTA <= "1001"; IF INA = "000" THEN N_ST <= S1;
ELSIF INA = "110" THEN N_ST <= S2; ELSE N_ST <= S1;END IF;
WHEN S2 => OUTA <= "1111"; IF INA = "100" THEN N_ST <= S2;
ELSIF INA = "011" THEN N_ST <= S1; ELSE N_ST <= S3;END IF;
WHEN S3 => IF INA = "101" THEN OUTA <= "1101";
ELSIF INA = "011" THEN OUTA <= "1110"; ELSE OUTA <= "0000";END IF;
N_ST <= S3;
WHEN OTHERS => N_ST <= S0; OUTA <= (OTHERS => '0');
END CASE;
END PROCESS;
END TWO;
第4页共5页
4. 已知一个简单的波形发生器的数字部分系统框图如下图所示:
图中DOWNCNT、MYROM都是在MAX+PlusII中使用MegaWizard调用的LPM模块,其VHDL描述中Entity部分分别如下:ENTITY DOWNCNT IS
PORT
(
clock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)
);
END DOWNCNT;
ENTITY myrom IS
PORT
(
address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END myrom;
试用VHDL描述该系统的顶层设计(使用例化语句)。
Library ieee;
Use ieee.std_logic_1164.all;
Entity mysg is
Port (clk : in std_logic;
To_da : out std_logic_vector (7 downto 0) );
End mysq;
Architecture one of mysq is
Signal addr : std_logic_vector (5 downto 0);
Component lcnt
Port (clock : in std_logic;
Q : out std_logic_vector (5 downto 0) );
End component;
Component lrom
Port (address : in std_logic_vector (5 downto 0);
Q : out std_logic_vector (7 downto 0) );
End component;
Begin
U1 : lcnt port map (clock => clk, q => addr);
U2 : lrom port map (address => addr, q => to_da);
End one;