| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- `timescale 1ns / 1ps
- (* keep_hierarchy = "yes" *)
- //////////////////////////////////////////////////////////////////////////////////
- // Company:
- // Engineer: Churbanov S.
- //
- // Create Date: 10:00:14 13/08/2019
- // Design Name:
- // Module Name: DspPpiOut
- // Project Name:
- // Target Devices:
- // Tool versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module DspPpiOut
- #(
- parameter ODataWidth = 16,
- parameter ResultWidth = 40,
- parameter ChNum = 8,
- localparam DataBusWidth = ((ChNum*2)+1)*ResultWidth,
- localparam ServisePattern = 32'hABCD
- )
- (
- input Rst_i,
- input Clk_i,
-
- input [ChNum-1:0] ServiseRegData_i,
- input [ResultWidth*(ChNum*2)-1:0] MeasDataBus_i,
-
- input LpOutStart_i,
- output PpiBusy_o,
-
- output LpOutClk_o,
- output LpOutFs_o,
- output [ODataWidth-1:0] LpOutData_o
- );
- //================================================================================
- // REG/WIRE
- //================================================================================
- reg lpDataRst;
- reg [5:0] txCnt = 6'd0;
- reg [DataBusWidth-1:0] lpDataBuf;
- reg dataShEn;
- reg dataValid;
-
- reg lpOutFs;
- reg ppiBusy;
-
- wire oddrCe = (txCnt <= 6'd19 && dataValid) ? 1'b1:1'b0;
-
- wire [7:0] ampEnT1 = {{7{1'b0}},ServiseRegData_i[0]};
- wire [7:0] ampEnR1 = {{7{1'b0}},ServiseRegData_i[1]};
- wire [7:0] ampEnR2 = {{7{1'b0}},ServiseRegData_i[2]};
- wire [7:0] ampEnT2 = {{7{1'b0}},ServiseRegData_i[3]};
-
- wire [31:0] serviceData = {ampEnR2,ampEnT2,ampEnR1,ampEnT1};
-
- wire outDataVal = (txCnt <= 18 && txCnt != 0);
- //================================================================================
- // ASSIGNMENTS
- //================================================================================
- assign LpOutData_o = lpDataBuf[ODataWidth-1:0];
- assign LpOutFs_o = lpOutFs;
- assign PpiBusy_o = ppiBusy;
- //================================================================================
- // CODING
- //================================================================================
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (LpOutStart_i) begin
- ppiBusy <= 1'b1;
- end else if (!dataValid) begin
- ppiBusy <= 1'b0;
- end
- end else begin
- ppiBusy <= 1'b0;
- end
- end
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (LpOutStart_i) begin
- txCnt <= 6'd19;
- end else if (dataValid) begin
- txCnt <= txCnt - 6'd1;
- end
- end else begin
- txCnt <= 6'd0;
- end
- end
- always @(*) begin
- case (txCnt)
- 6'd19: begin
- dataShEn = 1'b0;
- dataValid = 1'b1;
- lpOutFs = 1'b0;
- end
- 6'd18: begin
- dataShEn = 1'b1;
- dataValid = 1'b1;
- lpOutFs = 1'b1;
- end
- 6'd17: begin
- dataShEn = 1'b1;
- dataValid = 1'b1;
- lpOutFs = 1'b0;
- end
- 6'd0: begin
- dataShEn = 1'b0;
- dataValid = 1'b0;
- lpOutFs = 1'b0;
- end
- default:
- begin
- dataShEn = 1'b1;
- dataValid = 1'b1;
- lpOutFs = 1'b0;
- end
- endcase
- end
- always @(posedge Clk_i) begin
- if (!Rst_i) begin
- if (txCnt == 6'd19) begin
- lpDataBuf <= {serviceData,MeasDataBus_i};
- end else if (dataShEn) begin
- lpDataBuf <= {{ODataWidth{1'b0}},lpDataBuf[DataBusWidth-1:ODataWidth]};
- end
- end else begin
- lpDataBuf <= {DataBusWidth{1'b0}};
- end
- end
- //================================================================================
- // INSTANTIATIONS
- //================================================================================
- ODDR2
- #(
- .DDR_ALIGNMENT("NONE"),
- .INIT (1'b0),
- .SRTYPE ("SYNC")
- ) clk_i10OutInst (
- .Q (LpOutClk_o),
- .C0 (Clk_i),
- .C1 (~Clk_i),
- .CE (1'b1),
- .D0 (1'b1),
- .D1 (1'b0),
- .R (1'b0),
- .S (1'b0)
- );
- endmodule
|