|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業 | CAN-bus/DeviceNe |
FPGA/CPLD數字電路設計經驗分享zz |
| 作者:rickyice 欄目:IC設計 |
一位大蝦的經驗總結,基礎的。 FPGA/CPLD數字電路設計經驗分享 摘要:在數字電路的設計中,時序設計是一個系統性能的主要標志,在高層次設計方法中,對時序控制的抽象度也相應提高,因此在設計中較難把握,但在理解RTL電路時序模型的基礎上,采用合理的設計方法在設計復雜數字系統是行之有效的,通過許多設計實例證明采用這種方式可以使電路的后仿真通過率大大提高,并且系統的工作頻率可以達到一個較高水平。 關鍵詞:FPGA 數字電路 時序 時延路徑 建立時間 保持時間 1 數字電路設計中的幾個基本概念: 1.1 建立時間和保持時間: 建立時間(setup time)是指在觸發器的時鐘信號上升沿到來以前,數據穩定不變的時間,如果建立時間不夠,數據將不能在這個時鐘上升沿被打入觸發器;保持時間(hold time)是指在觸發器的時鐘信號上升沿到來以后,數據穩定不變的時間, 如果保持時間不夠,數據同樣不能被打入觸發器。 如圖1 。 數據穩定傳輸必須滿足建立和保持時間的要求,當然在一些情況下,建立時間和保持時間的值可以為零。 PLD/FPGA開發軟件可以自動計算兩個相關輸入的建立和保持時間(如圖2) 圖1 建立時間和保持時間關系圖 注:在考慮建立保持時間時,應該考慮時鐘樹向后偏斜的情況,在考慮建立時間時應該考慮時鐘樹向前偏斜的情況。在進行后仿真時,最大延遲用來檢查建立時間,最小延時用來檢查保持時間。 建立時間的約束和時鐘周期有關,當系統在高頻時鐘下無法工作時,降低時鐘頻率就可以使系統完成工作。保持時間是一個和時鐘周期無關的參數,如果設計不合理,使得布局布線工具無法布出高質量的時鐘樹,那么無論如何調整時鐘頻率也無法達到要求,只有對所設計系統作較大改動才有可能正常工作,導致設計效率大大降低。因此合理的設計系統的時序是提高設計質量的關鍵。在可編程器件中,時鐘樹的偏斜幾乎可以不考慮,因此保持時間通常都是滿足的。 1.2 FPGA中的競爭和冒險現象 信號在FPGA器件內部通過連線和邏輯單元時,都有一定的延時。延時的大小與連線的長短和邏輯單元的數目有關,同時還受器件的制造工藝、工作電壓、溫度等條件的影響。信號的高低電平轉換也需要一定的過渡時間。由于存在這兩方面因素,多路信號的電平值發生變化時,在信號變化的瞬間,組合邏輯的輸出有先后順序,并不是同時變化,往往會出現一些不正確的尖峰信號,這些尖峰信號稱為"毛刺"。如果一個組合邏輯電路中有"毛刺"出現,就說明該電路存在"冒險"。(與分立元件不同,由于PLD內部不存在寄生電容電感,這些毛刺將被完整的保留并向下一級傳遞,因此毛刺現象在PLD、FPGA設計中尤為突出)圖2是一個邏輯冒險的例子,從圖3的仿真波形可以看出,"A、B、C、D"四個輸入信號經過布線延時以后,高低電平變換不是同時發生的,這導致輸出信號"OUT"出現了毛刺。(我們無法保證所有連線的長度一致,所以即使四個輸入信號在輸入端同時變化,但經過PLD內部的走線,到達或門的時間也是不一樣的,毛刺必然產生)。可以概括的講,只要輸入信號同時變化,(經過內部走線)組合邏輯必將產生毛刺。 將它們的輸出直接連接到時鐘輸入端、清零或置位端口的設計方法是錯誤的,這可能會導致嚴重的后果。 所以我們必須檢查設計中所有時鐘、清零和置位等對毛刺敏感的輸入端口,確保輸入不會含有任何毛刺 圖2 存在邏輯冒險的電路示例 圖3 圖2所示電路的仿真波形 冒險往往會影響到邏輯電路的穩定性。時鐘端口、清零和置位端口對毛刺信號十分敏感,任何一點毛刺都可能會使系統出錯,因此判斷邏輯電路中是否存在冒險以及如何避免冒險是設計人員必須要考慮的問題。 如何處理毛刺 我們可以通過改變設計,破壞毛刺產生的條件,來減少毛刺的發生。例如,在數字電路設計中,常常采用格雷碼計數器取代普通的二進制計數器,這是因為格雷碼計數器的輸出每次只有一位跳變,消除了競爭冒險的發生條件,避免了毛刺的產生。 毛刺并不是對所有的輸入都有危害,例如D觸發器的D輸入端,只要毛刺不出現在時鐘的上升沿并且滿足數據的建立和保持時間,就不會對系統造成危害,我們可以說D觸發器的D輸入端對毛刺不敏感。 根據這個特性,我們應當在系統中盡可能采用同步電路,這是因為同步電路信號的變化都發生在時鐘沿,只要毛刺不出現在時鐘的沿口并且不滿足數據的建立和保持時間,就不會對系統造成危害。 (由于毛刺很短,多為幾納秒,基本上都不可能滿足數據的建立和保持時間) 去除毛刺的一種常見的方法是利用D觸發器的D輸入端對毛刺信號不敏感的特點,在輸出信號的保持時間內,用觸發器讀取組合邏輯的輸出信號,這種方法類似于將異步電路轉化為同步電路。 圖4給出了這種方法的示范電路,圖5是仿真波形。 如前所述,優秀的設計方案,如采用格雷碼計數器,同步電路等,可以大大減少毛刺,但它并不能完全消除毛刺。 毛刺并不是對所有輸入都有危害,例如D觸發器的D輸入端,只要毛刺不出現在時鐘的上升沿并且滿足數據的建立和保持時間,就不會對系統造成危害。因此我們可以說D觸發器的D輸入端對毛刺不敏感。但對于D觸發器的時鐘端,置位端,清零端,則都是對毛刺敏感的輸入端,任何一點毛刺就會使系統出錯,但只要認真處理,我們可以把危害降到最低直至消除。下面我們就對幾種具體的信號進行探討。 1.3 清除和置位信號在FPGA的設計中,全局的清零和置位信號必須經過全局的清零和置位管腳輸入,因為他們也屬于全局的資源,其扇出能力大,而且在FPGA內部是直接連接到所有的觸發器的置位和清零端的,這樣的做法會使芯片的工作可靠、性能穩定,而使用普通的IO腳則不能保證該性能。 在FPGA的設計中,除了從外部管腳引入的全局清除和置位信號外在FPGA內部邏輯的處理中也經常需要產生一些內部的清除或置位信號。清除和置位信號要求象對待時鐘那樣小心地考慮它們,因為這些信號對毛刺也是非常敏感的。 在同步電路設計中,有時候可以用同步置位的辦法來替代異步清0。在用硬件描述語言的設計中可以用如下的方式來描述: 異步清0的描述方法: PROCESS(rst,clk) begin if rst=’1’ then count<=(others=>’0’); elsif clk’event and clk=’1’ then count<=count+1; end if; end PROCESS; 同步清0的描述方法: PROCESS begin wait until clk’event and clk=’1’; if rst=’1’ then count<=(others=>’0’); else count<=count+1; end if; end PROCESS; 1.4 觸發器和所存器: 我們知道,觸發器是在時鐘的沿進行數據的鎖存的,而所存器是用電平使能來鎖存數據的。所以觸發器的Q輸出端在每一個時鐘沿都會被更新,而所存器只能在使能電平有效器件才會被更新。在FPGA設計中建議如果不是必須那么應該盡量使用觸發器而不是所存器。 那么在使用硬件描述語言進行電路設計的時候如何區分觸發器和所存器的描述方法哪?其實有不少人在使用的過程中可能并沒有特意區分過,所以也忽略了二者在描述方法上的區別。下面是用VHDL語言描述的觸發器和所存器以及綜合器產生的電路邏輯圖。 觸發器的語言描述: PROCESS begin wait until clk’event and clk=’1’; q<=d; end PROCESS; 所存器的語言描述: PROCESS(en,d) begin if en=’1’ then q<=d; end if; end PROCESS; 由上述對Latch的描述可見,其很容易于選擇器的描述相混淆,用VHDL語言對選擇器的描述方法如下: PROCESS(en,a,b) begin if en=’1’ then q<=a; else q<=b; end if; end PROCESS; 2 FPGA/CPLD中的一些設計方法 2.1 FPGA設計中的同步設計 異步設計不是總能滿足(它們所饋送的觸發器的)建立和保持時間的要求。因此,異步輸入常常會把錯誤的數據鎖存到觸發器,或者使觸發器進入亞穩定的狀態,在該狀態下,觸發器的輸出不能識別為l或0。如果沒有正確地處理,亞穩性會導致嚴重的系統可靠性問題。 另外,在FPGA的內部資源里最重要的一部分就是其時鐘資源(全局時鐘網絡),它一般是經過FPGA的特定全局時鐘管腳進入FPGA內部,后經過全局時鐘BUF適配到全局時鐘網絡的,這樣的時鐘網絡可以保證相同的時鐘沿到達芯片內部每一個觸發器的延遲時間差異是可以忽略不計的。 在FPGA中上述的全局時鐘網絡被稱為時鐘樹,無論是專業的第三方工具還是器件廠商提供的布局布線器在延時參數提取、分析的時候都是依據全局時鐘網絡作為計算的基準的。如果一個設計沒有使用時鐘樹提供的時鐘,那么這些設計工具有的會拒絕做延時分析有的延時數據將是不可靠的。 在我們日常的設計中很多情形下會用到需要分頻的情形,好多人的做法是先用高頻時鐘計數,然后使用計數器的某一位輸出作為工作時鐘進行其他的邏輯設計。其實這樣的方法是不規范的。比如下面的描述方法: PROCESS begin wait until clk’event and clk=’1’; if fck=’1’ then count<=(others=>’0’); else count<=count+1; end if; end PROCESS; PROCESS begin wait until count(2)’event and count(2)=’1’ ; shift_reg<=data; end PROCESS; 在上述的第一個PROCESS電路描述中,首先計數器的輸出結果(count(2))相對于全局時鐘clk已經產生了一定的延時(延時的大小取決于計數器的位數和所選擇使用的器件工藝);而在第二個PROCESS中使用計數器的bit2作為時鐘,那么shift_reg相對于全局clk的延時將變得不好控制。布局布線器最終給出的時間分析也是不可靠的。這樣產生的結果波形仿真如下圖所示: 正確的做法可以將第二個PROCESS這樣來寫。 PROCESS begin wait |
| 2樓: | >>參與討論 |
| 作者: rickyice 于 2006/4/10 19:40:00 發布:
re 希望對大家有幫助! |
|
| 3樓: | >>參與討論 |
| 作者: phoenixwyf 于 2006/4/12 10:35:00 發布:
GOOD 8錯 |
|
| 4樓: | >>參與討論 |
| 作者: effice 于 2006/4/13 11:01:00 發布:
T=Tco+Tdelay+Tsetup+Tpd??? 注:在這個邏輯圖中有個參數:Tpd ,即時鐘的延時參數,我們在剛才做時間分析的時候,沒有提這個參數,(如果使用PLD的全局時鐘型號,Tpd可以為0,如果是普通時鐘,則不為0)。所以如果考慮到時鐘的延時,精確的公式應該是T=Tco+Tdelay+Tsetup-Tpd。當然以上全部分析的都是器件內部的運行速度,如果考慮芯片I/O管腳延時對系統速度的影響,那么還需要加一些修正。 T=Tco+Tdelay+Tsetup-Tpd我怎么覺得是:T=Tco+Tdelay+Tsetup+Tpd??? |
|
| 5樓: | >>參與討論 |
| 作者: jason_30 于 2006/4/15 10:10:00 發布:
從網上抄的別人的 唉 |
|
| 6樓: | >>參與討論 |
| 作者: tntcnn 于 2006/4/20 16:17:00 發布:
有沒有弄ACTEL的 |
|
| 7樓: | >>參與討論 |
| 作者: rickyice 于 2006/4/24 8:45:00 發布:
Verilog討論組精彩內容摘錄(一) 我遇到了一個問題,希望能得到幫助。 我在用FPGA(ALTERA 10K30)做仿真實驗時,內部的計數器總是計數不正常,但是我在微機中用MODELSim仿真的結果是正確的,所以邏輯應該沒有問題,問題出在FPGA,請教各位,我該如何解決這個問題。謝謝! I met a question,hope someone could do me a favor. when I used FPGA do simulating experiment, i found the inner counter worked abnormally.but if i use MODELSim do such a experiment,everything is ok.so i confirm the problem should be due to FPGA. who can tell me how to deal with this problem? thanks a lot! 回答一: Have you checked clock signal on scope? Those DEVICE really a GOOD clock waveform. 回答二: 你用的片子不會有問題吧,檢查有么有問題可以只做一個計數器看看計數對不對不就的了.我覺得應該是片子的問題. 回答三: 首先請檢查FPGA的使用方法! 回答四: 我覺得片子有問題的可能性比較小,還是應該先找自己的原因,否則我們一出現問題就把責任說成是芯片的問題,那么問題就不好解決了。而且10K30國內也很多人在用,如果連一個計數器都出錯的話,我看ALTERA也就沒什么市場了。 用MODELSim做仿真,只是從語言角度來驗證,它只能說明你的邏輯沒有問題,但邏輯最終是要在芯片中靠邏輯電路來實現,所以必須考慮到芯片的一些特性。不知道你的計數器是多少位的?速度是多少?輸入的信號質量怎么樣? 如果你的計數器位數比較多的話,最好是分兩級或多級來實現,否則很容易在內部因延遲時間不同而造成問題。 回答五: Dear Friend Your words is very right. Anything question? First find from yourself, 2nd others. It is very glad to receive your email. Would you please tell me your NAME and contact address. Best regards wisdom 回答六: 做時序仿真了嗎?用MODELSim做或Maxplus2都可以利用布局布線后的延時信息作時序仿真。我懷疑你只作了功能仿真 回答七: 我認為這個問題可能出在異步邏輯上(如清零、預置),在功能仿真時這個問題有時不能發現,但用時序仿真時會很輕易地發現原因所在。如果采用同步設計的話,這個問題將不會存在。 回答八: Dear Sir Maybe your design have the bug, it is easy that ALTERA is not synthesis HDL company, MODEL sim ensure the HDL simulation right, but the ALTERA MP2 maybe compiler the project into abnormal staus. In fact, MP2 have the AHDL counter LPM, you can directly call the MODULE, it is tested available. Anything I can help you, pls let me know. Our company sales the ALTERA FPGA and MAX7xxx, if you need, pls fell free to contact to me. Best regards Wisdom.Zhang |
|
| 8樓: | >>參與討論 |
| 作者: rickyice 于 2006/4/24 8:46:00 發布:
Verilog討論組精彩內容摘錄(二) 問題: 是不是用FPGA EXPRESS能編譯標準的Verilog HDL語言寫的程序,再生成EDIF文件交給MAX+PLUS處理?具體如何操作? 回答一: 好像MAX+PLUS也能編輯Verilog HDL語言寫的程序,具體做法從文本編輯窗口輸入程序,編譯即可. 回答二: 還是推薦大家用Synplify做綜合吧,對語法的要求不嚴格,軟件也不大。 連ALTERA和XILINX的人都推薦我用。 回答三: Synplify 在綜合方面好一些,但maxplus II 的功能更全面些,我覺得. 回答四: Synplify速度快,但不見得綜合效果好。Leonardo spectrum不錯,還可以綜合到ASIC。 回答五: Half and half, I don't agree the viewpoints. 回答六: Synplify ONLY synthesis, MP2 including all FPGA application function.Their marketing focus is not same. Please advise. 回答七: The web-friend advise is right if your design is not Large-scale, But pls notes that ALTERA is FPGA vendor, not HDL synthesis vendor. If you think your design is very large, for example, you will design with 10K100 or ACEK etc, at least over 5K DFF application, you should apply such as FPGA Express or Exemplar etc tools. 回答八: The Web-friend is very important, I use the Synplify from 1997, it is very GOOD, FPGA Express embbed their core-solution. |
|
| 9樓: | >>參與討論 |
| 作者: rickyice 于 2006/4/24 8:47:00 發布:
Verilog討論組精彩內容摘錄(三) 問題一: 在下才疏學淺,一直在用LATTICE.html">LATTICE的ISPLSI,搞了一些小應用,看到各位都在談論XILINX和ALTERA,本人沒有機會嘗試,究竟哪一種比較好,請高人不吝賜教。 回答一: LATTICE.html">LATTICE 的ISPLSI我畢業設計時用過一枚,感覺其在系統編程是十分方便的,但熔絲圖的生成好象要ispexper這一專門軟件,他支持原理圖輸入和VHDL輸入等,十分方便且0具有邏輯與時序仿真,其燒錄速度(根據熔絲圖大小)相當快,一般幾秒鐘就行了。 回答二: 1、首先可編程器件從結構上分為CPLD和FPGA二類,從制造工藝上有CMOS、FLASH、SRAM、反熔絲等幾種。 2、CPLD一般來講容量較低(注意CPLD和FPGA的門數的定義不一樣,實際上對門沒有統一的定義,不能認為CPLD的10000門的規模就比5000門的規模大,我們比較能接受的是在ASIC中定義一個與非門為一個門)。CPLD的速度一般都較快,時延比較確定(注意:實際設計的時延和速度都要通過時序仿真才能確定,一般來講器件資料中所提到的最高速度在實際設計中是不可能達到的,因為所謂的最高速度是指的一級設計,并且會BYPASS一些路徑。)這和它的結構有關,如:LATTICE有GRP概念,XILINX的9500則提出快速交換矩陣的思想,目的都是為了達到較快的速度。通過對CPLD的結構分析就會發現CPLD的邏輯功能比FFs要多。CPLD一般采用CMOS和FLASH工藝,CMOS的功耗大,但下載的速度快,FLASH的功耗很小,但加載的時間較長,當然還和實際設計的一些情況有關,如:頻率、利用率等。 3、FPGA是相對CPLD而言的,它的規模可以相當大。從結構上講也是大同小異的,一般是由最基本的CELL組成,CELL內部是LUT和FFs,比較綜合考慮了的邏輯和FF的比例關系,當然仔細看的話,每家的結構還是有一些特點的。FPGA的內部布線資源是很豐富的,要設計好FPGA必須充分了解所有的資源情況,并合理地利用。FPGA的一個很大特點是時延不確定,不同的編譯有不同的結果,這一定要牢記!如果設計不好會遇到有些板子可以工作,而有的板子就是不行,盡管用的同一個FPGA數據。 4、CPLD和FPGA不存在哪個好,要根據你的實際情況而選擇。 草草寫一下,以后最談。 問題二: 你好!我想請教幾個問題: 1、什么是FFs 2、在FPGA時延不確定的情況下,怎樣的設計才能保證該設計是比較好的設計,而不會出現盡管用的同一個FPGA數據有些板子可以工作,而有的板子就是不行這種情況呢? 謝謝! 回答一: 1、FFs:觸發器。 2、優化設計;盡量采用同步設計;高速、多驅動通道用全局緩充驅動,合理利用長線資源等。 回答二: FF 是指 Flip Flop,也就是觸發器的最基本單元。 FPGA設計的時候需要特別注意最后實現時的最大延時,如果各條線路的最大延時能夠滿足條件,一般就不會出現什么太大的問題。另外,有些公司已經推出了固定延時的FPGA,只是XILINX公司還沒有。 回答三: The all effect factor, it is important that man-resource and design solution. To FPGA, CPLDs, LATTICE.html">LATTICE , ALTERA, XILINX are all very GOOD, To marketing share, the XILINX is most high. We can design very GOOD function , even discret LOGIC. Do you think so? LATTICE.html">LATTICE, ALTERA ,Xilins , it ONLY is tools. Man is No.1 for ever, so that you did not MUST study ALTERA, XILINX. |
|
| 10樓: | >>參與討論 |
| 作者: 百合花香 于 2006/4/26 12:45:00 發布:
文章很好,支持一下!但是,圖在哪里? |
|
| 11樓: | >>參與討論 |
| 作者: jason_30 于 2006/4/28 10:05:00 發布:
頂 好帖,好像是從可編程網上搞的吧 |
|
| 12樓: | >>參與討論 |
| 作者: kaka_987 于 2006/5/6 12:44:00 發布:
請教我這個分頻電路有編譯問題 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity freqdi is PORT(sela,selb:in std_logic; clkin:in std_logic; clkout:out std_logic; clk100hz:out std_logic); end freqdi; architecture behav of freqdi is constant divi:integer:=10; constant divi_1:integer:=10_000; constant divi_2:integer:=100_000; constant divi_3:integer:=100_000; signal muxval:integer range 4 downto 0; begin clk_div:PROCESS(clkin,sela,selb,muxval) variable cnt:integer range 0 to 9; variable cnt_1:integer range 0 to 9_999; variable cnt_2:integer range 0 to 99_999; begin muxval<=0; if(sela='1')then muxval<=muxval+1;end if; if(selb='1')then muxval<=muxval+2;end if; if rising_edge(clkin)then case muxval is when 0=> if(cnt<(divi/2)) then clkout<='1'; cnt:=cnt+1; elsif(cnt<(divi-1))then clkout<='0'; cnt:=cnt+1; else cnt:=0; end if; when 1=>if(cnt_1<(divi_1/2)) then clkout<='1'; cnt_1:=cnt_1+1; elsif(cnt_1<(divi_1-1))then clkout<='0'; cnt_1:=cnt_1+1; else cnt_1:=0; end if; when 2=>if(cnt_2<(divi_2/2)) then clkout<='1'; cnt_2:=cnt_2+1; elsif(cnt_2<(divi_2-1))then clkout<='0'; cnt_2:=cnt_2+1; else cnt_2:=0; end if; when others=>null; end case; end if; end PROCESS clk_div; clk_100hz:PROCESS(clkin)is variable cnt_3:integer range 0 to 99_999; begin if rising_edge(clkin)then if(cnt_3<(divi_3/2)then clk100hz<='1'; cnt_3:=cnt_3+1; elsif (cnt_3<(divi_3-1))then clk100hz<='0'; cnt_3:=cnt_3+1; else cnt_3:=0; end if; end if; end PROCESS clk_100hz; end behav; |
|
| 13樓: | >>參與討論 |
| 作者: rickyice 于 2006/5/6 20:52:00 發布:
re 貼出error |
|
| 14樓: | >>參與討論 |
| 作者: mrqingfeng 于 2006/5/10 21:08:00 發布:
re 有圖就更好了, |
|
| 15樓: | >>參與討論 |
| 作者: rickyice 于 2006/5/26 14:19:00 發布:
ALTERA設計注意事項 同步和異步 異步邏輯主要用組合邏輯來實現控制,容易因時鐘傳遞延時不一致而產生毛刺。如果可能盡量改成同步邏輯。當輸出信號用于RESET,CLEAR,PRESET時最好改成同步的!同步邏輯用的門數比異步邏輯多,但對ALTERA芯片來說同步和異步用的是同樣多的LC或MC。 CLIQUE的應用 CLIQUE有利于高速設計,應用于有相關性的邏輯,把設計分成小模塊更容易實施CLIQUE。但是Apply CLIQUE at the whole design = No CIQUE at all !!! 組合邏輯設計 組合邏輯容易設計,但要注意處理好毛刺,不要用加固定延時的方式來處理毛刺,最好分析出毛刺產生的原因,然后重新設計新的電路。 編譯 為節省時間,可以選擇模塊,不必所有的都的過程都使用。SMART Recompile可以縮短重新編譯的時間。也可以選擇WYSIWYG綜合方式。并去掉只有定時仿真時需要的SNF Timing Extractor部分。 Setup/Hold Time 仿真時可以檢查Setup/Hold Time,如果發現有問題,要調整輸入的時鐘頻率,特別要注意實際電路的頻率不能導致該問題! 設計高速電路 當電路的頻率比較低時,可以查其Delay Path,查處較大延遲的地方,在可能的地方加入DFF,移動DFF等。純組合邏輯時延會比較大。 三態門 ALTERA 只提供I/O引腳的三態門,不提供內部的三態門。內部三態門被轉化成多路選擇器。 ALTERA指出:其實內部三態門毫無意義。 |
|
| 16樓: | >>參與討論 |
| 作者: rickyice 于 2006/5/26 14:20:00 發布:
FPGA與CPLD的區別 系統的比較,與大家共享: 盡管FPGA和CPLD都是可編程ASIC器件,有很多共同特點,但由于CPLD和FPGA結構上的差異,具有各自的特點: ①CPLD更適合完成各種算法和組合邏輯,FP GA更適合于完成時序邏輯。換句話說,FPGA更適合于觸發器豐富的結構,而CPLD更適合于觸發器有限而乘積項豐富的結構。 ②CPLD的連續式布線結構決定了它的時序延遲是均勻的和可預測的,而FPGA的分段式布線結構決定了其延遲的不可預測性。 ③在編程上FPGA比CPLD具有更大的靈活性。CPLD通過修改具有固定內連電路的邏輯功能來編程,FPGA主要通過改變內部連線的布線來編程;FP GA可在邏輯門下編程,而CPLD是在邏輯塊下編程。 ④FPGA的集成度比CPLD高,具有更復雜的布線結構和邏輯實現。 ⑤CPLD比FPGA使用起來更方便。CPLD的編程采用E2PROM或FASTFLASH技術,無需外部存儲器芯片,使用簡單。而FPGA的編程信息需存放在外部存儲器上,使用方法復雜。 ⑥CPLD的速度比FPGA快,并且具有較大的時間可預測性。這是由于FPGA是門級編程,并且CLB之間采用分布式互聯,而CPLD是邏輯塊級編程,并且其邏輯塊之間的互聯是集總式的。 ⑦在編程方式上,CPLD主要是基于E2PROM或FLASH存儲器編程,編程次數可達1萬次,優點是系統斷電時編程信息也不丟失。CPLD又可分為在編程器上編程和在系統編程兩類。FPGA大部分是基于SRAM編程,編程信息在系統斷電時丟失,每次上電時,需從器件外部將編程數據重新寫入SRAM中。其優點是可以編程任意次,可在工作中快速編程,從而實現板級和系統級的動態配置。 ⑧CPLD保密性好,FPGA保密性差。 ⑨一般情況下,CPLD的功耗要比FPGA大,且集成度越高越明顯。 隨著復雜可編程邏輯器件(CPLD)密度的提高,數字器件設計人員在進行大型設計時,既靈活又容易,而且產品可以很快進入市場。許多設計人員已經感受到CPLD容易使用、時序可預測和速度高等優點,然而,在過去由于受到CPLD密度的限制,他們只好轉向FPGA和ASIC。現在,設計人員可以體會到密度高達數十萬門的CPLD所帶來的好處。 CPLD結構在一個邏輯路徑上采用1至16個乘積項,因而大型復雜設計的運行速度可以預測。因此,原有設計的運行可以預測,也很可靠,而且修改設計也很容易。CPLD在本質上很靈活、時序簡單、路由性能極好,用戶可以改變他們的設計同時保持引腳輸出不變。與FPGA相比,CPLD的I/O更多,尺寸更小。 如今,通信系統使用很多標準,必須根據客戶的需要配置設備以支持不同的標準。CPLD可讓設備做出相應的調整以支持多種協議,并隨著標準和協議的演變而改變功能。這為系統設計人員帶來很大的方便,因為在標準尚未完全成熟之前他們就可以著手進行硬件設計,然后再修改代碼以滿足最終標準的要求。CPLD的速度和延遲特性比純軟件方案更好,它的NRE費用低於ASIC,更靈活,產品也可以更快入市。CPLD可編程方案的優點如下: ●邏輯和存儲器資源豐富(CYPRESS Delta39K200的RAM超過480 Kb) ●帶冗余路由資源的靈活時序模型 ●改變引腳輸出很靈活 ●可以裝在系統上后重新編程 ●I/O數目多 ●具有可保證性能的集成存儲器控制邏輯 ●提供單片CPLD和可編程PHY方案 由于有這些優點,設計建模成本低,可在設計過程的任一階段添加設計或改變引腳輸出,可以很快上市 CPLD的結構 CPLD是屬於粗粒結構的可編程邏輯器件。它具有豐富的邏輯資源(即邏輯門與寄存器的比例高)和高度靈活的路由資源。CPLD的路由是連接在一起的,而FPGA的路由是分割開的。FPGA可能更靈活,但包括很多跳線,因此速度較CPLD慢。 CPLD以群陣列(array of clusters)的形式排列,由水平和垂直路由通道連接起來。這些路由通道把信號送到器件的引腳上或者傳進來,并且把CPLD內部的邏輯群連接起來。 CPLD之所以稱作粗粒,是因為,與路由數量相比,邏輯群要大得到。CPLD的邏輯群比FPGA的基本單元大得多,因此FPGA是細粒的。 CPLD的功能塊 CPLD最基本的單元是宏單元。一個宏單元包含一個寄存器(使用多達16個乘積項作為其輸入)及其它有用特性。 因為每個宏單元用了16個乘積項,因此設計人員可部署大量的組合邏輯而不用增加額外的路徑。這就是為何CPLD被認為是“邏輯豐富”型的。 宏單元以邏輯模塊的形式排列(LB),每個邏輯模塊由16個宏單元組成。宏單元執行一個AND操作,然后一個OR操作以實現組合邏輯。 每個邏輯群有8個邏輯模塊,所有邏輯群都連接到同一個可編程互聯矩陣。 每個群還包含兩個單端口邏輯群存儲器模塊和一個多端口通道存儲器模塊。前者每模塊有8,192b存儲器,后者包含4,096b專用通信存儲器且可配置為單端口、多端口或帶專用控制邏輯的FIFO。 CPLD有什麼好處? I/O數量多 CPLD的好處之一是在給定的器件密度上可提供更多的I/O數,有時甚至高達70%。 時序模型簡單 CPLD優于其它可編程結構之處在于它具有簡單且可預測的時序模型。這種簡單的時序模型主要應歸功于CPLD的粗粒度特性。 CPLD可在給定的時間內提供較寬的相等狀態,而與路由無關。這一能力是設計成功的關鍵,不但可加速初始設計工作,而且可加快設計調試過程。 粗粒CPLD結構的優點 CPLD是粗粒結構,這意味著進出器件的路徑經過較少的開關,相應地延遲也小。因此,與等效的FPGA相比,CPLD可工作在更高的頻率,具有更好的性能。 CPLD的另一個好處是其軟件編譯快,因為其易于路由的結構使得布放設計任務更加容易執行。 細粒FPGA結構的優點 FPGA是細粒結構,這意味著每個單元間存在細粒延遲。如果將少量的邏輯緊密排列在一起,FPGA的速度相當快。然而,隨著設計密度的增加,信號不得不通過許多開關,路由延遲也快速增加,從而削弱了整體性能。CPLD的粗粒結構卻能很好地適應這一設計布局的改變。 靈活的輸出引腳 CPLD的粗粒結構和時序特性可預測,因此設計人員在設計流程的后期仍可以改變輸出引腳,而時序仍保持不變。 新的CPLD封裝 CPLD有多種密度和封裝類型,包括單芯片自引導方案。自引導方案在單個封裝內集成了FLASH存儲器和CPLD,無須外部引導單元,從而可降低設計復雜性并節省板空間。在給定的封裝尺寸內,有更高的器件密度共享引腳輸出。這就為設計人員提供了“放大”設計的便利,而無須更改板上的引腳輸出。 |
|
| 17樓: | >>參與討論 |
| 作者: rickyice 于 2006/5/26 14:22:00 發布:
常用FPGA/PLD開發軟件簡介 集成的PLD/FPGA開發環境 這類軟件都是由PLD/FPGA芯片廠家提供,基本都可以完成所有的設計輸入(原理圖或HDL),仿真,綜合,布線,下載等工作。 ALTERA公司 上一代的PLD開發軟件,使用者眾多。目前ALTERA已經停止開發MaxplusII,而轉向QuartusII軟件平臺 該軟件有幾個版本,Maxplus II Baseline 和 Maxplus II E+MAX是免費版本,只能支持少量芯片。同時不支持復雜的VHDL和Verilog程序。 ALTERA公司 新一代PLD開發軟件,適合大規模FPGA的開發。 該軟件有學習版本:Quartus II web edition,免費。 XILINX公司上一代的PLD開發軟件,目前XILINX已經停止開發Foundation,而轉向ISE軟件平臺 XILINX公司 目前的PLD開發軟件,有多個版本。 ispLEVER 是 LATTICE公司 的PLD開發軟件。 其它PLD廠商均也有自己的開發環境,學習者可以自行查閱: CYPRESS公司 ACTEL公司 Quicklogic公司 |
|
| 18樓: | >>參與討論 |
| 作者: rickyice 于 2006/5/26 14:25:00 發布:
PLD/FPGA新手入門 PLD是可編程邏輯器件(Programable LOGIC DEVICE)的簡稱,FPGA是現場可編程門陣列(Field Programable Gate Array)的簡稱,兩者的功能基本相同,只是實現原理略有不同,所以我們有時可以忽略這兩者的區別,統稱為可編程邏輯器件或PLD/FPGA。 PLD是電子設計領域中最具活力和發展前途的一項技術,它的影響絲毫不亞于70年代單片機的發明和使用。 PLD能做什么呢?可以毫不夸張的講,PLD能完成任何數字器件的功能,上至高性能CPU,下至簡單的74電路,都可以用PLD來實現。PLD如同一張白紙或是一堆積木,工程師可以通過傳統的原理圖輸入法,或是硬件描述語言自由的設計一個數字系統。通過軟件仿真,我們可以事先驗證設計的正確性。在PCB完成以后,還可以利用PLD的在線修改能力,隨時修改設計而不必改動硬件電路。使用PLD來開發數字電路,可以大大縮短設計時間,減少PCB面積,提高系統的可靠性。 PLD的這些優點使得PLD技術在90年代以后得到飛速的發展,同時也大大推動了EDA軟件和硬件描述語言(HDL)的進步。 如何使用PLD呢?其實PLD的使用很簡單,學習PLD比學習單片機要簡單的多,有數字電路基礎,會使用計算機,就可以進行PLD的開發。不熟悉PLD的朋友,可以先看一看可編程邏輯器件的發展歷程 。 開發PLD需要了解兩個部分:1。PLD開發軟件 2。PLD本身。 由于PLD軟件已發展的相當完善,用戶甚至可以不用詳細了解PLD的內部結構,也可以用自己熟悉的方法:如原理圖輸入或HDL語言來完成相當優秀的PLD設計。所以對初學者,首先應了解PLD開發軟件和開發流程。了解PLD的內部結構,將有助于提高我們設計的效率和可靠性。 如何獲得PLD開發軟件軟件呢? 許多PLD公司都提供免費試用版或演示版(當然商業版大都是收費的),例如:可以免費從//www.altera.com/ 上下載ALTERA.html">ALTERA公司的 Maxplus2 (Baseline版或E+MAX版),或向其代理商索取這套軟件。想更多的了解這套軟件的使用,請點擊此處 。 XILINX.html">XILINX 公司也提供免費軟件:WebPack,這套可以從XILINX.html">XILINX網站 下載。LATTICE ,Actel 等公司也都有類似的免費軟件提供。以上免費軟件都需要在網上注冊申請License文件,如果您對License的安裝還有不清楚,請仔細閱讀相關網頁上的說明,也可以下載這篇文檔:EDA軟件的license管理與安裝 。 通常這些免費軟件已經能夠滿足一般設計的需要,當然,要想軟件功能更強大一些,只能購買商業版軟件。 對于PLD產品,一般分為:基于乘積項(Product-Term)技術,EEPROM(或FLASH)工藝的中小規模PLD,以及基于查找表(Look-Up table)技術,SRAM工藝的大規模PLD/FPGA。EEPROM工藝的PLD密度小,多用于5,000門以下的小規模設計,適合做復雜的組合邏輯,如譯碼。SRAM工藝的PLD(FPGA),密度高,觸發器多,多用于10,000門以上的大規模設計,適合做復雜的時序邏輯,如數字信號處理和各種算法。 目前有多家公司生產CPLD/FPGA,最大的三家是:ALTERA ,XILINX ,LATTICE-Vantis . 在PLD/FPGA開發軟件中完成設計以后,軟件會產生一個最終的編程文件(如 .pof )。如何將編程文件燒到PLD芯片中去呢? 1。對于基于乘積項(Product-Term)技術,EEPROM(或FLASH)工藝的PLD(如ALTERA.html">ALTERA的MAX系列,LATTICE的大部分產品,XILINX.html">XILINX的XC9500系列) 廠家提供編程電纜,如ALTERA.html">ALTERA叫:Byteblaster,電纜一端裝在計算機的并行打印口上,另一端接在PCB板上的一個十芯插頭,PLD芯片有四個管腳(編程腳)與插頭相連。 下載 ALTERA 3.3/5v 編程電纜(Byteblaster MV) 的數據手冊 下載 ALTERA 5v 編程電纜(Byteblaster ) 的數據手冊 下載 XILINX.html">XILINX編程電纜的電路原理圖 下載LATTICE的電纜資料 它向系統板上的器件提供配置或編程數據,這就是所謂的在線可編程(ISP,如下圖)。Byteblaster使用戶能夠獨立地配置PLD器件,而不需要編程器或任何其它編程硬件。編程電纜可以向代理商購買,也可以根據廠家提供的編程電纜的原理圖自己制作,成本僅需一,二十元。(參見數據手冊) 早期的PLD是不支持ISP的,它們需要用編程器燒寫。目前的PLD都可以用ISP在線編程,也可用編程器編程。這種PLD可以加密,并且很難解密。 1.將PLD焊在PCB板上 2.接好編程電纜 3.現場燒寫PLD芯片 2。對于基于查找表技術(Look-Up table)技術,SRAM工藝的FPGA(如ALTERA.html">ALTERA的所有FLEX,ACEX,APEX系列,XILINX.html">XILINX的Sparten,Vertex),由于SRAM工藝的特點,掉電后數據會消失,因此調試期間可以用下載電纜配置PLD器件,調試完成后,需要將數據固化在一個專用的EEPROM中(用通用編程器燒寫),上電時,由這片配置EEPROM先對PLD加載數據,十幾個毫秒后,PLD即可正常工作。(亦可由CPU配置PLD)。但SRAM工藝的PLD一般不可以加密。 3。還有一種反熔絲(Anti-fuse)技術的FPGA,如Actel,Quicklogic及LUCENT的部分產品就采用這種工藝。用法與EEPOM的PLD一樣,但這種的PLD是不能重復擦寫,所以初期開發過程比較麻煩,費用也比較昂高。但反熔絲技術也有許多優點:布線能力更強,系統速度更快,功耗更低,同時抗輻射能力強,耐高低溫,可以加密,所以在一些有特殊要求的領域中運用較多,如軍事及航空航天。 |
|
| 19樓: | >>參與討論 |
| 作者: hualuohua 于 2006/6/7 20:24:00 發布:
好鐵 樓主很好,支持!強烈支持!以后多發這樣的帖子。 |
|
| 20樓: | >>參與討論 |
| 作者: amzhang 于 2006/6/14 13:45:00 發布:
up |
|
| 21樓: | >>參與討論 |
| 作者: randman 于 2006/6/16 2:26:00 發布:
辛苦了啊 |
|
| 22樓: | >>參與討論 |
| 作者: sf105 于 2006/6/18 9:11:00 發布:
不錯,支持!!! |
|
| 23樓: | >>參與討論 |
| 作者: wxz008 于 2006/6/29 11:36:00 發布:
up h a o |
|
| 24樓: | >>參與討論 |
| 作者: mingjie 于 2006/6/29 20:08:00 發布:
hao 很好,強烈支持 |
|
| 25樓: | >>參與討論 |
| 作者: 解牛 于 2006/7/1 20:19:00 發布:
有些疑惑 我好象發現怎么我們的IC設計大部分在學習語言和語法什么的?應該從哪里開始學起呢?》 |
|
| 26樓: | >>參與討論 |
| 作者: 風景天 于 2006/7/5 13:47:00 發布:
支持樓主 多給我們新手一些經驗 謝謝樓主了 |
|
|
|
Copyright © 1998-2006 m.nhznwl.cn 浙ICP證030469號 |