iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 5
2
自我挑戰組

Verilog 從放棄到有趣系列 第 5

[Day5]if..else & case

  • 分享至 

  • twitterImage
  •  

今天開始的幾天要來跟大家分享語法,那今天要講的是比較偏向於判斷式的使用,首先先來介紹:
if… else…
,使用方式跟C語言很像,舉個例子:

always@(posedge clk)begin
  if(reset)begin

  end
  else if(判斷條件 1)begin
    敘述1
  end
  else if(判斷條件 2)begin
    敘述2
  end
      .
      .
      .
      .
      .
      .
  else begin
    敘述n
  end
end

if else的特性就是使用時會根據判斷式的先後順序有優先權的不同,以上面的例子就是reset >判斷條件1>判斷條件2>....>判斷條件n,利用圖解的方式讓大家知道這種判斷式會合成出怎麼樣的電路,

https://ithelp.ithome.com.tw/upload/images/20171216/20107543hmYcUFX9Kf.png

如上圖所示,如果寫if else判斷式的話,合成出來的電路大概長這樣,會產生有優先權關係的數個二對一的多工器去產生你要的電路,也因為這樣,所以當判斷式越多的時候,所造成的路徑也會越長,這樣可能造成合成出來的電路因為路徑在長造成timing可能就會violation,這便大約提一下,timing,假設說妳的clock rate是100MHz,代表一個cycle是10ns,意味著暫存器跟暫存器之間的邏輯運算要在10ns內完成動作,不然就會因為時間內做不完邏輯運算而導致合成錯誤.

再來要介紹的是:
case
來看一下例子:

always@(posedge clk)begin
  if(reset)begin
    counter <= 0;
  end
  else begin
    case(狀態選擇)
      選擇一:
        敘述一
      選擇二:
        敘述二
      選擇三:
        敘述三
        .
        .
        .
        .
      選擇n:
        敘述n
      default:
        敘述x
    endcase
  end
end

用case去寫判斷式時就會產生多對一的多工器,如下圖.

https://ithelp.ithome.com.tw/upload/images/20171216/201075437Q8EV4If3W.png

如果當你的選擇條件是有辦法用case去寫的話,通常就會用case去寫,讓path越短越好,path,timing最後幾個章節如果有空的話會再多介紹.
今天這樣搭配電路圖來了解verilog的語法是不是比較易懂呢,今天就先介紹到這裡,往後的教學大多也會畫圖來跟大家分享喔.


上一篇
[Day4]always block運作
下一篇
[Day6]for loop
系列文
Verilog 從放棄到有趣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言