1
0
mirror of https://github.com/pConst/basic_verilog.git synced 2025-01-28 07:02:55 +08:00
basic_verilog/Main_tb.v

86 lines
1.8 KiB
Coq
Raw Normal View History

2015-12-18 00:28:22 +03:00
//--------------------------------------------------------------------------------
// Main_TB.v
// Konstantin Pavlov, pavlovconst@gmail.com
//--------------------------------------------------------------------------------
// INFO --------------------------------------------------------------------------------
2016-01-15 19:25:06 +03:00
// Testbench template with basic clocking, reset
2015-12-18 00:28:22 +03:00
// and random stimulus signals
`timescale 1ns / 1ps
2015-12-24 19:05:06 +03:00
module Main_tb();
2015-12-18 00:28:22 +03:00
2015-12-24 19:05:06 +03:00
reg clk200;
2015-12-18 00:28:22 +03:00
initial begin
2015-12-24 19:05:06 +03:00
#0 clk200 = 1;
2015-12-18 00:28:22 +03:00
forever
2015-12-24 19:05:06 +03:00
#2.5 clk200 = ~clk200;
2015-12-18 00:28:22 +03:00
end
2015-12-24 19:05:06 +03:00
reg rst;
2015-12-18 00:28:22 +03:00
initial begin
2015-12-24 19:05:06 +03:00
#10.2 rst = 1;
#5 rst = 0;
2015-12-18 00:28:22 +03:00
//#10000;
forever begin
2015-12-24 19:05:06 +03:00
#9985 rst = ~rst;
#5 rst = ~rst;
2015-12-18 00:28:22 +03:00
end
end
wire nrst = ~rst;
2015-12-18 00:28:22 +03:00
2016-01-15 19:25:06 +03:00
reg rst_once;
initial begin // initializing non-X data before PLL starts
#10.2 rst_once = 1;
#5 rst_once = 0;
end
initial begin
#510.2 rst_once = 1; // PLL starts at 500ns, clock appears, so doing the reset for modules
#5 rst_once = 0;
end
wire nrst_once = ~rst_once;
2015-12-24 19:05:06 +03:00
wire [31:0] DerivedClocks;
2015-12-18 00:28:22 +03:00
ClkDivider CD1 (
2015-12-24 19:05:06 +03:00
.clk(clk200),
2016-01-15 19:25:06 +03:00
.nrst(nrst_once),
2015-12-24 19:05:06 +03:00
.out(DerivedClocks[31:0]));
2015-12-18 00:28:22 +03:00
defparam CD1.WIDTH = 32;
wire [31:0] E_DerivedClocks;
EdgeDetect ED1 (
.clk(clk200),
2016-01-15 19:25:06 +03:00
.nrst(nrst_once),
.in(DerivedClocks[31:0]),
.rising(E_DerivedClocks[31:0]),
.falling(),
.both()
);
defparam ED1.WIDTH = 32;
2015-12-24 19:05:06 +03:00
wire [15:0] RandomNumber1;
2015-12-18 00:28:22 +03:00
c_rand RNG1 (
2015-12-24 19:05:06 +03:00
.clk(clk200),
.rst(rst_once),
2015-12-18 00:28:22 +03:00
.reseed(1'b0),
2016-01-15 19:25:06 +03:00
.seed_val(DerivedClocks[31:0]),
2015-12-24 19:05:06 +03:00
.out(RandomNumber1[15:0]));
reg start;
initial begin
#100.2 start = 1;
#5 start = 0;
end
2015-12-18 00:28:22 +03:00
//=================================================
2015-12-18 00:28:22 +03:00
wire out1,out2;
2016-01-15 19:25:06 +03:00
Main M ( // module under test
clk200,~clk200,
rst_once,
2015-12-18 00:28:22 +03:00
out1,out2 // for compiler not to remove logic
);
endmodule