data.v 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 23:03:06 05/13/2009
  7. // Design Name:
  8. // Module Name: data
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module data(
  22. input CLK,
  23. input SNES_READ,
  24. input SNES_WRITE,
  25. input MCU_READ,
  26. input MCU_WRITE,
  27. inout [7:0] SNES_DATA,
  28. inout [15:0] ROM_DATA,
  29. input [7:0] MCU_IN_DATA,
  30. output [7:0] MCU_OUT_DATA,
  31. input MODE,
  32. input SNES_DATA_TO_MEM,
  33. input MCU_DATA_TO_MEM,
  34. input ROM_DATA_TO_SNES_MEM,
  35. input ROM_DATA_TO_MCU_MEM,
  36. input MCU_OVR,
  37. input ROM_ADDR0,
  38. output [7:0] MSU_DATA_IN,
  39. input [7:0] MSU_DATA_OUT,
  40. output [7:0] BSX_DATA_IN,
  41. input [7:0] BSX_DATA_OUT,
  42. input msu_enable,
  43. input bsx_data_ovr
  44. );
  45. reg [7:0] SNES_IN_MEM;
  46. reg [7:0] SNES_OUT_MEM;
  47. reg [7:0] MCU_IN_MEM;
  48. reg [7:0] MCU_OUT_MEM;
  49. wire [7:0] FROM_ROM_BYTE;
  50. assign MSU_DATA_IN = SNES_DATA;
  51. assign BSX_DATA_IN = SNES_DATA;
  52. assign SNES_DATA = SNES_READ ? 8'bZ : (!MCU_OVR ? 8'h00 : (msu_enable ? MSU_DATA_OUT :
  53. bsx_data_ovr ? BSX_DATA_OUT : SNES_OUT_MEM));
  54. assign FROM_ROM_BYTE = (ROM_ADDR0 ? ROM_DATA[7:0] : ROM_DATA[15:8]);
  55. assign MCU_OUT_DATA = !MCU_OVR ? (FROM_ROM_BYTE)
  56. : (MCU_OUT_MEM);
  57. assign ROM_DATA[7:0] = ROM_ADDR0 ? (!MCU_OVR ? (!MCU_WRITE ? MCU_IN_DATA : 8'bZ)
  58. : (MODE ? (!MCU_WRITE ? MCU_IN_MEM : 8'bZ)
  59. : (!SNES_WRITE ? SNES_IN_MEM : 8'bZ)))
  60. : 8'bZ;
  61. assign ROM_DATA[15:8] = ROM_ADDR0 ? 8'bZ : (!MCU_OVR ? (!MCU_WRITE ? MCU_IN_DATA : 8'bZ)
  62. : (MODE ? (!MCU_WRITE ? MCU_IN_MEM : 8'bZ)
  63. : (!SNES_WRITE ? SNES_IN_MEM : 8'bZ)));
  64. always @(posedge CLK) begin
  65. if(SNES_DATA_TO_MEM)
  66. SNES_IN_MEM <= SNES_DATA;
  67. if(MCU_DATA_TO_MEM)
  68. MCU_IN_MEM <= MCU_IN_DATA;
  69. if(ROM_DATA_TO_SNES_MEM)
  70. SNES_OUT_MEM <= FROM_ROM_BYTE;
  71. if(ROM_DATA_TO_MCU_MEM)
  72. MCU_OUT_MEM <= FROM_ROM_BYTE;
  73. end
  74. endmodule