VHDL最基本的语言结构:实体,结构体;
1、实体:描述电路器件的外部情况及各端口的基本性质,如信号
流动的方向,信号的数据类型。
关键词:ENTITY引导,END ENTITY ****结束
2、结构体:描述电路器件的内部逻辑功能和电路结构。分为顺序
语句,和并行语句。
关键词:ARCHITECTTURE引导,END ARCHITECTURE ***结
束。
实体一般表述格式:
ENTITY e_name IS
PORT(p_name:port_m data_type;
...
p_namei:port_mi data_type;)
END ENTITY e_name;
e_name 为实体名 p_name为端口名(实体名,端口名,信号名 不
能为数字或中文定义,不能用EDA中的元件名,不能以数字开头)
port_m端口模式:IN
OUT
INOUT:双向端口 RAM的数据口,单片机的IO口
BUFFER:缓冲端口 当需要输入数据时,只允
许内部回读输出的信号。
data_type:INTEGER\BOOLEAN\STD_LOGIC\BIT.
结构体的表达格式
ARCHTECTURE arch_name OF e_name IS
[说明语句]
BEGIN
(功能描述语句)
END ARCHITECTURE arch_name;
赋值符号和数据比较符号 WHEN ELSE语句
y<=a WHEN s='0'
ELSE b;
a 的值赋给y,当s='0'时(这里‘=’表示数据比较,没有赋值的含
义)数值比较后的输出结果是布尔数据类型,只用于逻辑操作和
条件判断。
关键字标识符不区分大小写
文件取名和存盘:
后缀名.vhd
文件名尽量与该程序的模块名一样
2选1多路选择器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux21a IS
PORT(a,b,s:IN STD_LOGIC;
y: out STD_LOGIC;)
END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS
SIGNAL e: std_logic;
SIGNAL d: std_logic;
BEGIN
d<=a AND (NOT s);
e<=b AND s;
y=d OR e;
END ARCHITECTURE one;
逻辑操作符
AND OR NOT
NAND 与非
NOR 或非
XOR 异或 相异为一
XNOR 同或 相异为零
数据类型STD_LOGIC(常用)
TYPE BIT IS('0','1');
TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','-');
U表示未初始化;
X表示未知的
0表示逻辑0;
1表示逻辑1;
Z表示高阻态;
W表示弱未知的;
L表示弱逻辑0;
H表示弱逻辑1;
-表示忽略;
20120505
LIBRARY WORK;//打开工作库 默认打开
LIBRARY STD;//打开STD库 默认打开
USE STD.STANDARD.ALL//表示允许使用STD库中STANDARD程序包中的所有内容
VHDL工具将PROJECT的文件所在的目录的路径默认为工作库的路径。(WORK LIBRARY)
信号定义和数据对象
ARCHITECTURE one OF mux21a IS
SIGNAL e: std_logic;
SIGNAL d: std_logic;
e,d 被定义为器件的内部节点信号,不用定义其端口的模式IN OUT。
数据对象 SIGNAL e 限定行为方式,功能特点,
数据类型 std_logic 限定取值范围
数据对象有三类:SIGNAL VARIABLE CONSTANT
2选1多路选择器(描述3)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux21a IS
PORT(a,b,s:IN STD_LOGIC;
y: out STD_LOGIC)
;
END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS
BEGIN
PROCESS(a,b,s) BEGIN
IF s='0' THEN y<=a;
ELSE y<=b;
END IF;
END PROCESS;
END ARCHITECTURE one;
条件语句
IF_THEN_ELSE END IF
IF A THEN //A 的数据类型必须是BOOLEAN型的
进程语句和数据语句
进程语句:PROCESS引导END PROCESS结束(所有顺序语句都必须放在进程语句中)
PROCESS(a,b,s) a,b,s为敏感信号
PROCESS语句的执行依赖于敏感信号的变化。
一个结构体中,可以包含任意个进程语句,所有进程都是并行的。进程内的语句结构属于顺序结构。
配置
1、作用:为实体配置不同结构体
元件端口连接,重新配置
2配置语法:
configuration 配置名 of 实体名 is
for 选择结构体名;
end for;
end 配置名;
例子:两输入与非门配置不同结构体
library ieee;
use ieee.std_logic_1164.all;
entity nand2 is
port(a:in std_logic;
b:in std_logic;
c:out std_logic);
end entity nand2;
architecture art1 of nand2 is
begin
c<=not (a not b);
end architecture art1;
architecture art2 of nand2 is
begin
c<='1'when(a='0')and(b='0')else
'1'when(a='0')and(b='1')else
'1'when(a='1')and(b='0')else
'0'when(a='1')and(b='1')else
'0'
end architecture art2;
configuration peizhi of nand2 is
for art2
//for 元件例化标号:元件名 use configuration 库名,.配置名;
end for;
end peizhi;
元件配置语法格式:
configuration 配置名 of 实体名 is
for 选结构体名
for 元件例化标号:元件名 use configuration 库名,.配置名;
end for;
end 配置名;
四程序包:
程序包是已定义的数据类型,常数,程序包,元件的集合
结构:
1、常数说明:预定义系统的宽度。数据,地址
2、数据类型:整个设计中通用的数据类型
3、元件定义:元件的对外接口
4、子程序:可调用
程序包包首:package 程序包名 is
程序包主体:包说明项;//use语句,类型子类型,
end 程序包名;//信号常量,子程序,常量说明
程序包主体的表达:
package_boddy 程序包名 is
包体说明项;算法(逻辑功能)
end 程序包名;
std_logic_1164
std_logic_arith(unsigned signed small int)
std_logic_unsigned
std_logic_signed
standard.textio 文本
例:
程序包说明:
package exa is
type byte is range 0 to 255;
subtype nibble is byte range 0 to 15;
constant byth_ff:byte:=255;
signal add: niddle;
component byte_adder
port(a,b:in byte;
c:out byte;
overflow:out bool);
end component byte_adder;
function my_function(a:in byte)
return byte;
end package exa;
use 打开
library work
use work.exa.all
/*************20100510*********/
一、vhdl文字规则
1、数值:数字,字符,位串
数字:整数: 45_234=45234 156E2=156*10^2=15600
实数: 带小数范围的十进制数
数字基数 10#170# =170(十进制)
2#1111_1110#E1 (二进制)=1111110*2^1
物理量: fs ps ns
字符串:文字串‘A’“AA”,数字串
位串: 0to7 7downto 0
2、标识符:英文字母开头 不连续使用_、不以_结尾
组成:26字母,0-9,_
3、下标名
二、数据对象
三种对象的物理意义
1、常量:GND VCC BUS
2、变量:暂存某些值的载体(描述算法)
3、信号:代表硬件设计中的某一条连接线(端口)
三种对象的特点及说明场合
信号:实体,结构体,子程序(全局变量)
变量:process function procedure(局部变量)
常量:可用于以上两种
常量说明
constant width:integer :=8;
constant 常数名:数据类型:=表达式;
变量说明
variable count:integer range 0 to 255:=10;
variable 变量名:变量类型 约束条件:=表达式;
信号说明
signal 信号名:数据类型 约束条件:=表达式(初值)
信号的物理特性:对应硬件连线
并行工作
延时
时序电路
总线特性
三种对象区别
物理意义不同
使用范围不同
仿真时
综合(寄存器)
数据类型
预定义和自定义
1、布尔量
2、位
3、位矢量(bit_vector)
4、字符 区分大小写
5、整数 integer(-2^31——2^31-1)
6、nature positive 自然数 正整数
7、实数(real)(1.0e-38__1.0e38)浮点数
8、字符串(string)双引号括起来
9、时间(time)
10、错误等级(severity_level)
note warning error failure
用户自定义类型
1、语法格式
type 数据类型名 is 数据类型定义 of基本数据类型
type byte is array of bit
不同类型间的转换使用
subtype...
枚举类型
type 类型名称 is(枚举文字);
type color is (blue,green,yellow,red);
"00"""01" "10" "11"
整数类型(子范围)
数组类型
a,限定性数组:type 数组名 is array(数组范围)of数据类型
b,非限定性数组:rang<>
记录类型
type 记录类型名 is record
元素名:元素数据类型
。。。。
end record
位置关联
名称关联