數(shù)字進(jìn)制_高組態(tài)
需要看對應(yīng)的視頻,請點(diǎn)擊視頻編號:001100000057
1、本視頻主要介紹數(shù)字電路的高阻態(tài),即Z態(tài),表示設(shè)計(jì)者不驅(qū)動這個信號(既不給0也不給1),通常用于三態(tài)門接口當(dāng)中
2、本視頻通過I2C總線協(xié)議來說明三態(tài)信號的運(yùn)用。
3、這是ALTERA和VIVADO視頻
5.2.4高阻態(tài)
Z態(tài),一般稱之為高阻態(tài),表示設(shè)計(jì)者不驅(qū)動這個信號(既不給0也不給1),通常用于三態(tài)門接口當(dāng)中。

上圖就是三態(tài)總線的應(yīng)用案例,圖中的連接總線對于CPU和FPGA來說既為輸入又為輸出,是雙向接口。
一般的硬件電路中會將該線接上一個上拉電阻(弱上拉)或下拉電阻(弱下拉)。
當(dāng)CPU和FPGA都不驅(qū)動該總線時(shí),A點(diǎn)保持為高電平。當(dāng)FPGA不驅(qū)動該總線,CPU驅(qū)動該總線時(shí),A點(diǎn)的值就由CPU決定。
當(dāng)CPU不驅(qū)動該總線,F(xiàn)PGA驅(qū)動該總線時(shí),A點(diǎn)的值就由FPGA決定。但FPGA和CPU不能同時(shí)驅(qū)動該總線,
否則A的電平就不確定了,通常FPGA和CPU何時(shí)驅(qū)動總線是按事先協(xié)商的協(xié)議進(jìn)行工作。

上圖是典型的I2C的時(shí)序。I2C的總線SDA就是一個三態(tài)信號。I2C協(xié)議已規(guī)定好上面的時(shí)間中,
哪段時(shí)間是由主設(shè)備驅(qū)動,哪段時(shí)間是由從設(shè)備驅(qū)動,雙方都要遵守協(xié)議,不能存在同時(shí)驅(qū)動的情況。
那么FPGA在設(shè)計(jì)中是如何做到“不驅(qū)動”這一行為呢?這是因?yàn)镕PGA內(nèi)部有三態(tài)門。

三態(tài)門是一個硬件,上圖是它的典型結(jié)構(gòu)。三態(tài)門有四個接口,
如上圖所示的寫使能wr_en、寫數(shù)據(jù)wr_data、讀數(shù)據(jù)rd_data以及與外面器件相連的三態(tài)信號data。
需要注意的是寫使能信號,當(dāng)該信號有效時(shí)三態(tài)門會將wr_data的值賦給三態(tài)線data,此時(shí)data的值由wr_data決定,
當(dāng)wr_data為0時(shí)data值為0;當(dāng)wr_data為1時(shí)data值為1。而當(dāng)寫使能信號無效時(shí),
則不論wr_data值是多少都不會對外面的data值有影響,也就是不驅(qū)動。
在Verilog中以上功能是通過如下代碼實(shí)現(xiàn)的:

當(dāng)綜合器看到這兩行代碼則知道要綜合成三態(tài)門了,高阻z的作用正在于此。
此外可以注意到硬件上用三態(tài)線是為了減少管腳,而在FPGA內(nèi)部沒有必要減少連線,
所以使用三態(tài)信號是沒有意義的。因此,筆者建議各位讀者在進(jìn)行設(shè)計(jì)時(shí)不要在FPGA內(nèi)部使用高阻態(tài)“z”,
因?yàn)闆]有必要給自己添加“思考”的麻煩。當(dāng)然,如果設(shè)計(jì)中使用了高阻態(tài)也不會報(bào)錯,也可以實(shí)現(xiàn)功能。
總的來說高阻態(tài)“z”是表示“不驅(qū)動總線”這個行為,實(shí)際上數(shù)字電路就是高電平或者低電平,
不存在其他電平的情況。
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=11
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=11