第一章
1 .什么是VHDL?简述VHDL的发展史?VHDL的实现有哪几种形态?
VHDL 语言:VHDL语言的英文全名是Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言。电子系统硬件行为描述、结构描述、数据流描述的语言。利用硬件描述语言可以进行数字电子系统SOC的设计、FPGA的设计、集成电路ASIC设计。
VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。1983年成立VHDL语言开发,1987年推广实施,1993年扩充改版.VHDL是IEEE标准语言,广泛用于数字集成电路逻辑设计。
VHDL语言设计实现是指设计的程序以三种形态出现在产品中。
1. IP 模块实现
2. FPGA 实现
3. ASIC 实现
2.VHDL的IP模块实现流程?
3. VHDL的FPGA实现?
4.VHDL的ASIC实现
第二章VHDL词法基础
1.什么叫对象?对象有哪几个类型?
在VHDL语言中,对象(Objects)是具有特定数据类型且可以被赋值的客体。VHDL语言中的对象有4类:
- 常量(Constant)
- 信号(Signal)
- 变量(Variable)
- 文件(Files)
2.变量和信号的区别?
变量(Variable)是一个局部量,主要用于对临时数据进行局部存储。变量在进程中定义。
变量值不能将数据输出到对其作出定义的当前进程以外,若将变量的值输出到当前进程之外必须将该值赋给一个相同类型的信号(Signal),即进程之间传递数据需要使用信号。
信号可以存在赋值延时。
信号赋值语句格式:
目标信号 := 表达式 ;
目标信号 <= 表达式 ;
“:=”表示对信号直接赋值,用来表示信号初始值不产生延时;
“<=”表示代入赋值,是变量之间信号的传递,代入赋值允许产生延时。
3.VHDL语言定义的标准类型有哪些?
数据类型根据其产生的来源还可以分为标准数据类型和用户自行定义的数据类型。
标准数据类型:包括整数类型(Integer Type)、实数类型或浮点类型(Real Type & Floating Type)、位类型(Bit Type)、位矢量类型(Bit_Vector Type),布尔类型(Boolean Type)、字符类型(Character Type),时间类型或物理类型(Time Type & Physical Type)、错误类型(Note,Warning,Error,Failure Type),以及自然数、整数类型(Natural Type)和字符串类型(Tring Type)。
用户自定义的数据类型:包括枚举类型(Enumerated Type)、数组类型(Array Type)、存取类型(Access Type)、文件类型(Files Type)和记录类型(Recode Type)。
4.数据类型
5.IEEE标准类型
- LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- ……
6.简述VHDL语言操作符的优先级
在表2.5中.取反和取绝对值优先级较高,与、或逻辑运算的优先级低于算术运算
的优先级。
7.不同类型的数据变换,3种方法?
类型标记法、函数转换法和常数转换法。
1. 类型标记法
A数据类型名:=B数据类型名(表达式);
例如整数和实数的类型转换,如果:
variable I :integer;
variable R :real;
则有:
I := integer(r); --将实数转换成整数赋予整型变量I
R := real(i); --将整数转换成实数赋予实型变量R
2. 函数转换法
1)STD_LOGIC_1164程序包定义的转换函数
函数 TO_STD LOGIC_VECTOR(A) --由位矢量BIT_VECTOR转换为标准逻辑矢量STD_LOGIC_VECTOR
函数 TO_BITVECTOR(A); --由标准逻辑矢量STD_LOGIC_VECTOR转换为位矢量BIT_VECTOR
函数 TO_STDLOGIC(A); --由BIT转换为STD_LOGIC
函数 TO_BIT(A); --由标准逻辑STD_LOGIC转换BIT
2)STD_LOGIC_ARITH程序包定义的转换函数
函数:COMV_STD_LOGIC_VECTOR(A,位长);--由integer,singed,unsigned转换成std_logic_vector
函数:CONV-INTEGER(A); --由signed,unsigned转换成std_logic_vector
函数:CONV-INTEGER(A); --由signed,unsigned转换成integer
3)STI_LOGIC_UNSIGNED程序包定义的转换函数
函数:CONV-INTEGER(A); --由STD_LOGIC_VECTOR转换成integer
3. 常数转换法
CONSTANT type_conv_con:type_conv_con:=(‘0’│‘L’=>‘0’,‘1’│’H’=>‘1’,OTHERS => ‘0’);
常量转换法中,低电平转换为‘0’,高电平转换为‘1’,其他不确定值转换为‘0’。
8.并置运算符和状态运算符
操作符“??”用于状态转换,将BIT类型中的“1”转换为BOOLEAN类型中的“TRUE”,将“0”转换为“FALSE”。
第三章 VHDL程序结构
1.简述VHDL设计实体的结构。
实体由实体名、类型说明、端口说明、实体说明部分和实体语句部分组成。
实体一般格式为:
ENTITY 实体名 IS
[GENERIC语句;] --可选项(参数说明)
PORT语句; --必需项(端口说明)
[实体说明部分;] --可选项
[BEGIN
实体语句部分;]
END [ENTITY] [实体名];
2.分别用结构体的3种描述法设计一个4位计数器。
用行为描述方法设计一个4位计数器如下,
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsignal.all;
entity count is
port( clk,clr,en: in std_logic
Qa,Qb,Qc,Qd: out std_logic );
end count;
architecture example of count is
signal count_4:std_logic_vector(3 downto 0);
begin
Qa <= count_4(0);
Qb <= count_4(1);
Qc <= count_4(2);
Qd <= count_4(4);
process (clk,clr)
begin
if (clr) then
count_4 <= "0000";
elsif (clk'event and clk='1') then
if(en='1') then
if(count_4="1111") then
count_4="0000";
else
count_=count_4+1;
endif
endif
endif
endprocess;
endexample;
3.什么叫进程?简述进程的工作方式。
进程语句不是一条语句,而是一段程序,这段程序描述了一个靠敏感信号触发的硬件模块反复执行的工作过程。进程语句(Process)是并行处理语句,即在结构体中多个进程语句是同时并发运行的。
进程Process语句中 一般带有几个信号量例表,称为该进程的敏感列表.这些信号无论哪个发生变化都将启动Process进程,启动进程Process中的程序将从上到下顺序执行一遍产生变化结果输出•当进程的最后一个语句执行完成后,就返回到进程开始处.等待敏感般的新变化.引发进程的再次执行.周而立始,循环往复.以至无穷,这就是进程的执行过程.
4.什么叫模块?区分模块与进程。
模块(Block)语句是结构体中积木化设计并适用于复杂项目设计.
Block块是一个独立的子结构,可以包含PORT语句、GENERIC语句,允许设计者通过这两个语句将Block块内的信号变化传递给Block块的外部信号.同样.也可以将Block块的外部信号变化传递给Block块的内部信号。
对VHDL语言中的Block模块进行仿真时,Block模块中所描述的各个语句是可以并发
执行的•和模块中的语句书写顺序无关.进程语句是段程序.这段程序是顺序执行的.
5.简述过程和函数的区别
子程序(Subprogram)是一个VHDL程序模块,利用顺序语句来定义算法或描述硬件行为。子程序能更有效地完成重复性工作。子程序有两种,即过程语句和函数语句。
1.过程调用时,先将初始值传递给过程的输入参数。启动过程按顺序自上至下执行过程语句。执行结束后,将输出值复制到调用者的OUT、INOUT所定义的变量或信号中。
2.并发过程调用(Concurrent Procedure Call)语句可以出现在结构体中,也可以在进程中执行过程调用语句。
3.并发过程调用语句是一个完整的语句,具有独立的行为表现形式,在这个语句前面可以加标号。
4.并发过程调用语句应带IN、OUT、INOUT参数,列于过程名后的括号内。并发过程调用可以有多个返回值,这些值通过过程中所定义的输出参数带回。
过程调用语句也可以出现在进程中。因此,过程调用语句也可以由过程敏感量的变化而得到启动。
函数是具有某一特定功能的程序段,能够被主程序调用。函数被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。函数内部的值不能保持,函数返回后,才能被再次调用,再次初始化。
函数做成以后放在程序包中。几个函数构成一个程序包,几个程序包组成一个库。
6.结构体的描述的3种方法?
行为描述法,数据流描述法,结构描述法。
所谓结构体的行为描述(Behavioral Descriptions),即对设计实体按算法的路径来描述。行为描述在EDA工程中称为高层次描述或高级描述。
比较器的行为描述:
LIBRARY IEEE;
USE IEEE std_logic_1164.ALL;
ENTITY comparator IS
PORT (a,b:IN std_logic_vector(7 downto 0);
g:out std_logic);
END comparator;
ARCHITECTURE behavioral OF comparator
BEGIN
Comp:PROCESS(a,b)
BEGIN
IF a = b THEN
G <='1';
ELSE
G <='0';
END IF;
END process comp;
END behavioral;
程序分析:
1. 结构体采用简单的算法描述了实体行为,定义了实体的功能:输入8位数a和b,若a=b,实体输出G=1;若a不等于b,则实体输出G=0。输出取决于输入条件。
2. 进程标志comp是进程顺序执行的开始,end process comp是进程的结束。
3. 保留字process(a, b)中,a、b为敏感变量,即a、b每变化一次就有一个比较结果输出。实体输出是动态的G值,时刻代表着a、b的比较结果。
数据流描述(Dataflow Description)是结构体描述方法之一,它描述了数据流程的运动路径、运动方向和运动结果,同样是一个8位比较器采用数据流法编程,如所示。
LIBRARY IEEE;
USE IEEE std_logic_1164.ALL;
ENTITY comparator IS
PORT (a,b:IN std_logic_vector(7 downto 0);
G:out std_logic);
END comparator;
ARCHITECTURE dataflow OF comp IS
BEGIN
G <="1" when (a = b) else"0";
END dataflow;
用布尔方程的数据流描述法设计的8位比较器
LIBRARY IEEE;
USE IEEE std_logic_1164.ALL;
ENTITY comparator IS
PORT (a,b:IN std_logic_vector(7 downto 0);
G:out std_logic);
END comparator;
ARCHITECTURE bool OF comparator IS
BEGIN
G<=not(a(0)xorb(0))
and not(a(1)xorb(1))
and not(a(2)xorb(2))
and not(a(3)xorb(3))
and not(a(4)xorb(4))
and not(a(5)xorb(5))
and not(a(6)xorb(6))
and not(a(7)xorb(7));
END bool;
八位比较器逻辑电路图
8位比较器的结构化描述法:
LIBRARY IEEE;
Use ieee std_logic_1164.ALL;
ENTITY comparator IS
PORT (a,b: in std_logic_vector(7 downto 0);
G:out std_logic);
END comparator;
USE work.gatespkg.ALL
ARCHITECTURE structural OF comparator IS
signal x: std_logic(0 TO 7);
BEGIN
u0:xnor2 PORT MAP (a(0),b(0),x(0));
u1:xnor2 PORT MAP (a(1),b(1),x(1));
u2:xnor2 PORT MAP (a(2),b(2),x(2));
u3:xnor2 PORT MAP (a(3),b(3),x(3));
u4:xnor2 PORT MAP (a(4),b(4),x(4));
u5:xnor2 PORT MAP (a(5),b(5),x(5));
u6:xnor2 PORT MAP (a(6),b(6),x(6));
u7:xnor2 PORT MAP (a(7),b(7),x(7));
u8:xnor2 PORT MAP (x(0),x(1),x(2),x(3),x(4),x(5)x(6),x(7), x(8),G);
END structural;
第四章VHDL语法基础
目录
1 .什么是VHDL?简述VHDL的发展史?VHDL的实现有哪几种形态?
1.用结构描述法和GENERATE语句设计个8位移位寄存器。
结构描述法
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shift_register IS
PORT(a,clk: IN STD_LOGIC;b: OUT STD_LOGIC);
END ENTITY shift_regester;
ARCHITECTURE eight_BIT_shift_register OF shift_register IS
COMPONENT dff --dff元件调用
PORT(a,clk: IN STD_LOGIC;b: OUT STD_LOGIC);
END COMPONENT;
SIGNAL X: STD_LOGIC_VECTOR(0 TO 8);
BEGIN
X(0) <= a;
dff1:dff PORT MAP (X(0),clk,X(1));
dff2:dff PORT MAP (X(1),clk,X(2));
dff3:dff PORT MAP (X(2),clk,X(3));
dff4:dff PORT MAP (X(3),CLK,X(4));
dff5:dff PORT MAP (X(4),CLK,X(5));
dff6:dff PORT MAP (X(5),CLK,X(6));
dff7:dff PORT MAP (X(6),CLK,X(7));
dff8:dff PORT MAP (X(7),CLK,X(8));
b<=X(8);
END ARCHITECTURE eight_bit_shift_register;
GENERATE语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shift_register IS
PORT(a,clk: IN STD_LOGIC;b: OUT STD_LOGIC);
END ENTITY shift_regester;
ARCHITECTERE eight_shift register OF shift_register IS
COMPONENT dff --元件调用语句
PORT (c d,clk: IN STD_LOGIC;q: OUT STD_LOGIC);
END COMPONENT;
SIGNAL X: STD_LOGIN_VECTOR(0 TO 8);
BEGIN
X(0) <= a; --输入信号代入语句
register1: FOR i IN 0 TO 7 GENERATE --循环体的生成
dffx:dff PORT MAP(X(i),clk,X(i+1));--端口映射
END GENERATE;
b <= X(8); --输出信号代入语句
END ARCHITECTURE eight_shift_register;
2.断言语句
断言语句(Assert)主要用于程序仿真,调试中的人-机会话。在仿真、调试过程中,当ASSERT后的条件不成立时,则给出一个字符串作为提示信息。
提示信息分4类:失败(Failure)
错误(Error)
警告(Warning)
注意(Note)
断言语句的书写格式为:
[标号:]ASSERT 条件 [REPORT报告信息][SEVERITY出错级别];
ENTITY simulation IS
PORT(reset:IN Bit:='0');
BEGIN
ASSERT reset='1'(REPORT " Reset active(i.e.reset='0')" SEVERITY ERROR);
P1:PROCESS --等价被动进程无敏感表
BEGIN
ASSERT reset='1' --断言条件
REPORT"Reset active(i.e.reset='0')" --报告信息
SEVERITY Error; --出错级别
WAIT ON reset; --进程同步点
END PROCESS P1;
END ENTITY simulation;
ARCHITECTURE example of assert OF Simulation IS
BEGIN
ASSERT False --断言条件
REPORT"This state ment will be executed only once at the beginning of simulation"
--报告信息
SEVERITY NOTE; --出错级别
P2: PROEESS --等价被动进程无敏感表
BEGIN
ASSERT False --断言条件
REPORT "This Statement Will be executed only once at the beginning of simulation"
--报告信息
SEVERITY NOTE; --出错级别
WAIT; --由WAIT同步
END PROCESS P2;
END ARCHITECTURE example Of assert;