




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、FPGA設計原則以及代碼規范,FPGA設計原則,面積和速度的平衡與互換 硬件原則 系統原則 同步設計原則,面積”指一個設計消耗FPGA的邏輯資源的數量,一般可以用所消耗的觸發器(FF)和查找表(LUT)來衡量,更一般的衡量方式可以用設計所占用的等價邏輯門數。 “速度”指設計在芯片上穩定運行,所能夠達到的最高頻率,這個頻率由設計的時序狀況決定,它和設計滿足的時鐘周期,PAD to PAD Time,Clock Setup Time,Clock Hold Time ,Clock to output delay等眾多時序特征量密切相關,面積與速度,進一步了解FPGA內部的“面積”資源,面積與速度的平
2、衡與互換原則,速度換面積,面積換速度,FPGA設計和軟件設計存在本質區別,要做到對所需實現的硬件電路“心有成竹”,對該部分硬件的結構與連接十分清晰,然后再用適當的HDL語句表達出來。 要明確FPGA的邏輯設計所采用的硬件描述語言(HDL)和軟件語言(如C,C+等)的區別,HDL的本質作用在于描述硬件!它的最終實現結果是芯片內部的實際電路,硬件原則,硬件原則的另外一個重要理解是“并行”和“串行”的概念。 一般來說硬件系統比軟件系統速度快,實時性高,其中一個重要原因就是硬件系統中各個單元的運算是獨立的,信號流是并行的。 而C語言編譯后,其機器指令在CPU的高速緩沖隊列中基本是順序執行的,硬件原則并
3、行處理,系統原則,一方面是一個硬件系統,例如一塊板卡如何進行功能模塊劃分與任務分配,什么樣的算法和功能適合放在傳統FPGA里面實現,什么樣的算法和功能適合放在DSP、CPU里面實現,或者在使用內嵌CPU和DSP Block的FPGA中如何劃分軟硬件功能,以及FPGA的規模估算數據接口設計、開發成本的估算等,另一方面就是具體到FPGA內部設計要有一個宏觀上的合理安排,比如時鐘域、模塊復用、約束、面積、速度等問題,同步設計原則同步與異步,在設計電路時,可以有異步電路和同步電路兩種實現方法。 異步電路使用組合邏輯電路實現,沒有統一的時鐘信號,容易產生毛刺和競爭冒險。 同步時序電路使用組合邏輯和觸發器
4、實現電路功能,主要信號和輸出信號都由時鐘驅動觸發器產生,能夠避免毛刺,信號穩定,同步設計時鐘信號的質量和穩定性決定了同步時序電路的性能。 FPGA的內部有專用的時鐘資源,如全局時鐘布線資源、專用的時鐘管理模塊DUL、PLL等,同步設計原則時鐘,同步設計中,穩定可靠的數據采樣必須遵從以下兩條基本原則: 1、在有效時鐘沿到達前,數據輸入至少已經穩定了采樣寄存器Setup時間之久。這條原則簡稱滿足Setup時間原則。 2、在有效時鐘沿到達后,數據輸入至少還將穩定保持采樣寄存器Hold時間之久。這條原則簡稱滿足Hold時間原則,同步設計原則建立/保持時間,FPGA設計代碼規范,Verilog代碼編寫風
5、格的必要性 結構層次化編碼 時鐘和RESET信號設計指南 可綜合性編碼,Verilog代碼編寫風格的必要性,Verilog代碼編寫規范,經常是一個不太受歡迎的話題,但卻是非常有必要的。 遵循代碼編寫規范書寫的代碼,很容易閱讀、理解、維護、修改、跟蹤調試、整理文檔。相反代碼編寫風格隨意的代碼,通常會很凌亂,會給開發者本人的調試、修改工作帶來困難,也會給合作者帶來很大麻煩,編寫規范的宗旨,縮小篇幅; 提高整潔度; 便于跟蹤、分析、調試; 增強可讀性,幫助閱讀者理解; 便于整理文檔; 便于交流合作,結構層次化編碼框架圖,1) 結構的層次不宜太深,一般為3到5層即可; 2) 頂層模塊最好僅僅包含對所有
6、模塊的調用,而不應該完成比較復雜的邏輯功能。比較為合理的頂層模塊由輸入輸出管腳聲明、模塊的調用與實例化、全局時鐘資源、全局置位/復位、三態門控制等構成; 3) 所有的I/O信號,如輸入、輸出、雙向信號等的描述在頂層模塊完成,結構層次化編碼注意事項,一般來說,進入FPGA的信號必須先同步,以提高系統工作頻率; ) 所有模塊的輸出都要寄存器化,以提高工作頻率,這對設計做到時序收斂也是極有好處的; ) 將相關的組合邏輯放在同一模塊,結構層次化編碼注意事項,7)所有未使用的模塊輸入必須加上確定的邏輯值,不允許輸入信號出現懸空狀態; 8)盡量少用組合邏輯設計; 9)多用case語句少用if-else語句
7、,if-else的嵌套不能超過四級; 10)描述always塊盡量簡潔,結構層次化編碼注意事項,1) 信號名一律小寫,參數用大寫。2) 對于低電平有效的信號結尾要用_n標記,如rst_n。3) 端口信號排列要統一,一個信號只占一行,最好按輸入輸出及從哪個模塊來到哪個模塊去的關系排列,這樣在后期仿真驗證找錯時后方便很多。如,信號命名要規范化,module a( clk, rst_n, wren, rden, avalon_din, sdi, data_ready, avalon_dout,盡量少用立即數,多用常量。使用常量有以下優點:(1)常量對于一個設計具有更多的靈活性;(2)常量值只需要在一
8、個地方修改。 方法: 對于Verilog程序,把常數和參數定義在一個或多個小文件中,例如文件design_parameters.v,然后在需要調用這些參數的模塊中插入“include design_parameters.v “語句即可,常量/參數化設計,時鐘和RESET信號設計指南,避免在模塊內部產生RESET信號:(1)如果可能,盡量避免在模塊內部產生RESET信號,或者避免用其它條件邏輯產生RESET信號;(2)如果確實需要條件RESET信號,那么可以創建一個獨立的RESET信號,再創建一個獨立的條件RESET產生邏輯模塊,DFF1: always(posedge clk_125m) be
9、gin if(!rst_n) q=1b0; else q=d; end,DFF2: always(negedge clk_125m) begin if(!rst_n) q=1b0; else q=d; end,例如,避免使用混合時鐘沿,1)在你的設計中,要避免同時使用上升沿觸發和下降沿觸發這兩種觸發方式的寄存器。 (2)如果在你的設計中必須同時使用大量的上升沿和下降沿出發的觸發器,那么應該把他們放在不同的模塊中,在多時鐘域的設計中涉及到跨時鐘域的設計中最好有專門一個模塊做時鐘域的隔離。這樣做可以讓綜合器綜合出更優的結果。 這里的一個模塊是指一個module,一個模塊盡量只用一個時鐘,避免在模塊
10、內部產生時鐘,避免使用內部產生時鐘的方法,例如采用計數器分頻出來的脈沖直接拿去當作時鐘使用,是不允許的,這種時鐘對設計的可靠性極為不利,邏輯分頻時鐘: always(posedge clk_125m) begin if(!rst_n) clk_div_62m5=1b0; else clk_div_62m5=!clk_div_62m5; end always(posedge clk_div_62m5) begin if(!rst_n) data_out=8h00; else data_out=data_in; end,時鐘使能方式: always(posedge clk_125m) begin
11、if(!rst_n) en_clk_62m5=1b0; else en_clk_62m5=!en_clk_62m5; end always(posedge clk_125m) begin if(!rst_n) data_out=8h00; else if(en_clk_62m5) data_out=data_in; end,避免在RTL代碼中直接使用門控時鐘,門控時鐘會增加設計的不穩定性,always(en1 or en2) begin if(!rst_n) data_out=8h00; else data_out=data_in; end,避免使用門控時鐘,D,Q,en1,en2,data_
12、in,data_out,Verilog中,用always塊設計組合邏輯電路時, 1) 在賦值表達式右端參與賦值的所有信號都必須在 always(敏感電平列表) 中列出, 2) always中if語句的判斷表達式必須在敏感電平列表中列出。 3) 確保過程模塊敏感信號列表中的信號是必需的。敏感信號列表中沒必要出現的信號會降低仿真速度,敏感變量的描述完備性,錯誤寫法:always(aorborc) begin e = d end,敏感變量的描述完備性,1)在Verilog語言中的case語句對應一個單級的多選電路, if-else if-else語句對應于一個優先編碼的多級組合選擇電路。(2)如果你
13、的設計中沒有優先級的要求,最好使用case語句,不要使用if-else if-else語句進行描述,Case語句和If-Else語句,不推薦這種寫法,具有優先級例子1,沒有優先級例子1,優先級電路,不推薦這種寫法,同時不推薦大小寫混合使用,具有優先級例子2,優先級電路,例:位置映射法 Block block_1( signal_a, signal_b); 例:信號名映射法 block block_1( .signal_a(signal_a), .signal_b(signal_b),在Verilog中,有兩種模塊調用的方法, 一種是位置映射: 模塊名 (連接端口1信號名, 連接端口2信號名,
14、連接端 口3信號名,); 另一種為信號名映射法: 模塊名 (.端口1信號名(連接端口1信號名), .端口2信號名(連接端口2信號名), .端口3信號名(連接端口3信號名),模塊調用規范,在書寫Verilog可綜合代碼時,在always(posedge clk)模塊中,總是使用非阻塞賦值方式,否則會產生RTL級仿真和門級仿真功能不一樣的現象。同一個always中不能混用阻塞,非阻塞賦值,阻塞和非阻塞賦值(Verilog,Error,狀態機要寫成3段式的(這是最標準的寫法),即 always (posedge clk or negedge rst_n)(第一段) . current_state = next_state; . always (current_state .)(第二段) . case(current_state). s1: if . next_state = s2;. always (posedge clk or negedge rst_n)(第三段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 事業單位合同管理現狀與改革研究:以為節點
- 2025和諧、規范工地安全設施設計、制作及安裝合同
- 2025工程設計的合同范本
- 2025消防器材供應合同
- 2025版知識產權許可合同模板
- 2025標準合同買賣協議范本
- 2025年橋梁出口廣告牌翻新承攬合同
- 2025合同履行先合同義務與消費者權益保護
- 《金融機構價值評估》課件
- 《高效客戶吸引策略》課件
- 單絨毛膜雙羊膜囊雙胎2022優秀課件
- 瀝青路面精細化施工質量控制及驗收標準課件
- XX縣“四好”農村公路提升工程可行性研究報告
- 高考數學你真的掌握了嗎(最新)
- 亞里士多德哲學課件
- DB32-T 4357-2022《建筑工程施工機械安裝質量檢驗規程》
- 發成果轉化項目可行性研究報告(定稿)
- (新版教材)粵教粵科版六年級下冊科學全冊教案(教學設計)
- 個人分期還款協議書模板(5篇)
- 儀表電氣專業安全檢查表
- 航空煤油MSDS安全技術說明書
評論
0/150
提交評論