address.v 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. `timescale 1 ns / 1 ns
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company: Rehkopf
  4. // Engineer: Rehkopf
  5. //
  6. // Create Date: 01:13:46 05/09/2009
  7. // Design Name:
  8. // Module Name: address
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description: Address logic w/ SaveRAM masking
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Additional Comments:
  18. //
  19. //////////////////////////////////////////////////////////////////////////////////
  20. module address(
  21. input CLK,
  22. input [23:0] SNES_ADDR, // requested address from SNES
  23. input SNES_CS, // "CART" pin from SNES (active low)
  24. output [23:0] ROM_ADDR, // Address to request from SRAM0
  25. output IS_SAVERAM, // address/CS mapped as SRAM?
  26. output IS_ROM, // address mapped as ROM?
  27. input [23:0] SAVERAM_MASK,
  28. input [23:0] ROM_MASK
  29. );
  30. wire [23:0] SRAM_SNES_ADDR;
  31. /* static mapper:
  32. menu (ROM in upper SRAM)
  33. */
  34. /* HiROM: SRAM @ Bank 0x30-0x3f, 0xb0-0xbf
  35. Offset 6000-7fff */
  36. assign IS_ROM = ((!SNES_ADDR[22] & SNES_ADDR[15])
  37. |(SNES_ADDR[22]));
  38. assign IS_SAVERAM = (!SNES_ADDR[22]
  39. & &SNES_ADDR[21:20]
  40. & &SNES_ADDR[14:13]
  41. & !SNES_ADDR[15]
  42. );
  43. assign SRAM_SNES_ADDR = (IS_SAVERAM
  44. ? 24'h7F0000 + ((SNES_ADDR[14:0] - 15'h6000)
  45. & SAVERAM_MASK)
  46. : (({1'b0, SNES_ADDR[22:0]} & ROM_MASK)
  47. + 24'h500000)
  48. );
  49. assign ROM_ADDR = SRAM_SNES_ADDR;
  50. endmodule