2023年7月17日发(作者:)
一、 填空
1.
当前最流行的并成为IEEE标准的硬件描述语言包括VIIDL语言 和Verilog IIDL i吾言。
2. EDA中文全称是 电了•设计自动化。1P核在EDA技术和开发中具有十分重要的地位,IP指的是 知识产权核或知识产 权模块 。
3.
将硬件描述语言转化为右件电路的重要工具软件称为1【1)1.综合器 。P21
4.
一般情况下,FPGA是基于 与或阵列 的可编程逻辑结构,CPLD是基于 杏找表 的可编程逻辑结构。P28
5. EDA仿真过程中主要涉及 时序仿真和功能仿真。
6. EDA的优化设计主要是进行资源优化和速度优化,其中速度优化主要石流水线设计、寄存器配平和关键路径法 等三种优化方法。P326
7. VIIDL
子程序有
PROCEDURE . FUNCTION
两类。P230
8. EDA的中文全称为一电子设计口动化 ,IIDL为_硬件描述语言 一。
9.
基于EDA软件的FPGA / CPLD设计流程为:原理图/1IDL文本输入一_功能仿真一一综合一适配一_时序仿真—一编程下载
一硬件测试。
10. FPGA中文全称是一现场可编程门阵列CPLD中文全称是一复杂可「编程逻辑器件一。其中—CPLD_是基于乘积项的可编程
逻辑结构,_FPGA_是基于查找表的可编程逻辑结构。P28
11. VIIDL语言按照执行顺序的不同可以分为 顺序语句一和 并行语句 语句。
12.
在仿真延时中,y <= x AFTER 20ns中的20ns指的是_固有 延时,y<= TRANSPORT x AFTER 20 ns中的20ns指 的是—传输—延时。P151
13.
资源优化主要有—资源共享_、_逻辑优化—和_串行化—等三种优化方式。P326
二、 问答题
1.
与传统电子设计方法相比,EDA采什么设计方法?比较这两种设计方法的区别?
答:EDA采用自顶向下的设计方法 手工设计方法缺点:
1)设计、调试十分困难。2)查找和修改十分不便。3)大量文档,不易管理。4)可移植性差。
5)只有在设计出样机或生产出芯片后才能进行实测。
EDA技术有很大不同:
1)采用硬件描述语言作为设计输入。2)库(Library)的引入。3)设计文档的管理。
4)强大的系统建模、电路仿真功能。5)具有自主知识产权。6)标准化、规范化及IP核的可利用性。7)自顶向下设计方案。
8)自动设计、仿真和测试技术。9)对设计者的硬件知识、经验要求低o 10)A速性能好(与以CPU为主的电路系统相比)。
11)纯硬件系统的高可靠性。.
2.
简述EDA设计流程。
答:设计输入综合适配仿真下载硬件测试
3.
根据编程方式的不同,PLD器件可以分为哪几类?
熔丝型器件:反熔丝型器件:EPROM型:EEPROM型:SRAM型:Flash型。
4.
什么是重载?重载函数有何用处?
答:同样名称的函数可以用不同的数据类型作为此函数的参数定义多次,以此定义的函数称为重载函数:
5. V1IDL语言按照执行顺序的不同可以分为哪两类基本语句?并且各举一例说明。
答:顺序语句和并行语句
1.
什么是自顶向下的设计方法?与传统电子设计方法相比有什么优点?
答:自顶向下就是在整个设计流程中各个设计流程逐步求精的过程,即是从高抽象级别到低抽象级别的整个设计周期。优
点:在整个设计过程中不必太注意目标器件的设计细节。
2.
在FPGA设计过程中,综合的含义是什么?主要有哪凡种类型的综合?
答:综合:将用行为和功能层次表达的电了系统转换成为低层次的便于具体实现的模块组合装配的过程。 有语言综合、行为综合、逻辑综合、结构综合 3. EDA技术最终实现目标的ASIC可以通过哪三种途径完成? 答:门阵法标准单元法可编辑逻辑器件控制法
4.
简述信号与变量的主要区别。(3分)1
答:pl30
信号signal
基本用法
适用范围
行为特征
用于电路线路中信号的连接
在整个结构体中任何地方都可以适用
在进程最后才对信号赋值
变量
variable
用于作为进程中局部数据存储单元
只能在所定义的进程中使用
立即赋值
5.
在VHDL设计中,给触发器复位有哪两种方法?如果时钟进程中用了敏感信号表,哪种复位方式必须要把复位信号放在
敏感信号表中?(3分)
答:同步复位异步复位。异步复位
6.
利用FPGA构成数字系统时为什么需要配备一个PROM或EEPROM? (2分)
三、VHDL程序填空:(10分,每空1分)
下面程序是一个具有加法和减法功能的16位计数器VIIDL描述,试补充完整。
空
1 IEEE; (LIBRARY)
use
空
2
.STD LOGIC 1164. all; (IEEE)
use ieee. ___
空
3 ___________ . all;空 ________________ (STD_L()G1C_UNS1GNED)
4
ent add sub is (ENTITY)
port (elk : in STI)_L0GIC;
rst : in ST【)_L0GIC;
enable : in STD LOGIC;
add_sub : in STD_LOG1C;
q :out STD_LOG1C_VECTOR(15 downto 0));
end cnt_add_ sub;
architecture
cnt_add_sub of
空
5 is (cnt_add_sub)
空6
_ q_tmp: STD LOGIC VECTOR(15 downto 0):(SIGNAL)
begin
空7
_(elk, rst) (PROCESS)
begin
空8
rst=T then q_tmp<= (others=>" 0’);( if )
elsif
空
9 and elk='1' then (elk' event)
if enable二'1' then
if add_sub-‘ 1' then
q_tmp<=+l;
else
q _tmp<=q_tnip-l;
空
10 ; (end if)
end if ; end if ; end process;
q<=q tmp:
end cnt_cidd_sub;
下面程序是一位全加器的VIIDL描述试补充完整,。 一半加器描述
空
1 IEEE;
USE IEEE. STD LOGIC 1164. ALL;
ENTITY
空
2 IS
空
3 (a, b : IN STI)_LOG1C;
co, so : OUT STD LOGIC);
END ENTITY h_adder;
ARCHITECTURE
空
4 OF h_adder is
BEGIN
so <= NOT(a XOR (NOT b));
co <= a AND b ;
END ARCHITECTURE fhl;
(library)
(h_adder)
(PORT)
(fhl)
一一位全加器顶层设计描述
ENTITY f_adder IS
PORT (ain, bin, cin :
空
5 STD LOGIC;(IN) cout, sum : OUT STD_LOG1C );
END ENTITY f_adder;
ARCHITECTURE fdl OF f_adder IS
空
6 h_adder IS
PORT ( a, b : IN STD_LOG1C;
co, so : OUT STD_LOG1C);
END COMPONENT
;
(COMPONENT)
空
7 d, e, f : STI)_LOGIC;
BEGIN
(SIGNAL)
ul :
空
8 PORT MAP(a=>ain, b=>bin, co=>d, so=>e); (h adder) u2 : h_cidder PORT MAP
(a二〉
cout <= d
空
10 f; (OR)
END ARCHITECTURE fdl;
空
9 , b=>cin, co=>f, so二〉sum) ; (e)
在程序中存在5处错误,试找出错误,写出错误原因,并写出正确语句。
第
1
行一library ieee;
第2行一
use ieee. std logic l 164. al 1;
第3行一
use ieee. std_logic_unsigned. all;
第4行一
entity decoder38 is
第5行一
port (Q0: out std_logic_vector (7 downto 0):
第6行一
第7行一
QI: in std logic vector(2 downto 0):
en: in std_logic);
第8行一
end entity decoder38;
第9彳亍一
architecture code! of decoder is
第
10行一begin
第11
行一process( )
第
13行一begin
第
14行一
if en = * T then temp := 〃ZZZZZZZZ〃;(process(QI))
(decoder38)
笫
12行一
signal temp : std_logic_vector(7 downto 0): (variable) 第15行一第16行一第
17行一第
18行一第
19行一
第20行一第
21行一第
22行一第
23行else
case QI is
when 〃000〃 => temp := "00000001”;
when 〃001〃 => temp := "00000010”;
when "010” => temp := "00000100〃;
when "Oil" => temp := "00001000”;
when "100” => temp
:二”00010000〃;
when 〃101〃 => temp :="00100000〃;
when 〃110〃 => temp := "01000000”;
一第
24行when "111〃 => temp := "10000000〃;
一第
25行encl if;
(前插入
END
CASE)
一
第26行一第
27行end process;
一
第28行end architecture code!;
一四、VHDL程序改错:(10分)
在程序中存在5处错误,试找出错误,写出错误原因,并写出正确语句。
第1行library IEEE;
— 第2use IEEE. STI) LOGIC 1164. all;
行一 第entity mux4 is
3行一
port ( sO, si, a, b, c, d : in STD LOGIC ;
y : out STD_L()G1C ;);
QI <= temp; (QO)
第4行行_ 第6行一 第7行一
(删去;)
( mux4)
( 1 )
一 第5end mux4; architecture one of mux is
signa1 s:std_1ogic_vector( 2 dounto 0 ):
begin
sSsl&sO;
process( )
begin
case s is
when "00〃=> y<=a;
when "01”二〉
y<=b;
when 〃10"=>
end case;
end process;
end one ;
y<=c;
第9行一 第10行一 第11行一
(s)
第12行一 第13行一 第14行一
(插入
when y<=d;)
第15行
一 第16五、编写VHDL程序:(共20分,每题10分)
1.图1是一个含有下降沿触发的D触发器的时序电路,试写出此电路的VI1DL设计文件。LIBRARY IEEE;
USE IEEE. STI) LOGIC 1164. ALL;
ENTITY MULTI IS
PORT (CL: IN STD_L()G1C;一输入选择信号
CLKO:IN STD_LOG1C;
一输入信号
OUT1:OUT STD_LOGIC)输出端
END ENTITY;
ARCHITECTURE ONE OF MULTI IS
SIGNAL Q : STD_L()GIC;
BEGIN
PRO1: PROCESS (CLKO)
BEGIN
IF CLKO' EVENT AND CLKO=' O'
THEN Q<=N()T (CL OR Q) ;ELSE
END IF;
END PROCESS;
PR02: PROCESS (CLKO)
BEGIN
OUTIOQ;
END PROCESS;
EM) ARCHITECTURE ONE;
2. “Ill”序列检测器的功能是连续输入三个或三个以上的1时,电路输出为列检测器的状态图,并编写完成该功能的程序。
1. 3、画出程序描述的状态转移图。(9分)
library IEEE;
use IEEE. STD LOGIC 1164. all;
entity state_84 is
port (
elk,reset:in std_logic;
ina : in std_logic__vector(2 downto 0);
outa :out st d_1og i c_vector(3 down to 0));
end state_84;
architecture state 84 of state 84 is
type state__fs is (sO, si, s2, s3);
signal cur_state, next_state: state_fs;
“1”,其余情况下输出为“0”。靖画出该序 beginprocess(elk,reset)
begin
if reset='1’ then
cur_state<=sO;
elsif elk'event and clk=T then
cur state〈二next state;
end if;
end process;
process(cur_state, ina)
begin
case cur state is
when sO二〉next_state<=sl:
if ina="101" then outa<="0010〃;
elsif ina="lll" then outa<="1100”;
else outa<=nul1;
end if;
when si=〉if ina=〃110〃 then next_state〈二s2;
elsif ina-〃000〃 then next_state<-sl;
else null;
end if;
outa<=100r;
when s2
二〉if inaF〃100〃 then next_state〈=s2;
elsif ina="011〃 then next_state<=sl;
elsif ina/=〃011〃 then next_state<=s3;
else nul1;
end if;
outaK="1111”;
when s3 -> next_state<=s0;
if ina="101〃 then outa<="1101”;
elsif ina="011" then outa<>"l110〃;
else outa<=null;
end if;
when others -> next_state<-s0;
outa<="0000”;
end case;
end process;
end state_84;
,//1、EDA与传统电子设计方法的比较:
手工设计方法缺点:
1)
设计、调试十分困难。 2)
查找和修改十分不便。
3)
大量文档,不易管理。
4)
可移植性差。5)只有在设计出样机或生产出芯片后才能进行实测。
EDA技术有很大不同:
1)
采用硬件描述语言作为设计输入。
2)
库(Library)的引入。
3)
设计文档的管理。
4)
强大的系统建模、电路仿真功能。
5)
具有自主知识产权。
6)
标准化、规范化及IP核的可利用性。
7)
自顶向下设计方案。
8)
自动设计、仿真和测试技术。
9)
对设计者的硬件知识、经验要求低。
10)
高速性能好(与以CPU为主的电路系统相比)。
11)
纯硬件系统的高可靠性。
2、FPGA / CPLD设计流程
3(4-1)
画出与下例实体描述对应的原理图符号元件:
ENTITY but3s IS
--实体I
:三态缓冲器
PORT (input: IN STD_LOGIC ;
enable : IN STD_LOGTC ;
-输入端
-使能端
output: OUT STD_LOGIC
);-输出端
END buf3s;
ENABLE]〉・ 勺s p
INPUT I
> 一. | OUTPUT
ENTITY mux21 IS
--实体2: 2选1多路选择器
PORT (inO, ini, sei: IN STD_LOGIC;
output: OUT );
END mux21;
4、(4.2)图4.37所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程
序,选择控制的信号si和so的数据类型为STD_LOGIC_VECTOR;当si如
s0='0'; sU O*, s0= T; sl=T, sO=MT和
sl=fl
sO=T分别执行
y<=a> yv=b、yv=c、yv=d。sT> -----
二
S1 so
E>
2方法一:LIBRARY IEEE;
USE LOGIC ;
ENTITY MUX41 IS
PORT(s:IN STD_LOGIC_VECTOR( I DOWNTO 0);-输入选择信号
a,b,c,d:IN STD_LOGIC;--输入信号
y:OUT );-输出端
END ENTITY;
ARCHITECTURE ONE OF MUX41 IS
BEGIN
PROCESS(s)
BEGIN
IF (S="00”)THEN y<=a;
ELSTF (S="01 ”) THEN y<=b;
ELSIF (S=" 10”)THEN yv=c;
ELSIF (S=" 11 ”) THEN y<=d;
ELSE yv=NULL;
END IF;
END PROCESS;
END ONE;
方法二:
LIBRARY IEEE;
USE LOGIC 1164. ALL;
ENTITY MUX42 IS
PORT(s:IN STD_LOGIC_VECTOR( I DOWNTO 0);-输入选择信号
a,b,c,d:IN STD_LOGIC;--输入信号
y:OUT );-输出端
END MUX42;
ARCHITECTURE two OF MUX42 IS
BEGIN PROCESS(s)
BEGIN
CASE s IS
WHEN ”00”=> y<=a;
WHEN "01”=>yv=b;
WHEN ”IO”=>yv=c;
WHEN ”ll”=>yv=d:
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END two;
5、写出MUXK的顶层文件
LIBRARY IEEE;
USE _LOGIC_1164. ALL;
ENTITY MUXK IS
PORT (al,a2,a3,s0,s I :IN STD_LOGIC;
outy:OUT );
END ENTITY MUXK;
ARCHITECTURE MUX OF MUXK IS
COMPONENT MUX21A
PORT ( a,b,s:IN STD_LOGIC;
y: OUT STD_LOGIC);
END COMPONENT;
SIGAL lmp:STD_LOGIC;
BEGIN
ul: MUX21A PORT MAP ( a=>a2,b=>a3,s=>O,y=>tinp);
u2:MUX21A PORT MAP (a=>al ,b=>tmp,s=>s I ,y=>outy);
END ARCHITECTURE MUX;
6、(5.8)判断下面3个程序中是否有错误,若有则指出错误所在,并给出完整程序。
程序1:
Signal A, EN : stdjogic; Process (A, EN)
Variable B : std_logic;Begin if EN = 1 then B end if; end process;
程序2:
Architecture one of
<=
sample is
variable a, b, c : integer;
begin
c <= a + b;
end;
程序3:
library ieee;
use Jogic^l ; entity mux21 is
port ( a, b : in stdjogic; sei: in stdjogic; c : out stdjogic;); end sam2;
architecture one of mux21 is begin
if sei = 'O' then c := a; else c := b; end if;
end two;
7、 一般时序状态机包括几个部分,分别是哪几个部分,清简要介绍.
答:(1)包括4部分,分别是说明部、主控时序进程、主控组合进程、辅助进程
(2)说明部分一般放在结构体的ARCHITECTURE和BEGIN之间,使用TYPE语句定义新的数据类型:主控时序进程是 指负责状态机运转和在时序驮动下负贲转换的进程:主控组合进程根据条件进行状态转移:辅助进程用于配合状态机工作的 组合进程或时序进程
8、 读程序,画出状态图
LIBRARY IEEE;
USE LOGIC ;
ENTITY MOORE1 IS
PORT (DATAIN :IN STD_LOGIC_VECTORf 1 DOWNTO 0);
CLK,RST : IN STD LOGIC;
Q : OUT STD_LOGIC_VECTORS DOWNTO 0));
ENDMOORE1;
ARCHITECTURE behav OF MOORE 1 IS
TYPE ST_TYPE IS (STO, ST1,ST2, ST3,ST4);
SIGNAL C ST: ST TYPE ; BEGIN
PROCESS(CLK,RST) BEGIN
IF RST ='I* THEN C_ST <= STO ; Q<= ”00()0” ;
ELSIF CLK EVENT AND CLK= 1' THEN
CASE C_ST IS
WHEN STO => IF DATAIN =''10” THEN C_ST <= STI ;ELSE C_ST <= STO ; END IF;
Q<= "1001'';
WHEN STI => IF DATAIN =”11” THEN C_ST <= ST2 ;
ELSE C_ST <= STI ;END IF;
Q<= ”0101”
;
WHEN ST2 => IF DATAIN =”01” THEN C_ST <= ST3 ;
ELSE C ST <= STO ;END IF;
Q <= ”1100” ;
WHEN ST3 => IF DATAIN =‘00” THEN C_ST <= ST4 ;
ELSE C_ST <= ST2 ;END IF;
Q<= ”0010”
;
WHEN ST4 => IF DATAIN =”11” THEN C ST <= STO ;ELSE C_ST <= ST3 ;END IF;
Q<= ”1001”
;
WHEN OTHERS => C_ST <= STO;
END CASE;
END IF;
END PROCESS;
END behav;
5ST
L STO JL ST1
JL ST2 JL ST3
人
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689542297a264712.html
评论列表(0条)