Verilog并不难,只要有一点的C语言基础,你就可以开始学习它,进而不断深入的学习FPGA。和C语言以main函数一样,Verilog以模块为主体,看下面一个小小的例子:module my_first(
sys_clk,
rst_n,
data_ina,
data_inb,
data_out
);
// 端口说明
input sys_clk;
input rst_n;
input [7:0] data_ina;
input [7:0] data_inb
output [8:0] data_out;
// 功能操作
assign data_out = data_ina + data_inb;
endmodule
整个模块就是以 module 模块名 和 endmodule组成,这样就算编写了一个简单的模块了。它主要包括:
- 模块的输入(input)和输出(output)端口声明:简单的说就是这个模块对外部的相应输入做处理后输出处理后的结果.上面的例子就是对2个8位宽的数据做加法后在data_out端口输出结果。
- 模块的功能:主要有3中方法可以用:a.数据流级操作,属于组合逻辑,例如例子中的 assigndata_out =data_ina + data_inb;只要模块执行,就不断地对数据data_ina和data_inb进行加法操作并赋给data_out输出;b.门级操作,属于组合逻辑如:c= a & b;它就是一个2输入的与门,对输入数据做与门计算后输出;c.行为级操作,这个用的最多,属于时序逻辑,如:always @(触发的条件) 执行操作,简单的说就是锁存器或者触发器的模型。当触发的条件是电平触发时,即锁存器模型,只要相应的电平改变了就会执行后面需要执行的操作一次;而当触发条件是边沿触发时,即触发器模型,只要用对应的边沿产生就执行后面的操作一次。这里有一个重要的概念需要弄明白,组合逻辑是,输入一旦改变,相应输出就改变;而时序逻辑是输入改变了,需等触发条件的到来才相应的改变一次。但是它们的执行是并行的,所有级都是同时执行,这和C语言是不同的,初学者一定要弄明白。
- 功能的操作语法:不仅和C语言很相似,而且都是C语言里面常用的一些语法,常用的语法有: if( ),if( ) else( ),if( ) elseif( ) else,case( ),至于它和C语言的用法有什么不同,下次将详细的讲解。
|