当前位置:文档之家› EDA复习资料大全

EDA复习资料大全

EDA复习资料大全
EDA复习资料大全

1.一般把EDA技术的发展分为MOS时代、MOS时代和ASIC三个阶段。2.EDA设计流程包括设计输入、设计实现、实际设计检验和下载编程四个步骤。

3.EDA设计输入主要包括图形输入、HDL文本输入和状态机输入。

4.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为功能仿真。

5.VHDL的数据对象包括变量、常量和信号,它们是用来存放各种类型数据的容器。

6.图形文件设计结束后一定要通过仿真,检查设计文件是否正确。

7.以EDA方式设计实现的电路设计文件,最终可以编程下到FPGA和CPLD芯片中,完成硬件设计和验证。

8.MAX+PLUS的文本文件类型是(后缀名).VHD。

9.在PC上利用VHDL进行项目设计,不允许在根目录下进行,必须在根目录为设计建立一个工程目录。

10.VHDL源程序的文件名应与实体名相同,否则无法通过编译

二、名词解释,写出下列缩写的中文(或者英文)含义:

1. FPGA Field-Programmable Gate Array 现场可编程门阵列

2VHDL Very-High-Speed Integrated Circuit Hardware Description Language)甚高速集成电路硬件描述语言

3 HDL Hardware Description Language硬件描述语言

5 CPLD Complex Programmable Logic Device复杂可编程逻辑器件

6PLD Programmable Logic Device 可编程逻辑器件7GAL generic array logic通用阵列逻辑

https://www.doczj.com/doc/9f9113267.html,B Logic Array Block逻辑阵列块9. CLB Configurable Logic Block 可配置逻辑模块

10 EAB Embedded Array Block 嵌入式阵列块11SOPC System-on-a-Programmable-Chip 可编程片上系统

12. LUT Look-Up Table 查找表13. JTAG Joint Test Action Group 联合测试行为组织

14.IP Intellectual Property 知识产15ASIC Application Specific Integrated Circuits 专用集成电路

16 ISP In System Programmable 在系统可编程17 ICR In Circuit Re-config 在电路可重构

18 RTL Register Transfer Level 寄存器传输19EDA Electronic Design Automation 电子设计自动化

1、 FPGA结构一般分为三部分:可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。

2、 CPLD的内部连线为连续式布线互连结构,任意一对输入、输出端之间的延时是固定;FPGA的内部连线为分段式布线互连结构,各功能单元间的延时不定(不可预测)。

3、大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过可编程乘积项逻辑实现其逻辑功能。基于SRAM的FPGA器件,每次上电后必须进行一次配置。FPGA内部阵列的配置一般采用在电路可重构技术,编程数据保存在静态存储器(SRAM) ,掉电易失。

4、目前世界上有十几家生产CPLD/FPGA的公司,最大的两家是:Altera,Xilinx。

5、硬件描述语言(HDL)是EDA技术的重要组成部分,是电子系统硬件行为描述、结构描述、数据流描述的语言,它的种类很多,如VHDL、Verilog HDL、AHDL

6、 WHEN_ELSE条件信号赋值语句和 IF_ELSE顺序语句的异同:

* WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。

* IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中

7、可编程逻辑器件设计输入有原理图输入、硬件描述语言输入和波形输入三种方式。原理图输入方式是一种最直接的设计描述方式,波形设计输入适用于时序逻辑和有重复性的逻辑函数。

硬件描述语言的突出优点是:

* 语言与工艺的无关性;语言的公开可利用性,便于实现大规模系统的设计;

* 具有很强逻辑描述和仿真功能,而且输入效率高,在不同设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。

8、用VHDL/Veilog HDL语言开发可编程逻辑电路的完整流程:文本编辑→功能仿真→逻辑综合→布局布线→时序仿真。

*所谓综合,就是根据设计功能和实现该设计的约束条件(如面积、速度、功耗和成本等),将设计输入转换成满足要求的电路设计方案,该方案必须同时满足与其的功能和约束条件。综合的过程也是设计目标的优化过程,其目的是将多个模块化设计文件合并为一个网表文件,供布局布线使用,网表中包含了目标器件中的逻辑单元和互连的信息。

*布局布线就是根据设计者指定的约束条件(如面积、延时、时钟等)、目标器件的结构资源和工艺特性,以最优的方式对逻辑元件布局,并准确地实现元件间的互连,完成实现方案(网表)到使实际目标器件(FPGA或CPLD)的变换。

9、基于EDA软件的FPGA / CPLD设计流程为:原理图/HDL文本输入→功能仿真→综合→适配→时序仿真→编程下载→硬件测试。

* 综合是EDA设计的关键步骤,综合就是将电路的高级语言转换成低级的,可与FPGA/CPLD相映射的功能网表文件。为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。

10、构成一个完整的VHDL语言程序的五个基本结构:

实体(ENTITY)、结构体(ARCHITECURE)、配置(CONFIGURATION) 、库(LIBRARY) 、程序包 (PACKAGE) 。

*实体的由实体说明和结构体两部分组成。实体说明部分用于描述所设计系统的外部端口信号和参数的属性和设置,而结构体部分则定义了设计单元的具体功能、行为、数据流程或内部结构。

*结构体的三种描述方式,即行为级描述、数据流级描述和结构级描述。

*结构体通常由结构体名称、定义语句和并行处理语句构成。

*程序包用于存放各设计模块能共享的数据类型、常数、子程序等。

*库用于存放已编译的实体、结构体、程序包和配置,可以通过其目录进行查询和调用。在VHDL语言中,可以存在多个不同的库,但是库与库之间是独立的,不能互相嵌套。它可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。

*库用于存放已编译的实体、结构体、程序包和配置,可以通过其目录进行查询和调用。在VHDL语言中,可以存在多个不同的库,但是库与库之间是独立的,不能互相嵌套。它可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。

常用库:

(1)IEEE库:IEEE库主要包括std_logic_1164、numeric_bit、numeric_std 等程序包,还有一些程序包非IEEE标准,但并入IEEE库,如

std_logic_arich、std_logic_unsigned、std_logic_signed。使用IEEE

程序包,必须声明。

(2) std库:包含 standard textio程序包。Std库符合IEEE标准,应用中不必声明。

(3) work库:用户的VHDL设计先行工作库。

(4) vital 库:包含时序程序包vital_timing和vital_primitives。设计开发过程通常不用,每个设计实体都必须有各自完整的库说明语句和use 语句。Use语句的使用将使说明的程序包对本设计实体部分全部开放,即是可视的。

11、VHDL的数据对象包括常量(constant)、变量(varuable) 和信号(signal) ,它们是用来存放各种类型数据的容器。

12、在VHDL的端口声明语句中,端口方向包括 in 、out 、buffer 、inout、linkage 。“BUFFER”为缓冲端口,与OUT类似,只是缓冲端口允许实体内

部使用该端口信号,它可以用于输出,也可以用于端口信号的反馈。当一个

结构体用“BUFFER”说明输出端口时,与其连接的另一个结构体的端口也要

用BUFFER说明。以“LINKAGE”定义的端口不指定方向,无论哪个方向的信

号都可以连接。

13、VHDL的PROCESS(进程)语句是由顺序语句组成的,但其本身却是并

行语句。

14、VHDL的子程序有过程(PROCEDURE) 和函数(FUNCTION) 两种类型,具

有可重载性特点。

15、图形文件的扩展名是 .bdf ;矢量波形文件的扩展名是 .vwf ;使用VHDL语言,文本设计文件的扩展名是 .vhd ;自建元件图形符号文件的扩

展名.bsf;资源分配说明文件扩展名.qsf,用文本打开它可以修改引脚编号;

逻辑综合会生成.edf文件;双击.qpf文件可启动QuartusII并打开已有工

程。

16、图形编辑中模块间的连线有三种形式:节点线、总线和管道线

17、Quartus编译器编译FPGA工程最终生产两种不同用途的文件,它们分别是.sof 和.pof。sof是SRAM Object File,下载到FPGA中,断电丢失。pof是Programmer Object File,下载到配置芯片中,上电重新配置FPGA。

18、FPGA过程中的仿真有三种:行为仿真、逻辑仿真、时序仿真。

19、IP核在EDA技术和开发中占有很重要地位,提供VHDL硬件描述语言功能块,但不涉及实现该功能模块的具体电路的IP核为软件IP。

一.问答题

1信号赋值语句在什么情况下作为并行语句?在什么情况下作顺序语句?

信号赋值和变量赋值符号分别是什么?两种赋值符号有什么区别?

●信号赋值语句在进程外作并行语句,并发执行,与语句所处的位置

无关。信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,

与语句所处的位置有关。

●信号赋值符号为“<=”变量赋值用“:=”。信号赋值符号用于信

号赋值动作,不立即生效。变量,赋值符号用于变量赋值动作,立

即生效。

2进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用?

●进程的“敏感信号表”也称敏感表,是进程的激活条件,可由

一个或多个信号组成,各信号间以“,”号分隔。当敏感信号表中的

任一个信号有事件发生,即发生任意变化,此时,进程被激活,进

程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之

后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件

发生,进程再次被激活,如此循环往复。

3什么是库、程序包、子程序、过程调用和函数调用?

库和程序包用来描述和保存元件、类型说明和子程序等,以便在其它设计中通过其目录可查询、调用。子程序由过程和函数组成。在

子程序调用过程中,过程能返回多个变量,函数只能返回一个变量。

若子程序调用的是一个过程,就称为过程调用,若子程序调用的是

一个函数,则称为函数调用。过程调用、函数调用都是子程序调用。

二、VHDL程序填空

1. 下面程序是1位十进制计数器的VHDL描述,试补充完整。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT10 IS

PORT ( CLK : IN STD_LOGIC ;

Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;

END CNT10;

ARCHITECTURE bhv OF CNT10IS

SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS (CLK)

BEGIN

IF CLK'EVENT AND CLK = '1' THEN -- 边沿检测

IF Q1 > 10 THEN

Q1 <= (OTHERS => '0'); -- 置零

ELSE

Q1 <= Q1 + 1 ; -- 加1

END IF;

END IF;

END PROCESS ;

Q <= Q1;

END bhv;

2. 下面是一个多路选择器的VHDL描述,试补充完整。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY bmux IS

PORT ( sel : IN STD_LOGIC;

A, B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

Y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)) ;

END bmux;

ARCHITECTURE bhv OF bmux IS

BEGIN

y <= A when sel = '1'ELSE

B;

END bhv;

三、VHDL程序改错

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

LIBRARY IEEE; -- 1 USE IEEE.STD_LOGIC_1164.ALL; -- 2 ENTITY LED7SEG IS -- 3 PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); -- 4 CLK : IN STD_LOGIC; -- 5 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); -- 6 END LED7SEG; -- 7

ARCHITECTURE one OF LED7SEG IS -- 8 SIGNAL TMP : STD_LOGIC; -- 9

BEGIN -- 10 SYNC : PROCESS(CLK, A) -- 11

BEGIN -- 12 IF CLK'EVENT AND CLK = '1' THEN -- 13 TMP <= A; -- 14 END IF; -- 15 END PROCESS; -- 16 OUTLED : PROCESS(TMP) -- 17 BEGIN -- 18 CASE TMP IS -- 19

WHEN "0000" => LED7S <= "0111111"; -- 20

WHEN "0001" => LED7S <= "0000110"; -- 21

WHEN "0010" => LED7S <= "1011011"; -- 22

WHEN "0011" => LED7S <= "1001111"; -- 23

WHEN "0100" => LED7S <= "1100110"; -- 24

WHEN "0101" => LED7S <= "1101101"; -- 25

WHEN "0110" => LED7S <= "1111101"; -- 26

WHEN "0111" => LED7S <= "0000111"; -- 27

WHEN "1000" => LED7S <= "1111111"; -- 28

WHEN "1001" => LED7S <= "1101111"; -- 29

END CASE; -- 30 END PROCESS; -- 31 END one; -- 32

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

第14行TMP附值错误

第29与30行之间,缺少WHEN OTHERS语句

2.修改相应行的程序:

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

TMP : STD_LOGIC_VECTOR(3 DOWNTO 0);

错误2 行号:29 程序改为:

该语句后添加WHEN OTHERS => LED7S <= "0000000";

二.改错题

1.已知sel为STD_LOGIC_VECTOR(1 DOWNTO 0)类型的信号,而a、b、

c、d、q均为STD_LOGIC类型的信号,请判断下面给出的CASE语句

程序片段:

●CASE sel IS

●WHEN“00”=>q<=a;

●WHEN“01”=>q<=b;

●WHEN“10”=>q<=c;

●WHEN“11”=>q<=d;

●END CASE;

●答案:CASE语句缺“WHEN OTHERS”语句。

2.已知data_in1, data_in2为STD_LOGIC_VECTOR(15 DOWNTO 0) 类型的输入端口,data_out为STD_LOGIC_VECTOR(15 DOWNTO 0)类型的输出端口,add_sub为STD_LOGIC类型的输入端口,请判断下面给出的程序片段:

●LIBRARY IEEE;

●USE IEEE.STD_LOGIC_1164.ALL;

●ENTITY add IS

●PORT(data_in1, data_in2:IN INTEGER;

●data_out:OUT INTEGER);

●END add;

●ARCHTECTURE add_arch OF add IS

●CONSTANT a:INTEGER<=2;

●BEGIN

●data_out<=( data_in1+ data_in2) * a;

●END addsub_arch;

答案:常量声明时赋初值的“<=”符号应改用“:=”符号。

3.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片段:

●ARCHITECTURE test_arch OF test IS

●BEGIN

●SIGNAL B:STD_LOGIC;

●Q<= B;

END test_arch

答案:信号SIGNAL的声明语句应该放在BEGIN语句之前。

4.已知A和Q均为BIT类型的信号,请判断下面的程序片段:

●ARCHITECTURE archtest OF test IS

●BEGIN

●CASE A IS

●WHEN …0?=>Q<=…1?;

●WHEN …1?=>Q<=…0?;

●END CASE;

●END archtest;

答案:CASE语句应该存在于进程PROCESS内。

四、阅读下列VHDL程序,画出原理图(RTL级)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY HAD IS

PORT ( a : IN STD_LOGIC;

b : IN STD_LOGIC;

c : OUT STD_LOGIC;

d : OUT STD_LOGIC

);

END ENTITY HAD;

ARCHITECTURE fh1 OF HAD IS

BEGIN

c <= NOT(a NAND b);

d <= (a OR b)AND(a NAND b);

END ARCHITECTURE fh1;

五、请按题中要求写出相应VHDL程序

1.带计数使能的异步复位计数器

输入端口:clk 时钟信号

rst 异步复位信号

en 计数使能

load 同步装载

data (装载)数据输入,位宽为10 输出端口:q 计数输出,位宽为10

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT1024 IS

PORT ( CLK, RST, EN, LOAD : IN STD_LOGIC;

DATA : IN STD_LOGIC_VECTOR (9 DOWNTO 0);

Q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END CNT1024;

ARCHITECTURE ONE OF CNT1024 IS

BEGIN

PROCESS (CLK, RST, EN, LOAD, DATA)

VARIABLE Q1 : STD_LOGIC_VECTOR (9 DOWNTO 0);

BEGIN

IF RST = '1' THEN

Q1 := (OTHERS => '0');

ELSIF CLK = '1' AND CLK'EVENT THEN

IF LOAD = '1' THEN

Q1 := DATA;

ELSE

IF EN = '1' THEN

Q1 := Q1 + 1;

END IF;

END IF;

END IF;

Q <= Q1;

END PROCESS;

END ONE;

2.看下面原理图,写出相应VHDL描述

e

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY TRI_STATE IS

PORT ( E, A : IN STD_LOGIC;

Y : INOUT STD_LOGIC;

B : OUT STD_LOGIC);

END TRI_STATE;

ARCHITECTURE BEHAV OF TRI_STATE IS

BEGIN

PROCESS (E, A, Y)

BEGIN

IF E = '0' THEN

B <= Y;

Y <= 'Z';

ELSE

B <= 'Z';

Y <= A;

END IF;

END PROCESS;

END BEHAV;

六、综合题

下图是一个A/D采集系统的部分,要求设计其中的FPGA采集控制模块,该模块由三个部分构成:控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。控制器(control)是一个状态机,完成AD574的控制,和adram的写入操作。Adram是一个LPM_RAM_DP单元,在wren为?1?时允许写入数据。试分别回答问题

FPGA采集控制

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

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

AD574工作时序:

1.要求AD574工作在12位转换模式,K12_8、A0在control中如何设置K12_8为‘1’,A0为‘0’

2.试画出control的状态机的状态图

类似书上图8-4

3.对地址计数器模块进行VHDL描述

输入端口:clkinc 计数脉冲

cntclr 计数器清零

输出端口:rdaddr RAM读出地址,位宽10位

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity addr_cnt is

port ( clkinc, cntclr : in std_logic;

wraddr : out std_logic_vector (9 downto 0) ); end addr_cnt;

architecture one of addr_cnt is

signal tmp : std_logic_vector (9 downto 0);

begin

process (clkinc, cntclr)

begin

if clkinc'event and clkinc = '1' then

if cntclr = '1' then

tmp <= (others => '0');

else

tmp <= tmp + 1;

end if;

end if;

end process;

wraddr <= tmp;

end one;

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

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity control is

port ( addata : in std_logic_vector (11 downto 0);

status, clk : in std_logic;

cs, ce, a0, rc, k12_8, clkinc : out std_logic;

rddata : out std_logic_vector (11 downto 0) ); end control;

architecture behav of control is

type con_st is (s0, s1, s2, s3, s4);

signal cst, nst : con_st;

signal lock : std_logic;

signal reg12 : std_logic_vector (11 downto 0);

begin

a0 <= '0';

k12_8 <= '1';

ce <= '1';

cs <= '0';

REGP : process (clk)

begin

if clk'event and clk = '1' then

cst <= nst;

end if;

end process;

COMP : process (cst, status, addata)

begin

case (cst) is

when s0 => rc <= '1'; lock <= '0'; nst <= s1;

when s1 => rc <= '0'; lock <= '0'; nst <= s2;

when s2 => if status = '1' then nst <= s3; end if;

rc <= '1'; lock <= '0';

when s3 => rc <= '1'; lock <= '1'; nst <= s4;

when s4 => rc <= '1'; lock <= '0'; nst <= s0;

when others => nst <= s0;

end case;

end process;

LOCKP : process (lock)

begin

if lock = '1' and lock'event then

reg12 <= addata;

end if;

end process;

rddata <= reg12;

clkinc <= lock; --(或者为NOT LOCK,延后半个时钟)

end behav;

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;

entity daco is

port ( clk, cntclr, status : in std_logic;

addata : in std_logic_vector (11 downto 0);

rdaddr : in std_logic_vector (9 downto 0);

cs, ce, a0, rc, k12_8 : out std_logic;

rddata : out std_logic_vector (11 downto 0) );

end daco;

architecture one of daco is

component control is

port ( addata : in std_logic_vector (11 downto 0);

status, clk : in std_logic;

cs, ce, a0, rc, k12_8, clkinc : out std_logic;

rddata : out std_logic_vector (11 downto 0) );

end component;

component addr_cnt is

port ( clkinc, cntclr : in std_logic;

wraddr : out std_logic_vector (9 downto 0) );

end component;

component 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 component;

signal rds : std_logic_vector (11 downto 0);

signal clkinc : std_logic;

signal wraddr : std_logic_vector (9 downto 0);

begin

u1 : control port map (addata => addata, status => status, clk => clk, cs => cs, ce => ce, a0 => a0, rc => rc,

k12_8 => k12_8, clkinc => clkinc, rddata => rds);

u2 : addr_cnt port map (clkinc => clkinc, cntclr => cntclr, wraddr => wraddr);

u3 : adram port map (data => rds, wraddress => wraddr,

rdaddress => rdaddr, wren => '1', q => rddata); end one;

一:4MHz到1Hz的分频器

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY count IS

PORT( clk: in STD_LOGIC;

q: out STD_LOGIC;

END count;

ARCHITECTURE a OF count IS

signal tmp: STD_LOGIC_vector(21 downto 0);

Begin

process(clk) begin

if clk'event and clk='1' then tmp<=tmp+1;end if;

end process;

q<=tmp(21);

END a;

相关主题
文本预览
相关文档 最新文档