iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 13
3
自我挑戰組

Verilog 從放棄到有趣系列 第 13

[Day13]blocking

  • 分享至 

  • twitterImage
  •  

今天要來講一下verilog兩種不同的給值的方式,分別為blocking & nonblocking,這兩種給值的方式經常讓剛學verilog的人很頭痛,當初我也是花了好一段時間再看,因為先學c的人再給值的時候很習慣用“=”,而不是“<=”,今天就來看看這兩者的差異吧.

首先來看一下blocking的方法,也就是在always block裡面給值的時候是用”=”的方式,假設你的給值是有相依關係,就像是a=b,c=a,d=c,那給值的時候就會按照你程式打的先後順序去執行,來按看一下例子

假設我設計了一段程式如下:

always @(*)begin
  A1 = IN;
  A2 = A1;
  A3 = A2;
end

那麼就是當IN值改變的時候會觸發這個always運作,因為有相依性,所以會一行一行由上往下執行這block,出來的電路大概會長這樣:

https://ithelp.ithome.com.tw/upload/images/20171224/20107543fCzAWvIOuu.png

IN先給A1之後,再把A1給A2,最後再把A2給A3,模擬跑出來的波形大概會在以下這樣,因為跑模擬預設是邏輯閘之間是沒有delay的,所以當IN值改變時,其他值就都會改變

https://ithelp.ithome.com.tw/upload/images/20171224/20107543ZfLmZ2mo38.jpg

再舉一個例子:

always @(*)begin
  A1 = IN+1;
  A2 = A1+2;
  A3 = A2+3;
end

把上面的程式加一個加法器進去,波形就會長以下這樣

https://ithelp.ithome.com.tw/upload/images/20171224/20107543AFBXZlLP6Q.png

這樣搭配著波形以及電路看是不是有比較好懂了呢,明天會再繼續提nonblocking的部分,然後兩者之間再來做比較.


上一篇
[Day12]循序邏輯電路
下一篇
[Day14]nonblocking
系列文
Verilog 從放棄到有趣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言