`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // 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 DitherGen #( parameter CmdDataRegWith = 24, parameter FrAmpWordWidth = 8 ) ( input Rst_i, input Clk_i, input [CmdDataRegWith-1:0] DitherCmd_i, output DitherCtrlT2R2_o, output DitherCtrlT1R1_o ); //================================================================================ // REG/WIRE //================================================================================ wire [FrAmpWordWidth-1:0] ditherFreq = DitherCmd_i[CmdDataRegWith-1-:FrAmpWordWidth]; wire [FrAmpWordWidth-1:0] ditherAmp = DitherCmd_i[CmdDataRegWith-FrAmpWordWidth-1-:FrAmpWordWidth]; wire ditherT2R2 = DitherCmd_i[1]; wire ditherT1R1 = DitherCmd_i[0]; reg [FrAmpWordWidth-1:0] freqCnt; reg [FrAmpWordWidth-1:0] ampCnt; wire DitherReg = ((freqCnt<=ditherFreq/2)&&(ampCnt<=ditherAmp))? 1'b1:1'b0; wire ClkDiv = (freqCnt<=ditherFreq/2)? 1'b1:1'b0; //================================================================================ // ASSIGNMENTS //================================================================================ assign DitherCtrlT2R2_o = (ditherT2R2)? DitherReg:1'b0; assign DitherCtrlT1R1_o = (ditherT1R1)? DitherReg:1'b0; //================================================================================ // CODING //================================================================================ always @(posedge Clk_i) begin if (!Rst_i) begin if (freqCnt!=ditherFreq-1) begin freqCnt<=freqCnt+1; end else begin freqCnt<=0; end end else begin freqCnt<=0; end end always @(posedge Clk_i) begin if (!Rst_i) begin if (ampCnt!=ditherFreq-1) begin ampCnt<=ampCnt+1; end else begin ampCnt<=0; end end else begin ampCnt<=0; end end endmodule