VHDL语言描述语句讲解

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL语言描述语句
一、VHDL语句分类; 二、基本的VHDL顺序语句 三、基本的VHDL并行语句 四、常用组合单元电路VHDL设计 五、常用时序单元电路VHDL设计
一、VHDL语句分类
按照功能分类:
赋值语句;
数据流控制语句(转向控制语句):
1. Case … when …
( 顺序 );
2.进程语句——语法说明
a) 进程标号:用于标识进程,可选。多个进程时,提高程序可读性;
a) 敏感信号列表:敏感信号发生变化(上升沿或者下降沿),进程被 激活,从而执行内部顺序语句。
注意:可以有多个敏感信号,用逗号隔开,任何一个变化都激活进 程,否则进程挂起。
c) 进程声明区: 用于定义进程内部的局部变量,信号不可在此声明。进程之间数据 交流通过全局信号。
2. If … else …
( 顺序 );
3. with … select when ( 并 );
4. When …else
( 并 );
模块化设计语句:
process ; component ; generate ; block ;for…loop ; 子程序调用语句
仿真语句: wait ;
… elsif falling_edge(clk) then … end if; end peocess;
entity mul is port (a,b,c,selx,sely : IN bit;
data_out: OUT BIT); end mul; ARCHITECTURE ex OF mul IS SIGNAL temp :BIT ; BEGIN p_a: PROCESS(a,b,selx)
BEGIN IF(SELX='0') THEN temp<=a; ELSE temp<=b; END IF; END PROCESS p_a; p_b: PROCESS(temp,c,sely) BEGIN IF(SELy='0') THEN data_out<=temp; ELSE temp<=c; END IF; END PROCESS p_b; end ex;
d) 顺序语句: 进程内部语句顺序执行。
e) 用处:适合描述时序电路。也可用于组合逻辑电路的设计。
例1:进程语句例程——带异步复位的D触发器
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cydff IS PORT ( d,clk,rst : IN STD_LOGIC ;
q<=d; END IF ; END PROCESS cydff_inst ; END ARCHITECTURE behave ;
语法说明:
时钟沿的VHDL描述方法总结(3种): 上升沿描述1: clk’event and clk=‘1’ ; 下降沿描述1: clk’event and clk=‘0’ ;
上升沿描述2: clk='1' AND clk'EVENT AND clk'LAST_VALUE='0‘ 下降沿描述2: clk=‘0' AND clk'EVENT AND clk'LAST_VALUE=‘1‘
上升沿描述3: rising_edge(clk) ; 下降沿描述3: falling_edge(clk);
WAIT语句
NULL语句 ASSERT语句
语句作用 信号或变量赋值 条件控制 条件控制 循环控制
描述延迟
空操作 仿真时报告错误
是否可综合 可综合 可综合 可综合
循环次数有限时可综 合 WAIT ON和WAIT UNTIL可综合 可综合 不可综合
基本的VHDL顺序语句
1、process(进程); 2、信号和变量; 3、IF语句; 4、C ASE语句; 5、CASE语句和IF语句的比较; 6、LOOP语句; 7、WAIT语句; 8、使用顺序代码设计组合逻辑电路;
基本的VHDL顺序语句
VHDL中的顺序语句用于描述进程或子程序的内部功能,且只能出现在 PROCESS、FUNCTION、PROCEDURE等语句中。
可以用来设计 时序电路、组合电路。
主要作用:时序流控制、程序控制、条件和迭代等,行为描述代码。
常用的顺序语句见下表。
顺序语句 顺序赋值语句 IF语句 CASE语句 LOOP语句
Clk’event ??
进程语句总结:
进程仅在敏感信号发生变化时才执行。 特点:进程内部,顺序语句;进程语句之间,并行。 不同进程内不可以对同一信号赋值,即不可多重赋值。 进程内信号和变量赋值效果不同。 一个进程内不能同时扑捉同一个时钟信号的上升沿或者下降沿。
例如下面语句是错误的: PROCESS(clk) BEGIN IF rising_edge(clk) then
q : OUT STD_LOGIC ) ; END ENTITY cydff ; ARCHITECTURE behave OF cydff IS BEGIN cydff_inst : PROCESS ( clk,rst )
BEGIN IF (rst=‘1’) then
q<=‘0’; elsIF ( clk='1' AND clk'LAST_VALUE='0' AND clk'EVENT ) THEN
5.3.1 进程(PROCESS)语句
语法说明: 1、Process为过程语句,定义如下:
[进程标号: ] Process [ 触发信号1,触发信号2,…… ] [ 定义区 ]
Begin 顺序语句 ……
End Process [ 进程标号] ;
注: 方括号内容可以省略;触发信号将决定该过程是否执行;一个结构体 当中可以有多个过程;多个进程语句之间是并行执行,进程内部属于 顺序执行语句。
按照语句的执行方式特点分为:
并行语句:
按动作来自百度文库点:语句执行顺序与书写顺序无关;
使用范围 :进程语句外部的语句都是并行的;
实际应用 :对应于各自独立运行的逻辑电路;
顺序语句:
按动作特点:照语句书写顺序执行;
使用范围 :进程、函数和过程内部出现;
实际应用 :时序电路、数据流控制电路;
相关文档
最新文档