FPGA学习-4-Verilog程序框架

系统:win10
平台:Quartus II
FPGA:EP4CE6

1 注释

与C语言一样,

//单行注释
/*
多行注释
*/

2 关键字

and  always  assign  begin  buf 
bufif0  bufif1  case  casex  casez 
cmos  deassign  default  defparam  disable 
edge  else  end  endcase  endfunction 
dprimitive  endmodule  endspecify  endtable  endtask 
event  for  force  forever  fork 
function  highz0  highz1  if  ifnone 
initial  inout  input  integer  join 
large  macromodule  medium  module  nand 
negedge  nor  not  notif0  notif1 
nmos  or  output  parameter  pmos 
posedge  primitive  pulldown  pullup  pull0 
pull1  rcmos  real  realtime  reg 
release  repeat  rnmos  rpmos  rtran 
rtranif0  rtranif1  scalared  small  specify 
pecparam  strength  strong0  strong1  supply0 
supply1  table  task  tran  tranif0 
tranif1  time  tri  triand  trior 
trireg  tri0  tri1  vectored  wait 
wand  weak0  weak1  while  wire 
wor  xnor  xor     

常用的

关键字   含义 
module  模块开始定义 
input   输入端口定义 
output  输出端口定义 
inout  	双向端口定义 
parameter  信号的参数定义 
wire  wire	信号定义 
reg  reg	信号定义 
always  	产生reg信号语句的关键字 
assign 		产生wire信号语句的关键字 
begin  		语句的起始标志 
end  		语句的结束标志 
osedge/negedge  		时序电路的标志 
case  					Case语句起始标记 
default  				Case语句的默认分支标志 
endcase  			Case语句结束标记 
if  			if/else语句标记 
else  			if/else语句标记 
for 		    for语句标记 
endmodule  		模块结束定义 

3 程序框架

Verilog 的基本设计单元是“模块”(block)。
一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能。

FPGA学习-4-Verilog程序框架_第1张图片
每个Verilog程序包括4个主要的部分:
端口定义、IO说明、内部信号声明、功能定义。

module flow_led(			//模块名为flow_led,, ()中定义端口
    input               sys_clk  ,  //系统时钟		//IO说明 
    input               sys_rst_n,  //系统复位,低电平有效
	 
    output  reg  [3:0]  led         //4个LED灯
    );

//reg define
reg [23:0] counter;

//*****************************************************
//**                    main code
//***************************************************** 
                                                                                                                                                                                                                         
//计数器对系统时钟计数,计时0.2秒
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd1000_0000)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end

//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 4'b0001;
    else if(counter == 24'd1000_0000) 
        led[3:0] <= {led[2:0],led[3]};
    else
        led <= led;
end

endmodule 

FPGA学习-4-Verilog程序框架_第2张图片
**

功能定义部分有三种方法:

1 assign语句 描述组合逻辑
2 always语句 描述组合/时序逻辑
3 实例元件 and #2 u1(q,a,b);
注意三种逻辑功能是并行的

注意:
在always块中, 逻辑是顺序执行的, 多个always是并行执行的
**

块的调用:

定义块
FPGA学习-4-Verilog程序框架_第3张图片
调用快
FPGA学习-4-Verilog程序框架_第4张图片

FPGA学习-4-Verilog程序框架_第5张图片
FPGA学习-4-Verilog程序框架_第6张图片

你可能感兴趣的:(FPGA)