blob: 07d2045597c50f2dbb2df208edc7ac0429c3d8f4 [file] [log] [blame]
/****************************************************************************
* wb_clockdomain_bridge_tb.sv
****************************************************************************/
`ifdef NEED_TIMESCALE
`timescale 1ns/1ns
`endif
`include "wishbone_macros.svh"
`ifndef I_CLKDIV
`define I_CLKDIV 0
`endif
`ifndef T_CLKDIV
`define T_CLKDIV 0
`endif
/**
* Module: wb_clockdomain_bridge_tb
*
* TODO: Add module documentation
*/
module wb_clockdomain_bridge_tb(input clock);
`ifdef IVERILOG
`include "iverilog_control.svh"
`endif
`ifdef HAVE_HDL_CLOCKGEN
reg clock_r = 0;
initial begin
forever begin
#10;
clock_r <= ~clock_r;
end
end
assign clock = clock_r;
`endif
localparam ADR_WIDTH = 32;
localparam DAT_WIDTH = 32;
localparam I_CLK_DIV = `I_CLKDIV;
localparam T_CLK_DIV = `T_CLKDIV;
reg reset /* verilator public */ = 0;
reg[7:0] reset_cnt = 0;
always @(posedge clock) begin
if (reset_cnt == 0) begin
reset <= 1;
reset_cnt <= reset_cnt + 1;
end else if (reset_cnt == 100) begin
reset <= 0;
end else begin
reset_cnt <= reset_cnt + 1;
end
end
reg[3:0] i_clock_cnt = 0;
reg i_clock_r = 0;
wire i_clock = (I_CLK_DIV == 0)?clock:i_clock_r;
always @(posedge clock) begin
if (i_clock_cnt == I_CLK_DIV) begin
i_clock_r <= ~i_clock_r;
i_clock_cnt <= 0;
end else begin
i_clock_cnt <= i_clock_cnt + 1;
end
end
reg[3:0] t_clock_cnt = 0;
reg t_clock_r = 0;
wire t_clock = (T_CLK_DIV == 0)?clock:t_clock_r;
always @(posedge clock) begin
if (t_clock_cnt == T_CLK_DIV) begin
t_clock_r <= ~t_clock_r;
t_clock_cnt <= 0;
end else begin
t_clock_cnt <= t_clock_cnt + 1;
end
end
`WB_WIRES(i2b_,ADR_WIDTH,DAT_WIDTH);
`WB_WIRES(b2t_,ADR_WIDTH,DAT_WIDTH);
wb_initiator_bfm #(
.ADDR_WIDTH(ADR_WIDTH),
.DATA_WIDTH(DAT_WIDTH)
) u_init_bfm (
.clock(i_clock),
.reset(reset),
`WB_CONNECT(,i2b_)
);
wb_clockdomain_bridge #(
.ADR_WIDTH(ADR_WIDTH),
.DAT_WIDTH(DAT_WIDTH)
) u_dut (
.reset(reset),
.i_clock(i_clock),
`WB_CONNECT(i_, i2b_),
.t_clock(t_clock),
`WB_CONNECT(t_, b2t_)
);
wb_target_bfm #(
.ADDR_WIDTH(ADR_WIDTH),
.DATA_WIDTH(DAT_WIDTH)
) u_targ_bfm (
.clock(t_clock),
.reset(reset),
`WB_CONNECT(,b2t_)
);
endmodule