《VHDL 数字电路设计教程》电工版/第5章:并发代码

5.1    并发执行和顺序执行

    ①组合逻辑电路:当前输出的值仅取决于当前的输入;

       时序逻辑电路:当前输入不仅取决于当前的输入,还与以前的输入有关。时序逻辑电路中通常存在寄存器这类元件,当前的输出结果是由当前输入和电路内部所有寄存器的状态共同决定的。

        

    ②VHDL代码是并发执行的

    注意,在PROCESSFUNCTIONPROCEDURE这些模块内部的代码是顺序执行的,但是它们作为一个整体,与其他模块之间又是并发执行的。

    并发代码中可以使用以下各项:

    -运算操作符

    -WHEN语句(WHEN/ELSE或者WITH/SELECT/WHEN

    -GENERATE语句

    -BLOCK语句

5.2    并发代码各项

    ①运算操作符

    

    ②WHEN语句(适用于枚举类型

    注意:WHEN语句适用于枚举类型,且只允许执行一个赋值操作。

    两种语法结构:

    WHEN/ELSE

assignment1 WHEN condition1 ELSE    --无分号间隔
assignment2 WHEN condition2 ELSE
...
assignmentN-1 WHEN conditionN-1 ELSE
assignmentN;

    WITH/SELECT/WHEN

WITH identifier SELECT
assignment1 WHEN value1,    --逗号分隔
assignment2 WHEN value2,
...
UNAFFECTED WHEN valueM,
...
assignmentN WHEN OTHERS;

    "UNAFFECTED"表示空(不进行任何操作),原来的值保值不变;“OTHERS”表示其余情况下。

    例

--------------with WHEN/ELSE--------------
output <= "000" WHEN input = '0' ELSE
          "001" WHEN input = '1' ELSE
          "010";                       --其余情况下output为“010”
----------with WITH/SELECT/WHEN-----------
WITH input SELECT
   output <= "000" WHEN '0',
             "001" WHEN '1',
             UNAFFECTED WHEN OTHERS;  --input取其他值时output的值保持不变

    另外,WHEN value语句的描述方式包括以下3种:

WHEN value              --针对单个值进行判断
WHEN value1|value2|...  --针对多个值进行判断
WHEN value1 to value2   --针对取值范围进行判断

GENERATE 语句(枚举型的循环操作)

    具体语法结构有两种:

FOR/GENERATE:

label: FOR identifier IN range GENERATE
   (concurrent assignments)                   --并发描述语句
END GENERATE;

    注意,该语句用于循环执行某项操作,故identifier的range范围的上界和下界都必须是静态的。

IF/GENERATE:

label: IF condition GENERATE
   (concurrent assignments)      --不允许使用ELSE
END GENERATE;

④块语句(BLOCK

    简单块(simple BLOCK):仅仅是一种对原有代码进行区域分割的方式,通过将一系列的并发描述语句放在一个simple BLOCLK中,目的是为了增强整个代码的可读性和可维护型。其语法结构如下:

label: BLOCK
   [declarative part]       --声明部分
BEGIN
   (concurrent statement)   --并行陈述
END BLOCK label;

    卫式块(guarded BLOCK):相比于simple BLOCK,这种特殊的BLOCK多了一个卫式表达式。只有当卫式表达式为真时,在guarded BLOCK中前面有关键词GUARDED的语句才能执行。语法结构如下:

label: BLOCK(卫式表达式)
   [声明部分]
BEGIN
   (卫式语句和其他并发描述语句)  --含有关键字GUARDED
END BLOCK label;

    例

b1: BLOCK(clk = '1')
BEGIN
   q <= GUARDED d;  --关键字GUARDED
END BLOCK b1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值