summaryrefslogblamecommitdiff
path: root/src/rtl/ram_1rw_1ro_readfirst.v
blob: 7ba11ea5ff4070ba2b78dd4fa10dc25ad4126167 (plain) (tree)




































































                                                                                             
`timescale 1ns / 1ps

module ram_1rw_1ro_readfirst
	(
		clk,
		a_addr, a_wr, a_in, a_out,
		b_addr, b_out
	);

		
		//
		// Parameters
		//
	parameter	MEM_WIDTH		= 32;
   parameter	MEM_ADDR_BITS	= 8;
		
		
		//
		// Ports
		//
	input		wire								clk;
	
	input		wire	[MEM_ADDR_BITS-1:0]	a_addr;
	input		wire								a_wr;
	input		wire	[MEM_WIDTH-1:0]		a_in;
	output	wire	[MEM_WIDTH-1:0]		a_out;
	
	input		wire	[MEM_ADDR_BITS-1:0]	b_addr;
	output	wire	[MEM_WIDTH-1:0]		b_out;
		
		
		//
		// BRAM
		//
   (* RAM_STYLE="BLOCK" *)
   reg	[MEM_WIDTH-1:0]	bram[0:(2**MEM_ADDR_BITS)-1];
	
	
		//
		// Output Registers
		//
   reg	[MEM_WIDTH-1:0]	bram_reg_a;
	reg	[MEM_WIDTH-1:0]	bram_reg_b;
	
	assign a_out = bram_reg_a;
	assign b_out = bram_reg_b;


		//
		// Read-Write Port A
		//
   always @(posedge clk) begin
		//
		bram_reg_a <= bram[a_addr];
		//
		if (a_wr) bram[a_addr] <= a_in;
		//
	end
		
		
		//
		// Read-Only Port B
		//
	always @(posedge clk)
		//
		bram_reg_b <= bram[b_addr];
		
	
endmodule