阻塞赋值"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 延迟