Intel FPGA開發流程
1。建立資料夾
doc:設計相關文件存放目錄
img:設計相關圖片存放目錄
prj:工程檔案存放目錄
rtl: verilog 可綜合程式碼存放目錄
testbench:測試檔案存放目錄
2。建立工程
New Project Wizard -> Next
選擇專案路徑,填寫工程名稱,點選Next
選擇Empty Project,點選Next
點選Next
選擇自己的晶片型號,點選Next
設定模擬工具為ModelSim - Alter,模擬語言為Verilog HDL,點選Finish完成工程建立
3。新增設計檔案
點選 New 建立新檔案
選擇檔案型別,點選 OK
輸入相關程式碼,儲存在 rtl 資料夾下
點選 Start Analysis & Synthesis 進行模擬和綜合
點選 Tools -> Netlist Viewers -> RTL Viewer,檢視硬體邏輯電路
4。功能模擬
新建 。v 檔案,並儲存在工程對應的 testbench 資料夾下
點選標題欄 Assignments -> Settings -> Simulation,檢查資訊是否與設定的一致
選擇 Compile test bench,點選右側 Test Benches。。。
點選 New
選擇已編輯好的 testbench 檔案,點選 Add
填寫 Test bench name,需要與之前新增的 testbench 檔案同名,點選 OK
點選 OK
點選 OK
點選 Tools -> RTL Simulation Tool -> RTL Simulation,進行功能模擬(理想情況)
檢視模擬結果
5。綜合與佈局佈線
點選主介面 Start Compilation
點選標題欄 Tools -> Run Simulation Tool -> Gate Leval Simulation,進行閘電路模擬(非理想情況)
選擇時序模型,點選 Run
檢視模擬結果,發現與之前的功能型模擬結果不同
6。分配引腳
點選選單欄 Pin Planner
根據實際情況配置引腳
關閉引腳配置視窗,點選 Start Compilation
7。下載
非固化下載
點選選單欄 Programmer
點選 Hardware Setup。。。
選擇 USB - Blaster
點選左側 Auto Detect,選擇 EP4CE10
點選 Add File。。。
選擇工程目錄下 output_files 資料夾下的 。sof 檔案
點選 Start,等待下載結束
固化下載
點選標題欄 File -> Convert Programming File
設定如下選項
點選 Flash Loader,並在右側點選 Add Device。。。
選擇相應裝置,點選 OK
點選 SOF Data,並在右側點選 Add File。。。
選擇之前生成的 。sof 檔案,點選 Generate
重複上述 “ 非固化下載 ” 步驟,將下載檔案由 。sof 替換為 。jic 即可
重新上電即可檢視效果
FPGA基本數字邏輯設計
1。 譯碼器
真值表
介面圖
Verilog程式碼
module decoder3_8(a, b, c, out);
input a;
input b;
input c;
output [7:0]out;
reg [7:0]out; //out在always塊中賦值,故定義為reg型別
always@(a, b, c)begin
case({a, b, c})
3‘b000: out = 8’b0000_0001;
3‘b001: out = 8’b0000_0010;
3‘b010: out = 8’b0000_0100;
3‘b011: out = 8’b0000_1000;
3‘b100: out = 8’b0001_0000;
3‘b101: out = 8’b0010_0000;
3‘b110: out = 8’b0100_0000;
3‘b111: out = 8’b1000_0000;
endcase
end
endmodule
激勵檔案
`timescale 1ns/1ns //單位/精度
module decoder3_8_tb;
reg a;
reg b;
reg c;
wire [7:0]out;
decoder3_8 decoder3_8(
。a(a),
。b(b),
。c(c),
。out(out)
);
initial begin
a = 0; b = 0; c = 0;
#10;
a = 0; b = 0; c = 1;
#10;
a = 0; b = 1; c = 0;
#10;
a = 0; b = 1; c = 1;
#10;
a = 1; b = 0; c = 0;
#10;
a = 1; b = 0; c = 1;
#10;
a = 1; b = 1; c = 0;
#10;
a = 1; b = 1; c = 1;
#10;
$stop;
end
endmodule
2。 計數器
介面圖
verilog程式碼
module counter(Clk50M, Rst_n, led);
input Clk50M;
input Rst_n;
output led;
reg led;
reg [24:0]cnt;
//計數程序
always@(posedge Clk50M or negedge Rst_n)
if(Rst_n == 1‘b0)
cnt <= 25’b0;
else if(cnt == 25‘d24_999_999)
cnt <= 25’d0;
else
cnt = cnt + 1‘b1;
//led輸出程序
always@(posedge Clk50M or negedge Rst_n)
if(Rst_n == 1’b0)
led <= 1‘b1;
else if(cnt == 25’d24_999_999)
led = ~led;
else
led <= led;
endmodule
激勵檔案
`timescale 1ns/1ns
module counter_tb;
reg clk;
reg rst_n;
wire led;
counter counter(
。Clk50M(clk),
。Rst_n(rst_n),
。led(led)
);
initial clk = 1;
always #10 clk = ~clk; //時鐘頻率設為50M
initial begin
rst_n = 1‘b0;
#50;
rst_n = 1’b1;
#200;
$stop;
end
endmodule
3。 IP核應用之計數器
Altera IP 核既包括了諸如邏輯和算術運算等簡單的 IP 核,也包括了諸如數字訊號處理器、乙太網 MAC、PCI/PCIE 等介面比較複雜的系統模組,合理地運用這些IP核可以極大地節約我們開發專案的時間。
使用IP核的基本步驟如下:
在右側 IP Catalog 處輸入IP核名稱
更改IP核儲存的路徑,並選擇語言,點選 OK
設定計數器位數和計數方式
選擇計數方式(二進位制計數/模計數),並選擇附加選項,點選 NEXT
根據需要選擇同步(非同步)清零、裝載、設定,點選 NEXT
點選 NEXT
選擇要生成的檔案,點選 Finish
Variation file: VHDL原始檔,必選
AHDL Include file: AHDL 包含檔案,可以在文字設計檔案(。tdf)中使用
VHDL component declaration file: VHDL 元件宣告檔案,可以在 VHDL 設計檔案中使用
Quartus Ⅱ symbol file: Quartus II 符號檔案可以在原理圖設計中使用
Instantitation template file: 供給第三方綜合工具使用
Verilog HDL black-box file: 供給第三方綜合工具使用
`timescale 1ns/1ns
module counter_tb;
reg cin;
reg clk;
wire cout;
wire [3:0] q;
counter counter(
。cin(cin),
。clock(clk),
。cout(cout),
。q(q)
);
initial clk = 1;
always #10 clk = ~clk;
initial begin
repeat(20)
begin
cin = 0;
#100 cin = 1;
#20 cin = 0;
end
#100 $stop;
end
endmodule
將IP核設定為頂層檔案,編寫testbench進行模擬
4。 BCD計數器設計與驗證