// sync_rom_vip.v
// (c) 2017 David R. Hunter
// 08/20/17   D. Hunter
//
// synchronous single port 512 byte RAM acting as a ROM
// using the Altera TriMatrix memory
//
//`define SIM

module sync_rom_vip(data,addr,clk,q);
	 input		[7:0] data;
	 input		[8:0] addr;
	 input		clk;
	 output reg	[7:0] q;

	 // initialize RAM with the VIP OS program

	// use this for simulation
//`ifdef SIM
//   reg     [7:0] memdata[0:511];
//
//	initial
//	begin
//		memdata[0] = 8'hF8;	// LDI
//		memdata[1] = 8'h80;	// ,80
//		memdata[2] = 8'hB0;	// PHI R0
//		memdata[3] = 8'h65;	// OUT5
//		memdata[4] = 8'h03;	// Q = CS
//		memdata[5] = 8'h7B;	// SEQ
//		memdata[6] = 8'h67;	// OUT7
//		memdata[7] = 8'hA6;	//	,A6
//		memdata[8] = 8'h7A;	// REQ
//		memdata[9] = 8'h6F;	// IN7
//		memdata[10] = 8'hC4;	// NOP
//		memdata[11] = 8'h30;	// BR
//		memdata[12] = 8'h05;	// ,05
//	end
//`else	
	(* ram_init_file = "uvip.mif" *) reg [7:0] memdata[0:511];
//`endif
	
	 always @(posedge clk)
		begin	
			q <= memdata[addr];
		end

endmodule
