iodevs.vh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. wire [31:0] iodev_rdata;
  2. wire [15:0] iodev_valid = iodev_mem_valid << cpu_mem_addr[10:7];
  3. wire [31:0] iodev_rdata_led;
  4. wire [ 0:0] iodev_valid_led = iodev_valid[0:0];
  5. tri1 [ 0:0] iodev_wait_n_led;
  6. wire [31:0] iodev_rdata_reset;
  7. wire [ 0:0] iodev_valid_reset = iodev_valid[1:1];
  8. tri1 [ 0:0] iodev_wait_n_reset;
  9. wire [31:0] iodev_rdata_romcopy;
  10. wire [ 0:0] iodev_valid_romcopy = iodev_valid[2:2];
  11. tri1 [ 0:0] iodev_wait_n_romcopy;
  12. wire [31:0] iodev_rdata_sysclock;
  13. wire [ 0:0] iodev_irq_sysclock;
  14. wire [ 0:0] iodev_valid_sysclock = iodev_valid[3:3];
  15. tri1 [ 0:0] iodev_wait_n_sysclock;
  16. wire [31:0] iodev_rdata_console;
  17. wire [ 0:0] iodev_irq_console;
  18. wire [ 0:0] iodev_valid_console = iodev_valid[4:4];
  19. tri1 [ 0:0] iodev_wait_n_console;
  20. wire [31:0] iodev_rdata_sdcard;
  21. wire [ 0:0] iodev_irq_sdcard;
  22. wire [ 0:0] iodev_valid_sdcard = iodev_valid[5:5];
  23. tri1 [ 0:0] iodev_wait_n_sdcard;
  24. wire [31:0] iodev_rdata_esp;
  25. wire [ 0:0] iodev_irq_esp;
  26. wire [ 0:0] iodev_valid_esp = iodev_valid[6:6];
  27. tri1 [ 0:0] iodev_wait_n_esp;
  28. // I/O input MUX
  29. always @(*)
  30. case (cpu_mem_addr[10:7])
  31. 4'd0: iodev_rdata = iodev_rdata_led;
  32. 4'd1: iodev_rdata = iodev_rdata_reset;
  33. 4'd2: iodev_rdata = iodev_rdata_romcopy;
  34. 4'd3: iodev_rdata = iodev_rdata_sysclock;
  35. 4'd4: iodev_rdata = iodev_rdata_console;
  36. 4'd5: iodev_rdata = iodev_rdata_sdcard;
  37. 4'd6: iodev_rdata = iodev_rdata_esp;
  38. default: iodev_rdata = 32'hffffffff;
  39. endcase
  40. tri0 [31:0] sys_irq;
  41. assign sys_irq[ 3] = iodev_irq_sysclock[0];
  42. assign sys_irq[ 4] = iodev_irq_console[0];
  43. assign sys_irq[ 5] = iodev_irq_sdcard[0];
  44. assign sys_irq[ 6] = iodev_irq_esp[0];
  45. localparam [31:0] irq_edge_mask = 32'h00000008;
  46. localparam [31:0] irq_masked = ~32'h0000007f;
  47. wire iodev_wait_n = (&iodev_wait_n_led) &
  48. (&iodev_wait_n_reset) &
  49. (&iodev_wait_n_romcopy) &
  50. (&iodev_wait_n_sysclock) &
  51. (&iodev_wait_n_console) &
  52. (&iodev_wait_n_sdcard) &
  53. (&iodev_wait_n_esp);