FPGA一般由verilog和VHDL语言开发,但由于verilog与C语言语法相像,更容易让初学者快速掌握这门语言,于是在应用宽度方面是verilog更胜一筹,但VHDL最初是用于军方产品的开发语言,所以VHDL的语法更加严谨,此次我们以广受使用的verilog语言为基础开发FPGA。
一、FPGA开发平台(载体)
FPGA作为芯片,需要通过使用开发语言以平台为载体进行FPGA设计,目前开发FPGA主要为两大平台------Quartus || 和vivodo,前者开发FPGA芯片和软件是Altera公司生产的,后者是Xilinx公司的,Quartus || 软件容量不大,常用的13版本为九个G,vivodo软件一般约为40G,虽然前者容量不大,但前者功能可能没有后者多,这个需要看开发者使用的是哪一家公司的FPGA芯片。
二、verilog基本结构
module LED(
input sys_clk,
input sys_rst_n,
output led
);
.........
.........
endmodule
以上是verilog的基本结构,verilog没有C语言中的括号,但它使用了begin和end作为括号,module代表一个块,类似于C语言中的函数名,这个块的名字最好与文件名一致,块后面有一个括号,里面定义了这个块的输入输出,注意,所有的input输入和output输出都是相对于FPGA来说的,进入FPGA就是input,从FPGA出去就是output输出,注意逗号与分号的使用,当然里面还没有填充过程。
2.1、assign语句
module LED(
input sys_clk,
input sys_rst_n,
output LED
);
wire LED ;
assign LED = 1'b1;
endmodule
assign表示组合逻辑,所以使用等于号进行赋值,注意,verilog是并行执行的语言,所有的语句不分先后顺序,同时开始。
2.2、always语句
module LED(
input sys_clk,
input sys_rst_n,
output LED
);
reg LED ;
always @(posedge sys_clk or negedge rst_n) begin
if(!rst_n) begin
LED <= 1'b0;
end
else begin
LED <= 1'b1;
end
end
endmodule
always表示时序组合逻辑,括号中的posedge表示上升沿,negedge表示下降沿,即在时钟clk的上升沿或者复位的下降沿时才执行其中的语句,里面的第一条语句表示复位为低电平的时候有效,执行LED <= 1’b0,<=是时序逻辑的赋值,不等于小于等于符号,1’b1表示位宽为1位,b表示二进制,后面的0表示二进制的0,1’b0表示十进制的0,若不为复位信号,则进行LED <= 1’b1,相当于给LED赋值1。