|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
. P3 i* J. z( N! O6 }" R, A4 n) l
文章摘要:* H' e+ G1 P0 ^3 D
近日花巨资从某宝购置了一套FPGA开发板,拿到板子的第一件事肯定是先跑上大名鼎鼎的跑马灯例程,应当算是硬件开发中的HelloWorld了,本文要从新建工程到仿真下载验证,来说明FPGA的开发流程,本文的代码不重要,重点在于流程,流程,流程......* j j; t2 l1 s w
0 C- n/ F `% M: B; r! J) s硬件平台: EP4CE6F17C8# u, f3 a6 N& N0 l, {7 b7 a0 h
开发环境: Quartus II 13.1
& S- w' ]- M6 ?8 M$ I# t) k! U0 h2 b: H D: } j
第一步:新建工程
* t3 R" j* p( y- OFile --> Open Project Wizard...
5 l2 h- h% f5 l' |- N1.选择工程目录,指定工程名及设计入口,一般情况下建议工程目录,工程名称及设计入口同名,不能有中文路径;
2 h$ A( M* l& r" N2 ?2.添加已有文件,如果新建的工程,则直接跳过;
% R+ N5 n& Q V6 |+ n! O l0 ?% p8 l+ A3.器件选择,需要与实际用到的器件相同,这里选择EP4CE6F17C8;
# h9 R$ d/ |' o4.设置工具,一般直接跳过;
' C% f& N- } P1 H1 R M5 |5.信息确认,如果无误则点击Finish完成;2 M, Q, `& t5 w. x% ^5 M& q$ j/ g6 a
修改默认配置:. ~. J) F; q4 j/ N
Assignments --> Device...3 o( K: F5 p9 y& F( w0 X! W7 w
--> Device and Pin Option...
4 b5 A+ {, a% qUnused Pins:未用到引脚选择,As input tri-stated;
) J3 |0 P# N7 M. K4 T# OValtage 引脚默认电压值,选择 3.3-V LVTTL;
8 X m2 t! U; d b# H, c! P/ d2 z/ A1 e& F
第二步:建立HDL文件4 p. i9 _; D! R% M
File--> New...
7 S( ?$ S+ y, o& v7 A; Y. GDesign Files --> Verilog HDL File! e7 W! [( F. Y
示例代码:. D! ~% ?: W- a& I' L
5 l9 J5 Y( p; N; _. R/ 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& |$ Q5 _" q0 r4 a5 W* L
) [" n$ Z4 I; H ]
保存文件,名称与之前设置的入口文件相同;' J$ D* ?) f1 E
4 O/ a% T$ p; \, z第三步:综合$ X# P$ z$ i. J4 a1 z
点击Analysis & Synthesis进行综合;
2 K5 l0 Q8 e* R9 g: ~* Y% \# \* ?: O/ c7 e H; W J
第四步:引脚分配
% O. c* n) v7 L- N! v$ r/ }Assignments --> Pins Planner打开引脚分配页面进行分配;2 h) z: w3 J' P( e# S e q
按照原理图上分配对应的引脚:
W. ^4 [5 c* c5 h9 v$ eCLK --> E10 R% B6 y: P( k2 W1 n! `0 W# N/ ?
LED0 --> E107 I: V! L3 c2 q5 F% |& }
LED1 --> F95 l: E3 C9 k$ f& I2 c& n" h
LED2 --> C97 X/ K- M- x" ~
LED3 --> D9. S5 S( ]$ ^0 N) c0 G8 k
I/O Standard 根据实际电路选择电平标准,这里选择3.3-V LVTTL;
: g K, v) U$ g s7 }同一个Bank的引脚的电平标准必须相同;9 G; w3 i0 s% Q5 F0 v
注意事项:6 A" A3 o j+ u0 ?% c' P
必须综合之后,才能进行引脚分配,否则系统并不知道你用了哪些引脚;
, r2 a7 M: [. o& ]. i/ ^7 A6 c* F9 Z. o. ?8 p: f/ s
第五步:编译4 {* H& R! j$ r! m4 h
点击Complile Design进行全编译;8 [3 F7 F4 k& Z, s' E. A
3 Z" }" P! X( C" O! ~* r第六步:下载测试2 g* d$ F7 K7 { v }
通过JTAG下载至RAM& }* L8 c# Z( ~, a$ \+ }: O8 a
点击Program Device打开编译器;
$ ~9 x0 r7 O2 }5 [6 ~点击Add File...添加output_files目录下生成的sof文件;! ?) Q1 X5 K& k/ V- T2 L% o
点击Start即可进行下载;/ @- K( ~3 m. [9 t3 v' z3 P
下载完成后会自动运行,掉电后会丢失;0 q- b. [1 N# q- ^ p4 A! g
! ?9 u* I- t1 e. F3 s$ a固化至配置芯片
* V' N0 |% j, R+ [2 o1 X1 g: e文件转换:( D0 ]3 z7 S% }2 ^8 ~
File --> Convert Programming Files...# k" N1 x: V+ t3 D0 X
Programming file type:
" F; ?! L8 r2 }; x2 v! j0 d选择文件格式,指定为jic格式,JTAG Indirect Configuration File(.jic). {) W1 |& x( e) H
Configuration device:
8 R8 X: W, h- F3 [- B' {+ ~; m选择配置芯片型号,与目标板上的型号一致(EPCS16)
7 e4 e7 j; t( Y- o* h# p1 ^Flash Loader:与目标板上FPGA的类别一致;
$ L% H$ T1 L/ ]2 U- i+ O. NSof Data:选择编译好的sof文件;/ t, t( y6 V; ~% s0 ~1 e# C
点击Generate生成jic目标文件;
0 ^$ C- N" p0 a: s) V(此时可选择Save Conversion Setup... 保本配置参数,以便下次调入)
/ M$ \ i8 ~+ B4 B# L( k下载固化:
$ [# @3 F; m3 X) V4 i6 n. i$ n7 |点击Program Device打开编译器;3 V% t% b0 j# \9 {7 Y
点击Add File...添加output_files目录下生成的jic文件;, t7 i; R5 @6 D- P5 K: K/ N
点击Start即可进行下载;
6 ~! c, `( E+ n: d: ~8 p: Y下载完成后,不会自动运行,需要重上电才能正常运行;
( h' A+ B. I' v% H+ C& w! u% Q, S3 ]4 J" v* H9 U" H6 }; w
注意事项:
" C; S# ^2 r, r, O0 _- q+ q, v/ r一般只有在完成调试完成后,交付测试时才需要固化,而在调试过程中,则没必要进行固化下载;6 g: |0 T3 n0 w, S" [: i
|
|