VHDL基础知识
Very High Speed Hardware Description Language)超高速硬件描述语言
VHDL设计实体的组成:库和程序包(Library,Package),实体(Entity),结构体(Architecture),配置(Configuration).
例:用VHDL语言设计一个2选1的数据选择器
entity mux21 is
port(a,b:in bit;
s:in bit;
y:out bit);
end entity mux21;
architecture one of mux21 is
signal d,e:bit;
begin
d<=a and (not s); --左边三行可以用下面的语句代替。
e<= b and s; --y<= a when s=’0’ else
y<= d or e; --- b;
end architecture one;
1:实体的语句格式
名称 内容
引导语句 ENTITY 实体名 IS
类属表 GENERIC(------);
端口表 PORT(------);
结束语句 END 实体名;
类属说明的书写格式是:
GENERIC(常数名:数据类型:设定值;
常数名:数据类型:设定值);
端口语句的格式:
PORT(端口信号名:端口模式 数据类型;
端口信号名:端口模式 数据类型);
IN 输入
OUT 输出
INOUT 双向
BUFFER 缓冲
2.结构体
结构体的任务是:定义结构体中的各项内部使用元素,如数据类型(TYPE),常数(CONSTAND),信号(SIGNAL),元件(COMPONENT),过程(POCEDURE),变量(VARIABLE)和进程(PROCESS)等。通过VHDL语句描述实体所要求的具体行为和逻辑功能。描述各元件之间的连接。
结构体格式:
结构体名 OF 实体名 IS
定义语句法
BEGIN
功能描述语句法
END 结构体名称
结构体的三种描述方式:行为描述,数据流(或寄器传输)描述(RTL).
例:用行为描述方式设计的全加器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY onebitadder IS
PORT(a,b,cin:IN BIT;
Sum,count:OUT BIT);
END onebitadder;
ARCHITECTURE behavior OF onebitadder IS
BEGIN
PROCESS(a,b,cin)
BEGIN
Sum<= a XOR b XOR cin;
Count<=(a AND b) OR ((a XOR b) AND cin);
END PROCESS;
END behavior;
块语句结构:
块结构名:
BLOCK
端口说明 类属说明
BEGIN
并行语句
END BLOCK 块结构名;
进程语句结构:
进程名:
PROCESS(敏感信号表) IS
进程说明
BEGIN
顺序描述语句
END PROCESS 进程名;
能被主程序反复调用并能将处理结果传送到主程序的程序模块,子程序分为过程语句(Procedure)和函数(Functure)两种。子程序中的参数说明是局部的,只能在子程序体内起作用。
PROCEDURE 过程名(参数1;参数2;----) IS
定义语句;
BEGIN
顺序处理语句;
END 过程名;
FUNCTION 函数名(参数1;参数2;----)
RETURN 数据类型 IS
定义语句;
BEGIN
顺序处理语句;
RETURN 返回变量名;
END 函数名;
库的使用语句格式是:
USE 库名.程序包名.项目名;
USE 库名.程序包名.ALL;
包集合
包的结构包括包首和包体两部分:
PACKAGE 包集合名 IS
说明语句
END 包集合名;--包首
PACKAGE BODY 包集合名 IS
说明语句
END BODY; --包体
配置语句的格式是:
CONFIGURATION 配置名 OF 实体名 IS
配置说明
END 配置名;
数字:123E2即12300,12_345_67即1234567,1.0, 12.98-2即0.1298, 254表示成十六进制数是16#FE#, 表示成二进制数是2#1111_1110#,表示成八进制是8#376#,表示成十进制数是10#254#,
字符串:字符是能用ASCII码表示的数字,字母或符号,加单引号。字符串是字符的一维数组,加双引号。
标识符:表示常数,变量,信号,端口,子程序或参数的名字,有效字符包括全部大小写英文字母且不区分大小写,数字0—9及单一下划线,且下划线只能放在字母或数字之间。
还有如下标识符规则:
应以英文字母开头
允许包含图形符号如回车符,换行符,空格符
不能使用VHDL中的关键字
标识符的下标加括号表示
VHDL的数据对象分为:常量,变量和信号
常量定义的格式:
CONSTANT 常数名:数据类型:=表达式;
信号的格式:
SIGNAL 信号名:数据类型
<= --赋值符
变量的格式:
VARIABLE 变量名:数据类型
:= --赋值符
信号可以在实体,结构体和程序包中均可定义,变量只能在进程或子程序中定义。
VHDL的操作符:&并置, /=不等于, =等于, <=小于等于, >=大于等于, /除, **指数,*乘, +加, -减, MOD求模, REM求余, ABS取绝对值
AND逻辑与,OR逻辑或,NAND逻辑与非,NOR逻辑或非,XOR逻辑异或,NOT取反
VHDL的基本语句分为顺序语句(sequential statements)和并行语句(concurrent statements)两类。
顺序语句
1. 赋值语句(ASSIGNMENTS STATEMENTS)
2. 条件语句
IF 条件 THEN
顺序语句
END IF;
IF 条件 THEN
顺序语句
ELSE
顺序语句
END IF;
IF 条件1 THEN
顺序语句1;
ELSIF 条件2 THEN
顺序语句2
.
.
ELSE 顺序语句n
END IF;
IF 条件1 THEN
IF 条件2 THEN
.
.
END IF;
END IF;
CASE 条件表达式 IS
WHEN 条件选择值=>顺序语句;
WHEN 条件选择值=>顺序语句;
--------
END CASE;
其中符号=>没有实际操作意义,相当于THEN
若CASE语句中的选择值不能覆盖条件表达式的值,则用“OTHERS”作为最后一个条件取值,“OTHERS”的选择值只能出现一次。
循环语句
1. 标号:FOR 循环变量 IN 循环次数范围 LOOP
顺序语句
END LOOP 标号;
2. 标号:WHILE 条件 LOOP
顺序语句
END LOOP 标号;
循环控制语句(NEXT)
1.NEXT 标号 WHEN 条件;
如果条件成立,则执行NEXT语句,跳转到标号指定语句,否则继续向下执行
2.NEXT;
执行到NEXT语句时,无条件终止向下执行,跳转到LOOP语句处开始下一个循环。
3. NEXT LOOP标号;
执行到NEXT语句时,终止向下执行,跳转到LOOP标号语句处开始下一次循环。
循环控制语句(EXIT)
EXIT也有三种格式:
EXIT --- 格式1
EXIT LOOP标号 ----格式2
EXIT LOOP标号 条件表达式子 --- 格式3
注意:NEXT语句的跳转方向是LOOP标号指定的语句,在没有LOOP标号时,则跳转到当前LOOP语句的循环起点。而EXIT的跳转方向则不同,当执行到EXIT语句时会完全跳出循,即跳转到LOOP循环语句的结束处。
等待语句(WAIT)
WAIT; --格式1,无限等待
WAIT ON 信号表; --格式2,直至敏感信号变化
WAIT UNTIL 条件表达式; --格式3,直至条件满足
WAIT FOR 时间表达式; --格式4,直至时间到
进程语句(PROCESS)
进程标号;
PROCESS(敏感信号表)IS
说明部分
BEGIN
顺序语句;
END PROCESS 进程标号;
--其中标号可以省去。
例:用进程语句设计一个D触发器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY dff1 IS
PORT(CLK:IN STD_LOGIC;
d:IN STD_LOGIC;
Q:OUT STD_LOGIC);
END;
ARCHITECTURE bhv OF dff1 IS
SIGNAL Q1:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK’EVENT AND CLK=’1’ --检测CLK的上升沿
THEN Q1<=d;
END IF;
Q<=Q1;
END PROCESS;
END bhv;
元件例化语句(COMPONENT INSTANTIATIONS)
COMPONENT 元件名 IS
GENERIC(类属表)
PORT(端口名表);
END COMPONENT; -----元件定义
例化名:元件名 PORT MAP(端口名=>连接端口名,…….);------元件例化
其中端口名指被调用元件的端口,连接端口名指当前设计系统准备接入元件的对应端口。
生成语句(GENERATE STATEMENTS)
标号 FOR 循环变量 IN 取值范围
GENERATE
说明
BEGIN
并行语句
END GENERATE 标号;
标号 IF 条件 GENERATE
说明
BEGIN
并行语句
END GENERATE 标号;
除生成语句嵌套情况外,标号可不要。
文章评论(0条评论)
登录后参与讨论