DC2857A 串行语句块
发布时间:2019/10/16 21:17:21 访问次数:813
DC2857A在Verilog中,将逻辑电路中的敏感事件分为两种类型:电平敏感事件和边沿触发事件。在组合电路中,输入信号的变化直接会导致输出信号的变化;
时序电路中的锁存器输出在使能信号为高电平时亦随输人电平而变化,波形如
图5.3.1(a)所示。这种对输入信号电平变化的响应称为电平敏感事件。
例如,例4.5.9中的语句
always@ (se1 0r a or b)
说明sel、a或b中任意一个信号的电平发生变化(即有电平敏感事件发生),后面的过程赋值语句将会执行一次。
而触发器状态的变化仅仅发生在时钟脉冲的上升沿或下降沿,如图5,3∶1(b)、(c)所示波形。Ⅴerilog中分别用关键词posedge(上升沿)和negedge(下降沿)进行说明,这就是边沿敏感事件。例如,语句
always@(posedge CP or negedge CR)
说明在时钟信号CP的上升沿到来或在清零信号CR跳变为低电平时,后面的过程语句就会执行。
在always语句内部的过程赋值语句有两种类型:阻塞型赋值语句①和非阻塞型赋值语句①。所使用的赋值符分别为“=”和“<=”,通常称“=”为阻塞赋值符,“(:”为非阻塞赋值符。在串行语句块中,阻塞型赋值语句按照它们在块中排列的顺序依次执行,即前一条语句没有完成赋值之前,后面的语句不能被执行,换言之,前面的语句阻塞了后面语句的执行,这与在一个公路收费站,汽车必须排成队顺序前进缴费有些类似t例如,下面两条阻塞型赋值语句的执行过程是:首先执行第一条语句,将A的值赋给B,接着执行第二条语句,将B的值(等于A值)加1,并赋给C,执行完后,C的值等于A+1。
begin
BrA;
CrB+1;
elld
为了改变这种阻塞的状况今Verilog提供了由“<=”符号构成的非阻塞型赋值语句。非阻塞型语句的执行过程是:首先计算语句块内部所有右边表达式的值,然后完成对左边寄存器变量的赋值操作,这些操作是并行执行的。例如,下面两条非阻塞型赋值语句的执行过程是;首先计算所有表达式右边的值并分别存储在暂存器中,即A的值被保存在一个暂存器中,而B+1的值被保存在另一个暂存器中,在begin和end之间所有非阻塞型赋值语句的右边表达式都被同时计算并存储后,对左边寄存器变量的赋值操作才会进行。这样,C的值等于B的原始值(而不是A的赋值)加1。
begin
B<=A;
C(=B+1;
end
综上所述夕阻塞型赋值语句和非阻塞型赋值语句的主要区别是完成赋值操作的时间不同,前者的赋值操作是立即执行的,即执行后一句时,前一句的赋值已经完成;而后者的赋值操作要到顺序块内部的多条非阻塞型赋值语句运算结束时,才同时并行完成赋值操作,一旦赋值操作完成,语句块的执行也就结束了c.需要注意的是,在可综合的电路设计中9一个语句块的内部只允许出现唯一一种类型的赋值语句,而不允许阻塞型赋值语句和非阻塞型赋值语句二者同时出现。在时序电路的设计中)建议采用非阻塞型赋值语句。
系Blocking Assignment statement的译称。
DC2857A在Verilog中,将逻辑电路中的敏感事件分为两种类型:电平敏感事件和边沿触发事件。在组合电路中,输入信号的变化直接会导致输出信号的变化;
时序电路中的锁存器输出在使能信号为高电平时亦随输人电平而变化,波形如
图5.3.1(a)所示。这种对输入信号电平变化的响应称为电平敏感事件。
例如,例4.5.9中的语句
always@ (se1 0r a or b)
说明sel、a或b中任意一个信号的电平发生变化(即有电平敏感事件发生),后面的过程赋值语句将会执行一次。
而触发器状态的变化仅仅发生在时钟脉冲的上升沿或下降沿,如图5,3∶1(b)、(c)所示波形。Ⅴerilog中分别用关键词posedge(上升沿)和negedge(下降沿)进行说明,这就是边沿敏感事件。例如,语句
always@(posedge CP or negedge CR)
说明在时钟信号CP的上升沿到来或在清零信号CR跳变为低电平时,后面的过程语句就会执行。
在always语句内部的过程赋值语句有两种类型:阻塞型赋值语句①和非阻塞型赋值语句①。所使用的赋值符分别为“=”和“<=”,通常称“=”为阻塞赋值符,“(:”为非阻塞赋值符。在串行语句块中,阻塞型赋值语句按照它们在块中排列的顺序依次执行,即前一条语句没有完成赋值之前,后面的语句不能被执行,换言之,前面的语句阻塞了后面语句的执行,这与在一个公路收费站,汽车必须排成队顺序前进缴费有些类似t例如,下面两条阻塞型赋值语句的执行过程是:首先执行第一条语句,将A的值赋给B,接着执行第二条语句,将B的值(等于A值)加1,并赋给C,执行完后,C的值等于A+1。
begin
BrA;
CrB+1;
elld
为了改变这种阻塞的状况今Verilog提供了由“<=”符号构成的非阻塞型赋值语句。非阻塞型语句的执行过程是:首先计算语句块内部所有右边表达式的值,然后完成对左边寄存器变量的赋值操作,这些操作是并行执行的。例如,下面两条非阻塞型赋值语句的执行过程是;首先计算所有表达式右边的值并分别存储在暂存器中,即A的值被保存在一个暂存器中,而B+1的值被保存在另一个暂存器中,在begin和end之间所有非阻塞型赋值语句的右边表达式都被同时计算并存储后,对左边寄存器变量的赋值操作才会进行。这样,C的值等于B的原始值(而不是A的赋值)加1。
begin
B<=A;
C(=B+1;
end
综上所述夕阻塞型赋值语句和非阻塞型赋值语句的主要区别是完成赋值操作的时间不同,前者的赋值操作是立即执行的,即执行后一句时,前一句的赋值已经完成;而后者的赋值操作要到顺序块内部的多条非阻塞型赋值语句运算结束时,才同时并行完成赋值操作,一旦赋值操作完成,语句块的执行也就结束了c.需要注意的是,在可综合的电路设计中9一个语句块的内部只允许出现唯一一种类型的赋值语句,而不允许阻塞型赋值语句和非阻塞型赋值语句二者同时出现。在时序电路的设计中)建议采用非阻塞型赋值语句。
系Blocking Assignment statement的译称。