【Verilog语法】比较不同计数器的运算方式,其中有一个数是延迟打一拍的效果,目的是使得两个计数器的结果相同。

比较不同计数器的运算方式,其中有一个数是延迟打一拍的效果,目的是使得两个计数器的结果相同。

      • 1,第一种
      • 2,第二种
      • 3,第三种

第三种方案,完成实现。

1,第一种

(1)RTL


module c(
input clk,
input rst_n,
// input a,
// input b,
output cnt1,
output cnt2
);

reg [4:0] cnt1, cnt2;
always@(posedge clk or negedge rst_n)    begin
    if(!rst_n)  begin
        cnt1    <= 0;
        cnt2    <= 0;
        end
     else if(cnt1 <= 16)    begin
        cnt1    <= cnt1 + 1;
        cnt2    <= cnt1;        
        end
     else   begin
        cnt1 <= 0;
        cnt2 <= 0;
        end         
end

endmodule

(2)TB


module tb_c;
reg clk;
reg rst_n;
wire [4:0]   cnt1;
wire [4:0]   cnt2;

always #10 clk = ~clk;

initial begin
        clk = 1; rst_n =1;
    
#20;    rst_n = 0;

#40;    rst_n = 1;    
    

end 

c uu(
.clk(clk),
.rst_n(rst_n),
.cnt1(cnt1),
.cnt2(cnt2)
);

endmodule

(3)仿真
【Verilog语法】比较不同计数器的运算方式,其中有一个数是延迟打一拍的效果,目的是使得两个计数器的结果相同。_第1张图片

2,第二种

(1)RTL


module c(
input clk,
input rst_n,
// input a,
// input b,
output cnt1,
output cnt2
);

reg [4:0] cnt1, cnt2;
always@(posedge clk or negedge rst_n)    begin
    if(!rst_n)  begin
        cnt1    <= 0;
        cnt2    <= 0;
        end
     else if(cnt2 <= 16)    begin
        cnt1    <= cnt1 + 1;
        cnt2    <= cnt1;        
        end
     else   begin
        cnt1 <= 0;
        cnt2 <= 0;
        end         
end

endmodule


(2)TB


module tb_c;
reg clk;
reg rst_n;
wire [4:0]   cnt1;
wire [4:0]   cnt2;

always #10 clk = ~clk;

initial begin
        clk = 1; rst_n =1;
    
#20;    rst_n = 0;

#40;    rst_n = 1;    
    

end 

c uu(
.clk(clk),
.rst_n(rst_n),
.cnt1(cnt1),
.cnt2(cnt2)
);

endmodule

(3)仿真
【Verilog语法】比较不同计数器的运算方式,其中有一个数是延迟打一拍的效果,目的是使得两个计数器的结果相同。_第2张图片

3,第三种

(1)RTL


module c(
input clk,
input rst_n,
// input a,
// input b,
output cnt1,
output cnt2
);

reg [4:0] cnt1, cnt2;
// 1
always@(posedge clk or negedge rst_n)    begin
    if(!rst_n)  begin
        cnt1    <= 0;
        end
     else if(cnt1 < 16)    begin
        cnt1    <= cnt1 + 1;       // 1
        end
     else   begin
        cnt1 <= 0;
        end         
end

// 2
always@(posedge clk or negedge rst_n)    begin
    if(!rst_n)  begin
        cnt2    <= 0;
        end
     else if(cnt2 < 16)    begin
        cnt2    <= cnt1;               // 0
        end
     else   begin
        cnt2 <= 0;
        end         
end


endmodule

(2)TB

module tb_c;
reg clk;
reg rst_n;
wire [4:0]   cnt1;
wire [4:0]   cnt2;

always #10 clk = ~clk;

initial begin
        clk = 1; rst_n =1;
    
#20;    rst_n = 0;

#40;    rst_n = 1;    
    

end 

c uu(
.clk(clk),
.rst_n(rst_n),
.cnt1(cnt1),
.cnt2(cnt2)
);

endmodule

(3)仿真

【Verilog语法】比较不同计数器的运算方式,其中有一个数是延迟打一拍的效果,目的是使得两个计数器的结果相同。_第3张图片

你可能感兴趣的:(fpga开发,VerilogIC前端开发)