跳转至

initial&always

initial

  • initial语句从0时刻开始执行,只执行一次
  • 多个initial语句之间是互相独立
  • 如果initial块内包含多个语句,需要使用关键字beginend组成一个块语句
  • 如果initial块内只有一条语句,关键字beginend可省略

    initial理论上来讲是不可综合的,多用于初始化、信号检测等

    `timescale 1ns/1ns  
       
    module test ;  
        reg  ai, bi ;  
       
        initial begin  
            ai         = 0 ;  
            #25 ;      ai        = 1 ;  
            #35 ;      ai        = 0 ;        //absolute 60ns  
            #40 ;      ai        = 1 ;        //absolute 100ns  
            #10 ;      ai        = 0 ;        //absolute 110ns  
        end  
       
        initial begin  
            bi         = 1 ;  
            #70 ;      bi        = 0 ;        //absolute 70ns  
            #20 ;      bi        = 1 ;        //absolute 90ns  
        end  
       
        //at proper time stop the simulation  
        initial begin  
            forever begin  
                #100;  
                //$display("---gyc---%d", $time);  
                if ($time >= 1000) begin  
                    $finish ;  
                end  
            end  
       end  
       
    endmodule
    

always

  • always语句是重复执行
  • 一般用于仿真时钟的产生,信号行为的检测等
    `timescale 1ns/1ns
    
    module test;
        parameter CLK_FREQ = 100;
        parameter CLK_CYCLE = 1e9;
        reg clk;
        initial clk = 1'b0;
        always # (CLK_CYCLE/2) clk = ~clk;
        always begin
            #10;
            if($time >= 1000) begin
                $finish;
            end
        end
    
    endmodule