循環碼編譯器fpga
⑴ 基於圖結構應用《編碼,解碼器》的設計與實現 這個畢業設計應該從什麼思路下手啊~~計算機專高手請指點
Turbo卷積碼(TCC)是3G無線系統中所採用的前向錯誤校正(FEC)機制的整體部分。然而,Turbo解碼器所帶來的計算負擔非常重,並不太適合採用傳統DSP或RISC處理器實現。由於現場可編程邏輯陣列(FPGA)內在的並行結構,FPGA為解決3G基站收發器中所需要的符號速率FEC和其它計算密集的任務提供了一個高性能信號處理平台基礎。
Turbo 編碼
級聯碼方案(Concatenated coding schemes)是為了通過結合兩個或更多相對簡單的分量或構造模塊碼來獲得較高的編碼增益。Turbo碼認為是對級聯碼結構的一種改進,其中採用迭代演算法對相關的碼序列進行解碼。Turbo碼是通過將兩個或更多分量碼應用到同一數據序列的不同交織版本上構成的。對於任何傳統單分量編碼,解碼器的最後一級生成的都是硬判決解碼數據位。為了使象Turbo碼這樣的級聯碼方案工作得更好,解碼演算法不應被限制為只能在解碼器間傳遞硬判決。為最好地利用每個解碼器獲得的信息,解碼演算法必須可以實現軟判決交換,而不是採用硬判決。對於採用兩個分量碼的系統,解碼的概念是指將來自一個解碼器的軟判決輸入到另一個解碼器的輸入,並將此過程重復幾次以獲得更好的判決,如圖1所示 。
3GPP Turbo 編碼器
圖2為3GPP編碼器。
輸入數據流輸入到RSC1,它為每個輸入比特生成一個對等比特(Parity Bit)。輸入數據還經過交織後由RSC2處理生成第二個對等比特流。
3GPP標準定義,輸入塊的長度在40至5114 位之間。編碼器生成一個速率為1/3的包括原始輸入位和兩個對等位的系統碼。通過打孔方法可以獲得1/2編碼速度的編碼。遞歸系統編碼器的實現比較直接,然而交織器則不那麼簡單,要比標準的卷積或塊交織器復雜。
一旦將輸入數據塊長度K 提供給編碼器以後,編碼器將計算交織矩陣行數R和列數 C,並創建相應的交織數據結構。R 和 C 是數據塊長度K的函數。在輸入符號被載入到交織矩陣以後,那麼將根據一定的順序進行行間交換和列間交換。交換模式是根據塊長度K選擇的(即依賴於K)。行和列交換完成後,通過逐列讀出交織矩陣數據就可以得到最終的交織序列。在數據讀出時需要進行刪減操作,以保證在輸出中只有正確的輸入符號,請注意,交織陣列包含的數據位通常比K個原始輸入符號要多 ,因為R C>K。然後,新的序列經過RSC2編碼生成第二個對等位流。
實現交織器的一種方法是在存儲器中存儲完整的交換序列。即,一旦K 給定,即調用一個初始化常式(運行在處理器上的軟體常式或利用FPGA中的功能單元)生成相應的交換序列,然後將這一信息存儲在存儲器中。然而,這一方法需要大量的存儲器。利用Virtex -E FPGA 技術提供的 4096位每塊的片上存儲器,將需要[5114 13/4096]=17個存儲器塊。
在我們的方法中,採用一個預處理引擎生成一個序列值(存儲),這一序列值被存儲起來,交織器地址發生器將使用這些序列值。這一硬體單元採用幾個小型數據結構(素數表)來計算所需要的序列。這一準備過程需要的時鍾周期數與信息塊的長度成比例。例如,對於K=40的塊需要280時鍾周期,而對於最大塊長度K=5114,則需要 5290個時鍾周期。該過程只需要在塊長度變化時進行。地址發生器利用這些更為緊湊的數據結構來實時生成交織地址。
3GPP Turbo 解碼器
解碼器包括兩個MAP(最大後驗概率)解碼器和幾個交織器。Turbo演算法的優良的性能源於可以在兩個MAP解碼器間共享可靠性信息(extrinsic data,外數據,或稱先驗數據)。
在我們的設計中,MAP解碼器採用的是Bahl, Cocke, Jelinek 和 Rajiv (BCJR) 演算法。BCJR演算法計算每個符號的最大後驗對數似然率,並且是一種真正的軟判決演算法。考慮到數據是以塊的形式傳輸的,因此可以在時間維中前向或反向搜索一個符號序列。對於任一序列,其出現概率都是單獨符號出現概率的乘積。由於問題是線性的,因此序列概述可以利用概率的對數和來代替。
為了與一般文獻中的習慣一致,我們將解碼迭代的前向和反向狀態概率分別利用 和 來表示。通常,BCJR演算法要求在接收到整個信息後才開始解碼。對於實時應用,這一限制可能太嚴格了。例如,3GPP Turbo解碼器將需要大量存儲器存儲一個5114符號信息塊的完全狀態結構(state trellis)。對於單片FPGA設計來說,這需要的存儲資源太多了。與維特比(Vitebi)演算法類似,我們可以先從全零向量 O和數據{yk}(k 從 n 到 n-L) 開始反向迭代。L次反向迭代可獲得非常好的 n-L近似值。只要L選擇合適,最終的狀態標志(state metric)就是正確的。可以利用這一性質在信息結束前就開始進行有效的位解碼。
L 被稱為收斂長度。其典型值大約是解碼器約束長度的數倍(通常為5至10倍),並隨著信噪比的降低而增加。
通常,Turbo解碼演算法將計算所有的 (對整塊信息),將這些數值存儲起來,然後在反向迭代中與反向狀態概率一起用來計算新的外信息(extrinsic information,或稱先驗信息)。我們的設計中採用了窗口化方法。
解碼過程以一個前向迭代開始,計算包含L 個接收符號的塊i的 值。同時,對未來(i+1)塊進行一個反向迭代(標號 )。對塊i+1的反向迭代結束時,就獲得了開始對塊i 進行反向迭代所需要的正確的 初始向量。 與此同時對數似然函數(Lall)也在進行。 每一 和 處理過程都需要8個max* 操作 - 每個針對狀態結構(tellis)中的8個結點之一。最終的對數似然計算需要14個並行max* 運算符。為了提供可接受的解碼速率,在設計中採用了38個max* 功能單元。
從 C描述到FPGA設計
FPGA Turbo 編碼解碼器設計是利用基於C的設計和驗證方法進行的,如圖3所示。
演算法開發階段採用具有定點C類型的Art Library 來對定點計算的位真(bit-true)效應進行准確建模。在這一階段考察了幾種可能演算法的定點性能。一旦選定正確的量化演算法,就可利用A|rtDesignerPro創建一個專用DSP架構。A|rtDesignerPro的一個最強大的功能之一是可以插入和利用專用的數據通道核心(稱為專用單元,ASU)。利用這些ASU加速器核心可以使我們處理Turbo解碼器演算法內在的計算復雜性。
A|rtDesignerPro可自動完成寄存器分配、調度和控制器生成。在Turbo編碼解碼器設計中, A|rtDesignerr的自動循環合並可獲得最佳的;任務調度,MAP解碼步驟的內部循環都只有一個周期長。
A|rtDesignerPro生成的最終結果是可綜合的寄存器級(RT-level) VHDL或Verilog 描述。基於C的工具流支持FPGA專用功能。例如,可利用BlockRAM自動構造RAM,而寄存器文件也可利用分布式存儲器而不是觸發器來實現 。
最後,邏輯綜合和Xilinx實施工具套件將RTL HDL 轉換為 FPGA 配置位流。
FPGA Turbo 編碼解碼器實現
A|rtDesigner創建的Turbo編碼器和解碼器核心硬體結構包含許多專用ASU加速器。其中最重要的一個加速器完成max* 操作。max* 運算符根據下式計算兩個冪值a 和 b:
max* (a,b)=ln(expc(a)+expc(b))。
如 圖4所示, max* 運算是通過選擇(a,b)最大值,並應用一個存儲在查找表(LUT)中的校正因子近似進行的。這一近似演算法非常適合利用Xilinx FPGA 實現,其中LUT是其最終基本構造單元。
結果
Turbo解碼演算法硬體字長的選擇極大地影響總體性能。利用C-to-FPGA設計流程,這一定點分析是完全在C環境中完成的。結果示於圖 5。
上圖顯示出了我們的浮點Turbo解碼器演算法和對應的定點演算法之間的性能差別。模擬是在5114塊長度、5次解碼迭代和AWGN信道模型情況下進行的。結果清晰明顯出性能的損失是非常小的。
我們的Turbo解碼器的定點性能做為解碼器迭代次數的函數 ,對於1.5 dB SNR,位錯率為10-6。
解碼器功能的實現非常具有挑戰性,我們同時針對Virtex-E和 Virtex-II 器件進行了適配。Virtex-II 器件實施是採用運行在1.85 speedfile資料庫上的Xilinx 4.1i 實施工具集完成的。利用XC2V1000BG575-5 FPGA實現的最終設計,達到了66 MHz 的時鍾性能,消耗了3,060個邏輯片 和 16個塊RAM。對於從40至 5114符號長度的塊,採用5次解碼迭代循環的情況下,解碼器達到了2 至6.5 百萬符號每秒(Msym/s)的吞吐量。編碼器佔用了903個邏輯片、3個塊RAM並支持83 MHz時鍾頻率。對於從40至5114位的塊長度,速率可達到9 至20 Msym/s。
⑵ verilog 里 for循環問題 fpga開發
for循環裡面I<I是什麼意思?I應該小於一個常數才對。
而且一般最好不用for語句,綜合出來的東西讓人覺得有點無厘頭。
加延時會佔用很多資源。很浪費。
⑶ 用verilog語言實現FPGA的循環碼編碼器設計
摘 要
隨著電子技術的發展,具有防盜報警等功能的電子密碼鎖代替密碼量少、安全性差的機械式密碼鎖已是必然趨勢。電子密碼鎖與普通機械鎖相比,具有許多獨特的優點:保密性好,防盜性強,可以不用鑰匙,記住密碼即可開鎖等。目前使用的電子密碼鎖大部分是基於單片機技術,以單片機為主要器件,其編碼器與解碼器的生成為軟體方式。在實際應用中,由於程序容易跑飛,系統的可靠性能較差。
本文主要闡述了一種基於現場可編程門陣列FPGA器件的電子密碼鎖的設計方法。用FPGA器件構造系統,所有演算法完全由硬體電路來實現,使得系統的工作可靠性大為提高。由於FPGA具有現場可編程功能,當設計需要更改時,只需更改FPGA中的控制和介面電路,利用EDA工具將更新後的設計下載到FPGA中即可,無需更改外部電路的設計,大大提高了設計的效率。因此,採用FPGA開發的數字系統,不僅具有很高的工作可靠性,而且升級也極其方便。
本文採用EDA技術,利用Quartus II工作平台和硬體描述語言,設計了一種電子密碼鎖,並通過一片FPGA晶元實現。
關鍵詞:電子密碼鎖;FPGA;硬體描述語言;EDA
目 錄
1 緒 論 1
1.1 國內外現狀及其發展 1
1.2 電子密碼鎖的原理 2
1.3 電子密碼鎖的系統簡介 4
1.4 系統設計要求 4
1.5 本課題的研究目的和意義 5
2 現場可編程門陣列FPGA 6
2.1 FPGA的基本結構 6
2.2 FPGA的優點 10
2.3 FPGA的設計流程 11
2.4 自頂向下設計法 17
2.5用模塊化設計FPGA 18
3 VHDL硬體描述語言 20
3.1 VHDL語言的基本結構 20
3.2 結構體的描述方式 21
3.3 自上而下(TOP DOWN)的設計方法 22
4 電子密碼鎖的設計與模擬 24
4.1 硬體設備 24
4.2 幾個主要功能模塊的設計 25
4.3 計算機模擬 32
結 束 語 38
參考文獻 39
附錄1英文原文 41
附錄2中文譯文 50
附錄3源程序 57
1.1 國內外現狀及其發展
隨著人們生活水平的提高和安全意識的加強,對安全的要求也就越來越高。鎖自古以來就是把守護門的鐵將軍,人們對它要求甚高,既要安全可靠的防盜,又要使用方便,這也是制鎖者長期以來研製的主題。隨著電子技術的發展,各類電子產品應運而生,電子密碼鎖就是其中之一。據有關資料介紹,電子密碼鎖的研究從20世紀30年代就開始了,在一些特殊場所早就有所應用。這種鎖是通過鍵盤輸入一組密碼完成開鎖過程。研究這種鎖的初衷,就是為提高鎖的安全性。由於電子鎖的密鑰量(密碼量)極大,可以與機械鎖配合使用,並且可以避免因鑰匙被仿製而留下安全隱患。電子鎖只需記住一組密碼,無需攜帶金屬鑰匙,免除了人們攜帶金屬鑰匙的煩惱,而被越來越多的人所欣賞。電子鎖的種類繁多,例如數碼鎖,指紋鎖,磁卡鎖,IC卡鎖,生物鎖等。但較實用的還是按鍵式電子密碼鎖。
20世紀80年代後,隨著電子鎖專用集成電路的出現,電子鎖的體積縮小,可靠性提高,成本較高,是適合使用在安全性要求較高的場合,且需要有電源提供能量,使用還局限在一定范圍,難以普及,所以對它的研究一直沒有明顯進展。
目前,在西方發達國家,電子密碼鎖技術相對先進,種類齊全,電子密碼鎖已被廣泛應用於智能門禁系統中,通過多種更加安全,更加可靠的技術實現大門的管理。在我國電子鎖整體水平尚處於國際上70年代左右,電子密碼鎖的成本還很高,市場上仍以按鍵電子鎖為主,按鍵式和卡片鑰匙式電子鎖已引進國際先進水平,現國內有幾個廠生產供應市場。但國內自行研製開發的電子鎖,其市場結構尚未形成,應用還不廣泛。國內的不少企業也引進了世界上先進的技術,發展前景非常可觀。希望通過不斷的努力,使電子密碼鎖在我國也能得到廣泛應用[1]。
目前使用的電子密碼鎖大部分是基於單片機技術,以單片機為主要器件,其編碼器與解碼器的生成為軟體方式[2]。在實際應用中,由於程序容易跑飛,系統的可靠性能較差。基於現場可編程邏輯門陣列FPGA器件的電子密碼鎖,用FPGA器件構造系統,所有演算法完全由硬體電路來實現,使得系統的工作可靠性大為提高。由於FPGA具有現場可編程功能,當設計需要更改時,只需更改FPGA中的控制和介面電路,利用EDA工具將更新後的設計下載到FPGA中即可,無需更改外部電路的設計,大大提高了設計的效率。
1.3 電子密碼鎖的系統簡介
通用的電子密碼鎖主要由三個部分組成:數字密碼輸入電路、密碼鎖控制電路和密碼鎖顯示電路。
(1) 密碼鎖輸入電路包括時序產生電路、鍵盤掃描電路、鍵盤彈跳消除電路、鍵盤解碼電路等幾個小的功能電路。
(2)密碼鎖控制電路包括按鍵數據的緩沖存儲電路,密碼的清除、變更、存儲、激活電鎖電路(寄存器清除信號發生電路),密碼核對(數值比較電路),解鎖電路(開/關門鎖電路)等幾個小的功能電路。
(3)密碼顯示電路主要將顯示數據的BCD碼轉換成相對應的編碼。如,若選用七段數碼管顯示電路,主要將待顯示數據的BCD碼轉換成數碼器的七段顯示驅動編碼[4]。
1.4 系統設計要求
設計一個具有較高安全性和較低成本的通用電子密碼鎖,具體功能要求如下:
(1)數碼輸入:每按下一個數字鍵,就輸入一個數值,並在顯示器上的顯示出該數值,同時將先前輸入的數據依序左移一個數字位置。
(2)數碼清除:按下此鍵可清除前面所有的輸入值,清除為「0000」。
(3)密碼更改:按下此鍵時會將目前的數字設定成新的密碼。
(4)激活電鎖:按下此鍵可將密碼鎖上鎖。
(5)解除電鎖:按下此鍵會檢查輸入的密碼是否正確,密碼正確即開鎖。
1.5 本課題的研究目的和意義
隨著人們生活水平的提高,對家庭防盜技術的要求也是越來越高,傳統的機械鎖由於其構造的簡單,被撬的事件屢見不鮮,電子鎖由於其保密性高,使用靈活性好,安全系數高,受到了廣大用戶的歡迎。現在市場上主要是基於單片機技術的電子密碼鎖,但可靠性較差。FPGA即現場可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎上進一步發展的產物,是一種超大規模集成電路,具有對電路可重配置能力。通常FPGA都有著上萬次的重寫次數,也就是說現在的硬體設計和軟體設計一樣靈活、方便。相對於基於單片機技術的電子密碼鎖,用FPGA器件來構成系統,可靠性提高,並且由於FPGA具有的現場可編程功能,使得電子密碼鎖的更改與升級更為方便簡單[3]。
通過本次設計掌握FPGA系統設計的方法,熟悉FPGA設計的相關軟體,以及硬體描述語言的使用,了解電子密碼鎖的系統構成,利用FPGA實現電子密碼鎖的設計與實現,可以加深自己對所學專業的認識,關聯知識,增強自己的動手能力,積累實踐經驗,為以後的工作打好基礎。
參考文獻
[1] 李連華.基於FPGA的電子密碼鎖設計.中國科技信息,2006,(01):64
[2] 許琦.基於FPGA的電子密碼鎖的設計.科技信息,2006,(10):240-241
[3] 王衛兵,劉克剛,朱秋萍.用FPGA的電子密碼鎖.電子技術,2005,(01):26-28
[4] 趙益丹,徐曉林,周振峰.電子密碼鎖的系統原理、設計程序及流程圖.嘉興學院學報,2003,15(S1):103-105
[5] 陸重陽,盧東華.FPGA技術及其發展趨勢.微電子技術,2003,(01):5-7
[6] 王曉勇.FPGA的基本原理及運用.艦船電子工程,2005,(02):82-85
[7] 程耀林.FPGA的系統設計方法解析.現代電子技術,2005,(19):90-93
[8] K. Benkrid, A. Benkrid and S. Belkacemi .Efficient FPGA hardware development: A multi-language approach .Journal of Systems Architectur -e, 2007(04):184-209
[9] Altera, Novas Team for FPGA Visibility Enhancement .Electronic News (North America).2006,(11):12
[10] 張忠.自頂向下的FPGA設計.電子產品世界,1998,(11):33-34,72
[11] 路而紅.專用集成電路設計與電子設計自動化.北京:清華大學出版社,2004:162-181,239-280,329-332
[12] 羅傑,康華光.兩種硬體描述語言VHDL/Verilog的發展及其應用.電氣電子教學學報, 2002,24(04):1-5
[13] 曹建國, 王威, 王丹. 一種基於VHDL的電子密碼鎖的設計與實現.沈陽大學學報 , 2006,18(04):77-79
[14] 譚會生,瞿遂春.EDA技術綜合應用實例與分析.西安:西安電子科技大學出版社,2004.1-42,64-85
[15] 梁麗.電子密碼鎖的計算機模擬設計.計算機模擬,2005,22(02):218-220
⑷ FPGA的乙太網ip核具體實現步驟,怎樣模擬其功能
你用的是Altera還是xilinx的IP核?
一般的ip核都有自動生成工具,比如Altera有megacore wizard,按照你需要的功能enable或者disable選項就可以了。具體步驟可以上Altera或者Xilinx的網站,搜索你需要的乙太網ip核關鍵字,比如GE或者FE,以及是否需要MAC,PCS功能等。
模擬方面,ip核提供商都是考慮好了的:提供有模擬模型,一般生成core的時候都有sim文件夾,可以用來實現模擬。
⑸ FPGA與PLC的區別在哪裡能否通俗地介紹FPGA
二者沒有可比性,二者是完全不同的東西,簡單的說,FPGA是半定製的集成電路(IC)晶元;PLC實質是一種專用於工業控制的計算機,其硬體結構基本上與微型計算機類似,
FPGA是英文Field Programmable Gate Array的縮寫,即現場可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可編程器件門電路數有限的缺點。
FPGA採用了邏輯單元陣列LCA(Logic Cell Array)這樣一個新概念,內部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內部連線(Interconnect)三個部分。FPGA的基本特點主要有:
1)採用FPGA設計ASIC電路,用戶不需要投片生產,就能得到合用的晶元。 ——2)FPGA可做其它全定製或半定製ASIC電路的中試樣片。
3)FPGA內部有豐富的觸發器和I/O引腳。
4)FPGA是ASIC電路中設計周期最短、開發費用最低、風險最小的器件之一。
5)FPGA採用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。
可以說,FPGA晶元是小批量系統提高系統集成度、可靠性的最佳選擇之一。
目前FPGA的品種很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。
FPGA是由存放在片內RAM中的程序來設置其工作狀態的,因此,工作時需要對片內的RAM進行編程。用戶可以根據不同的配置模式,採用不同的編程方式。
加電時,FPGA晶元將EPROM中數據讀入片內編程RAM中,配置完成後,FPGA進入工作狀態。掉電後,FPGA恢復成白片,內部邏輯關系消失,因此,FPGA能夠反復使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片FPGA,不同的編程數據,可以產生不同的電路功能。因此,FPGA的使用非常靈活。
FPGA有多種配置模式:並行主模式為一片FPGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片FPGA;串列模式可以採用串列PROM編程FPGA;外設模式可以將FPGA作為微處理器的外設,由微處理器對其編程。
PLC
基本構成為: a、電源 b. 中央處理單元(CPU) 中央處理單元(CPU)是PLC的控制中樞。它按照PLC系統程序賦予的功能接收並存儲從編程器鍵入的用戶程序和數據;檢查電源、存儲器、I/O以及警戒定時器的狀態,並能診斷用戶程序中的語法錯誤。當PLC投入運行時,首先它以掃描的方式接收現場各輸入裝置的狀態和數據,並分別存入I/O映象區,然後從用戶程序存儲器中逐條讀取用戶程序,經過命令解釋後按指令的規定執行邏輯或算數運算的結果送入I/O映象區或數據寄存器內。等所有的用戶程序執行完畢之後,最後將I/O映象區的各輸出狀態或輸出寄存器內的數據傳送到相應的輸出裝置,如此循環運行,直到停止運行。 為了進一步提高PLC的可靠性,近年來對大型PLC還採用雙CPU構成冗餘系統,或採用三CPU的表決式系統。這樣,即使某個CPU出現故障,整個系統仍能正常運行。 c、存儲器 存放系統軟體的存儲器稱為系統程序存儲器。 存放應用軟體的存儲器稱為用戶程序存儲器。 d、輸入輸出介面電路 1、現場輸入介面電路由光耦合電路和微機的輸入介面電路,作用是PLC與現場控制的介面界面的輸入通道。 2、現場輸出介面電路由輸出數據寄存器、選通電路和中斷請求電路集成,作用PLC通過現場輸出介面電路向現場的執行部件輸出相應的控制信號。 e、功能模塊 如計數、定位等功能模塊 f、通信模塊 如乙太網、RS485、Profibus-DP通訊模塊等
⑹ 在FPGA中使用for循環一定浪費資源嗎
其實也不是,for 在 FPGA 中綜合後,就是並行結構。
也就是for循環幾次,就會出現幾個相同的結構,所以才會覺得浪費資源。
⑺ 讓FPGA開發板上的2個七段碼的數字從00計數到99,再從99回到0;循環重復進行。
是要畫模擬圖嗎?要畫出有兩位數碼管的模擬圖,加一個按鍵,然後就可以寫程序了,由程序來控制按鍵,對數碼管顯示的數加1過程。
還是實物開發板?
用匯編語言寫程序,還是用c語言寫程序?
⑻ 請教「FPGA+DSP構架」具體是什麼意思
樓上解釋的都是些什麼啊,還是09年的問題了。。。
我做了一段時間的DSP+FPGA架構板卡了,這個架構的原理是用FPGA來擴展DSP的外部模塊。
你要知道,很多晶元的邏輯功能,DSP是沒有硬體模塊去控制的,如果用DSP自己產生時序去控制那些晶元,在高速設計里,會有很多的障礙,通常採用FPGA產生標準的時序去驅動那些外部晶元,我們在FPGA里寫入控制外部晶元的各種邏輯模塊,再通過DSP的EMIF匯流排和DSP連接,這樣的話,DSP就多了很多「外部模塊」,同樣可以通過讀寫寄存器地址的方式來通過FPGA讀取外部晶元的數據。 相當於DSP只需要讀某個EMIF的地址,其實就是一條賦值語句,再等一小會兒(或者更復雜的收到判斷),就可以通過FPGA將外部晶元的數據讀回到DSP里。
說明白點,就是把一個寫好模塊的FPGA「塞進」DSP里,成為DSP的一部分,DSP就可以通過FPGA方便地讀取外部晶元的數據。
DSP換成其它處理器也可以,只是DSP的數據運算能力是處理器中最強的,如果是需要運算的場合,就要用DSP,如果只是功能控制,ARM、PPC等處理器也可以配合FPGA。
⑼ 關於FPGA中VHDL的一個問題
問題在於signal 和variable 的區別:signal賦值一般認為在進程結束後(反正有個延時)才把值賦給信號,variable是立刻把值賦給變數.... 你把j、t定義為信號,等於說你賦值是要等到進程完後才賦值,而LOOP語句必須是循環變數范圍不滿足條件後才結束,等於進程只執行一次,LOOP語句要執行30次...而信號要在進程完後才賦值...你說結果如何哎?可以這樣認為for語句執行時,整個語句的執行時間小於信號賦值的時間,當信號還沒有賦值是for又開始執行了...
j、t一直得不到賦值
變數在模擬時是不可見的
個人意見 希望指點
⑽ FPGA的編程語言跟C語言有什麼不同
學FPGA給我最大的體會就是它的編程語言是並行執行的,不像C語言那樣一行一行的執行。verilog裡面有個always語句,所有的always語句塊全部並發執行,而always語句塊內部是逐行執行的(前提是只是用阻塞賦值)。
verilog中沒有中斷的概念,而逐行執行指令的C語言卻離不開中斷。
學習verilog必須要掌握最基本的概念,像上面的阻塞賦值等等,新手都要經歷這一關的,呵呵。
還有,verilog是始終離不開硬體,c語言中可以不限制循環次數,而verilog就不行,因為每循環一次就會增加FPGA內部資源的佔用。
最後在說一點兒,verilog中有的語句不能被綜合(Oh,什麼是綜合?,網路吧),像定義浮點的float就不可以,在編程時慎用。
好啦就說這些吧。。