2018-02-26 22:48:36 -06:00
|
|
|
`ifndef RAM_H
|
|
|
|
`define RAM_H
|
|
|
|
|
2018-02-26 15:42:20 -06:00
|
|
|
`include "hvsync_generator.v"
|
|
|
|
|
2018-02-27 21:35:42 -06:00
|
|
|
module RAM_sync(clk, addr, din, dout, we);
|
2018-02-26 15:42:20 -06:00
|
|
|
|
|
|
|
parameter A = 10; // # of address bits
|
|
|
|
parameter D = 8; // # of data bits
|
|
|
|
|
|
|
|
input clk; // clock
|
|
|
|
input [A-1:0] addr; // 10-bit address
|
|
|
|
input [D-1:0] din; // 8-bit data input
|
|
|
|
output [D-1:0] dout; // 8-bit data output
|
|
|
|
input we; // write enable
|
|
|
|
|
|
|
|
reg [D-1:0] mem [0:(1<<A)-1]; // 1024x8 bit memory
|
|
|
|
|
|
|
|
always @(posedge clk) begin
|
|
|
|
if (we) // if write enabled
|
|
|
|
mem[addr] <= din; // write memory from din
|
2018-02-27 21:35:42 -06:00
|
|
|
dout <= mem[addr]; // read memory to dout (sync)
|
2018-02-26 15:42:20 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
endmodule
|
|
|
|
|
2018-02-27 21:35:42 -06:00
|
|
|
module RAM_async(clk, addr, din, dout, we);
|
|
|
|
|
|
|
|
parameter A = 10; // # of address bits
|
|
|
|
parameter D = 8; // # of data bits
|
|
|
|
|
|
|
|
input clk; // clock
|
|
|
|
input [A-1:0] addr; // 10-bit address
|
|
|
|
input [D-1:0] din; // 8-bit data input
|
|
|
|
output [D-1:0] dout; // 8-bit data output
|
|
|
|
input we; // write enable
|
|
|
|
|
|
|
|
reg [D-1:0] mem [0:(1<<A)-1]; // 1024x8 bit memory
|
|
|
|
|
|
|
|
always @(posedge clk) begin
|
|
|
|
if (we) // if write enabled
|
|
|
|
mem[addr] <= din; // write memory from din
|
|
|
|
end
|
|
|
|
|
|
|
|
assign dout = mem[addr]; // read memory to dout (async)
|
|
|
|
|
|
|
|
endmodule
|
|
|
|
|
2018-02-26 22:48:36 -06:00
|
|
|
`endif
|