-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- Project : VHDL WAVE files
|
-- Project : VHDL WAVE files
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- File : Testbench-ea.vhd
|
-- File : Testbench-ea.vhd
|
-- Author : Alexander Lindert <alexander.lindert@fh-hagenberg.at>
|
-- Author : Alexander Lindert <alexander.lindert@fh-hagenberg.at>
|
-- Created : 2008-08-20
|
-- Created : 2008-08-20
|
-- Last update: 2008-08-23
|
-- Last update: 2008-08-23
|
-- Platform :
|
-- Platform :
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- Description:
|
-- Description:
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- Copyright (c) 2008
|
-- Copyright (c) 2008
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- Revisions :
|
-- Revisions :
|
-- Date Version
|
-- Date Version
|
-- 2008-08-20 1.0
|
-- 2008-08-20 1.0
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
|
|
library ieee;
|
library ieee;
|
use ieee.std_logic_1164.all;
|
use ieee.std_logic_1164.all;
|
use ieee.numeric_std.all;
|
use ieee.numeric_std.all;
|
use work.WaveFiles.all;
|
use work.WaveFiles.all;
|
|
|
entity Testbench is
|
entity Testbench is
|
end entity;
|
end entity;
|
|
|
architecture bhv of Testbench is
|
architecture bhv of Testbench is
|
|
|
-- signal iMono : signed(7 downto 0);
|
-- signal iMono : signed(7 downto 0);
|
-- type aPCM16 is array(natural range<>) of signed(15 downto 0);
|
-- type aPCM16 is array(natural range<>) of signed(15 downto 0);
|
-- signal iStereo : aPCM16(0 to 1);
|
-- signal iStereo : aPCM16(0 to 1);
|
-- signal i10 : aPCM16(0 to 9);
|
-- signal i10 : aPCM16(0 to 9);
|
signal ts : time;
|
signal ts : time;
|
signal ReaderInfo : aWaveFileInfo;
|
signal ReaderInfo : aWaveFileInfo;
|
signal WriteData, ReadData : integer;
|
signal WriteData, ReadData : integer;
|
signal Mono : integer;
|
signal Mono : integer;
|
signal Stereo : aIntArray(0 to 1);
|
signal Stereo : aIntArray(0 to 1);
|
signal Ch10 : aIntArray(0 to 9);
|
signal Ch10 : aIntArray(0 to 9);
|
|
|
begin
|
begin
|
|
|
Read : process
|
Read : process
|
file Reader : aFileHandle;
|
file Reader : aFileHandle;
|
file Writer : aFileHandle;
|
file Writer : aFileHandle;
|
variable vReaderInfo : aWaveFileInfo;
|
variable vReaderInfo : aWaveFileInfo;
|
variable vFileName : string(1 to 11);
|
variable vFileName : string(1 to 11);
|
variable vMono : integer;
|
variable vMono : integer;
|
variable vStereo : aIntArray(0 to 1);
|
variable vStereo : aIntArray(0 to 1);
|
variable vCh10 : aIntArray(0 to 9);
|
variable vCh10 : aIntArray(0 to 9);
|
variable vWriteData, vReadData : integer;
|
variable vWriteData, vReadData : integer;
|
begin
|
begin
|
for i in 0 to 3 loop
|
for i in 0 to 3 loop
|
case i is
|
case i is
|
when 0 => vFileName := "iMono.wav ";
|
when 0 => vFileName := "iMono.wav ";
|
when 1 => vFileName := "iStereo.wav";
|
when 1 => vFileName := "iStereo.wav";
|
when 2 => vFileName := "iCh10.wav ";
|
when 2 => vFileName := "iCh10.wav ";
|
when 3 => vFileName := "iBit32.wav ";
|
when 3 => vFileName := "iBit32.wav ";
|
when others => null;
|
when others => null;
|
end case;
|
end case;
|
OpenWaveFileRead(vFileName, Reader, vReaderInfo);
|
OpenWaveFileRead(vFileName, Reader, vReaderInfo);
|
case i is
|
case i is
|
when 0 => vFileName := "oMono.wav ";
|
when 0 => vFileName := "oMono.wav ";
|
when 1 => vFileName := "oStereo.wav";
|
when 1 => vFileName := "oStereo.wav";
|
when 2 => vFileName := "oCh10.wav ";
|
when 2 => vFileName := "oCh10.wav ";
|
when 3 => vFileName := "oBit32.wav ";
|
when 3 => vFileName := "oBit32.wav ";
|
when others => null;
|
when others => null;
|
end case;
|
end case;
|
OpenWaveFileWrite(vFileName, Writer, vReaderInfo);
|
OpenWaveFileWrite(vFileName, Writer, vReaderInfo);
|
ReaderInfo <= vReaderInfo;
|
ReaderInfo <= vReaderInfo;
|
vReadData := vReaderInfo.DataSize;
|
vReadData := vReaderInfo.DataSize;
|
vWriteData := vReaderInfo.DataSize;
|
vWriteData := vReaderInfo.DataSize;
|
ts <= 1 sec /(vReaderInfo.SamplingRate);
|
ts <= 1 sec /(vReaderInfo.SamplingRate);
|
wait for 0 ns;
|
wait for 0 ns;
|
wait for ts;
|
wait for ts;
|
|
|
while vReadData > 0 loop
|
while vReadData > 0 loop
|
case vReaderInfo.Channels is
|
case vReaderInfo.Channels is
|
when 1 =>
|
when 1 =>
|
ReadSample(Reader, vMono,
|
ReadSample(Reader, vMono,
|
vReadData, vReaderInfo.DataTyp);
|
vReadData, vReaderInfo.DataTyp);
|
Mono <= vMono;
|
Mono <= vMono;
|
WriteSample(Writer, vMono,
|
WriteSample(Writer, vMono,
|
vWriteData, vReaderInfo.DataTyp);
|
vWriteData, vReaderInfo.DataTyp);
|
when 2 =>
|
when 2 =>
|
ReadSamples(Reader, vStereo, vReadData,
|
ReadSamples(Reader, vStereo, vReadData,
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
Stereo <= vStereo;
|
Stereo <= vStereo;
|
WriteSamples(Writer, vStereo, vWriteData,
|
WriteSamples(Writer, vStereo, vWriteData,
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
when 10 =>
|
when 10 =>
|
ReadSamples(Reader, vCh10, vReadData,
|
ReadSamples(Reader, vCh10, vReadData,
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
Ch10 <= vCh10;
|
Ch10 <= vCh10;
|
WriteSamples(Writer, vCh10, vWriteData,
|
WriteSamples(Writer, vCh10, vWriteData,
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
vReaderInfo.Channels, vReaderInfo.DataTyp);
|
when others =>
|
when others =>
|
report "Untestet" severity note;
|
report "Untestet" severity note;
|
vReaderInfo.DataSize := 0;
|
vReaderInfo.DataSize := 0;
|
end case;
|
end case;
|
ReadData <= vReadData;
|
ReadData <= vReadData;
|
WriteData <= vReadData;
|
WriteData <= vReadData;
|
wait for ts;
|
wait for ts;
|
end loop;
|
end loop;
|
file_close(Reader);
|
file_close(Reader);
|
file_close(Writer);
|
file_close(Writer);
|
end loop;
|
end loop;
|
|
|
wait;
|
wait;
|
end process;
|
end process;
|
|
|
end architecture;
|
end architecture;
|
|
|
|
|
|
|