| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- `timescale 1ns / 1ps
- (* keep_hierarchy = "yes" *)
- //////////////////////////////////////////////////////////////////////////////////
- // Company:
- // Engineer:
- //
- // Create Date: 18:00:25 07/10/2019
- // Design Name:
- // Module Name: internal_dsp
- // Project Name:
- // Target Devices:
- // Tool versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module InternalDsp
- #(
- parameter AdcDataWidth = 14,
- parameter WindWidth = 18,
- parameter WindNcoPhIncWidth = 32,
- parameter NcoWidth = 18,
- parameter ChNum = 4,
- parameter ResultWidth = 32,
- parameter WinTypeWidth = 3,
- parameter BandCmdWidth = 8,
- parameter WindPNumWidth = 32,
- parameter WindNormCoefWidth = 32,
- parameter WindCorrCoefWidth = 32,
- parameter CmdDataRegWith = 24,
- parameter IntermediateWidth = 18,
- parameter CorrAdcDataWidth = 20,
- parameter AccWidth = 80
- )
- (
- input wire Clk_i,
- input wire WindCalcClk_i,
- input wire Rst_i,
- input wire NcoRst_i,
- output wire OscWind_o,
-
- input wire [AdcDataWidth-1:0] Adc1ChT1Data_i, //A
- input wire [AdcDataWidth-1:0] Adc1ChR1Data_i, //R1
- input wire [AdcDataWidth-1:0] Adc2ChR2Data_i, //R2
- input wire [AdcDataWidth-1:0] Adc2ChT2Data_i, //B
-
- input wire GatingPulse_i,
-
- input wire StartMeas_i,
- input wire StartMeasDsp_i,
- input wire OscDataRdFlag_i,
-
- input wire [32-1:0] MeasNum_i,
-
- input wire [CmdDataRegWith-1:0] MeasCtrl_i,
- input wire [CmdDataRegWith-1:0] FilterCorrCoefL_i,
- input wire [CmdDataRegWith-1:0] FilterCorrCoefH_i,
-
- output wire EndMeas_o,
-
- input wire CalModeEn_i,
- output wire CalModeDone_o,
- input wire [CmdDataRegWith-1:0] IfFtwL_i,
- input wire [CmdDataRegWith-1:0] IfFtwH_i,
-
- output wire [ResultWidth-1:0] Adc1ImT1Data_o,
- output wire [ResultWidth-1:0] Adc1ReT1Data_o,
- output wire [ResultWidth-1:0] Adc1ImR1Data_o,
- output wire [ResultWidth-1:0] Adc1ReR1Data_o,
- //adc2
- output wire [ResultWidth-1:0] Adc2ImR2Data_o,
- output wire [ResultWidth-1:0] Adc2ReR2Data_o,
- output wire [ResultWidth-1:0] Adc2ImT2Data_o,
- output wire [ResultWidth-1:0] Adc2ReT2Data_o,
-
- output wire [NcoWidth-1:0] NcoSin_o,
- output wire [NcoWidth-1:0] NcoCos_o,
-
- output wire MeasDataRdy_o,
- output wire MeasWind_o,
- output wire MeasEnd_o,
- output wire SampleStrobeGenRst_o
- );
- //================================================================================
- // REG/WIRE
- wire [WindNormCoefWidth-1:0] windNormCoef;
- wire [WindPNumWidth-1:0] windPointsNum;
- wire [WindPNumWidth-1:0] averageNoizeLvl;
- wire [WindNcoPhIncWidth-1:0] windPhInc;
- wire [WindNcoPhIncWidth-1:0] winPhIncStart;
-
- wire [WindWidth-1:0] wind;
- wire [NcoWidth-1:0] ncoCos;
- wire [NcoWidth-1:0] ncoSin;
-
- wire [CorrAdcDataWidth-1:0] adcDataBus [ChNum-1:0];
- wire [CorrAdcDataWidth-1:0] adcDataBusExt [ChNum-1:0];
- wire [CorrAdcDataWidth-1:0] gatedAdcDataBus [ChNum-1:0];
- wire [CorrAdcDataWidth-1:0] calAdcData [ChNum-1:0];
- wire [CorrAdcDataWidth-1:0] prngData;
- reg [CorrAdcDataWidth-1:0] prngDataBus [ChNum-1:0];
- wire [ChNum-1:0] calDone;
-
- genvar g;
- integer i;
-
- wire [ResultWidth-1:0] resultImBus [ChNum-1:0];
- wire [ResultWidth-1:0] resultReBus [ChNum-1:0];
- wire [ChNum-1:0] resultValBus;
-
- wire measWind;
- wire measWindDelayed;
- wire stopMeas;
- wire [1:0] tukeyCtrl;
-
- reg [CmdDataRegWith-1:0] measCtrlReg;
- reg [32-1:0] windPointsNumReg;
- reg [32-1:0] measNumReg;
- reg [WindCorrCoefWidth-1:0] filterCorrCoeffReg;
- reg [CmdDataRegWith-1:0] ifFtwLReg;
- reg [CmdDataRegWith-1:0] ifFtwHReg;
- reg [CmdDataRegWith-1:0] filterCorrCoefLReg;
- reg [CmdDataRegWith-1:0] filterCorrCoefHReg;
-
- wire [31:0] windArg;
-
- wire [CorrAdcDataWidth-1:0] adc1ChT1DataGated = (GatingPulse_i)? adcDataBusExt[ChNum-4]:{CorrAdcDataWidth{1'b0}};
- wire [CorrAdcDataWidth-1:0] adc1ChR1DataGated = (GatingPulse_i)? adcDataBusExt[ChNum-3]:{CorrAdcDataWidth{1'b0}};
- wire [CorrAdcDataWidth-1:0] adc2ChR2DataGated = (GatingPulse_i)? adcDataBusExt[ChNum-2]:{CorrAdcDataWidth{1'b0}};
- wire [CorrAdcDataWidth-1:0] adc2ChT2DataGated = (GatingPulse_i)? adcDataBusExt[ChNum-1]:{CorrAdcDataWidth{1'b0}};
-
- wire [WindNcoPhIncWidth-1:0] ncoPhInc = {ifFtwHReg[0+:WindNcoPhIncWidth-CmdDataRegWith],ifFtwLReg};
-
- //================================================================================
- // ASSIGNMENTS
- assign adcDataBus [ChNum-1] = {{2{Adc2ChT2Data_i[AdcDataWidth-1]}},Adc2ChT2Data_i,4'b0};
- assign adcDataBus [ChNum-2] = {{2{Adc2ChR2Data_i[AdcDataWidth-1]}},Adc2ChR2Data_i,4'b0};
- assign adcDataBus [ChNum-3] = {{2{Adc1ChR1Data_i[AdcDataWidth-1]}},Adc1ChR1Data_i,4'b0};
- assign adcDataBus [ChNum-4] = {{2{Adc1ChT1Data_i[AdcDataWidth-1]}},Adc1ChT1Data_i,4'b0};
-
- assign adcDataBusExt [ChNum-1] = calAdcData [ChNum-1]+prngDataBus[ChNum-1];
- assign adcDataBusExt [ChNum-2] = calAdcData [ChNum-2]+prngDataBus[ChNum-2];
- assign adcDataBusExt [ChNum-3] = calAdcData [ChNum-3]+prngDataBus[ChNum-3];
- assign adcDataBusExt [ChNum-4] = calAdcData [ChNum-4]+prngDataBus[ChNum-4];
-
- assign gatedAdcDataBus [ChNum-1] = adc2ChT2DataGated;
- assign gatedAdcDataBus [ChNum-2] = adc2ChR2DataGated;
- assign gatedAdcDataBus [ChNum-3] = adc1ChR1DataGated;
- assign gatedAdcDataBus [ChNum-4] = adc1ChT1DataGated;
-
- assign Adc1ImT1Data_o = resultImBus [ChNum-4];
- assign Adc1ReT1Data_o = resultReBus [ChNum-4];
- assign Adc1ImR1Data_o = resultImBus [ChNum-3];
- assign Adc1ReR1Data_o = resultReBus [ChNum-3];
- //adc2
- assign Adc2ImR2Data_o = resultImBus [ChNum-2];
- assign Adc2ReR2Data_o = resultReBus [ChNum-2];
- assign Adc2ImT2Data_o = resultImBus [ChNum-1];
- assign Adc2ReT2Data_o = resultReBus [ChNum-1];
-
-
- assign MeasDataRdy_o = &resultValBus;
- assign EndMeas_o = stopMeas;
-
- assign NcoCos_o = ncoCos;
- assign NcoSin_o = ncoSin;
- assign MeasWind_o = measWind;
-
- assign CalModeDone_o = &calDone;
-
- //================================================================================
- // INSTANTIATIONS
- //----------------------------------------------
- //Module generates event signals for measurement
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (!StartMeas_i) begin
- measCtrlReg <= MeasCtrl_i;
- ifFtwLReg <= IfFtwL_i;
- ifFtwHReg <= IfFtwH_i;
- filterCorrCoefLReg <= FilterCorrCoefL_i;
- filterCorrCoefHReg <= FilterCorrCoefH_i;
- measNumReg <= MeasNum_i;
- windPointsNumReg <= windPointsNum;
- end
- end else begin
- measCtrlReg <= 0;
- ifFtwLReg <= 0;
- ifFtwHReg <= 0;
- filterCorrCoefLReg <= 0;
- filterCorrCoefHReg <= 0;
- measNumReg <= 0;
- windPointsNumReg <= 0;
- end
- end
- MeasCtrlModule
- #(
- .WindPNumWidth (WindPNumWidth)
- )
- MeasCtrlModule
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .OscWind_o (OscWind_o),
- .FilterCmd_i (measCtrlReg[15-:8]),
-
- .MeasNum_i (measNumReg),
- .StartMeas_i (StartMeas_i),
- .StartMeasDsp_i (StartMeasDsp_i),
- .Mode_i (measCtrlReg[0]),
- .OscDataRdFlag_i (OscDataRdFlag_i),
-
- .WindPointsNum_i (windPointsNumReg),
-
- .WindPhInc_i (windPhInc),
- .WindPhIncStart_i (winPhIncStart),
- .WindArg_o (windArg),
-
- .StartFpConv_o (StartFpConv),
- .MeasWind_o (measWind),
- .MeasWindDel_o (measWindDelayed),
- .StopMeas_o (stopMeas),
- .MeasEnd_o (MeasEnd_o),
- .WinCtrl_o (winCtrl),
- .TukeyCtrl_o (tukeyCtrl),
- .SampleStrobeGenRst_o (SampleStrobeGenRst_o)
- );
- //----------------------------------------------
- //Module selects settings for current window
- WinParameters
- #(
- .WindPhIncWidth (WindNcoPhIncWidth),
- .WindNormCoefWidth (WindNormCoefWidth),
- .WindPNumWidth (WindPNumWidth),
- .BandCmdWidth (BandCmdWidth)
- )
- WinParameters
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .FilterCmd_i (measCtrlReg[15-:8]),
- .WinPhInc_o (windPhInc),
- .WinPhIncStart_o (winPhIncStart),
- .WinNormCoef_o (windNormCoef),
- .WinPointsNum_o (windPointsNum),
- .AverageNoiseLvl_o (averageNoizeLvl)
- );
- //----------------------------------------------
- //Module generates win samples
- Win_calc WinCalcInst
- (
- .clk_i (Clk_i),
- .wind_clk (WindCalcClk_i),
- .filterCmd_i (measCtrlReg[15-:8]),
- .reset_i (Rst_i),
- .WinCtrl_i (winCtrl),
- .TukeyCtrl_i (tukeyCtrl),
- .MeasWind_i (measWind),
- .win_value_i (windArg),
- .win_type_i (measCtrlReg[2:0]),
- .win_o (wind)
- );
- // Approximation3 WindCalc2
- // (
- // .Clk_i (Clk_i),
- // .Rst_i (Rst_i),
- // .Clk100_i (WindCalcClk_i),
- // .WinCtrl_i (winCtrl),
- // .Win_value_i (windArg),
- // .filterCmd_i (measCtrlReg[15-:8]),
- // .Win_o (wind)
- // );
- //----------------------------------------------
- //Module generates Sin and Cos for measurement
- CordicNco
- #(
- .ODatWidth (NcoWidth),
- .PhIncWidth (WindNcoPhIncWidth),
- .IterNum (15),
- .EnSinN (0)
- )
- ncoInst
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i|NcoRst_i),
- .Val_i (1'b1),
- .PhaseInc_i ({ifFtwHReg[0+:WindNcoPhIncWidth-CmdDataRegWith],ifFtwLReg}),
- .WindVal_i (1'b1),
- .WinType_i (),
- .Wind_o (),
- .Sin_o (ncoSin),
- .Cos_o (ncoCos),
- .Val_o ()
- );
- ComplPrng
- #(
- .DataPrngWidth (8),
- .InDataWidth (CorrAdcDataWidth),
- .OutDataWidth (CorrAdcDataWidth)
- )
- ComplPrngAdderInst
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .PrngData_o (prngData)
- );
- always @(posedge Clk_i) begin
- prngDataBus[0] <= prngData;
- for(i=1; i<4; i=i+1) begin
- prngDataBus [i]<=prngDataBus[i-1];
- end
- end
- //------------------------------------------------
- //Generating needed amount of calculating channels
- generate
- for (g=0; g<ChNum; g=g+1) begin :DspChannel
-
- AdcCalibration
- #(
- .AccNum (2097152),
- .AdcDataWidth (CorrAdcDataWidth)
- )
- AdcCalibrationInst
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .CalModeEn_i (CalModeEn_i),
- .AdcData_i (adcDataBus[g]),
-
- .CalDone_o (calDone[g]),
- .CalibratedAdcData_o (calAdcData[g])
- );
-
- DspPipeline
- #(
- .AdcDataWidth (AdcDataWidth),
- .AccWidth (AccWidth),
- .WindWidth (WindWidth),
- .NcoWidth (NcoWidth),
- .ResultWidth (ResultWidth),
- .WindCorrCoefWidth (WindCorrCoefWidth),
- .WindNormCoefWidth (WindNormCoefWidth),
- .IntermediateWidth (IntermediateWidth)
- )
- DspPipelineInst
- (
- .Clk_i (Clk_i),
- .Rst_i (Rst_i),
- .Val_i (measWind),
- .StartFpConv_i (StartFpConv),
-
- .FilterCorrCoef_i ({filterCorrCoefHReg[0+:WindNcoPhIncWidth-CmdDataRegWith],filterCorrCoefLReg}),
- // .FilterCorrCoef_i (32'h3f800000),
- .AverageNoizeLvl_i (averageNoizeLvl),
- .AdcData_i (gatedAdcDataBus[g]),
- // .AdcData_i ({{2{ncoCos[17]}},ncoCos}),
- .Wind_i (wind),
- .NcoSin_i (ncoSin),
- .NcoCos_i (ncoCos),
- .NormCoef_i (windNormCoef),
- // .NormCoef_i (32'h3f800000),
- // .NormCoef_i (32'h3f03993a),
- .CorrResultIm_o (resultImBus[g]),
- .CorrResultRe_o (resultReBus[g]),
- .CorrResultVal_o (resultValBus[g])
- );
- end
- endgenerate
- endmodule
|