1. 程式人生 > >begin end中阻塞語句與非阻塞語句執行順序的問題

begin end中阻塞語句與非阻塞語句執行順序的問題

  • 1
module fsm_2(clk,A,Y);
input clk,A;
output reg Y;
reg q1;
[email protected](posedge clk)
begin

Y<=q1&(~A);
q1=~A;
end
endmodule


  • 2

將always塊中的語句改為

q1=~A;
Y<=q1&(~A);

  • 3

將always塊中的語句改為

q1<=~A;
Y<=q1&(~A);



1與3的電路是相同的。

因此,我認為在非阻塞賦值後加阻塞賦值語句是沒有意義的,對於綜合後,將對於非阻塞賦值語句的RHS表示式的變數重新賦值的阻塞賦值全變為非阻塞賦值,因為他認為RHS表示式的變數在這個時鐘週期內不能被改變,如:1中,Y<=q1&(~A);q1=~A;非阻塞賦值語句的RHS表示式的變數q1在下一條阻塞語句中又被賦值,因此,預設為q1<=~A;

總結:

對執行順序的理解:

begin end塊中順序執行,即一條一條的執行,只不過,遇到非阻塞時 ,只執行RHS表示式的值,不執行賦值,而後,再執行下一條語句,若下一條語句仍是非阻塞,則繼續只執行RHS表示式的值,不執行賦值。如:

module fsm_2(clk,A,Y1,Y2);
input clk,A;
output reg Y1,Y2;
reg q1,q2;
[email protected](posedge clk)
begin
q1<=A;//1
Y1<=q1&(~A);//2
q2=~A;//3
Y2<=q2&(~A);//4

end
endmodule

執行順序是:A,q1&(~A),q2=~A,q2&(~A);

對於有些文章說

“ 在計算非阻塞賦值的RHS表示式和更新LHS期間,其他的verilog語句,包括其他的verilog     非阻塞賦值語句都能同時計算RHS表示式和更新LHS。”不能理解是

2非阻塞語句的rhs執行中,同時4非阻塞語句的rhs同時也在執行,而是2非阻塞語句的rhs執行後,再執行3阻塞語句,再執行4非阻塞語句的rhs。

相關推薦

begin end阻塞語句阻塞語句執行順序的問題

1 module fsm_2(clk,A,Y); input clk,A; output reg Y; reg q1; [email protected](posedge clk) begin Y<=q1&(~A); q1=~A; end end

簡單測試Java線程安全阻塞同步阻塞同步性能

訪問 完成 老師 system 測試 int oid 1.2 run 摘抄自周誌明老師的《深入理解Java虛擬機:JVM高級特性與最佳實踐》13.2.2 線程安全的實現方法 1.名詞解釋 同步是指鎖哥線程並發訪問共享數據時,保證共享數據同一時刻只被一個線程訪問 互斥同步(阻

簡單測試Java執行緒安全阻塞同步阻塞同步效能

摘抄自周志明老師的《深入理解Java虛擬機器:JVM高階特性與最佳實踐》13.2.2 執行緒安全的實現方法 1.名詞解釋 同步是指鎖哥執行緒併發訪問共享資料時,保證共享資料同一時刻只被一個執行緒訪問 互斥同步(阻塞同步)是一種悲觀的併發策略,總是認為只要不去做正確的同步措施(加鎖),那就肯定會出現問題。 阻塞

阻塞程式碼阻塞程式碼例項

阻塞程式碼例項 //阻塞程式碼例項 var fs=require('fs'); var data=fs.readFileSync('input.txt'); console.log(data.toString()); console.log("程式執行完畢!"); 非阻塞程式碼例項 //非阻塞

面試--集合(四)併發集合框架阻塞佇列阻塞佇列

java語的框架父類介面是Iterable,從這個介面向下一一進行繼承。 一:集合架構的簡介 1:介面Iterable 主要用於迭代迴圈,僅有一個iterator()方法,通過返回Iterable物件,進行迴圈處理。 2:介面Collection 提供了集合框架最主要,最常用的操

【原創】java-NIO(一)阻塞IO阻塞IO--轉載請註明出處

零、一個小故事 在講解阻塞IO與非阻塞IO之前,先舉出一個小小的例子:        一個老闆經營一個飯店,最初的時候,每來一個客人安排一個服務員招呼,客人很滿意。   後來客人越來越多,需要的服務員越來越多,但是餐廳的後廚已經擠滿了服務員,不

java併發程式設計——阻塞佇列阻塞佇列

ArrayBlockingQueue ArrayBlockingQueue是一個有界阻塞佇列,資料結構基於陣列、使用ReentrantLock、Condition保證併發同步。 所謂阻塞佇列 當佇列滿了,則會對生產執行緒產生阻塞直到有空位可插入; 當佇列

阻塞佇列阻塞佇列區別應用場景

轉載自:http://blog.csdn.net/u012881904/article/details/51491736 作者:小汪 阻塞佇列與普通佇列的區別在於,當佇列是空的時,從佇列中獲取元素的操作將會被阻塞,或者當佇列是滿時,往佇列裡新增元素的操作會被阻塞。試圖

Java-NIO(七):阻塞IO阻塞IO

阻塞IO   傳統的 IO 流都是阻塞式的。   也就是說,當一個執行緒呼叫 read() 或 write()時,該執行緒被阻塞,直到有一些資料被讀取或寫入,該執行緒在此期間不能執行其他任務。   因此,在完成網路通訊進行 IO 操作時,由於執行緒會阻塞,所以伺服器端必

阻塞佇列阻塞佇列區別

最後有佇列的簡單使用例子 ----------------------------------------------------------------- 在併發程式設計中,有時候需要使用執行緒安全的佇列。如果要實現一個執行緒安全的佇列有兩種方式:一種是使用阻塞演算法,

【原創】java-NIO(一)阻塞IO阻塞IO

零、一個小故事 在講解阻塞IO與非阻塞IO之前,先舉出一個小小的例子:        一個老闆經營一個飯店,最初的時候,每來一個客人安排一個服務員招呼,客人很滿意。   後來客人越來越多,需要的服務員越來越多,但是餐廳的後廚已經擠滿了服務員,不能請更多的服務員了,之前的

並發隊列阻塞阻塞式的區別

否則 rabl 添加元素 生產者 peek add 獲取 block 雙端隊列 在並發隊列上JDK提供了兩套實現,一個是以ConcurrentLinkedQueue為代表的高性能隊列非阻塞,一個是以BlockingQueue接口為代表的阻塞隊列,無論哪種都繼承自Queue。

NIO 阻塞IO阻塞IO

客戶端 final SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8888)); final FileChannel inChannel = FileC

Socket編程阻塞阻塞的區別

軟件 復用 優點 調用 服務器 運用 需要 默認 con   阻塞:一般的I/O操作可以在新建的流中運用.在服務器回應前它等待客戶端發送一個空白的行.當會話結束時,服務器關閉流和客戶端socket.如果在隊列中沒有請示將會出現什麽情況呢?那個方法將會等待一個的到來.這個行為

關於veriolg阻塞阻塞賦值問題

觸發 改變 希望 到來 決定 工作 執行 為什麽 個人 在一開始學到阻塞和非阻塞的時候,所被告知的兩者的區別就在於阻塞是串行的,非阻塞是並行的。但是雖然知道這個不同點,有些時候還是很難真正區分用兩者電路的區別,在這就通過幾個例子來解釋一下。 以一個簡單的串行流水線寄存器為例

verilog阻塞賦值 阻塞賦值的區別

非阻塞(Non_Blocking)賦值方式( 如 b <= a; ), 塊結束後才完成賦值操作,值並不是立刻就改變的, 這是一種比較常用的賦值方法。(特別在編寫可綜合模組時)。 阻塞(Blocking)賦值方式( 如 b = a; ),  賦值語句執行完後,塊才

網路程式設計阻塞阻塞、同步非同步、I/O模型的理解

1. 概念理解      在進行網路程式設計時,我們常常見到同步(Sync)/非同步(Async),阻塞(Block)/非阻塞(Unblock)四種呼叫方式:同步:所謂同步,就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事。 例如

Linux裝置驅動阻塞阻塞I/O

阻塞和非阻塞I/O是裝置訪問的兩種不同模式,驅動程式可以靈活的支援使用者空間對裝置的這兩種訪問方式 本例子講述了這兩者的區別 並實現I/O的等待佇列機制, 並進行了使用者空間的驗證 基本概念: 1> 阻塞操作      是指 在執行裝置操作時,若不能獲得資源,則掛起程

關於Verilog HDL阻塞阻塞賦值形象理解

關於Verilog 中阻塞與非阻塞賦值的幾點理解 相信很多剛開始學習Verilog的童鞋對阻塞、非阻塞賦值理解得不是很明白,或者說是一頭霧水。確實,Verilog中阻塞、非阻塞一直就是一個難點,很多具備很久開發經驗的工程師仍是不得要領,在分析程式碼,看模擬時還

linux裝置阻塞阻塞io

1:阻塞與非阻塞io 阻塞操作:執行裝置操作時若不能獲得資源則掛起程序(程序進入休眠狀態,將cpu資源讓給其他程序),知道滿足條件後在執行!喚醒睡眠的程序的地方最大可能發生在中斷中,因為硬體資源的獲得一般伴隨著一箇中斷。 非阻塞:程序不能進行裝置操作時並不掛起,它或者放棄,