/ sine16.vhd
sine16.vhd
  1  library IEEE;
  2  use IEEE.STD_LOGIC_1164.all;
  3  use IEEE.STD_LOGIC_ARITH.all;
  4  use IEEE.STD_LOGIC_UNSIGNED.all;
  5  
  6  -- Created from 16bitsin.bin
  7  -- On 2/22/2010
  8  --
  9  -- Copyright (C) 2007, Peter C. Wallace, Mesa Electronics
 10  -- http://www.mesanet.com
 11  --
 12  -- This program is is licensed under a disjunctive dual license giving you
 13  -- the choice of one of the two following sets of free software/open source
 14  -- licensing terms:
 15  --
 16  --    * GNU General Public License (GPL), version 2.0 or later
 17  --    * 3-clause BSD License
 18  -- 
 19  --
 20  -- The GNU GPL License:
 21  -- 
 22  --     This program is free software; you can redistribute it and/or modify
 23  --     it under the terms of the GNU General Public License as published by
 24  --     the Free Software Foundation; either version 2 of the License, or
 25  --     (at your option) any later version.
 26  -- 
 27  --     This program is distributed in the hope that it will be useful,
 28  --     but WITHOUT ANY WARRANTY; without even the implied warranty of
 29  --     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 30  --     GNU General Public License for more details.
 31  -- 
 32  --     You should have received a copy of the GNU General Public License
 33  --     along with this program; if not, write to the Free Software
 34  --     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 35  -- 
 36  -- 
 37  -- The 3-clause BSD License:
 38  -- 
 39  --     Redistribution and use in source and binary forms, with or without
 40  --     modification, are permitted provided that the following conditions
 41  --     are met:
 42  -- 
 43  --         * Redistributions of source code must retain the above copyright
 44  --           notice, this list of conditions and the following disclaimer.
 45  -- 
 46  --         * Redistributions in binary form must reproduce the above
 47  --           copyright notice, this list of conditions and the following
 48  --           disclaimer in the documentation and/or other materials
 49  --           provided with the distribution.
 50  -- 
 51  --         * Neither the name of Mesa Electronics nor the names of its
 52  --           contributors may be used to endorse or promote products
 53  --           derived from this software without specific prior written
 54  --           permission.
 55  -- 
 56  -- 
 57  -- Disclaimer:
 58  -- 
 59  --     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 60  --     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 61  --     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 62  --     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 63  --     COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 64  --     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 65  --     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 66  --     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 67  --     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 68  --     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 69  --     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 70  --     POSSIBILITY OF SUCH DAMAGE.
 71  -- 
 72  entity sine16 is
 73  	port (
 74  	addr: in std_logic_vector(9 downto 0);
 75  	clk: in std_logic;
 76  	din: in std_logic_vector(15 downto 0);
 77  	dout: out std_logic_vector(15 downto 0);
 78  	we: in std_logic);
 79  end sine16;
 80  
 81  architecture syn of sine16 is
 82     type ram_type is array (0 to 1023) of std_logic_vector(15 downto 0);
 83     signal RAM : ram_type := 
 84     (
 85     x"0000", x"00C9", x"0192", x"025B", x"0324", x"03ED", x"04B6", x"057F",
 86     x"0648", x"0711", x"07D9", x"08A2", x"096A", x"0A33", x"0AFB", x"0BC4",
 87     x"0C8C", x"0D54", x"0E1C", x"0EE3", x"0FAB", x"1072", x"113A", x"1201",
 88     x"12C8", x"138F", x"1455", x"151C", x"15E2", x"16A8", x"176E", x"1833",
 89     x"18F9", x"19BE", x"1A82", x"1B47", x"1C0B", x"1CCF", x"1D93", x"1E57",
 90     x"1F1A", x"1FDD", x"209F", x"2161", x"2223", x"22E5", x"23A6", x"2467",
 91     x"2528", x"25E8", x"26A8", x"2767", x"2826", x"28E5", x"29A3", x"2A61",
 92     x"2B1F", x"2BDC", x"2C99", x"2D55", x"2E11", x"2ECC", x"2F87", x"3041",
 93     x"30FB", x"31B5", x"326E", x"3326", x"33DF", x"3496", x"354D", x"3604",
 94     x"36BA", x"376F", x"3824", x"38D9", x"398C", x"3A40", x"3AF2", x"3BA5",
 95     x"3C56", x"3D07", x"3DB8", x"3E68", x"3F17", x"3FC5", x"4073", x"4121",
 96     x"41CE", x"427A", x"4325", x"43D0", x"447A", x"4524", x"45CD", x"4675",
 97     x"471C", x"47C3", x"4869", x"490F", x"49B4", x"4A58", x"4AFB", x"4B9D",
 98     x"4C3F", x"4CE0", x"4D81", x"4E20", x"4EBF", x"4F5D", x"4FFB", x"5097",
 99     x"5133", x"51CE", x"5268", x"5302", x"539B", x"5432", x"54C9", x"5560",
100     x"55F5", x"568A", x"571D", x"57B0", x"5842", x"58D3", x"5964", x"59F3",
101     x"5A82", x"5B0F", x"5B9C", x"5C28", x"5CB3", x"5D3E", x"5DC7", x"5E4F",
102     x"5ED7", x"5F5D", x"5FE3", x"6068", x"60EB", x"616E", x"61F0", x"6271",
103     x"62F1", x"6370", x"63EE", x"646C", x"64E8", x"6563", x"65DD", x"6656",
104     x"66CF", x"6746", x"67BC", x"6832", x"68A6", x"6919", x"698B", x"69FD",
105     x"6A6D", x"6ADC", x"6B4A", x"6BB7", x"6C23", x"6C8E", x"6CF8", x"6D61",
106     x"6DC9", x"6E30", x"6E96", x"6EFB", x"6F5E", x"6FC1", x"7022", x"7083",
107     x"70E2", x"7140", x"719D", x"71F9", x"7254", x"72AE", x"7307", x"735E",
108     x"73B5", x"740A", x"745F", x"74B2", x"7504", x"7555", x"75A5", x"75F3",
109     x"7641", x"768D", x"76D8", x"7722", x"776B", x"77B3", x"77FA", x"783F",
110     x"7884", x"78C7", x"7909", x"794A", x"7989", x"79C8", x"7A05", x"7A41",
111     x"7A7C", x"7AB6", x"7AEE", x"7B26", x"7B5C", x"7B91", x"7BC5", x"7BF8",
112     x"7C29", x"7C59", x"7C88", x"7CB6", x"7CE3", x"7D0E", x"7D39", x"7D62",
113     x"7D89", x"7DB0", x"7DD5", x"7DFA", x"7E1D", x"7E3E", x"7E5F", x"7E7E",
114     x"7E9C", x"7EB9", x"7ED5", x"7EEF", x"7F09", x"7F21", x"7F37", x"7F4D",
115     x"7F61", x"7F74", x"7F86", x"7F97", x"7FA6", x"7FB4", x"7FC1", x"7FCD",
116     x"7FD8", x"7FE1", x"7FE9", x"7FF0", x"7FF5", x"7FF9", x"7FFD", x"7FFE",
117     x"7FFF", x"7FFE", x"7FFD", x"7FF9", x"7FF5", x"7FF0", x"7FE9", x"7FE1",
118     x"7FD8", x"7FCD", x"7FC1", x"7FB4", x"7FA6", x"7F97", x"7F86", x"7F74",
119     x"7F61", x"7F4D", x"7F37", x"7F21", x"7F09", x"7EEF", x"7ED5", x"7EB9",
120     x"7E9C", x"7E7E", x"7E5F", x"7E3E", x"7E1D", x"7DFA", x"7DD5", x"7DB0",
121     x"7D89", x"7D62", x"7D39", x"7D0E", x"7CE3", x"7CB6", x"7C88", x"7C59",
122     x"7C29", x"7BF8", x"7BC5", x"7B91", x"7B5C", x"7B26", x"7AEE", x"7AB6",
123     x"7A7C", x"7A41", x"7A05", x"79C8", x"7989", x"794A", x"7909", x"78C7",
124     x"7884", x"783F", x"77FA", x"77B3", x"776B", x"7722", x"76D8", x"768D",
125     x"7641", x"75F3", x"75A5", x"7555", x"7504", x"74B2", x"745F", x"740A",
126     x"73B5", x"735E", x"7307", x"72AE", x"7254", x"71F9", x"719D", x"7140",
127     x"70E2", x"7083", x"7022", x"6FC1", x"6F5E", x"6EFB", x"6E96", x"6E30",
128     x"6DC9", x"6D61", x"6CF8", x"6C8E", x"6C23", x"6BB7", x"6B4A", x"6ADC",
129     x"6A6D", x"69FD", x"698B", x"6919", x"68A6", x"6832", x"67BC", x"6746",
130     x"66CF", x"6656", x"65DD", x"6563", x"64E8", x"646C", x"63EE", x"6370",
131     x"62F1", x"6271", x"61F0", x"616E", x"60EB", x"6068", x"5FE3", x"5F5D",
132     x"5ED7", x"5E4F", x"5DC7", x"5D3E", x"5CB3", x"5C28", x"5B9C", x"5B0F",
133     x"5A82", x"59F3", x"5964", x"58D3", x"5842", x"57B0", x"571D", x"568A",
134     x"55F5", x"5560", x"54C9", x"5432", x"539B", x"5302", x"5268", x"51CE",
135     x"5133", x"5097", x"4FFB", x"4F5D", x"4EBF", x"4E20", x"4D81", x"4CE0",
136     x"4C3F", x"4B9D", x"4AFB", x"4A58", x"49B4", x"490F", x"4869", x"47C3",
137     x"471C", x"4675", x"45CD", x"4524", x"447A", x"43D0", x"4325", x"427A",
138     x"41CE", x"4121", x"4073", x"3FC5", x"3F17", x"3E68", x"3DB8", x"3D07",
139     x"3C56", x"3BA5", x"3AF2", x"3A40", x"398C", x"38D9", x"3824", x"376F",
140     x"36BA", x"3604", x"354D", x"3496", x"33DF", x"3326", x"326E", x"31B5",
141     x"30FB", x"3041", x"2F87", x"2ECC", x"2E11", x"2D55", x"2C99", x"2BDC",
142     x"2B1F", x"2A61", x"29A3", x"28E5", x"2826", x"2767", x"26A8", x"25E8",
143     x"2528", x"2467", x"23A6", x"22E5", x"2223", x"2161", x"209F", x"1FDD",
144     x"1F1A", x"1E57", x"1D93", x"1CCF", x"1C0B", x"1B47", x"1A82", x"19BE",
145     x"18F9", x"1833", x"176E", x"16A8", x"15E2", x"151C", x"1455", x"138F",
146     x"12C8", x"1201", x"113A", x"1072", x"0FAB", x"0EE3", x"0E1C", x"0D54",
147     x"0C8C", x"0BC4", x"0AFB", x"0A33", x"096A", x"08A2", x"07D9", x"0711",
148     x"0648", x"057F", x"04B6", x"03ED", x"0324", x"025B", x"0192", x"00C9",
149     x"0000", x"FF37", x"FE6E", x"FDA5", x"FCDC", x"FC13", x"FB4A", x"FA81",
150     x"F9B8", x"F8EF", x"F827", x"F75E", x"F696", x"F5CD", x"F505", x"F43C",
151     x"F374", x"F2AC", x"F1E4", x"F11D", x"F055", x"EF8E", x"EEC6", x"EDFF",
152     x"ED38", x"EC71", x"EBAB", x"EAE4", x"EA1E", x"E958", x"E892", x"E7CD",
153     x"E707", x"E642", x"E57E", x"E4B9", x"E3F5", x"E331", x"E26D", x"E1A9",
154     x"E0E6", x"E023", x"DF61", x"DE9F", x"DDDD", x"DD1B", x"DC5A", x"DB99",
155     x"DAD8", x"DA18", x"D958", x"D899", x"D7DA", x"D71B", x"D65D", x"D59F",
156     x"D4E1", x"D424", x"D367", x"D2AB", x"D1EF", x"D134", x"D079", x"CFBF",
157     x"CF05", x"CE4B", x"CD92", x"CCDA", x"CC21", x"CB6A", x"CAB3", x"C9FC",
158     x"C946", x"C891", x"C7DC", x"C727", x"C674", x"C5C0", x"C50E", x"C45B",
159     x"C3AA", x"C2F9", x"C248", x"C198", x"C0E9", x"C03B", x"BF8D", x"BEDF",
160     x"BE32", x"BD86", x"BCDB", x"BC30", x"BB86", x"BADC", x"BA33", x"B98B",
161     x"B8E4", x"B83D", x"B797", x"B6F1", x"B64C", x"B5A8", x"B505", x"B463",
162     x"B3C1", x"B320", x"B27F", x"B1E0", x"B141", x"B0A3", x"B005", x"AF69",
163     x"AECD", x"AE32", x"AD98", x"ACFE", x"AC65", x"ABCE", x"AB37", x"AAA0",
164     x"AA0B", x"A976", x"A8E3", x"A850", x"A7BE", x"A72D", x"A69C", x"A60D",
165     x"A57E", x"A4F1", x"A464", x"A3D8", x"A34D", x"A2C2", x"A239", x"A1B1",
166     x"A129", x"A0A3", x"A01D", x"9F98", x"9F15", x"9E92", x"9E10", x"9D8F",
167     x"9D0F", x"9C90", x"9C12", x"9B94", x"9B18", x"9A9D", x"9A23", x"99AA",
168     x"9931", x"98BA", x"9844", x"97CE", x"975A", x"96E7", x"9675", x"9603",
169     x"9593", x"9524", x"94B6", x"9449", x"93DD", x"9372", x"9308", x"929F",
170     x"9237", x"91D0", x"916A", x"9105", x"90A2", x"903F", x"8FDE", x"8F7D",
171     x"8F1E", x"8EC0", x"8E63", x"8E07", x"8DAC", x"8D52", x"8CF9", x"8CA2",
172     x"8C4B", x"8BF6", x"8BA1", x"8B4E", x"8AFC", x"8AAB", x"8A5B", x"8A0D",
173     x"89BF", x"8973", x"8928", x"88DE", x"8895", x"884D", x"8806", x"87C1",
174     x"877C", x"8739", x"86F7", x"86B6", x"8677", x"8638", x"85FB", x"85BF",
175     x"8584", x"854A", x"8512", x"84DA", x"84A4", x"846F", x"843B", x"8408",
176     x"83D7", x"83A7", x"8378", x"834A", x"831D", x"82F2", x"82C7", x"829E",
177     x"8277", x"8250", x"822B", x"8206", x"81E3", x"81C2", x"81A1", x"8182",
178     x"8164", x"8147", x"812B", x"8111", x"80F7", x"80DF", x"80C9", x"80B3",
179     x"809F", x"808C", x"807A", x"8069", x"805A", x"804C", x"803F", x"8033",
180     x"8028", x"801F", x"8017", x"8010", x"800B", x"8007", x"8003", x"8002",
181     x"8001", x"8002", x"8003", x"8007", x"800B", x"8010", x"8017", x"801F",
182     x"8028", x"8033", x"803F", x"804C", x"805A", x"8069", x"807A", x"808C",
183     x"809F", x"80B3", x"80C9", x"80DF", x"80F7", x"8111", x"812B", x"8147",
184     x"8164", x"8182", x"81A1", x"81C2", x"81E3", x"8206", x"822B", x"8250",
185     x"8277", x"829E", x"82C7", x"82F2", x"831D", x"834A", x"8378", x"83A7",
186     x"83D7", x"8408", x"843B", x"846F", x"84A4", x"84DA", x"8512", x"854A",
187     x"8584", x"85BF", x"85FB", x"8638", x"8677", x"86B6", x"86F7", x"8739",
188     x"877C", x"87C1", x"8806", x"884D", x"8895", x"88DE", x"8928", x"8973",
189     x"89BF", x"8A0D", x"8A5B", x"8AAB", x"8AFC", x"8B4E", x"8BA1", x"8BF6",
190     x"8C4B", x"8CA2", x"8CF9", x"8D52", x"8DAC", x"8E07", x"8E63", x"8EC0",
191     x"8F1E", x"8F7D", x"8FDE", x"903F", x"90A2", x"9105", x"916A", x"91D0",
192     x"9237", x"929F", x"9308", x"9372", x"93DD", x"9449", x"94B6", x"9524",
193     x"9593", x"9603", x"9675", x"96E7", x"975A", x"97CE", x"9844", x"98BA",
194     x"9931", x"99AA", x"9A23", x"9A9D", x"9B18", x"9B94", x"9C12", x"9C90",
195     x"9D0F", x"9D8F", x"9E10", x"9E92", x"9F15", x"9F98", x"A01D", x"A0A3",
196     x"A129", x"A1B1", x"A239", x"A2C2", x"A34D", x"A3D8", x"A464", x"A4F1",
197     x"A57E", x"A60D", x"A69C", x"A72D", x"A7BE", x"A850", x"A8E3", x"A976",
198     x"AA0B", x"AAA0", x"AB37", x"ABCE", x"AC65", x"ACFE", x"AD98", x"AE32",
199     x"AECD", x"AF69", x"B005", x"B0A3", x"B141", x"B1E0", x"B27F", x"B320",
200     x"B3C1", x"B463", x"B505", x"B5A8", x"B64C", x"B6F1", x"B797", x"B83D",
201     x"B8E4", x"B98B", x"BA33", x"BADC", x"BB86", x"BC30", x"BCDB", x"BD86",
202     x"BE32", x"BEDF", x"BF8D", x"C03B", x"C0E9", x"C198", x"C248", x"C2F9",
203     x"C3AA", x"C45B", x"C50E", x"C5C0", x"C674", x"C727", x"C7DC", x"C891",
204     x"C946", x"C9FC", x"CAB3", x"CB6A", x"CC21", x"CCDA", x"CD92", x"CE4B",
205     x"CF05", x"CFBF", x"D079", x"D134", x"D1EF", x"D2AB", x"D367", x"D424",
206     x"D4E1", x"D59F", x"D65D", x"D71B", x"D7DA", x"D899", x"D958", x"DA18",
207     x"DAD8", x"DB99", x"DC5A", x"DD1B", x"DDDD", x"DE9F", x"DF61", x"E023",
208     x"E0E6", x"E1A9", x"E26D", x"E331", x"E3F5", x"E4B9", x"E57E", x"E642",
209     x"E707", x"E7CD", x"E892", x"E958", x"EA1E", x"EAE4", x"EBAB", x"EC71",
210     x"ED38", x"EDFF", x"EEC6", x"EF8E", x"F055", x"F11D", x"F1E4", x"F2AC",
211     x"F374", x"F43C", x"F505", x"F5CD", x"F696", x"F75E", x"F827", x"F8EF",
212     x"F9B8", x"FA81", x"FB4A", x"FC13", x"FCDC", x"FDA5", x"FE6E", x"FF37"
213  );
214  
215  signal daddr: std_logic_vector(9 downto 0);
216  
217  begin
218     asine16: process (clk)
219     begin
220        if (clk'event and clk = '1') then
221           if (we = '1') then
222              RAM(conv_integer(addr)) <= din;
223           end if;
224           daddr <= addr;
225        end if; -- clk 
226     end process;
227  
228     dout <= RAM(conv_integer(daddr));
229  end;