设计时序逻辑时采用阻塞赋值与非阻塞赋值

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

时序逻辑设计

‐‐‐‐‐‐‐‐‐阻塞赋值与非阻塞赋值区别

阻塞式

`timescale 1ps/1ps

module blocking(b,c,a,clk);

output [3:0] b,c;

input [3:0] a;

input clk;

reg [3:0] b,c;

always @(posedge clk)

begin

b = a;

c = b;

$display("Blocking: a = %d, b = %d, c = %d.",a,b,c);

end

endmodule

非阻塞式

`timescale 1ps/1ps

module non_blocking(clk,a,b,c);

output [3:0] b,c;

input [3:0] a;

input clk;

reg [3:0] b,c;

always @(posedge clk)

begin

b <= a;

c <= b;

$display("Non_Blocking: a = %d, b = %d, c = %d.",a,b,c); end

endmodule

Testbench

`timescale 1ps/1ps

module test_tp();

wire [3:0] b1,c1,b2,c2;

reg [3:0] a;

reg clk;

initial

begin

clk = 0;

forever #50 clk = ~clk;

end

initial

begin

a = 4'h3;

$display("____________________________");

# 100 a = 4'h7;

$display("____________________________");

# 100 a = 4'hf;

$display("____________________________");

# 100 a = 4'ha;

$display("____________________________");

# 100 a = 4'h2;

$display("____________________________");

# 100 $display("____________________________");

$stop;

end

non_blocking non_blocking1(.clk(clk),.a(a),.b(b2),.c(c2)); blocking blocking1(.clk(clk),.a(a),.b(b1),.c(c1)); endmodule

Transcript

# ____________________________

# Blocking: a = 3, b = 3, c = 3.

# Non_Blocking: a = 3, b = x, c = x.

# ____________________________

# Non_Blocking: a = 7, b = 3, c = x.

# Blocking: a = 7, b = 7, c = 7.

run

# ____________________________

# Non_Blocking: a = 15, b = 7, c = 3.

# Blocking: a = 15, b = 15, c = 15.

run

# ____________________________

# Non_Blocking: a = 10, b = 15, c = 7.

# Blocking: a = 10, b = 10, c = 10.

run

# ____________________________

# Non_Blocking: a = 2, b = 10, c = 15.

# Blocking: a = 2, b = 2, c = 2.

run

# ____________________________

Author: Apple Cai

Data: 31 Aug 2010

相关文档
最新文档