華為FPGA設計流程指南

2021-08-04 01:50:38 字數 4011 閱讀 9849

本部門所承擔的fpga設計任務主要是兩方面的作用:系統的原型實現和asic的原型驗證。編寫本流程的目的是:

● 在於規範整個設計流程,實現開發的合理性、一致性、高效性。

● 形成風格良好和完整的文件。

● 實現在fpga不同廠家之間以及從fpga到asic的順利移植。

● 便於新員工快速掌握本部門fpga的設計流程。

由於目前所用到的fpga器件以altera的為主,所以下面的例子也以altera為例,工具組合為 modelsim + leonardospectrum/fpgacompilerii + quartus,但原則和方法對於其他廠家和工具也是基本適用的。

1. 基於hdl的fpga設計流程概述 1

1.1 設計流程圖 1

1.2 關鍵步驟的實現 2

1.2.1 功能** 2

1.2.2 邏輯綜合 2

1.2.3 前** 3

1.2.4 布局佈線 3

1.2.5 後**(時序**) 4

2. verilog hdl設計 4

2.1 程式設計風格(coding style)要求 4

2.1.1 檔案 4

2.1.2 大小寫 5

2.1.3 識別符號 5

2.1.4 引數化設計 5

2.1.5 空行和空格 5

2.1.6 對齊和縮排 5

2.1.7 注釋 5

2.1.8 參考c語言的資料 5

2.1.9 視覺化設計方法 6

2.2 可綜合設計 6

2.3 設計目錄 6

3. 邏輯** 6

3.1 測試程式(test bench) 7

3.2 使用預編譯庫 7

4. 邏輯綜合 8

4.1 邏輯綜合的一些原則 8

4.1.1 關於leonardospectrum 8

4.1.1 大規模設計的綜合 8

4.1.3 必須重視工具產生的警告資訊 8

4.2 呼叫模組的黑盒子(black box)方法 8

參考 10

修訂紀錄 10

說明:● 邏輯**器主要指modelsim,verilog-xl等。

● 邏輯綜合器主要指leonardospectrum、synplify、fpga express/fpga compiler等。

● fpga廠家工具指的是如altera的max+plusii、quartusii,xilinx的foundation、alliance、ise4.1等。

說明: 「呼叫模組的行為**模型」指的是rtl**中引用的由廠家提供的巨集模組/ip,如altera 提供的lpm庫中的乘法器、儲存器等部件的行為模型。

說明:「呼叫模組的黑盒子介面」的匯入,是由於rtl**呼叫了一些外部模組,而這些外部模組不能被綜合或無需綜合,但邏輯綜合器需要其介面的定義來檢查邏輯並保留這些模組的介面。

說明: 一般來說,對fpga設計這一步可以跳過不做,但可用於debug綜合有無問題。

基於將來設計轉向asic的方便,本部門的設計統一採用verilog hdl,但針對混合設計和混合**的趨勢,所有開發人員也應能讀懂vhdl。

verilog hdl的學習可參考[1][2]。

(1) 每個模組(module)一般應存在於單獨的原始檔中,通常源檔名與所包含模組名相同。

(2) 每個設計檔案開頭應包含如下注釋內容:

● 年份及公司名稱。

● 作者。

● 檔名。

● 所屬專案。

● 頂層模組。

● 模組名稱及其描述。

● 修改紀錄。

請參考標準示例程式[3]。

(1) 如無特別需要,模組名和訊號名一律採用小寫字母。

(2) 為醒目起見,常數(`define定義)/引數(parameter定義)採用大寫字母。

(1) 識別符號採用傳統c語言的命名方法,即在單詞之間以「_」分開,如:max_delay、data_size等等。

(2) 採用有意義的、能反映物件特徵、作用和性質的單詞命名識別符號,以增強程式的可讀性。

(3) 為避免識別符號過於冗長,對較長單詞的應當採用適當的縮寫形式,如用『buff』代替『buffer』,『ena』代替『enable』,『addr』代替『address』等。

為了源**的可讀性和可移植性起見,不要在程式中直接寫特定數值,盡可能採用`define語句或paramater語句定義常數或引數。

(1) 適當地在**的不同部分中插入空行,避免因程式擁擠不利閱讀。

(2) 在表示式中插入空格,避免**擁擠,包括:

賦值符號兩邊要有空格;

雙目運算子兩邊要有空格;

單目運算子和運算元之間可沒有空格,

示例如下:

a <= b;

c <= a + b;

if (a == b) then ...

a <= ~a & c;

(1) 不要使用連續的空格來進行語句的對齊。

(2) 採用製表符tab對語句對齊和縮排,tab鍵採用4個字元寬度,可在編輯器中設定。

(3) 各種巢狀語句尤其是if...else語句,必須嚴格的逐層縮排對齊。

必須加入詳細、清晰的注釋行以增強**的可讀性和可移植性,注釋內容佔**篇幅不應少於30%。

要形成良好的程式設計風格,有許多細節需要注意,可以參考資料[4],雖然它是針對c語言的討論,但由於verilog hdl和c語言的形式非常近似,所以裡面提到的很多原則都是可以借鑑的。

為提高設計效率和適應協同設計的方式,可採用視覺化的設計方法,mentor grahpics的renoir軟體提供了非常好的設計模式。

用hdl實現電路,設計人員對可綜合風格的rtl描述的掌握不僅會影響到**和綜合的一致性,也是邏輯綜合後電路可靠性和***壞最主要的因素,對此應當予以充分的重視。

學習可綜合的hdl請參考 [5][6] [7]。

學習設計的模組劃分請參考[8]。

採用合理、條理清晰的設計目錄結構有助於提高設計的效率、可維護性。建議採用類似下面的目錄結構:

(1)(2)

考慮到效能和易用性,首選的邏輯**器是mentor graphics的modelsim。

測試程式對於設計功能和時序的驗證有著舉足輕重的影響,測試激勵的完備性和真實性是關鍵所在,有以下原則須遵循:

(1) 測試激勵輸入和響應輸出採集的時序應當兼顧功能**(無延時)和時序**(有延時)的情況。

(2) 對於週期較多的測試,為提高效率,盡可能採用程式語句來判斷響應與標準結果是否一致,給出成功或出錯標誌,而不是通過觀察波形來判斷。

(3) 採用基於檔案的測試是很好的辦法,即由matlab或spw等系統工具產生測試資料,測試程式將其讀入產生激勵,再把響應結果寫入到檔案,再交給上述工具進行處理或分析。

(4) **器支援幾乎所有的verilog hdl語法,而不僅僅是常用的rtl的描述,應當利用這一點使測試程式盡可能簡潔、清楚,篇幅長的要盡量採用task來描述。

在進行功能**和後**時都需要某些模組的行為**模型和門級**模型,如altera quartus裡的220model.v(lpm模組行為**模型)和apex20ke_atoms.v(20ke系列門級**模型),為避免在不同的設計目錄中多次編譯這些模型,應當採用一次編譯,多次使用的方法。

具體做法如下(以20ke門級庫為例):

1:在某個工作目錄下新建一庫名 apex20ke,將apex20ke_atoms.v編譯到其中。

2:在圖形介面中的load design對話方塊中裝入**設計時,在verilog 標籤下指定預編譯庫的完整路徑。(見下圖)

目前可用的fpga綜合工具有mentor graphics 的 leonardospectrum,synplicity的synplify和synopsys 的fpga compilerii/fpga express,leonardospectrum由於效能和速度最好,成為我們首選的綜合器,fpga compilerii/fpga express由於可以和design compiler**相容也可用。見參考[9]

FPGA設計流程指南

本部門所承擔的fpga設計任務主要是兩方面的作用 系統的原型實現和asic的原型驗證。編寫本流程的目的是 在於規範整個設計流程,實現開發的合理性 一致性 高效性。形成風格良好和完整的文件。實現在fpga不同廠家之間以及從fpga到asic的順利移植。便於新員工快速掌握本部門fpga的設計流程。由於目...

FPGA完整設計流程

1 設計輸入 1 設計的行為或結構描述。2 典型文字輸入工具有ultraedit 32和editplus.exe.3 典型圖形化輸入工具 mentor的renoir。4 我認為ultraedit 32最佳。2.除錯 1 對設計輸入的檔案做 除錯,語法檢查。2 典型工具為debussy。3 前 1 功...

華為面試流程

華為面試流程一共5輪 首先資格考試和面試 相應職位的資深工程師主持 其次應聘職位的部門付經理面試 再次應聘職位的部門付經理面試 再次人事面最後是付總級的面試。華為面試常問問題 q1 請你分別划划osi的七層網路結構圖,和tcp ip的五層結構圖?q2 請你詳細的解釋一下ip協議的定義,在哪個層上面,...