用户操作
[即时聊天] [发私信] [加为好友]
randyID:skyyunmi
81023次访问,排名1213好友2人,关注者3
skyyunmi的文章
原创 188 篇
翻译 2 篇
转载 86 篇
评论 31 篇
randy的公告
welcome my friends^_^
   首页          留言
Locations of visitors to this page
最近评论
yang :希望我们生一个聪明的宝宝。
Elaine_Yang:原来你不久前才算是结婚,新婚快乐!
fr:谢谢
yang:21;30~22:00日语?游戏?
Elaine_Yang:杨玲萍,lingling200_98@hotmail.com
文章分类
收藏
    相册
    Inter
    yang
    风景
    婚纱照
    江ノ島・鎌倉
    美女
    日本闲逛见闻
    温泉
    樱花
    自暴
    good blog
    CODE PROJECT
    STL China
    何勃亮个人空间
    unix-ubuntu
    LinuxFocus 在线杂志
    Linux时代
    ubuntu
    Ubuntu中文 论坛
    Ubuntu中文星球
    常去网址
    中国经济网--财经书架在线阅读
    思维的乐趣
    趣味电子屋
    工具
    google
    地球人
    爱心词典
    百度
    糍粑
    工作用
    IC datasheet
    理财
    sina stock
    中国基金网
    朋友空间
    小水--江洋
    我的空间
    我的心情吧(RSS)
    我的收集吧(RSS)
    我的照片吧(RSS)
    我的网络硬盘
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 第四章 VHDL的主要描述语句收藏

    新一篇: 第六章 时序逻辑电路设计 | 旧一篇: 第三章 VHDL的描述风格

    第四章 VHDL的主要描述语句

    4.1   VHDL顺序语句

    4.2   VHDL并行语句

    VHDL语言进行设计时,按描述语句的执行顺序进行分类,可将VHDL语句分为顺序执行语句(Sequential)和并行执行语句(Parallel)。

    4.1     VHDL顺序语句

        顺序语句是指完全按照程序中书写的顺序执行各语句,并且在结构层次中前面的语句执行结果会直接影响后面各语句的执行结果。顺序描述语句只能出现在进程或子程序中,用来定义进程或子程序的算法。顺序语句可以用来进行算术运算、逻辑运算、信号和变量的赋值、子程序调用等,还可以进行条件控制和迭代。

    注意,这里的顺序是从仿真软件的运行和顺应VHDL语法的编程逻辑思路而言的,其相应的硬件逻辑工作方式未必如此。应该注意区分VHDL语言的软件行为与描述综合后的硬件行为的差异。

    VHDL顺序语句主要包括:

    ·变量赋值语句(Variable Evaluate

    ·信号赋值语句(Signal Evaluate

    ·WAIT语句

    ·IF 语句

    ·CASE 语句

    ·LOOP 语句

    ·NEXT 语句

    ·EXIT 语句

    ·RETURN 语句

    ·NULL 语句

    ·过程调用语句(Procedure Call

    ·断言语句(Assert

    ·REPORT 语句

    4.1.1 变量赋值语句

    变量赋值语句语法格式为:

          变量赋值目标 := 赋值表达式

    :

    VARIABLE sBIT  := ‘0’

    PROCESSs

    VARIABLE countINTEGER  := ‘0’                --变量说明

    BEGIN

         count := s+1                           --变量赋值

     END PROCESS;

    4.1.2   信号赋值语句

    VHDL语言中,用符号<=为信号赋值。

    信号赋值语句的规范书写格式如下:

    目的信号量 <= [TRANSPORT][INERTIAL]信号变量表达式;

    其中[TRANSPORT]表示传输延迟[INERTIAL]表示惯性延迟。要求“<=”两边的信号变量类型和位长度应该一致。

    :   s <=TRANSPORT  t  AFTER 10ns;      --传输延迟

          d <= INERTIAL 2 AFTER 3ns, 1 AFTER 8ns;       --惯性延迟

    例:s <= a NORb AND c); --信号赋值由敏感信号引起

    3个敏感量abc中任何一个发生变化,该语句都将被执行。

    4.1.3  WAIT语句

       WAIT语句在进程中起到与敏感信号一样重要的作用,敏感信号触发进程的执行,WAIT语句同步进程的执行,同步条件由WAIT语句指明。进程在仿真运行中处于执行或挂起两种状态之一。当进程执行到等待语句时,就将被挂起并设置好再次执行的条件。WAIT语句可以设置4种不同的条件:无限等待、时间到、条件满足以及敏感信号量变化。这几类WAIT语句可以混合使用。现分别介绍如下:

    1WAIT         --无限等待语句

    这种形式的WAIT语句在关键字“WAIT”后面不带任何信息,是无限等待的情况。

    2WAIT ON 信号表       --敏感信号等待语句

            这种形式的WAIT语句使进程暂停,直到敏感信号表中某个信号值发生变化。WAIT ON语句后面跟着的信号表,在敏感信号表中列出等待语句的敏感信号。当进程处于等待状态时,其中敏感信号发生任何变化都将结束挂起,再次启动进程。

    [A]

    PROCESS

    BEGIN

    y <= a AND b

    WAIT ON ab--a,b为敏感信号,由WAIT列出

    END PROCESS

    [B]

    PROCESSab--a,b为敏感信号,由PROCESS列出

    BEGIN

    y <= a AND b

    END PROCESS

    在例[A]中执行所有语句后,进程将在WAIT语句处被挂起,直到ab中任何一个信号发生变化,进程才重新开始。例[A]与例[B]是等价的。

    需要注意的是,在使用WAIT ON语句的进程中,敏感信号量应写在进程中的WAIT ON语句后面;而在不使用WAIT ON语句的进程中,敏感信号量应在开头的关键词PROCESS后面的敏感信号表中列出。VHDL规定,已列出敏感信号表的进程不能使用任何形式的WAIT语句

    3WAIT UNTIL 条件      --条件等待语句

    这种形式的WAIT语句使进程暂停,直到预期的条件为真。WAIT UNTIL后面跟的是布尔表达式在布尔表达式中隐式地建立一个敏感信号量表,当表中任何一个信号量发生变化时,就立即对表达式进行一次测评。如果其结果使表达式返回一个值,则进程脱离挂起状态,继续执行下面的语句。即WAIT UNTIL语句需满足以下条件:

    ·在条件表达式中所含的信号发生了变化;

    ·此信号改变后,且满足WAIT UNTIL语句中表达式的条件。

    这两个条件缺一不可,且必须按照上述顺序来完成。

    WAIT UNTIL语句有以下三种表达方式:

              WAIT UNTIL 信号 = VALUE

              WAIT UNTIL 信号’EVENT AND信号 = VALUE

              WAIT UNTIL 信号’STABLE AND信号 = VALUE

    例如:

         WAIT UNTIL clock = “1”

         WAIT UNTIL rising_edgeclk);

         WAIT UNTIL clk =‘1’AND clk’ EVENT

         WAIT UNTIL NOT clk’ STABLE AND clk= “1”

    一般的,在一个进程中使用了WAIT语句后,综合器会综合产生时序逻辑电路时序逻辑电路的运行依赖WAIT UNTIL表达式的条件,同时还具有数据存储的功能。

    4WAIT  FOR  时间表达式      --超时等待语句

    例如:WAIT FOR 40 ns

    在该语句中,时间表达式为常数40ns,当进程执行到该语句时,将等待40ns,经过40ns之后,进程执行WAIT FOR的后继语句。

    例如:WAIT FORa*b+c))

    在此语句中,(a*b+c))为时间表达式,WAIT FOR语句在执行时,首先计算表达式的值,然后将计算结果返回作为该语句的等待时间。

    4.1.4  IF语句

           VHDL语言中,IF语句的作用是根据指定的条件来确定语句的执行顺序。IF语句可用于选择器、比较器、编码器、译码器、状态机等的设计,是VHDL语言中最常用的语句之一。IF语句按其书写格式可分为以下3种。

    1.门闩控制语句

    这类语句书写格式为:

          IF 条件  THEN

          顺序语句

           END IF

    当程序执行到这种门闩控制型IF语句时,首先判断语句中所指定的条件是否成立。如果条件成立,则程序继续执行IF语句中所含的顺序处理语句;如果条件不成立,程序将跳过IF语句所包含的顺序处理语句,而向下执行IF的后继语句。

    : 利用IF语句引入D触发器

    LIBRARY IEEE;

    USE IEEE. STD_LOGIC_1164.ALL;

    ENTITY dff  IS

        PORTclkdIN STD_LOGIC

                    qOUT 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;

    2.二选一控制语句

    这种语句的书写格式为:

         TF 条件  THEN

             顺序语句

         ELSE

             顺序语句

         END IF

    IF条件成立时,程序执行THENELSE之间的顺序语句部分;当IF语句的条件得不到满足时,程序执行ELSEEND IF之间的顺序处理语句。即依据IF所指定的条件是否满足,程序可以进行两条不同的执行路径。

    :二选一电路结构体的描述

    ARCHITECTURE rtl OF mux2 IS

    BEGIN

            PROCESS (abs)

            BEGIN

           IF (s =’1’) THEN

              c <= a;

           ELSE

              c <= b;