FPGA時(shí)序收斂設(shè)計(jì)技巧的詳細(xì)分析與消除差異的方法_第1頁(yè)
FPGA時(shí)序收斂設(shè)計(jì)技巧的詳細(xì)分析與消除差異的方法_第2頁(yè)
FPGA時(shí)序收斂設(shè)計(jì)技巧的詳細(xì)分析與消除差異的方法_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

FPGA時(shí)序收斂設(shè)計(jì)技巧的詳細(xì)分析與消除差異的方法您編寫的代碼是不是雖然在仿真器中表現(xiàn)正常,但是在現(xiàn)場(chǎng)卻斷斷續(xù)續(xù)出錯(cuò)?要不然就是有可能在您使用更高版本的工具鏈進(jìn)行編譯時(shí),它開(kāi)始出錯(cuò)。您檢查自己的測(cè)試平臺(tái),并確認(rèn)測(cè)試已經(jīng)做到100%的完全覆蓋,而且所有測(cè)試均未出現(xiàn)任何差錯(cuò),但是問(wèn)題仍然頑疾難除。雖然設(shè)計(jì)人員極其重視編碼和仿真,但是他們對(duì)芯片在FGPA中的內(nèi)部操作卻知之甚少,這是情有可原的。因此,不正確的邏輯綜合和時(shí)序問(wèn)題(而非邏輯錯(cuò)誤)成為大多數(shù)邏輯故障的根源。但是,只要設(shè)計(jì)人員措施得當(dāng),就能輕松編寫出能夠創(chuàng)建可預(yù)測(cè)、可靠邏輯的FPGA代碼。在FPGA設(shè)計(jì)過(guò)程中,需要在編譯階段進(jìn)行邏輯綜合與相關(guān)時(shí)序收斂。而包括I/O單元結(jié)構(gòu)、異步邏輯和時(shí)序約束等眾多方面,都會(huì)對(duì)編譯進(jìn)程產(chǎn)生巨大影響,致使其每一輪都會(huì)在工具鏈中產(chǎn)生不同的結(jié)果。為了更好、更快地完成時(shí)序收斂,我們來(lái)進(jìn)一步探討如何消除這些差異。I/O單元結(jié)構(gòu)所有FPGA都具有可實(shí)現(xiàn)高度定制的I/O引腳。定制會(huì)影響到時(shí)序、驅(qū)動(dòng)強(qiáng)度、終端以及許多其它方面。如果您未

明確定義I/O單元結(jié)構(gòu),則您的工具鏈往往會(huì)采用您預(yù)期或者不希望采用的默認(rèn)結(jié)構(gòu)。如下VHDL代碼的目的是采用“sda:inoutstd_logic;”聲明創(chuàng)建一個(gè)稱為sda的雙向I/O緩沖器。tri_state_proc:PROCESS(sys_clk)

BEGIN

ifrising_edge(sys_clk)then

if(enable_in='1')then

sda<=data_in;

else

data_out<=sda;

sda<='Z';

endif;

endif;

ENDPROCESStri_state_proc;當(dāng)綜合工具發(fā)現(xiàn)這組代碼時(shí),其中缺乏如何實(shí)施雙向緩沖器的明確指示。因此,工具會(huì)做出最合理的猜測(cè)。實(shí)現(xiàn)上述任務(wù)的一種方法是,在FPGA的I/O環(huán)上采用雙向緩沖器(事實(shí)上,這是一種理想的實(shí)施方式)。另一種選擇是采用三態(tài)輸出緩沖器和輸入緩沖器,二者都在查詢表(LUT)邏輯中實(shí)施。最后一種可行方法是,在I/O環(huán)上采用三態(tài)輸出緩沖器,同時(shí)在LUT中采用輸入緩沖器,這是大多數(shù)綜合器選用的方法。這三種方法都可以生成有效邏輯,但是后兩種實(shí)施方式會(huì)在I/O引腳與LUT之間傳輸信號(hào)時(shí)產(chǎn)生更長(zhǎng)的路由延遲。此外,它們還需要附加的時(shí)序約束,以確保時(shí)序收斂。FPGA編輯器清晰表明:在圖1中,我們的雙向I/O有一部分散布在I/O緩沖器之外。

圖1-FPGA編輯器視圖顯示了部分雙向I/O散布在I/O緩沖器之外教訓(xùn)是切記不要讓綜合工具猜測(cè)如何實(shí)施代碼的關(guān)鍵部分。即使綜合后的邏輯碰巧達(dá)到您的預(yù)期,在綜合工具進(jìn)入新版本時(shí)情況也有可能發(fā)生改變。

應(yīng)當(dāng)明確定義您的I/O邏輯和所有關(guān)鍵邏輯。以下VHDL代碼顯示了如何采用Xilinx?IOBUF原語(yǔ)對(duì)I/O緩沖器進(jìn)行隱含定義。另外需要注意的是,采用相似方式明確定義緩沖器的所有電氣特性。sda_buff:IOBUF

genericmap(IOSTANDARD=>

"LVCMOS25",

IFD_DELAY_VALUE=>"0",DRIVE=>

12,

SLEW=>"SLOW")

portmap(o=>data_out,io=>sda,

i=>data_in,t=>enable_in);

圖2-用一個(gè)VHDL代碼轉(zhuǎn)換明確定義I/O邏輯和關(guān)鍵邏輯,我們已完全在I/O緩沖器內(nèi)部實(shí)施了雙向I/O在圖2中,F(xiàn)PGA編輯器明確顯示,我們已完全在I/O緩沖器內(nèi)部實(shí)施了雙向I/O。

異步邏輯的劣勢(shì)異步代碼會(huì)產(chǎn)生難以約束、仿真及調(diào)試的邏輯。異步邏輯往往產(chǎn)生間歇性錯(cuò)誤,而且這些錯(cuò)誤幾乎無(wú)法重現(xiàn)。另外,無(wú)法生成用于檢測(cè)異步邏輯所導(dǎo)致的錯(cuò)誤的測(cè)試平臺(tái)。雖然異步邏輯看起來(lái)可能容易檢測(cè),但是,事實(shí)上它經(jīng)常不經(jīng)檢測(cè);因此,設(shè)計(jì)人員必須小心異步邏輯在設(shè)計(jì)中隱藏的許多方面。所有鐘控邏輯都需要一個(gè)最短建立與保持時(shí)間,而且這一點(diǎn)同樣適用于觸發(fā)器的復(fù)位輸入。以下代碼采用異步復(fù)位。在此無(wú)法為了滿足觸發(fā)器的建立與保持時(shí)間需求而應(yīng)用時(shí)序約束。data_proc:PROCESS(sys_clk,reset)

BEGIN

if(reset='1')then

data_in<='0';

elsifrising_edge(sys_clk)then

data_in<=serial_in;

endif;

ENDPROCESSdata_proc;下列代碼采用同步復(fù)位。但是,大多數(shù)系統(tǒng)的復(fù)位信號(hào)都可能是按鍵開(kāi)關(guān),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論