Hi all,

I use usrp X310 with the rfnocnodtool to create new block.
My code include parameter of 24 bits that called phase_step. In the block I
get the parameter as input and write it into register and then i use it in
the code.
My setup in the gnu radio is very simple as follow:

Transmitter (My new RFnoc block) --> throttle -> Sink

I assume that the error is the definition of the parameter of one of my xml
file.
i attach here the 2 xml full file, but i will copy the mail only the
relevant part from the xml file.

the grc xml file is:

















*self.$(id).set_arg("phase_step", $phase_step)  </make>
<callback>set_arg("phase_step", $phase_step)</callback>  <!-- Make one
'param' node for every Parameter you want settable from the GUI.
Sub-nodes:       * name       * key (makes the value accessible as
$keyname, e.g. in the make node)       * type -->  <param>    <name>Phase
step</name>    <key>phase_step</key>    <value>0</value>
<type>int</type>  </param>*

The fpga src block xml is:





































*<?xml version="1.0"?><!--Default XML file--><nocblock>
<name>TXsource</name>  <blockname>TXsource</blockname>  <ids>    <id
revision="0">A8B6127175994722</id>  </ids>  <!-- Registers -->
<registers>    <setreg>      <name>PHASE_STEP</name>
<address>128</address>    </setreg>  </registers>  <!-- Args -->  <args>
<arg>      <name>phase_step</name>      <type>int</type>
<value>0</value>      <action>SR_WRITE("PHASE_STEP",
$phase_step)</action>    </arg>  </args>  <!--One input, one output. If
this is used, better have all the info the C++ file.-->  <ports>
<sink>      <name>dump</name>    </sink>     <source>
<name>src</name>      <type>sc16</type>    </source>  </ports></nocblock>*

When i run the test bench all is work fine, but after i burn the .bit file
and i run thethe gnu radio with my block i get the following error:














*[ERROR] [UHD] Exception caught in safe-call.  in virtual
ctrl_iface_impl::~ctrl_iface_impl()  at
/home/user/rfnoc/src/uhd/host/lib/rfnoc/ctrl_iface.cpp:76this->peek32(0);
-> EnvironmentError: IOError: Block ctrl (CE_00_Port_30) packet parse error
- EnvironmentError: IOError: Expected SID: 02:30>00:00  Received SID:
02:60>00:00Traceback (most recent call last):  File
"/home/user/rfnoc/Radar_proj/Design/top_block.py", line 238, in <module>
main()  File "/home/user/rfnoc/Radar_proj/Design/top_block.py", line 226,
in main    tb = top_block_cls()  File
"/home/user/rfnoc/Radar_proj/Design/top_block.py", line 65, in __init__
self.device3 = variable_uhd_device3_0 = ettus.device3(uhd.device_addr_t(
",".join(('type=x300', "")) ))  File
"/home/user/rfnoc/lib/python2.7/dist-packages/ettus/ettus_swig.py", line
1299, in make    return _ettus_swig.device3_make(*args,
**kwargs)RuntimeError: EnvironmentError: IOError: Block ctrl
(CE_00_Port_30) packet parse error - EnvironmentError: IOError: Expected
SID: 02:30>00:00  Received SID: 02:60>00:00*


To me it's look that i don't define correct the xml file I try to change
the type of the phase step to real but I get all the time the same error ,
can someone please help me with that.

Thank in advance
Ishai

-- 
ישי אלוש
054-5823400
//
/* 
 * Copyright 2018 <+YOU OR YOUR COMPANY+>.
 * 
 * This is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3, or (at your option)
 * any later version.
 * 
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this software; see the file COPYING.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street,
 * Boston, MA 02110-1301, USA.
 */

//
module noc_block_TXsource #(
  parameter NOC_ID = 64'hA8B6127175994722,
  parameter STR_SINK_FIFOSIZE = 11)
(
  input bus_clk, input bus_rst,
  input ce_clk, input ce_rst,
  input  [63:0] i_tdata, input  i_tlast, input  i_tvalid, output i_tready,
  output [63:0] o_tdata, output o_tlast, output o_tvalid, input  o_tready,
  output [63:0] debug
);

  ////////////////////////////////////////////////////////////
  //
  // RFNoC Shell
  //
  ////////////////////////////////////////////////////////////
  wire [31:0] set_data;
  wire [7:0]  set_addr;
  wire        set_stb;
  reg  [63:0] rb_data;
  wire [7:0]  rb_addr;

  wire [63:0] cmdout_tdata, ackin_tdata;
  wire        cmdout_tlast, cmdout_tvalid, cmdout_tready, ackin_tlast, ackin_tvalid, ackin_tready;

  wire [63:0] str_sink_tdata, str_src_tdata;
  wire        str_sink_tlast, str_sink_tvalid, str_sink_tready, str_src_tlast, str_src_tvalid, str_src_tready;

  wire [15:0] src_sid;
  wire [15:0] next_dst_sid, resp_out_dst_sid;
  wire [15:0] resp_in_dst_sid;

  wire        clear_tx_seqnum;

  noc_shell #(
    .NOC_ID(NOC_ID),
    .STR_SINK_FIFOSIZE(STR_SINK_FIFOSIZE))
  noc_shell (
    .bus_clk(bus_clk), .bus_rst(bus_rst),
    .i_tdata(i_tdata), .i_tlast(i_tlast), .i_tvalid(i_tvalid), .i_tready(i_tready),
    .o_tdata(o_tdata), .o_tlast(o_tlast), .o_tvalid(o_tvalid), .o_tready(o_tready),
    // Computer Engine Clock Domain
    .clk(ce_clk), .reset(ce_rst),
    // Control Sink
    .set_data(set_data), .set_addr(set_addr), .set_stb(set_stb),
    .rb_stb(1'b1), .rb_data(rb_data), .rb_addr(rb_addr),
    // Control Source
    .cmdout_tdata(cmdout_tdata), .cmdout_tlast(cmdout_tlast), .cmdout_tvalid(cmdout_tvalid), .cmdout_tready(cmdout_tready),
    .ackin_tdata(ackin_tdata), .ackin_tlast(ackin_tlast), .ackin_tvalid(ackin_tvalid), .ackin_tready(ackin_tready),
    // Stream Sink
    .str_sink_tdata(str_sink_tdata), .str_sink_tlast(str_sink_tlast), .str_sink_tvalid(str_sink_tvalid), .str_sink_tready(str_sink_tready),
    // Stream Source
    .str_src_tdata(str_src_tdata), .str_src_tlast(str_src_tlast), .str_src_tvalid(str_src_tvalid), .str_src_tready(str_src_tready),
    // Stream IDs set by host
    .src_sid(src_sid),                   // SID of this block
    .next_dst_sid(next_dst_sid),         // Next destination SID
    .resp_in_dst_sid(resp_in_dst_sid),   // Response destination SID for input stream responses / errors
    .resp_out_dst_sid(resp_out_dst_sid), // Response destination SID for output stream responses / errors
    // Misc
    .vita_time('d0), .clear_tx_seqnum(clear_tx_seqnum),
    .debug(debug));

  // Null sink
  assign str_sink_tready = 1'b1;

  // Control Source Unused
  assign cmdout_tdata  = 64'd0;
  assign cmdout_tlast  = 1'b0;
  assign cmdout_tvalid = 1'b0;
  assign ackin_tready  = 1'b1;

  ////////////////////////////////////////////////////////////
  //
  // AXI Wrapper
  // Convert RFNoC Shell interface into AXI stream interface
  //
  ////////////////////////////////////////////////////////////
/*  wire [31:0] m_axis_data_tdata;
  wire        m_axis_data_tlast;
  wire        m_axis_data_tvalid;
  wire        m_axis_data_tready; */


  wire [31:0] s_axis_data_tdata;
  wire [127:0] s_axis_data_tuser;
  wire        s_axis_data_tlast;
  wire        s_axis_data_tvalid;
  wire        s_axis_data_tready;

  wire         s_axis_data_tvalid_int;
  wire         s_axis_data_tready_int;

  wire         enable;
  wire [15:0]  payload_length;

  axi_wrapper #(
    .SIMPLE_MODE(0),
    .RESIZE_OUTPUT_PACKET(1))
  axi_wrapper (
    .clk(ce_clk), .reset(ce_rst),
    .clear_tx_seqnum(clear_tx_seqnum),
    .next_dst(next_dst_sid),
    .set_stb(set_stb), .set_addr(set_addr), .set_data(set_data),
    .i_tdata(), .i_tlast(), .i_tvalid(), .i_tready(),
    .o_tdata(str_src_tdata), .o_tlast(str_src_tlast), .o_tvalid(str_src_tvalid), .o_tready(str_src_tready),
    .m_axis_data_tdata(),
    .m_axis_data_tlast(),
    .m_axis_data_tvalid(),
    .m_axis_data_tready(1'b1),
    .m_axis_data_tuser(),
    .s_axis_data_tdata(s_axis_data_tdata),
    .s_axis_data_tlast(/* Not needed due to RESIZE_OUTPUT_PACKET = 1 */),
    .s_axis_data_tvalid(s_axis_data_tvalid),
    .s_axis_data_tready(s_axis_data_tready),
    .s_axis_data_tuser(s_axis_data_tuser),
    .m_axis_config_tdata(),
    .m_axis_config_tlast(),
    .m_axis_config_tvalid(),
    .m_axis_config_tready(),
    .m_axis_pkt_len_tdata(),
    .m_axis_pkt_len_tvalid(),
    .m_axis_pkt_len_tready());

  ////////////////////////////////////////////////////////////
  //
  // User code
  //
  ////////////////////////////////////////////////////////////
  // NoC Shell registers 0 - 127,
  // User register address space starts at 128
//  localparam SR_USER_REG_BASE = 128;  change to comment use basic test bench only

  // rgister parameter
  // paramter for accumalator size
  parameter acclen = 24;   // input len
  parameter accScale = 10; // the MSB bits

  wire [2:0] pri_mode; 
  wire [acclen-1:0] phase_step;
  assign phase_step = 24'd3355544;

  localparam SR_ENABLE      = 132;
  localparam SR_PKT_SIZE    = 140;
  localparam SR_PHASE_STEP 	= 128;
  localparam SR_PRI_MODE	= 130; 
	
  cvita_hdr_encoder cvita_hdr_encoder (
    .pkt_type(2'd0), .eob(1'b0), .has_time(1'b0),
    .seqnum(12'd0), .payload_length(payload_length), .dst_sid(next_dst_sid), .src_sid(src_sid),
    .vita_time(64'd0),
    .header(s_axis_data_tuser));

  // Set packet size
  setting_reg #(
    .my_addr(SR_PKT_SIZE), .awidth(8), .width(16),
    .at_reset(4)) // Set a safe default packet size in case packet size is never set
  set_payload_length (
    .clk(ce_clk), .rst(ce_rst),
    .strobe(set_stb), .addr(set_addr), .in(set_data),
    .out(payload_length), .changed());

  //Start/stop functionality
  //settings bus for start/stop
  setting_reg #(
    .my_addr(SR_ENABLE), .awidth(8), .width(1), .at_reset(0))
  set_enable (
    .clk(ce_clk), .rst(ce_rst),
    .strobe(set_stb), .addr(set_addr), .in(set_data),
    .out(enable), .changed()); 

  // Set phase step
/*  setting_reg #(
    .my_addr(SR_PHASE_STEP), .awidth(8), .width(acclen))
  set_phase_step (
    .clk(ce_clk), .rst(ce_rst),
    .strobe(set_stb), .addr(set_addr), .in(set_data),
    .out(phase_step), .changed()); */

  // Set PRI mode
  setting_reg #(
    .my_addr(SR_PRI_MODE), .awidth(8), .width(3))
  set_pri_mode (
    .clk(ce_clk), .rst(ce_rst),
    .strobe(set_stb), .addr(set_addr), .in(set_data),
    .out(pri_mode), .changed()); 


  // Enable logic
  assign s_axis_data_tvalid     = s_axis_data_tvalid_int & enable;
  assign s_axis_data_tready_int = s_axis_data_tready     & enable;

  // Settings registers
  //
  // - The settings register bus is a simple strobed interface.
  // - Transactions include both a write and a readback.
  // - The write occurs when set_stb is asserted.
  //   The settings register with the address matching set_addr will
  //   be loaded with the data on set_data.
  // - Readback occurs when rb_stb is asserted. The read back strobe
  //   must assert at least one clock cycle after set_stb asserts /
  //   rb_stb is ignored if asserted on the same clock cycle of set_stb.
  //   Example valid and invalid timing:
  //              __    __    __    __
  //   clk     __|  |__|  |__|  |__|  |__
  //               _____
  //   set_stb ___|     |________________
  //                     _____
  //   rb_stb  _________|     |__________     (Valid)
  //                           _____
  //   rb_stb  _______________|     |____     (Valid)
  //           __________________________
  //   rb_stb                                 (Valid if readback data is a constant)
  //               _____
  //   rb_stb  ___|     |________________     (Invalid / ignored, same cycle as set_stb)
  //

// This part is only for test bench to check register.
// In this script we write and read from another register.

/*  localparam [7:0] SR_TEST_REG_0 = SR_USER_REG_BASE;
  localparam [7:0] SR_TEST_REG_1 = SR_USER_REG_BASE + 8'd1;

  wire [31:0] test_reg_0;
  setting_reg #(
    .my_addr(SR_TEST_REG_0), .awidth(8), .width(32))
  sr_test_reg_0 (
    .clk(ce_clk), .rst(ce_rst),
    .strobe(set_stb), .addr(set_addr), .in(set_data), .out(test_reg_0), .changed());

  wire [31:0] test_reg_1;
  setting_reg #(
    .my_addr(SR_TEST_REG_1), .awidth(8), .width(32))
  sr_test_reg_1 (
    .clk(ce_clk), .rst(ce_rst),
    .strobe(set_stb), .addr(set_addr), .in(set_data), .out(test_reg_1), .changed());

  // Readback registers
  // rb_stb set to 1'b1 on NoC Shell
  always @(posedge ce_clk) begin
    case(rb_addr)
      8'd0 : rb_data <= {32'd0, test_reg_0};
      8'd1 : rb_data <= {32'd0, test_reg_1};
      default : rb_data <= 64'h0BADC0DE0BADC0DE;
    endcase
  end */


  //////////////////////////////////////////////////// M Y    C O D E ////////////////////////////////////////////////////////

  // sin signals
  parameter TableDep = 1024;

  reg  [31:0]         Sin_table [0:TableDep-1]; 
  reg  [31:0]         Sin_output;
  reg  [accScale-1:0] Sin_pointer; // pointer to the position in Sin_table only the size of the sin table.
  reg  [acclen-1:0]   Sin_skip;    // results of the index of the sin table before sliced
  reg				  carry;       // one bit for carry

  // state machine parameter
  parameter SM_size = 3;
  parameter IDLE = 3'b000, BETCH_0 = 3'b001, BETCH_1 = 3'b010, BETCH_2 = 3'b011, BETCH_3 = 3'b100, CW_STATE = 3'b101;
  parameter betch_len_0 = 8'd2, betch_len_1 = 8'd2, betch_len_2 = 8'd2, betch_len_3 = 8'd2 , betch_len_CW = 8'd2;
  parameter phase_step_0 = 24'd335544, phase_step_1 = 24'd671088, phase_step_2 = 24'd1342176, phase_step_3 = 24'd2684352 , phase_step_CW = 24'd167772; 
  // phase_step_0 = 4M, phase_step_1 = 8M, phase_step_2 = 16M, phase_step_3 = 32M,  CW = 2M
  parameter PRI_mode_BETCH0 = 3'b000, PRI_mode_BETCH1 = 3'b001, PRI_mode_BETCH2 = 3'b010, PRI_mode_BETCH3 = 3'b011, PRI_mode_SM = 3'b100, PRI_mode_CW = 3'b101;
  
  reg [SM_size-1:0] state; 
  reg [7:0] betch_counter;
  reg start_betch;
  reg output_interrupt;
  reg output_enable;
  reg [acclen-1:0] phase_step_reg;
  reg PRI_mode_iterrupt;
  reg SM_seq_en;

  // Fifo signals
  wire [31:0] pipe_in_tdata;
  wire pipe_in_tvalid, pipe_in_tlast;
  wire pipe_in_tready; 

  wire pipe_out_tlast;

// parameters for PW and PRI value
  parameter PW_len_0  = 16'd50 , PW_len_1  = 16'd50, PW_len_2  = 16'd100, PW_len_3 = 16'd200, PW_len_CW = 16'd50;
  parameter PRI_len_0 = 16'd100, PRI_len_1 = 16'd200, PRI_len_2 = 16'd200, PRI_len_3 = 16'd300, PRI_len_CW = 16'd50; 
// PW and PRI signals
  reg  CW_flag;
  reg  [15:0] PW_len;   
  reg  [15:0] PRI_len; 
  reg  [15:0] PRI_counter; 
  reg  start_PW;  // output
  reg  end_PW;    // output
  reg  data_valid; 
  reg  PW_output;
  reg  end_PRI;  // internal signal to the state machine to count number of betch
  reg  [2:0] PRI_mode_reg;
  reg  [2:0] PRI_mode_reg_D;

  // initialization
  initial begin 	
	// PRI signals
    CW_flag     = 0;
    PRI_counter = 0;
	PW_len      = 0;
	PRI_len     = 0;  
	start_PW	= 0;
	end_PW		= 0;
    PW_output   = 0;
    data_valid  = 0;
	end_PRI		= 0;
    // state machine signals
	state		      = IDLE;
	betch_counter     = 0;
	start_betch	      = 0;
	output_interrupt  = 0;
	output_enable     = 0;
    PRI_mode_iterrupt = 0;
	PRI_mode_reg	  = 0;
	PRI_mode_reg_D	  = 0;
	SM_seq_en 		  = 0;
	phase_step_reg	  = 0;
//	phase_step_reg    = 0; 
	// sin signals
	carry       = 0;
	Sin_pointer = 0;
	Sin_skip    = 0;
	Sin_output  = 0;
    Sin_table[0] = {16'd0,16'd2047};   Sin_table[1] = {16'd13,16'd2047};   Sin_table[2] = {16'd25,16'd2047};   Sin_table[3] = {16'd38,16'd2047};   Sin_table[4] = {16'd50,16'd2047};   Sin_table[5] = {16'd63,16'd2047};   Sin_table[6] = {16'd75,16'd2047};   Sin_table[7] = {16'd88,16'd2046};   Sin_table[8] = {16'd100,16'd2046};   Sin_table[9] = {16'd113,16'd2045};   Sin_table[10] = {16'd126,16'd2044};   Sin_table[11] = {16'd138,16'd2043};   Sin_table[12] = {16'd151,16'd2042};   Sin_table[13] = {16'd163,16'd2041};   Sin_table[14] = {16'd176,16'd2040};   Sin_table[15] = {16'd188,16'd2039};   Sin_table[16] = {16'd201,16'd2038};   Sin_table[17] = {16'd213,16'd2037};   Sin_table[18] = {16'd226,16'd2036};   Sin_table[19] = {16'd238,16'd2034};   Sin_table[20] = {16'd251,16'd2033};   Sin_table[21] = {16'd263,16'd2031};   Sin_table[22] = {16'd276,16'd2029};   Sin_table[23] = {16'd288,16'd2028};   Sin_table[24] = {16'd301,16'd2026};   Sin_table[25] = {16'd313,16'd2024};   Sin_table[26] = {16'd325,16'd2022};   Sin_table[27] = {16'd338,16'd2020};   Sin_table[28] = {16'd350,16'd2018};   Sin_table[29] = {16'd363,16'd2016};   Sin_table[30] = {16'd375,16'd2013};   Sin_table[31] = {16'd387,16'd2011};   Sin_table[32] = {16'd400,16'd2009};   Sin_table[33] = {16'd412,16'd2006};   Sin_table[34] = {16'd424,16'd2004};   Sin_table[35] = {16'd436,16'd2001};   Sin_table[36] = {16'd449,16'd1998};   Sin_table[37] = {16'd461,16'd1995};   Sin_table[38] = {16'd473,16'd1993};   Sin_table[39] = {16'd485,16'd1990};   Sin_table[40] = {16'd498,16'd1987};   Sin_table[41] = {16'd510,16'd1984};   Sin_table[42] = {16'd522,16'd1980};   Sin_table[43] = {16'd534,16'd1977};   Sin_table[44] = {16'd546,16'd1974};   Sin_table[45] = {16'd558,16'd1970};   Sin_table[46] = {16'd570,16'd1967};   Sin_table[47] = {16'd582,16'd1963};   Sin_table[48] = {16'd595,16'd1960};   Sin_table[49] = {16'd607,16'd1956};   Sin_table[50] = {16'd619,16'd1952};   Sin_table[51] = {16'd630,16'd1949};   Sin_table[52] = {16'd642,16'd1945};   Sin_table[53] = {16'd654,16'd1941};   Sin_table[54] = {16'd666,16'd1937};   Sin_table[55] = {16'd678,16'd1932};   Sin_table[56] = {16'd690,16'd1928};   Sin_table[57] = {16'd702,16'd1924};   Sin_table[58] = {16'd714,16'd1920};   Sin_table[59] = {16'd725,16'd1915};   Sin_table[60] = {16'd737,16'd1911};   Sin_table[61] = {16'd749,16'd1906};   Sin_table[62] = {16'd760,16'd1902};   Sin_table[63] = {16'd772,16'd1897};   Sin_table[64] = {16'd784,16'd1892};   Sin_table[65] = {16'd795,16'd1887};   Sin_table[66] = {16'd807,16'd1882};   Sin_table[67] = {16'd818,16'd1877};   Sin_table[68] = {16'd830,16'd1872};   Sin_table[69] = {16'd841,16'd1867};   Sin_table[70] = {16'd853,16'd1862};   Sin_table[71] = {16'd864,16'd1857};   Sin_table[72] = {16'd876,16'd1851};   Sin_table[73] = {16'd887,16'd1846};   Sin_table[74] = {16'd898,16'd1840};   Sin_table[75] = {16'd910,16'd1835};   Sin_table[76] = {16'd921,16'd1829};   Sin_table[77] = {16'd932,16'd1824};   Sin_table[78] = {16'd943,16'd1818};   Sin_table[79] = {16'd954,16'd1812};   Sin_table[80] = {16'd965,16'd1806};   Sin_table[81] = {16'd976,16'd1800};   Sin_table[82] = {16'd988,16'd1794};   Sin_table[83] = {16'd999,16'd1788};   Sin_table[84] = {16'd1009,16'd1782};   Sin_table[85] = {16'd1020,16'd1776};   Sin_table[86] = {16'd1031,16'd1769};   Sin_table[87] = {16'd1042,16'd1763};   Sin_table[88] = {16'd1053,16'd1757};   Sin_table[89] = {16'd1064,16'd1750};   Sin_table[90] = {16'd1074,16'd1744};   Sin_table[91] = {16'd1085,16'd1737};   Sin_table[92] = {16'd1096,16'd1730};   Sin_table[93] = {16'd1106,16'd1724};   Sin_table[94] = {16'd1117,16'd1717};   Sin_table[95] = {16'd1127,16'd1710};   Sin_table[96] = {16'd1138,16'd1703};   Sin_table[97] = {16'd1148,16'd1696};   Sin_table[98] = {16'd1159,16'd1689};   Sin_table[99] = {16'd1169,16'd1682};   Sin_table[100] = {16'd1179,16'd1674};   Sin_table[101] = {16'd1190,16'd1667};   Sin_table[102] = {16'd1200,16'd1660};   Sin_table[103] = {16'd1210,16'd1652};   Sin_table[104] = {16'd1220,16'd1645};   Sin_table[105] = {16'd1230,16'd1637};   Sin_table[106] = {16'd1240,16'd1630};   Sin_table[107] = {16'd1250,16'd1622};   Sin_table[108] = {16'd1260,16'd1615};   Sin_table[109] = {16'd1270,16'd1607};   Sin_table[110] = {16'd1280,16'd1599};   Sin_table[111] = {16'd1289,16'd1591};   Sin_table[112] = {16'd1299,16'd1583};   Sin_table[113] = {16'd1309,16'd1575};   Sin_table[114] = {16'd1319,16'd1567};   Sin_table[115] = {16'd1328,16'd1559};   Sin_table[116] = {16'd1338,16'd1551};   Sin_table[117] = {16'd1347,16'd1543};   Sin_table[118] = {16'd1357,16'd1534};   Sin_table[119] = {16'd1366,16'd1526};   Sin_table[120] = {16'd1375,16'd1517};   Sin_table[121] = {16'd1385,16'd1509};   Sin_table[122] = {16'd1394,16'd1500};   Sin_table[123] = {16'd1403,16'd1492};   Sin_table[124] = {16'd1412,16'd1483};   Sin_table[125] = {16'd1421,16'd1475};   Sin_table[126] = {16'd1430,16'd1466};   Sin_table[127] = {16'd1439,16'd1457};   Sin_table[128] = {16'd1448,16'd1448};   Sin_table[129] = {16'd1457,16'd1439};   Sin_table[130] = {16'd1466,16'd1430};   Sin_table[131] = {16'd1475,16'd1421};   Sin_table[132] = {16'd1483,16'd1412};   Sin_table[133] = {16'd1492,16'd1403};   Sin_table[134] = {16'd1500,16'd1394};   Sin_table[135] = {16'd1509,16'd1385};   Sin_table[136] = {16'd1517,16'd1375};   Sin_table[137] = {16'd1526,16'd1366};   Sin_table[138] = {16'd1534,16'd1357};   Sin_table[139] = {16'd1543,16'd1347};   Sin_table[140] = {16'd1551,16'd1338};   Sin_table[141] = {16'd1559,16'd1328};   Sin_table[142] = {16'd1567,16'd1319};   Sin_table[143] = {16'd1575,16'd1309};   Sin_table[144] = {16'd1583,16'd1299};   Sin_table[145] = {16'd1591,16'd1289};   Sin_table[146] = {16'd1599,16'd1280};   Sin_table[147] = {16'd1607,16'd1270};   Sin_table[148] = {16'd1615,16'd1260};   Sin_table[149] = {16'd1622,16'd1250};   Sin_table[150] = {16'd1630,16'd1240};   Sin_table[151] = {16'd1637,16'd1230};   Sin_table[152] = {16'd1645,16'd1220};   Sin_table[153] = {16'd1652,16'd1210};   Sin_table[154] = {16'd1660,16'd1200};   Sin_table[155] = {16'd1667,16'd1190};   Sin_table[156] = {16'd1674,16'd1179};   Sin_table[157] = {16'd1682,16'd1169};   Sin_table[158] = {16'd1689,16'd1159};   Sin_table[159] = {16'd1696,16'd1148};   Sin_table[160] = {16'd1703,16'd1138};   Sin_table[161] = {16'd1710,16'd1127};   Sin_table[162] = {16'd1717,16'd1117};   Sin_table[163] = {16'd1724,16'd1106};   Sin_table[164] = {16'd1730,16'd1096};   Sin_table[165] = {16'd1737,16'd1085};   Sin_table[166] = {16'd1744,16'd1074};   Sin_table[167] = {16'd1750,16'd1064};   Sin_table[168] = {16'd1757,16'd1053};   Sin_table[169] = {16'd1763,16'd1042};   Sin_table[170] = {16'd1769,16'd1031};   Sin_table[171] = {16'd1776,16'd1020};   Sin_table[172] = {16'd1782,16'd1009};   Sin_table[173] = {16'd1788,16'd999};   Sin_table[174] = {16'd1794,16'd988};   Sin_table[175] = {16'd1800,16'd976};   Sin_table[176] = {16'd1806,16'd965};   Sin_table[177] = {16'd1812,16'd954};   Sin_table[178] = {16'd1818,16'd943};   Sin_table[179] = {16'd1824,16'd932};   Sin_table[180] = {16'd1829,16'd921};   Sin_table[181] = {16'd1835,16'd910};   Sin_table[182] = {16'd1840,16'd898};   Sin_table[183] = {16'd1846,16'd887};   Sin_table[184] = {16'd1851,16'd876};   Sin_table[185] = {16'd1857,16'd864};   Sin_table[186] = {16'd1862,16'd853};   Sin_table[187] = {16'd1867,16'd841};   Sin_table[188] = {16'd1872,16'd830};   Sin_table[189] = {16'd1877,16'd818};   Sin_table[190] = {16'd1882,16'd807};   Sin_table[191] = {16'd1887,16'd795};   Sin_table[192] = {16'd1892,16'd784};   Sin_table[193] = {16'd1897,16'd772};   Sin_table[194] = {16'd1902,16'd760};   Sin_table[195] = {16'd1906,16'd749};   Sin_table[196] = {16'd1911,16'd737};   Sin_table[197] = {16'd1915,16'd725};   Sin_table[198] = {16'd1920,16'd714};   Sin_table[199] = {16'd1924,16'd702};   Sin_table[200] = {16'd1928,16'd690};   Sin_table[201] = {16'd1932,16'd678};   Sin_table[202] = {16'd1937,16'd666};   Sin_table[203] = {16'd1941,16'd654};   Sin_table[204] = {16'd1945,16'd642};   Sin_table[205] = {16'd1949,16'd630};   Sin_table[206] = {16'd1952,16'd619};   Sin_table[207] = {16'd1956,16'd607};   Sin_table[208] = {16'd1960,16'd595};   Sin_table[209] = {16'd1963,16'd582};   Sin_table[210] = {16'd1967,16'd570};   Sin_table[211] = {16'd1970,16'd558};   Sin_table[212] = {16'd1974,16'd546};   Sin_table[213] = {16'd1977,16'd534};   Sin_table[214] = {16'd1980,16'd522};   Sin_table[215] = {16'd1984,16'd510};   Sin_table[216] = {16'd1987,16'd498};   Sin_table[217] = {16'd1990,16'd485};   Sin_table[218] = {16'd1993,16'd473};   Sin_table[219] = {16'd1995,16'd461};   Sin_table[220] = {16'd1998,16'd449};   Sin_table[221] = {16'd2001,16'd436};   Sin_table[222] = {16'd2004,16'd424};   Sin_table[223] = {16'd2006,16'd412};   Sin_table[224] = {16'd2009,16'd400};   Sin_table[225] = {16'd2011,16'd387};   Sin_table[226] = {16'd2013,16'd375};   Sin_table[227] = {16'd2016,16'd363};   Sin_table[228] = {16'd2018,16'd350};   Sin_table[229] = {16'd2020,16'd338};   Sin_table[230] = {16'd2022,16'd325};   Sin_table[231] = {16'd2024,16'd313};   Sin_table[232] = {16'd2026,16'd301};   Sin_table[233] = {16'd2028,16'd288};   Sin_table[234] = {16'd2029,16'd276};   Sin_table[235] = {16'd2031,16'd263};   Sin_table[236] = {16'd2033,16'd251};   Sin_table[237] = {16'd2034,16'd238};   Sin_table[238] = {16'd2036,16'd226};   Sin_table[239] = {16'd2037,16'd213};   Sin_table[240] = {16'd2038,16'd201};   Sin_table[241] = {16'd2039,16'd188};   Sin_table[242] = {16'd2040,16'd176};   Sin_table[243] = {16'd2041,16'd163};   Sin_table[244] = {16'd2042,16'd151};   Sin_table[245] = {16'd2043,16'd138};   Sin_table[246] = {16'd2044,16'd126};   Sin_table[247] = {16'd2045,16'd113};   Sin_table[248] = {16'd2046,16'd100};   Sin_table[249] = {16'd2046,16'd88};   Sin_table[250] = {16'd2047,16'd75};   Sin_table[251] = {16'd2047,16'd63};   Sin_table[252] = {16'd2047,16'd50};   Sin_table[253] = {16'd2047,16'd38};   Sin_table[254] = {16'd2047,16'd25};   Sin_table[255] = {16'd2047,16'd13};   Sin_table[256] = {16'd2047,16'd0};   Sin_table[257] = {16'd2047,-16'd13};   Sin_table[258] = {16'd2047,-16'd25};   Sin_table[259] = {16'd2047,-16'd38};   Sin_table[260] = {16'd2047,-16'd50};   Sin_table[261] = {16'd2047,-16'd63};   Sin_table[262] = {16'd2047,-16'd75};   Sin_table[263] = {16'd2046,-16'd88};   Sin_table[264] = {16'd2046,-16'd100};   Sin_table[265] = {16'd2045,-16'd113};   Sin_table[266] = {16'd2044,-16'd126};   Sin_table[267] = {16'd2043,-16'd138};   Sin_table[268] = {16'd2042,-16'd151};   Sin_table[269] = {16'd2041,-16'd163};   Sin_table[270] = {16'd2040,-16'd176};   Sin_table[271] = {16'd2039,-16'd188};   Sin_table[272] = {16'd2038,-16'd201};   Sin_table[273] = {16'd2037,-16'd213};   Sin_table[274] = {16'd2036,-16'd226};   Sin_table[275] = {16'd2034,-16'd238};   Sin_table[276] = {16'd2033,-16'd251};   Sin_table[277] = {16'd2031,-16'd263};   Sin_table[278] = {16'd2029,-16'd276};   Sin_table[279] = {16'd2028,-16'd288};   Sin_table[280] = {16'd2026,-16'd301};   Sin_table[281] = {16'd2024,-16'd313};   Sin_table[282] = {16'd2022,-16'd325};   Sin_table[283] = {16'd2020,-16'd338};   Sin_table[284] = {16'd2018,-16'd350};   Sin_table[285] = {16'd2016,-16'd363};   Sin_table[286] = {16'd2013,-16'd375};   Sin_table[287] = {16'd2011,-16'd387};   Sin_table[288] = {16'd2009,-16'd400};   Sin_table[289] = {16'd2006,-16'd412};   Sin_table[290] = {16'd2004,-16'd424};   Sin_table[291] = {16'd2001,-16'd436};   Sin_table[292] = {16'd1998,-16'd449};   Sin_table[293] = {16'd1995,-16'd461};   Sin_table[294] = {16'd1993,-16'd473};   Sin_table[295] = {16'd1990,-16'd485};   Sin_table[296] = {16'd1987,-16'd498};   Sin_table[297] = {16'd1984,-16'd510};   Sin_table[298] = {16'd1980,-16'd522};   Sin_table[299] = {16'd1977,-16'd534};   Sin_table[300] = {16'd1974,-16'd546};   Sin_table[301] = {16'd1970,-16'd558};   Sin_table[302] = {16'd1967,-16'd570};   Sin_table[303] = {16'd1963,-16'd582};   Sin_table[304] = {16'd1960,-16'd595};   Sin_table[305] = {16'd1956,-16'd607};   Sin_table[306] = {16'd1952,-16'd619};   Sin_table[307] = {16'd1949,-16'd630};   Sin_table[308] = {16'd1945,-16'd642};   Sin_table[309] = {16'd1941,-16'd654};   Sin_table[310] = {16'd1937,-16'd666};   Sin_table[311] = {16'd1932,-16'd678};   Sin_table[312] = {16'd1928,-16'd690};   Sin_table[313] = {16'd1924,-16'd702};   Sin_table[314] = {16'd1920,-16'd714};   Sin_table[315] = {16'd1915,-16'd725};   Sin_table[316] = {16'd1911,-16'd737};   Sin_table[317] = {16'd1906,-16'd749};   Sin_table[318] = {16'd1902,-16'd760};   Sin_table[319] = {16'd1897,-16'd772};   Sin_table[320] = {16'd1892,-16'd784};   Sin_table[321] = {16'd1887,-16'd795};   Sin_table[322] = {16'd1882,-16'd807};   Sin_table[323] = {16'd1877,-16'd818};   Sin_table[324] = {16'd1872,-16'd830};   Sin_table[325] = {16'd1867,-16'd841};   Sin_table[326] = {16'd1862,-16'd853};   Sin_table[327] = {16'd1857,-16'd864};   Sin_table[328] = {16'd1851,-16'd876};   Sin_table[329] = {16'd1846,-16'd887};   Sin_table[330] = {16'd1840,-16'd898};   Sin_table[331] = {16'd1835,-16'd910};   Sin_table[332] = {16'd1829,-16'd921};   Sin_table[333] = {16'd1824,-16'd932};   Sin_table[334] = {16'd1818,-16'd943};   Sin_table[335] = {16'd1812,-16'd954};   Sin_table[336] = {16'd1806,-16'd965};   Sin_table[337] = {16'd1800,-16'd976};   Sin_table[338] = {16'd1794,-16'd988};   Sin_table[339] = {16'd1788,-16'd999};   Sin_table[340] = {16'd1782,-16'd1009};   Sin_table[341] = {16'd1776,-16'd1020};   Sin_table[342] = {16'd1769,-16'd1031};   Sin_table[343] = {16'd1763,-16'd1042};   Sin_table[344] = {16'd1757,-16'd1053};   Sin_table[345] = {16'd1750,-16'd1064};   Sin_table[346] = {16'd1744,-16'd1074};   Sin_table[347] = {16'd1737,-16'd1085};   Sin_table[348] = {16'd1730,-16'd1096};   Sin_table[349] = {16'd1724,-16'd1106};   Sin_table[350] = {16'd1717,-16'd1117};   Sin_table[351] = {16'd1710,-16'd1127};   Sin_table[352] = {16'd1703,-16'd1138};   Sin_table[353] = {16'd1696,-16'd1148};   Sin_table[354] = {16'd1689,-16'd1159};   Sin_table[355] = {16'd1682,-16'd1169};   Sin_table[356] = {16'd1674,-16'd1179};   Sin_table[357] = {16'd1667,-16'd1190};   Sin_table[358] = {16'd1660,-16'd1200};   Sin_table[359] = {16'd1652,-16'd1210};   Sin_table[360] = {16'd1645,-16'd1220};   Sin_table[361] = {16'd1637,-16'd1230};   Sin_table[362] = {16'd1630,-16'd1240};   Sin_table[363] = {16'd1622,-16'd1250};   Sin_table[364] = {16'd1615,-16'd1260};   Sin_table[365] = {16'd1607,-16'd1270};   Sin_table[366] = {16'd1599,-16'd1280};   Sin_table[367] = {16'd1591,-16'd1289};   Sin_table[368] = {16'd1583,-16'd1299};   Sin_table[369] = {16'd1575,-16'd1309};   Sin_table[370] = {16'd1567,-16'd1319};   Sin_table[371] = {16'd1559,-16'd1328};   Sin_table[372] = {16'd1551,-16'd1338};   Sin_table[373] = {16'd1543,-16'd1347};   Sin_table[374] = {16'd1534,-16'd1357};   Sin_table[375] = {16'd1526,-16'd1366};   Sin_table[376] = {16'd1517,-16'd1375};   Sin_table[377] = {16'd1509,-16'd1385};   Sin_table[378] = {16'd1500,-16'd1394};   Sin_table[379] = {16'd1492,-16'd1403};   Sin_table[380] = {16'd1483,-16'd1412};   Sin_table[381] = {16'd1475,-16'd1421};   Sin_table[382] = {16'd1466,-16'd1430};   Sin_table[383] = {16'd1457,-16'd1439};   Sin_table[384] = {16'd1448,-16'd1448};   Sin_table[385] = {16'd1439,-16'd1457};   Sin_table[386] = {16'd1430,-16'd1466};   Sin_table[387] = {16'd1421,-16'd1475};   Sin_table[388] = {16'd1412,-16'd1483};   Sin_table[389] = {16'd1403,-16'd1492};   Sin_table[390] = {16'd1394,-16'd1500};   Sin_table[391] = {16'd1385,-16'd1509};   Sin_table[392] = {16'd1375,-16'd1517};   Sin_table[393] = {16'd1366,-16'd1526};   Sin_table[394] = {16'd1357,-16'd1534};   Sin_table[395] = {16'd1347,-16'd1543};   Sin_table[396] = {16'd1338,-16'd1551};   Sin_table[397] = {16'd1328,-16'd1559};   Sin_table[398] = {16'd1319,-16'd1567};   Sin_table[399] = {16'd1309,-16'd1575};   Sin_table[400] = {16'd1299,-16'd1583};   Sin_table[401] = {16'd1289,-16'd1591};   Sin_table[402] = {16'd1280,-16'd1599};   Sin_table[403] = {16'd1270,-16'd1607};   Sin_table[404] = {16'd1260,-16'd1615};   Sin_table[405] = {16'd1250,-16'd1622};   Sin_table[406] = {16'd1240,-16'd1630};   Sin_table[407] = {16'd1230,-16'd1637};   Sin_table[408] = {16'd1220,-16'd1645};   Sin_table[409] = {16'd1210,-16'd1652};   Sin_table[410] = {16'd1200,-16'd1660};   Sin_table[411] = {16'd1190,-16'd1667};   Sin_table[412] = {16'd1179,-16'd1674};   Sin_table[413] = {16'd1169,-16'd1682};   Sin_table[414] = {16'd1159,-16'd1689};   Sin_table[415] = {16'd1148,-16'd1696};   Sin_table[416] = {16'd1138,-16'd1703};   Sin_table[417] = {16'd1127,-16'd1710};   Sin_table[418] = {16'd1117,-16'd1717};   Sin_table[419] = {16'd1106,-16'd1724};   Sin_table[420] = {16'd1096,-16'd1730};   Sin_table[421] = {16'd1085,-16'd1737};   Sin_table[422] = {16'd1074,-16'd1744};   Sin_table[423] = {16'd1064,-16'd1750};   Sin_table[424] = {16'd1053,-16'd1757};   Sin_table[425] = {16'd1042,-16'd1763};   Sin_table[426] = {16'd1031,-16'd1769};   Sin_table[427] = {16'd1020,-16'd1776};   Sin_table[428] = {16'd1009,-16'd1782};   Sin_table[429] = {16'd999,-16'd1788};   Sin_table[430] = {16'd988,-16'd1794};   Sin_table[431] = {16'd976,-16'd1800};   Sin_table[432] = {16'd965,-16'd1806};   Sin_table[433] = {16'd954,-16'd1812};   Sin_table[434] = {16'd943,-16'd1818};   Sin_table[435] = {16'd932,-16'd1824};   Sin_table[436] = {16'd921,-16'd1829};   Sin_table[437] = {16'd910,-16'd1835};   Sin_table[438] = {16'd898,-16'd1840};   Sin_table[439] = {16'd887,-16'd1846};   Sin_table[440] = {16'd876,-16'd1851};   Sin_table[441] = {16'd864,-16'd1857};   Sin_table[442] = {16'd853,-16'd1862};   Sin_table[443] = {16'd841,-16'd1867};   Sin_table[444] = {16'd830,-16'd1872};   Sin_table[445] = {16'd818,-16'd1877};   Sin_table[446] = {16'd807,-16'd1882};   Sin_table[447] = {16'd795,-16'd1887};   Sin_table[448] = {16'd784,-16'd1892};   Sin_table[449] = {16'd772,-16'd1897};   Sin_table[450] = {16'd760,-16'd1902};   Sin_table[451] = {16'd749,-16'd1906};   Sin_table[452] = {16'd737,-16'd1911};   Sin_table[453] = {16'd725,-16'd1915};   Sin_table[454] = {16'd714,-16'd1920};   Sin_table[455] = {16'd702,-16'd1924};   Sin_table[456] = {16'd690,-16'd1928};   Sin_table[457] = {16'd678,-16'd1932};   Sin_table[458] = {16'd666,-16'd1937};   Sin_table[459] = {16'd654,-16'd1941};   Sin_table[460] = {16'd642,-16'd1945};   Sin_table[461] = {16'd630,-16'd1949};   Sin_table[462] = {16'd619,-16'd1952};   Sin_table[463] = {16'd607,-16'd1956};   Sin_table[464] = {16'd595,-16'd1960};   Sin_table[465] = {16'd582,-16'd1963};   Sin_table[466] = {16'd570,-16'd1967};   Sin_table[467] = {16'd558,-16'd1970};   Sin_table[468] = {16'd546,-16'd1974};   Sin_table[469] = {16'd534,-16'd1977};   Sin_table[470] = {16'd522,-16'd1980};   Sin_table[471] = {16'd510,-16'd1984};   Sin_table[472] = {16'd498,-16'd1987};   Sin_table[473] = {16'd485,-16'd1990};   Sin_table[474] = {16'd473,-16'd1993};   Sin_table[475] = {16'd461,-16'd1995};   Sin_table[476] = {16'd449,-16'd1998};   Sin_table[477] = {16'd436,-16'd2001};   Sin_table[478] = {16'd424,-16'd2004};   Sin_table[479] = {16'd412,-16'd2006};   Sin_table[480] = {16'd400,-16'd2009};   Sin_table[481] = {16'd387,-16'd2011};   Sin_table[482] = {16'd375,-16'd2013};   Sin_table[483] = {16'd363,-16'd2016};   Sin_table[484] = {16'd350,-16'd2018};   Sin_table[485] = {16'd338,-16'd2020};   Sin_table[486] = {16'd325,-16'd2022};   Sin_table[487] = {16'd313,-16'd2024};   Sin_table[488] = {16'd301,-16'd2026};   Sin_table[489] = {16'd288,-16'd2028};   Sin_table[490] = {16'd276,-16'd2029};   Sin_table[491] = {16'd263,-16'd2031};   Sin_table[492] = {16'd251,-16'd2033};   Sin_table[493] = {16'd238,-16'd2034};   Sin_table[494] = {16'd226,-16'd2036};   Sin_table[495] = {16'd213,-16'd2037};   Sin_table[496] = {16'd201,-16'd2038};   Sin_table[497] = {16'd188,-16'd2039};   Sin_table[498] = {16'd176,-16'd2040};   Sin_table[499] = {16'd163,-16'd2041};   Sin_table[500] = {16'd151,-16'd2042};   Sin_table[501] = {16'd138,-16'd2043};   Sin_table[502] = {16'd126,-16'd2044};   Sin_table[503] = {16'd113,-16'd2045};   Sin_table[504] = {16'd100,-16'd2046};   Sin_table[505] = {16'd88,-16'd2046};   Sin_table[506] = {16'd75,-16'd2047};   Sin_table[507] = {16'd63,-16'd2047};   Sin_table[508] = {16'd50,-16'd2047};   Sin_table[509] = {16'd38,-16'd2048};   Sin_table[510] = {16'd25,-16'd2048};   Sin_table[511] = {16'd13,-16'd2048};   Sin_table[512] = {16'd0,-16'd2048};   Sin_table[513] = {-16'd13,-16'd2048};   Sin_table[514] = {-16'd25,-16'd2048};   Sin_table[515] = {-16'd38,-16'd2048};   Sin_table[516] = {-16'd50,-16'd2047};   Sin_table[517] = {-16'd63,-16'd2047};   Sin_table[518] = {-16'd75,-16'd2047};   Sin_table[519] = {-16'd88,-16'd2046};   Sin_table[520] = {-16'd100,-16'd2046};   Sin_table[521] = {-16'd113,-16'd2045};   Sin_table[522] = {-16'd126,-16'd2044};   Sin_table[523] = {-16'd138,-16'd2043};   Sin_table[524] = {-16'd151,-16'd2042};   Sin_table[525] = {-16'd163,-16'd2041};   Sin_table[526] = {-16'd176,-16'd2040};   Sin_table[527] = {-16'd188,-16'd2039};   Sin_table[528] = {-16'd201,-16'd2038};   Sin_table[529] = {-16'd213,-16'd2037};   Sin_table[530] = {-16'd226,-16'd2036};   Sin_table[531] = {-16'd238,-16'd2034};   Sin_table[532] = {-16'd251,-16'd2033};   Sin_table[533] = {-16'd263,-16'd2031};   Sin_table[534] = {-16'd276,-16'd2029};   Sin_table[535] = {-16'd288,-16'd2028};   Sin_table[536] = {-16'd301,-16'd2026};   Sin_table[537] = {-16'd313,-16'd2024};   Sin_table[538] = {-16'd325,-16'd2022};   Sin_table[539] = {-16'd338,-16'd2020};   Sin_table[540] = {-16'd350,-16'd2018};   Sin_table[541] = {-16'd363,-16'd2016};   Sin_table[542] = {-16'd375,-16'd2013};   Sin_table[543] = {-16'd387,-16'd2011};   Sin_table[544] = {-16'd400,-16'd2009};   Sin_table[545] = {-16'd412,-16'd2006};   Sin_table[546] = {-16'd424,-16'd2004};   Sin_table[547] = {-16'd436,-16'd2001};   Sin_table[548] = {-16'd449,-16'd1998};   Sin_table[549] = {-16'd461,-16'd1995};   Sin_table[550] = {-16'd473,-16'd1993};   Sin_table[551] = {-16'd485,-16'd1990};   Sin_table[552] = {-16'd498,-16'd1987};   Sin_table[553] = {-16'd510,-16'd1984};   Sin_table[554] = {-16'd522,-16'd1980};   Sin_table[555] = {-16'd534,-16'd1977};   Sin_table[556] = {-16'd546,-16'd1974};   Sin_table[557] = {-16'd558,-16'd1970};   Sin_table[558] = {-16'd570,-16'd1967};   Sin_table[559] = {-16'd582,-16'd1963};   Sin_table[560] = {-16'd595,-16'd1960};   Sin_table[561] = {-16'd607,-16'd1956};   Sin_table[562] = {-16'd619,-16'd1952};   Sin_table[563] = {-16'd630,-16'd1949};   Sin_table[564] = {-16'd642,-16'd1945};   Sin_table[565] = {-16'd654,-16'd1941};   Sin_table[566] = {-16'd666,-16'd1937};   Sin_table[567] = {-16'd678,-16'd1932};   Sin_table[568] = {-16'd690,-16'd1928};   Sin_table[569] = {-16'd702,-16'd1924};   Sin_table[570] = {-16'd714,-16'd1920};   Sin_table[571] = {-16'd725,-16'd1915};   Sin_table[572] = {-16'd737,-16'd1911};   Sin_table[573] = {-16'd749,-16'd1906};   Sin_table[574] = {-16'd760,-16'd1902};   Sin_table[575] = {-16'd772,-16'd1897};   Sin_table[576] = {-16'd784,-16'd1892};   Sin_table[577] = {-16'd795,-16'd1887};   Sin_table[578] = {-16'd807,-16'd1882};   Sin_table[579] = {-16'd818,-16'd1877};   Sin_table[580] = {-16'd830,-16'd1872};   Sin_table[581] = {-16'd841,-16'd1867};   Sin_table[582] = {-16'd853,-16'd1862};   Sin_table[583] = {-16'd864,-16'd1857};   Sin_table[584] = {-16'd876,-16'd1851};   Sin_table[585] = {-16'd887,-16'd1846};   Sin_table[586] = {-16'd898,-16'd1840};   Sin_table[587] = {-16'd910,-16'd1835};   Sin_table[588] = {-16'd921,-16'd1829};   Sin_table[589] = {-16'd932,-16'd1824};   Sin_table[590] = {-16'd943,-16'd1818};   Sin_table[591] = {-16'd954,-16'd1812};   Sin_table[592] = {-16'd965,-16'd1806};   Sin_table[593] = {-16'd976,-16'd1800};   Sin_table[594] = {-16'd988,-16'd1794};   Sin_table[595] = {-16'd999,-16'd1788};   Sin_table[596] = {-16'd1009,-16'd1782};   Sin_table[597] = {-16'd1020,-16'd1776};   Sin_table[598] = {-16'd1031,-16'd1769};   Sin_table[599] = {-16'd1042,-16'd1763};   Sin_table[600] = {-16'd1053,-16'd1757};   Sin_table[601] = {-16'd1064,-16'd1750};   Sin_table[602] = {-16'd1074,-16'd1744};   Sin_table[603] = {-16'd1085,-16'd1737};   Sin_table[604] = {-16'd1096,-16'd1730};   Sin_table[605] = {-16'd1106,-16'd1724};   Sin_table[606] = {-16'd1117,-16'd1717};   Sin_table[607] = {-16'd1127,-16'd1710};   Sin_table[608] = {-16'd1138,-16'd1703};   Sin_table[609] = {-16'd1148,-16'd1696};   Sin_table[610] = {-16'd1159,-16'd1689};   Sin_table[611] = {-16'd1169,-16'd1682};   Sin_table[612] = {-16'd1179,-16'd1674};   Sin_table[613] = {-16'd1190,-16'd1667};   Sin_table[614] = {-16'd1200,-16'd1660};   Sin_table[615] = {-16'd1210,-16'd1652};   Sin_table[616] = {-16'd1220,-16'd1645};   Sin_table[617] = {-16'd1230,-16'd1637};   Sin_table[618] = {-16'd1240,-16'd1630};   Sin_table[619] = {-16'd1250,-16'd1622};   Sin_table[620] = {-16'd1260,-16'd1615};   Sin_table[621] = {-16'd1270,-16'd1607};   Sin_table[622] = {-16'd1280,-16'd1599};   Sin_table[623] = {-16'd1289,-16'd1591};   Sin_table[624] = {-16'd1299,-16'd1583};   Sin_table[625] = {-16'd1309,-16'd1575};   Sin_table[626] = {-16'd1319,-16'd1567};   Sin_table[627] = {-16'd1328,-16'd1559};   Sin_table[628] = {-16'd1338,-16'd1551};   Sin_table[629] = {-16'd1347,-16'd1543};   Sin_table[630] = {-16'd1357,-16'd1534};   Sin_table[631] = {-16'd1366,-16'd1526};   Sin_table[632] = {-16'd1375,-16'd1517};   Sin_table[633] = {-16'd1385,-16'd1509};   Sin_table[634] = {-16'd1394,-16'd1500};   Sin_table[635] = {-16'd1403,-16'd1492};   Sin_table[636] = {-16'd1412,-16'd1483};   Sin_table[637] = {-16'd1421,-16'd1475};   Sin_table[638] = {-16'd1430,-16'd1466};   Sin_table[639] = {-16'd1439,-16'd1457};   Sin_table[640] = {-16'd1448,-16'd1448};   Sin_table[641] = {-16'd1457,-16'd1439};   Sin_table[642] = {-16'd1466,-16'd1430};   Sin_table[643] = {-16'd1475,-16'd1421};   Sin_table[644] = {-16'd1483,-16'd1412};   Sin_table[645] = {-16'd1492,-16'd1403};   Sin_table[646] = {-16'd1500,-16'd1394};   Sin_table[647] = {-16'd1509,-16'd1385};   Sin_table[648] = {-16'd1517,-16'd1375};   Sin_table[649] = {-16'd1526,-16'd1366};   Sin_table[650] = {-16'd1534,-16'd1357};   Sin_table[651] = {-16'd1543,-16'd1347};   Sin_table[652] = {-16'd1551,-16'd1338};   Sin_table[653] = {-16'd1559,-16'd1328};   Sin_table[654] = {-16'd1567,-16'd1319};   Sin_table[655] = {-16'd1575,-16'd1309};   Sin_table[656] = {-16'd1583,-16'd1299};   Sin_table[657] = {-16'd1591,-16'd1289};   Sin_table[658] = {-16'd1599,-16'd1280};   Sin_table[659] = {-16'd1607,-16'd1270};   Sin_table[660] = {-16'd1615,-16'd1260};   Sin_table[661] = {-16'd1622,-16'd1250};   Sin_table[662] = {-16'd1630,-16'd1240};   Sin_table[663] = {-16'd1637,-16'd1230};   Sin_table[664] = {-16'd1645,-16'd1220};   Sin_table[665] = {-16'd1652,-16'd1210};   Sin_table[666] = {-16'd1660,-16'd1200};   Sin_table[667] = {-16'd1667,-16'd1190};   Sin_table[668] = {-16'd1674,-16'd1179};   Sin_table[669] = {-16'd1682,-16'd1169};   Sin_table[670] = {-16'd1689,-16'd1159};   Sin_table[671] = {-16'd1696,-16'd1148};   Sin_table[672] = {-16'd1703,-16'd1138};   Sin_table[673] = {-16'd1710,-16'd1127};   Sin_table[674] = {-16'd1717,-16'd1117};   Sin_table[675] = {-16'd1724,-16'd1106};   Sin_table[676] = {-16'd1730,-16'd1096};   Sin_table[677] = {-16'd1737,-16'd1085};   Sin_table[678] = {-16'd1744,-16'd1074};   Sin_table[679] = {-16'd1750,-16'd1064};   Sin_table[680] = {-16'd1757,-16'd1053};   Sin_table[681] = {-16'd1763,-16'd1042};   Sin_table[682] = {-16'd1769,-16'd1031};   Sin_table[683] = {-16'd1776,-16'd1020};   Sin_table[684] = {-16'd1782,-16'd1009};   Sin_table[685] = {-16'd1788,-16'd999};   Sin_table[686] = {-16'd1794,-16'd988};   Sin_table[687] = {-16'd1800,-16'd976};   Sin_table[688] = {-16'd1806,-16'd965};   Sin_table[689] = {-16'd1812,-16'd954};   Sin_table[690] = {-16'd1818,-16'd943};   Sin_table[691] = {-16'd1824,-16'd932};   Sin_table[692] = {-16'd1829,-16'd921};   Sin_table[693] = {-16'd1835,-16'd910};   Sin_table[694] = {-16'd1840,-16'd898};   Sin_table[695] = {-16'd1846,-16'd887};   Sin_table[696] = {-16'd1851,-16'd876};   Sin_table[697] = {-16'd1857,-16'd864};   Sin_table[698] = {-16'd1862,-16'd853};   Sin_table[699] = {-16'd1867,-16'd841};   Sin_table[700] = {-16'd1872,-16'd830};   Sin_table[701] = {-16'd1877,-16'd818};   Sin_table[702] = {-16'd1882,-16'd807};   Sin_table[703] = {-16'd1887,-16'd795};   Sin_table[704] = {-16'd1892,-16'd784};   Sin_table[705] = {-16'd1897,-16'd772};   Sin_table[706] = {-16'd1902,-16'd760};   Sin_table[707] = {-16'd1906,-16'd749};   Sin_table[708] = {-16'd1911,-16'd737};   Sin_table[709] = {-16'd1915,-16'd725};   Sin_table[710] = {-16'd1920,-16'd714};   Sin_table[711] = {-16'd1924,-16'd702};   Sin_table[712] = {-16'd1928,-16'd690};   Sin_table[713] = {-16'd1932,-16'd678};   Sin_table[714] = {-16'd1937,-16'd666};   Sin_table[715] = {-16'd1941,-16'd654};   Sin_table[716] = {-16'd1945,-16'd642};   Sin_table[717] = {-16'd1949,-16'd630};   Sin_table[718] = {-16'd1952,-16'd619};   Sin_table[719] = {-16'd1956,-16'd607};   Sin_table[720] = {-16'd1960,-16'd595};   Sin_table[721] = {-16'd1963,-16'd582};   Sin_table[722] = {-16'd1967,-16'd570};   Sin_table[723] = {-16'd1970,-16'd558};   Sin_table[724] = {-16'd1974,-16'd546};   Sin_table[725] = {-16'd1977,-16'd534};   Sin_table[726] = {-16'd1980,-16'd522};   Sin_table[727] = {-16'd1984,-16'd510};   Sin_table[728] = {-16'd1987,-16'd498};   Sin_table[729] = {-16'd1990,-16'd485};   Sin_table[730] = {-16'd1993,-16'd473};   Sin_table[731] = {-16'd1995,-16'd461};   Sin_table[732] = {-16'd1998,-16'd449};   Sin_table[733] = {-16'd2001,-16'd436};   Sin_table[734] = {-16'd2004,-16'd424};   Sin_table[735] = {-16'd2006,-16'd412};   Sin_table[736] = {-16'd2009,-16'd400};   Sin_table[737] = {-16'd2011,-16'd387};   Sin_table[738] = {-16'd2013,-16'd375};   Sin_table[739] = {-16'd2016,-16'd363};   Sin_table[740] = {-16'd2018,-16'd350};   Sin_table[741] = {-16'd2020,-16'd338};   Sin_table[742] = {-16'd2022,-16'd325};   Sin_table[743] = {-16'd2024,-16'd313};   Sin_table[744] = {-16'd2026,-16'd301};   Sin_table[745] = {-16'd2028,-16'd288};   Sin_table[746] = {-16'd2029,-16'd276};   Sin_table[747] = {-16'd2031,-16'd263};   Sin_table[748] = {-16'd2033,-16'd251};   Sin_table[749] = {-16'd2034,-16'd238};   Sin_table[750] = {-16'd2036,-16'd226};   Sin_table[751] = {-16'd2037,-16'd213};   Sin_table[752] = {-16'd2038,-16'd201};   Sin_table[753] = {-16'd2039,-16'd188};   Sin_table[754] = {-16'd2040,-16'd176};   Sin_table[755] = {-16'd2041,-16'd163};   Sin_table[756] = {-16'd2042,-16'd151};   Sin_table[757] = {-16'd2043,-16'd138};   Sin_table[758] = {-16'd2044,-16'd126};   Sin_table[759] = {-16'd2045,-16'd113};   Sin_table[760] = {-16'd2046,-16'd100};   Sin_table[761] = {-16'd2046,-16'd88};   Sin_table[762] = {-16'd2047,-16'd75};   Sin_table[763] = {-16'd2047,-16'd63};   Sin_table[764] = {-16'd2047,-16'd50};   Sin_table[765] = {-16'd2048,-16'd38};   Sin_table[766] = {-16'd2048,-16'd25};   Sin_table[767] = {-16'd2048,-16'd13};   Sin_table[768] = {-16'd2048,16'd0};   Sin_table[769] = {-16'd2048,16'd13};   Sin_table[770] = {-16'd2048,16'd25};   Sin_table[771] = {-16'd2048,16'd38};   Sin_table[772] = {-16'd2047,16'd50};   Sin_table[773] = {-16'd2047,16'd63};   Sin_table[774] = {-16'd2047,16'd75};   Sin_table[775] = {-16'd2046,16'd88};   Sin_table[776] = {-16'd2046,16'd100};   Sin_table[777] = {-16'd2045,16'd113};   Sin_table[778] = {-16'd2044,16'd126};   Sin_table[779] = {-16'd2043,16'd138};   Sin_table[780] = {-16'd2042,16'd151};   Sin_table[781] = {-16'd2041,16'd163};   Sin_table[782] = {-16'd2040,16'd176};   Sin_table[783] = {-16'd2039,16'd188};   Sin_table[784] = {-16'd2038,16'd201};   Sin_table[785] = {-16'd2037,16'd213};   Sin_table[786] = {-16'd2036,16'd226};   Sin_table[787] = {-16'd2034,16'd238};   Sin_table[788] = {-16'd2033,16'd251};   Sin_table[789] = {-16'd2031,16'd263};   Sin_table[790] = {-16'd2029,16'd276};   Sin_table[791] = {-16'd2028,16'd288};   Sin_table[792] = {-16'd2026,16'd301};   Sin_table[793] = {-16'd2024,16'd313};   Sin_table[794] = {-16'd2022,16'd325};   Sin_table[795] = {-16'd2020,16'd338};   Sin_table[796] = {-16'd2018,16'd350};   Sin_table[797] = {-16'd2016,16'd363};   Sin_table[798] = {-16'd2013,16'd375};   Sin_table[799] = {-16'd2011,16'd387};   Sin_table[800] = {-16'd2009,16'd400};   Sin_table[801] = {-16'd2006,16'd412};   Sin_table[802] = {-16'd2004,16'd424};   Sin_table[803] = {-16'd2001,16'd436};   Sin_table[804] = {-16'd1998,16'd449};   Sin_table[805] = {-16'd1995,16'd461};   Sin_table[806] = {-16'd1993,16'd473};   Sin_table[807] = {-16'd1990,16'd485};   Sin_table[808] = {-16'd1987,16'd498};   Sin_table[809] = {-16'd1984,16'd510};   Sin_table[810] = {-16'd1980,16'd522};   Sin_table[811] = {-16'd1977,16'd534};   Sin_table[812] = {-16'd1974,16'd546};   Sin_table[813] = {-16'd1970,16'd558};   Sin_table[814] = {-16'd1967,16'd570};   Sin_table[815] = {-16'd1963,16'd582};   Sin_table[816] = {-16'd1960,16'd595};   Sin_table[817] = {-16'd1956,16'd607};   Sin_table[818] = {-16'd1952,16'd619};   Sin_table[819] = {-16'd1949,16'd630};   Sin_table[820] = {-16'd1945,16'd642};   Sin_table[821] = {-16'd1941,16'd654};   Sin_table[822] = {-16'd1937,16'd666};   Sin_table[823] = {-16'd1932,16'd678};   Sin_table[824] = {-16'd1928,16'd690};   Sin_table[825] = {-16'd1924,16'd702};   Sin_table[826] = {-16'd1920,16'd714};   Sin_table[827] = {-16'd1915,16'd725};   Sin_table[828] = {-16'd1911,16'd737};   Sin_table[829] = {-16'd1906,16'd749};   Sin_table[830] = {-16'd1902,16'd760};   Sin_table[831] = {-16'd1897,16'd772};   Sin_table[832] = {-16'd1892,16'd784};   Sin_table[833] = {-16'd1887,16'd795};   Sin_table[834] = {-16'd1882,16'd807};   Sin_table[835] = {-16'd1877,16'd818};   Sin_table[836] = {-16'd1872,16'd830};   Sin_table[837] = {-16'd1867,16'd841};   Sin_table[838] = {-16'd1862,16'd853};   Sin_table[839] = {-16'd1857,16'd864};   Sin_table[840] = {-16'd1851,16'd876};   Sin_table[841] = {-16'd1846,16'd887};   Sin_table[842] = {-16'd1840,16'd898};   Sin_table[843] = {-16'd1835,16'd910};   Sin_table[844] = {-16'd1829,16'd921};   Sin_table[845] = {-16'd1824,16'd932};   Sin_table[846] = {-16'd1818,16'd943};   Sin_table[847] = {-16'd1812,16'd954};   Sin_table[848] = {-16'd1806,16'd965};   Sin_table[849] = {-16'd1800,16'd976};   Sin_table[850] = {-16'd1794,16'd988};   Sin_table[851] = {-16'd1788,16'd999};   Sin_table[852] = {-16'd1782,16'd1009};   Sin_table[853] = {-16'd1776,16'd1020};   Sin_table[854] = {-16'd1769,16'd1031};   Sin_table[855] = {-16'd1763,16'd1042};   Sin_table[856] = {-16'd1757,16'd1053};   Sin_table[857] = {-16'd1750,16'd1064};   Sin_table[858] = {-16'd1744,16'd1074};   Sin_table[859] = {-16'd1737,16'd1085};   Sin_table[860] = {-16'd1730,16'd1096};   Sin_table[861] = {-16'd1724,16'd1106};   Sin_table[862] = {-16'd1717,16'd1117};   Sin_table[863] = {-16'd1710,16'd1127};   Sin_table[864] = {-16'd1703,16'd1138};   Sin_table[865] = {-16'd1696,16'd1148};   Sin_table[866] = {-16'd1689,16'd1159};   Sin_table[867] = {-16'd1682,16'd1169};   Sin_table[868] = {-16'd1674,16'd1179};   Sin_table[869] = {-16'd1667,16'd1190};   Sin_table[870] = {-16'd1660,16'd1200};   Sin_table[871] = {-16'd1652,16'd1210};   Sin_table[872] = {-16'd1645,16'd1220};   Sin_table[873] = {-16'd1637,16'd1230};   Sin_table[874] = {-16'd1630,16'd1240};   Sin_table[875] = {-16'd1622,16'd1250};   Sin_table[876] = {-16'd1615,16'd1260};   Sin_table[877] = {-16'd1607,16'd1270};   Sin_table[878] = {-16'd1599,16'd1280};   Sin_table[879] = {-16'd1591,16'd1289};   Sin_table[880] = {-16'd1583,16'd1299};   Sin_table[881] = {-16'd1575,16'd1309};   Sin_table[882] = {-16'd1567,16'd1319};   Sin_table[883] = {-16'd1559,16'd1328};   Sin_table[884] = {-16'd1551,16'd1338};   Sin_table[885] = {-16'd1543,16'd1347};   Sin_table[886] = {-16'd1534,16'd1357};   Sin_table[887] = {-16'd1526,16'd1366};   Sin_table[888] = {-16'd1517,16'd1375};   Sin_table[889] = {-16'd1509,16'd1385};   Sin_table[890] = {-16'd1500,16'd1394};   Sin_table[891] = {-16'd1492,16'd1403};   Sin_table[892] = {-16'd1483,16'd1412};   Sin_table[893] = {-16'd1475,16'd1421};   Sin_table[894] = {-16'd1466,16'd1430};   Sin_table[895] = {-16'd1457,16'd1439};   Sin_table[896] = {-16'd1448,16'd1448};   Sin_table[897] = {-16'd1439,16'd1457};   Sin_table[898] = {-16'd1430,16'd1466};   Sin_table[899] = {-16'd1421,16'd1475};   Sin_table[900] = {-16'd1412,16'd1483};   Sin_table[901] = {-16'd1403,16'd1492};   Sin_table[902] = {-16'd1394,16'd1500};   Sin_table[903] = {-16'd1385,16'd1509};   Sin_table[904] = {-16'd1375,16'd1517};   Sin_table[905] = {-16'd1366,16'd1526};   Sin_table[906] = {-16'd1357,16'd1534};   Sin_table[907] = {-16'd1347,16'd1543};   Sin_table[908] = {-16'd1338,16'd1551};   Sin_table[909] = {-16'd1328,16'd1559};   Sin_table[910] = {-16'd1319,16'd1567};   Sin_table[911] = {-16'd1309,16'd1575};   Sin_table[912] = {-16'd1299,16'd1583};   Sin_table[913] = {-16'd1289,16'd1591};   Sin_table[914] = {-16'd1280,16'd1599};   Sin_table[915] = {-16'd1270,16'd1607};   Sin_table[916] = {-16'd1260,16'd1615};   Sin_table[917] = {-16'd1250,16'd1622};   Sin_table[918] = {-16'd1240,16'd1630};   Sin_table[919] = {-16'd1230,16'd1637};   Sin_table[920] = {-16'd1220,16'd1645};   Sin_table[921] = {-16'd1210,16'd1652};   Sin_table[922] = {-16'd1200,16'd1660};   Sin_table[923] = {-16'd1190,16'd1667};   Sin_table[924] = {-16'd1179,16'd1674};   Sin_table[925] = {-16'd1169,16'd1682};   Sin_table[926] = {-16'd1159,16'd1689};   Sin_table[927] = {-16'd1148,16'd1696};   Sin_table[928] = {-16'd1138,16'd1703};   Sin_table[929] = {-16'd1127,16'd1710};   Sin_table[930] = {-16'd1117,16'd1717};   Sin_table[931] = {-16'd1106,16'd1724};   Sin_table[932] = {-16'd1096,16'd1730};   Sin_table[933] = {-16'd1085,16'd1737};   Sin_table[934] = {-16'd1074,16'd1744};   Sin_table[935] = {-16'd1064,16'd1750};   Sin_table[936] = {-16'd1053,16'd1757};   Sin_table[937] = {-16'd1042,16'd1763};   Sin_table[938] = {-16'd1031,16'd1769};   Sin_table[939] = {-16'd1020,16'd1776};   Sin_table[940] = {-16'd1009,16'd1782};   Sin_table[941] = {-16'd999,16'd1788};   Sin_table[942] = {-16'd988,16'd1794};   Sin_table[943] = {-16'd976,16'd1800};   Sin_table[944] = {-16'd965,16'd1806};   Sin_table[945] = {-16'd954,16'd1812};   Sin_table[946] = {-16'd943,16'd1818};   Sin_table[947] = {-16'd932,16'd1824};   Sin_table[948] = {-16'd921,16'd1829};   Sin_table[949] = {-16'd910,16'd1835};   Sin_table[950] = {-16'd898,16'd1840};   Sin_table[951] = {-16'd887,16'd1846};   Sin_table[952] = {-16'd876,16'd1851};   Sin_table[953] = {-16'd864,16'd1857};   Sin_table[954] = {-16'd853,16'd1862};   Sin_table[955] = {-16'd841,16'd1867};   Sin_table[956] = {-16'd830,16'd1872};   Sin_table[957] = {-16'd818,16'd1877};   Sin_table[958] = {-16'd807,16'd1882};   Sin_table[959] = {-16'd795,16'd1887};   Sin_table[960] = {-16'd784,16'd1892};   Sin_table[961] = {-16'd772,16'd1897};   Sin_table[962] = {-16'd760,16'd1902};   Sin_table[963] = {-16'd749,16'd1906};   Sin_table[964] = {-16'd737,16'd1911};   Sin_table[965] = {-16'd725,16'd1915};   Sin_table[966] = {-16'd714,16'd1920};   Sin_table[967] = {-16'd702,16'd1924};   Sin_table[968] = {-16'd690,16'd1928};   Sin_table[969] = {-16'd678,16'd1932};   Sin_table[970] = {-16'd666,16'd1937};   Sin_table[971] = {-16'd654,16'd1941};   Sin_table[972] = {-16'd642,16'd1945};   Sin_table[973] = {-16'd630,16'd1949};   Sin_table[974] = {-16'd619,16'd1952};   Sin_table[975] = {-16'd607,16'd1956};   Sin_table[976] = {-16'd595,16'd1960};   Sin_table[977] = {-16'd582,16'd1963};   Sin_table[978] = {-16'd570,16'd1967};   Sin_table[979] = {-16'd558,16'd1970};   Sin_table[980] = {-16'd546,16'd1974};   Sin_table[981] = {-16'd534,16'd1977};   Sin_table[982] = {-16'd522,16'd1980};   Sin_table[983] = {-16'd510,16'd1984};   Sin_table[984] = {-16'd498,16'd1987};   Sin_table[985] = {-16'd485,16'd1990};   Sin_table[986] = {-16'd473,16'd1993};   Sin_table[987] = {-16'd461,16'd1995};   Sin_table[988] = {-16'd449,16'd1998};   Sin_table[989] = {-16'd436,16'd2001};   Sin_table[990] = {-16'd424,16'd2004};   Sin_table[991] = {-16'd412,16'd2006};   Sin_table[992] = {-16'd400,16'd2009};   Sin_table[993] = {-16'd387,16'd2011};   Sin_table[994] = {-16'd375,16'd2013};   Sin_table[995] = {-16'd363,16'd2016};   Sin_table[996] = {-16'd350,16'd2018};   Sin_table[997] = {-16'd338,16'd2020};   Sin_table[998] = {-16'd325,16'd2022};   Sin_table[999] = {-16'd313,16'd2024};   Sin_table[1000] = {-16'd301,16'd2026};   Sin_table[1001] = {-16'd288,16'd2028};   Sin_table[1002] = {-16'd276,16'd2029};   Sin_table[1003] = {-16'd263,16'd2031};   Sin_table[1004] = {-16'd251,16'd2033};   Sin_table[1005] = {-16'd238,16'd2034};   Sin_table[1006] = {-16'd226,16'd2036};   Sin_table[1007] = {-16'd213,16'd2037};   Sin_table[1008] = {-16'd201,16'd2038};   Sin_table[1009] = {-16'd188,16'd2039};   Sin_table[1010] = {-16'd176,16'd2040};   Sin_table[1011] = {-16'd163,16'd2041};   Sin_table[1012] = {-16'd151,16'd2042};   Sin_table[1013] = {-16'd138,16'd2043};   Sin_table[1014] = {-16'd126,16'd2044};   Sin_table[1015] = {-16'd113,16'd2045};   Sin_table[1016] = {-16'd100,16'd2046};   Sin_table[1017] = {-16'd88,16'd2046};   Sin_table[1018] = {-16'd75,16'd2047};   Sin_table[1019] = {-16'd63,16'd2047};   Sin_table[1020] = {-16'd50,16'd2047};   Sin_table[1021] = {-16'd38,16'd2047};   Sin_table[1022] = {-16'd25,16'd2047};    Sin_table[1023] = {16'd0,16'd2047};
//    for (i=0;i<TableDep;i=i+1) begin
//      Sin_table[i] = initialValue[(i*32)+:32];
//    end    
  end


  ////////////////////////////////////////////////////////////
  //
  // check PRI_mode proccess
  //
  ////////////////////////////////////////////////////////////

  always @(posedge ce_clk) begin
    if (s_axis_data_tready_int) begin
      PRI_mode_reg <= pri_mode;
	  PRI_mode_reg_D <= PRI_mode_reg;
      if (PRI_mode_reg != PRI_mode_reg_D) begin
		PRI_mode_iterrupt <= 1;
	  end else begin
		PRI_mode_iterrupt <= 0;
      end
	end
  end

  ////////////////////////////////////////////////////////////
  //
  // state machine proccess
  //
  ////////////////////////////////////////////////////////////

  always @(posedge ce_clk) begin
    if (ce_rst) begin
	  state 		   <= IDLE;
	  output_enable    <= 0;  // disable any change
	  output_interrupt <= 1;  // rest all the counters
      start_betch      <= 0;
   	  PW_len      	   <= 0;
	  PRI_len     	   <= 0;  
	  phase_step_reg   <= 0;
	  betch_counter	   <= 0;
	  CW_flag		   <= 0;
	end

    else if (s_axis_data_tready_int) begin
	  if (PRI_mode_iterrupt) begin
        state <= IDLE;
      end else begin
		// all the registers save the values.
	    state 		     <= state;
	    output_enable    <= output_enable;  
	    output_interrupt <= output_interrupt;  
	    PW_len      	 <= PW_len;
	    PRI_len     	 <= PRI_len;  
	    phase_step_reg	 <= phase_step_reg;
        betch_counter    <= betch_counter;
	    CW_flag		     <= CW_flag;
//        start_betch      <= start_betch;
		
        case (state)
          IDLE : begin 
			// this registers are the same for all cases 
   		    betch_counter	 <= 0;			
		    output_enable    <= 1;  // disable any change
	 	    output_interrupt <= 0;  // rest all the counters
            start_betch      <= 1;
			// check PRI mode in the power up or in case of chane of PRI_mode register.
			case (pri_mode)
			  PRI_mode_BETCH0 : begin
				SM_seq_en  		<= 0;
		        state 	   		<= BETCH_0;
		  		PW_len     		<= PW_len_0;
		  		PRI_len    		<= PRI_len_0;  
		  		phase_step_reg  <= phase_step_0;
		  		CW_flag	   		<= 0;  
			  end
			  PRI_mode_BETCH1 : begin
				SM_seq_en  		<= 0;
		        state 	   		<= BETCH_1;
		  		PW_len     		<= PW_len_1;
		  		PRI_len    		<= PRI_len_1;  
		  		phase_step_reg  <= phase_step_1;
		  		CW_flag	   		<= 0;  
			  end
			  PRI_mode_BETCH2 : begin
				SM_seq_en  		<= 0;
		        state 	  	 	<= BETCH_2;
		  		PW_len     		<= PW_len_2;
		  		PRI_len    		<= PRI_len_2;  
		  		phase_step_reg  <= phase_step_2;
		  		CW_flag	   		<= 0;  
			  end
			  PRI_mode_BETCH3 : begin
				SM_seq_en  		<= 0;
		        state 	  		<= BETCH_3;
		  		PW_len     		<= PW_len_3;
		  		PRI_len    		<= PRI_len_3;  
		  		phase_step_reg 	<= phase_step_3;
		  		CW_flag	   		<= 0;  
			  end
			  PRI_mode_SM     : begin
				SM_seq_en  		<= 1;
		        state 	   		<= BETCH_0;
		  		PW_len     		<= PW_len_0;
		  		PRI_len    		<= PRI_len_0;  
		  		phase_step_reg  <= phase_step_0;
		  		CW_flag	   		<= 0;  
			  end
			  PRI_mode_CW     : begin
				SM_seq_en  		<= 0;
		        state 	   		<= CW_STATE;
		  		PW_len     		<= PW_len_CW;
		  		PRI_len    		<= PRI_len_CW;  
		  		phase_step_reg  <= phase_step_CW;
		  		CW_flag	   		<= 1;  
			  end
            endcase
		  end

          // state of all betch
          BETCH_0 : begin
            start_betch  <= 0;
		    if (end_PRI) begin
			  if (betch_counter == betch_len_0) begin // change betch
                start_betch    <= 1;
			    betch_counter  <= 0;
                if (SM_seq_en) begin
	  		      state 	   		<= BETCH_1;
	  		      PW_len       		<= PW_len_1;
			      PRI_len      		<= PRI_len_1;  
	  		      phase_step_reg   	<= phase_step_1;
			    end else begin
	  		      state 	   		<= BETCH_0;
	  		      PW_len       		<= PW_len_0;
			      PRI_len      		<= PRI_len_0;  
	  		      phase_step_reg 	<= phase_step_0;
			    end
			  end else begin
			    betch_counter  <= betch_counter + 1;
			  end
		    end
	      end
       	  BETCH_1 : begin
            start_betch  <= 0;
		    if (end_PRI) begin
			  if (betch_counter == betch_len_1) begin // change betch
                start_betch    <= 1;
			    betch_counter  <= 0;
                if (SM_seq_en) begin
	  		      state 	   		<= BETCH_2;
	  		      PW_len       		<= PW_len_2;
			      PRI_len      	 	<= PRI_len_2;  
	  		      phase_step_reg   	<= phase_step_2;
			    end else begin
	  		      state 	   		<= BETCH_1;
	  		      PW_len       		<= PW_len_1;
			      PRI_len      		<= PRI_len_1;  
	  		      phase_step_reg   	<= phase_step_1;
			    end
			  end else begin
			    betch_counter  <= betch_counter + 1;
			  end
		    end
	      end
          BETCH_2 : begin
            start_betch  <= 0;
		    if (end_PRI) begin
			  if (betch_counter == betch_len_2) begin // change betch
                start_betch    <= 1;
			    betch_counter  <= 0;
                if (SM_seq_en) begin
	  		      state 	   		<= BETCH_3;
	  		      PW_len       		<= PW_len_3;
			      PRI_len      		<= PRI_len_3;  
	  		      phase_step_reg   	<= phase_step_3;
			    end else begin
	  		      state 	   		<= BETCH_2;
	  		      PW_len       		<= PW_len_2;
			      PRI_len      		<= PRI_len_2;  
	  		      phase_step_reg   	<= phase_step_2;
			    end
			  end else begin
			    betch_counter  <= betch_counter + 1;
			  end
		    end
	      end
          BETCH_3 : begin
            start_betch  <= 0;
		    if (end_PRI) begin
			  if (betch_counter == betch_len_3) begin // change betch
                start_betch    <= 1;
			    betch_counter  <= 0;
                if (SM_seq_en) begin
	  		      state 	   		<= BETCH_0;
	  		      PW_len       		<= PW_len_0;
			      PRI_len      		<= PRI_len_0;  
	  		      phase_step_reg    <= phase_step_0;
			    end else begin
	  		      state 	   		<= BETCH_3;
	  		      PW_len       		<= PW_len_3;
			      PRI_len      		<= PRI_len_3;  
	  		      phase_step_reg  	<= phase_step_3;
			    end
			  end else begin
			    betch_counter  <= betch_counter + 1;
			  end
		    end
	      end
          // case of CE mode
          CW_STATE : begin
            start_betch  	<= 0;
	  	    state 		    <= CW_STATE;
	  	    PW_len     	    <= PW_len_CW;
		    PRI_len    	    <= PRI_len_CW;  
	  	    phase_step_reg  <= phase_step;
		    betch_counter   <= 0;
 	      end  
          default : begin  // start the state machine to IDLE.
  		    state 		     <= IDLE;
		    output_enable    <= 0;  // disable any change
		    output_interrupt <= 1;  // rest all the counters
 	        start_betch      <= 0;
		    PW_len           <= 0;
		    PRI_len          <= 0;  
		    phase_step_reg	 <= 0;
		    betch_counter    <= 0;
		    CW_flag	         <= 0;
		  end
        endcase
	  end
    end 
  end

  ////////////////////////////////////////////////////////////
  //
  // create sin Block
  //
  ////////////////////////////////////////////////////////////

  always @(posedge ce_clk) begin
	if (s_axis_data_tready_int) begin
      if (output_interrupt ==1 || start_betch == 1) begin // reset or new betch from state machine or end of betch
	    Sin_pointer <= 0;
	    Sin_output  <= 0;
	    Sin_skip    <= 0;
      end else if (/*s_axis_data_tready_int == 1 && */ output_enable == 1) begin
	    {carry, Sin_skip} <= Sin_skip + phase_step_reg;
        Sin_pointer  <= Sin_skip [acclen-1-:accScale];
//	    Sin_pointer  <= Sin_pointer + 1;
	    Sin_output   <= Sin_table[Sin_pointer];
// Sin_output <= 32'd1;
      end else begin // output is not valid 
	    Sin_pointer <= 0;
	    Sin_output  <= 0;
//	  Sin_output  <= 32'd2;
	    Sin_skip    <= 0;
	  end
	end
  end 
  
  ////////////////////////////////////////////////////////////
  //
  // create PRI 
  //
  ////////////////////////////////////////////////////////////

  always @(posedge ce_clk) begin
    if (output_interrupt) begin // reset or new betch from state machine
	  PRI_counter <= 0;
      PW_output   <= 1'b0; 
      data_valid  <= 0;

    end else if (s_axis_data_tready_int == 1 && output_enable == 1) begin
      if (CW_flag) begin      // CW is case that no PW.
//		if (PRI_counter < PRI_len) begin
          PW_output   <= 1'b1; 
//          PRI_counter <= PRI_counter + 1;
          data_valid  <= 1;			
		  end_PRI     <= 0;
		  start_PW    <= 0;
		  end_PW 	  <= 0;
//		end else begin // PRI_counter = PRI_len , start new PRI count
//          PW_output   <= 1'b1; 
//  		  PRI_counter <= 0;
//		  end_PRI     <= 1;
//          data_valid  <= 0;			
//		end

      end else begin  // not CW
		if (PRI_counter == 0) begin   // start new PW
          PW_output   <= 1'b1; 
          PRI_counter <= PRI_counter + 1;
          data_valid  <= 1;
		  end_PRI     <= 0;
		  start_PW    <= 1;
		  end_PW 	  <= 0;
		end else if (PRI_counter < PW_len) begin
          PW_output   <= 1'b1; 
          PRI_counter <= PRI_counter + 1;
          data_valid  <= 1;
		  end_PRI     <= 0;
		  start_PW    <= 0;
		  end_PW 	  <= 0;
		end else if (PRI_counter == PW_len) begin // end of PW
          PW_output   <= 1'b1; 
          PRI_counter <= PRI_counter + 1;
          data_valid  <= 1;
		  end_PRI     <= 0;
		  start_PW    <= 0;
		  end_PW 	  <= 1;
        end else if (PRI_counter < PRI_len) begin
          PW_output   <= 1'b0; 
          PRI_counter <= PRI_counter + 1;
          data_valid  <= 1;
		  end_PRI     <= 0;
		  start_PW    <= 0;
		  end_PW 	  <= 0;
        end else begin   // PRI_counter = PRI_len, start new betch
          PW_output   <= 1'b0; 
          PRI_counter <= 16'd0;
          data_valid  <= 1; 
		  end_PRI     <= 1;
		  start_PW    <= 0;
		  end_PW 	  <= 0;
        end 
      end
	end  	
  end 
  
  assign pipe_in_tdata = PW_output ? Sin_output : 32'd0;
  assign pipe_in_tlast = 1'b1;
  assign pipe_in_tvalid = data_valid;
//  assign s_axis_data_tdata = data_out;

  axi_fifo_flop #(.WIDTH(32+1))
  pipeline1_axi_fifo_flop (
    .clk(ce_clk),
    .reset(ce_rst),
    .clear(clear_tx_seqnum),
    .i_tdata({pipe_in_tlast, pipe_in_tdata}), 
    .i_tvalid(pipe_in_tvalid),
    .i_tready(pipe_in_tready),
    .o_tdata({pipe_out_tlast,s_axis_data_tdata}),
    .o_tvalid(s_axis_data_tvalid_int),
    .o_tready(s_axis_data_tready_int)); 

  /* Output Signals */
//  assign pipe_out_tready = s_axis_data_tready;
//  assign s_axis_data_tvalid = pipe_out_tvalid;
//  assign s_axis_data_tlast = pipe_out_tlast;
//  assign s_axis_data_tdata = pipe_out_tdata; 

  /* Simple Loopback */
//  assign m_axis_data_tready = s_axis_data_tready;
/*  assign s_axis_data_tvalid = m_axis_data_tvalid;
  assign s_axis_data_tlast  = m_axis_data_tlast;
  assign s_axis_data_tdata  = m_axis_data_tdata; */

endmodule
<?xml version="1.0"?>
<block>
  <name>RFNoC: TXsource</name>
  <key>modules_TXsource</key>
  <category>modules</category>
  <import>import modules</import>
  <make>modules.TXsource(
          self.device3,
          uhd.stream_args( # TX Stream Args
                cpu_format="fc32",
                otw_format="sc16",
                args="",
          ),
          uhd.stream_args( # RX Stream Args
                cpu_format="$type",
                otw_format="$otw",
                args="",
          ),
          $block_index,
          $device_index
  )

self.$(id).set_arg("spp",  $spp)
self.$(id).set_arg("enable", $enable)
self.$(id).set_arg("pri_mode", $pri_mode)
self.$(id).set_arg("phase_step", $phase_step)
  </make>
  <callback>set_arg("enable", $enable)</callback>
  <callback>set_arg("spp", $spp)</callback>
  <callback>set_arg("pri_mode", $pri_mode)</callback>
  <callback>set_arg("phase_step", $phase_step)</callback>

  <!-- Make one 'param' node for every Parameter you want settable from the GUI.
       Sub-nodes:
       * name
       * key (makes the value accessible as $keyname, e.g. in the make node)
       * type -->

  <param>
    <name>Packet Size</name>
    <key>spp</key>
    <value>364</value>
    <type>int</type>
  </param>

  <param>
    <name>Enable</name>
    <key>enable</key>
    <type>int</type>
    <option>
      <name>True</name>
      <key>1</key>
    </option>
    <option>
      <name>False</name>
      <key>0</key>
    </option>
  </param>

  <param>
    <name>PRI mode</name>
    <key>pri_mode</key>
    <value>0</value>
    <type>int</type>
  </param>

  <param>
    <name>Phase step</name>
    <key>phase_step</key>
    <value>0</value>
    <type>int</type>
  </param>

  <param>
    <name>Host Data Type</name>
    <key>type</key>
    <type>enum</type>
    <option>
      <name>Complex float32</name>
      <key>fc32</key>
      <opt>type:complex</opt>
    </option>
    <option>
      <name>Complex int16</name>
      <key>sc16</key>
      <opt>type:sc16</opt>
    </option>
    <option>
      <name>Byte</name>
      <key>u8</key>
      <opt>type:byte</opt>
    </option>
    <option>
      <name>VITA word32</name>
      <key>item32</key>
      <opt>type:s32</opt>
    </option>
  </param>
  <!--RFNoC basic block configuration -->
  <param>
    <name>Device Select</name>
    <key>device_index</key>
    <value>-1</value>
    <type>int</type>
    <hide>#if int($device_index()) &lt; 0 then 'part' else 'none'#</hide>
    <tab>RFNoC Config</tab>
  </param>

  <param>
    <name>TXsource Select</name>
    <key>block_index</key>
    <value>-1</value>
    <type>int</type>
    <hide>#if int($block_index()) &lt; 0 then 'part' else 'none'#</hide>
    <tab>RFNoC Config</tab>
  </param>

  <param>
    <name>FPGA Module Name</name>
    <key>fpga_module_name</key>
    <value>noc_block_TXsource</value>
    <type>string</type>
    <hide>all</hide>
    <tab>RFNoC Config</tab>
  </param>

  <param>
    <name>Force Vector Length</name>
    <key>grvlen</key>
    <value>1</value>
    <type>int</type>
  </param>

  <param>
    <name>Device Format</name>
    <key>otw</key>
    <type>enum</type>
    <option>
      <name>Complex int16</name>
      <key>sc16</key>
    </option>
    <option>
      <name>Complex int8</name>
      <key>sc8</key>
    </option>
    <option>
      <name>Byte</name>
      <key>u8</key>
    </option>
  </param>

  <!-- Make one 'sink' node per input. Sub-nodes:
       * name (an identifier for the GUI)
       * type
       * vlen
       * optional (set to 1 for optional inputs) -->
<!--  <sink>
    <name>in</name>
    <type>$type.type</type>
    <vlen>$grvlen</vlen>
    <domain>rfnoc</domain>
  </sink> -->

  <!-- Make one 'source' node per output. Sub-nodes:
       * name (an identifier for the GUI)
       * type
       * vlen
       * optional (set to 1 for optional inputs) -->
  <source>
    <name>out</name>
    <type>complex</type>
    <vlen>$grvlen</vlen>
    <domain>rfnoc</domain>
  </source>
</block>
_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to