上篇 基础元素
目录: 数据类型 数据对象 运算符 语句 基本程序结构 电路描述方式
数据类型
预定义类型 bit bit_victor integer std_logic std_logic_victor 自定义类型 枚举类型 type 新数据类型 is (元素1, 元素2, ...) 例 定义 type state_type is (s1, s2, s3. s4); 引用 signal state : state_type; 数组类型 type 数组 is array (范围) of 数据类型; 例 定义 type byte is array (7 downto 0) of bit; type word is array (31 downto 0) of bit;
-- 定义一个8bit的数组 -- 定义一个新类型state_type
-- 定义一个信号state,类型为state_type
-- 定义一个32bit的数组
数据对象
端口 声明
赋值
端口 : in | out 数据类型; 端口 <= 表达式; signal 信号 : 数据类型; 信号 <= 表达式; varable 变量 : 数据类型;
-- 端口在特性上等同于信号,但赋值在entity的port中
信号 声明
赋值
变量 声明
VHDL语法格式 1
赋值 变量 := 表达式;
常数 : 数据类型 := 数值;
常数 声明
运算符
算术运算 +, -, * 并置运算 &
关系运算 =, /=, <, <=, >, >=
逻辑运算 and, or, not, nand, nor, xor, xnor
语句
并行语句 ⑴ 信号赋值语句
简单信号赋值语句 信号 <= 表达式; 选择信号赋值语句 with 选择表达式 select
信号 <= 表达式1 when 选择值1, 表达式2 when 选择值2, ......
表达式n when others;
条件信号赋值语句 信号 <= 表达式1 when 条件关系式1 else 表达式2 when 条件关系式2 else ......
表达式n when 条件n else 表达式; ⑵ 过程调用语句 过程 (实参);
⑶ 函数调用语句 信号 <= 函数 (实参);
VHDL语法格式 2
⑷ 元件例化语句
元件声明 component 元件实体 -- 将一个实体声明为元件 port (端口声明); end component; 元件引用
按位置引用 标号 : 元件实体 port map (连接端口1, 连接端口2, ...);
按名称引用 标号 : 元件实体 port map (元件端口1 >= 连接端口1, 元件端口2 >= 连接端口2, ...); ⑸ 生成语句 格式 1 [标号:] for 循环变量 in 取值范围 generate 声明语句, begin 并行语句, end generate [标号];
取值范围: 表达式 to 表达式; -- 递增方式,如1 to 5 表达式 downto 表达式 ; -- 递减方式,如5 downto 1 格式 2 [标号:] if 条件关系式 generate 声明语句; begin 并行语句,
end generate [标号] , ⑹ 块语句 块标号: block [(保护条件)] 接口声明; 类属声明; begin
VHDL语法格式
3
并行语句; -- 被保护的变量前需加上保留字guarded end block 块标号; 带保护的块语句举例: entity latch is port( d, clk : in bit; q, qb : out bit ); end latch;
achetectire latch_guard of latch is begin
b1 : block(clk = ?1?) begin
q <= guarded d after 5 ns; qb <= guarded not(d) after 7 ns; end block b1; end latch_guard
⑺ 进程语句 [标号:] process (敏感信号)
[声明语句;] --常量,变量,信号 begin 顺序语句; end process [标号:];
顺序语句 ⑴ 赋值语句 -- 在进程中
VHDL语法格式
4
信号 <= 表达式; 变量 := 表达式; ⑵ 流程控制语句 if语句
格式 1: if 条件关系式 then 顺序语句; end if;
格式 2: if 条件关系式 then 顺序语句; else 顺序语句; end if;
格式 3: if 条件关系式1 then 顺序语句;
elsif 条件关系式2 then 顺序语句; ...... else 顺序语句; end if;
case 语句 -- case 语句中,条件值有3种形式:值,值1 | 值2 |...| 值n,值 TO 值
-- 最后一行的顺序语句若为null,则有意引入锁存器
case 条件表达式 is
VHDL语法格式
5