中国高校课件下载中心 》 教学资源 》 大学文库

《通信集成电路设计》课程教学课件(PPT讲稿)深入理解阻塞非阻塞

文档信息
资源类别:文库
文档格式:PPT
文档页数:32
文件大小:489KB
团购合买:点击进入团购
内容简介
《通信集成电路设计》课程教学课件(PPT讲稿)深入理解阻塞非阻塞
刷新页面文档预览

阻塞赋值"ALIS大T阻塞赋值的执行可以认为是只有一个步骤的操作:计算RHS并更新LHS,此时不能允许有来自任何其他Verilog语句的干扰。所谓阻塞的概念是指在同一个always块中,其后面的赋值语句从概念上(即使不设定延迟)是在前一句赋值语句结束后再开始赋值的。如果在一个过程块中阻塞赋值的RHS变量正好是另一个过程块中阻寒赋值的LHS变量,这两个过程块又用同一个时钟沿触发,这时阻塞赋值操作会出现问题,即如果阻塞赋值的次序安排不好,就会出现竞争。22025/12/3

2 2025/12/3 阻塞赋值 ❖ 阻塞赋值的执行可以认为是只有一个步骤的 操作: ❖ 计算RHS并更新LHS,此时不能允许有来自 任何其他Verilog语句的干扰。 所谓阻塞的概念 是指在同一个always块中,其后面的赋值语句从 概念上(即使不设定延迟)是在前一句赋值语句 结束后再开始赋值的。 ❖ 如果在一个过程块中阻塞赋值的RHS变量正 好是另一个过程块中阻塞赋值的LHS变量,这两 个过程块又用同一个时钟沿触发,这时阻塞赋值 操作会出现问题,即如果阻塞赋值的次序安排不 好,就会出现竞争

阻塞赋值1909Tmodulefbosc1(y1,y2,clk,rst);OTONGoutputy1,y2;input clk, rst;reg y1,y2;always@(posedgeclkorposedgerst)if(rst)y1=0;l/resetelsey1=y2;always@(posedgeclkorposedgerst)if (rst)y2 =1; Il presetelsey2=y1;endmodule32025/12/3

3 2025/12/3 阻塞赋值 module fbosc1 (y1, y2, clk, rst); output y1, y2; input clk, rst; reg y1, y2; always @(posedge clk or posedge rst) if (rst) y1 = 0; // reset else y1 = y2; always @(posedge clk or posedge rst) if (rst) y2 = 1; // preset else y2 = y1; endmodule

非阻塞赋值.ALIS大OTONG非阻塞赋值的操作可以看作为两个步骤的过程:在赋值时刻开始时,计算非阻塞赋值RHS表达式在赋值时刻结束时,更新非阻塞赋值LHS表达式。2025/12/3

4 2025/12/3 非阻塞赋值 ❖非阻塞赋值的操作可以看作为两个步骤的过程: ▪ 在赋值时刻开始时,计算非阻塞赋值RHS表达式。 ▪ 在赋值时刻结束时,更新非阻塞赋值LHS表达式

非阻塞赋值1909TOTONGmodulefbosc2(y1,y2,clk,rst);outputy1,y2;input clk,rst;reg y1,y2;always@(posedgeclkorposedgerst)if(rst)y1<=0;// resetelse y1<=y2;always@(posedgeclkorposedgerst)if(rst)y2<=1; l/ presetelse y2<=y1;endmodule52025/12/3

5 2025/12/3 非阻塞赋值 module fbosc2 (y1, y2, clk, rst); output y1, y2; input clk, rst; reg y1, y2; always @(posedge clk or posedge rst) if (rst) y1 <= 0; // reset else y1 <= y2; always @(posedge clk or posedge rst) if (rst) y2 <= 1; // preset else y2 <= y1; endmodule

Verilog模块编程要点-ALIS大支时序电路建模时,用非阻塞赋值。TONG锁存器电路建模时,用非阻塞赋值。用always块建立组合逻辑模型时,用阻塞赋值。在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。在同一个always块中不要既用非阻塞赋值又用阻塞赋值。不要在一个以上的always块中为同一个变量赋值。用sstrobe系统任务来显示用非阻塞赋值的变量值心在赋值时不要使用#0延迟2025/12/3

6 2025/12/3 Verilog模块编程要点 ❖ 时序电路建模时,用非阻塞赋值。 ❖ 锁存器电路建模时,用非阻塞赋值。 ❖ 用always块建立组合逻辑模型时,用阻塞赋值。 ❖ 在同一个always块中建立时序和组合逻辑电路 时,用非阻塞赋值。 ❖ 在同一个always块中不要既用非阻塞赋值又用 阻塞赋值。 ❖ 不要在一个以上的always块中为同一个变量赋 值。 ❖ 用$strobe系统任务来显示用非阻塞赋值的变量 值 ❖ 在赋值时不要使用 #0 延迟

移位寄存器模型TOTONGqlq3g2clk移位寄存器电路2025/12/3

7 2025/12/3 移位寄存器模型 q1 q2 q3 d clk 移位寄存器电路

阻塞赋值实现移位寄存器模型1909XTOTONGmodulepipeb1(q3,d,clk);modulepipeb2(q3,d,clk):output[7:o]q3;output[7:0]q3;input [7:0] d;input [7:0] d;inputclk;inputclk;reg[7:0]q3,q2,q1;reg[7:0]q3, q2, q1;always@(posedgeclk)always@(posedgeclk)beginbeginq1=d;q3=q2;q2=q1;q2= q1;Xq1= d;q3=q2;endend综合结果endmoduleendmodule02025/12/3

8 2025/12/3 阻塞赋值实现移位寄存器模型 module pipeb1 (q3, d, clk); output [7:0] q3; input [7:0] d; input clk; reg [7:0] q3, q2, q1; always @(posedge clk) begin q1 = d; q2 = q1; q3 = q2; end endmodule module pipeb2 (q3, d, clk); output [7:0] q3; input [7:0] d; input clk; reg [7:0] q3, q2, q1; always @(posedge clk) begin q3 = q2; q2 = q1; q1 = d; end 综合结果 endmodule × √

大TOTONGq3Cclk实际综合的结果92025/12/3

9 2025/12/3 q3 d clk 实际综合的结果

阻塞赋值实现移位寄存器模型1909大T支OTONGmodulepipeb4 (q3,d,clk);modulepipeb3(q3,d,clk);output[7:0]q3;output[7:0]q3;input [7:0] d;input [7:0] d;inputclk;inputclk;reg[7:0]q3,q2,q1;reg[7:0] q3, q2, q1;always@(posedgeclk)q1=d;always@(posedgeclk)q2=q1;always@(posedgeclk)q2=q1;always@(posedgeclk)q3=q2;always@(posedgeclk)q3=q2;always@(posedgeclk)q1=d;endmoduleendmodulenot goodnotgood102025/12/3

10 2025/12/3 阻塞赋值实现移位寄存器模型 module pipeb3 (q3, d, clk); output [7:0] q3; input [7:0] d; input clk; reg [7:0] q3, q2, q1; always @(posedge clk) q1 = d; always @(posedge clk) q2 = q1; always @(posedge clk) q3 = q2; endmodule module pipeb4 (q3, d, clk); output [7:0] q3; input [7:0] d; input clk; reg [7:0] q3, q2, q1; always @(posedge clk) q2 = q1; always @(posedge clk) q3 = q2; always @(posedge clk) q1 = d; endmodule not good not good

非阻塞赋值实现移位寄存器模型1909"ALIS大TOTONGmodulepipen2 (q3, d,clk);modulepipen1(q3,d,clk);output[7:0]q3;output[7:0]q3;input [7:0] d;input[7:0]d;clk;inputclk;inputreg[7:0] q3, q2, q1;reg[7:0]q3,q2,q1;always@(posedgeclk)always@(posedgeclk)beginbeginq1<=d;q3<= q2;q2<=q1;q2<=q1;q3 <= q2;q1<= d;endendendmoduleendmodule112025/12/3

11 2025/12/3 非阻塞赋值实现移位寄存器模型 module pipen1 (q3, d, clk); output [7:0] q3; input [7:0] d; input clk; reg [7:0] q3, q2, q1; always @(posedge clk) begin q1 <= d; q2 <= q1; q3 <= q2; end endmodule module pipen2 (q3, d, clk); output [7:0] q3; input [7:0] d; input clk; reg [7:0] q3, q2, q1; always @(posedge clk) begin q3 <= q2; q2 <= q1; q1 <= d; end endmodule √ √

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档