FPGA是一种现成可编程门阵列,它是一种半导体数字集成电路。其内部的电路可根据实际需求通过硬件描述语言VHDL编程改变。
FPGA基本结构由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。
FPGA的设计流程包括设计输入、RTL仿真、设计综合、布线和布线、时序仿真、时序分析和上系统验证等主要步骤。
FPGA和单片机,首先它们在硬件架构上不同,单片机无论是MCU还是MPU都是基于控制器和算术逻辑单元进行工作的,而FPGA是基于查找表的硬件电路进行工作的,这一点正同于单片机用的是软件设计语言而FPGA用的是硬件描述语言一样;其次,FPGA在芯片容量、组合逻辑、工作速度、设计灵活上远优于单片机;最后,在代码的设计思想上也不一样,单片机使用的是串行的设计思想,而FPGA则使用的是并行的设计思想。这其最根本的就是单片机与fpga的硬件结构不同 ,fpga编程是重新以逻辑单元为最小单位对目标实现的功能进行重新构造成该硬件。单片机是在规划好的启动文件配置寄存器,cpu按照一定的顺序去取指令执行。
下面是fpga的简单移位输出程序:
module f_led( //模块开始
input sys_clk,
input sysy_rst_n,
output reg [4:0] led
);
reg [23:0] counter;
//计时块
always @(posedge sys_clk or negedge sysy_rst_n)begin
if(!sysy_rst_n)
counter <= 24’d0;
else if(counter<24’d500_0000)
counter<=counter +1’b1;
else
counter<=24’d0;
end
//移位模块
always @(posedge sys_clk or negedge sysy_rst_n) begin
if(!sysy_rst_n)
led <=5’b00001;
else if(counter == 24’d500_0000)
//led[3:0] <= {led[2:0],led[3]}; //拼接实现移位
led <=(led << 1’b1); //移位运算符移位
else if(led == 5’b10000)
led<=5’b00001;
else
led <=led;
end
endmodule //模块结束
至此大致的认识了fpga,需要学习的还有很多,首先了解fpga的开发环境、编程的思想、编程的关键字、编程的语法、时序逻辑仿真等。