硬件描述语言VHDL之顺序语句基本使用介绍

硬件描述语言VHDL之顺序语句

  • 1. 顺序赋值语句
    • 1.1 变量赋值语句
      • 1.1.1 基本说明
      • 1.1.2 使用举例
    • 1.2 信号赋值语句
      • 1.2.1 简单说明
      • 1.2.2 使用举例
    • 1.3 常量赋值语句
      • 1.3.1 简单说明
      • 1.3.2 使用举例
  • 2. wait语句
    • 2.1 简单说明
    • 2.2 基本形式
    • 2.3 代码示例
  • 3. if语句
    • 3.1 基本格式
    • 3.2 二选一if语句
      • 3.2.1 基本格式
      • 3.2.2 使用举例
    • 3.3 多选一if语句
      • 3.3.1 基本格式
      • 3.3.2 使用举例
    • 3.4 门闩(shuan)if语句
      • 3.4.1 基本格式
      • 3.4.2 使用举例
  • 4. case语句
    • 4.1 简单说明
    • 4.2 基本格式
    • 4.3 使用举例
  • 5. 数据类型
    • 5.1 常见数据类型
    • 5.2 枚举类型
    • 5.3 数据类型转换举例


1. 顺序赋值语句


1.1 变量赋值语句


1.1.1 基本说明

  1. 主要用于对暂时数据进行局部存储,是一个局部量,其作用范围是说明它的进程、过程或函数
  2. 变量的说明和赋值只能在VHDL语言程序的顺序部分进行
  3. 变量赋值是直接非预设的,在某一时刻仅包含一个值
  4. 变量赋值和初始化赋值符号用:=表示
  5. 变量在硬件中没有类似的对应关系,主要用于高层次的数学模型或算法描述中
  6. 左右数据类型和长度必须相同,变量赋值立即生效,,没有时间延迟,也不允许出现附加延时
  7. 变量在使用前必须说明 说明格式为:variable 变量名:数据类型[:=设定值]

1.1.2 使用举例

variable x,y,z:integer range 0 to 255;
x := 93;
y := 0;
z := y;

variable a,b:integer;
variable d,f:integer :=0;
variable m:integer range 0 to 255 :=30;

1.2 信号赋值语句


1.2.1 简单说明

  1. 只能在VHDL语言程序的并行部分对信号赋值语句进行说明,但赋值可以应用在并行部分和顺序部分

  2. 格式:目标信号 <= 表达式

  3. 赋值符号两边目标变量和表达式数据类型和长度必须保持一致

  4. 信号赋值的执行和信号值更新之间有一定延时。

  5. 信号除了没有方向的概念以外几乎和端口的概念一致。(端口是一种有方向的信号)

  6. 信号是全局量,各进程之间的通信可以借助信号来实现

  7. 信号在使用前必须说明 说明格式为:signal 信号名:数据类型 [:=设定值]


1.2.2 使用举例

signal b:std_logic;
signal a:std_logic_vector(0 upto 15);-- 最低位第15位
signal c:std_logic_vector(3 downto 0);-- 最低位第0位

1.3 常量赋值语句


1.3.1 简单说明

  1. 常量constant 指那些在设计描述中不发生变化的值,是全局量

  2. 在结构体描述,程序包说明,实体说明,过程说明,函数调用说明和进程说明中使用

  3. 常量在被说明时赋值,并在程序执行过程中保持不变,但在子程序中说明的常量仅在该子程序被调用期间有效

  4. 常量在使用前必须说明 说明格式为:constant 常量名 : 数据类型 [:=设定值]


1.3.2 使用举例

constant vcc:real:=5.0;
constant delay:time:=10ns;
constant byte:integer:=8;

2. wait语句


2.1 简单说明

  1. 进程在仿真运行中总是处于两种状态之一:执行或挂起。
  2. 敏感信号的变化激活进程,从第一条语句继续执行。当执行到最后一条语句时,进程挂起。
  3. 等待敏感信号的变化,进程状态的变化受wait语句的控制,当进程执行到wait语句时就被挂起,并设置好再次执行的条件
  4. 若有敏感信号指定,则不能有wait语句

2.2 基本形式

wait on (敏感信号列表)
wait until (判断条件表达式)
wait for(时间)


2.3 代码示例

process
begin
	output <= A or B;
	wait on A,B;
end process;

等价于

process(A,B)
begin
	output <= A or B;
end process;

3. if语句


3.1 基本格式

硬件描述语言VHDL之顺序语句基本使用介绍_第1张图片


3.2 二选一if语句


3.2.1 基本格式

硬件描述语言VHDL之顺序语句基本使用介绍_第2张图片


3.2.2 使用举例

16位二选一数据选择器

signal sel:std_logic;
signal a,b,c:std_logic_vector(15 downto 0);
if sel = '1' then
	c <= a;
else
	c <= b;
end if;

3.3 多选一if语句


3.3.1 基本格式

硬件描述语言VHDL之顺序语句基本使用介绍_第3张图片


3.3.2 使用举例

四选一数据选择器

process(A)
begin
	if A="00" then 
		f <= D0;
	elsif A="01" then
		f <= D1;
	elsif A="10" then
		f <=D2;
	else f <= D3;
	end if;
end process;

3.4 门闩(shuan)if语句

往往用于产生触发器和锁存器


3.4.1 基本格式

硬件描述语言VHDL之顺序语句基本使用介绍_第4张图片


3.4.2 使用举例

设计D触发器

library ieee;
use ieee.std_logic_1164.all;
entity dff is
	port(
		clk,d:in std_logic;
		q:out std_logic
	);
end dff;
architecture rtl of dff is
begin
	process(clk)
	begin
		if clk'event and clk='1' then
			q <= d;
		end if;
	end process;
end rtl;

4. case语句


4.1 简单说明

  1. case语句常用来描述多选一逻辑模型或总线 编码器 译码器 状态机等行为,case和if语句在多数情况下完成的功能是相同的,但用case语句可读性更好,更为简洁。

  2. 当case中某一个选择项满足时,执行它后面的顺序执行语句

  3. case与if不同的是,case语句各个选择项直间不存在优先级,执行顺序与各个选择项的书写顺序无关

  4. case语句要求用选择项列出全部可能的取值 而不允许重复 对于不需要一一列举的选择项,可用others代替

  5. 选择表达式与选择项的数据类型必须相同。


4.2 基本格式

硬件描述语言VHDL之顺序语句基本使用介绍_第5张图片


4.3 使用举例

二输入与非门

signal sel :std_logic_vector(1 downto 0);
signal a,b,c:std_logic;
process(a,b,sel)
begin
	sel <= a & b;
	case sel is
		when "00"|"01"|"10" =>
			c <= '1';
		when "11" =>
			c <= '0';
			when others => null; -- "null"是一个什么也不做的空语句
	end case;
end process;

5. 数据类型


5.1 常见数据类型

硬件描述语言VHDL之顺序语句基本使用介绍_第6张图片


5.2 枚举类型

基本格式: type 类型名 is 枚举列表;

举例:
type bit is (‘0’,‘1’);
type boolean is (true,false);


5.3 数据类型转换举例

variable i:integer;
variable r:real;
i:=integer(r);
r:=real(i);

——————END-2022-04-25——————

你可能感兴趣的:(数字逻辑,VHDL,硬件描述语言,电路,顺序语句)