设计流程
程序结构
VHDL程序设计约定
- 语句结构描述中的方括号“[]”内的内容为可选项。
- 对于VHDL的编译器和综合器来说,程序不区分大小写。
- 程序中的注释使用双横线“–”。
- 书写程序时使用程序锁紧格式,同层次对其,底层次依次锁紧。.
- 各个源程序文件的命名均与其实体名一致。
实体(entity)部分说明
- 实体语句结构
实体说明单元的一般语句结构:
ENTITY 实体名 IS
[GENERIC ( 类属表 );]
PORT ( 端口表 );
END 【ENTITY】 实体名;
2.GENERIC类属说明语句
类属说明的一般书写格式如下:
GENERIC (常数名:数据类型 [:=设定值 ];
…
常数名:数据类型 [:=设定值 ] );
类属说明语句的意义
类属说明语句是端口界面常数,放在实体或结构体前的说明部分。
通过对类属参数值的设定,可容易的改变一个设计实体内部电路的结构和规模
类属值的地位十分接近常数,但能从外部动态的接收赋值,类似于端口
注: 综合器仅支持数据类型为整型的类属值
若实体内大量使用了addrwidth参数表示地址宽度,则当需要改变地址宽度时,只需一次性在语句GENERIC中改变addrwidth的设定值,则结构体中所有相关的地址宽度都随之改变,由此可方便地改变整个设计的硬件规模和结构。
例
ENTITY mcu IS
GENERIC (addrwidth: INTEGER:= 16);
PORT ( add_bus:OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0));
…
第二句的类属说明 相当于 定义了一个地址宽度常数,如下
add_bus:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
PORT(端口)说明
PORT说明是对一个设计实体界面的说明(对设计实体与外部电路的接口说明,包括对每一接口的输入输出模式和数据类型的定义。其格式如下:
PORT ( 端口名 : 端口模式 数据类型 ;
…
{ 端口名 : 端口模式 数据类型} ) ;
其中的端口名是设计者为实体的每一个对外通道所取的名字,端口模式是指这些通道上的数据流动方式。数据类型是指端口上流动的数据的表达格式或取值类型,VHDL要求只有相同数据类型的端口信号和操作数才能相互作用。
端口模式
数据类型
标准逻辑位 STD_LOGIC 或 BIT
标准逻辑矢量 STD_LOGIC.VECTOR 或 BIT_VECTOR
注:IEEE库中STD_LOGIC_1164包中定义
例
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY nand2 IS
GENERIC (trise:TIME:=1ns;
tfall:TIME:=1ns);
PORT (a: IN STD_LOGIC;
b: IN STD_LOGIC;
c: OUT STD_LOGIC);
END nand2;
等同于
结构体(ARCHITECTURE) 部分说明
结构体用于描述设计实体的内部结构以及实体端口间的逻辑关系
功能特征:结构体具体实现一个实体
关系
特点
1.同一结构体不能为不同的实体所拥有。
2.结构体不能单独存在。
3.具有多结构体的实体,需用配置语句指明用于综合和仿真的结构体。
结构体的语句格式
ARCHITECTURE 结构体名 OF 实体名 IS
[说明语句;]
BEGIN
功能描述语句;
END [ARCHITECTURE] 结构体名;
结构体的说明语句
作用:对结构体的功能描述语句中将要用到的信号(SIGNAL),常数(CONSTANT),元件(COMPONENT),函数(FUNCTION)和过程(PROCEDURE)等加以说明
功能描述语句
注意: 每一语句的内部可能含有并行或顺序运行的逻辑描述语句
例
ARCHITECTURE behav OF nand2 IS
BEGIN
PROCESS (a, b)
VARIABLE cdf: STD_LOGIC;
BEGIN
cdf:= a NAND b; --向变量赋值
IF cdf ='1' THEN
c<=TRANSPORT cdf AFTER trise;
ELSIF cdf ='0'THEN
c<=TRANSPORT cdf AFTER tfall;
ELSE
c<= TRANSPORT cdf;
END IF;
END PROCESS;
END ARCHITECTURE behav;
结构体的三种描述风格
描述形式:1.行为描述 2.数据流描述 3.结构描述
1).行为描述(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 comparstor;
ARCHITECTURE behavioral OF comparator IS
BEGIN
comp: PROCESS(a, b)
BEGIN
IF a=b THEN
g<='1';
ELSE
g<='0';
END IF;
END PROCESS comp;
END behavioral;
2)数据流描述(也称RTL描述 )
主要描述数据流动的路径、方向和结果
组成特点
1.建立在并行信号赋值语句基础上,条件信号赋值语句(WHEN-ELSE) 和选择信号赋值语句(WITH-SELECT-WHEN)是数据流法描述时常用的语句。
2. 可描述时序电路,也可描述组合电路
用数据流描述法设计8位比较器
LIBRARYY IEEE;
USE IEEE.STD_LOGIC_1164. ALL;
ENTITY compartor IS
PORT (a, b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
g: OUT STD_LOGIC);
END compartor;
ARCHITECTURE dataflow OF compartor IS
BEGIN
g <= '1' WHEN (a=b) ELSE
'0';
END daradlow;
用布尔方程形式作数据流描述设计的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) XOR b(0))
AND NOT (a (1) XOR b(1))
AND NOT (a (2) XOR b(2))
AND NOT (a (3) XOR b(3))
AND NOT (a (4) XOR b(4))
AND NOT (a (5) XOR b(5))
AND NOT (a (6) XOR b(6))
AND NOT (a (7) XOR b(7));
END bool;
3)结构化描述(Structural Description)
主要描述电路的组成和元件之间的互连关系。通过定义端口界面来实现,风格接近于实际的硬件结构。
实现手段:采用元件例化语句和生成语句
结构化描述建模步骤:
(1)元件说明:描述局部接口。
(2)元件例化:相对于其它元件放置元件。
(3)元件配置:指定元件所用的实体,
8位比较器的结构化描述法
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE work.gatespkg.ALL;
ENTITY comparator IS
PORT (a, b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
g: OUT STD_LOGIC);
END comparator;
--元件列话语句
ARCHITECTURE structural OF comparator IS
SIGNAL x: STD_LOGIC_VECTOR (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: and8 PORT MAP(x(0) , x(1) , x(2) , x(3) ,
x(4) , x(5) ,x(6) , x(7) , g);
END structural;