| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // company:
- // engineer:
- //
- // create date: 16:37:06 07/11/2019
- // design name:
- // module name: dsp_linkport_interface
- // project name:
- // target devices:
- // tool versions:
- // description:
- //
- // dependencies:
- //
- // revision:
- // revision 0.01 - file created
- // additional comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module DspInterface
- #(
- parameter AdcDataWidth = 14,
- parameter ExtAdcDataWidth = 16,
- parameter ODataWidth = 16,
- parameter ResultWidth = 40,
- parameter ChNum = 16,
- parameter CmdRegWidth = 32,
- parameter CmdDataRegWith = 24,
- parameter HeaderWidth = 7,
- parameter DataCntWidth = 5,
- parameter CmdWidth = 3
- )
- (
- input Clk_i,
- input Rst_i,
- input OscWind_i,
- input StartMeasDsp_i,
- input DspReadyForRx_i,
- input [31:0] MeasNum_i,
-
- input Mosi_i,
- input Sck_i,
- input Ss_i,
-
- input Mode_i,
- input [CmdWidth-2:0] PortSel_i,
- input [CmdWidth-1:0] DecimFactor_i,
-
- input [CmdRegWidth-1:0] IfFtwL_i,
- input [CmdRegWidth-1:0] IfFtwH_i,
-
- output OscDataRdFlag_o,
- input [AdcDataWidth-1:0] Adc1ChT1Data_i,
- input [AdcDataWidth-1:0] Adc1ChR1Data_i,
- input [AdcDataWidth-1:0] Adc2ChR2Data_i,
- input [AdcDataWidth-1:0] Adc2ChT2Data_i,
-
- output Mosi_o,
- output Sck_o,
- output Ss0_o,
- output Ss1_o,
- input Miso_i,
- output Miso_o,
-
- output [CmdRegWidth-1:0] CmdDataReg_o,
- output CmdDataVal_o,
-
- input [CmdDataRegWith-1:0] AnsReg_i,
- output [HeaderWidth-1:0] AnsAddr_o,
- output LpOutFs_o,
- output LpOutClk_o,
- output [ODataWidth-1:0] LpOutData_o,
-
- input [ResultWidth-1:0] Adc1T1ImResult_i,
- input [ResultWidth-1:0] Adc1T1ReResult_i,
- input [ResultWidth-1:0] Adc1R1ImResult_i,
- input [ResultWidth-1:0] Adc1R1ReResult_i,
-
- input [ResultWidth-1:0] Adc2R2ImResult_i,
- input [ResultWidth-1:0] Adc2R2ReResult_i,
- input [ResultWidth-1:0] Adc2T2ImResult_i,
- input [ResultWidth-1:0] Adc2T2ReResult_i,
- input [ChNum-1:0] ServiseRegData_i,
- input LpOutStart_i
- );
- //================================================================================
- // REG/WIRE
- //================================================================================
- wire [ResultWidth*(ChNum*2)-1:0] measDataBus;
- wire [ResultWidth*(ChNum*2)-1:0] fftDataBus;
- wire [ResultWidth*(ChNum*2)-1:0] bypassDataBus;
-
- reg [ResultWidth*(ChNum*2)-1:0] dataForFifo;
- reg dataForFifoVal;
-
- wire fftDataBusVal;
- wire bypassDataBusVal;
-
- wire [ResultWidth*(ChNum*2)-1:0] measDataBusTx;
- wire measDataValTx;
-
- wire ppiBusy;
-
- reg signed [15:0] adc1ChT1DataExt;
- reg signed [15:0] adc1ChR1DataExt;
- reg signed [15:0] adc2ChR2DataExt;
- reg signed [15:0] adc2ChT2DataExt;
-
- reg signed [AdcDataWidth-1:0] currDataChannel;
- wire signed [AdcDataWidth-1:0] testData;
-
- wire signed [15:0] filteredDecimDataI;
- wire signed [15:0] filteredDecimDataQ;
- wire filteredDecimDataVal;
- //================================================================================
- // ASSIGNMENTS
- //================================================================================
- assign measDataBus [(ResultWidth*(ChNum*2-7))-1-:ResultWidth] = Adc1T1ImResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-6))-1-:ResultWidth] = Adc1T1ReResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-5))-1-:ResultWidth] = Adc1R1ImResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-4))-1-:ResultWidth] = Adc1R1ReResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-3))-1-:ResultWidth] = Adc2T2ImResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-2))-1-:ResultWidth] = Adc2T2ReResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-1))-1-:ResultWidth] = Adc2R2ImResult_i;
- assign measDataBus [(ResultWidth*(ChNum*2-0))-1-:ResultWidth] = Adc2R2ReResult_i;
-
- assign OscDataRdFlag_o = measDataValTx;
-
- //================================================================================
- // CODING
- //================================================================================
- reg oscWindR;
- reg [15:0] testPatternData;
- wire oscWindNeg = (!OscWind_i&oscWindR);
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- oscWindR <= OscWind_i;
- end else begin
- oscWindR <= 0;
- end
- end
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (oscWindNeg) begin
- testPatternData <= ~testPatternData;
- end
- end else begin
- testPatternData <= 16'h1fff;
- end
- end
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- case(PortSel_i)
- 0: begin
- // currDataChannel <= testPatternData;
- currDataChannel <= Adc1ChT1Data_i;
- end
- 1: begin
- currDataChannel <= Adc1ChR1Data_i;
- end
- 2: begin
- currDataChannel <= Adc2ChT2Data_i;
- end
- 3: begin
- currDataChannel <= Adc2ChR2Data_i;
- end
- endcase
- end else begin
- currDataChannel <= 0;
- end
- end
- SlaveSpi
- #(
- .CmdRegWidth (CmdRegWidth),
- .DataCntWidth (DataCntWidth),
- .HeaderWidth (HeaderWidth)
- )
- DspSlaveSpi
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .Data_o (CmdDataReg_o),
- .Val_o (CmdDataVal_o),
-
- .Mosi_i (Mosi_i),
- .Sck_i (Sck_i),
- .Ss_i (Ss_i),
-
- .Mosi_o (Mosi_o),
- .Sck_o (Sck_o),
- .Ss0_o (Ss0_o),
- .Ss1_o (Ss1_o),
-
- .AnsAddr_o (AnsAddr_o),
- .AnsReg_i (AnsReg_i),
-
- .Miso_i (Miso_i),
- .Miso_o (Miso_o)
- );
- DecimFilterWrapper DecimFilter
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .OscWind_i (OscWind_i),
- .DecimFactor_i (DecimFactor_i),
-
- .IfFtwL_i (IfFtwL_i),
- .IfFtwH_i (IfFtwH_i),
-
- .AdcData_i (currDataChannel),
- // .TestData_o (testData),
-
- .FilteredAdcDataI_o (filteredDecimDataI),
- .FilteredAdcDataQ_o (filteredDecimDataQ),
- .FilteredDataVal_o (filteredDecimDataVal)
- );
- // FftDataFormer FftDataFormerInst
- // (
- // .Clk_i (Clk_i),
- // .Rst_i (Rst_i),
- // .OscWind_i (OscWind_i),
- // .MeasNum_i (MeasNum_i),
-
- // .AdcData_i ({filteredDecimDataI,filteredDecimDataQ}),
- // .AdcData_i ({testPatternData,testPatternData}),
- // .AdcDataVal_i (filteredDecimDataVal),
-
- // .OscDataBus_o (fftDataBus),
- // .OscDataBusVal_o (fftDataBusVal)
- // );
- // OscDataFormer BypassDataFormer
- // (
- // .Clk_i (Clk_i),
- // .Rst_i (Rst_i),
- // .OscWind_i (OscWind_i),
- // .MeasNum_i (MeasNum_i),
-
- // .AdcData_i (currDataChannel),
-
- // .OscDataBus_o (bypassDataBus),
- // .OscDataBusVal_o (bypassDataBusVal)
- // );
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (Mode_i) begin
- if (DecimFactor_i == 0) begin
- dataForFifo <= bypassDataBus;
- dataForFifoVal <= bypassDataBusVal;
- end else begin
- dataForFifo <= fftDataBus;
- dataForFifoVal <= fftDataBusVal;
- end
- end else begin
- dataForFifo <= measDataBus;
- dataForFifoVal <= LpOutStart_i;
- end
- end else begin
- dataForFifo <= 0;
- dataForFifoVal <= 0;
- end
- end
- MeasDataFifoWrapper
- #(
- .DataWidth (ResultWidth),
- .ChNum (ChNum)
- )
- MeasDataFifoInst
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .PpiBusy_i (ppiBusy),
- .MeasNum_i (MeasNum_i),
- .StartMeasDsp_i (StartMeasDsp_i),
- .DspReadyForRx_i(DspReadyForRx_i),
- .MeasDataBus_i (measDataBus),
- // .MeasDataBus_i (dataForFifo),
- .MeasDataVal_i (LpOutStart_i),
- // .MeasDataVal_i (dataForFifoVal),
-
- .MeasDataBus_o (measDataBusTx),
- .MeasDataVal_o (measDataValTx)
- );
- DspPpiOut
- #(
- .ODataWidth (ODataWidth),
- .ResultWidth (ResultWidth),
- .ChNum (ChNum)
- )
- MeasDataPpiOut
- (
- .Rst_i (Rst_i),
- .Clk_i (Clk_i),
-
- .MeasDataBus_i (measDataBusTx),
- .ServiseRegData_i (ServiseRegData_i),
-
- .PpiBusy_o (ppiBusy),
- .LpOutStart_i (measDataValTx),
-
- .LpOutClk_o (LpOutClk_o),
- .LpOutFs_o (LpOutFs_o),
- .LpOutData_o (LpOutData_o)
- );
- endmodule
|