文章摘要:
近日花巨资从某宝购置了一个套FPGA开发板,拿到板子的第一件事肯定是先跑上大名鼎鼎的跑马灯例程,应当算是硬件开发中的HelloWorld了,本文中要从新建工程到仿真下载验证,来说明FPGA的开发流程,本文的代码不重要,重点在于流程,流程,流程...


硬件平台: EP4CE6F17C8
开发环境: Quartus II 13.1


第一步:新建工程

File --> Open Project Wizard...

1.选择工程目录,指定工程名及设计入口,一般情况下建议工程目录,工程名称及设计入口同名,不能有中文路径;

2.添加已有文件,如果新建的工程,则直接跳过;

3.器件选择,需要与实际用到的器件相同,这里选择EP4CE6F17C8;

4.设置工具,一般直接跳过;

5.信息确认,如果无误则点击Finish完成;

修改默认配置:

Assignments --> Device...
--> Device and Pin Option...

Unused Pins:未用到引脚选择,As input tri-stated;
Valtage 引脚默认电压值,选择 3.3-V LVTTL;


第二步:建立HDL文件

File--> New...
Design Files --> Verilog HDL File

示例代码:

/*
 * 功能描述:流水灯演示
 */
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

保存文件,名称与之前设置的入口文件相同;


第三步:综合

点击Analysis & Synthesis进行综合;


第四步:引脚分配
Assignments --> Pins Planner打开引脚分配页面进行分配;

按照原理图上分配对应的引脚:

CLK --> E1
LED0 --> E10
LED1 --> F9
LED2 --> C9
LED3 --> D9

I/O Standard 根据实际电路选择电平标准,这里选择3.3-V LVTTL;
同一个Bank的引脚的电平标准必须相同;

注意事项:
必须综合之后,才能进行引脚分配,否则系统并不知道你用了哪些引脚;


第五步:编译

点击Complile Design进行全编译;


第六步:下载测试

通过JTAG下载至RAM

点击Program Device打开编译器;
点击Add File...添加output_files目录下生成的sof文件;
点击Start即可进行下载;
下载完成后会自动运行,掉电后会丢失;


固化至配置芯片

文件转换:
File --> Convert Programming Files...
Programming file type:
选择文件格式,指定为jic格式,JTAG Indirect Configuration File(.jic)
Configuration device:
选择配置芯片型号,与目标板上的型号一致(EPCS16)
Flash Loader:与目标板上FPGA的类别一致;
Sof Data:选择编译好的sof文件;
点击Generate生成jic目标文件;
(此时可选择Save Conversion Setup... 保本配置参数,以便下次调入)

下载固化
点击Program Device打开编译器;
点击Add File...添加output_files目录下生成的jic文件;
点击Start即可进行下载;
下载完成后,不会自动运行,需要重上电才能正常运行;


注意事项:

一般只有在完成调试完成后,交付测试时才需要固化,而在调试过程中,则没必要进行固化下载;