好文档 - 专业文书写作范文服务资料分享网站

EDA期末考试题02(可编辑修改word版)

天下 分享 时间: 加入收藏 我要投稿 点赞

6. 对于信号和变量的说法,哪一个是不正确的: A.信号用于作为进程中局部数据存储单元 B.变量的赋值是立即完成的 A C.信号在整个结构体内的任何地方都能适用D.变量和信号的赋值符号不一样 7. 下列状态机的状态编码, A. 状态位直接输出型编码方式有“输出速度快、难以有效控制非法状态出现”这个特点。A B.一位热码编码 一、选择题:(20 分) 1. 大规模可编程器件主要有 FPGA、CPLD 两类,下列对 CPLD 结构与工作原理的描述中,正确的是: A. CPLD 是基于查找表结构的可编程逻辑器件 B. CPLD 即是现场可编程逻辑器件的英文简称 C. 早期的 CPLD 是从 FPGA 的结构扩展而来 D. 在 Xilinx 公司生产的器件中,XC9500 系列属 CPLD 结构 2. 基于 VHDL 设计的仿真包括有①门级时序仿真、②行为仿真、③功能仿真和④前端功能仿真这四种,按照自顶向下的设计流程,其先后顺序应该是: A.①②③④ B.②①④③ C.④③②① D D.②④③① D C.顺序编码 D.格雷编码 8. VHDL 语言共支持四种常用库,其中哪种库是用户的 VHDL 设计现行工作库: A.IEEE 库 B.VITAL 库 C.STD 库 D.WORK 工作库 9. 下列 4 个 VHDL 标识符中正确的是: A.10#128# B. C. D B 3. IP 核在 EDA 技术和开发中具有十分重要的地位,IP 分软 IP、固 IP、硬 IP;下列所描述的 IP 核中,对于固 IP 的正确描述为: D 6#E#E1 4HC124 A. 提供用 VHDL 等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路D. X_16 B.提供设计的最总产品——模型库 C.以可执行文件的形式提交用户,完成了综合的功能块 D.都不是 4. 下面对利用原理图输入设计方法进行数字电路系统设计,哪一种说法是正确的: A.原理图输入设计方法直观便捷,很适合完成较大规模的电路系统设计 B.原理图输入设计方法一般是一种自底向上的设计方法 C.原理图输入设计方法无法对电路进行功能描述D.原理图输入设计方法不适合进行层次化设计 5. 在 VHDL 语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是: A.PROCESS 为一无限循环语句 B.敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动C.当前进程中声明的变量不可用于其他进程 D.进程由说明语句部分、并行语句部分和敏感信号参数表三部分组成 D B 10.下列语句中,不属于并行语句的是: A.进程语句B.CASE 语句C.元件例化语句 D.WHEN…ELSE…语句 B 二、EDA 名词解释(10 分) 写出下列缩写的中文(或者英文)含义: 1. ASIC 2. FPGA 3. IP 4. JTAG 5. HDL 专用集成电路 现场可编程门阵列 知识产权核(软件包) 联合测试行动小组 硬件描述语言

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

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

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

四、VHDL 程序改错:(10 分)

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

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) < \

cqi := cqi + 1; else

if cqi(7 downto 4) < \

cqi := cqi + 16; else

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

-- 上升沿判断

-- 比较低4位 -- 计数加1

-- 比较高4位

cqi (3 downto 0) := “0000”; end if; end if;

end if; end if;

-- 低4位清零

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY MOORE1 IS

PORT ( DATAIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK, RST: IN STD_LOGIC;

Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END MOORE1;

ARCHITECTURE BEHAV OF MOORE1 IS

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

SIGNAL C_ST : ST_TYPE;

BEGIN

PROCESS (CLK, RST)

BEGIN

IF RST = '1' THEN C_ST <= ST0; Q <= \ ELSIF CLK'EVENT AND CLK = '1' THEN

CASE C_ST IS

WHEN ST0 => IF DATAIN = \

ELSE C_ST <= ST0;

END IF; Q <= \

WHEN ST1 => IF DATAIN = \

ELSE C_ST <= ST1;

END IF; Q <= \

WHEN ST2 => IF DATAIN = \

ELSE C_ST <= ST0;

END IF; Q <= \

WHEN ST3 => IF DATAIN = \

ELSE C_ST <= ST2;

END IF; Q <= \

WHEN ST4 => IF DATAIN = \

ELSE C_ST <= ST3;

END IF; Q <= \

END CASE; END IF; END PROCESS; END BEHAV;

-- 1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 -- 9 -- 10 -- 11 -- 12 -- 13 -- 14 -- 15 -- 16 -- 17 -- 18 -- 19 -- 20 -- 21 -- 22 -- 23 -- 24 -- 25 -- 26 -- 27 -- 28 -- 29 -- 30 -- 31 -- 32 -- 33 -- 34 -- 35

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

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

-- 判断进位输出

Error (Line 9): VHDL syntax error at MOORE1.vhd(9) near text \

if cqi = “10011001” then

cout <= '1'; else

cout <= '0'; end if; cq <= cqi; end process; end architecture bhv;

第 9 行,状态机数据类型声明错误,关键字应为 TYPE 第 32 行,case 语句缺少 when others 处理异常状态情况

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

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

错误 2

行号: 32

程序改为:之前添加一句 when others => c_st <= st0;

五、阅读下列 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;

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 AND TA; END IF; END PROCESS; END BEHAV;

六、写 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;

七、综合题(20 分) 下图是一个 A/D 采集系统的部分,要求设计其中的 FPGA 采集控制模块,该模块由三个部分构成:控制器(Control)、地址计数器(addrcnt)、内嵌双口 RAM(adram)。控制器(control)是一个状态机,完成 AD574的控制,和 adram 的写入操作。adram 是一个 LPM_RAM_DP 单元,在 wren 为’1’时允许写入数据。试分别回答问题 2. 试画出 control 的状态机的状态图 信号预处理 放 大采样/保持 AD574 ADData 8 STATUS CS CE A0 8 rddata 1 wren adram (lpm_ram_dp) 8 rddata rdaddr 6 Control 6 ClkInc wraddr Cntclr AnalogIn RC K12_8 CLK 地址 计数器 FPGA采集控制 下面列出了 AD574 的控制方式和控制时序图: AD574 逻辑控制真值表(X 表示任意) CE 0 X 1 1 1 1 1 CS X 1 0 0 0 0 0 RC X X 0 0 1 1 1 K12_8 X X X X 1 0 0 A0 X X 0 1 X 0 1 工 作 状 态 禁止 禁止 启动 12 位转换 启动 8 位转换 12 位并行输出有效 高 8 位并行输出有效 低 4 位加上尾随 4 个 0 有效 3. 地址计数器每当 ClkInc 时钟上升沿到达,输出地址加 1,请对该模块进行 VHDL 描述。 Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity cnt64 is Port ( ClkInc, 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; AD574 工作时序 问题: 1. 要求 AD574 工作在 8 位转换模式,K12_8、A0 在 control 中如何设置? K12_8 低电平A0 高电平

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转换状态信号输入

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;

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;

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;

Entity ADC574 is

Port ( CLK, 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 ( ClkInc, Cntclr : in std_logic; -- 时钟信号和清零信号输入

Wraddr : out std_logic_vector (5 downto 0) );

End component; component control

Port ( CLK, 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;

EDA期末考试题02(可编辑修改word版)

6.对于信号和变量的说法,哪一个是不正确的:A.信号用于作为进程中局部数据存储单元B.变量的赋值是立即完成的AC.信号在整个结构体内的任何地方都能适用D.变量和信号的赋值符号不一样7.下列状态机的状态编码,A.状态位直接输出型编码方式有“输出速度快、难以有效控制非法状态
推荐度:
点击下载文档文档为doc格式
5qdgd6wmiq0a6ri16ozy38gut0xt46013qj
领取福利

微信扫码领取福利

微信扫码分享