library IEEE; use IEEE.MATH_REAL.ALL; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.NUMERIC_STD.ALL; entity SineGen is Port (clock : in std_logic; dac_ab_vpp : in integer range 0 to 4095; dac_cd_vpp : in integer range 0 to 4095; sine_dac_ab : out std_logic_vector(11 downto 0); sine_dac_cd : out std_logic_vector(11 downto 0)); end SineGen; architecture Behavioral of SineGen is subtype slv is std_logic_vector(11 downto 0); begin process(clock) variable count : integer range 0 to 255 := 0; variable temp_dac_ab : integer range 0 to 4095 := 0; variable temp_dac_cd : integer range 0 to 4095 := 0; begin if rising_edge(clock) then
I tried everything and it comes down to the fact that the next two lines make the output always zero , and I donβt understand why. It should have been a sinusoidal output. (count - 256 samples per period. n - number of bits.) Are the following values ββin a valid format?
-- A*sin (2PI/2^n * count) temp_dac_ab := dac_ab_vpp * integer(round(sin(real(count * integer(math_2_pi/real(256)))))); temp_dac_cd := dac_cd_vpp * integer(round(sin(real(count * integer(math_2_pi/real(256)))))); if count < 256 then count := count + 1; else count := 0; end if; sine_dac_ab <= conv_std_logic_vector(temp_dac_ab, slv'length); sine_dac_cd <= conv_std_logic_vector(temp_dac_cd, slv'length); end if; end process; end Behavioral;
source share