VHDL設(shè)計(jì)風(fēng)格和實(shí)現(xiàn)_第1頁(yè)
VHDL設(shè)計(jì)風(fēng)格和實(shí)現(xiàn)_第2頁(yè)
VHDL設(shè)計(jì)風(fēng)格和實(shí)現(xiàn)_第3頁(yè)
VHDL設(shè)計(jì)風(fēng)格和實(shí)現(xiàn)_第4頁(yè)
VHDL設(shè)計(jì)風(fēng)格和實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 1 頁(yè)VHDL設(shè)計(jì)風(fēng)格和實(shí)現(xiàn)VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 2 頁(yè)內(nèi)容概述一、同步設(shè)計(jì)二、速度三、資源四、其他VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 3 頁(yè)一、同步設(shè)計(jì)VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 4 頁(yè)什么是同步設(shè)計(jì)?w 同步設(shè)計(jì):上游數(shù)據(jù)到下游邏輯單元的傳遞是通過(guò)時(shí)鐘來(lái)同步的。- 只要能滿足時(shí)延要求,就可以確保下游邏輯單元能正確采樣到上游數(shù)據(jù)。w 異步設(shè)計(jì):上游數(shù)據(jù)發(fā)生變化的時(shí)機(jī)是不確定的,甚至?xí)霈F(xiàn)中間態(tài)。- 下游邏輯對(duì)上游數(shù)據(jù)的采樣是不確定的,會(huì)發(fā)生數(shù)據(jù)傳遞的錯(cuò)誤。VHDL

2、 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 5 頁(yè)為什么要做同步設(shè)計(jì) ?w兩年前我做的FPGA設(shè)計(jì),現(xiàn)在卻不能工作。FPGA本身有什么變化嗎?- 如果采用的是異步設(shè)計(jì),能否工作有很多無(wú)法控制的隨機(jī)因素。w我的設(shè)計(jì)原來(lái)可以工作,但將FPGA重新布線后,就不行了。怎么回事?- 異步設(shè)計(jì)也許在特定布線下能工作,但布線改變后就不行了。很危險(xiǎn)吧?w我的設(shè)計(jì)通過(guò)了時(shí)間仿真,但上板調(diào)試時(shí)不干活。時(shí)間仿真對(duì)不對(duì)?- 對(duì)于異步設(shè)計(jì),通過(guò)了時(shí)間仿真也不一定能正常工作。w要小心,時(shí)鐘信號(hào)可別產(chǎn)生毛刺啊。w要小心,異步復(fù)位可別有毛刺啊。w快速FPGA中的觸發(fā)器會(huì)對(duì)非常窄的毛刺信號(hào)作出反應(yīng)。- 異步設(shè)計(jì)中,設(shè)計(jì)者老要

3、想著去消除時(shí)鐘、異步復(fù)位信號(hào)以及鎖存器使能端的毛刺,但這一點(diǎn)在異步設(shè)計(jì)中很困難,甚至不可能。異步設(shè)計(jì)可能會(huì)產(chǎn)生以下問(wèn)題:同步設(shè)計(jì)的一個(gè)簡(jiǎn)單原則同步設(shè)計(jì)的一個(gè)簡(jiǎn)單原則: 永遠(yuǎn)不要將組合邏輯產(chǎn)生永遠(yuǎn)不要將組合邏輯產(chǎn)生的信號(hào)用作時(shí)鐘、異步復(fù)位的信號(hào)用作時(shí)鐘、異步復(fù)位/置位。置位。VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 6 頁(yè)門(mén)產(chǎn)生的時(shí)鐘有問(wèn)題w 此例中,計(jì)數(shù)終點(diǎn)信號(hào)會(huì)產(chǎn)生毛刺,使用該信號(hào)作時(shí)鐘會(huì)引起問(wèn)題。- MSB布線更短,信號(hào)變化先到達(dá)與門(mén)。與門(mén)會(huì)“感知”到1111的中間態(tài)。由于與門(mén)為電平敏感,會(huì)輸出高電平的毛刺,從而引起寄存器的誤動(dòng)作。布線更短此處會(huì)產(chǎn)生毛刺,并且與計(jì)數(shù)器的時(shí)鐘無(wú)關(guān)

4、MSB0111 1000 計(jì)數(shù)器的操作為:0111 1111 1000 因?yàn)镸SB更快計(jì)數(shù)器flopMSB此處的與門(mén)為電平敏感VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 7 頁(yè)相應(yīng)的VHDL代碼signal Counter: std_logic_vector(3 downto 0);signal TC:std_logic;signal flop:std_logic;process(Clk)beginif rising_edge(Clk) thenCounter = Counter + 1;end if;end process;TC = 1 when Counter=“1111” el

5、se 0;-TC為組合邏輯輸出process(TC)beginif rising_edge(TC) then-使用組合邏輯輸出作時(shí)鐘,是異步設(shè)計(jì),禁止!flop = end if;end process;VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 8 頁(yè)毛刺和同步設(shè)計(jì)u 組合邏輯的毛刺通常總是存在,難于甚至無(wú)法消除u 毛刺只有在異步設(shè)計(jì)中(連接到時(shí)鐘、異步復(fù)位、鎖存器的使能端)才存在問(wèn)題u 在同步設(shè)計(jì)中,由于寄存器在時(shí)鐘沿才會(huì)動(dòng)作,只要能滿足時(shí)延要求,就能確保采樣到穩(wěn)定正確的結(jié)果u 毛刺無(wú)法消除,但其造成的問(wèn)題卻可以消除 采用同步設(shè)計(jì)并達(dá)到時(shí)延要求VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000

6、年6月10日 第 9 頁(yè)安全同步化異步輸入一例去抖動(dòng)邏輯DQR異步輸入系統(tǒng)時(shí)鐘同步輸入設(shè)備外圍DQDQ延遲一個(gè)周期后才復(fù)位,確保D端輸入脈沖至少有一個(gè)周期的寬度,沒(méi)有中間態(tài)異步輸入的信號(hào)變化時(shí)機(jī)和寬度不確定,有抖動(dòng)(毛刺),不能直接被同步系統(tǒng)正確采樣該邏輯確保能正確得到異步輸入的上升沿。一個(gè)時(shí)鐘周期內(nèi)的多次電平變化被認(rèn)為是抖動(dòng)(毛刺),最后只得到一個(gè)上升沿。VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 10 頁(yè)相應(yīng)的VHDL代碼signal AsynInput:std_logic;signal InputReg:std_logic;signal Delay:std_logic;sign

7、al SynInput:std_logic;process(SynInput, AsynInput)beginif SynInput=1 then-此置位為寄存器信號(hào),為同步設(shè)計(jì),可行InputReg = 0;if rising_edge(AsynInput) thenInputReg = 1;end if;end process;process(Clk) beginif rising_edge(Clk) thenDelay = InputReg;SynInput = Delay;end if;VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 11 頁(yè)DQ3Async RINPUTCLOC

8、KCounterQ2Q1Q0DQ同步設(shè)計(jì)方法中TC的生成和使用對(duì)照前面異步設(shè)計(jì)中TC生成和使用的例子TCVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 12 頁(yè)相應(yīng)的VHDL代碼signal Counter: std_logic_vector(3 downto 0);signal TC:std_logic;signal flop:std_logic;process(TC, Clk)beginif TC=1 then-此復(fù)位為寄存器信號(hào),為同步設(shè)計(jì),可行Counter = “0000”;TC = -;elsif rising_edge(Clk) thenCounter = Counter

9、+ 1;if Counter=“1110” then-注意和異步設(shè)計(jì)中TC信號(hào)的比較-此處TC為寄存器輸出TC = 1;elseTC = 0;end if;end if;end process;VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 13 頁(yè)同步設(shè)計(jì)的更多例子(可行)DQ1DTCCounterINPUTCLOCKCounterQ0INPUTCLOCKDCEQRSDATAVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 14 頁(yè)相應(yīng)的VHDL代碼例2signal Counter: std_logic_vector(3 downto 0);signal TC: std_logic

10、;signal s: std_logic;process(Clk)begin if rising_edge(Clk) then if INPUT=1 then Counter = Counter + 1; end if; if TC=1 then -TC 用在寄存器的CE端,為同步設(shè)計(jì),可行 s = DATA;end if; end if;end process;TC = 1 when Counter=“1111” else 0;-TC為組合邏輯輸出例1signal Counter: std_logic_vector(1 downto 0);process(Clk)begin if risin

11、g_edge(Clk) then if INPUT=1 and Counter/=“11” then Counter = Counter + 1; end if; -組合邏輯用在寄存器的D端, -為同步設(shè)計(jì),可行 end if;end process;VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 15 頁(yè)異步設(shè)計(jì)的更多例子(禁止)DQ1Async RDTCCounter這些例子有什么問(wèn)題 ?INPUTCLOCKCounterQ0INPUTCLOCKDCEQRSDATAVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 16 頁(yè)相應(yīng)的VHDL代碼例2signal Counter: st

12、d_logic_vector(3 downto 0);signal TC: std_logic;signal s: std_logic;process(Clk)begin if rising_edge(Clk) then if INPUT=1 then Counter = Counter + 1; end if;end if;end process;TC = 1 when Counter=“1111” else 0;-TC為組合邏輯輸出process(TC)begin if rising_edge(TC)=1 then -TC 用作寄存器的時(shí)鐘,為異步設(shè)計(jì),禁止! s = DATA; end

13、if;end process;例1signal Counter: std_logic_vector(1 downto 0);process(Counter, Clk)begin if Counter=“11” then -組合邏輯用作寄存器的異步復(fù)位, -為異步設(shè)計(jì),禁止! Counter = “00”; elsif rising_edge(Clk) then if INPUT=1 then Counter = Counter + 1; end if;end if;end process;VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 17 頁(yè)二、速度VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000

14、年6月10日 第 18 頁(yè)中間態(tài)、時(shí)延和速度w當(dāng)寄存器間數(shù)據(jù)傳遞的時(shí)延超過(guò)一個(gè)時(shí)鐘周期,下游寄存器不能在下一個(gè)時(shí)鐘周期采樣到本時(shí)鐘周期給出的上游數(shù)據(jù),出現(xiàn)錯(cuò)誤。w當(dāng)時(shí)鐘來(lái)臨時(shí),寄存器輸入發(fā)生變化,會(huì)采樣到中間態(tài)。- 建立時(shí)間不能被滿足,就會(huì)采樣到中間態(tài),最后的采樣結(jié)果不確定。w避免采樣不到和采樣到中間態(tài)的方法是滿足時(shí)延要求w系統(tǒng)中的最大時(shí)延決定了系統(tǒng)的速度,也決定了系統(tǒng)能正常工作的最大時(shí)鐘頻率。DCLKQCLKDQ當(dāng)建立時(shí)間不夠時(shí),會(huì)采樣到中間態(tài),最后的采樣結(jié)果不確定。建立時(shí)間DCLKQDCLKQVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 19 頁(yè)時(shí)延中包括時(shí)鐘歪斜(Skew)w 下

15、面邏輯中,數(shù)據(jù)時(shí)延很小(最大3.6ns),如果時(shí)鐘歪斜較小,該邏輯可以跑200MHz以上。w 由于存在時(shí)鐘歪斜,F(xiàn)lop B到Flop C的實(shí)際時(shí)延為3.3+12.1-3.6=11.8ns,在100MHz下就不能工作。w 計(jì)算速度時(shí)要考慮時(shí)鐘歪斜的影響。w 使用全局驅(qū)動(dòng),可以減少時(shí)鐘歪斜。DQINPUTCLOCKDQDQFlop C12.13.63.33.63.13.0Flop BFlop AVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 20 頁(yè)時(shí)延級(jí)數(shù)怎么算?w FPGA的時(shí)延通常 布線占50%,邏輯占50%w 不要忘記了時(shí)鐘到輸出的時(shí)間 (tco,輸出時(shí)間)和時(shí)鐘到建立的時(shí)間 (t

16、su,建立時(shí)間)- 邏輯時(shí)延級(jí)數(shù)總會(huì)包括這兩級(jí)。w 還需要檢查I/O的速度。DCEQRPDCEQRPVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 21 頁(yè)XCV100-4的例子w 3級(jí)邏輯的速度有多快?w 布線時(shí)延大致可估算為與邏輯時(shí)延相等 下面Slice的時(shí)延是Tilo,從F,G經(jīng)過(guò)LUT輸出的時(shí)延DCEQDCEQ Tcko+布線布線 +Tilo+布線布線 +Tilo + 布線布線 + Tilo +布線布線 + Tdick 1.372+1.057+0.738+1.057+0.738+1.057+0.738+1.405+ 0.765= 8.927ns 或者或者 110MHz VHDL

17、設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 22 頁(yè)速度估計(jì)w用邏輯時(shí)延作為網(wǎng)絡(luò)時(shí)延的估計(jì)用邏輯時(shí)延作為網(wǎng)絡(luò)時(shí)延的估計(jì)w已知系統(tǒng)的時(shí)鐘頻率,可以估計(jì)允許的邏輯深度已知系統(tǒng)的時(shí)鐘頻率,可以估計(jì)允許的邏輯深度和功能需求相對(duì)照,修改設(shè)計(jì)以滿足性能需要。w在在50 MHz下使用下使用XCV100-4的例子的例子:時(shí)鐘周期20 ns一級(jí)布線時(shí)延- 5 ns (Tcko + Tnet + Tick) Tcko+Tick=2.871ns允許增加時(shí)延=15 ns每增加一級(jí)的時(shí)延/ 1.52 ns (Tilo + Tnet) Tilo=0.738ns允許增加的級(jí)數(shù)=710 SlicesTckoTnetTiloT

18、netTiloTnetTickSliceSliceSliceSlice注意此Slice中使用了LUT,所以建立時(shí)間是Tick而不是Tdick,這種映射結(jié)果減少了一級(jí)布線時(shí)延VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 23 頁(yè)對(duì)高扇出的網(wǎng)絡(luò)使用全局驅(qū)動(dòng)w 設(shè)計(jì)中,有高扇出的時(shí)鐘使能、IOB三態(tài)以及其他信號(hào)嗎?w 使用剩余的BUFG來(lái)驅(qū)動(dòng)它們,以達(dá)到更小的歪斜和更高的性能w 使用BUFG,時(shí)鐘和CE輸入的歪斜可以小于1nsw 使用BUFG的方法,實(shí)例化BUFG,將相應(yīng)信號(hào)連接上去DCEQRPCE or OE or RSTINPUTCLOCKBUFGVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6

19、月10日 第 24 頁(yè)使用全局復(fù)位有助于提高速度w所有的觸發(fā)器在上電時(shí)通過(guò)全局置位/復(fù)位(GSR)網(wǎng)絡(luò)進(jìn)行初始化w你可以通過(guò)實(shí)例化( instantiating )STARTUP 元件( primitive)訪問(wèn)GSR網(wǎng)絡(luò)。斷言(assert)GSR進(jìn)行全局置位/復(fù)位GSR自動(dòng)連接到所有CLB的觸發(fā)器,使用專(zhuān)用的布線資源。使用GSR,可以節(jié)約通用布線資源,減小布線時(shí)延,提高系統(tǒng)速度不要連接不要連接GSR到觸發(fā)器的復(fù)位、置位輸入端w任何信號(hào)(如內(nèi)部信號(hào)、外部輸入等)都可以連接到GSR,但該信號(hào)必須在設(shè)計(jì)中定義。w盡可能使用全局復(fù)位限制使用非全局復(fù)位的異步復(fù)位的觸發(fā)器數(shù)量非全局復(fù)位會(huì)使用額外的布線

20、資源GR/GSRGTSCLKQ1Q2Q3DoneInSTARTUPQ4VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 25 頁(yè)VHDL代碼中的復(fù)位u在下面的VHDL中,應(yīng)該在Rst中對(duì)寄存器賦值,否則Rst信號(hào)會(huì)被綜合成寄存器的CE端的一個(gè)輸入。- 浪費(fèi)布線資源、增加邏輯級(jí)數(shù),降低系統(tǒng)速度u 即使不關(guān)心寄存器的復(fù)位狀態(tài),也應(yīng)該對(duì)其賦初值,可以賦初值為“-”,即“Donnt care”。這樣,寄存器的復(fù)位端不會(huì)被使用,節(jié)約布線資源Process(Rst,Clk)begin if Rst=1 then DataValid = 0; Data(31 downto 0) -); -這個(gè)語(yǔ)句一定要

21、寫(xiě),否則Rst信號(hào)會(huì)被綜合成寄存器 -Data到DataCE端的一個(gè)輸入 elsif rising_edge(Clk) then DataValid = f(x); Data = g(y);-f(x),g(x)表示組合邏輯 end if;end process;小技巧: 對(duì)于邏輯向量std_logic_vector的賦值,可以使用“()”來(lái)表示。如:signal ptr: std_logic_vector(14 downto 0);ptr = 000 & x000; 可以寫(xiě)成 ptr 0);ptr(12 downto 7) = - 可以寫(xiě)成 ptr(12 downto 7) -);pt

22、r = -00 & x000; 可以寫(xiě)成 ptr -, others=0);VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 26 頁(yè)采用流水線邏輯來(lái)提高速度w FPGA觸發(fā)器資源豐富w 增加流水線邏輯級(jí)數(shù),可提高系統(tǒng)速度DCEQRPDCEQRPDCEQRPDCEQRPDCEQRP25MHz50MHzVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 27 頁(yè)4-5輸入的邏輯函數(shù)對(duì)速度和密度最有利w Xilinx FPGA由四輸入查找表(LUT)組成。w 一個(gè)查找表能實(shí)現(xiàn)其輸入形成的任何邏輯函數(shù) 相當(dāng)于編址ROM,將輸入作為地址,查找出函數(shù)結(jié)果。w LUT能實(shí)現(xiàn)的函數(shù)只受輸入數(shù)目

23、限制,不受函數(shù)復(fù)雜度限制w 一個(gè)Slice中可用兩個(gè)LUT和選擇器實(shí)現(xiàn)5輸入的任何邏輯。 減少函數(shù)輸入(扇入)來(lái)適合Slice,可以提高邏輯密度和速度。w 取反不耗費(fèi)資源(free)。CLB Lookup TableVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 28 頁(yè)狀態(tài)機(jī)的三種類(lèi)型編碼與速度w二進(jìn)制: 狀態(tài)序列如同計(jì)數(shù)器序列,S1 = 001, S2=010, S3=011, S4=100, etcw枚舉: 狀態(tài)有指定的值, S1=100, S2=110, S3=101, S4 = 111, etcwOne Hot(單熱): 每個(gè)狀態(tài)只有一個(gè)寄存器有效,S1=00000001, S

24、2=00000010, S3=00000100, etcw在狀態(tài)機(jī)從當(dāng)前狀態(tài)跳到下一狀態(tài)時(shí),二進(jìn)制和枚舉類(lèi)型有大量的反饋輸入。這對(duì)CPLD(如XC9500)來(lái)說(shuō)是比較合適的。w在FPGA中, 使用二進(jìn)制和枚舉類(lèi)型可能會(huì)占用較少資源但肯定比one-hot 編碼慢。- One Hot每個(gè)狀態(tài)只需提供一位反饋輸入VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 29 頁(yè)狀態(tài)機(jī)的速度w 對(duì)于較大的狀態(tài)機(jī),使用One Hot編碼w 二進(jìn)制或者枚舉編碼,對(duì)于較小的狀態(tài)機(jī)合適。w記住四輸入查找表!狀態(tài)機(jī)可能會(huì)有很多的扇入,和大量的反饋,對(duì)速度不利w 使用One Hot, 并限制輸入狀態(tài)數(shù),使輸入限制到4

25、-5,可以達(dá)到最高的速度。Input 1Input 3State 4State 6State 191 LUTVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 30 頁(yè)DQfn1DQfn1DQfn1對(duì)高扇出網(wǎng)絡(luò),通過(guò)復(fù)制寄存器來(lái)提高速度w 高扇出網(wǎng)絡(luò)(16個(gè)負(fù)載)難于布線,而且較慢w 考慮在示意圖或VHDL中復(fù)制資源來(lái)改進(jìn)布線和速度w Foundation工具不會(huì)自動(dòng)完成這種功能w 將復(fù)制寄存器命名為 _a, _b, _c, 不要不要用1,2,3. 這樣,F(xiàn)oundation映射(map)時(shí)會(huì)更有效.VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 31 頁(yè)計(jì)數(shù)終點(diǎn)信號(hào)提前譯碼以提高速度

26、w 對(duì)大的計(jì)數(shù)器而言,譯碼產(chǎn)生計(jì)數(shù)終點(diǎn)信號(hào)需要邏輯級(jí)數(shù)較多- 提前一個(gè)時(shí)鐘周期譯碼計(jì)數(shù)終點(diǎn)信號(hào),寄存后使用,可以提高速度,并保持時(shí)序關(guān)系不變。LDQ0Q1Q2Q3COD0D1D2D3CECDQCECDATA0DATA1DATA2DATA3ENABLECLOCKVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 32 頁(yè)復(fù)制組合邏輯以提高速度w 如果Logic Replication選項(xiàng)被選中,F(xiàn)oundation會(huì)自動(dòng)復(fù)制組合邏輯 速度/面積的交易w 通過(guò)復(fù)制組合邏輯,將邏輯合并入一個(gè)Slice中,減少了邏輯級(jí)數(shù)w 你的邏輯表達(dá)會(huì)影響映射結(jié)果。 扇出大于1的網(wǎng)絡(luò)可能在Slice之外。 留意速

27、度關(guān)鍵路徑的映射結(jié)果O1I1O1I1N1N1 必須輸出到兩個(gè)地方,所以O(shè)1需要兩級(jí)邏輯復(fù)制第一個(gè)門(mén),使得邏輯可以合并入一級(jí)邏輯中N1AN1BVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 33 頁(yè)速度關(guān)鍵輸入應(yīng)在邏輯最后一級(jí)提供w 關(guān)鍵輸入應(yīng)該在邏輯最后一級(jí)提供 關(guān)鍵輸入為芯片、Slice、或者LUT提供的時(shí)延最大的輸入 在示意圖中,將關(guān)鍵輸入連接在邏輯最后一級(jí) 在VHDL中,將關(guān)鍵輸入放在ifelsif鏈的第一級(jí)CLBCLBIN (Critical)FHI0 (Critical)OUTVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 34 頁(yè)使用進(jìn)位邏輯提高速度和密度密度w 使用S

28、lice中的進(jìn)位邏輯可提高算術(shù)運(yùn)算速度 XCV100-4的例子的例子(具體數(shù)據(jù)有待驗(yàn)證)具體數(shù)據(jù)有待驗(yàn)證) 16-bit 加法器(不使用進(jìn)位)10 Slices & 38Mhz 16-bit 加法器(使用進(jìn)位) 8 Slices & 63Mhz 32-bit 加法器(不使用進(jìn)位)21 Slices & 27Mhz 32-bit 加法器(使用進(jìn)位)17 Slices & 44Mhzw 通過(guò)進(jìn)位的串行實(shí)現(xiàn)可以提高密度 每個(gè)Slice可以實(shí)現(xiàn)2位 進(jìn)位鏈; 例如:XCV100 有30 x20 CLB, 一條進(jìn)位鏈最多可以實(shí)現(xiàn)40位的加法器,一個(gè)48位加法器需要兩條鏈w

29、 使用庫(kù)中基于進(jìn)位的宏(RPM) 或者LogiBLOXw 許多庫(kù)中的算術(shù)函數(shù)是RPM ADDx 加法器, ADSUx 加法/減法器, CCx 計(jì)數(shù)器 COMPMCx magnitude 比較器w RPM 指相對(duì)定位宏 通過(guò)RLOC屬性指定布局相對(duì)位置。 進(jìn)位邏輯的相對(duì)布局需要使用垂直進(jìn)位邏輯連接VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 35 頁(yè)了解進(jìn)位鏈流向w XC4000E/L和Spartan/XL進(jìn)位鏈流向?yàn)樯舷聝蓚€(gè)方向w XC4000EX/XL/XV和Virtex器件的進(jìn)位鏈流向只能向上XC4000ESpartan/XLXC4000EX/XL/XVVirtexLSBMSBVH

30、DL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 36 頁(yè)編碼:只有在必要時(shí)才使用二進(jìn)制序列w可以生成各種需要的序列,而不僅限于二進(jìn)制w使用預(yù)縮放(prescale)技術(shù)來(lái)提高速度低位(LSBs)翻轉(zhuǎn)很快參見(jiàn)Application Notes XAPP001 and XAPP014w如果要譯碼輸出,使用格林(Gray)碼計(jì)數(shù)器每次只翻轉(zhuǎn)一位,可以避免譯碼產(chǎn)生毛刺w如果只需要計(jì)數(shù)終點(diǎn),考慮使用線性反饋移位寄存器(LFSR)提高速度。生成序列可以覆蓋的地址空間為2n-1,全0不包含在序列中。n取不同值時(shí),用來(lái)生成反饋位的兩位不同,參見(jiàn)相關(guān)資料在可以采用任意規(guī)則序列的情況下,也可以使用LFSR (比

31、如, FIFO) 進(jìn)位較慢的進(jìn)位較慢的大計(jì)數(shù)器大計(jì)數(shù)器TCCE快速的快速的小小計(jì)數(shù)器計(jì)數(shù)器 10-bit SRQ0Q9Q6VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 37 頁(yè)使用預(yù)縮放(Pre-scale)提高計(jì)數(shù)器速度w 計(jì)數(shù)器的速度由從LSB到MSB的進(jìn)位延遲決定w 預(yù)縮放技術(shù)對(duì)較大的計(jì)數(shù)器特別有益- 低位翻轉(zhuǎn)很快,用低位的TC作為高位的CE,可以降低高位的時(shí)鐘頻率- 使用TimeSpecs進(jìn)行約束w 預(yù)縮放技術(shù)限制了載入時(shí)間,故計(jì)數(shù)器不可加載w 參考XAPP014快速的快速的小計(jì)數(shù)器小計(jì)數(shù)器進(jìn)位較慢的進(jìn)位較慢的大計(jì)數(shù)器大計(jì)數(shù)器TCCEVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月1

32、0日 第 38 頁(yè)I/O 速度:FPGA的建立時(shí)間 TsuwFPGA的輸入輸出也有時(shí)延要求。w滿足時(shí)延要求的FPGA建立時(shí)間由: 全局時(shí)鐘時(shí)延Tbufg 、板上時(shí)延Tbrd和上游器件的輸出時(shí)間Tco(up)決定。wFPGA建立時(shí)間(Tsu)的計(jì)算公式:Tsu-fpga = Tcyc -Tco(up)- Tbrd + Tbufgw可以使用“OFFSET IN”對(duì)Tsu進(jìn)行約束DCEQ上游器件上游器件DCEQXCV400 FPGAClock (Tcyc)Tco(up)TbrdTbufgTsuVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 39 頁(yè)I/O速度:FPGA的輸出時(shí)間Tcow FPG

33、A輸出時(shí)間的計(jì)算公式:Tco = Tcyc - Tsu(down) - Tbrd - Tbufgw 使用“OFFSET OUT”對(duì)Tco進(jìn)行約束DCEQXCV400 FPGADCEQ下游器件下游器件Clock (Tcyc)TcoTbrdTbufgTsu(down)VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 40 頁(yè)OPADOBUFFAST使用快歪斜率提高輸出速度w 歪斜率控制輸出速度w 缺省使用“slow”歪斜率,以降低噪音w 當(dāng)速度重要時(shí),使用“fast”歪斜率 FAST是輸出邏輯元件(primitive)的一個(gè)參數(shù) 可以通過(guò)加入FAST約束實(shí)現(xiàn)。VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 200

34、0年6月10日 第 41 頁(yè)使用I/O寄存器提高輸入和輸出速度w使用IOB中的I/O寄存器,可以提高輸入和輸出速度- 輸入或輸出可以去除從內(nèi)部布線的時(shí)延,IOB中的時(shí)延也更小- 還可以節(jié)約寄存器資源w實(shí)現(xiàn)選項(xiàng)中,選擇“Pack I/O Registers/Latches into IOBs for Inputs and Outputs”- 輸入若未寄存,直接扇入到組合邏輯,則不能map到IO寄存器中- 輸出若為組合邏輯輸出,或者需要反饋為輸入,則不能map到IO寄存器中DCEQDCEQI/O padFrom: FPGAInto: FPGAOFFIFFOutput ClockInput Cloc

35、kVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 42 頁(yè)使用I/O寄存器的例子(FPGA-FPGA)DCEQ發(fā)送器發(fā)送器(XCV100-4 FPGA)DCEQ接收器接收器(XCV100-4 FPGA)使用IOB中寄存器的時(shí)延Tiockp + PCB網(wǎng)絡(luò)時(shí)延 + Tiopick5.649 1.962=7.611不使用IOB中寄存器的時(shí)延(Tcko + Tnet +Tioop) + PCB網(wǎng)絡(luò)時(shí)延 + (Tiopi + Tnet + Tdick) (1.372 +0.756+5.652)(0.989+ 1.930+0.728)7.7803.647 =11.427VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn),

36、2000年6月10日 第 43 頁(yè)輸入速度:可編程的輸入時(shí)延w FPGA的輸入通道上有一個(gè)可編程的時(shí)延w 可以用來(lái)在建立時(shí)間和保持時(shí)間之間達(dá)到妥協(xié)。w 可選擇全部、部分或無(wú)時(shí)延w 缺省為全時(shí)延,以使保持時(shí)間的需求為0w 可在UCF中進(jìn)行控制。DCEQXC4000 FPGA輸入時(shí)延輸入時(shí)延BUFGXC4036XL-1的例子的例子:時(shí)延情況時(shí)延情況 建立時(shí)間建立時(shí)間保持時(shí)間保持時(shí)間全時(shí)延全時(shí)延: Tsu = 5.8nsTh = 0 ns部分時(shí)延部分時(shí)延: Tsu = 4.8nsTh = 1 ns無(wú)時(shí)延無(wú)時(shí)延: Tsu = 0.9nsTh = 4.1nsVHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10

37、日 第 44 頁(yè)I/O速度的其他提示w XC4000-13,36,62XL是turbo boosted。w 使用BUFG,可提高pin to pin時(shí)延VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 45 頁(yè)三、資源VHDL 設(shè)計(jì)風(fēng)格和實(shí)現(xiàn), 2000年6月10日 第 46 頁(yè)w資源使用量是指FPGA使用了的百分率w在宏、庫(kù)、以及XAPP application notes中找到可比較的函數(shù)來(lái)估計(jì)資源使用量或者,使用別的設(shè)計(jì)來(lái)估計(jì)器件使用率w快速實(shí)現(xiàn),然后查看MAP報(bào)告選擇“Implementation/ View Report Files/ Map report”Slices, IOB

38、s, Block RAMs, 以及其他部件分別列出,并給出使用百分率。最后給出相當(dāng)于ASIC的門(mén)數(shù)資源估計(jì)Design Summary- Number of errors: 0 Number of warnings: 644 Number of Slices: 1,147 out of 1,200 95% Slice Flip Flops: 735 4 input LUTs: 1,046 (1 used as a route-thru) Dual Port RAMs: 312 Number of Slices containing unrelated logic: 0 out of 1,147 0% Number of bonded IOBs:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論