《FPGA开发-1-verilog基本语法》

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。


版权声明:本文为weixin_46369610原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。