北大数字集成电路教程10-11verilog的行为级建模课件.pptVIP

北大数字集成电路教程10-11verilog的行为级建模课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
块语句(续) 在顺序块中,语句一条接一条地计算执行。 在并行块中,所有语句在各自的延迟之后立即计算执行。 begin #5 a = 3; #5 a = 5; #5 a = 4; end fork #5 a = 3; #15 a = 4; #10 a = 5; join 上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺序是为了强调顺序是没有关系的。 注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。 延迟赋值语句 begin temp= b; @(posedge clk) a = temp; end a = @( posedge clk) b; 语法: LHS = timing_ control RHS; 时序控制延迟的是赋值而不是右边表达式的计算。 在延迟赋值语句中RHS表达式的值都有一个隐含的临时存储。 可以用来简单精确地模拟寄存器交换和移位。 等价语句 LHS: Left-hand-side RHS: Right-hand-side 延迟赋值语句 begin a = #5 b; b = #5 a; #10 $diplay(a, b); end fork a = #5 b; b = #5 a; #10 $diplay(a, b); join 在左边的例子中,b的值被立即采样(时刻0),这个值在时刻5赋给a。a的值在时刻5被采样,这个值在时刻10赋给b。 注意,另一个过程块可能在时刻0到时刻5之间影响b的值,或在时刻5到时刻10之间影响a的值。 在右边的例子中,b和a的值被立即采样(时刻0),保存的值在时刻5被赋值给他们各自的目标。这是一个安全传输。 注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。 并行语句在同一时间步发生,但由仿真器在另外一个时间执行。 在下面的每个例子中,a和b的值什么时候被采样? 在下面的每个例子中,什么时候给a和b赋值? b值拷贝到a然后回传 a和b值安全交换 非阻塞过程赋值 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=

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档