2
0

iodevs.vh 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. reg [31:0] nxdev_rdata;
  2. reg [31:0] iodev_rdata;
  3. wire [3:0] xdev_valid = iodev_mem_valid << cpu_mem_addr[29:28];
  4. wire [15:0] iodev_valid = xdev_valid[3] << cpu_mem_addr[10:7];
  5. wire [31:0] iodev_rdata_sys;
  6. wire [ 0:0] iodev_valid_sys = iodev_valid[0:0];
  7. tri1 [ 0:0] iodev_wait_n_sys;
  8. wire [31:0] iodev_rdata_sysclock;
  9. wire [ 0:0] iodev_irq_sysclock;
  10. wire [ 0:0] iodev_valid_sysclock = iodev_valid[1:1];
  11. tri1 [ 0:0] iodev_wait_n_sysclock;
  12. wire [31:0] iodev_rdata_console;
  13. wire [ 0:0] iodev_irq_console;
  14. wire [ 0:0] iodev_valid_console = iodev_valid[2:2];
  15. tri1 [ 0:0] iodev_wait_n_console;
  16. wire [31:0] iodev_rdata_romcopy;
  17. wire [ 0:0] iodev_irq_romcopy;
  18. wire [ 0:0] iodev_valid_romcopy = iodev_valid[3:3];
  19. tri1 [ 0:0] iodev_wait_n_romcopy;
  20. wire [31:0] iodev_rdata_sdcard;
  21. wire [ 0:0] iodev_irq_sdcard;
  22. wire [ 0:0] iodev_valid_sdcard = iodev_valid[4:4];
  23. tri1 [ 0:0] iodev_wait_n_sdcard;
  24. wire [31:0] iodev_rdata_i2c;
  25. wire [ 0:0] iodev_irq_i2c;
  26. wire [ 0:0] iodev_valid_i2c = iodev_valid[5:5];
  27. tri1 [ 0:0] iodev_wait_n_i2c;
  28. wire [31:0] iodev_rdata_esp;
  29. wire [ 0:0] iodev_irq_esp;
  30. wire [ 0:0] iodev_valid_esp = iodev_valid[6:6];
  31. tri1 [ 0:0] iodev_wait_n_esp;
  32. wire [31:0] iodev_rdata_abc;
  33. wire [ 0:0] iodev_irq_abc;
  34. wire [ 0:0] iodev_valid_abc = iodev_valid[7:7];
  35. tri1 [ 0:0] iodev_wait_n_abc;
  36. wire [31:0] iodev_rdata_abcmemmap;
  37. wire [ 0:0] iodev_valid_abcmemmap = xdev_valid[0:0];
  38. tri1 [ 0:0] iodev_wait_n_abcmemmap;
  39. // I/O input MUX
  40. always_comb
  41. case (cpu_mem_addr[29:28])
  42. 2'd0: iodev_rdata = iodev_rdata_abcmemmap;
  43. 2'd3:
  44. case (cpu_mem_addr[10:7])
  45. 4'd0: iodev_rdata = iodev_rdata_sys;
  46. 4'd1: iodev_rdata = iodev_rdata_sysclock;
  47. 4'd2: iodev_rdata = iodev_rdata_console;
  48. 4'd3: iodev_rdata = iodev_rdata_romcopy;
  49. 4'd4: iodev_rdata = iodev_rdata_sdcard;
  50. 4'd5: iodev_rdata = iodev_rdata_i2c;
  51. 4'd6: iodev_rdata = iodev_rdata_esp;
  52. 4'd7: iodev_rdata = iodev_rdata_abc;
  53. default: iodev_rdata = 32'hffffffff;
  54. endcase
  55. default: iodev_rdata = 32'hffffffff;
  56. endcase
  57. tri0 [31:0] sys_irq;
  58. assign sys_irq[ 3] = iodev_irq_sysclock[0];
  59. assign sys_irq[ 4] = iodev_irq_console[0];
  60. assign sys_irq[ 5] = iodev_irq_romcopy[0];
  61. assign sys_irq[ 6] = iodev_irq_sdcard[0];
  62. assign sys_irq[ 7] = iodev_irq_i2c[0];
  63. assign sys_irq[ 8] = iodev_irq_esp[0];
  64. assign sys_irq[ 9] = iodev_irq_abc[0];
  65. localparam [31:0] irq_edge_mask = 32'h00000288;
  66. localparam [31:0] irq_masked = ~32'h000003ff;
  67. wire iodev_wait_n = (&iodev_wait_n_sys) &
  68. (&iodev_wait_n_sysclock) &
  69. (&iodev_wait_n_console) &
  70. (&iodev_wait_n_romcopy) &
  71. (&iodev_wait_n_sdcard) &
  72. (&iodev_wait_n_i2c) &
  73. (&iodev_wait_n_esp) &
  74. (&iodev_wait_n_abc) &
  75. (&iodev_wait_n_abcmemmap);