FPGA設計流程指南

2023-01-06 12:24:06 字數 3031 閱讀 1089

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

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

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

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

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

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

前言 1

目錄 2

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]。

華為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 功...

FPGA課程設計報告

西安郵電學院 題目 採用ram實現計數器及fpga功能驗證 院系 電子工程學院 專業班級 學生姓名 導師姓名 起止時間 2012 06 18至2012 06 29 2012年 07 月 01 日 1 任務 用乙個10 8的雙口ram完成10個8位計數器,計數器的初值分別為1 10,時鐘頻率為1mhz...