- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                过程赋值有两类 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)