zhliao2

风雨兼程,一路向北-------fpga (Keep a quiet heart study)
【笔记】把计数整合在步骤里的写法

参考<<Verilog那些事儿_整合篇>>

 

Verilog源代码

module c1b_module
(
    input CLK,
     input RSTn,
     
     output Q,
     
     /******************/ 
     
     output [4:0]SQ_C1,
     output [1:0]SQ_i
     
);

    /*************************/
     
     reg [1:0]i;
     reg [4:0]C1;
     reg rQ;
     
     always @ ( posedge CLK or negedge RSTn )
         if( !RSTn )
              begin           
                     i <= 2'd0;
                     C1 <= 5'd0;
                     rQ <= 1'b0;
                end
          else
              case( i )
                        //步骤0把Q拉高是10个时钟,10 - 1表示步骤0表示消耗是10个时钟,-1表示提前一个时钟更新i的值
                        //若把c1 == 10 - 1改为c1 == 10的话,那么Q就表示为有11个时钟处于高电平
                    0: 
                     if( C1 == 10 - 1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 
                     else begin rQ <= 1'b1; C1 <= C1 + 1'b1; end 
                     
                    1://步骤0把Q拉低是10个时钟
                     if( C1 == 10 - 1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 
                     else begin rQ <= 1'b0; C1 <= C1 + 1'b1; end 
                     
                     2:
                     if( C1 == 10 - 1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 
                     else begin rQ <= 1'b1; C1 <= C1 + 1'b1; end 
                     
                     3:
                     if( C1 == 10 -1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 
                     else begin rQ <= 1'b0; C1 <= C1 + 1'b1; end 
                     
                endcase
                
    /***********************************/
    
    assign Q = rQ;
    
    /*****************/
    
    assign SQ_i = i;
    assign SQ_C1 = C1;
    
    /***********************************/
                

endmodule


仿真源代码

`timescale 1 ps/ 1 ps
module c1b_module_simulation();

    reg CLK;
    reg RSTn;
                                         
    wire Q;
    wire [4:0]SQ_C1;
    wire [1:0]SQ_i;
   
    /***********************/
                        
    c1b_module i1 
    (
        .CLK(CLK),
        .RSTn(RSTn),
        .Q(Q),
        .SQ_C1(SQ_C1),
        .SQ_i(SQ_i)
    );
    
    /***********************/

    initial                                                
    begin  
       RSTn = 0; #1000 RSTn = 1;
         CLK = 1; forever #5 CLK = ~CLK;
    end                                

   /***********************/    
                                                 
endmodule


结果

这里的1个时钟周期为10ps

 

 

 

posted on 2012-12-23 19:10  zhliao  阅读(307)  评论(0编辑  收藏  举报