Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------------------------------------
- -- Company:
- -- Engineer:
- --
- -- Create Date: 17:47:28 05/18/2015
- -- Design Name:
- -- Module Name: sine_table - Behavioral
- -- Project Name:
- -- Target Devices:
- -- Tool versions:
- -- Description:
- --
- -- Dependencies:
- --
- -- Revision:
- -- Revision 0.01 - File Created
- -- Additional Comments:
- --
- ----------------------------------------------------------------------------------
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.STD_LOGIC_ARITH.ALL;
- use IEEE.STD_LOGIC_UNSIGNED.ALL;
- entity sine_table is
- port (
- clk : in std_logic;
- reset_n : in std_logic;
- data_request : in std_logic;
- amplitude : in std_logic_vector (2 downto 0);
- addr : in std_logic_vector (12 downto 0);
- data_out : out std_logic_vector(11 downto 0)
- );
- end sine_table;
- architecture rtl of sine_table is
- signal delta : std_logic_vector (11 downto 0);
- signal sine_total : std_logic_vector (11 downto 0);
- --signal data_out : std_logic_vector (7 downto 0);
- type table is array (1499 downto 0) of std_logic_vector(11 downto 0);
- constant sine_tbl : table := (
- X"FFF", X"FFE", X"FFD", X"FFC", X"FFB", X"FFA", X"FF9", X"FF8", X"FF7", X"FF6", -- 1500
- X"FF5", X"FF4", X"FF3", X"FF1", X"FF0", X"FEF", X"FEE", X"FED", X"FEC", X"FEB", -- 1490
- X"FEA", X"FE9", X"FE8", X"FE7", X"FE6", X"FE5", X"FE4", X"FE3", X"FE1", X"FE0", -- 1480
- X"FDF", X"FDE", X"FDD", X"FDC", X"FDB", X"FDA", X"FD9", X"FD8", X"FD7", X"FD6", -- 1470
- X"FD5", X"FD4", X"FD3", X"FD2", X"FD1", X"FCF", X"FCE", X"FCD", X"FCC", X"FCB", -- 1460
- X"FCA", X"FC9", X"FC8", X"FC7", X"FC6", X"FC5", X"FC4", X"FC3", X"FC2", X"FC1", -- 1450
- X"FC0", X"FBF", X"FBE", X"FBD", X"FBC", X"FBB", X"FBA", X"FB9", X"FB8", X"FB7", -- 1440
- X"FB5", X"FB4", X"FB3", X"FB2", X"FB1", X"FB0", X"FAF", X"FAE", X"FAD", X"FAC", -- 1430
- X"FAB", X"FAA", X"FA9", X"FA8", X"FA7", X"FA6", X"FA5", X"FA4", X"FA3", X"FA2", -- 1420
- X"FA1", X"FA0", X"F9F", X"F9E", X"F9D", X"F9C", X"F9B", X"F9A", X"F99", X"F98", -- 1410
- X"F97", X"F96", X"F95", X"F94", X"F94", X"F93", X"F92", X"F91", X"F90", X"F8F", -- 1400
- X"F8E", X"F8D", X"F8C", X"F8B", X"F8A", X"F89", X"F88", X"F87", X"F86", X"F85", -- 1390
- X"F84", X"F83", X"F82", X"F81", X"F80", X"F80", X"F7F", X"F7E", X"F7D", X"F7C", -- 1380
- X"F7B", X"F7A", X"F79", X"F78", X"F77", X"F76", X"F76", X"F75", X"F74", X"F73", -- 1370
- X"F72", X"F71", X"F70", X"F6F", X"F6E", X"F6E", X"F6D", X"F6C", X"F6B", X"F6A", -- 1360
- X"F69", X"F68", X"F67", X"F67", X"F66", X"F65", X"F64", X"F63", X"F62", X"F61", -- 1350
- X"F61", X"F60", X"F5F", X"F5E", X"F5D", X"F5C", X"F5C", X"F5B", X"F5A", X"F59", -- 1340
- X"F58", X"F58", X"F57", X"F56", X"F55", X"F54", X"F54", X"F53", X"F52", X"F51", -- 1330
- X"F50", X"F50", X"F4F", X"F4E", X"F4D", X"F4D", X"F4C", X"F4B", X"F4A", X"F4A", -- 1320
- X"F49", X"F48", X"F47", X"F47", X"F46", X"F45", X"F44", X"F44", X"F43", X"F42", -- 1310
- X"F42", X"F41", X"F40", X"F3F", X"F3F", X"F3E", X"F3D", X"F3D", X"F3C", X"F3B", -- 1300
- X"F3B", X"F3A", X"F39", X"F39", X"F38", X"F37", X"F37", X"F36", X"F35", X"F35", -- 1290
- X"F34", X"F33", X"F33", X"F32", X"F31", X"F31", X"F30", X"F30", X"F2F", X"F2E", -- 1280
- X"F2E", X"F2D", X"F2C", X"F2C", X"F2B", X"F2B", X"F2A", X"F2A", X"F29", X"F28", -- 1270
- X"F28", X"F27", X"F27", X"F26", X"F26", X"F25", X"F24", X"F24", X"F23", X"F23", -- 1260
- X"F22", X"F22", X"F21", X"F21", X"F20", X"F20", X"F1F", X"F1F", X"F1E", X"F1E", -- 1250
- X"F1D", X"F1D", X"F1C", X"F1C", X"F1B", X"F1B", X"F1A", X"F1A", X"F19", X"F19", -- 1240
- X"F18", X"F18", X"F18", X"F17", X"F17", X"F16", X"F16", X"F15", X"F15", X"F15", -- 1230
- X"F14", X"F14", X"F13", X"F13", X"F12", X"F12", X"F12", X"F11", X"F11", X"F11", -- 1220
- X"F10", X"F10", X"F0F", X"F0F", X"F0F", X"F0E", X"F0E", X"F0E", X"F0D", X"F0D", -- 1210
- X"F0D", X"F0C", X"F0C", X"F0C", X"F0B", X"F0B", X"F0B", X"F0B", X"F0A", X"F0A", -- 1200
- X"F0A", X"F09", X"F09", X"F09", X"F09", X"F08", X"F08", X"F08", X"F08", X"F07", -- 1190
- X"F07", X"F07", X"F07", X"F06", X"F06", X"F06", X"F06", X"F05", X"F05", X"F05", -- 1180
- X"F05", X"F05", X"F04", X"F04", X"F04", X"F04", X"F04", X"F04", X"F03", X"F03", -- 1170
- X"F03", X"F03", X"F03", X"F03", X"F03", X"F02", X"F02", X"F02", X"F02", X"F02", -- 1160
- X"F02", X"F02", X"F02", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", -- 1150
- X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", -- 1140
- X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", -- 1130
- X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", -- 1120
- X"F01", X"F01", X"F01", X"F01", X"F01", X"F01", X"F02", X"F02", X"F02", X"F02", -- 1110
- X"F02", X"F02", X"F02", X"F02", X"F03", X"F03", X"F03", X"F03", X"F03", X"F03", -- 1100
- X"F03", X"F04", X"F04", X"F04", X"F04", X"F04", X"F04", X"F05", X"F05", X"F05", -- 1090
- X"F05", X"F05", X"F06", X"F06", X"F06", X"F06", X"F07", X"F07", X"F07", X"F07", -- 1080
- X"F08", X"F08", X"F08", X"F08", X"F09", X"F09", X"F09", X"F09", X"F0A", X"F0A", -- 1070
- X"F0A", X"F0B", X"F0B", X"F0B", X"F0B", X"F0C", X"F0C", X"F0C", X"F0D", X"F0D", -- 1060
- X"F0D", X"F0E", X"F0E", X"F0E", X"F0F", X"F0F", X"F0F", X"F10", X"F10", X"F11", -- 1050
- X"F11", X"F11", X"F12", X"F12", X"F12", X"F13", X"F13", X"F14", X"F14", X"F15", -- 1040
- X"F15", X"F15", X"F16", X"F16", X"F17", X"F17", X"F18", X"F18", X"F18", X"F19", -- 1030
- X"F19", X"F1A", X"F1A", X"F1B", X"F1B", X"F1C", X"F1C", X"F1D", X"F1D", X"F1E", -- 1020
- X"F1E", X"F1F", X"F1F", X"F20", X"F20", X"F21", X"F21", X"F22", X"F22", X"F23", -- 1010
- X"F23", X"F24", X"F24", X"F25", X"F26", X"F26", X"F27", X"F27", X"F28", X"F28", -- 1000
- X"F29", X"F2A", X"F2A", X"F2B", X"F2B", X"F2C", X"F2C", X"F2D", X"F2E", X"F2E", -- 990
- X"F2F", X"F30", X"F30", X"F31", X"F31", X"F32", X"F33", X"F33", X"F34", X"F35", -- 980
- X"F35", X"F36", X"F37", X"F37", X"F38", X"F39", X"F39", X"F3A", X"F3B", X"F3B", -- 970
- X"F3C", X"F3D", X"F3D", X"F3E", X"F3F", X"F3F", X"F40", X"F41", X"F42", X"F42", -- 960
- X"F43", X"F44", X"F44", X"F45", X"F46", X"F47", X"F47", X"F48", X"F49", X"F4A", -- 950
- X"F4A", X"F4B", X"F4C", X"F4D", X"F4D", X"F4E", X"F4F", X"F50", X"F50", X"F51", -- 940
- X"F52", X"F53", X"F54", X"F54", X"F55", X"F56", X"F57", X"F58", X"F58", X"F59", -- 930
- X"F5A", X"F5B", X"F5C", X"F5C", X"F5D", X"F5E", X"F5F", X"F60", X"F61", X"F61", -- 920
- X"F62", X"F63", X"F64", X"F65", X"F66", X"F67", X"F67", X"F68", X"F69", X"F6A", -- 910
- X"F6B", X"F6C", X"F6D", X"F6E", X"F6E", X"F6F", X"F70", X"F71", X"F72", X"F73", -- 900
- X"F74", X"F75", X"F76", X"F76", X"F77", X"F78", X"F79", X"F7A", X"F7B", X"F7C", -- 890
- X"F7D", X"F7E", X"F7F", X"F80", X"F81", X"F81", X"F82", X"F83", X"F84", X"F85", -- 880
- X"F86", X"F87", X"F88", X"F89", X"F8A", X"F8B", X"F8C", X"F8D", X"F8E", X"F8F", -- 870
- X"F90", X"F91", X"F92", X"F93", X"F94", X"F94", X"F95", X"F96", X"F97", X"F98", -- 860
- X"F99", X"F9A", X"F9B", X"F9C", X"F9D", X"F9E", X"F9F", X"FA0", X"FA1", X"FA2", -- 850
- X"FA3", X"FA4", X"FA5", X"FA6", X"FA7", X"FA8", X"FA9", X"FAA", X"FAB", X"FAC", -- 840
- X"FAD", X"FAE", X"FAF", X"FB0", X"FB1", X"FB2", X"FB3", X"FB4", X"FB5", X"FB7", -- 830
- X"FB8", X"FB9", X"FBA", X"FBB", X"FBC", X"FBD", X"FBE", X"FBF", X"FC0", X"FC1", -- 820
- X"FC2", X"FC3", X"FC4", X"FC5", X"FC6", X"FC7", X"FC8", X"FC9", X"FCA", X"FCB", -- 810
- X"FCC", X"FCD", X"FCE", X"FCF", X"FD1", X"FD2", X"FD3", X"FD4", X"FD5", X"FD6", -- 800
- X"FD7", X"FD8", X"FD9", X"FDA", X"FDB", X"FDC", X"FDD", X"FDE", X"FDF", X"FE0", -- 790
- X"FE1", X"FE3", X"FE4", X"FE5", X"FE6", X"FE7", X"FE8", X"FE9", X"FEA", X"FEB", -- 780
- X"FEC", X"FED", X"FEE", X"FEF", X"FF0", X"FF1", X"FF3", X"FF4", X"FF5", X"FF6", -- 770
- X"FF7", X"FF8", X"FF9", X"FFA", X"FFB", X"FFC", X"FFD", X"FFE", X"FFF", X"000", -- 760
- X"001", X"002", X"003", X"004", X"005", X"006", X"007", X"008", X"009", X"00A", -- 750
- X"00B", X"00C", X"00D", X"00F", X"010", X"011", X"012", X"013", X"014", X"015", -- 740
- X"016", X"017", X"018", X"019", X"01A", X"01B", X"01C", X"01D", X"01F", X"020", -- 730
- X"021", X"022", X"023", X"024", X"025", X"026", X"027", X"028", X"029", X"02A", -- 720
- X"02B", X"02C", X"02D", X"02E", X"02F", X"031", X"032", X"033", X"034", X"035", -- 710
- X"036", X"037", X"038", X"039", X"03A", X"03B", X"03C", X"03D", X"03E", X"03F", -- 700
- X"040", X"041", X"042", X"043", X"044", X"045", X"046", X"047", X"048", X"049", -- 690
- X"04B", X"04C", X"04D", X"04E", X"04F", X"050", X"051", X"052", X"053", X"054", -- 680
- X"055", X"056", X"057", X"058", X"059", X"05A", X"05B", X"05C", X"05D", X"05E", -- 670
- X"05F", X"060", X"061", X"062", X"063", X"064", X"065", X"066", X"067", X"068", -- 660
- X"069", X"06A", X"06B", X"06C", X"06C", X"06D", X"06E", X"06F", X"070", X"071", -- 650
- X"072", X"073", X"074", X"075", X"076", X"077", X"078", X"079", X"07A", X"07B", -- 640
- X"07C", X"07D", X"07E", X"07F", X"080", X"080", X"081", X"082", X"083", X"084", -- 630
- X"085", X"086", X"087", X"088", X"089", X"08A", X"08A", X"08B", X"08C", X"08D", -- 620
- X"08E", X"08F", X"090", X"091", X"092", X"092", X"093", X"094", X"095", X"096", -- 610
- X"097", X"098", X"099", X"099", X"09A", X"09B", X"09C", X"09D", X"09E", X"09F", -- 600
- X"09F", X"0A0", X"0A1", X"0A2", X"0A3", X"0A4", X"0A4", X"0A5", X"0A6", X"0A7", -- 590
- X"0A8", X"0A8", X"0A9", X"0AA", X"0AB", X"0AC", X"0AC", X"0AD", X"0AE", X"0AF", -- 580
- X"0B0", X"0B0", X"0B1", X"0B2", X"0B3", X"0B3", X"0B4", X"0B5", X"0B6", X"0B6", -- 570
- X"0B7", X"0B8", X"0B9", X"0B9", X"0BA", X"0BB", X"0BC", X"0BC", X"0BD", X"0BE", -- 560
- X"0BE", X"0BF", X"0C0", X"0C1", X"0C1", X"0C2", X"0C3", X"0C3", X"0C4", X"0C5", -- 550
- X"0C5", X"0C6", X"0C7", X"0C7", X"0C8", X"0C9", X"0C9", X"0CA", X"0CB", X"0CB", -- 540
- X"0CC", X"0CD", X"0CD", X"0CE", X"0CF", X"0CF", X"0D0", X"0D0", X"0D1", X"0D2", -- 530
- X"0D2", X"0D3", X"0D4", X"0D4", X"0D5", X"0D5", X"0D6", X"0D6", X"0D7", X"0D8", -- 520
- X"0D8", X"0D9", X"0D9", X"0DA", X"0DA", X"0DB", X"0DC", X"0DC", X"0DD", X"0DD", -- 510
- X"0DE", X"0DE", X"0DF", X"0DF", X"0E0", X"0E0", X"0E1", X"0E1", X"0E2", X"0E2", -- 500
- X"0E3", X"0E3", X"0E4", X"0E4", X"0E5", X"0E5", X"0E6", X"0E6", X"0E7", X"0E7", -- 490
- X"0E8", X"0E8", X"0E8", X"0E9", X"0E9", X"0EA", X"0EA", X"0EB", X"0EB", X"0EB", -- 480
- X"0EC", X"0EC", X"0ED", X"0ED", X"0EE", X"0EE", X"0EE", X"0EF", X"0EF", X"0EF", -- 470
- X"0F0", X"0F0", X"0F1", X"0F1", X"0F1", X"0F2", X"0F2", X"0F2", X"0F3", X"0F3", -- 460
- X"0F3", X"0F4", X"0F4", X"0F4", X"0F5", X"0F5", X"0F5", X"0F5", X"0F6", X"0F6", -- 450
- X"0F6", X"0F7", X"0F7", X"0F7", X"0F7", X"0F8", X"0F8", X"0F8", X"0F8", X"0F9", -- 440
- X"0F9", X"0F9", X"0F9", X"0FA", X"0FA", X"0FA", X"0FA", X"0FB", X"0FB", X"0FB", -- 430
- X"0FB", X"0FB", X"0FC", X"0FC", X"0FC", X"0FC", X"0FC", X"0FC", X"0FD", X"0FD", -- 420
- X"0FD", X"0FD", X"0FD", X"0FD", X"0FD", X"0FE", X"0FE", X"0FE", X"0FE", X"0FE", -- 410
- X"0FE", X"0FE", X"0FE", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", -- 400
- X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", -- 390
- X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", -- 380
- X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", -- 370
- X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FF", X"0FE", X"0FE", X"0FE", X"0FE", -- 360
- X"0FE", X"0FE", X"0FE", X"0FE", X"0FD", X"0FD", X"0FD", X"0FD", X"0FD", X"0FD", -- 350
- X"0FD", X"0FC", X"0FC", X"0FC", X"0FC", X"0FC", X"0FC", X"0FB", X"0FB", X"0FB", -- 340
- X"0FB", X"0FB", X"0FA", X"0FA", X"0FA", X"0FA", X"0F9", X"0F9", X"0F9", X"0F9", -- 330
- X"0F8", X"0F8", X"0F8", X"0F8", X"0F7", X"0F7", X"0F7", X"0F7", X"0F6", X"0F6", -- 320
- X"0F6", X"0F5", X"0F5", X"0F5", X"0F5", X"0F4", X"0F4", X"0F4", X"0F3", X"0F3", -- 310
- X"0F3", X"0F2", X"0F2", X"0F2", X"0F1", X"0F1", X"0F1", X"0F0", X"0F0", X"0EF", -- 300
- X"0EF", X"0EF", X"0EE", X"0EE", X"0EE", X"0ED", X"0ED", X"0EC", X"0EC", X"0EB", -- 290
- X"0EB", X"0EB", X"0EA", X"0EA", X"0E9", X"0E9", X"0E8", X"0E8", X"0E8", X"0E7", -- 280
- X"0E7", X"0E6", X"0E6", X"0E5", X"0E5", X"0E4", X"0E4", X"0E3", X"0E3", X"0E2", -- 270
- X"0E2", X"0E1", X"0E1", X"0E0", X"0E0", X"0DF", X"0DF", X"0DE", X"0DE", X"0DD", -- 260
- X"0DD", X"0DC", X"0DC", X"0DB", X"0DA", X"0DA", X"0D9", X"0D9", X"0D8", X"0D8", -- 250
- X"0D7", X"0D6", X"0D6", X"0D5", X"0D5", X"0D4", X"0D4", X"0D3", X"0D2", X"0D2", -- 240
- X"0D1", X"0D0", X"0D0", X"0CF", X"0CF", X"0CE", X"0CD", X"0CD", X"0CC", X"0CB", -- 230
- X"0CB", X"0CA", X"0C9", X"0C9", X"0C8", X"0C7", X"0C7", X"0C6", X"0C5", X"0C5", -- 220
- X"0C4", X"0C3", X"0C3", X"0C2", X"0C1", X"0C1", X"0C0", X"0BF", X"0BE", X"0BE", -- 210
- X"0BD", X"0BC", X"0BC", X"0BB", X"0BA", X"0B9", X"0B9", X"0B8", X"0B7", X"0B6", -- 200
- X"0B6", X"0B5", X"0B4", X"0B3", X"0B3", X"0B2", X"0B1", X"0B0", X"0B0", X"0AF", -- 190
- X"0AE", X"0AD", X"0AC", X"0AC", X"0AB", X"0AA", X"0A9", X"0A8", X"0A8", X"0A7", -- 180
- X"0A6", X"0A5", X"0A4", X"0A4", X"0A3", X"0A2", X"0A1", X"0A0", X"09F", X"09F", -- 170
- X"09E", X"09D", X"09C", X"09B", X"09A", X"099", X"099", X"098", X"097", X"096", -- 160
- X"095", X"094", X"093", X"092", X"092", X"091", X"090", X"08F", X"08E", X"08D", -- 150
- X"08C", X"08B", X"08A", X"08A", X"089", X"088", X"087", X"086", X"085", X"084", -- 140
- X"083", X"082", X"081", X"080", X"07F", X"07F", X"07E", X"07D", X"07C", X"07B", -- 130
- X"07A", X"079", X"078", X"077", X"076", X"075", X"074", X"073", X"072", X"071", -- 120
- X"070", X"06F", X"06E", X"06D", X"06C", X"06C", X"06B", X"06A", X"069", X"068", -- 110
- X"067", X"066", X"065", X"064", X"063", X"062", X"061", X"060", X"05F", X"05E", -- 100
- X"05D", X"05C", X"05B", X"05A", X"059", X"058", X"057", X"056", X"055", X"054", -- 90
- X"053", X"052", X"051", X"050", X"04F", X"04E", X"04D", X"04C", X"04B", X"049", -- 80
- X"048", X"047", X"046", X"045", X"044", X"043", X"042", X"041", X"040", X"03F", -- 70
- X"03E", X"03D", X"03C", X"03B", X"03A", X"039", X"038", X"037", X"036", X"035", -- 60
- X"034", X"033", X"032", X"031", X"02F", X"02E", X"02D", X"02C", X"02B", X"02A", -- 50
- X"029", X"028", X"027", X"026", X"025", X"024", X"023", X"022", X"021", X"020", -- 40
- X"01F", X"01D", X"01C", X"01B", X"01A", X"019", X"018", X"017", X"016", X"015", -- 30
- X"014", X"013", X"012", X"011", X"010", X"00F", X"00D", X"00C", X"00B", X"00A", -- 20
- X"009", X"008", X"007", X"006", X"005", X"004", X"003", X"002", X"001", X"000" -- 10
- );
- begin
- -- data <= data_out;
- process(clk, reset_n)
- begin
- if(reset_n = '0') then
- delta <= (others => '0');
- sine_total <= (others => '0');
- data_out <= (others => '0');
- elsif(clk 'event and clk = '1') then
- if(data_request = '1') then
- if(addr < "0010111011011") then
- sine_total <= sine_tbl(conv_integer(addr));
- case amplitude is
- when "000" =>
- if(sine_total(11) = '0') then
- data_out <= "0000" & sine_total(11 downto 4);
- else
- data_out <= "1111" & sine_total(11 downto 4);
- end if;
- when "001" =>
- if(sine_total(11) = '0') then
- data_out <= "000" & sine_total(11 downto 3);
- else
- data_out <= "111" & sine_total(11 downto 3);
- end if;
- when "010" =>
- if(sine_total(11) = '0') then
- data_out <= "00" & sine_total(11 downto 2);
- else
- data_out <= "11" & sine_total(11 downto 2);
- end if;
- when "011" =>
- if(sine_total(11) = '0') then
- data_out <= '0' & sine_total(11 downto 1);
- else
- data_out <= '1' & sine_total(11 downto 1);
- end if;
- when "100" =>
- data_out <= sine_total;
- when others =>
- data_out <= (others => 'X');
- end case;
- else
- data_out <= (others => 'X');
- end if;
- end if;
- end if;
- end process;
- end rtl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement