集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1054|回复: 0

VHDL并行语句

[复制链接]
zxopenhp_01 发表于 2015-10-21 16:27:55 | 显示全部楼层 |阅读模式
第六章        VHDL并行语句
并行语句包括六种:(见图6-1)

生成语句(Generate  Assignments)
元件例化语句(Component  Instantiations)
并行信号赋值语句(Concurrent Signal  Assignments)(包括 条件信号赋值语句
Selected Signal  Assignments)
块语句(Block statements)
进程语句(Process Statements)
并行过程调用语句(Concurrent  Procedure  Calls)

特点:
1)并行语句是VHDL语言的特点之一,有多种语句格式,
2)各种并行语句在结构体中同步执行,与书写次序无关。
3)在执行中,并行语句之间可以有信息往来,也可以互为独立、互不相关,异步运行。
4)并行语句的内部运行方式又可分为并行执行方式和顺序执行方式。
5)并行语句之间的信息交换是通过信号实现的。
6)各并行语句模块间的运行方式可以是同时运行、同步运行、异步运行等;
7)并行语句对应的硬件电路可以是组合逻辑方式、同步时序逻辑方式和异步时序逻辑方式。


并行语句在结构体中的使用格式

ARCHITECTURE  结构体名  OF  实体名  IS
        说明语句;
        BEGIN
                并行语句;
END  ARCHITECTURE  结构体名;

               
注意:并行语句和顺序语句不是相互独立的语句,它们往往相互包含、互为依从,更应注意的是,同一种语句,在不同的场合表现为不同的方式。

§6.1   进程语句
特点:
1)一个进程是由各种顺序语句构成的。
2)在一个结构体中,如果有多个进程,各个进程之间是并行执行的(一个进程可等效地看成是一种并行语句。它们之间可以依靠信号来传递信息,也可以相互独立工作)。
3)进程是靠敏感信号启动的,使用中通常把各个(全部)输入信号列为该进程的敏感信号。
4)一个进程在综合后可以与一个组合逻辑电路对应,也可以与一个时序逻辑电路对应。一般说来,由IF语句构成的进程与组合逻辑电路对应,而出现WAIT时将会与时序逻辑电路对应。

[例6-1] 由进程、组合逻辑电路构成的带有清零的十进制加一电路。
对应图6.2:AND4与1001对应。
OR2与十进制、清零对应
ADDER是1BIT加4BIT加法器
MUX42是受S0控制的多路开关。
电路没有记忆功能(当输入变化时输出立刻变化)。

[例6-2] 增加WAIT 语句,使例6-1对应的电路具有记忆功能。
程序
图6.3 增加了四个D触发器。
其输出反馈回来作为加法器的输入,可看出,这是一个十进制加法计数器。

[例6-3]含有内部清零的4状态有限状态机。

[例6-4] 3        BIT的三态缓冲电路。硬件结构如图6-5。


§6.2   块语句
特点:
1)块语句本身是并行语句,块内的语句也要求是并行语句(包括进程)。
2)块的设置主要是使程序层次化、清晰化。
3)块中定义的数据类型、数据对象(信号、变量和常量)、子程序等都是局部的。在块嵌套时,外层定义的内容可被内层接受,反之则不然。如果某些块中出现同名数据对象,则遵循相邻优先的原则。
[例6-5] 三重嵌套块程序,对应的电路图见图6-6。

§6.3   并行信号赋值语句
    并行信号赋值语句可以理解为一条进程语句的缩写,该进程的敏感信号就是这条并行语句中的全部输入信号(IN)和输入输出信号(INOUT)。因此,只要并行语句中的任何输入信号或输入输出信号发生变化,并行信号赋值语句就立即运行。

一、简单信号赋值语句
格式:     赋值目标 <= 表达式 ;
注意:赋值目标必须是信号,<=两边的数据类型必须一致。
[例6-6] 下面程序中的五条信号赋值语句是并行发生的。仿真过程如下:初试时刻,运行一次结构体中的五条并行语句,并将结果顺延下去。只有当一个或多个输入、输入输出信号发生变化时,对应的并行语句才再被执行一次,以后又一直维持这种状态,直到下次对应的信号再发生改变时为止。
e
f
h

二、条件信号赋值语句
格式:   赋值目标 <=  表达式  WHEN  赋值条件  ELSE     --第一句
                                          表达式  WHEN  赋值条件  ELSE     --第二句
                                                ……
                                          表达式;                            --最后一句

说明:1)执行该语句的过程是,首先判断第一句中的赋值条件是否满足,若满足时就把对应的表达式的值传递个赋值目标,并且结束该赋值语句(整个语句);否则,判断第二句中的赋值条件,……,如果所有的赋值条件都不满足,就把最后一句表达式的值传递给赋值目标。
2)语句的执行具有优先次序,第一条优先级最高;
3)赋值目标与表达式的值数据类型应相同;
4)赋值条件是布尔量,为真时表示条件满足。
5)各个赋值条件可以互相重叠,甚至完全相同。
[例6-7] 见书

三、选择信号赋值语句
格式:   WITH  选择表达式  SELECT                                --第一句
                                 赋值目标信号 <= 表达式  WHEN  选择值,           --第二句
                                                 表达式  WHEN  选择值,           --第三句
                     ……
                                                 表达式  WHEN  选择值(OTHER); --最后一句

说明:1)"敏感量"是选择表达式,  当它发生变化时,该选择信号赋值语句被运行一次;
      2)执行该语句的过程是, 首先判断第二句中的选择值是否与选择表达式的值一致,一致时就把对应的表达式的值传递个赋值目标信号,并且结束该赋值语句(整个语句);否则,判断第三句中的选择值是否与选择表达式的值是否一致,……,直到最后一句为止;
2)各个句子中的选择值是互斥的,它们的组合必须覆盖选择表达式的范围;不存在优先次序;
3)赋值目标信号与表达式的值数据类型应相同;
4)选择表达式的值与选择值数据类型应相同;
5)该语句与CASE语句类似,但该语句不能在进程中使用。

[例6-8] 见书,注意并置操作&、OTHERS、“,与 ;”
[例6-9]  见书

§6.4   并行过程调用语句

把过程放在一个并行语句结构中,此时的调用就是并行过程调用(当把过程放在进程中时,调用过程是顺序的)。
[例6-10] 按书讲

PROCEDURE  adder(……)……   --定义过程
……
        adder(a1,b1,sum1);  --并行过程调用,只要敏感量a1、b1发生变化就会调用
        adder(a2,b2,sum2);  --并行过程调用,只要敏感量a2、b2发生变化就会调用
        ……
PROCESS(……)
BEGIN
        IF  ena=1 THEN        
adder(a3,b3,sum3);--顺序过程调用
ELSE
adder(a4,b4,sum4);--顺序过程调用
        ENDIF;
END  PROCESS;

[例6-11]定义一个过程,在一个位矢(例如一个字节)中,检测是否含有“1”,若只含有一个“1”,则输出        ERROR为FALSE,否则输出ERROR为TRUE;注意程序中的RETURN起“结束过程”的作用(不是对LOOP而言的)。
[例6-12]利用上面的过程对不同宽度的位矢进行检测。

§6.5   元件例化语句
作用:将设计好的实体定义为一个元件,并把该元件的端口与当前的设计实体连接起来。
格式:  COMPONENT  元件名  IS
          GENERIC(类属表);            
                          PORT(端口名表);
                END  COMPONENT  元件名;

        例化名:元件名  PORT MAP(
                        [端口名=> ] 连接端口名, ……);            

说明:1)元件定义语句,对设计实体进行封装,规定其对外的接口界面。类属表列出了端口的数据类型和参数,端口名表列出了对外通信的端口信号名。
2)元件例化语句,例化名指出所用元件的设计标号,元件名指出所要用的器件型号,PORT MAP 是端口映射的意思,端口名是所用元件的端口名字,连接端口名是当前系统与准备接入的元件对应端口相连的通信端口。
3)连接方式分为名字关联和位置关联两种,前者如格式中的情形;后者只需写出连接端口名即可,但要注意位置上的对应关系。(另外还有二者混合关联方式)

[例6-13] 图6-9,定义与门,实现连接,完成z1=a1&#8226;b1 + c1&#8226;d1 功能。





§6.6   生成语句             July 7
作用:复制一组完全相同的并行元件或设计单元电路结构。
两种格式:
[标号:] FOR 循环变量 IN  取值范围 GENERATE
                        说明语句;
                        BEGIN
                        并行语句;
                END  GENERATE  [标号]

[标号:] IF 条件GENERATE
                        说明语句;
                        BEGIN
                        并行语句;
                END  GENERATE  [标号]

说明:
(1)生成方式—— FOR 形式可以复制多个结构,        IF形式一次最多只能复制一个结构。
(2)说明部分——对数据类型、子程序、数据对象 等作局部说明。
(3)并行语句:被复制的基本单元,可以是元件语句、进程语句、块语句、并行过程调用语句、并行信号赋值语句,甚至生成语句(生成语句可以嵌套)。
(4)标号:可有可无,但在生成语句嵌套时有标号更易于阅读。
(5)FOR结构,随循环变量递增(或递减)顺序取值,但最后生成的设计结构是完全并行的(意味着生成语句中的可执行部分由并行语句组成)。
(6)FOR结构,取值范围有两种形式,
                表达式  TO  表达式
                表达式  DOWNTO  表达式

[例6-14] 生成语句应用举例
注意 i 的取值是0&#61664; 7

[例6-15] 设计74373器件  
器件说明—— 8D锁存器,当G=1时,D数据进入器件,并被锁存
                          G=0时,D数据不能进入器件,锁存值不变,
                        当OEN=0时,被锁存的信号由Q端输出,
                                                        OEN=1时,Q端为高阻态。
器件符号见图6-11、内部结构见图6-12(锁存器、三态门等)
程序见书  ARCHITECTURE one 用生成语句描述
                 ARCHITECTURE two 用进程语句描述
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-5 10:06 , Processed in 0.057301 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表