iT邦幫忙

2021 iThome 鐵人賽

DAY 2
3
Software Development

verilog or very lag系列 第 2

【Day02】Verilog 基本簡介

Verilog 電路基本架構

舉個簡單電路的例子:

module adder(
  a, 
  b, 
  c
);

input a;  //輸入埠 敘述
input b;  //輸入埠 敘述
output c; //輸出埠 敘述
wire c;  //資料型態 敘述
assign c = a & b;//內部電路 敘述

endmodule

上方為一個 AND 邏輯閘,由此可知,一個完整的模組是由 module 以及 endmodule 包起來的,而 adder 那個位置就要放的則是模組名稱,而後面的括號內則是放所有的輸入及輸出腳位,接著裡面的最上方會宣告每隻腳位是輸出還是輸入,再來是宣告變數的資料型態。
在這裡,只要是輸入,一律都是 input ,輸出的話,如果沒有特別宣告則默認 wire

  • input

    • 模組內只可接 wire
    • 模組外可接 wire、reg
  • Output

    • 模組內可接 wire、reg
    • 模組外只可接 wire
  • InOut(雙向埠)

    • 模組內&外只可接 wire

那甚麼時候才會用到 inout 呢?

舉個例子,在實現 I2C protocol 時就會用到這個好用的東西了,為甚麼這麼說呢?先來看看下面這張圖


圖片出處

I2C 的運作機制是這樣的,I2C 僅使用兩個 BUS,串列資料線(SDA)和串列時鐘線(SCL),因此當 master 送資料給 slave 時此時 master 的 SDA 要設成 out 狀態,而 slave 的 SDA 要設成 in 的狀態,相反過來,當 slave 送資料給 master 時此時 slave 的 SDA 要設成 out 狀態,而 master 的 SDA 要設成 in 的狀態,所以會需要可輸入又可輸出的 inout 資料型態。


上一篇
【Day01】概述
下一篇
【Day03】Verilog 資料型態(上)
系列文
verilog or very lag30

尚未有邦友留言

立即登入留言