top.v 841 Bytes
Newer Older
1 2 3 4 5 6 7 8 9
module top
(
	input [7:0] data_a, data_b,
	input [6:1] addr_a, addr_b,
	input we_a, we_b, re_a, re_b, clk,
	output reg [7:0] q_a, q_b
);
	// Declare the RAM variable
	reg [7:0] ram[63:0];
SergeyDegtyar committed
10

11 12 13
	// Port A
	always @ (posedge clk)
	begin
SergeyDegtyar committed
14 15
`ifndef BUG
		if (we_a)
16 17 18 19
		begin
			ram[addr_a] <= data_a;
			q_a <= data_a;
		end
SergeyDegtyar committed
20
		if (re_b)
21 22 23
		begin
			q_a <= ram[addr_a];
		end
SergeyDegtyar committed
24 25 26 27 28 29 30 31 32 33 34
`else
		if (we_a)
		begin
			ram[addr_a] <= 8'bXXXXXXXX;
			q_a <= 8'bXXXXXXXX;
		end
		if (re_b)
		begin
			q_a <= ram[addr_a];
		end
`endif
35
	end
SergeyDegtyar committed
36

37 38 39
	// Port B
	always @ (posedge clk)
	begin
SergeyDegtyar committed
40 41
`ifndef BUG
		if (we_b)
42 43 44 45 46 47 48 49
		begin
			ram[addr_b] <= data_b;
			q_b <= data_b;
		end
		if (re_b)
		begin
			q_b <= ram[addr_b];
		end
SergeyDegtyar committed
50 51 52 53 54 55 56 57 58 59 60
`else
		if (we_b)
		begin
			ram[addr_b] <= 8'bXXXXXXXX;
			q_b <= 8'bXXXXXXXX;
		end
		if (re_b)
		begin
			q_b <= ram[addr_b];
		end
`endif
61
	end
SergeyDegtyar committed
62 63

endmodule