FifoCtrl.v 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. module FifoCtrl #(
  2. parameter Fifo0ReadMsbAddr = 12'h0+12'd30,
  3. parameter Fifo1ReadMsbAddr = 12'h50+12'd30,
  4. parameter Fifo2ReadMsbAddr = 12'hf0+12'd30,
  5. parameter Fifo3ReadMsbAddr = 12'h140+12'd30,
  6. parameter Fifo4ReadMsbAddr = 12'h190+12'd30,
  7. parameter Fifo5ReadMsbAddr = 12'h1e0+12'd30,
  8. parameter Fifo6ReadMsbAddr = 12'h230+12'd30
  9. )(
  10. input ToFifoTxWriteVal_i,
  11. input ToFifoTxReadVal_i,
  12. input ToFifoRxWriteVal_i,
  13. input ToFifoRxReadVal_i,
  14. input FifoTxFull_i,
  15. input FifoTxEmpty_i,
  16. input FifoRxFull_i,
  17. input FifoRxEmpty_i,
  18. input [11:0] SmcAddr_i,
  19. input FifoTxWrClock_i,
  20. input FifoTxRdClock_i,
  21. input FifoRxWrClock_i,
  22. input FifoRxRdClock_i,
  23. output FifoTxWriteEn_o,
  24. output FifoTxReadEn_o,
  25. output FifoRxWriteEn_o,
  26. output FifoRxReadEn_o
  27. );
  28. reg FifoTxWriteEn;
  29. reg FifoTxReadEn;
  30. reg FifoRxWriteEn;
  31. reg FifoRxReadEn;
  32. wire requestToFifo0 =(SmcAddr_i == Fifo0ReadMsbAddr)?1'b1:1'b0;
  33. wire requestToFifo1 =(SmcAddr_i == Fifo1ReadMsbAddr)?1'b1:1'b0;
  34. wire requestToFifo2 =(SmcAddr_i == Fifo2ReadMsbAddr)?1'b1:1'b0;
  35. wire requestToFifo3 =(SmcAddr_i == Fifo3ReadMsbAddr)?1'b1:1'b0;
  36. wire requestToFifo4 =(SmcAddr_i == Fifo4ReadMsbAddr)?1'b1:1'b0;
  37. wire requestToFifo5 =(SmcAddr_i == Fifo5ReadMsbAddr)?1'b1:1'b0;
  38. wire requestToFifo6 =(SmcAddr_i == Fifo6ReadMsbAddr)?1'b1:1'b0;
  39. wire requestToFifo = (requestToFifo0|requestToFifo1|requestToFifo2|requestToFifo3|requestToFifo4|requestToFifo5|requestToFifo6)?1'b1:1'b0;
  40. // //================================================================================
  41. // // ASSIGNMENTS
  42. assign FifoTxWriteEn_o = FifoTxWriteEn;
  43. assign FifoTxReadEn_o = FifoTxReadEn;
  44. assign FifoRxWriteEn_o = FifoRxWriteEn;
  45. assign FifoRxReadEn_o = FifoRxReadEn;
  46. // //================================================================================
  47. always @(posedge FifoTxWrClock_i) begin
  48. if (ToFifoTxWriteVal_i && !FifoTxFull_i) begin
  49. FifoTxWriteEn <= 1'b1;
  50. end
  51. else begin
  52. FifoTxWriteEn <= 1'b0;
  53. end
  54. end
  55. always @(posedge FifoTxRdClock_i ) begin
  56. if (ToFifoTxReadVal_i && !FifoTxEmpty_i) begin
  57. FifoTxReadEn <= 1'b1;
  58. end
  59. else begin
  60. FifoTxReadEn <= 1'b0;
  61. end
  62. end
  63. always @(posedge FifoRxWrClock_i) begin
  64. if (ToFifoRxWriteVal_i && !FifoRxFull_i) begin
  65. FifoRxWriteEn <= 1'b1;
  66. end
  67. else begin
  68. FifoRxWriteEn <= 1'b0;
  69. end
  70. end
  71. always @(posedge FifoRxRdClock_i) begin
  72. if (ToFifoRxReadVal_i && !FifoRxEmpty_i && !requestToFifo) begin
  73. FifoRxReadEn <= 1'b1;
  74. end
  75. else begin
  76. FifoRxReadEn <= 1'b0;
  77. end
  78. end
  79. // //================================================================================
  80. endmodule