Verilog语言程序框架

Verilog基础知识2

  • Verilog注释
  • Verilog关键字
  • Verilog程序框架
    • 模块的结构
    • 模块的调用

Verilog注释

同C语言相同 // /* */

Verilog关键字

常用关键字
Verilog语言程序框架_第1张图片

全部关键字

Verilog程序框架

模块的结构

Verilog的基本设计单元是模块block(类似C语言的的函数)
模块由两个部分组成,一部分描述接口,另一部分描述逻辑功能

模块分为可综合模块和不可综合模块

  • 可综合模块:能对应的实际电路
  • 不可综合模块:做测试,仿真文件,由仿真软件识别

每个Verilog程序包括四个主要的部分:
端口定义、IO说明、内部信号说明、功能定义

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

    1、assign语句
        描述组合逻辑
    2、always语句
        描述组合/时序逻辑
    3、例化实例元件
        如:and #2 u1(q,a,b); //and表示与门
    上述三种逻辑功能是并行的

例:

  module block(a,b,c,d);     //module表示模块的开始 
  //block表示模块名(自定义)   (a,b,c,d)为端口定义,表示有abcd四个端口
  
         input  a,b;        //表示a,b为输入信号
         output  c,d;       //表示c,d为输出信号
         //4,5行为IO说明
         
   assign  c = a | b ;      //assign为给线网类型数据赋值的一种方法
   assign  d = a & b ;
   //功能定义

 endmodule                   //endmodule表示模块的结束

程序对应电路
Verilog语言程序框架_第2张图片

在always块中,逻辑是顺序执行的,而多个always块之间是并行的,例如:

module example(
 input               sys_clk  ,  //系统时钟
 input               sys_rst_n,  //系统复位,低电平有效
  
 output  reg  [3:0]  led         //4个LED灯,reg表示输出端口为寄存器类型
 );     //将端口定义与IO说明放在一起

//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  

两个always是并行执行的,但always内部是串行执行的

模块的调用

在模块调用时,信号通过模块端口在模块之间传递
可以用例化的方式连接端口与端口,例如:
Verilog语言程序框架_第3张图片
图中箭头方向为信号传递方向
比如
.clk (sys_clk)是把sys_clk赋给clk,则在右侧模块中clk就是(sys_clk)。
.MAX_NUM (TIME_SHOW)是将TIME_SHOW的值赋给MAX_NUM
同时模块输出必须为线网(wire)类型数据

例化模块时一定要给模块起一个名称,例如:
Verilog语言程序框架_第4张图片

你可能感兴趣的:(fpga)