----------------------------------------------------------------------------- -- File: sin_rom_wwu.vhd -- -- Description: A look=up table for generating a sine wave -- by: L.Aamodt -- rev: rev1 -- hardware: For use with the WWU Pmod A/D - D/A board -- 12 bit data, 256 data points for one cycle ----------------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity sin_rom_wwu is generic( ADDR_WIDTH: integer:=8; DATA_WIDTH:integer:=12 ); port( clk: in std_logic; addr_r: in std_logic_vector(ADDR_WIDTH-1 downto 0); dout: out std_logic_vector(DATA_WIDTH-1 downto 0) ); end sin_rom_wwu; architecture beh_arch of sin_rom_wwu is type rom_type is array (0 to 2**ADDR_WIDTH-1) of std_logic_vector (DATA_WIDTH-1 downto 0); constant myROM: rom_type:=( -- 256 x 12bits x"7FF", x"832", x"864", x"896", x"8C8", x"8FA", x"92C", x"95E", x"98F", x"9C0", x"9F1", x"A22", x"A52", x"A82", x"AB1", x"AE1", x"B0F", x"B3D", x"B6B", x"B98", x"BC5", x"BF1", x"C1C", x"C47", x"C71", x"C9B", x"CC3", x"CEB", x"D13", x"D39", x"D5F", x"D84", x"DA8", x"DCB", x"DED", x"E0E", x"E2F", x"E4E", x"E6C", x"E8A", x"EA6", x"EC2", x"EDC", x"EF5", x"F0E", x"F25", x"F3B", x"F50", x"F64", x"F76", x"F88", x"F98", x"FA7", x"FB5", x"FC2", x"FCE", x"FD8", x"FE1", x"FE9", x"FF0", x"FF6", x"FFA", x"FFD", x"FFE", x"FFF", x"FFE", x"FFD", x"FFA", x"FF6", x"FF0", x"FE9", x"FE1", x"FD8", x"FCE", x"FC2", x"FB5", x"FA7", x"F98", x"F88", x"F76", x"F64", x"F50", x"F3B", x"F25", x"F0E", x"EF5", x"EDC", x"EC2", x"EA6", x"E8A", x"E6C", x"E4E", x"E2F", x"E0E", x"DED", x"DCB", x"DA8", x"D84", x"D5F", x"D39", x"D13", x"CEB", x"CC3", x"C9B", x"C71", x"C47", x"C1C", x"BF1", x"BC5", x"B98", x"B6B", x"B3D", x"B0F", x"AE1", x"AB1", x"A82", x"A52", x"A22", x"9F1", x"9C0", x"98F", x"95E", x"92C", x"8FA", x"8C8", x"896", x"864", x"832", x"7FF", x"7CD", x"79B", x"769", x"737", x"705", x"6D3", x"6A1", x"670", x"63F", x"60E", x"5DD", x"5AD", x"57D", x"54E", x"51E", x"4F0", x"4C2", x"494", x"467", x"43A", x"40E", x"3E3", x"3B8", x"38E", x"364", x"33B", x"313", x"2EC", x"2C6", x"2A0", x"27B", x"257", x"234", x"212", x"1F1", x"1D0", x"1B1", x"193", x"175", x"159", x"13D", x"123", x"10A", x"0F1", x"0DA", x"0C4", x"0AF", x"09B", x"089", x"077", x"067", x"058", x"04A", x"03D", x"031", x"027", x"01E", x"016", x"00F", x"009", x"005", x"002", x"001", x"000", x"001", x"002", x"005", x"009", x"00F", x"016", x"01E", x"027", x"031", x"03D", x"04A", x"058", x"067", x"077", x"089", x"09B", x"0AF", x"0C4", x"0DA", x"0F1", x"10A", x"123", x"13D", x"159", x"175", x"193", x"1B1", x"1D0", x"1F1", x"212", x"234", x"257", x"27B", x"2A0", x"2C6", x"2EC", x"313", x"33B", x"364", x"38E", x"3B8", x"3E3", x"40E", x"43A", x"467", x"494", x"4C2", x"4F0", x"51E", x"54E", x"57D", x"5AD", x"5DD", x"60E", x"63F", x"670", x"6A1", x"6D3", x"705", x"737", x"769", x"79B", x"7CD"); begin process(clk) begin if (clk'event and clk = '1') then dout <= myROM(to_integer(unsigned(addr_r))); end if; end process; end beh_arch;