| 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, clka, clkb, |
| output reg [7:0] q_a, q_b |
| ); |
| // Declare the RAM variable |
| reg [7:0] ram[63:0]; |
| |
| initial begin |
| q_a <= 8'h00; |
| q_b <= 8'd0; |
| end |
| |
| // Port A |
| always @ (posedge clka) |
| begin |
| `ifndef BUG |
| if (we_a) |
| `else |
| if (we_b) |
| `endif |
| begin |
| ram[addr_a] <= data_a; |
| q_a <= data_a; |
| end |
| if (re_b) |
| begin |
| q_a <= ram[addr_a]; |
| end |
| end |
| |
| // Port B |
| always @ (posedge clkb) |
| begin |
| `ifndef BUG |
| if (we_b) |
| `else |
| if (we_a) |
| `endif |
| begin |
| ram[addr_b] <= data_b; |
| q_b <= data_b; |
| end |
| if (re_b) |
| begin |
| q_b <= ram[addr_b]; |
| end |
| end |
| |
| endmodule |