【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
之前fpga只能国外做的时候,比如大家使用的altera,或者是xilinx的fpga,整体还是比较贵的。但是现在很多国产的fpga也是可以用起来了,价格也是非常亲民。另外,fpga使用的范围其实还是很多的,不只是大家认为的高速电路和复杂算法,在低端的上电、安全、信号互斥等领域其实也非常实用。

1、现在的fpga模块不贵
以高云fpga为例,大部分模块都不贵,很多1k的fpga甚至只有小几十元,而且是板载jtag下载电路的,比如sipeed模块。
2、低端fpga的应用场景
低端fpga,一般都是用在一些低频、非标的场合。比如说开机顺序的控制、安全关键领域、电机控制领域,还有就是一些监控领域。以监控领域为例,可以是fpga监控soc、mcu、电控和esp32,这就非常方便。
3、ide下载
如果是高云fpga,一般下载教育版本的ide即可,也就是gowin fpga designer。
4、烧入
一开始使用的时候,可以直接选择带jtag下载电路的模块即可。这个时候,我们编译完代码,就可以直接综合、分配管脚、时序约束、布局布线和下载了。ide上面有一个programmer,直接点击,就会弹出一个下载框,直接下载即可。
5、sram烧入和flash烧入
烧入的时候,注意有sram和flash两种烧入。前面一种,断电后就丢失了,后面一种断电后还能继续运行。
6、fpga开发的三个基本文件
首先肯定是代码文件,一般就是verilog或者是vhdl文件,目前普遍用verilog文件比较多。第二个就是管脚约束文件,gowin上面就是cst文件。最后一个就是时序约束文件,如果本身clk信号比较慢,可以不添加。这里给出一个v文件,
module led (
input sys_clk,
input sys_rst_n,
output reg [2:0] led // 110 R, 101 B, 011 G
);
reg [31:0] counter;
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n) begin
counter <= 31'd0;
led <= 3'b110;
end
else if (counter < 31'd1350_0000) // 0.5s delay
counter <= counter + 1;
else begin
counter <= 31'd0;
led[2:0] <= {led[1:0],led[2]};
end
end
endmodule
还有一个cst文件,
//Copyright (C)2014-2021 Gowin Semiconductor Corporation.
//All rights reserved.
//File Title: Physical Constraints file
//GOWIN Version: 1.9.8
//Part Number: GW1NZ-LV1QN48C6/I5
//Device: GW1NZ-1
//Created Time: Thu 09 16 14:45:08 2021
IO_LOC "led[2]" 11;
IO_PORT "led[2]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "led[1]" 10;
IO_PORT "led[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "led[0]" 9;
IO_PORT "led[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8;
IO_LOC "sys_rst_n" 13;
IO_PORT "sys_rst_n" IO_TYPE=LVCMOS33 PULL_MODE=UP;
IO_LOC "sys_clk" 47;
IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP;
至于时钟约束,可以这么写,
create_clock -name sys_clk -period 37.037 -waveform {0 18.518} [get_ports {sys_clk}]
7、烧录的文件格式
一般就是fs文件。
8、仿真
编写verilog之前,最好先仿真一下。仿真的方法可以是modelsim这样的商业软件,也可以是iverilog这样的开源软件,都是可以的。
9、fpga的优势
如果用类似1k、4k这样低端的fpga,整体的成本都是可控的,但是fpga实现的功能却是mcu比拟不了的。比如说用在安全领域,它可以同时监控多个模块,即使每一个模块都是ttl,都没有关系的。还比如,它可以在信号领域实现安全绑定,比如透过与或非的形式,强制保证一些信号是互斥、互锁的。最后,就是fpga本身的并发优势,如果用mcu去监控,基本就是循环loop+中断的方式,而fpga就是并发检测,根本不是顺序执行的概念。
10、灵活处理fpga
esp32本身做业务比较合适,但是如果是底层信号,尤其是硬件级别的信号处理,其实用fpga是非常合适的。fpga并不适合做具体的业务,但是底层的加载、监控、互斥还是非常合适的。