非常感谢爱板网给的这次机会,我是从事单片机开发的工程师,从8位单片机到32位的单片机,对fpga向往已久,因为对实时性要求较高的LCD驱动和无感电机驱动如果采用fpga开发应该效果更好,希望能在实际产品开发中能够应用到fpga,但总体感觉fpga开发门槛较高,应用到产品成本也会提高,但也会让产品上一个档次。
首先是开发环境:Quartus Prime 16.0 Lite Edition,之所以用它是因为免费,体积相对小巧。我开发单片机采用keil C,体积不过百兆,没想到fpga开发的pro版本的安装程序达到了约15G,让我感觉压力大增,因为里面的内容肯定很多,要学的东西也多呀,还好有免费的,虽然功能简化了,那就从简单的开始。开发板当然是:BeMicro Max10 FPGA开发板。
下载和安装略过,注意要安装板载的USB-Blaster驱动程序。
运行Quartus Prime 16.0 Lite Edition,点击file菜单的New Project Wizard。
选择项目名称,这里我用LED2为名,因为要点亮开发板上的LED灯。
点击下一步,
选择project template,这里为了简单,直接利用官方提供的基于BeMicro Max10 FPGA的模板,因为模板里有开发板的端口定义,可以简化设计,免除端口定义的麻烦,还免去了选择芯片的麻烦。点击下一步进入到Design Templates界面,按照下图选择Rest Factory Setting LED flash - BeMicro 。注意如果Quartus Prime 16.0 Lite Edition第一次运行,模板是空的,需要点击界面下方链接在网站安装。
点击完成。
在项目文件栏增加了两个文件
且在factory_reset_top.v自动产生下列代码
module factory_reset_top(clk, reset_n, LED);input clk;input reset_n;output [7:0] LED;reg [26:0] counter;reg [5:0] PWM_adj;reg [6:0] PWM_width;reg [7:0] LED;always @(posedge clk or negedge reset_n) begin if(~reset_n) begin counter <= 0; LED[0] <= 0; end else begin counter <= counter+27'h0000001; PWM_width <= PWM_width[5:0]+ PWM_adj; if(counter[26]) begin PWM_adj <= counter[25:20]; end else begin PWM_adj <= ~ counter[25:20]; end LED[0] <= PWM_width[6]; LED[1] <= PWM_width[6]; LED[2] <= PWM_width[6]; LED[3] <= PWM_width[6]; LED[4] <= PWM_width[6]; LED[5] <= PWM_width[6]; LED[6] <= PWM_width[6]; LED[7] <= PWM_width[6]; end endendmodule代码的意思是通过时间改变8个LED灯亮和灭的时间,与单片机的PWM调整亮度的原理一样。
点击工具栏的按钮进行编译。