308 lines
9.7 KiB
Plaintext
308 lines
9.7 KiB
Plaintext
--
|
|
-- VHDL Architecture SplineInterpolator.sineGen.struct
|
|
--
|
|
-- Created:
|
|
-- by - axel.amand.UNKNOWN (WE7860)
|
|
-- at - 14:42:04 28.04.2023
|
|
--
|
|
-- Generated by Mentor Graphics' HDL Designer(TM) 2019.2 (Build 5)
|
|
--
|
|
LIBRARY ieee;
|
|
USE ieee.std_logic_1164.all;
|
|
USE ieee.numeric_std.all;
|
|
|
|
LIBRARY SplineInterpolator;
|
|
LIBRARY WaveformGenerator;
|
|
|
|
ARCHITECTURE struct OF sineGen IS
|
|
|
|
-- Architecture declarations
|
|
constant tableAddressBitNb : positive := 3;
|
|
constant sampleCountBitNb : positive := phaseBitNb-2-tableAddressBitNb;
|
|
constant coeffBitNb : positive := signalBitNb+4;
|
|
|
|
-- Internal signal declarations
|
|
SIGNAL a : signed(coeffBitNb-1 DOWNTO 0);
|
|
SIGNAL b : signed(coeffBitNb-1 DOWNTO 0);
|
|
SIGNAL c : signed(coeffBitNb-1 DOWNTO 0);
|
|
SIGNAL d : signed(coeffBitNb-1 DOWNTO 0);
|
|
SIGNAL logic0 : std_ulogic;
|
|
SIGNAL logic1 : std_ulogic;
|
|
SIGNAL newPolynom : std_ulogic;
|
|
SIGNAL phase : unsigned(phaseBitNb-1 DOWNTO 0);
|
|
SIGNAL sample1 : signed(signalBitNb-1 DOWNTO 0);
|
|
SIGNAL sample2 : signed(signalBitNb-1 DOWNTO 0);
|
|
SIGNAL sample3 : signed(signalBitNb-1 DOWNTO 0);
|
|
SIGNAL sample4 : signed(signalBitNb-1 DOWNTO 0);
|
|
SIGNAL sineSamples : signed(signalBitNb-1 DOWNTO 0);
|
|
SIGNAL sineSigned : signed(signalBitNb-1 DOWNTO 0);
|
|
|
|
-- Implicit buffer signal declarations
|
|
SIGNAL sawtooth_internal : unsigned (signalBitNb-1 DOWNTO 0);
|
|
|
|
|
|
-- Component Declarations
|
|
COMPONENT interpolatorCalculatePolynom
|
|
GENERIC (
|
|
signalBitNb : positive := 16;
|
|
coeffBitNb : positive := 16;
|
|
oversamplingBitNb : positive := 8
|
|
);
|
|
PORT (
|
|
clock : IN std_ulogic ;
|
|
reset : IN std_ulogic ;
|
|
restartPolynom : IN std_ulogic ;
|
|
d : IN signed (coeffBitNb-1 DOWNTO 0);
|
|
sampleOut : OUT signed (signalBitNb-1 DOWNTO 0);
|
|
c : IN signed (coeffBitNb-1 DOWNTO 0);
|
|
b : IN signed (coeffBitNb-1 DOWNTO 0);
|
|
a : IN signed (coeffBitNb-1 DOWNTO 0);
|
|
en : IN std_ulogic
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT interpolatorCoefficients
|
|
GENERIC (
|
|
bitNb : positive := 16;
|
|
coeffBitNb : positive := 16
|
|
);
|
|
PORT (
|
|
sample1 : IN signed (bitNb-1 DOWNTO 0);
|
|
sample2 : IN signed (bitNb-1 DOWNTO 0);
|
|
sample3 : IN signed (bitNb-1 DOWNTO 0);
|
|
sample4 : IN signed (bitNb-1 DOWNTO 0);
|
|
a : OUT signed (coeffBitNb-1 DOWNTO 0);
|
|
b : OUT signed (coeffBitNb-1 DOWNTO 0);
|
|
c : OUT signed (coeffBitNb-1 DOWNTO 0);
|
|
d : OUT signed (coeffBitNb-1 DOWNTO 0);
|
|
interpolateLinear : IN std_ulogic
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT interpolatorShiftRegister
|
|
GENERIC (
|
|
signalBitNb : positive := 16
|
|
);
|
|
PORT (
|
|
clock : IN std_ulogic ;
|
|
reset : IN std_ulogic ;
|
|
shiftSamples : IN std_ulogic ;
|
|
sampleIn : IN signed (signalBitNb-1 DOWNTO 0);
|
|
sample1 : OUT signed (signalBitNb-1 DOWNTO 0);
|
|
sample2 : OUT signed (signalBitNb-1 DOWNTO 0);
|
|
sample3 : OUT signed (signalBitNb-1 DOWNTO 0);
|
|
sample4 : OUT signed (signalBitNb-1 DOWNTO 0)
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT interpolatorTrigger
|
|
GENERIC (
|
|
counterBitNb : positive := 4
|
|
);
|
|
PORT (
|
|
triggerOut : OUT std_ulogic ;
|
|
clock : IN std_ulogic ;
|
|
reset : IN std_ulogic ;
|
|
en : IN std_ulogic
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT offsetToUnsigned
|
|
GENERIC (
|
|
bitNb : positive := 16
|
|
);
|
|
PORT (
|
|
unsignedOut : OUT unsigned (bitNb-1 DOWNTO 0);
|
|
signedIn : IN signed (bitNb-1 DOWNTO 0)
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT resizer
|
|
GENERIC (
|
|
inputBitNb : positive := 16;
|
|
outputBitNb : positive := 16
|
|
);
|
|
PORT (
|
|
resizeOut : OUT unsigned (outputBitNb-1 DOWNTO 0);
|
|
resizeIn : IN unsigned (inputBitNb-1 DOWNTO 0)
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT sineTable
|
|
GENERIC (
|
|
inputBitNb : positive := 16;
|
|
outputBitNb : positive := 16;
|
|
tableAddressBitNb : positive := 3
|
|
);
|
|
PORT (
|
|
sine : OUT signed (outputBitNb-1 DOWNTO 0);
|
|
phase : IN unsigned (inputBitNb-1 DOWNTO 0)
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT sawtoothGen
|
|
GENERIC (
|
|
bitNb : positive := 16
|
|
);
|
|
PORT (
|
|
sawtooth : OUT unsigned (bitNb-1 DOWNTO 0);
|
|
clock : IN std_ulogic ;
|
|
reset : IN std_ulogic ;
|
|
step : IN unsigned (bitNb-1 DOWNTO 0);
|
|
en : IN std_ulogic
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT sawtoothToSquare
|
|
GENERIC (
|
|
bitNb : positive := 16
|
|
);
|
|
PORT (
|
|
square : OUT unsigned (bitNb-1 DOWNTO 0);
|
|
sawtooth : IN unsigned (bitNb-1 DOWNTO 0)
|
|
);
|
|
END COMPONENT;
|
|
COMPONENT sawtoothToTriangle
|
|
GENERIC (
|
|
bitNb : positive := 16
|
|
);
|
|
PORT (
|
|
triangle : OUT unsigned (bitNb-1 DOWNTO 0);
|
|
sawtooth : IN unsigned (bitNb-1 DOWNTO 0)
|
|
);
|
|
END COMPONENT;
|
|
|
|
-- Optional embedded configurations
|
|
-- pragma synthesis_off
|
|
FOR ALL : interpolatorCalculatePolynom USE ENTITY SplineInterpolator.interpolatorCalculatePolynom;
|
|
FOR ALL : interpolatorCoefficients USE ENTITY SplineInterpolator.interpolatorCoefficients;
|
|
FOR ALL : interpolatorShiftRegister USE ENTITY SplineInterpolator.interpolatorShiftRegister;
|
|
FOR ALL : interpolatorTrigger USE ENTITY SplineInterpolator.interpolatorTrigger;
|
|
FOR ALL : offsetToUnsigned USE ENTITY SplineInterpolator.offsetToUnsigned;
|
|
FOR ALL : resizer USE ENTITY SplineInterpolator.resizer;
|
|
FOR ALL : sawtoothGen USE ENTITY WaveformGenerator.sawtoothGen;
|
|
FOR ALL : sawtoothToSquare USE ENTITY WaveformGenerator.sawtoothToSquare;
|
|
FOR ALL : sawtoothToTriangle USE ENTITY WaveformGenerator.sawtoothToTriangle;
|
|
FOR ALL : sineTable USE ENTITY SplineInterpolator.sineTable;
|
|
-- pragma synthesis_on
|
|
|
|
|
|
BEGIN
|
|
-- Architecture concurrent statements
|
|
-- HDL Embedded Text Block 2 eb2
|
|
logic1 <= '1';
|
|
|
|
-- HDL Embedded Text Block 3 eb3
|
|
logic0 <= '0';
|
|
|
|
|
|
-- Instance port mappings.
|
|
I_spline : interpolatorCalculatePolynom
|
|
GENERIC MAP (
|
|
signalBitNb => signalBitNb,
|
|
coeffBitNb => coeffBitNb,
|
|
oversamplingBitNb => sampleCountBitNb
|
|
)
|
|
PORT MAP (
|
|
clock => clock,
|
|
reset => reset,
|
|
restartPolynom => newPolynom,
|
|
d => d,
|
|
sampleOut => sineSigned,
|
|
c => c,
|
|
b => b,
|
|
a => a,
|
|
en => logic1
|
|
);
|
|
I_coeffs : interpolatorCoefficients
|
|
GENERIC MAP (
|
|
bitNb => signalBitNb,
|
|
coeffBitNb => coeffBitNb
|
|
)
|
|
PORT MAP (
|
|
sample1 => sample1,
|
|
sample2 => sample2,
|
|
sample3 => sample3,
|
|
sample4 => sample4,
|
|
a => a,
|
|
b => b,
|
|
c => c,
|
|
d => d,
|
|
interpolateLinear => logic0
|
|
);
|
|
I_shReg : interpolatorShiftRegister
|
|
GENERIC MAP (
|
|
signalBitNb => signalBitNb
|
|
)
|
|
PORT MAP (
|
|
clock => clock,
|
|
reset => reset,
|
|
shiftSamples => newPolynom,
|
|
sampleIn => sineSamples,
|
|
sample1 => sample1,
|
|
sample2 => sample2,
|
|
sample3 => sample3,
|
|
sample4 => sample4
|
|
);
|
|
I_trig : interpolatorTrigger
|
|
GENERIC MAP (
|
|
counterBitNb => sampleCountBitNb
|
|
)
|
|
PORT MAP (
|
|
triggerOut => newPolynom,
|
|
clock => clock,
|
|
reset => reset,
|
|
en => logic1
|
|
);
|
|
I_unsigned : offsetToUnsigned
|
|
GENERIC MAP (
|
|
bitNb => signalBitNb
|
|
)
|
|
PORT MAP (
|
|
unsignedOut => sine,
|
|
signedIn => sineSigned
|
|
);
|
|
I_size : resizer
|
|
GENERIC MAP (
|
|
inputBitNb => phaseBitNb,
|
|
outputBitNb => signalBitNb
|
|
)
|
|
PORT MAP (
|
|
resizeOut => sawtooth_internal,
|
|
resizeIn => phase
|
|
);
|
|
I_sin : sineTable
|
|
GENERIC MAP (
|
|
inputBitNb => phaseBitNb,
|
|
outputBitNb => signalBitNb,
|
|
tableAddressBitNb => tableAddressBitNb
|
|
)
|
|
PORT MAP (
|
|
sine => sineSamples,
|
|
phase => phase
|
|
);
|
|
I_saw : sawtoothGen
|
|
GENERIC MAP (
|
|
bitNb => phaseBitNb
|
|
)
|
|
PORT MAP (
|
|
sawtooth => phase,
|
|
clock => clock,
|
|
reset => reset,
|
|
step => step,
|
|
en => logic1
|
|
);
|
|
I_square : sawtoothToSquare
|
|
GENERIC MAP (
|
|
bitNb => signalBitNb
|
|
)
|
|
PORT MAP (
|
|
square => square,
|
|
sawtooth => sawtooth_internal
|
|
);
|
|
I_tri : sawtoothToTriangle
|
|
GENERIC MAP (
|
|
bitNb => signalBitNb
|
|
)
|
|
PORT MAP (
|
|
triangle => triangle,
|
|
sawtooth => sawtooth_internal
|
|
);
|
|
|
|
-- Implicit buffered output assignments
|
|
sawtooth <= sawtooth_internal;
|
|
|
|
END struct;
|