Verilog学习:过程块

最近我在搞一个FPGA的编程开发,学习了Verilog语言,这里想跟大家分享一下过程块的相关知识。

1、initial语句


       即由关键字initial语句引导的过程块。这种过程块在执行的过程中只会执行一次,且在仿真初始时刻(即0时刻)开始执行,一直到当前状态结束,在一个模块中的各个initial过程块之间都是并发执行的。

       initial过程块的语法格式如下所示:

initial

        [时序控制]       //可选

        过程赋值语句等等

        下面简单的写一个小模块

module  test;

reg x,y;

 

initial 

       x = 1'b0;//单个过程申明语句无需在语句块中

initial begin

        #10;

        x = 1'b1;

        #10;

        y = 1'b1;

end

 

initial

      #100 $ finish;  //测试中的系统任务结束

endmodule

说明:一般情况下,initial模块用于在仿真过程中进行初始化、监视、波形生成和其他操作,并且在整个仿真过程中仅执行一次。(变量赋值(初始化赋值等等)可以在其中声明)

2、always语句


       即由关键字always语句引导的过程块。always语句块在0时刻开始顺序执行其中的行为语句。当过程块内最后一条语句执行完毕后,在时序控制条件下循环再次执行过程块中的第一条语句,知道仿真结束。当仿真缺少时间控制时会造成仿真死锁。故此,always块常用于数字电路中反复执行的活动建模。

     其语法格式为:

always

        [时序控制]       //可选

        过程赋值语句等等

     下面我们给出两个实例:

always语句块带阻塞赋值语句如下:

clk = 1'b0;

always #10 clk = ~clk;

说明:重复执行clock变量的求反造作,从时刻0开始不断循环,直到仿真结束。

always语句块带有非阻塞赋值语句如下:

reg clk;

reg [5:0] in ,a,b;

always @(posedge clk)     //在clk上升沿触发事件控制

      begin

            a <= in;

            b <= a;

      end

说明:为了避免无意义的循环执行,加入时序控制。时序控制的方法之一是加入时延控制(“#”)或者是事件控制(clk上升沿事件)。

你可能感兴趣的:(计算机,FPGA编程,Verilog)