EDA复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.VHDL最基本的结构是什么?其作用各是什么?
库(LIBRARY)声明:列出了当前设计中需要用到的所有库文件,如ieee,std和work 等。
实体(ENTITY):定义了电路的输入/输出引脚。
构造体(ARCHITECTURE):所包含的代码描述了电路要实现的功能。
2.in、inout 、buffer有何异同?
IN 含义:输入
INOUT 含义:说明该端口是双向的,可以输出也可以输入
BUFFER 含义:说明该端口可以输出信号且在构造体内部可以使用该输出信号。
3.VHDL中有哪些基本的数据类型?哪些可以综合?
a)位(BIT)和位矢量(BIT_VECTOR):位值用‘0'或‘1'表示。
b)STD_LOGIC和STD_LOGIC_VECTOR:它们是IEEE 1164标准中引入的8
逻辑值系统。
c)布尔类型(BOOLEAN):只有两种取值,“真”或“假"。
d)整数(INTEGER):32位的整数(取值范围从-2 147 483 647到2 147 483 647 )
e)自然数(NATURAL):非负的整数(从0到2 147 483 647 )
f)实数(REAL): 实数的取值范围从-1.0x1038到1.0x1038,它是不可综合的
g)物理量字符(Physical literal):用来表示诸如时间和电压等物理量。
在仿真时
可以使用,但不可综合。
h)字符(CHARACTER)型:可以是单个或者一串ASCIl字符。
i)SIGNED(有符号数)和UNSIGNED(无符号数):它们是在ieee库
std_logic_arith包集中定义的数据类型。
4.包集中定义了哪些数据类型转换函数?它们的适用范围是什么?
在ieee库的包集std_logic_arith中提供的数据类型转换函数:
a.conv_integer(p):将数据类型为INTEGER,UNSIGNED,SIGNED,
STD_ULOGIC或STD_LOGIC的操作数P转换成INTEGER
类型。
注意:这里不包含STD_LOGIC_VECTOR。
b.conv_unsigned(p,b):将数据类型为INTEGER,UNSIGNED,SIGNED或
STD_ULOGIC的操作数转换成位宽为b的UNSIGNED
类型的数据。
c.conv_signed(p,b):将数据类型为INTEGER,UNSIGNED,SIGNED或STD_ULOGIC
的操作数p转换成位宽为b的SIGNED类型的操作数。
d.conv_std_logic_vector(p,b):将数据类型为INTEGER,UNSIGNED,SIGNED或
STD_LOGIC的操作数p转换成位宽为b的
STD_LOGIC_VECTOR类型的操作数。
5.表达式才C<=A+B中,三个都是std_logic_vector,是否可以直
接进行加法运算?说明原因和解决方法。
若位长不同则不能直接进行加法运算,若位长相同也要加入ieee库和std_logic_unsigned 包集合的使用说明。
6.预定义的运算操作符有哪些?
·赋值运算符·逻辑运算符
·算术运算符·关系运算符
·移位运算符·并置运算符
7.Vhdl中预定的属性如何使用?
数值类属性:d‘LOW 返回数组索引的下限值
d‘HIGH 返回数组索引的上限值
d‘LEFT 返回数组索引的左边界值
d‘RIGHT 返回数组索引的右边界值
d‘LENGTH 返回矢量的长度值
d‘RANGE 返回矢量的位宽范围
d‘REVERSE_RANGE 按相反的次序,返回矢量的位宽范围
信号类属性:S 'EVENT 如果S的值发生了变化,则返回值为布尔量TRUE,否
则返回FALSE
S'STABLE 如果S保持稳定,没有发生变化,则返回值为布尔量
TRUE,否则返回FALSE
S'ACTIVE 如果当前S=’1’,则返回TRUE,否则返回FALSE
S’LAST_VALUE 返回最后一次变化前S的值
8.通用属性语句
GENERIC(属性)语句提供了一种指定常规参数的方法,所指定的参数是静态的,设计人员可以根据具体设计需求方便地进行参数修改。
该语句可以增加代码的灵活性和可重用性。
GENERIC语句必须在ENTITY中进行声明。
GENERIC语句指定的参数是全局的,不仅可以在ENTITY内部使用,也可以在后面的整个设计中使用。
9.块语句的作用是什么?
为了增强整个代码的可读性和可维护性(对处理长代码很有帮助)。
10.When ..else 和with..select..when和case..when语句特点
When ..else是并发代码,与with..select..when相似
with..select..when是并发代码,When后能执行多条赋值语句,要列出所有情况,要使
用关键字OTHERS
case..when是顺序代码,When后只能执行一条语句,也要使用关键字OTHERS 11.Generate语句和loop语句的区别
Generate语句是并发描述语句;loop语句是顺序描述语句
12.信号和变量的区别
13.按输入和输出的相关性,状态机的种类有哪些?
米里(Mealy)型状态机:输出不仅和电路当前状态有关还与当前输入有关
摩尔(Moore)型状态机:输出仅仅和电路当前状态有关
14.标准的状态机模板包括几个部分?
时序逻辑部分;组合逻辑部分;
15.设计风格1和风格2有何区别?
设计风格1是只储存现态(Pr_state),属于异步输出;
设计风格2是先用寄存器将现态储存,再给输出,属于同步输出
16.fsm有哪些主要的编码方式?
二进制编码;独特编码
17.包集的组成有哪几个部分?
包集主要由两部分组成:程序包说明和程序包体。
其中,程序包体是可选的,一般程序包说明列出所有项的名称,而程序包体给出各项的细节。
18.元件的组成、存放的位置和声明的位置
元件是一段结构完整的代码,存放在包集或者结构体中,可以在包集中声明,也可以在主代码中声明
19.端口映射有几种方法?
位置映射和端口映射
20.使用函数和过程的目的是什么?
存储常用的VHDL代码,以达到代码重用和共享的目的。
21.函数和过程的输入参数有何区别?
22.函数和过程如何存放?如何调用?
函数的调用是作为表达式的一部分出现,过程的调用是直接调用
例6.7 带7段数码显示的模100计数器
a)用整型同步高电平复位
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY counter IS
PORT (clk, reset: IN STD_LOGIC;
digit1, digit2:OUTINTEGER RANGE 0 TO 10); END counter;
ARCHITECTURE counter OF counter IS
BEGIN
PROCESS (clk, reset)
VARIBLE temp1: INTEGER RANGE 0 TO 10;
VARIBLE temp2: INTEGER RANGE 0 TO 10;
BEGIN
IF (clk'EVENT AND clk = '1'ANDreset = '1') THEN temp1: = 0; temp2: = 0;
IF (temp1 = 10) THEN temp1: = 0;
temp2: =temp2+1;
IF (temp2 = 10) THEN temp2 := 0;
END IF;
END IF;
END IF;
digit1<= temp1;
digit2<=temp2;
END PROCESS;
END counter;
b)用STD_LOGIC_VECTOR同步高电平复位
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY counter IS
PORT (clk, reset: IN STD_LOGIC;
digit1, digit2: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); END counter;
ARCHITECTURE counter OF counter IS
BEGIN
PROCESS (clk, reset)
VARIBLE temp1: STD_LOGIC_VECTOR (3 DOWNTO 0);
VARIBLE temp2: STD_LOGIC_VECTOR (3 DOWNTO 0);
BEGIN
IF (clk'EVENT AND clk = '1'ANDreset = '1') THEN temp1: = “0000”; temp2: = “0000”;
IF (temp1 = “1010”) THEN temp1: =”0000”;
temp2: =temp2+1;
IF (temp2 = “1010”) THEN temp2 := “0000”;
END IF;
END IF;
END IF;
digit1<= temp1;
digit2< =temp2;
END PROCESS;
END counter;
连续四个1的检测器怎么写?
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY string_detector IS
PORT(d,clk,rst:IN BIT;
q:OUT BIT);
END string detector;
ARCHITECTURE my_arch OF string_detector IS
TYPE state IS (zero,one,two,three,four);
SIGNAL pr_state,nx_state:state;
BEGIN
PROCESS (rst,clk)
BEGIN
IF (rst= ‘1')THEN pr_state<= zero;
ELSIF (clk'EVENT AND clk = '1') THEN prstate<= nx_state;
END IF;
END PROCESS;
PROCESS (d,pr_state)
BEGIN
CASE pr_state IS
WHEN zero => q <= '0';
IF(d= '1') THEN nx_state<= one;
ELSE nx_state<=zero;
END IF;
WHEN one => q <=‘0’;
IF (d='1') THEN nx_state<= two;
ELSE nx_state<= zero;
END IF;
WHEN two => q <= '0 ';
IF (d ='1') THEN nx_state<= three;ELSE nx_state<= zero;
END IF;
WHEN three =>q <= '0';
IF (d='1') THEN nx_state<= four;
ELSE nx_state<= zero;
END IF;
WHEN four => q <= '1';
IF (d='0') THEN nx_state<= zero;
ELSE nx_state<=four;
END IF;
END CASE;
END PROCESS;
END my_arch;。