淺談verilog雙向口仿真


      想起當初做ds18b20的控制時第一次遇到雙向口,要用modelsim仿真的時候就煩惱了,這雙向口仿真的時候怎么給激勵?糾結了很久,其實說到底是當初對雙向口的結構不了解,其實要是看一下綜合出來的雙向口電路圖,要做仿真其實是很好做的,剛好這次做的類似I2C的sccb攝像頭配置也要用到雙向口,就簡單說一下雙向口的仿真問題。首先說明,以下是我綜合網上方法的思考過程,不知道是否嚴謹。

      前面說了,之前不會仿真就是因為不了解雙向口的結構,那雙向口的結構是怎樣的呢?可以綜合出一個雙向口看一下。

     請注意,這是一個純粹的接口,din聲明的是接口模塊的輸入,也就是要寫到總線上的數據,dout聲明的是接口模塊的輸出,也就是從總線上讀到的數據。圖如下

    下面來看一下Quartus ii 綜合出來的雙向口,

    

      圖中紅色箭頭所示就是我們要寫到總線上的數據流向,而綠色箭頭則是讀取總線上的數據流向,可以看到,在寫數據到總線的流向上有一個三態門,注意兩個緩沖區括號里的說明(tri:三態,drect:直通),就是由語句assign bus = (en==1)? din : 1’bz; 綜合出來的,三態門起到掌控和釋放總線的作用,當使能信號en為1時,主機即FPGA將掌握總線的控制權,此時把要發送的數據寫到總線上,而當使能信號為0時,則輸出高阻態,即此時主機放棄了總線的控制權,此時總線由從機控制,主機就可以直接在總線上讀到從機寫上的數據。而這就是FPGA通過三態門讀寫雙向口的方式。

      既然知道了雙向口的工作原理,那仿真起來就不再是問題,我們仿真時激勵文件的作用就是就是給設計輸入一定的激勵,通過查看設計的輸出是否符合預想來驗證設計是否正確,那在雙向口仿真中,激勵文件就扮演了從機的角色,焦點自然而然就回到了對總線的控制權上,作為從機的激勵文件自然是要在主機釋放了總線期間,而又有數據要寫到總線上的時候控制總線,換言之,在從機,也就是激勵文件中也應該存在一個三態門控制的雙向口,而它使能的時間應該在主機釋放總線而且需要從總線上讀數據的時候,那激勵文件怎么知道何時是從機該接管總線呢?我的方法是在設計中輸出一個輔助信號,此信號只在從機該接管總線也就是主機需要從總線上讀取數據的時候拉高,那激勵文件就可以利用此信號來作為從機三態口的使能信號,在此期間把數據寫到bus上。

      回到本次例子中,sccb總線,不了解sccb總線的可以到我另一篇博文中看看,基本類似於常用的I2C總線,主機要發送數據給從機時,在時鍾線低電平期間改變數據,高電平期間保持數據穩定,每發送一個字節數據后可以從總線上讀取從機的低電平應答(從機把總線拉低,否則主機釋放總線后總線將被上拉電阻拉為高電平),如下圖中圈出的sclk高電平期間就是該由從機返回應答信號的期間,注意此時主機三態口的使能信號sdat_en拉低了,主機釋放總線。

    下面就在原設計文件中添加一個測試信號,如下

 

 

    在激勵文件中利用此信號來控制從機的三態門,

 

 

     sdat_t是從機要寫到總線上的數據,在本例中一直為0,當test為1時,sdat_t將被寫到總線上,如下

 

     注意紅圈部分,此時test為1,sdat_t的值被寫到總線sdat上,sdat不再為高阻狀態。

     這里要提醒一下,激勵文件中,總線sdat要定義為wire類型,還要注意主機的三態門使能信號和從機的三態門使能信號不能重疊,否則主機和從機都想往總線上寫數據的話,控制權沖突,仿真時總線將是紅色的不定態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM