首页 > 其他分享 >VHDL概述

VHDL概述

时间:2023-04-11 15:23:23浏览次数:37  
标签:语句 顺序 VHDL PROCESS 端口 概述 信号 LOOP

VHDL概述

实体说明

不论是简单的数字电路还是一个微处理器或者系统,都由实体构成,实体的结构

ENTITY 实体名 IS
    [类属参数说明];
	[端口说明];
END ENTITY 实体名

以上就是一个基本设计单元的实体说明

类属参数说明

必须放在端口说明之前,用于指定参数

端口说明

端口说明是对基本设计实体(单元)与外部接口的描述, 书写格式的描述

PORT(端口名{, 端口名}:方向 数据类型名;
	……
	端口名{, 端口名}:方向 数据类型名;
	);

端口名

一般是赋予外部引脚的名称,为英文字母加数字

端口方向

image

用BUFFER时与该端口连接的另外一个元器件的端口也要用BUFFER说明,而OUT则没有此要求

顺序语句

与书写顺序有关,只能出现在进程、过程、函数中

变量赋值语句

格式[variable]目标变量名[: 数据类型]: = 表达式

variable a,b: std_logic
a:='1';
b:='0';

注: 变量是局部的,暂时性的数据对象,变量的赋值立即生效

std_logic

std_logic是长度为1的逻辑 与bit 相似,只是bit只能是'0 ’和'1‘ 而std_logic有以下九种状态:

'U'——初始值, 'X'——不定,

‘0’——0, '1'——1,

‘Z’——高阻, 'W'——弱信号不定,

‘L’——弱信号0, 'H'——弱信号1,

'-'——不可能的情况

单元素赋值

VARIABLE a, b: STD_LOGIC; 
VARIABLE x,y:INTEGER RANGE 15 DOWNTO 0;
a:='1';
b:='0'; 
x:=11; 
y:=2+x;

注意: signal e:integer range 0 to 8; 是不是指随便怎么编,e的...答:e的取值只能是0 1 2 3 4 5 6 7 8 超过8会自动返回到0,

数组赋值

数组元素赋值目标的表示格式

单个元素:标识符(下标名) 比如 b(5)

多个元素:标识符(下标1 to / downto 下标2)

VARIABLE a,b:STD_LOGIC_VECTOR(7  DOWNTO  0); 
b(7  DOWNTO  0):=“10110010”;    
a:=b; 



VARIABLE a,b : STD_LOGIC_VECTOR (1 TO 4);
b(1 TO 4):="1011";
a(1 TO 2):=b(3 TO 4);               

image

信号赋值语句

格式目标信号名 <= 表达式[after时间量]

注: 信号的赋值时有延时性的,信号量是全局量

SIGNAL y,z : STD_LOGIC;
SIGNAL a,b :STD_LOGIC_VECTOR(0 TO 3);
a <= "1010"; 
b <= "1000";
y <= a(1);                   
z <= b(3);                  

STD_LOGIC_VECTOR是数组

延时性举例

PROCESS ( a, b, c, d )
BEGIN 
  d<=a;
  x <= c XOR d;
  d<=b;
  y <= c XOR d;
  END PROCESS;

​ x <= c XOR b;

​ y <= c XOR b;

IF语句

IF 条件 THEN
顺序处理语句;
ENDIF

# 二选一
IF 条件 THEN
	顺序处理语句1;
ELSE
	顺序处理语句2;
ENDIF

# 多路选择
IF 条件1 THEN
	顺序处理语句1;
ELSIF 条件2 THEN
	顺序处理语句2;
	……
ELSE
	顺序处理语句x;
ENDIF

示例

IF sel='1'THEN
	c<=a;
ELSE
	c<=b;
END IF;

case 语句

CASE 表达式 IS
	WHEN 选择值=>顺序语句1;
	WHEN 选择值=>顺序语句2;
	【WHEN OTHERS=>顺序语句n】;
END CASE 

注意:IF语句是具有优先级;case语句没有优先级,必须穷举尽

loop语句

无限loop

[标号]:LOOP
	顺序处理语句;
END LOOP[标号];

无线循环功能,只有通过控制转向语句才可退出循环。

示例

L2:LOOP
	A:=A+1;
	EXIT L2 WHEN A>10;
END LOOP L2

for loop

[标号]:FOR 循环变量 IN 循环次数范围 LOOP
	顺序处理语句;
END LOOP[标号];

实现循环功能,每次循环时变量在范围内变化一次。循环变量不用事先说明,但不能含有信号和变量。

while loop

[标号]:WHILE 循环条件  LOOP
	顺序处理语句;
END LOOP[标号];

若条件为真,则进行循环;若条件为假则结束循环

next 语句

  • NEXT

    无条件终止当 前循环,跳回到本次循环LOOP语句处,开始下一次循环。

  • NEXT LOOP

    标号表明下一次循环的起始位置。当有多重LOOP语句嵌套时,可以跳转到指定标号的LOOP语句处,重新开始执行循环操作。

  • NEXT LOOP标号WHEN条件表达式

    如果条件表达式的值为TRUE,则执行NEXT语句,否,则循环正常继续。

exit 语句

  • exit
  • exit loop
  • exit loop 标号 when 条件表达式

wait语句

  • wait 无线等待

  • wait on 敏感信号变化是结束挂起

    PROCESS
     BEGIN  
         Y<=a AND b; 
          WAIT ON a, b;			-- 当a,b任一信号变化时发生变化时,结束挂起,继续执行之后的语句
     END PROCESS;
    
  • wait until 布尔表达式 条件满足时结束挂起

    表达式方式

    信号=VALUE;
    信号’EVENT AND 信号=VALUE;
    NOT信号’STABLE AND 信号=VALUE; 
    
  • wait for 表达式 时间到时结束挂起

    当执行到该语句时,进程被挂起,直到指定的时间到,结束挂起,继续执行后面的语句。

  • 多条WAIT语句

    指WAIT语句可以使用多个等待条件,只要一个或多个满足,则结束挂起。

  • 超时等待处理

    为防止“死锁”增加的超时处理语句。常与断言语句合用。

子程序调用语句

子程序包括过程和函数,子程序可以在结构体或程序包的任何位置被调用

  • 过程调用格式

    过程名(参数表 );=
    
  • 函数调用格式

    函数名(参数表);
    
  • 过程和函数的区别

    过程的参数可以是IN、INOUT或OUT模式,而函数只能是IN模式。

    函数调用返回一个指定类型的值,过程没有。

return

子程序返回。当“表达式”缺省时,只能用于过程;当有“表达式”时,只能用于函数,并且必须返回一个值。

RETURE [表达式];

null语句

空操作

格式:   NULL;

预定义属性描述语句

属性:是关于实体、结构体、类型、信号、变量等项目的一些特征。属性可通过一个值或一个表达式表示。

属性描述语句作用:实现对项目的特性进行检测或统计。

预定义属性描述语句的格式:项目名’属性标识符

格式 含义
信号’event 在一段时间内若有信号事件发生则返回“true”,反之,返回“false”。
信号’active 在一段时间内若信号活跃则返回“true”,反之,返回“false”。
信号’last_event 返回信号从前一个事件发生到现在时刻所经历的时间值;
信号’last_value 返回信号在最近一个事件发生以前的值;
信号’last_active 返回信号从前一次信号活跃到现在时刻所经历的时间值;
信号’STABLE[t] 在时间t内若没有事件发生则返回“true”的布尔信号,反之,返回“false”的布尔信号。

[示例]

-- 检查时钟信号clk上升沿方式:
clk‘EVENT AND clk=‘1’;
NOTclk‘STABLE AND clk=‘1’;



-- 检查脉冲宽度方式
(falling_edge(clk)) AND (clk'LAST_EVENT>=10 ns);    ---最小正脉冲宽度检查
( rising_edge(clk)) AND (clk'LAST_EVENT>=10ns);      --最小负脉冲宽度检查


并行语句

语句的执行与书写顺序无关。各并行语句之间可以通过信号交换信息或相互独立。

每个并行语句代表一个功能单元,一个或多个功能单元组成一个结构体。

进程语句(PROCESS)

PROCESS语句格式:
     [进程名]:PROCESS[(敏感信号参数)] 
           [变量说明语句;] 
     		BEGIN   
              	顺序描述语句;
     END   PROCESS[标号];

PROCESS内部语句为顺序执行语句 ,但进程本身是并发语句。

进程在敏感信号变化时触发执行,也可以用WAIT等待语句实现触发。

但需要注意,在进程语句中,敏感信号表和WAIT语句不能共同存在于一个进程之中。

  • 不含敏感信号表的进程

    ARCHITECTURE ART OF STAT IS
    BEGIN
        P1:PROCESS
        BEGIN
            WAIT UNTIL CLOCK;   
            IF(DRIVER=‘1’)THEN
                CASE OUTPUT IS
                    WHEN S1=>OUTPUT<=S2;
                    WHEN S2=>OUTPUT<=S3;
                    WHEN S3=>OUTPUT<=S4
                    WHEN S4=>OUTPUT<=S1;
                END CASE;
            END IF;
    END PROCESS P1;
    END ART;
    
  • 含敏感信号表的进程

    • 同步进程的敏感信号表中只有时钟信号

      PROCESS(CLOCK)
      BEGIN
      IF(CLOCK’EVENT  AND  CLOCK=‘1’ ) THEN
              IF RESET=‘1’ THEN
                  DATA<=“00”;           
              ELSE DATA<=IN_DATA; 
              END IF;
          END IF;
      END PROCESS;
      
    • 异步进程的敏感信号表中除时钟信号外还有其他信号

      PROCESS(CLK,RESET)    
         BEGIN
          IF RESET=‘1’ THEN
              DATA<=“00”;
          ELSE IF CLK’EVENT AND CLK=‘1’ THEN
              DATA<=IN_DATA;
              END IF;
          END IF;
      END PROCESS;
      

并发信号赋值语句

简单信号赋值语句

格式:赋值目标 <= 信号量表达式;

当右边值发生变化时完成代入功能。
在进程之外执行语句,等效于一个进程的缩写。

ARCHITECTURE behave OF a_bar IS
      BEGIN
         output <= a;
END behave;

-- 等价于

ARCHITECTURE behave OF a_bar IS
BEGIN
PROCESS(a,)
  output <= a;
END PROCESS;
END behave;

并发信号赋值语句

  • S<=S1&S2; 中 & 是连接操作

标签:语句,顺序,VHDL,PROCESS,端口,概述,信号,LOOP
From: https://www.cnblogs.com/wojiuyishui/p/17306352.html

相关文章

  • MATLAB代码:综合能源系统优化模型概述及其鲁棒优化
    MATLAB代码:综合能源系统优化模型概述及其鲁棒优化主要内容:本文在分析典型冷热电联供(combinedcooling,heatandpower,CCHP)系统的基础上,并结合其他优秀lunwen加以补充模型中的不足处,并围绕该系统结构设计了微网调度优化模型构架.在该结构中,选取电气、烟气、蒸汽、......
  • ReactJS到React-Native,架构原理概述
    React是一个纯JS的UI库,只能干HTML/CSS/JS提供的Web服务(新的H5API不一定支持), React-Native厉害在于它能打通JS和NativeCode,让JS能够调用丰富的原生接口,充分发挥硬件的能力,实现非常复杂的效果,同时能保证效率和跨平台性。在一定程度上,ReactNative和NodeJS有异曲同工之妙......
  • [MAUI 项目实战] 手势控制音乐播放器(一): 概述与架构
    这是一篇系列博文。请关注我,学习更多.NETMAUI开发知识![MAUI项目实战]手势控制音乐播放器(一):概述与架构[MAUI项目实战]手势控制音乐播放器(二):手势交互[MAUI项目实战]手势控制音乐播放器(三):动画[MAUI项目实战]手势控制音乐播放器(四):圆形进度条在之前的博文中提到这个......
  • JS引擎(2):Java平台上JavaScript引擎—Rhino/Nashorn概述
    可以后端开发的javascript引擎有ChromeV8基于C++java的Rhino引擎(JDK6被植入),Java8被替换为NashornRhino和Nashorn都是用Java实现的JavaScript引擎。它们自身都是普通的Java程序,运行在JVM上Rhino简介Rhino[ˈraɪnəʊ]是一种使用Java语言编写的JavaScript的......
  • 多表查询-概述
    概述:从多张表中查询数据笛卡尔积:在数学中,两个集合A集合和B集合的所有组合情况(在多表查询中,需要消除无效的笛卡尔积)  多表查询分类:连接查询:内连接:相当于查询A,B交集部分的数据外连接: 左外连接:查询左表所有数据,以及两张表交集的部分数据 右外连接:查询右表所有......
  • 约束-概述
    1.概述:约束是作用于表上字段的规则,用来限制存储在表中的数据2.目的:保证数据库中数据的正确性,有效性,完整性3.分类:  注意:约束是作用于表中字段上的,可以在创建/修改表是添加约束......
  • day01_Java语言概述
    对第一个java程序进行总结java程序编写-编译-运行的过程编写:我们将编写的java代码保存在以".java"结尾的源文件中编译:使用javac.exe命令编译我们的java源文件。格式:javac源文件名.java运行:使用java.exe命令解释运行我们的字节码文件。格式:java类名在一个java源文件中......
  • 回归分析-概述
    在大数据分析中,回归分析是一种预测性的建模技术,旨在通过数据统计分析,探索数据规律。回归分析主要研究因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。1.LinearRegression线性回归线性回归是最常见的回归分析技术。在......
  • 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述
    管理WEB服务器文件的WebDAV协议WebADV协议    WEBDAV追加方法  WeDAV请求示例  HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0   HTTP2.0的问题队头阻塞建立连接的握手延迟大QUIC的特性0RTT   没有队头阻塞的多路复用 ......
  • 运维Ansible自动化工具概述
    运维的工作内容安装系统:pxe、kickstart、cobbler、imagetemplate安装应用、配置应用、启动应用(服务):puppet、saltstack、chef发布程序:puppet、saltstack、chef监控(服务器、系统、应用、程序):zabbix程序发布灰度发布金丝雀发布ansible解决的问题:批量安装应用、配置应用、启动应用批量......