RFToolSDR/fpga/dds/dds-testbench.vhd

70 lines
1.6 KiB
VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use STD.textio.ALL;
entity dds_testbench is
end dds_testbench;
architecture Behavioral of dds_testbench is
signal clock : std_logic := '0';
signal i_val, q_val : std_logic_vector(11 downto 0);
signal frequency : std_logic_vector(23 downto 0);
signal q_phase : std_logic_vector(11 downto 0);
signal i_amp, q_amp : std_logic_vector(7 downto 0);
file outfile : text;
begin
frequency <= x"051EB8"; --1MHz with a 50MHz clock
q_phase <= x"400"; --90 degree offset
i_amp <= x"FF";
q_amp <= x"7F";
gen : entity work.dds_iq_sine_gen
port map(
clock => clock,
reset => '0',
enable => '1',
frequency => frequency,
global_phase => x"000000",
global_phase_load => '0',
q_phase_offset => q_phase,
i_amplitude => i_amp,
q_amplitude => q_amp,
i_out => i_val,
q_out => q_val);
process
variable i_tmp, q_tmp : integer;
variable oline : line;
begin
file_open(outfile, "output.csv", write_mode);
write(oline, string'("t, i, q,"));
writeline(outfile, oline);
for i in 1 to 1000 loop
wait for 10 ns;
clock <= '1';
wait for 10 ns;
clock <= '0';
i_tmp := to_integer(signed(i_val));
q_tmp := to_integer(signed(q_val));
write(oline, (now / 1 ns), left, 4);
write(oline, string'(", "));
write(oline, i_tmp, left, 5);
write(oline, string'(", "));
write(oline, q_tmp, left, 5);
write(oline, string'(", "));
writeline(outfile, oline);
end loop;
file_close(outfile);
wait;
end process;
end Behavioral;