60-4-24.2 两类过程赋值.pptVIP

  • 9
  • 0
  • 约5.36千字
  • 约 18页
  • 2020-02-15 发布于天津
  • 举报
杭州电子科技大学 EDA技术 * 并发性与赋值操作:例 assign与非阻塞赋值的并行性 4.2 两类过程赋值 assign Q1 = A | B; assign Q2 = B ^ C; assign Q1 = C A; 过程描述 always@(A,B,C) begin Q1 = A | B; Q2 = B ^ C; Q1 = C A; end assign描述 Q1赋值发生冲突,不允许 语法允许,Q1赋值仅最后一次生效 杭州电子科技大学 EDA技术 * 阻塞 vs. 非阻塞赋值(1) M1=1; M2=11=1; Q=1; M1=1; M2=10=0; Q=0|0=0; A = 0 ?1, B = 0 ?1 4.2 两类过程赋值 always@(A,B,C) begin M1 = A ; M2 = B M1; Q = M1 | M2; end 非阻塞式赋值示例 always@(A,B,C) begin M1 = A ; M2 = B M1; Q = M1 | M2; end 阻塞式赋值示例 杭州电子科技大学 EDA技术 * 阻塞 vs. 非阻塞赋值(2) 4.2 两类过程赋值 module DFF3(CLK,D,Q); output Q; input CLK,D; reg a,b,Q; always @(posedge clk) begin a = D; b = a; Q = b; end endmodule 阻塞赋值示例 module DFF3(CLK,D,Q); output Q; input CLK,D; reg a,b,Q; always @(posedge clk) begin a = D; Q = b; b = a; b = a; Q = b; a = D; end endmodule 非阻塞赋值示例 杭州电子科技大学 EDA技术 * 阻塞 vs. 非阻塞赋值(3) 当一个always过程块中同时包含阻塞与非阻塞赋值语句时,非阻塞赋值会在阻塞语句都执行完毕后再一起执行。 下列代码中b1较a1更早被赋值! 4.2 两类过程赋值 always @(*) begin if (in1==1) … // 第1行 a1 =4’B1010; // 第2行 … if(in2==0) … // 第15+n行 … b1 = 4’B0011; // 第30+m行 … end 杭州电子科技大学 EDA技术 * 阻塞 vs. 非阻塞赋值(4) 4.2 两类过程赋值 module mux4_1( D0,D1,D2,D3,S1,S0,OUT); output OUT; input D0,D1,D2,D3,S1,S0; reg [2:0] T; reg OUT; always @(D0,D1,D2,D3,S1,S0) begin T = 0; if (S0==1) T =T+1; if (S1==1) T =T+2; case(T) 0: OUT = D0; 1: OUT = D1; 2: OUT = D2; 3: OUT = D3; default : OUT = D0; endcase end endmodule 阻塞式赋值:结果正确 module mux4_1( D0,D1,D2,D3,S1,S0,OUT); output OUT; input D0,D1,D2,D3,S1,S0; reg [2:0] T; reg OUT; always@(D0,D1,D2,D3,S1,S0) begin T = 0; if (S0==1) T =T+1; if (S1==1) T =T+2; ca

文档评论(0)

1亿VIP精品文档

相关文档