Verilog中的inout都有什麼用處,大神可以給我系統性的講解一下嗎,老師上課時一筆就帶過了。?
02-24
詳細 系統的講解一下。跪求指點
這題不應該去問度娘嗎?再好一點,去eetop查。
Inout指的是兼具input和output的屬性,可以作為Input使用或者Output使用,但不可以同時使用。設計Inout屬性的目的在於減少IO的開銷(一個IO作為兩個使用),inout屬性多用於低速的數據傳輸和控制邏輯(Mbit/s量級,根據個人經驗推測)。作為初學者,將他看為雙方向的屬性即可。
HDL語言綜合之後,依賴於FPGA/CPLD的IO管腳是否支持Inout屬性,否則不會映射到具體的IO上,但現在的FPGA/CPLD一般都支持inout屬性,硬體上如何實現的呢?通過三態門Buffer實現的,具體電路如下(摘自Xilinx Virtex-7 SelectIO)
對於圖中的IO pin來說,兼具input和Ouput的屬性,當T=1時,Device IO的賦值來自於I(FPGA),處於輸出狀態;當T=0時,上面的邏輯門處於關閉狀態(高阻狀態),此時來自Device IO的值輸入到O(FPGA)。
對應的Verilog邏輯如下,綜合完成後直接映射到IOBUF:
assign IO = T ? I : 1bz;
assign O = IO;從上面的邏輯看,O默認處於選通狀態不受到T的控制(下面的邏輯門也可以省略),那麼在設計程序邏輯時,配合T的控制邏輯,便可以實現同一pin上的輸入與輸出功能(典型應用是IIC)。晶元上有一種埠叫雙向埠,inout就是對這種埠的建模。你看,一句話就說完了……當老師的都這德行。
inout,字面意思就是雙向埠。舉個例子,I2C數據線SDA就是一個雙向埠,主機往從機寫數據,SDA為out;主機讀取從機數據,SDA為in。設計的時候這個埠實現為一個三態門,可以寫成這樣:assign SDA = out_enable ? out_data : 1bZ ; 建議去網上看看別人的設計,簡單一些的比如ds18b20、i2c里inout埠怎麼用的
推薦閱讀: