数字系统设计课件

上传人:我*** 文档编号:141792700 上传时间:2020-08-12 格式:PPT 页数:54 大小:700KB
返回 下载 相关 举报
数字系统设计课件_第1页
第1页 / 共54页
数字系统设计课件_第2页
第2页 / 共54页
数字系统设计课件_第3页
第3页 / 共54页
数字系统设计课件_第4页
第4页 / 共54页
数字系统设计课件_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《数字系统设计课件》由会员分享,可在线阅读,更多相关《数字系统设计课件(54页珍藏版)》请在金锄头文库上搜索。

1、两类语句在模块中的使用,一个模块可以包含多条always语句和多条initial语句。 每条语句启动一个单独的控制流。 各语句在0时刻开始并行执行。,module TestXorBehavior; reg Sa, Sb, Zeus; initial begin Sa = 0; Sb = 0; #5 Sb = 1; #5 Sa = 1; #5 Sb = 0; end,always (Sa or Sb ) Zeus = Sa Sb; always (Zeus) $display ( At time %t, Sa = %d, Sb = %d, Zeus = %b, $time, Sa, Sb, Ze

2、us) ; endmodule,At time 5, Sa = 0, Sb = 1, Zeus = 1 At time 10, Sa = 1, Sb = 1, Zeus = 0 At time 15, Sa = 1, Sb = 0, Zeus = 1,always/initial 块小结,时序控制,时序控制与过程语句关联。有2种时序控制形式: 1) 时延控制 2) 事件控制,时延控制,#delay procedural_statement #2 Tx = Rx - 5 ; initial begin #3 Wave = b0111; #6 Wave = b1100; #7 Wave = b00

3、00; end end,时延控制,#delay; always begin # 3; RefClk = 0; # 5; RefClk = 1; end,时延可以是任意表达式,# Strobe Compare = TXask ; #(PERIOD/2) Clock = Clock; 如果时延表达式的值为0,则称之为显式零时延。 显式零时延促发一个等待,等待所有其它在当前模拟时间被执行的事件执行完毕后,才将其唤醒;模拟时间不前进。 如果时延表达式的值为x或z,其与零时延等效。如果时延表达式计算结果为负值,那么其二进制的补码值被作为时延。,事件控制,在事件控制中,always的过程语句基于事件执行。

4、有两种类型的事件控制方式: 1) 边沿触发事件控制 2) 电平敏感事件控制,敏感表,always (sensitivity_list) begin - Statement #1 - . - Statement #N end 过程块在敏感表中任何信号发生变化后执行,上升沿触发事件, event procedural_statement (posedge Clock) Curr_State = Next_State; 上升沿 0 - x 0 - z 0 - 1 x - 1 z - 1,下降延触发事件, (negedge Reset) Count = 0; 下降沿 1 - x 1 - z 1 - 0

5、 x - 0 z - 0,time RiseEdge, OnDelay; initial begin / /等待,直到在时钟上发生正边沿: (posedge ClockA) ; RiseEdge = $tim e; / /等待,直到在时钟上发生负边沿: (negedge ClockA) ; OnDelay = $time - RiseEdge; $display (The on-period of clock is %t., Delay) ; end,多事件触发, (posedge Clear or negedge Reset) Q = 0; (Ctrl_A o r Ctrl_B) Dbus

6、= bz;,电平敏感事件控制,wait (Condition) procedural_statement 过程语句只有在条件为真时才执行。 如果执行到该语句时条件已经为真,那么过程语句立即执行。 在上面的表示形式中,过程语句是可选的。 不可综合,wait (Sum 22) Sum = 0; wait (DataReady) Data = Bus; wait (Preset) ;,两种类型过程,组合过程 敏感表所有输入用于组合逻辑 always (a or b or sel),时序过程 对时钟或控制信号敏感 always (posedge clk or negedge clr),语句块,语句块提

7、供将两条或更多条语句组合成语法结构上相当于一条语句的机制。 顺序语句块(begin . end):语句块中的语句按给定次序顺序执行。 并行语句块(fork . join):语句块中的语句并行执行。,语句块的标识符,语句块的标识符是可选的,如果有标识符,寄存器变量可在语句块内部声明。 带标识符的语句块可被引用;例如,语句块可使用禁止语句来禁止执行。 语句块标识符是提供唯一标识寄存器的一种方式。 所有的寄存器均是静态的,即它们的值在整个模拟运行中不变。,顺序语句块,begin :block_iddeclarations procedural_statement ( s ) end / /产生波形:

8、 begin #2 Stream = 1; #5 Stream = 0; #3 Stream = 1; #4 Stream = 0; #2 Stream = 1; #5 Stream = 0; end,begin Pat = Mask | Mat; (negedge Clk) ; /只有在C l k上出现负沿时才执行 FF = end,begin: SEQ_BLK /带有标记 reg0:3 Sat ; /局部寄存器说明 Sat = Mask end,并行语句块,fork :block_iddeclarations procedural_statement(s) ; join 并行语句块带有定界

9、符fork和join。 并行语句块中的各语句并行执行。 并行语句块内的各条语句指定的时延值都与语句块开始执行的时间相关。 当并行语句块中最后的动作执行完成时(最后的动作并不一定是最后的语句),顺序语句块的语句继续执行。 并行语句块内的所有语句必须在控制转出语句块前完成执行。,#10; fork #2 Stream = 1; #7 Stream = 0; #10 Stream = 1; #14 Stream = 0; #16 Stream = 1; #21 Stream = 0; join,顺序语句块和并行语句块混合,always begin:SEQ_A #4 Dry = 5; / S1 for

10、k: PAR_A / S 2 #6 Cun = 7; /P1 begin: SEQ_B / P 2 EXE = Box; /S6 #5 Jap = Exe; /S7 end #2 Dop = 3; /P3 #4 Gos = 2; /P4 #8 Pas = 4; /P5join #8 Bax = 1; /S3 #2 Zoom = 52; /S4 #6 $stop; /S5 end,过程性赋值,过程性赋值分两类: 1) 阻塞性过程赋值 2) 非阻塞性过程赋值 过程性赋值是在initial语句或always语句内的赋值。 对寄存器数据类型的变量赋值。reg, integer, real, 或者 ti

11、me。 在下一语句对变量再次赋值前变量值保持不变。 表达式的右端可以是任何表达式。,阻塞性过程赋值,赋值操作符是“=”的过程赋值是阻塞性过程赋值。 阻塞性过程赋值在其后所有语句执行前执行,即在下一语句执行前该赋值语句完成执行。 always (A or B or Cin) begin: CARRY_OUT reg T1 , T2 , T3 ; T1 = A end,initial begin Clr = #5 0; Clr = #4 1; Clr = #10 0; end,begin Art = 0; Art = 1; end 对A rt的0赋值被丢弃。,非阻塞性过程赋值,在非阻塞性过程赋值中

12、,使用赋值符号“ =”。 begin Load = 32; RegA = Load; RegB = Store; end,在非阻塞性过程赋值中,对目标的赋值是非阻塞的,但可预定在将来某个时间步发生。 当非阻塞性过程赋值被执行时,计算右端表达式,右端值被赋于左端目标,并继续执行下一条语句。 预定的最早输出将在当前时间步结束时,这种情况发生在赋值语句中没有时延时。 在当前时间步结束或任意输出被调度时,即对左端目标赋值。 建议:对于时序过程用非阻塞性过程赋值,initial begin Clr = #5 1; Clr = #4 0; Clr = #10 0; end end,initial begi

13、n Cbn = 0; Cbn = 1; end 同时对同一寄存器变量有多个赋值, Cbn的值变得不确定,即Cbn = x。Verilog HDL标准中既没有规定在这种情况下,何种事件被调度,也没有规定事件被取消的次序。结果是根据特定的Verilog模拟器的事件调度算法,Cbn将被赋值为0或1 。,阻塞性赋值vs非阻塞性赋值,阻塞性赋值(=) initial begin #5 a = b; #10 c = d; end,非阻塞性赋值 initial begin #5 a = b; #10 c = d; end,reg 0:2 Q_State; initial begin Q_State = 3b

14、011 ; Q_State = 3b100 ; $display (“Current value of Q_State is %b ”, Q_State) ; #5; /等待一定的时延。 $display (“The delayed value of Q_State is %b ”, Q_State) ; end 产生如下结果: Current value of Q_State is 011 The delayed value of Q_State is 100,过程赋值与连续赋值间的差异,过程赋值vs连续赋值,module Procedural; reg A , B , Z; always

15、(B) begin Z = A; A = B; end endmodule,module Continuous; wire A , B , Z; assign Z = A; assign A = B; endmodule Z等于B,行为语句,行为语句 IF-ELSE 语句 CASE 语句 循环语句 行为语句可以用于时序过程,if - else语句,if () sequence of statement(s) else if () sequence of statement(s) . . else sequence of statement(s),if - else语句,always (sela

16、 or selb or a or b or c)beginif (sela)q = a;elseif (selb)q = b;elseq = c; end,if - else语句,条件按照从顶至底求值 首先,条件为真则相应语句执行 如果所有条件为假则执行“else”相关联的语句,if(Sum 60) begin Grade = C; Total_C = Total_c + 1; end else if(Sum 75) begin Grade = B; Total_B = Total_B + 1; end else begin Grade = A; Total_A = Total_A + 1; end,if - if - else格式,if(Clk) if(Reset) Q = 0; else Q = D;,可能会有二义性,建议不使用 在Verilog HDL中将else与最近的没有else的if相关联来解决。在这个例子中,else与内层if语句相关联。,if(Sum

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号