3.4.2   并行(Concurrent)描述语句

3 顺序描述语句的并行版本

并行信号赋值语句有三种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。

这三种信号赋值语句的共同点是:赋值目标必须都是信号,所有赋值语句与其他并行语句一样,在结构体内的执行是同时发生的,与它们的书写顺序和是否在块语句中没有关系。每一信号赋值语句都相当于一条缩写的进程语句,而这条语句的所有输入(或读入)信号都被隐性地列入此过程地敏感信号表中。因此,任何信号的变化都将启动相关并行语句的赋值操作,而这种启动完全是独立于其他语句的,它们都可以直接出现在结构体中。

(1) 简单并行信号赋值语句

     即:信号 <= 表达式

例:以下两种描述等价

一个简单并行信号赋值语句是一个进程的缩写。

等效:

 

不等效:

(2)条件信号赋值语句

格式:   

     目的信号量 <= 表达式1  when  条件1   else

                          表达式2  when  条件2   else

                          表达式3  when  条件3   else

                                            ┆

                          表达式n;

  例:用条件信号赋值语句描述四选一电路

        entity mux4 is

              port(i0, i1, i2, i3, a, b : in std_logic;

                                              q : out std_logic);

         end  mux4;

         architecture  rtl  of  mux4  is

               signal  sel : std_logic_vector (1 downto 0);

         begin

               sel<=b & a;

               q<=i0  when  sel = “00”  else

                      i1  when  sel = “01”  else

                      i2  when  sel = “10”  else

                      i3  when  sel = “11”;

          end  rtl;

 

 

条件信号赋值语句与进程中的多选择 if 语句等价:

 

(3)选择信号赋值语句

    选择信号赋值语句与进程中的 case 语句等价。

    格式:

      with   表达式   select

          目的信号量 <= 表达式1  when  条件1,

                        表达式2  when  条件2,

                           ┆

                        表达式n  when  条件n;

    注:(1)不能有重叠的条件分支。

       (2)最后条件可为 others。否则,其它条件必须能包含表达式的所有可能值。

     例:用选择信号赋值语句描述四选一电路

        entity mux4 is

              port(i0, i1, i2, i3, a, b : in std_logic;

                                              q : out std_logic);

         end  mux4;

         architecture  rtl  of  mux4  is

               signal  sel : std_logic_vector (1 downto 0);

         begin

               sel<=b & a;

               with  sel  select

                    q<=i0  when  sel = “00” ,

                           i1  when  sel = “01” ,

                           i2  when  sel = “10” ,

                           i3  when  sel = “11” ,

                           ‘X’  when  others;

          end  rtl;

 

选择信号赋值语句与进程中的 case 语句等价:

 

             

上一页  下一页  返回