64 Verilog hdl硬件描述语言 Chinapub. coM 下载 普( PERIOD/2) c1。ck=~c1ock 如果时延表达式的值为0,则称之为显式零时延。 显式零时延促发一个等待,等待所有其它在当前模拟时间被执行的事件执行完毕后,才 将其唤醒:模拟时间不前进。 如果时延表达式的值为x或z,其与零时延等效。如果时延表达式计算结果为负值,那么其 进制的补码值被作为时延,这一点在使用时务请注意 822事件控制 在事件控制中, al ways的过程语句基于事件执行。有两种类型的事件控制方式: 1)边沿触发事件控制 2)电平敏感事件控制 1.边沿触发事件控制 边沿触发事件控制如下 a event procedural statement 如下例所示 Curr state Next state 带有事件控制的进程或过程语句的执行,须等到指定事件发生。上例中,如果 Clock信号从低 电平变为高电平(正沿),就执行赋值语句:否则进程被挂起直到 Clock信号产生下一个正跳边沿。 下面是进一步的实例。 g(negedge Reset) Count =0 在第一条语句中,赋值语句只在 Reset上的负沿执行。第二条语句中,当Cla上有事件发生 时,Foo的值被赋给Zoo,即等待Cla上发生事件:当Cl的值发生变化时,Foo的值被赋给Zoo 也可使用如下形式 该语句促发一个等待,直到指定的事件发生。下面是确定时钟在周期的 initia语句中使用 的一个例子。 time Riseedge, On De lay ⊥n⊥tia1 begin /等待,直到在时钟上发生正边沿: e(posedge ClockA)i /等待,直到在时钟上发生负边沿: e(negedge Clock)i OnDelay stime -RiseEdgei q display ("The on-period of clock is st. Delay 事件之间也能够相或以表明“如果有任何事件发生”。下例将对此进行说明 e(posedge Clear or negedge Reset
#(P E R I O D / 2) Clock = ~C l o c k 如果时延表达式的值为0,则称之为显式零时延。 #0; //显式零时延。 显式零时延促发一个等待,等待所有其它在当前模拟时间被执行的事件执行完毕后,才 将其唤醒;模拟时间不前进。 如果时延表达式的值为 x或z,其与零时延等效。如果时延表达式计算结果为负值,那么其 二进制的补码值被作为时延,这一点在使用时务请注意。 8.2.2 事件控制 在事件控制中,a l w a y s的过程语句基于事件执行。有两种类型的事件控制方式: 1) 边沿触发事件控制 2) 电平敏感事件控制 1. 边沿触发事件控制 边沿触发事件控制如下: @ event procedural_statement 如下例所示: @ (p o s e d g e C l o c k) C u r r _ S t a t e = N e x t _ S t a t e; 带有事件控制的进程或过程语句的执行,须等到指定事件发生。上例中,如果C l o c k信号从低 电平变为高电平(正沿),就执行赋值语句;否则进程被挂起,直到C l o c k信号产生下一个正跳边沿。 下面是进一步的实例。 @ (n e g e d g e R e s e t) C o u n t = 0; @C l a Z o o = F o o; 在第一条语句中,赋值语句只在 R e s e t上的负沿执行。第二条语句中 ,当C l a上有事件发生 时,F o o的值被赋给Z o o,即等待C l a上发生事件;当C l a的值发生变化时,F o o的值被赋给Z o o。 也可使用如下形式: @ e v e n t ; 该语句促发一个等待,直到指定的事件发生。下面是确定时钟在周期的 i n i t i a l语句中使用 的一个例子。 t i m e RiseEdge, OnDelay; i n i t i a l b e g i n / /等待,直到在时钟上发生正边沿: @ (p o s e d g e C l o c k A) ; R i s e E d g e = $t i m e; / /等待,直到在时钟上发生负边沿: @ (n e g e d g e C l o c k A) ; O n D e l a y = $t i m e - R i s e E d g e; $d i s p l a y ("The on-period of clock is %t.", D e l a y) ; e n d 事件之间也能够相或以表明“如果有任何事件发生”。下例将对此进行说明。 @ (p o s e d g e C l e a r or negedge R e s e t) 64 Verilog HDL 硬件描述语言 下载
Chinaopub.com )行为建颇65 下载 e(ctrl A or Ctrl B) 注意关键字or并不意味着在1个表达式中的逻辑或 在 Verilog HDL中 posedge和 negedge是表示正沿和负沿的关键字。信号的负沿是下述转换 正沿是下述转换的一种 0->x 0->1 2.电平敏感事件控制 在电平敏感事件控制中,进程语句或进程中的过程语句一直延迟到条件变为真后才执行 电平敏感事件控制以如下形式给出: wait ( Condition) procedural statement 过程语句只有在条件为真时才执行,否则过程语句一直等待到条件为真。如果执行到该 语句时条件已经为真,那么过程语句立即执行。在上面的表示形式中,过程语句是可选的。 wait (Sum > 22) wait (Da thReady wait (Preset 在第一条语句中,只有当SWm的值大于22时,才对Sum清0。在第二条语句中,只有当 Dataread为真,即 DataReady值为1时,将Bas赋给Daa。最后一条语句表示延迟至 Preset变 为真(值为1)时,其后续语句方可继续执行 83语句块 语句块提供将两条或更多条语句组合成语法结构上相当于一条语句的机制。在 Verilog HDL中有两类语句块,即: 1)顺序语句块( begin.end):语句块中的语句按给定次序顺序执行。 2)并行语句块( fork.join):语句块中的语句并行执行。 语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。带标识符 的语句块可被引用:例如,语句块可使用禁止语句来禁止执行。此外,语句块标识符提供l 标识寄存器的一种方式。但是,要注意所有的寄存器均是静态的,即它们的值在整个模拟
Q = 0; @ (Ctrl_A o r C t r l _ B) D b u s = 'b z; 注意关键字o r并不意味着在1个表达式中的逻辑或。 在Verilog HDL中p o s e d g e和n e g e d g e是表示正沿和负沿的关键字。信号的负沿是下述转换 的一种: 1 -> x 1 -> z 1 -> 0 x -> 0 z -> 0 正沿是下述转换的一种: 0 -> x 0 -> z 0 -> 1 x -> 1 z -> 1 2. 电平敏感事件控制 在电平敏感事件控制中,进程语句或进程中的过程语句一直延迟到条件变为真后才执行。 电平敏感事件控制以如下形式给出: w a i t (C o n d i t i o n) p r o c e d u r a l _ s t a t e m e n t 过程语句只有在条件为真时才执行,否则过程语句一直等待到条件为真。如果执行到该 语句时条件已经为真,那么过程语句立即执行。在上面的表示形式中,过程语句是可选的。 例如: w a i t (S u m > 22) S u m = 0; w a i t (D a t a R e a d y) D a t a = B u s; w a i t (P r e s e t) ; 在第一条语句中,只有当 S u m的值大于 2 2时,才对 S u m清0。在第二条语句中,只有当 D a t a R e a d y为真,即D a t a R e a d y值为1时,将B u s赋给D a t a。最后一条语句表示延迟至 P re s e t变 为真(值为1)时,其后续语句方可继续执行。 8.3 语句块 语句块提供将两条或更多条语句组合成语法结构上相当于一条语句的机制。在 Ve r i l o g H D L中有两类语句块,即: 1) 顺序语句块(b e g i n . . . e n d):语句块中的语句按给定次序顺序执行。 2) 并行语句块(f o r k . . . j o i n):语句块中的语句并行执行。 语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。带标识符 的语句块可被引用;例如,语句块可使用禁止语句来禁止执行。此外,语句块标识符提供唯 一标识寄存器的一种方式。但是,要注意所有的寄存器均是静态的,即它们的值在整个模拟 第8章 行 为 建 模 65 下载
66wmD硬件描述语言 下载 运行中不变 831顺序语句块 顺序语句块中的语句按顺序方式执行。每条语句中的时延值与其前面的语句执行的模拟 时间相关。一旦顺序语句块执行结束,跟随顺序语句块过程的下一条语句继续执行。顺序语 句块的语法如下: begin [ block id(declarations) procedural sta 例如: //产生波形 begin #2 stream = l #3 Stream =1 #4 Stream =0 #2 Stream= 1: #5 Stream = 0: 假定顺序语句块在第10个时间单位开始执行。两个时间单位后第1条语句执行,即第12个 时间单位。此执行完成后,下1条语句在第17个时间单位执行(延迟5个时间单位)。然后下1条 语句在第20个时间单位执行,以此类推。该顺序语句块执行过程中产生的波形如图8-3所示 Stream 图8-3顺序语句块中的累积时延 下面是顺序过程的另一实例。 gin t Mask I Mat @(negedge Clk)i F=& Pat 在该例中,第1条语句首先执行,然后执行第2条语句。当然,第2条语句中的赋值只有在 Clk上出现负沿时才执行。下面是顺序过程的另一实例 EO BLK reg [0: 3; Sat Mask s Dat end 在这一实例中,顺序语句块带有标记 SEO BLK,并且有一个局部寄存器说明。在执行时, 首先执行第1条语句,然后执行第2条语句
运行中不变。 8.3.1 顺序语句块 顺序语句块中的语句按顺序方式执行。每条语句中的时延值与其前面的语句执行的模拟 时间相关。一旦顺序语句块执行结束,跟随顺序语句块过程的下一条语句继续执行。顺序语 句块的语法如下: b e g i n [ :b l o c k _ i d{d e c l a r a t i o n s} ] p r o c e d u r a l _ s t a t e m e n t ( s ) e n d 例如: / /产生波形: b e g i n #2 S t r e a m = 1; #5 S t r e a m = 0; #3 S t r e a m = 1; #4 S t r e a m = 0; #2 S t r e a m = 1; #5 S t r e a m = 0; e n d 假定顺序语句块在第1 0个时间单位开始执行。两个时间单位后第 1条语句执行,即第1 2个 时间单位。此执行完成后,下 1条语句在第1 7个时间单位执行 (延迟5个时间单位)。然后下1条 语句在第2 0个时间单位执行,以此类推。该顺序语句块执行过程中产生的波形如图 8 - 3所示。 图8-3 顺序语句块中的累积时延 下面是顺序过程的另一实例。 b e g i n P a t = M a s k | M a t; @ (n e g e d g e C l k) ; F F = & P a t e n d 在该例中,第1条语句首先执行,然后执行第 2条语句。当然,第2条语句中的赋值只有在 C l k上出现负沿时才执行。下面是顺序过程的另一实例。 b e g i n: S E Q _ B L K r e g[0:3] S a t ; S a t = Mask & Data; F F = ^S a t; e n d 在这一实例中,顺序语句块带有标记 S E Q _ B L K,并且有一个局部寄存器说明。在执行时, 首先执行第1条语句,然后执行第 2条语句。 66 Verilog HDL 硬件描述语言 下载