-- *********注释栏*********
-- NOT Gate Simulation
-- Filename:NOTGATE
-- *******所使用的库*******
Library IEEE;
Use IEEE. std_logic_1164. all;
-- ********实体定义********
Entity notgate is
port(
A:in STD_LOGIC;
F:out STD_LOGIC;
);
End notgate ;
-- ********结构体定义*******
Architecture notgate _arch of notgate is
Begin
F<= not A
End notgate _arch
ARCHITECTURE 结构体名 OF 实体名 IS
-- **用于声明要用到的信号、数据类型、常数、子程序和元件等**
[说明语句;]
BEGIN
-- **用于具体描述结构体的功能和行为**
[功能描述语句;]
END [ARCHITECTURE] [结构体名]
以一个二选一选择器为例,举例如下:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mux21a IS
PORT (a,b,s: IN BIT;
y: OUT BIT
);
END mux21a;
-- **结构体**
ARCHITECTURE one OF mux21a IS
BEGIN
P1: PROCESS(a,b,s)
BEGIN
if s=‘1’ then
y<=a;
else
y<=b;
end if;
END PROCESS P1;
END one;
VHDL命名规则
标识符
有效的字符:包括26个大小写英文字母,数字0~9 以及下划线“_”。
任何标识符必须以英文字母开头。
必须是单一下划线“_”,且其前后都必须有英文字母或数字。
标识符中的英语字母不分大小写。
允许包含图形符号(如回车符、换行符等),也允许包含空格符。
下标名
格式:标识符(表达式)
下例的两个下标名中一个是m,属不可计算,另一个是3,属可计算的。
SIGNAL a, b : BIT_VECTOR (0 TO 3) ;
SIGNAL m : INTEGER RANGE 0 TO 3 ;
SIGNAL y, z : BIT ;
y <= a(m) ; -- 不可计算型下标表示
z <= b(3) ; -- 可计算型下标表示
VARIABLE A : INTEGER; --定义A为整型变量
VARIABLE B,C : INTEGER:=2; --定义B和C为整型变量,初始值为2
信号(SIGNAL)
信号定义:
SIGNAL 信号名: 数据类型:=初始值;
信号代表物理设计中的某一条硬件连接线,可代表连线、内连元件、或端口。
信号通常在构造体、程序包和实体中说明。声明在进程外,作用范围为全局。
用“<=”来给信号赋值
信号在Package、Entity、Architecture 中声明举例如下:
SIGNAL S1: STD_LOGIC := '0';--定义了一个标准位的单值信号S1,初始值为低电平
SIGNAL S2,S3: BIT; --定义了两个为BIT的信号S2和S3
SIGNAL S4: STD_LOGIC_VECTOR(15 DOWNTO 0); --定义了一个标准位矢量(数组、总线)信号,共有16个信号元素
信号与变量区别
信号的声明在进程外,作用范围为全局。变量的声明在进程内,作用范围为该进程。
信号用于电路的内部连接,变量用于内部数据的交换
使用<=对信号进行赋值,赋值过程在进程结束时赋值,赋值有延迟
使用:=对变量进行赋值,赋值过程在执行到该语句时立即赋值,赋值无延迟。
数据类型
VHDL预定义数据类型
布尔(BOOLEAN)
取值为FALSE和TRUE,不是数值,不能运算,一般用于关系运算符。
--TYPE BOOLEAN IS (FALSE, TRUE);
位(BIT)
取值为0和1,用于逻辑运算。
--TYPE BIT IS ('0' , '1');
位矢量(BIT_VECTOR)
基于Bit类型的数组,用于逻辑运算。
--TYPE BIT_VECTOR IS ARRAY (Natural range<>) OF BIT;
SIGNAL a:Bit_Vector(0 TO 7);
SIGNAL b:Bit_Vector ( 7 DOWNTO 0) ;
字符(CHARACTER)
通常用‘’引起来,区分大小写。
--TYPE CHARACTER IS (NUL, SOH, STX, …, ‘ ’, ‘!’, …);
VARIABLE string_var : STRING (0 TO 3);
string_var := "a b c d";
错误等级(Severity Level)
表示系统状态,仅用于仿真不可综合。
TYPE severity_level IS (NOTE、WARNING、ERROR、FAILURE);
. 时间(TIME)
物理量数据,包括整数和单位两个部分,用至少一个空格隔开,仅用于仿真不可综合。
TYPE time IS RANGE -2147483647 TO 2147483647
units
fs ; -- 飞秒,VHDL中的最小时间单位
ps = 1000 fs ; -- 皮秒
ns = 1000 ps ; -- 纳秒
us = 1000 ns ; -- 微秒
ms = 1000 us ; -- 毫秒
sec = 1000 ms ; -- 秒
min = 60 sec ; -- 分
hr = 60 min ; -- 时
end units ;
Type conv_table is array(std_logic) of bit;
Constant table: conv_table:=(‘0’|’L’=>’0’, ‘1’|’H’=>’1’, others=>’0’);
Signal a: bit; signal b: std_logic;
A<=table(b); -- 将std_logic型转换为bit型