131 lines
2.9 KiB
Coq
131 lines
2.9 KiB
Coq
|
|
|||
|
`timescale 1ns/1ps
|
|||
|
|
|||
|
module TB();
|
|||
|
|
|||
|
initial
|
|||
|
begin
|
|||
|
$fsdbDumpfile("TB.fsdb");
|
|||
|
$fsdbDumpvars(0, TB);
|
|||
|
end
|
|||
|
|
|||
|
// <EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
reg clk;
|
|||
|
reg rst_n;
|
|||
|
reg [15:0] din;
|
|||
|
reg enable;
|
|||
|
reg [21:0] cnt;
|
|||
|
wire [15:0] dout0;
|
|||
|
wire [15:0] dout1;
|
|||
|
|
|||
|
// ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
|
|||
|
s2p_2 uut (
|
|||
|
.clk (clk),
|
|||
|
.rst_n (rst_n),
|
|||
|
.din (din),
|
|||
|
.en (enable),
|
|||
|
.dout0 (dout0),
|
|||
|
.dout1 (dout1)
|
|||
|
);
|
|||
|
|
|||
|
reg[15:0] din_r1;
|
|||
|
always @(posedge clk or negedge rst_n)begin
|
|||
|
if(rst_n==1'b0)begin
|
|||
|
din_r1 <= 0;
|
|||
|
end
|
|||
|
else begin
|
|||
|
din_r1 <= din;
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
wire signed [15:0] diff;
|
|||
|
assign diff = din - din_r1;
|
|||
|
|
|||
|
reg[15:0] dout1_r1;
|
|||
|
reg[15:0] dout1_r2;
|
|||
|
always @(posedge clk or negedge rst_n)begin
|
|||
|
if(rst_n==1'b0)begin
|
|||
|
dout1_r1 <= 0;
|
|||
|
dout1_r2 <= 0;
|
|||
|
end
|
|||
|
else begin
|
|||
|
dout1_r1 <= dout1;
|
|||
|
dout1_r2 <= dout1_r1;
|
|||
|
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
wire signed [15:0] diff12;
|
|||
|
wire signed [15:0] diff23;
|
|||
|
assign diff12 = dout0 - dout1_r2;
|
|||
|
assign diff23 = dout1 - dout0;
|
|||
|
// <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ʹ<EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
initial begin
|
|||
|
rst_n = 0;
|
|||
|
enable = 0;
|
|||
|
clk = 1'b0;
|
|||
|
din = 16'h0000;
|
|||
|
|
|||
|
// <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>20 ns
|
|||
|
#20;
|
|||
|
rst_n = 1;
|
|||
|
|
|||
|
// <EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ͷź<EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#10;
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
// ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
always #5 clk = ~clk; // 100MHz ʱ<EFBFBD><EFBFBD>
|
|||
|
|
|||
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
always @(posedge clk or negedge rst_n) begin
|
|||
|
if (rst_n == 1'b0) begin
|
|||
|
cnt <= 22'd0;
|
|||
|
end else begin
|
|||
|
cnt <= cnt + 22'd1;
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>źź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
reg [15:0] enable_cnt;
|
|||
|
|
|||
|
always @(posedge clk or negedge rst_n) begin
|
|||
|
if (rst_n == 1'b0) begin
|
|||
|
enable <= 0;
|
|||
|
din <= 16'd0;
|
|||
|
enable_cnt <= 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> enable <EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
end else begin
|
|||
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>źŵij<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
if (cnt < 1000) begin // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (enable_cnt == 0) begin
|
|||
|
if ($urandom % 2 == 0) begin // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> enable
|
|||
|
enable <= 1;
|
|||
|
enable_cnt <= $urandom % 10 + 5; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>źų<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><EFBFBD>Χ 5~14 <EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
din <= $urandom; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16 λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
end else begin
|
|||
|
enable <= 0;
|
|||
|
din <= 16'd0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0
|
|||
|
end
|
|||
|
end else begin
|
|||
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> enable <EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0
|
|||
|
enable <= 1;
|
|||
|
enable_cnt <= enable_cnt - 1; // ÿ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
din <= $urandom; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
end
|
|||
|
end else begin
|
|||
|
enable <= 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD> enable
|
|||
|
din <= 16'd0; // <EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
// <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>棬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
initial begin
|
|||
|
wait(cnt[11] == 1); // <EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
$finish;
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
endmodule
|