|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1 L7 U: _6 [9 k R3 m( D) Y, j# b0 ?) o I2 S9 L
文章摘要:
- u- E4 Q+ j( b8 m/ P近日花巨资从某宝购置了一套FPGA开发板,拿到板子的第一件事肯定是先跑上大名鼎鼎的跑马灯例程,应当算是硬件开发中的HelloWorld了,本文要从新建工程到仿真下载验证,来说明FPGA的开发流程,本文的代码不重要,重点在于流程,流程,流程......
, H7 h- `/ T' |# U) |: b3 C( n
( m1 S) R t# a+ c) v3 n+ `硬件平台: EP4CE6F17C8
5 \' L9 [0 G% l# t+ Y5 L$ u开发环境: Quartus II 13.1
# J/ Q: v) @5 ~" J
( H' M; v8 J- f* i- Y: l9 W第一步:新建工程6 b% p" s# y9 H2 u/ e f& K, D
File --> Open Project Wizard...2 o& b& q# Q. C$ u8 z" L k
1.选择工程目录,指定工程名及设计入口,一般情况下建议工程目录,工程名称及设计入口同名,不能有中文路径;+ ^5 I% h% _, y( {% ~8 X
2.添加已有文件,如果新建的工程,则直接跳过;
) t6 c4 \5 ]$ ^3.器件选择,需要与实际用到的器件相同,这里选择EP4CE6F17C8;8 C( o# x }; o' z1 _+ F
4.设置工具,一般直接跳过;1 A: c1 Z! [! x4 e
5.信息确认,如果无误则点击Finish完成;
9 m4 T+ P. p1 p6 v/ U! ?% h3 K' k修改默认配置:
7 i" j4 Q8 d9 b5 @2 c. [- p4 ]8 FAssignments --> Device...+ X& u/ q' h* V7 v+ [* P) B
--> Device and Pin Option...
- Z* D j3 P/ z9 h ]1 o7 [; @Unused Pins:未用到引脚选择,As input tri-stated;& ?. }. q; ?( q+ {3 ~! u
Valtage 引脚默认电压值,选择 3.3-V LVTTL;
, c8 z8 X* ^- f! T% c
. A( @! T8 {/ _) \; [+ N+ v2 c第二步:建立HDL文件. P/ k: u9 s) o8 }
File--> New...1 |7 \2 B4 w/ X q9 N( ~
Design Files --> Verilog HDL File
( l1 Y; j8 l1 r示例代码:$ _9 t V+ B( Z; N
; C& Y( c( P" ]- Z/ L- /*
- * 功能描述:流水灯演示
- */
- module led_test (
- input clk, // 时钟输入(外部50MHz晶振)
- input rst_n, // 复位按键
- output reg [3:0] led // 4位LED
- );
- // 寄存器定义
- reg [31:0] timer; // 用于定时器计数
- // 计时时钟
- always @(posedge clk or negedge rst_n)
- begin
- if(~rst_n)
- timer <= 0;
- else if(timer == 32'd200_000_000)
- timer <= 0;
- else
- timer <= timer + 1'b1; // 通过脉冲数计算时间
- end
- // 检测时钟的下降沿和复位的下降沿
- always @(posedge clk or negedge rst_n)
- begin
- if (~rst_n) // 复位信号低电平有效
- led <= 4'b0000; // LED灯输出全为低,四个LED灯灭
- // 时钟下降沿
- else
- begin
- // 50HMz的时钟下,50个时钟为1us
- if(timer == 32'd50_000_000)
- led <= 4'b0001;
- else if (timer == 32'd100_000_000)
- led <= 4'b0010;
- else if (timer == 32'd150_000_000)
- led <= 4'b0100;
- else if (timer == 32'd200_000_000)
- led <= 4'b1000;
- end
- end
- endmodule
" U7 `: x, Z4 Q( ~! B
0 w- {" B# O1 X$ |; B) A# H) w保存文件,名称与之前设置的入口文件相同;
' l+ K( N7 V: u! m: J v3 n1 J, O
第三步:综合
- ]9 @( _$ u1 e& y4 N点击Analysis & Synthesis进行综合;, P2 l- r# z: X: v
! a: L* w; B. O
第四步:引脚分配
4 X9 k+ Z7 s& F- D# K+ G$ W9 h" mAssignments --> Pins Planner打开引脚分配页面进行分配;, p6 i: Q$ t6 w4 g
按照原理图上分配对应的引脚:
1 l/ @6 n6 N1 ~$ kCLK --> E18 {. c% ]+ p. ^7 _$ L+ L9 j
LED0 --> E10
+ C! ` h0 P7 E! y" R dLED1 --> F9: w: m2 D. n _; H
LED2 --> C91 I2 G y5 _0 I
LED3 --> D9
+ W v5 P S5 t2 O `I/O Standard 根据实际电路选择电平标准,这里选择3.3-V LVTTL;# L$ D8 q6 h. c# `
同一个Bank的引脚的电平标准必须相同;+ L) v, H) {4 Y7 F, n# k/ R
注意事项:
- C! x" D3 g$ o5 s必须综合之后,才能进行引脚分配,否则系统并不知道你用了哪些引脚;
! A& v0 @4 M( x( Z& S/ |
7 N7 ?' w0 @# ?9 ? H第五步:编译
- n$ ?, e, y6 q% ?, g0 C点击Complile Design进行全编译;4 a! n& f9 Z6 }( q6 Y
5 d/ J5 K1 h e/ ^
第六步:下载测试
. y1 T4 A2 W; C. K通过JTAG下载至RAM' R$ o& l0 K5 R C4 J) h
点击Program Device打开编译器;
! l# i$ A K* s( r) ~5 u点击Add File...添加output_files目录下生成的sof文件;
$ d6 ]6 b# k3 j* U) i) F点击Start即可进行下载;
% Q+ \ c! K" J1 V! U下载完成后会自动运行,掉电后会丢失;* B0 y& L0 e0 x8 i4 _# Q
: L$ s* s2 W6 r# z$ E% C固化至配置芯片
1 T+ P4 O2 F5 |% j文件转换:
7 L# n( \- U t4 m/ h8 qFile --> Convert Programming Files...
2 E4 |# ?/ c6 F0 }% W! m; n, SProgramming file type:2 V3 q. Y% J6 F3 [1 _
选择文件格式,指定为jic格式,JTAG Indirect Configuration File(.jic)
- k' Y! `. O7 ^# y2 PConfiguration device:
/ a7 O' X1 z) ]6 Z选择配置芯片型号,与目标板上的型号一致(EPCS16)
~/ L1 u( Y5 }+ c% ?4 AFlash Loader:与目标板上FPGA的类别一致;& \! p' e% F5 h' d+ W/ P
Sof Data:选择编译好的sof文件;
# B3 j! a5 L% _$ X: N( x* y点击Generate生成jic目标文件;
4 e) d( F0 s5 y* ^(此时可选择Save Conversion Setup... 保本配置参数,以便下次调入)" _; i7 x0 r3 |3 p
下载固化:
2 y6 c! D/ E( Q: A, D- f0 g点击Program Device打开编译器;
" t% l; N) p) y" `7 z点击Add File...添加output_files目录下生成的jic文件;; J( h' A& M& j7 ~$ g5 B9 ?1 V5 N
点击Start即可进行下载;
9 N5 _3 @ C: N! b下载完成后,不会自动运行,需要重上电才能正常运行;, y( y! z8 x) w2 b
3 D7 q: z, j# |) k( N6 s: C9 m注意事项:
6 T V4 d' `9 X% T9 x一般只有在完成调试完成后,交付测试时才需要固化,而在调试过程中,则没必要进行固化下载;
0 D/ V% y. H8 Q" L; u |
|