EDA基础-4分析.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EDA基础-4分析

过程赋值有两类 module swap_vals; reg a, b, clk; initial begin a = 0; b = 1; clk = 0; end always #5 clk = ~clk; always @( posedge clk) begin a = b; // 非阻塞过程赋值 b = a; // 交换a和b值 end endmodule 阻塞过程赋值执行完成后再执行在顺序块内下一条语句。 非阻塞赋值执行多个数据的并发传输。 若过程块中的所有赋值都是非阻塞的,赋值按两步进行: 仿真器计算所有RHS表达式的值,保存结果,并进行调度在时序控制指定时间的赋值。 在经过相应的延迟后,仿真器通过将保存的值赋给LHS表达式完成赋值。 阻塞过程赋值 非阻塞过程赋值 非阻塞过程赋值(续) module non_block1; reg a, b, c, d, e, f; initial begin // blocking assignments a = #10 1; // time 10 b = #2 0; // time 12 c = #4 1; // time 16 end initial begin // non- blocking assignments d = #10 1; // time 10 e = #2 0; // time 2 f = #4 1; // time 4 end initial begin $monitor($ time,, a= %b b= %b c= %b d= %b e= %b f= %b, a, b, c, d, e, f); #100 $finish; end endmodule 输出结果: 0 a= x b= x c= x d= x e= x f = x 2 a= x b= x c= x d= x e= 0 f = x 4 a= x b= x c= x d= x e= 0 f = 1 10 a= 1 b= x c= x d= 1 e= 0 f = 1 12 a= 1 b= 0 c= x d= 1 e= 0 f = 1 16 a= 1 b= 0 c= 1 d= 1 e= 0 f = 1 阻塞与非阻塞赋值语句行为差别举例1 阻塞赋值 阻塞:计算RHS并更新LHS,此时不能允许有来自任何其他Verilog语句的干扰。 所谓阻塞的概念是指在同一个always块中,其后面的赋值语句从概念上(即使不设定延迟)是在前一句赋值语句结束后再开始赋值的。 always@(posedge clk) begin b=a; c=b; end 在clk上升沿到来的时候,把a的值赋给b,再把b的值赋给c,并显示a、b的值。当条件符合时,执行上述操作。在把a的值赋给b的这个过程中,其他的语句都“被阻塞”,被迫停下来,结束之后,进入下一句,直到执行完begin---end中语句。所以相当于把a的值通过b传递给c。 阻塞赋值 关于非阻塞: 1) 在赋值时刻开始时,计算非阻塞赋值RHS表达式。 2) 在赋值时刻结束时,更新非阻塞赋值LHS表达式。 非阻塞赋值 always@(posedge clk) begin b=a; c=b; end 这段代码在上升沿到来时,计算所有的RHS的值,此时,a的值为3,b的值为x,这是同时进行的,没有先后顺序;然后更新LHS(left Hand Side)的值,结束之后,b的值变为3,c的值为前一时刻b的值,即x。 非阻塞赋值 如果把上述代码中的两个赋值语句相互交换,结果如何? 正确使用$display和$strobe 阻塞、非阻塞过程赋值 阻塞与非阻塞赋值语句行为差别举例2 module pipeMult(product, mPlier, mCand, go, clock); input go, clock; input [7:0] mPlier, mCand; output [15:0] product; reg [15:0] product; always @(posedge go) product = repeat (4) @(posedge clock) mPlier * mCand; endmodule module pipeMult(product, mPlier, mCand, go, clock

文档评论(0)

wbjsn + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档