zhliao2

风雨兼程,一路向北-------fpga (Keep a quiet heart study)
VHDL基础

行为建模----由其输入输出响应描述的组件
-只有电路功能,没有结构
-没有专门的硬件目标

结构化建模----由底层互联组成和原语描述的组件
-电路功能和结构
-要求明确的硬件实现

寄存器传送级(RTL)----出于综合目的的一类行
为建模
-硬件是隐含的或者推断的
-可综合

综合----将HDL译成电路,然后对表征电路进行优

进程----VHDL中执行的基本单元

VHDL基础
-两种构建方法:综合和仿真
-VHDL语言包括保留关键字
-语言的大部分对条件不敏感
-VHDL声明以;结束
-VHDL对空白不敏感。用于提高可读性
-VHDL中的注释以"--"开始,到eol结束

VHDL设计单元
-实体:用于定义模型的外观(例如,符号)
-体系结构:用于定义模型的功能
-配置:用于和具体实体的体系结构进行联系
-封装:1信息收集,可提供VHDL模型引用(例如,
库)。2包括两部分,封装声明和封装体

实体声明
ENTITY <entity> IS
Generic Declaratrions
Port Declarations
END <entity_name>; --1
END ENTITY <entity_name>; --2

实体:属性声明
ENTITY <entity_name> IS
GENERIC (
CONSTANT tp1h, tph1 : time := 5ns;
--Note constant is assumed and is not
require
tphz, tp1z : TIME := 3ns;
default_value : INTEGER := 1;
cnt_dir : STRING := "up" --没有分号
);
Port Declarations
END ENTITY <entity_name>;
结构:
<class> object_name : <type> :=
<initial_value>;
-<class> : 对目标的行为
-Object_name : 标识符
-<type> : 目标数据类型
-<initial_value> : 可选

实体:端口声明
ENTITY <entity_name> IS
Generic Declaration
Port (
SIGNAL clk, clr : IN BIT;
--Note:SIGNAL is assumed and is not
required
q : OUT BIT
);
END ENTITY <entity_name>;
结构:<class> object_name : <mode> <type>;
-<class> : 对目标的行为
-Object_name : 标识符
-<mode> : 方向 in/out/inout/buffer(输出w/内
部反馈)
-<type> : 目标可包含什么

体系结构
-类推:原理图
-描述模型的功能和时序
-必须与实体相关
-实体可以有多个体系结构
-体系结构进程同时执行
-体系结构类型
--行为:设计怎样工作
-RTL:以寄存器来描述设计
-功能:没有时序
--结构:网表
-门/元件级
--混合:以上组合
ARCHITECTURE <indentifier> OF
<entity_identifier> IS
--Architecture declaration section (Three
example declaration below;
-- examples of other possible declaration
types not shown)
SIGNAL temp : INTEGER := 1; --signal
declaration := 1 is default value optional
CONSTANT load : BOOLEAN := true; --
constant declarations
TYPE states IS (S1, S2, S3, S4); --type
declarations
--Component declarations (discussed later)
--Subtype declarations (discuss later)
--Attribute declarations
-- Attribute specifications
--Subprogram declarations
--Subprogram body
BEGIN
Process statement;
Concurrent procedural calls
Concurrent signal assignment
Component instantiation statements
Generate statement
END ARCHITECTURE <identifier>;

配置(一般用到仿真的条件当中)
-用于在模型内进行联系
-联系一个实体和体系结构
-联系一个组件和实体-体系结构
-广泛应用在仿真环境中
-为设计选择提供灵活而又快速的途径
-在综合环境中受到限制,获知不支持
CONFIGURATION <identifier> OF <entity_name>
IS
FOR <architecture_name>
END FOR;
END CONFIGURATION <identifier>;

集成在一起的呢?
ENTITY cmpl_sig IS
PORT (
a, b, sel : IN BIT;
x, y, z : OUT BIT
);
END ENTITY cmpl_sig;

ARCHITECTURE logic OF cmpl_sig IS
BEGIN
-- simple signal assignment
x <= (a AND NOT sel) OR (b AND sel);

-- conditional signal assignment
y <= a WHEN sel = '0' ELSE b;

-- selected signal assignment
WITH sel SELECT
z <= a WHEN '0',
b WHEN '1',
0' WHEN OTHERS;
END ARCHITECTURE logic;

CONFIGURATION cmpl_sig_conf OF cmpl_sig IS
FOR logic
END FOR;
END CONFIGURATION cmpl_sig_conf;

封装
-封装是在整个模型中储存并使用信息最方便的方

-封装包括:
-封装声明(需要)
-类型声明
-子程序声明
-封装体
-子程序定义
-VHDL有两个内置封装
-标准
-TEXTIO

封装实例

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;

-- 封装声明
PACKAGE filt_cmp IS
TYPE state_type IS (idle, tap1, tap2,
tap3, tap4);
FUNCTION compare (variable a, b : integer)
RETURN boolean;
END PACKAGE filt_cmp;

--封装体
PACKAGE BODY filt_cmp IS
FUNCTION compare (variable a, b : INTEGER)
IS VARIABLE temp : BOOLEAN;
BEGIN
IF a < b THEN
temp := true;
ELSE
temp := false;
END IF;
RETURN temp;
END FUNCTION compare;
END PACKAGE BODY filt_cmp;


-含有一个封装或者一组封装
-资源库
-标准封装
-IEEE开发的封装
-Altera组件封装
-设计中所引用的任意设计单元库
-工作库
-单元所编译的库

库/封装模型引用
-所有封装必须被编译
-隐含库
-WORK
-STD
=注意:这些封装中的条目不需要引用,它们是
隐含的
-库子项
-定义可以被引用的库名称
-是路径/目录的符号名称
-由工程设置定义
使用子项
-在你的指定的库中,指定封装和目标

例子
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY cmpl_sig IS
PORT (
a, b, sel : IN BIT;
x, y, z : OUT BIT
);
END ENTITY cmpl_sig;

ARCHITECTURE logic OF cmpl_sig IS
BEGIN
--simple signal assignment
x <= (a AND NOT sel) OR (b AND sel);

--conditional signal assignment
y <= a WHEN sel = '0' ELSE B;

--selected signal assignment
WITH sel SELECT
z <= a WHEN '0',
b WHEN '1',
0' WHEN OTHERS;
END ARCHITECTURE logic;

LIBRARY <name>, <name>;
-名称是一个符号,由编译器工具定义。
=注意:记住,WORK和STD不需要定义
-USE
-lib_name.pack_name.object;
-ALL是保留字
-把Library/Use子句放在前面,所有的后续设计单
元都可以访问它


-含有以下封装
-standard(类型:比特,布尔,整数,实数和
时间,所有算子功能支持这些类型)
-textio(文件操作)
-隐含库(内置)
-不需要再VHDL设计中进行引用

标准封装中定义的类型
-类型BIT
-2逻辑值系统('0','1')
SIGNAL a_temp : BIT;
-附加_VECTOR指示比特阵列
SIGNAL temp : BIT_VECTOR (3 DOWNTO 0);
SIGNAL temp : BIT_VECTOR (0 TO 3);
-类型BOOLEAN
-(false, true)
-类型INTEGER
十进制正负值
SIGNAL int_tmp : INTEGER; --32位数
SIGNAL int_tmp1 : INTEGER RANGE 0 TO
255; --8位数

标准封装中定义的其他类型
-类型NATURAL
-0到2的32次幂的整数
-类型POSITIVE
-1到2的32次幂的整数
-类型CHARACTER
-ASCII字符
-类型STRING
-字符串
-类型TIME
-包含时间单位的数值(例如,ps,us,ns,ms
,sec,min,hr)


-LIBRARY IEEE;
-含有以下封装:
-std_logic_1164(std_logic类型以及相关
函数)
-std_logic_arith(算术函数)
-std_logic_signed(符号算术函数)
-std_logic_unsigned(无符号算术函数)

posted on 2012-05-13 15:41  zhliao  阅读(594)  评论(0)    收藏  举报