`include "../outreg.v"

module tb;
	reg fast_clk, slow_clk;

	initial begin
		$dumpfile("testbench.vcd");
		$dumpvars(0, tb);
		repeat (80) @(posedge slow_clk);
		$display("OKAY");
		$finish;
	end

	always #4 fast_clk = (fast_clk === 1'b0);
	always #12 slow_clk = (slow_clk === 1'b0);

	reg [7:0] wdata = 1;
	always @(posedge fast_clk) wdata <= {wdata[6:0], wdata[7] ^ wdata[2]};

	reg [3:0] waddr = 0;
	always @(posedge fast_clk) waddr <= waddr + 1'b1;

	reg [3:0] raddr = 0;
	always @(posedge slow_clk) raddr <= raddr + 1'b1;


	wire [3:0] rdata, rdata_postsyn;

	dut dut_i(
		.fast_clk(fast_clk), .slow_clk(slow_clk),
		.raddr(raddr), .waddr(waddr), .wen(1'b1),
		.wdata(wdata[3:0]), .rdata(rdata)
	);

	dut_syn dut_syn_i(
		.fast_clk(fast_clk), .slow_clk(slow_clk),
		.raddr(raddr), .waddr(waddr), .wen(1'b1),
		.wdata(wdata[3:0]), .rdata(rdata_postsyn)
	);
	always @(posedge fast_clk)
		if (rdata_postsyn != rdata) begin
			$display("ERROR");
			$finish;
		end
endmodule