[ncku] simulation and verification with altera fpga

25
Digital IC Lab 文件名稱:Simulation and Verification with Altera FPGA 撰寫人員:林宜民 (依姓氏筆劃) 硬體要求:PCAltera FPGA Stratix EP1S10780C6 軟體要求:ModelSim SE 5.6Synplify Pro 7.2QuartusII 4.0 文件版本:Version 1.6 (10/19/2006) 工作內容: 1. 設計一個組合電路(多工器)2. 設計一個循序電路(移位暫存器)3. 利用 QuartusII MegaFunction 產生 RAMROM 跟一個除法器的 IP並藉以完成一個新的電路設計。 補充事項: 1. 一般硬體描述語言(Hardware Description LanguageHDL) 可分為 VHDL Verilog 兩種,而 Verilog 是以類似 C 的語法來描述硬體電路,並擁有 各種不同層次的表示方式。 2. 模擬器(Simulator)是用來模擬電路的波形。 3. 合成工(Synthesizer)用是HDL 轉換電路組成的 Netlist4. 一般而言,電路設計的模擬可分為 Pre-Sim Post-SimPre-Sim 針對電路的 function 模擬, 此時只在意由 HDL 撰寫的function 否正確 ,而 Post-Sim 針對合成過且做APR(Auto Place and Route) 的電路模擬,以確保所設計的電路實現在 FPGA 上時,與 Pre-Sim function

Upload: kokonut1128

Post on 11-Apr-2015

828 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: [NCKU] Simulation and Verification with Altera FPGA

Digital IC Lab

文件名稱:Simulation and Verification with Altera FPGA

撰寫人員:林宜民 (依姓氏筆劃)

硬體要求:PC、Altera FPGA Stratix EP1S10780C6

軟體要求:ModelSim SE 5.6、Synplify Pro 7.2、QuartusII 4.0

文件版本:Version 1.6 (10/19/2006)

工作內容:

1. 設計一個組合電路(多工器)。

2. 設計一個循序電路(移位暫存器)。

3. 利用 QuartusII 的 MegaFunction 產生 RAM,ROM 跟一個除法器的 IP,

並藉以完成一個新的電路設計。

補充事項:

1. 一般硬體描述語言(Hardware Description Language,HDL)可分為 VHDL

與 Verilog兩種,而 Verilog是以類似 C的語法來描述硬體電路,並擁有

各種不同層次的表示方式。

2. 模擬器(Simulator)是用來模擬電路的波形。

3. 合成工具(Synthesizer)的功用是將 HDL轉換成由電路所組成的 Netlist。

4. 一般而言,在電路設計的模擬上可分為 Pre-Sim跟 Post-Sim。Pre-Sim是

針對電路的 function做模擬,此時只在意由 HDL所撰寫的程式之 function

是否正確,而 Post-Sim則是針對合成過且做完 APR(Auto Place and Route)

的電路做模擬,以確保所設計的電路實現在 FPGA 上時,與 Pre-Sim 的

function一樣。

Page 2: [NCKU] Simulation and Verification with Altera FPGA

組合電路

四對一多工器

※名詞解釋:多工器(Multiplexer)的功能是在多個輸入線中選取一條輸入線,

並將被選取的輸入線之資訊放置於輸出線,又稱為資料選擇器。

※真值表:

sel[1] sel[0] out

0 0 in0

0 1 in1

1 0 in2

1 1 in3

※示意圖:

MUX

in0

in1

in2

in3

out

sel[1] sel[0]

Pre-Sim

步驟一:開啟 ModelSim,然後建立一個 Project。

※建立 Project的方式為點選 File → New → Project…。

※設定 Project Name與 Project location,按 OK即可建立 Project。

Page 3: [NCKU] Simulation and Verification with Altera FPGA

步驟二:新增檔案或加入檔案。

※新增檔案的方式為點選 File → New → Sourde → Verilog,然後對檔案進行

編輯並儲存為 xxx.v。

※加入檔案的方式為點選 File → Add to Project → File...,然後點選 xxx.v。

步驟三:編譯(Compile)。

※編譯檔案的方式為點選 Compile → Compile All,即可編譯所有的檔案。

※如果編譯時發生錯誤,在顯示錯誤的地方(紅字)點兩下,即可跳到錯誤。

Page 4: [NCKU] Simulation and Verification with Altera FPGA

步驟四:新增或加入測試平台(Test Bench)。

※當設計完電路後,為了確定所設計的電路是否符合要求,我們會寫一個測

試平台(Test Bench)。

※新增或加入測試平台,然後編譯它。

步驟五:模擬(Simulate)。

※模擬檔案的方式為點選 Simulate → Simulate…。

※打開 Design裡面的 work,然後點選 mux_4_to_1_tb並 Add它,最後按 Load

即可跳到模擬視窗。

Page 5: [NCKU] Simulation and Verification with Altera FPGA

步驟六:加入訊號線。

※在視窗上按右鍵,然後點選 Add → Add to Wave。

步驟七:看波形。

※在工具列上按 Run,然後就會顯示波形。

※慢慢看波形吧,沒有波形就沒有真相!

以上就是使用 ModelSim做 Pre-Sim的基本流程,在此要特別強調的是,

ModelSim 所有的功能並不僅僅於此,如果你想要了解更多的話,一切都要靠

自己花時間去問去試,只有努力的人才能有豐富的收穫,加油。

Page 6: [NCKU] Simulation and Verification with Altera FPGA

Synthesis

步驟一:開啟 Synplify,然後建立一個 Project。

※先點選 File,再點選 New。

※選擇 Project File,並設定 File Name與 File Location。

步驟二:加入檔案。

※點選欲加入的 xxx.v,然後按 Add,再按 OK後就可以將檔案加入。

Page 7: [NCKU] Simulation and Verification with Altera FPGA

步驟三:選擇 FPGA的 Device與其他相關設定。

※先點選 Project,再點選 Implementation Options。

※在 Device的設定如下:Technology為 Altera Stratix,Part為 EP1S10,Speed

為-6,Package為 FC780。

※在 Options的設定是將 FSM Compiler與 Resource Sharing打勾。

※在 Constraints的設定是將 Frequency設定至 100Mhz。

※在 Implementation Results的設定是將 Result File Name填入與電路模組相同

的名稱,而 xxx.vgm這個檔案會在 QuartusII做 APR時被使用。然後將下列兩

個選項打勾(Write Vendor Constraint File與 Write Mapped Verilog Netlist)。

※在 Timing Report的設定是將 Number of Critical Paths與 Number of Start/End

Points都設為 11。

※在 Verilog裡是將 TOP Level Module填入與電路模組相同的名稱,然後將

Use Verilog 2001打勾。

步驟四:合成(Synthesis)。

※點選 RUN → Synthesize,最後出現 Done!就是已經合成完畢。

Page 8: [NCKU] Simulation and Verification with Altera FPGA

步驟五:檢查合成後的電路。

※先點選 HDL Analyst,再點選 RTL,最後點選 Hierarchal View,畫面會出現

合成後的電路 Netlist

以上就是使用 Synplify將 HDL程式合成為電路 Netlist的基本流程,值得

注意的是,當你針對不同要求而設定的 Constraints 不同時,你就會得到不同

的電路 Netlist,所要付出的硬體代價也不同,這就需要大家多花點心思來了解

其中的奧妙之處。

APR

步驟一:開啟 QuartusII,然後建立一個 Project。

※先點選 File,再點選 New Project Wizard…。

※設定 Work Directory,Project Name與 Top-Level Entity Name,再按 Next。

Page 9: [NCKU] Simulation and Verification with Altera FPGA

步驟二:加入檔案。

※點選 Add…,將 Synplify合成出來的 xxx.vqm加入,再按 Next。

Page 10: [NCKU] Simulation and Verification with Altera FPGA

步驟三:設定相關的 EDA Tools。

※在 Tool Type點選 Simulation,Tool Name點選 ModelSim。

※點選 Settings,將 Time Scale設定為 1 ns。

步驟四:設定 Family。

※設定 Family為 Stratix,再按 Next。

Page 11: [NCKU] Simulation and Verification with Altera FPGA

步驟五:設定 Device。

※設定 Device為 EP1S10F780C6,再按 Finish,即可完成 Project的設定。

Page 12: [NCKU] Simulation and Verification with Altera FPGA

步驟六:編譯。

※點選 Processing → Start Compilation,即可開始編譯。

步驟七:完成編譯。

※彈出下面視窗即代表編譯完畢。

以上就是使用 QuartusII對電路 Netlist做 APR的基本流程,並且利用設定

Simulation Tool所產生的 xxx.vo(Verilog Output File)與 xxx.sdo(Standard Delay

Output File)做 Post-Sim。

Post-Sim

步驟一:開啟 ModelSim,然後建立一個 Project。

※建立 Project的方式為點選 File → New → Project…。

※設定 Project Name與 Project location,按 OK即可建立 Project。

Page 13: [NCKU] Simulation and Verification with Altera FPGA

步驟二:加入檔案。

※將 xxx.vo更改為 xxx.v,然後加入。

步驟三:加入元件庫。

※由於我們是採用 Altera的 Cell Library來合成電路,所以合成後的電路 Netlist

裡所包括的那些 Logic Gates與 Flip-Flop都是出自於 Cell Library,所以模擬時

要將此 Cell Library加入。

※我們所選用的 Family是 Stratix,所以到 QuartusII\eda\sim_lib裡將 Stratix的

Cell Library(stratix_atoms.v)加入。

步驟四:加入測試平台。

※加入 Pre-Sim的測試平台,並在測試平台裡加上`timescale 1 ns/100 ps。

步驟五:編譯。

※編譯檔案的方式為點選 Compile → Compile All,即可編譯所有的檔案。

※如果編譯時發生錯誤,在顯示錯誤的地方(紅字)點兩下,即可跳到錯誤。

步驟六:模擬。

※模擬檔案的方式為點選 Simulate → Simulate…。

Page 14: [NCKU] Simulation and Verification with Altera FPGA

步驟七:加入訊號線。

※在視窗上按右鍵,然後點選 Add → Add to Wave。

步驟八:看波形。

※慢慢看波形吧,沒有波形就沒有真相!

步驟九:比對 Pre-Sim與 Post-Sim。

※很明顯地,Post-Sim的輸出有不穩定的訊號,並且受到延遲時間的影響。

Page 15: [NCKU] Simulation and Verification with Altera FPGA

以上就是從 Pre-Sim做到 Post-Sim 的所有流程,要注意的地方有 Verilog

的 Coding Style,波形模擬(Function Simulation),電路合成(Synthesis),以及最

後面的時序模擬(Timing Function)。對一個優秀的 IC設計工程師而言,每一個

環節都非常的重要,皆要保持著嚴謹的心情來看待,然而這只是 IC設計中的

一小部份,所以路還很長遠,大家多多加油。

Page 16: [NCKU] Simulation and Verification with Altera FPGA

循序電路

串進串出移位暫存器

※名詞解釋:移位暫存器(Shift Register)的功能可以為轉換器,計數器或時序

產生器等等。最簡單的移位暫存器可以是由一堆 D Flip-Flop所組成,以共同

的一個時脈(Clock)來驅動,並且利用重置(Reset)來清除 Flip-Flop 內的值,而

移位暫存器除了儲存資料,也可以將資料向左或向右移動。

※真值表:

clk rst_n in out

0 1 0 X

1 1 0 X

0

1

0

1

0

1

0

1

0

1

0

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

1

1

1

1

※示意圖:

DFFin

clk

rst_n

DFF DFF DFFout

Page 17: [NCKU] Simulation and Verification with Altera FPGA

Pre-Sim

※由於 D Flip-Flop的特性就是在時脈的正源(Positive)或負源(Negative)才會做

儲存或輸出的動作,所以輸出會是非常漂亮的波形。

※通常在電路動作前,需先 Reset所有 Flip-Flop內的值,也就是清為 0。

Synthesis

※對於循序電路來說,Coding Style是非常重要的,因為 Coding Style不好的

話,Flip-Flop很可能會被合成為 Latch,那電路就不符合我們所預期。

※關於 Flip-Flop與 Latch的差異,請去問萬能的 Google神。

APR

※基本上,做 APR的流程跟組合電路一樣,故不多做介紹。

Post-Sim

※很明顯地,Post-Sim的輸出會受到延遲時間的影響,但是相對於組合電路,

它並不會產生不穩定的訊號。

Page 18: [NCKU] Simulation and Verification with Altera FPGA
Page 19: [NCKU] Simulation and Verification with Altera FPGA

MegaFunction

QuartusII提供一個很方便的功能,讓使用者可利用其內建的 Mega Wizard

Plug-In Manager呼叫 MegaFunction,而 MegaFunction內的電路區塊共有算術

單元,I/O單元,邏輯閘,正反器與記憶體等等。我們將使用 RAM,ROM與

除法器來完成一個電路設計,並且從 Pre-Sim做到 Post-Sim。

Pre-Work

步驟一:開啟 QuartusII內的 Mega Wizard Plug-In Manager。

※點選 Tools → Mega Wizard Plug-In Manager…。

步驟二:建立一個新的 MegaFunction。

※點選 Create a New Custom MegaFunction Variation。

Page 20: [NCKU] Simulation and Verification with Altera FPGA

步驟三:選擇除法器。

※將 Arithmetic打開,點選裡面的 LPM_DIVIDE。

※設定檔案輸出的目錄與填入檔案名稱。

Page 21: [NCKU] Simulation and Verification with Altera FPGA

步驟四:設定與產生除法器。

※設定除數與被除數的位元數,並將其設定為無號數。

※使用者可依個人需求做不同的設定。

※按 Finish,即可產生符合我們需求的除法器。

步驟五:選擇 RAM。

※將 Memory Compiler打開,點選裡面的 RAM:2-PORT。

※設定檔案輸出的目錄與填入檔案名稱。

Page 22: [NCKU] Simulation and Verification with Altera FPGA

步驟六:設定與產生 RAM。

※設定 Read與 Write為一組或兩組。

※設定 Memory Size的單位為 Words或 Bits。

※設定 Memory Size為 128 Bits,因為長(位址)為 16,寬(資料)為 8。

※設定 Single Clock。

※將 Create an “rden” Read Enable Signal打勾。

※將 Read Output Port加上 Register。

※按 Finish,即可產生符合我們需求的 RAM。

步驟七:選擇 ROM。

※將 Memory Compiler打開,點選裡面的 ROM:1-PORT。

Page 23: [NCKU] Simulation and Verification with Altera FPGA

※設定檔案輸出的目錄與填入檔案名稱。

步驟八:產生 mif檔。

※點選 File → New → Other Files → Memory Initialization File …。

※填入資料數目與資料長度,並儲存為 xxx.mif。

步驟九:設定與產生 ROM。

※設定長(位址)為 2,寬(資料)為 6。

※將 Output Port加上 Register。

※加入 xxx.mif,此檔是 ROM裡的初始資料。

※按 Finish,即可產生符合我們需求的 ROM。

※註:RAM與 ROM的輸入都有 Clock,所以屬於同步電路。

Pre-Sim

※由於使用到 Altera的 MegaFunction,所以在模擬時需要加入位於 QuartusII\

eda\sim_lib的 Models (220model.v與 altera_mf.v)。

※由於 ModelSim不支援 xxx.mif,導致從 ROM裡讀出的資料都為 0,故使用

QuartusII將 xxx.mif轉檔為 xxx.rif。轉換的方法為打開 xxx.mif,然後點選 File

Page 24: [NCKU] Simulation and Verification with Altera FPGA

→ Export,將檔案儲存為 xxx.rif,然後將 ROM裡呼叫 xxx.mif的地方更改為

呼叫 xxx.rif。

※當 RAM 與 ROM 在做模擬時,ModelSim 並不支援 NO_PLI 這個 Define

Macro,所以我們點選 Compile → Compile Options → Verilog → Marco,然後

在 Macro Name填入 NO_PLI,Value則填入 1。

※如果輸出的位元數太長,可以選擇更改訊號線的進制,在觀看波形的視窗

選項裡點選 Format → Radix → Unsigned(無號數)或其它進制。

Synthesis

※由 MegaFunction產生的 xxx.v,在合成時需加入的檔案為 xxx_bb.v,也就是

加入所謂的 Black Box。

Page 25: [NCKU] Simulation and Verification with Altera FPGA

APR

※將 MegaFunction所產生的除法器(divider.v)、RAM(syn_dpram_xxx.v)、ROM

(syn_rom_xxx.v)與初始資料(xxx.mif)放置於目錄底下,此時的 syn_rom_xxx.v

是呼叫 xxx.mif。

Post-Sim

※最後一級的輸出是加上 Register 的 RAM,所以輸出波形只受到延遲時間的

影響。

終於把循序電路與使用 MegaFunction 所設計而成的電路從 Pre-Sim 做到

Post-Sim的流程介紹完了,總歸老話一句,要學的東西還是很多,大家要多多

加油喔。最後,我相信這份文件一定有許多不詳細或錯誤的地方,煩請大家

如果有任何問題可以回報給我([email protected]),讓我有機會把文件做

的更好,謝謝!