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資源讓給其他程序),知道滿足條件後在執行!喚醒睡眠的程序的地方最大可能發生在中斷中,因為硬體資源的獲得一般伴隨著一箇中斷。 非阻塞:程序不能進行裝置操作時並不掛起,它或者放棄,