文档库 最新最全的文档下载
当前位置:文档库 › EDA期末复习资料 (5)

EDA期末复习资料 (5)

EDA期末复习资料 (5)
EDA期末复习资料 (5)

杭州电子科技大学EDA试卷

一、选择题:(20分)

1.大规模可编程器件主要有FPGA、CPLD两类,下列对CPLD结构与工作原理的描述中,正确的是:___D__

A. CPLD是基于查找表结构的可编程逻辑器件

B. CPLD即是现场可编程逻辑器件的英文简称

C. 早期的CPLD是从FPGA的结构扩展而来

D. 在Xilinx公司生产的器件中,XC9500系列属CPLD结构

2.基于VHDL设计的仿真包括有①门级时序仿真、②行为仿真、③功能仿真和④前端功能仿真这四种,按照自顶向下的设计流程,其先后顺序应该是:_________D

A.①②③④ B.②①④③C.④③②①D.②④③①

3.IP核在EDA技术和开发中具有十分重要的地位,IP分软IP、固IP、硬IP;下列所描述的IP核中,对于固IP的正确描述为:__________D

A.提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路

B.提供设计的最总产品——模型库

C.以可执行文件的形式提交用户,完成了综合的功能块

D.都不是

4.下面对利用原理图输入设计方法进行数字电路系统设计,哪一种说法是正确的:__________B

A.原理图输入设计方法直观便捷,很适合完成较大规模的电路系统设计

B.原理图输入设计方法一般是一种自底向上的设计方法

C.原理图输入设计方法无法对电路进行功能描述

D.原理图输入设计方法不适合进行层次化设计

5.在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是:_______D A.PROCESS为一无限循环语句

B.敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动

C.当前进程中声明的变量不可用于其他进程

D.进程由说明语句部分、并行语句部分和敏感信号参数表三部分组成6.对于信号和变量的说法,哪一个是不正确的:_________A

A.信号用于作为进程中局部数据存储单元

B.变量的赋值是立即完成的

C.信号在整个结构体内的任何地方都能适用

D.变量和信号的赋值符号不一样

7.下列状态机的状态编码,_________方式有?输出速度快、难以有效控制非法状态出现?这个特点。A

A.状态位直接输出型编码

B.一位热码编码

C.顺序编码

D.格雷编码

8.VHDL语言共支持四种常用库,其中哪种库是用户的VHDL设计现行工作库:_______D

A.IEEE库

B.VITAL库

C.STD库

D.WORK工作库

9.下列4个VHDL标识符中正确的是:_______B

A.10#128#

B.16#E#E1

C.74HC124

D.X_16

10.下列语句中,不属于并行语句的是:_______B

A.进程语句

B.CASE语句

C.元件例化语句

D.WHEN…ELSE…语句

二、EDA名词解释(10分)

写出下列缩写的中文(或者英文)含义:

1.ASIC 专用集成电路

2.FPGA 现场可编程门阵列

3.IP 知识产权核(软件包)

4.JTAG 联合测试行动小组

5.HDL 硬件描述语言

第1页共5页

三、VHDL程序填空:(10分)

以下程序是一个BCD码表示0~99计数器的VHDL描述,试补充完整。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt100b is

port( clk, rst, en : in std_logic;

cq : out std_logic_vector(7 downto 0); -- 计数输出

cout: out std_logic); -- 进位输出end entity cnt100b;

architecture bhv of cnt100b is

begin

process (clk, rst, en)

variable cqi : std_logic_vector(7 downto 0);

begin

if rst = '1' then

cqi := (others => ‘0’); -- 计数器清零复位

else

if clk’event and clk = ‘1’ then -- 上升沿判断

if en = '1' then

if cqi(3 downto 0) < "1001" then -- 比较低4位

cqi := cqi + 1; -- 计数加1

else

if cqi(7 downto 4) < "1001" then -- 比较高4位

cqi := cqi + 16;

else

cqi := (others => '0');

end if;

cqi (3 downto 0) := ?0000?; -- 低4位清零

end if;

end if;

end if;

end if;

if cqi = ?10011001? then -- 判断进位输出

cout <= '1';

else

cout <= '0';

end if;

cq <= cqi;

end process;

end architecture bhv; 四、VHDL程序改错:(10分)

仔细阅读下列程序,回答问题

LIBRARY IEEE; -- 1

USE IEEE.STD_LOGIC_1164.ALL; -- 2

ENTITY MOORE1 IS -- 3

PORT ( DATAIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- 4

CLK, RST: IN STD_LOGIC; -- 5

Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); -- 6

END MOORE1; -- 7

ARCHITECTURE BEHAV OF MOORE1 IS -- 8

SIGNAL ST_TYPE IS (ST0, ST1, ST2, ST3, ST4); -- 9

SIGNAL C_ST : ST_TYPE; -- 10

BEGIN -- 11

PROCESS (CLK, RST) -- 12

BEGIN -- 13

IF RST = '1' THEN C_ST <= ST0; Q <= "0000"; -- 14

ELSIF CLK'EVENT AND CLK = '1' THEN -- 15

CASE C_ST IS -- 16

WHEN ST0 => IF DATAIN = "10" THEN C_ST <= ST1; -- 17

ELSE C_ST <= ST0; -- 18

END IF; Q <= "1001"; -- 19

WHEN ST1 => IF DATAIN = "11" THEN C_ST <= ST2; -- 20

ELSE C_ST <= ST1; -- 21

END IF; Q <= "0101"; -- 22

WHEN ST2 => IF DATAIN = "01" THEN C_ST <= ST3; -- 23

ELSE C_ST <= ST0; -- 24

END IF; Q <= "1100"; -- 25

WHEN ST3 => IF DATAIN = "00" THEN C_ST <= ST4; -- 26

ELSE C_ST <= ST2; -- 27

END IF; Q <= "0010"; -- 28

WHEN ST4 => IF DATAIN = "11" THEN C_ST <= ST0; -- 29

ELSE C_ST <= ST3; -- 30

END IF; Q <= "1001"; -- 31

END CASE; -- 32

END IF; -- 33

END PROCESS; -- 34

END BEHAV; -- 35

1.在程序中存在两处错误,试指出,并说明理由:

在Quartus II中编译时,其中一个提示的错误为:

Error (Line 9): VHDL syntax error at MOORE1.vhd(9) near text "IS"; expecting ":", or ","

第9行,状态机数据类型声明错误,关键字应为TYPE

第32行,case语句缺少when others处理异常状态情况

2.修改相应行的程序(如果是缺少语句请指出大致的行数):

错误1 行号:9程序改为:SIGNAL 改为TYPE

错误2 行号:32程序改为:之前添加一句when others => c_st <= st0;

第2页共5页

五、阅读下列VHDL程序,画出相应RTL图:(10分)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY TRIS IS

PORT ( CONTROL : IN STD_LOGIC;

INN : IN STD_LOGIC;

Q : INOUT STD_LOGIC;

Y : OUT STD_LOGIC );

END TRIS;

ARCHITECTURE ONE OF TRIS IS

BEGIN

PROCESS (CONTROL, INN, Q)

BEGIN

IF (CONTROL = '0') THEN

Y <= Q;

Q <= 'Z';

ELSE

Q <= INN;

Y <= 'Z';

END IF;

END PROCESS;

END ONE;

六、写VHDL程序:(20分)

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描述

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY MYCIR IS

PORT (A, CLK : IN STD_LOGIC;

C, B : OUT STD_LOGIC );

END MYCIR;

ARCHITECTURE BEHAV OF MYCIR IS

SIGNAL TA : STD_LOGIC;

BEGIN

PROCESS (A, CLK)

BEGIN

IF CLK’EVENT AND CLK = ‘1’ THEN

TA <= A;

B <= TA;

C <= A AN

D TA;

END IF;

END PROCESS;

END BEHAV;

第3页共5页

七、综合题(20分) 下图是一个A/D 采集系统的部分,要求设计其中的FPGA 采集控制模块,该模块由三个部分构成:控制器(Control )、

地址计数器(addrcnt )、内嵌双口RAM (adram )。控制器(control )是一个状态机,完成AD574的控制,和adram 的写入操作。

adram 是一个LPM_RAM_DP 单元,在wren 为’1’时允许写入数据。试分别回答问题

放大采样/保持AnalogIn 信号预处理FPGA 采集控制adram (lpm_ram_dp )Control

AD574CS ADData 8CE A0RC

K12_8地址计数器CLK

ClkInc Cntclr

wraddr

6wren rddata 8

rddata

rdaddr

6

81STATUS

下面列出了AD574的控制方式和控制时序图:

AD574逻辑控制真值表(X 表示任意)

CE CS RC K12_8 A0 工 作 状 态

0 X X X X 禁止

X 1 X X X 禁止 1 0 0 X 0 启动12位转换 1 0 0 X 1 启动8位转换 1 0 1 1 X 12位并行输出有效 1 0 1 0 0 高8位并行输出有效 1 0 1 0 1 低4位加上尾随4个0有效 AD574工作时序 问题: 1. 要求AD574工作在8位转换模式,K12_8、A0在control 中如何设置? K12_8低电平 A0高电平 2. 试画出control 的状态机的状态图

3. 地址计数器每当ClkInc 时钟上升沿到达,输出地址加1,请对该模块进行VHDL 描述。

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_unsigned.all;

Entity cnt64 is

Port ( C lkInc, Cntclr : in std_logic; -- 时钟信号和清零信号输入

Wraddr : out std_logic_vector (5 downto 0) );

End cnt64;

Architecture one of cnt64 is

Begin

Process (clkinc, cntclr)

Variable counter : std_logic_vector (5 downto 0);

Begin

If cntclr = ‘1’ then counter := (others => ‘0’); Elsif clkinc = ‘1’ and clkinc ’event then counter := counter + 1;

End if;

Wraddr <= counter;

End process;

End one;

第4页 共5页

4.根据状态图,试对control进行VHDL描述

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_unsigned.all;

Entity control is

Port ( C LK, STATUS : in std_logic; -- 时钟信号和AD转换状态信号输入ADDATA : in std_logic_vector (7 downto 0); -- 转换数据输入

CS, CE, A0, RC, K12_8 : out std_logic; -- AD574控制信号

ClkInc : out std_logic; -- 地址计数器时钟信号

rddata : out std_logic_vector (7 downto 0) ); -- 转换数据输出End control;

Architecture behave of control is

Type sm_state is (s0, s1, s2, s3, s4);

Signal c_st, n_st : sm_state;

Signal lock : std_logic;

Signal regdata : std_logic_vector(7 downto 0);

Begin

K12_8 <= ‘0’;

A0 <= ‘1’;

Process (clk)

If clk’event and clk = ‘1’ then c_st <= n_st; end if;

End process;

Process (c_st, status)

Begin

Case c_st is

When s0 => n_st <= s1; rc <= ‘1’; ce <= ‘0’; cs <= ‘1’; lock <= ‘0’;

When s1 => n_st <= s2; rc <= ‘0’; ce <= ‘1’; cs <= ‘0; lock <= ‘0’;

When s2 => if status = ‘0’ then n_st <= s3; else n_st <= s2;

Rc <= ‘1’; ce <= ‘1’ cs <= ‘0’; lock <= ‘0’;

When s3 => n_st <= s4; rc <= ‘1’; ce <= ‘1’; cs <= ‘0’; lock <= ‘1’;

When s4 => n_st <= s0; rc <= ‘1’; ce <= ‘1’; cs <= ‘0’; lock <= ‘0’;

When others => n_st <= s0;

End case;

End process;

Process (lock)

Begin

If lock’event and lock = ‘1’ then

Regdata <= addata;

Clkinc <= ‘1’;

Else

Clkinc <= ‘0’;

End if;

End process;

Rddata <= regdata;

End behave; 5.已知adram的端口描述如下

ENTITY adram IS

PORT

( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); -- 写入数据

wraddress: IN STD_LOGIC_VECTOR (5 DOWNTO 0); -- 写入地址

rdaddress: IN STD_LOGIC_VECTOR (5 DOWNTO 0); -- 读地址

wren : IN STD_LOGIC := '1'; -- 写使能

q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) -- 读出数据);

END adram;

试用例化语句,对整个FPGA采集控制模块进行VHDL描述

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_unsigned.all;

Entity ADC574 is

Port ( C LK, STATUS : in std_logic; -- 时钟信号和AD转换状态信号输入

ADDATA : in std_logic_vector (7 downto 0); -- 转换数据输入

Cntclr : in std_logic; -- 计数器清零信号

Rdaddr : in std_logic_vector (5 downto 0); -- adram读数地址

CS, CE, A0, RC, K12_8 : out std_logic; -- AD574控制信号

rddata : out std_logic_vector (7 downto 0) ); -- adram读数据输出

End ADC574;

Architecture one of adc574 is

component cnt64

Port ( C lkInc, Cntclr : in std_logic; -- 时钟信号和清零信号输入

Wraddr : out std_logic_vector (5 downto 0) );

End component;

component control

Port ( C LK, STATUS : in std_logic; -- 时钟信号和AD转换状态信号输入

ADDATA : in std_logic_vector (7 downto 0); -- 转换数据输入

CS, CE, A0, RC, K12_8 : out std_logic; -- AD574控制信号

ClkInc : out std_logic; -- 地址计数器时钟信号

rddata : out std_logic_vector (7 downto 0) ); -- 转换数据输出

End component;

component adram

PORT ( data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); -- 写入数据

wraddress: IN STD_LOGIC_VECTOR (5 DOWNTO 0); -- 写入地址

rdaddress: IN STD_LOGIC_VECTOR (5 DOWNTO 0); -- 读地址

wren : IN STD_LOGIC := '1'; -- 写使能

q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) -- 读出数据);

END component;

Signal r_data : std_logic_vector (7 downto 0);

Signal clkinc : std_logic;

Signal wraddr : std_logic_vector (5 downto 0);

Begin

U1 : cnt64 port map (clkinc => clkinc, cntclr => cntclr, wraddr => wraddr);

U2 : control portmap (clk => clk, status => status, addata => addata, cs => cs, ce => ce, a0 => a0, rc => rc, k12_8 => k12_8, clkinc => clkinc, rddata => r_data);

U3 : adram port map (data => r_data, wraddress => wraddr, rdaddress => rdaddr, wren => ‘1’, q => rddata);

End one;

相关文档