比较不同计数器的运算方式,其中有一个数是延迟打一拍的效果,目的是使得两个计数器的结果相同。
- 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)    beginif(!rst_n)  begincnt1    <= 0;cnt2    <= 0;endelse if(cnt1 <= 16)    begincnt1    <= cnt1 + 1;cnt2    <= cnt1;        endelse   begincnt1 <= 0;cnt2 <= 0;end         
endendmodule(2)TB
module tb_c;
reg clk;
reg rst_n;
wire [4:0]   cnt1;
wire [4:0]   cnt2;always #10 clk = ~clk;initial beginclk = 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)仿真
 
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)    beginif(!rst_n)  begincnt1    <= 0;cnt2    <= 0;endelse if(cnt2 <= 16)    begincnt1    <= cnt1 + 1;cnt2    <= cnt1;        endelse   begincnt1 <= 0;cnt2 <= 0;end         
endendmodule(2)TB
module tb_c;
reg clk;
reg rst_n;
wire [4:0]   cnt1;
wire [4:0]   cnt2;always #10 clk = ~clk;initial beginclk = 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)仿真
 
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)    beginif(!rst_n)  begincnt1    <= 0;endelse if(cnt1 < 16)    begincnt1    <= cnt1 + 1;       // 1endelse   begincnt1 <= 0;end         
end// 2
always@(posedge clk or negedge rst_n)    beginif(!rst_n)  begincnt2    <= 0;endelse if(cnt2 < 16)    begincnt2    <= cnt1;               // 0endelse   begincnt2 <= 0;end         
endendmodule(2)TB
module tb_c;
reg clk;
reg rst_n;
wire [4:0]   cnt1;
wire [4:0]   cnt2;always #10 clk = ~clk;initial beginclk = 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)仿真
