如何適當使用Blocking與Nonblocking

今天在讀RTLcode的時候,剛好阿忠問到"<="
之前讀RTLcode的時候沒有注意到,真是羞愧呀!
不過查了一下,原來是Blocking與Nonblocking的關係
在序向邏輯通常會使用Nonblocking,即<=(指派的意思)
在組合邏輯才使用=或是assign

找到一個大大他有詳細的整理使用時機
(p.s看網頁,這個大大還蠻博學多聞的!如下)
http://www.cnblogs.com/oomusou/archive/2008/07/05/verilog_blocking_nonblocking.html

Abstract
blocking與non-blocking是學習Verilog一個重要的關卡,若能掌握這四個原則,基本上就不會用錯。

Introduction
要徹底搞懂blocking和non-blocking老實說並不是很容易,需要一些篇幅。在RTL級編碼中,若能掌握以下四個原則,基本上就不會誤用blocking與non-blocking:

1.有clock的always區塊要使用non-blocking。


1 always@(posedge clk or negedge reset_n) begin
2 if (!reset_n)
3 counter <= 8'b00;
4 else
5 counter <= counter + 1;
6 end

2.無clock的always區塊使用blocking。


1 always@(sel or a or b) begin
2 case (sel)
3 2'b00 : c = a;
4 2'b01 : c = b;
5 endcase
6 end

3.continuous assignment使用blocking。


1 assign y = a&b;

4.一個always區塊中不能同時使用blockng與non-blocking。

留言

熱門文章