| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- module FifoCtrl #(
- parameter Fifo0ReadMsbAddr = 12'h0+12'd30,
- parameter Fifo1ReadMsbAddr = 12'h50+12'd30,
- parameter Fifo2ReadMsbAddr = 12'hf0+12'd30,
- parameter Fifo3ReadMsbAddr = 12'h140+12'd30,
- parameter Fifo4ReadMsbAddr = 12'h190+12'd30,
- parameter Fifo5ReadMsbAddr = 12'h1e0+12'd30,
- parameter Fifo6ReadMsbAddr = 12'h230+12'd30
- )(
- input ToFifoTxWriteVal_i,
- input ToFifoTxReadVal_i,
- input ToFifoRxWriteVal_i,
- input ToFifoRxReadVal_i,
- input FifoTxFull_i,
- input FifoTxEmpty_i,
- input FifoRxFull_i,
- input FifoRxEmpty_i,
- input [11:0] SmcAddr_i,
- input FifoTxWrClock_i,
- input FifoTxRdClock_i,
- input FifoRxWrClock_i,
- input FifoRxRdClock_i,
- output FifoTxWriteEn_o,
- output FifoTxReadEn_o,
- output FifoRxWriteEn_o,
- output FifoRxReadEn_o
- );
- reg FifoTxWriteEn;
- reg FifoTxReadEn;
- reg FifoRxWriteEn;
- reg FifoRxReadEn;
- wire requestToFifo0 =(SmcAddr_i == Fifo0ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo1 =(SmcAddr_i == Fifo1ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo2 =(SmcAddr_i == Fifo2ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo3 =(SmcAddr_i == Fifo3ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo4 =(SmcAddr_i == Fifo4ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo5 =(SmcAddr_i == Fifo5ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo6 =(SmcAddr_i == Fifo6ReadMsbAddr)?1'b1:1'b0;
- wire requestToFifo = (requestToFifo0|requestToFifo1|requestToFifo2|requestToFifo3|requestToFifo4|requestToFifo5|requestToFifo6)?1'b1:1'b0;
- // //================================================================================
- // // ASSIGNMENTS
- assign FifoTxWriteEn_o = FifoTxWriteEn;
- assign FifoTxReadEn_o = FifoTxReadEn;
- assign FifoRxWriteEn_o = FifoRxWriteEn;
- assign FifoRxReadEn_o = FifoRxReadEn;
- // //================================================================================
- always @(posedge FifoTxWrClock_i) begin
- if (ToFifoTxWriteVal_i && !FifoTxFull_i) begin
- FifoTxWriteEn <= 1'b1;
- end
- else begin
- FifoTxWriteEn <= 1'b0;
- end
- end
- always @(posedge FifoTxRdClock_i ) begin
- if (ToFifoTxReadVal_i && !FifoTxEmpty_i) begin
- FifoTxReadEn <= 1'b1;
- end
- else begin
- FifoTxReadEn <= 1'b0;
- end
- end
- always @(posedge FifoRxWrClock_i) begin
- if (ToFifoRxWriteVal_i && !FifoRxFull_i) begin
- FifoRxWriteEn <= 1'b1;
- end
- else begin
- FifoRxWriteEn <= 1'b0;
- end
- end
- always @(posedge FifoRxRdClock_i) begin
- if (ToFifoRxReadVal_i && !FifoRxEmpty_i && !requestToFifo) begin
- FifoRxReadEn <= 1'b1;
- end
- else begin
- FifoRxReadEn <= 1'b0;
- end
- end
- // //================================================================================
- endmodule
|