Skip to main content

more options

For our final project in ECE 5760, we built a sequencer/synthesizer using an Altera DE2 FPGA board for processing and MATLAB for user interface. The synthesizer uses a combination of sampled and additively synthesized sounds to produce various instruments. The FPGA based sequencer takes input from a MATLAB GUI and sequences each instrument separately, allowing the user to make compositions in real-time. Additionally, an automatic gain control algorithm was implemented to ensure that overflow would not result in distorted output.

Our main motivation for pursuing this project was our joint interest in music, and desire to pursue a synthesizer project in addition to our Lab 3, which was a drum head wave equation calculator. We came across some very interesting designs for synthesizers; some of our inspirations including the Monome and the web-based Sembeo synthesizers/sequencers.

High level Design

Rationale

We decided on a music based project because both of us are musically oriented, and we pursue music through many different avenues. One area we were jointly interested in was music computing, including digital synthesis and music composition. Lab 3 was an interesting venture into the world of physical instrument modeling, and we wanted to take this a step further and incorporate it into a synthesizer.

Some of our inspiration came from a device called the Monome, which is set up very similar to our GUI. Also, the Sembeo is set up just like our GUI. Our implementation builds on these designs by adding the ability to sample and store patterns.

Additive Synthesis

This technique uses addition of a fundamental and a few harmonics along with amplitude envelope characteristics to synthesize a musical signal that can imitate any instrument. The main equation for synthesis is

Several harmonics can be chosen with parameters including amplitude, frequency, and phase . The choice of harmonics produce different instruments and timbres. For this project, we decided to use additive synthesis because it was a robust technique that allowed us to form many different types of sounds quickly and easily.

Logical Design

Our design starts with user input to a screen of buttons on a MATLAB GUI. The user input defines the sequences of different instruments. These sequences are periodically pushed out through a National Instruments Analog-Digital Converter into the GPIO port of the Altera DE2 board. Custom Verilog code reads in the sequence data and assigns sequences to 2 main types of instruments: sampled instruments stored in ROM and additively synthesized instruments. In total, 8 instruments are added and sent to a range compressor, which prevents clipping. The final output is sent to the audio codec for sound output.

Hardware/Software Tradeoffs

The reason to implement this system in hardware is to be able to perform synthesis of many instruments in parallel. Polyphony is extremely hard for software; however, in hardware it is simply a matter of connecting many adders together and having a good compressor. We were forced to use MATLAB as a GUI because our original device, the Multi-touch LCD display by Terasic, did not work for our setup. We decided not to use a Nios II, because in our experience, it makes designs unnecessarily complicated.

Relationship to Standards

To the best of our knowledge, there are no standards governing the creation of musical instruments and synthesizers. However, since our system does have sampling capability, we need to make sure all samples are used with knowledge of the distributor/owner. The samples used in this project were obtained on an open source sample website: www.freesound.com.

Patents/Trademarks

The additive synthesis technique for musical synthesis is a well known algorithm. The monome and other associated sound matrix synthesizers are more a form of creativity and expression rather than rigid industrial products such as Korg or Moog synthesizers. Our design does not infringe on any of these IPs, especially because we are not planning to make any of this commercial.

Hardware/Software Design

MATLAB to FPGA

Everything except the user interface in MATLAB was implemented in hardware on the Altera DE2 board, which contains a Cyclone II FPGA. As shown above, the GPIO port is used to read in sequence data from the MATLAB GUI. This data is presented in 16 bit words, 1 for each instrument. A total of 8 instruments were used, so a state machine was built to read in 8 16 bit words. The state diagram for this machine is shown here:

The transitions from Idle 1 to Read upper word and from idle 2 to read lower word occur according to a read_in bit from MATLAB. This bit goes high when the upper 8 bits of a word are ready, and the subsequent negative edge indicates that the lower 8 bits of a word are ready. Along with sending this bit, MATLAB sends the 8 bits simultaneously that can be read in parallel using 8 GPIO ports. The state machine is looped until 8 16 bit words are read. Then the state machine returns to the Idle 1 state to wait for the next set of 8 words. The code for this read in setup is packaged in the data_in.v module.

A NIDAQ USB 6008 was used to transfer data from MATLAB to the GPIO pins. Since the GPIO pins commonly operate at 3.3V, a voltage divider had to be used to step down the voltage from 5V. However, the NIDAQ can only supply up to 8.5 mA, so the resistors had to be on the order of 30 k?. The resistors used for this setup were 30 k? and 18k?. They were placed in the following configuration:

In this configuration, the signal from the NIDAQ is digital and acts as a power source. If the bit is high (or 5V), the out to GPIO is 3 V. Otherwise, the output is close to 0V. The 3 and 0 at the output are sufficient to read in a digital 1 or 0 in the FPGA.

ROM Sampled Instruments

We wanted to include some fresh music samples in our synthesizer to actually have beats that sounded good. I hand picked these samples from the open source website freesound.com. I chose a bass drum, snare drum, and hi hat sound. These sounds were sampled at 44.1 kHz. I extracted the first half of a second of each and downsampled by 2 to reduce the size to 5000 18bit samples per sound. I converted these to fixed point using the MATLAB fixed point toolbox and wrote them into a .v file as ROM. The resulting ROM files are included in sounds.v.

The state machine to read the ROM files when given a 'hit' is shown below. The state machine starts at the Idle 1 state, and stays there until a hit signal is given by the sequencer. Then the state machine goes to the update address state, where it increments the address of the ROM on the positive edge of the Audio DAC clock. This clock is the 48 kHz sampling clock. The state machine stays at Idle 2 until the DAC clock goes low. At this time, the state machine assigns the word from ROM to the audio output. The state machine waits in Idle 3 until the DAC clock goes high and the cycle repeats until 1 of 2 conditions occur. Either the ROM is completely read, or the state machine is told to stop playing by the sequencer.

Additively Synthesized Instruments

These instruments were additively synthesized with three harmonics at integer multiples of the fundamental. Direct digital synthesis was used to generate the harmonics from a sine table of 256 values. DDS works by using a look up table sin wave and sampling points on it at different intervals. The interval is referred to as the increment, and the higher the increment, the higher the pitch that results from sampling the sin wave. Our instruments use 3 harmonics: fundamental, 2*fundamental, and 3*fundamental. Our initial instruments had no amplitude envelope, but our final instruments included an ASR shaped envelope, which is shown below.

The beat to beat interval is calculated in a separate part of Verilog. This interval is calculated using a look up table for all of the possible tempos (50-240 BPM). The LUT consists of the intervals between 2 eighth notes in terms of clock cycles at 50 MHz. To switch to a 16th note, we simply shift the eighth interval right by 2. The end of the attack phase was simply the beat-beat interval divided by 4 or shifted right by 2. The beginning of the release was of the beat interval, which can also be easily calculated using only shifts. The peak of the waveform is at 1, which means the slope can be easily calculated by having a LUT of 1/interval for all possible intervals (same number as all possible tempos). Then we can shift the LUT by 2 to calculate the rising (and falling) slope of the waveform.

The state machine used for this instrument is trivial. It simply adds an increment to an accumulator at 50 MHz. The accumulator is used to index a sine table. All three harmonics are generated and added in this manner. Before the three harmonics are output to the compressor, they are fixed point multiplied with the envelope. Since the envelope is between 0 and 1, this does not amplify or attenuate the signal. The code for additive synthesis is packaged in add_synth.v.

Sequencer

The sequencer takes the data from the GPIO pins and assigns 'hits' to each instrument. It contains a state machine that only has 2 states: rest and play. It runs through the state machine at 50 MHz, but only changes to the play state once every beat. For example, if the beat was in eighth notes, the state machine would go to the play state on every eighth note and then immediately back to the rest state, where it would stay for a prescribed number of clock cycles. The number of clock cycles is determined by a LUT, which contains number of clock cycles between eighth notes for tempos between 50 and 240 BPM. In the play state, the sequencer can assign hits to any instruments that need to be hit.

An interesting problem we had to deal with was high tempo play. At higher tempos, some of the ROM instruments would not be done before they were hit again. To get around this issue, we simply issued a stop command to each instrument about 100-200 cycles before they would be hit again.

Compressor

In order to output sound, all of the individual instruments need to be added together at each time step. However, we quickly run into the problem of overflow when adding the sounds, as the sound output of each instrument is encoded in 2.16 fixed-point, which is 18 bits long, and the final input into the audio codec needs to be 16 bits. For a single instrument, the solution is easy as the two least significant bits can be cutoff, giving the audio codec a 2.14 fixed-point input. However, when adding more instruments, the number of digits in the exponent, which are the most significant bits to the left of the decimal point, could increase, and in addition the sign bit also shifts over. Thus, a compressor is required to select which bits of the sum of all instruments to send to the audio codec.

The first major choice when designing the compressor was whether to make it static or dynamic. A static compressor applies a constant shift to the audio output. The advantages of this approach would be that it would be easy to implement and each instrument's amplitude would stay constant. However, it would also mean that the total audio amplitude would vary based on how many instruments were playing. The other option, a dynamic compressor, would scale the audio signal based on how many instruments are playing. While a dynamic compressor would keep steadier output amplitude, it is a bit more challenging to implement. Which type of compression is superior is also up for debate. Many audio professionals believe that dynamic compression distorts sound even though to the average listener dynamic compression sounds better as sounds have more 'kick'. We decided to go with dynamic compression as the amplitude difference between one instrument playing and 8 instruments playing was so large that if the volume on the speakers was turned up high enough to hear a single instrument then eight instruments would cause overflow on the analog end of the speaker system.

To properly scale the audio, we need to check at least a single period of each frequency to find the amplitude. We found the smallest possible frequency among our instruments to be the bass drum with a fundamental frequency of 50Hz. Thus, when running a 48kHz audio output, we need to check a history of 48000/50=960 samples to make sure the amplitude of all frequencies present is accounted for. We implemented this history by using a set of counters, one for each overflow bit. For example, if the sound overflows by one bit then the respective counter will reset to 960 and count own every 48kHz cycle. The audio output will then be compressed down by one bit for the next 960 cycles. If another 1 bit overflow is detected at the input during that time, then the counter is reset back to 960. The counter representing the highest overflow always takes precedence. So, for example, if both a 3 bit and 1 bit overflow are detected the output will be compressed by 3 bits until the 3 bit counter reaches zero.

Software

The software GUI uses a matrix format to represent time and instruments. Time is on the horizontal axis. Depending on the division selected by the user, each tick can either be an eighth note or a sixteenth note. The vertical axis represents different instruments. Together, the matrix provides a way to play every possible combination of instruments and times. This format was inspired by a popular Sound Matrix synthesizer called Sembeo. An example of our GUI is shown here:


The user simply has to click on a button to activate an instrument at that tick. The buttons are togglebuttons in MATLAB, which means they change color and state upon activation and deactivation. In MATLAB, a callback can be generated each time a button is clicked, and the state of all the buttons in the system can be kept in a matrix. These states are reactive since they are updated only when a user clicks. However, the data transfer from MATLAB to the FPGA is periodic to ensure that rapid clicking from the user does not clog the data stream. Data is sent to the FPGA at 50Hz every 2 seconds. Due to overhead in MATLAB, sending data faster than 50 Hz is unreliable.

Some extra features were included to let the user save a drum pattern. This corresponds to all of the ROM sampled instruments. When the save button is clicked, the three rows corresponding to these instruments are saved in MATLAB. The user can then clear the instruments or change the pattern. The user can return to the saved pattern at any time by pressing the load pattern button. The load button essentially updates the state of the instruments by loading in the saved pattern. The same functions were implemented for the additively synthesized instruments.

Acknowledgements for Code

The code for the sine table was taken from a previous ECE 5760 project, Additively Synthesized Ocarina by Joe Montanino. The rest of the additive synthesis code was written from scratch. The code for the ports in the top module were written by Bruce Land.

Things which did not Work

Possibly the most frustrating part of our project was spending a few weeks obtaining and working the Terasic Multi-touch LCD display. The demo code supplied with the display did not load and technical support, though active, was not very helpful. The display had come with a painter demo, which used a NIOS to control user input and graphical output. The Verilog compiled properly, but when we created a NIOS II IDE project and included all of the .h and .c files, an odd error occurred where the program would clear half of the screen and then get stuck in an infinite loop. The reason for the infinite loop was unclear and tech support determined that the demo could not be run on Quartus II 11.0 and Nios II 11.0 without modifications to some of the hardware infrastructure. We had to switch to a MATLAB display very late in the game. As a result of the lost time, we were not able to implement more complex synthesis algorithms as we had hoped.

Another element that we could not integrate into the final project was the PDE realtime drum machie which we had written for lab 3. We ran into several issues in compressing the audio output of the drums such that it would be compatible with the oter instruments. In addition, at one point we lost a working version of the drum machine and had to try and rebuild it from an older version. Because of these issues we eventaly decided to not pursue incorporating the drum machine into our final project.

Results

The design met our expectations in that the music was synthesized on time and in the appropriate sequence. The user interface was friendly and quickly conveyed information from the user to the FPGA. The software functions to store and clear patterns were useful and worked as expected. The compression algorithm was able to prevent overflow and distorted sounds, while the envelope for the additively synthesized instruments was able to cut off instruments before the next beat.

Our design used all of the memory bits in the FPGA due to the ROM sampled instruments as well as LUT for tempo and sine waves. Our design did not make too much use of the logic elements because we could not experiment with more computationally heavy synthesis algorithms after we lost time with the Terasic display. Adding the envelope to more than 3 additively synthesized instruments increased the memory usage beyond the FPGA capacity. Interestingly, when we tried to reduce the entries in ROM for the sampled instruments in order to make more space, the compilation got stuck at 80% and we stopped the compilation after 30 minutes. So we created 2 separate implementations, one with ROM instruments and non-enveloped additive instruments and another with just enveloped additive instruments.

The additive instruments were played through speakers and held up to a guitar tuner. They registered within 5 cents of the intended note every time. Our design was not hazardous to human health. The only concern was having speakers too close to our ears when we were having overflow issues in the beginning. This implementation is very usable by other people because it just involves clicking buttons in MATLAB. Ideally, we would have liked the touch screen display because it would have provided even better usability.

Some compositions made by Akshay are included here. The first 2 compositions use a combination of ROM and additive instruments to create a full band experience. The scale used in the melodic instruments is taken from Two Pages by Philip Glass. The last composition uses only additive instruments and explores odd intervals, chord changes, and more.



Conclusion

As musicians, the implementation was extremely fun for us. After we got a first prototype, we spent many hours finding cool new beats and chord combinations. Additionally, the save and load pattern features allowed us to make compositions and real-time and be experimental/creative with our music. The design met our expectations of providing a user-friendly, real-time, synthesis/sequencer.

We have some thoughts for what we might do next time. We would make sure that there is sufficient documentation for a product before we ask for it. The MTL display was not sufficiently tested and very new. Thus, we encountered several insurmountable bugs that halted any progress. Next time, we would also plan our project so that we could do the music synthesis and touch screen interface in parallel as opposed to sequentially. This would ensure progress in some area.

If we had some more time we would definitely look into alternative synthesis methods and include a wider variety of instruments in our sequencer. We did a drum head synthesizer for Lab 3, but there are methods to calculate the wave equation on more complex surfaces. This would be an area that we would explore further.

Intellectual Property Considerations

The code was written in Verilog in Altera's Quartus II 11.1 64 bit. The design instantiated several of Alteras megafunctions including ROM, multiplication, and PLLs. Where necessary, Altera and Terasic were referenced at the top of .v files.

As mentioned before, we reused a sin table from Joe Montanino's ECE 5760 Project last year. The rest of the synthesizer code was written from scratch.

The samples stored in ROM were taken from the public domain on the website freesound.com, of which one of the teammates is a member.

There were no non-disclosure or intellectually sensitive materials involved in this project.

Patent opportunities are unlikely for this project since many synthesizers and topologies have been proposed in the past 30 years.

Legal Considerations

We are not infringing on any standards, restrictions, or codes of conduct with our project.

Appendices

Program Listing

BPGA.v

The top file, also contains code for sequencer, compressor, and sampled instruments

Exported from Notepad++
module BPGA ( //////////////////////// Module Inputs/Outputs //////////////////////// //////////////////////// Not Included in Report //////////////////////// ); //////////////////////// Input/Output Assignments //////////////////////// //////////////////////// Not Included in Report //////////////////////// wire VGA_CTRL_CLK; wire AUD_CTRL_CLK; wire DLY_RST; assign TD_RESET = 1'b1; // Allow 27 MHz assign AUD_ADCLRCK = AUD_DACLRCK; assign AUD_XCK = AUD_CTRL_CLK; Reset_Delay r0 ( .iCLK(CLOCK_50),.oRESET(DLY_RST) ); VGA_Audio_PLL p1 ( .areset(~DLY_RST),.inclk0(CLOCK_27),.c0(VGA_CTRL_CLK),.c1(AUD_CTRL_CLK),.c2(VGA_CLK) ); //Define Audio sampling clock and Codec AUDIO_DAC_ADC u4 ( // Audio Side .oAUD_BCK(AUD_BCLK), .oAUD_DATA(AUD_DACDAT), .oAUD_LRCK(AUD_DACLRCK), .iAUD_ADCDAT(AUD_ADCDAT), .iAUD_extL(out2AUD_wire), .iAUD_extR(out2AUD_wire), // Control Signals .iCLK_18_4(AUD_CTRL_CLK), .iRST_N(DLY_RST) ); //Define wires and regs reg signed [17:0] out2AUD; //Codec uses 16 bit 2's complement wire signed [15:0] out2AUD_wire; wire state_clk; wire mem_clk; wire sreset, tempo_up, tempo_down; wire [4:0] shift_amt; assign state_clk = CLOCK_50; //clock to run state machine assign mem_clk = CLOCK_50 ; assign shift_amt = 5'b01100; //BUTTONS USED assign sreset = (~KEY[0]); assign tempo_up = (~KEY[2]); assign tempo_down = (~KEY[3]); ////////////////////////////////////////////////////////////////////////////// wire signed [21:0] audio_sum = {{4{out_add1f[17]}}, out_add1f} + {{4{out_add2f[17]}}, out_add2f} + {{4{out_add3f[17]}}, out_add3f} + {{4{out_add4f[17]}}, out_add4f} + {{4{out_add5f[17]}}, out_add5f} + {{4{out_add6f[17]}}, out_add6f} + {{4{out_add7f[17]}}, out_add7f} + {{4{out_add8f[17]}}, out_add8f}; //Assign actual audio output always @ (posedge CLOCK_50) begin //Uncomment right side to switch between compressed and not compressed audio out2AUD = audio_sum[18:1];//SW[1] ? out_mix: ((out_add1f+out_add2f+out_add3f+out_add4f)>>>1+(out_add5f+out_add6f+out_add7f+out_add8f)>>>1); end assign out2AUD_wire = out2AUD[17:2]; //COMPRESSOR - inputs all audio from instruments and outputs one mixed audio stream wire signed [17:0] out_mix; combine_audio comb(.audio_clk(AUD_DACLRCK), .inst0({4'b0,out_add1f}), .inst1({4'b0,out_add2f}), .inst2({4'b0,out_add3f}), .inst3({4'b0,out_add4f}), .inst4({4'b0,out_add5f}), .inst5({4'b0,out_add6f}), .inst6({4'b0,out_add7f}), .inst7({4'b0,out_add8f}), .audio_out(out_mix)); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //ADDITIVE SYNTHESIS wire [13:0] out_add1, out_add2, out_add3, out_add4, out_add5, out_add6, out_add7, out_add8; wire signed [17:0] out_add1f, out_add2f, out_add3f, out_add4f, out_add5f, out_add6f, out_add7f, out_add8f; wire signed [17:0] add1, add2, add3, add4, add5; //Define all instruments add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd146), .hit_add(hit_bass), .stop_add(stop_inst), .out(out_add1), .outf(out_add1f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd156), .hit_add(hit_snare), .stop_add(stop_inst), .out(out_add2), .outf(out_add2f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd175), .hit_add(hit_hat), .stop_add(stop_inst), .out(out_add3), .outf(out_add3f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd196), .hit_add(hit_add1), .stop_add(stop_inst), .out(out_add4), .outf(out_add4f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd262), .hit_add(hit_add2), .stop_add(stop_inst), .out(out_add5), .outf(out_add5f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd294), .hit_add(hit_add3), .stop_add(stop_inst), .out(out_add6), .outf(out_add6f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd311), .hit_add(hit_add4), .stop_add(stop_inst), .out(out_add7), .outf(out_add7f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); add_synth(.clk(CLOCK_50), .clk_samp(AUD_DACLRCK), .freq(10'd349), .hit_add(hit_add5), .stop_add(stop_inst), .out(out_add8), .outf(out_add8f), .cycles_per_beat(cycles_per_beat), .division(division), .tempo_addr(tempo_addr), .s8(s8)); assign add1 = {out_add1[13], out_add1, 3'b0}; assign add2 = {out_add2[13], out_add2, 3'b0}; assign add3 = {out_add3[13], out_add3, 3'b0}; assign add4 = {out_add4[13], out_add4, 3'b0}; assign add5 = {out_add5[13], out_add5, 3'b0}; //Slope for envelope, use LUT slope8 to get 1/cycles_per_beat wire signed [17:0] s8; slope8(.clock(CLOCK_50), .address(tempo_addr), .data_out(s8)); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //SAMPLED SOUNDS parameter N=13'd5000; parameter idle_bass=3'd0, update_bass=3'd1, assign_bass=3'd2, idle_bass2=3'd3, idle_bass3=3'd4; parameter idle_snare=3'd0, update_snare=3'd1, assign_snare=3'd2, idle_snare2=3'd3, idle_snare3=3'd4; parameter idle_hat=3'd0, update_hat=3'd1, assign_hat=3'd2, idle_hat2=3'd3, idle_hat3=3'd4; reg [13:0] bass_addr, snare_addr, hat_addr; wire signed [17:0] bass_rom, snare_rom, hat_rom; reg signed [17:0] bass_out, snare_out, hat_out; reg [2:0] state_bass, state_snare, state_hat; bass (.clock(CLOCK_50), .address(bass_addr), .data_out(bass_rom)); snare (.clock(CLOCK_50), .address(snare_addr), .data_out(snare_rom)); hat (.clock(CLOCK_50), .address(hat_addr), .data_out(hat_rom)); //READ IN SEQUENCE DATA FROM GPIO data_in(.clk(CLOCK_27), .reset(sreset), .GPIO(GPIO_0), .snare_seq(snare_seq), .bass_seq(bass_seq), .hat_seq(hat_seq), .outLED(LEDG[3:0]), .add1_seq(add1_seq), .add2_seq(add2_seq), .add3_seq(add3_seq), .add4_seq(add4_seq), .add5_seq(add5_seq)); //Bass drum state machine, toggle_bass is required to cut sampling rate in half because the sampled sounds were downsampled by 2! assign LEDR[17:15] = state_bass; reg toggle_bass; always @ (posedge CLOCK_27) begin if (stop_samp) begin state_bass <= idle_bass; end else begin case (state_bass) //Wait for hit idle_bass: begin state_bass <= (hit_bass) ? update_bass: idle_bass; bass_addr <= 13'b0; bass_out <= 18'b0; end //Update ROM address on high cycle of AUD_DACLRCK update_bass: begin state_bass <= (bass_addr<N) ? idle_bass2: idle_bass; bass_addr <= (toggle_bass) ? bass_addr: (bass_addr + 1'b1); toggle_bass <= !toggle_bass; end //Wait for low cycle of AUD_DACLRCK idle_bass2: begin state_bass <= (AUD_DACLRCK) ? idle_bass2: assign_bass; end //Assign audio output on low cycle of AUD_DACLRCK assign_bass: begin state_bass <= idle_bass3; bass_out <= bass_rom; end //Wait for high cycle of AUD_DACLRCK idle_bass3: begin state_bass <= (AUD_DACLRCK) ? update_bass: idle_bass3; end default: state_bass <= idle_bass; endcase end end //Snare state machine, see comments from bass state machine reg toggle_snare; always @ (posedge CLOCK_27) begin if (stop_samp) begin state_snare <= idle_snare; end else begin case (state_snare) idle_snare: begin state_snare <= (hit_snare) ? update_snare: idle_snare; snare_addr <= 13'b0; snare_out <= 18'b0; end update_snare: begin state_snare <= (snare_addr<N) ? idle_snare2: idle_snare; snare_addr <= (toggle_snare) ? snare_addr: (snare_addr + 1'b1); toggle_snare <= !toggle_snare; end idle_snare2: begin state_snare <= (AUD_DACLRCK) ? idle_snare2: assign_snare; end assign_snare: begin state_snare <= idle_snare3; snare_out <= snare_rom; end idle_snare3: begin state_snare <= (AUD_DACLRCK) ? update_snare: idle_snare3; end default: state_snare <= idle_snare; endcase end end //Hat state machine, see comments from bass state machine reg toggle_hat; always @ (posedge CLOCK_27) begin if (stop_samp) begin state_hat <= idle_hat; end else begin case (state_hat) idle_hat: begin state_hat <= (hit_hat) ? update_hat: idle_hat; hat_addr <= 13'b0; hat_out <= 18'b0; end update_hat: begin state_hat <= (hat_addr<N) ? idle_hat2: idle_hat; hat_addr <= (toggle_hat) ? hat_addr: (hat_addr + 1'b1); toggle_hat <= !toggle_hat; end idle_hat2: begin state_hat <= (AUD_DACLRCK) ? idle_hat2: assign_hat; end assign_hat: begin state_hat <= idle_hat3; hat_out <= hat_rom; end idle_hat3: begin state_hat <= (AUD_DACLRCK) ? update_hat: idle_hat3; end default: state_hat <= idle_hat; endcase end end ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// //SEQUENCER CODE parameter TEMPO_FACTOR = 32'd3000000000; //Clock frequency (cyc/sec) * 60 sec parameter STATE_PLAY = 4'd0; parameter STATE_REST = 4'd1; wire [15:0] bass_seq, snare_seq, hat_seq, add1_seq, add2_seq, add3_seq, add4_seq, add5_seq; //use switches for sequencing reg [8:0] tempo = 9'd130; //tempo in beats per min reg [31:0] time_count; wire [31:0] time_count_n, cycles_per_beat; wire [1:0] division; //subdivision, 1 corresponds to eigth note, 2 is sixteenth reg [3:0] curr_beat, seq_state; wire [3:0] curr_beat_n; reg [7:0] tempo_addr = 8'b10000000; wire [31:0] eight_out, sixteen_out; reg [31:0] count; reg hit_bass, hit_snare, hit_hat, stop_inst, stop_samp, hit_add1, hit_add2, hit_add3, hit_add4, hit_add5; //SEQUENCER STATE MACHINE always @ (posedge CLOCK_50) begin if (sreset) begin time_count <= 32'b0; curr_beat <= 4'b0; end else begin case (seq_state) //This happens on every beat, then go to rest //Just assign outputs based on all sequences STATE_PLAY: begin hit_bass <= bass_seq[curr_beat]; hit_snare <= snare_seq[curr_beat]; hit_hat <= hat_seq[curr_beat]; hit_add1 <= add1_seq[curr_beat]; hit_add2 <= add2_seq[curr_beat]; hit_add3 <= add3_seq[curr_beat]; hit_add4 <= add4_seq[curr_beat]; hit_add5 <= add5_seq[curr_beat]; seq_state <= STATE_REST; time_count <= 32'b0; stop_inst <= 1'b0; stop_samp <= 1'b0; end //Stop all instrument outputs about 10000 cycles before next hit to prevent overlap and overflow STATE_REST: begin stop_inst <= (time_count > (cycles_per_beat-10000)) ? 1'b1: 1'b0; stop_samp <= (time_count > (cycles_per_beat-100)) ? 1'b1: 1'b0; hit_bass <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_bass; hit_snare <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_snare; hit_hat <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_hat; hit_add1 <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_add1; hit_add2 <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_add2; hit_add3 <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_add3; hit_add4 <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_add4; hit_add5 <= (time_count > (cycles_per_beat-10000)) ? 1'b0: hit_add5; time_count <= time_count_n; if (time_count >= cycles_per_beat) begin curr_beat <= curr_beat_n; seq_state <= STATE_PLAY; end end default: seq_state <= STATE_REST; endcase end end assign time_count_n = time_count + 32'b1; assign curr_beat_n = (curr_beat == 4'd0) ? 4'd15 : (curr_beat-4'd1); //wrap around current beat assign division = (SW[0]) ? 4'd2: 4'd1; //enforce either sixteen or eight note divisions //TEMPO FETCH always @ (posedge CLOCK_50) begin //interrupt at 100 ms intervals when up or down is pressed count = (tempo_up || tempo_down) ? (count+32'b1) : 32'b0; if (count >= 32'd1000000) begin count = 0; //increment or decrement tempo address, enforce boundaries (40-250 BPM) if (tempo_up) tempo_addr = (tempo_addr < 8'b11010010) ? (tempo_addr+1'd1): tempo_addr; else tempo_addr = (tempo_addr > 8'b00000000) ? (tempo_addr-1'd1): tempo_addr; end end //Look up table to get cycles_per_beat based on a sixteenth note interval sixteen_note sixteen(.clock(CLOCK_50), .address(tempo_addr), .data_out(sixteen_out)); assign cycles_per_beat = (division == 4'd2) ? sixteen_out: (sixteen_out<<1); // pick cycles per beat based on division endmodule

data_in.v

Module to read in sequences from GPIO

Exported from Notepad++
//The purpose of this module is to read in 8 16 bit words from MATLAB through the GPIO pins //Inputs - clk (CLOCK_27), reset, GPIO (GPIO_0) //Outputs - all instruments sequences, and outLED for debugging module data_in (clk, reset, GPIO, snare_seq, bass_seq, hat_seq, outLED, add1_seq, add2_seq, add3_seq, add4_seq, add5_seq); ////////////////////////////////////////////////////////////////////////////// //CODE FOR CLOCKS wire CLOCK_HALF; reg count_half; wire cound_half_n; //make 27/2 MHz clock to really slow down the input gathering always @ (posedge clk) begin count_half <= count_half_n; end assign count_half_n = (count_half == 1'b1) ? 1'b0: 1'b1; assign CLOCK_HALF = count_half; ////////////////////////////////////////////////////////////////////// //THIS IS MY CODE FOR GPIO INPUT //Define ins and outs input clk, reset; input [35:0] GPIO; output reg [15:0] snare_seq, bass_seq, hat_seq, add1_seq, add2_seq, add3_seq, add4_seq, add5_seq; output [3:0] outLED; //define state parameters localparam idle_io=4'd0, msb_io=4'd6, idle2_io=4'd2, lsb_io=4'd3, idle3_io=4'd4, send_io=4'd5, M=4'd8; //Define local wires and regs wire read_in = GPIO[8]; reg [15:0] new_word; reg word_done, input_almost_done, input_done; reg [7:0] word_counter; reg [3:0] state_io; reg [15:0] temp_data[0:7]; //State machine operates at 13.5 MHz always @ (posedge CLOCK_HALF) begin if (reset) begin state_io <= idle_io; word_counter <= 7'b0; end else begin case (state_io) //Wait for high on read_in bit idle_io: begin state_io <= (read_in) ? msb_io: idle_io; end //Read in top half of word msb_io: begin new_word[15:8] <= {GPIO[0],GPIO[1],GPIO[2],GPIO[3],GPIO[4],GPIO[5],GPIO[6],GPIO[7]}; state_io <= idle2_io; end //Wait for low on read_in bit idle2_io: begin state_io <= (read_in) ? idle2_io: lsb_io; end //Read in bottom half of word lsb_io: begin new_word[7:0] <= {GPIO[0],GPIO[1],GPIO[2],GPIO[3],GPIO[4],GPIO[5],GPIO[6],GPIO[7]}; word_counter <= word_counter + 1'b1; state_io <= idle3_io; end //Wait for next word unlesss 8 words have been read idle3_io: begin temp_data[word_counter - 1] <= new_word; state_io <= (word_counter == M) ? send_io: idle_io; end //Assign all read words to output sequences send_io: begin bass_seq <= temp_data[0]; snare_seq <= temp_data[1]; hat_seq <= temp_data[2]; add1_seq <= temp_data[3]; add2_seq <= temp_data[4]; add3_seq <= temp_data[5]; add4_seq <= temp_data[6]; add5_seq <= temp_data[7]; word_counter <= 8'b0; state_io <= idle_io; end default: begin state_io <= idle_io; end endcase end end assign outLED = state_io; endmodule //////////////////////////////////////////////////////////////////////

add_synth.v

Module to additively synthesize notes

Exported from Notepad++
//The purpose of this module is to generate additively synthesized sounds upon a trigger 'hit_add' //Inputs - clk (CLOCK_50), clk_samp (AUD_DACLRCK or the sampling clock), freq (the fundamental in Hz), //hit_add - a positive edge triggers a hit, stop_add - on high triggers stop, cycles_per_beat - cycles of 50MHz between eighth notes //tempo_addr - the address corresponding to the tempo in the cycles_per_beat LUT, s8 - 1/cycles_per_beat (from LUT) //Outputs - out - non-enveloped 14 bit output, outf - enveloped 2.16 output, module add_synth(clk, clk_samp, freq, hit_add, stop_add, out, outf, cycles_per_beat, division, tempo_addr, s8); //Define inputs/outputs input clk, hit_add, stop_add, clk_samp; input [9:0] freq; input [1:0] division; input [7:0] tempo_addr; input [31:0] cycles_per_beat; output reg [13:0] out; output reg signed [17:0] outf; input signed [17:0] s8; //Define states localparam idle_add=2'd0, update_add=2'd1, assign_add=2'd2; //Define local wires/regs reg [31:0] acc1, acc2, acc3; wire [31:0] inc; reg [31:0] decayt, sustaint, releaset, attackt, fallt; wire [9:0] sin1, sin2, sin3; wire signed [17:0] sin1f, sin2f, sin3f; reg [1:0] state_add; reg [31:0] time_count, time_count2; wire signed [17:0] slope, slope_inc; reg signed [17:0] env; wire signed [35:0] mult_out; //Additive state machine at CLOCK_50 always @ (posedge clk) begin case (state_add) //Be ready to hit at any time idle_add: begin state_add <= (hit_add) ? update_add: idle_add; time_count <= 10'b0; //decayt <= (cycles_per_beat>>3); //Key Envelope time points (1/4, 3/4 of cycles_per_beat) sustaint <= (cycles_per_beat>>1)+(cycles_per_beat>>2); releaset <= (cycles_per_beat>>1)+(cycles_per_beat>>2)+(cycles_per_beat>>3)+(cycles_per_beat>>4); attackt <= (cycles_per_beat>>2); fallt <= cycles_per_beat; time_count <= 32'b0; time_count2 <= 32'b0; env <= 18'b0; end //Once hit, keep updating to generate appropriate frequency and amplitude envelope update_add: begin //Increment DDS registers acc1 <= acc1 + inc; acc2 <= acc2 + inc<<1; acc3 <= acc3 + inc<<1 + inc; state_add <= (stop_add) ? idle_add: update_add; //Apply envelope depending on where we are in the beat-to-beat cycle if (time_count >= 14'd10000) begin time_count <= 32'b0; //In first 1/4, increment envelope, then sustain in next 1/2, then decrement envelope to 0 in next 1/4 env <= (time_count2 <= attackt) ? (env+slope_inc): ((time_count2<=sustaint) ? (env): ((time_count2<=fallt) ? (env-slope_inc): 18'b0)); end else begin time_count <= time_count + 1'b1; end time_count2 <= time_count2 + 1'b1; end default: begin state_add <= idle_add; end endcase end //Assign DDS increment assign inc = (43 * freq)<<2; //Assign outputs always @ (posedge clk_samp) begin out <= sin1 + sin2 + (sin3>>1); outf <= {mult_out[35], mult_out[32:16]}; end //Generate three harmonics from sine table below tab(.clock(clk), .address(acc1[31:24]), .sine(sin1)); tab(.clock(clk), .address(acc2[31:24]), .sine(sin2)); tab(.clock(clk), .address(acc3[31:24]), .sine(sin3)); //Change slope based on 1/8th note or 1/16th note (division) assign slope = (division==4'd2) ? (s8>>>1): s8; assign slope_inc = (slope << 2)+(slope<<1); //slope = 1/(8x) assign mult_out = env*{out[13], out, 3'b0}; //multiply envelope by output to get 2.16 number endmodule /////////////////////////////////////////////// // Infer ROM storage // for a sin table for the DDS // Taken from Joe Montanino, Additive Ocarina: // http://people.ece.cornell.edu/land/courses/ece5760/FinalProjects/f2011/emr76_jmm536/emr76_jmm536/index.html module tab (clock, address, sine); input clock; input [7:0] address; output [9:0] sine; reg [9:0] sine; always @ (posedge clock) begin case (address) 8'h00: sine = 10'h200 ; 8'h01: sine = 10'h20c ; 8'h02: sine = 10'h219 ; 8'h03: sine = 10'h225 ; 8'h04: sine = 10'h232 ; 8'h05: sine = 10'h23e ; 8'h06: sine = 10'h24a ; 8'h07: sine = 10'h257 ; 8'h08: sine = 10'h263 ; 8'h09: sine = 10'h26f ; 8'h0a: sine = 10'h27c ; 8'h0b: sine = 10'h288 ; 8'h0c: sine = 10'h294 ; 8'h0d: sine = 10'h2a0 ; 8'h0e: sine = 10'h2ac ; 8'h0f: sine = 10'h2b7 ; 8'h10: sine = 10'h2c3 ; 8'h11: sine = 10'h2cf ; 8'h12: sine = 10'h2da ; 8'h13: sine = 10'h2e5 ; 8'h14: sine = 10'h2f0 ; 8'h15: sine = 10'h2fb ; 8'h16: sine = 10'h306 ; 8'h17: sine = 10'h311 ; 8'h18: sine = 10'h31b ; 8'h19: sine = 10'h326 ; 8'h1a: sine = 10'h330 ; 8'h1b: sine = 10'h33a ; 8'h1c: sine = 10'h344 ; 8'h1d: sine = 10'h34d ; 8'h1e: sine = 10'h357 ; 8'h1f: sine = 10'h360 ; 8'h20: sine = 10'h369 ; 8'h21: sine = 10'h372 ; 8'h22: sine = 10'h37a ; 8'h23: sine = 10'h382 ; 8'h24: sine = 10'h38b ; 8'h25: sine = 10'h392 ; 8'h26: sine = 10'h39a ; 8'h27: sine = 10'h3a1 ; 8'h28: sine = 10'h3a8 ; 8'h29: sine = 10'h3af ; 8'h2a: sine = 10'h3b6 ; 8'h2b: sine = 10'h3bc ; 8'h2c: sine = 10'h3c2 ; 8'h2d: sine = 10'h3c8 ; 8'h2e: sine = 10'h3cd ; 8'h2f: sine = 10'h3d3 ; 8'h30: sine = 10'h3d8 ; 8'h31: sine = 10'h3dc ; 8'h32: sine = 10'h3e1 ; 8'h33: sine = 10'h3e5 ; 8'h34: sine = 10'h3e8 ; 8'h35: sine = 10'h3ec ; 8'h36: sine = 10'h3ef ; 8'h37: sine = 10'h3f2 ; 8'h38: sine = 10'h3f5 ; 8'h39: sine = 10'h3f7 ; 8'h3a: sine = 10'h3f9 ; 8'h3b: sine = 10'h3fb ; 8'h3c: sine = 10'h3fc ; 8'h3d: sine = 10'h3fd ; 8'h3e: sine = 10'h3fe ; 8'h3f: sine = 10'h3fe ; 8'h40: sine = 10'h3ff ; 8'h41: sine = 10'h3fe ; 8'h42: sine = 10'h3fe ; 8'h43: sine = 10'h3fd ; 8'h44: sine = 10'h3fc ; 8'h45: sine = 10'h3fb ; 8'h46: sine = 10'h3f9 ; 8'h47: sine = 10'h3f7 ; 8'h48: sine = 10'h3f5 ; 8'h49: sine = 10'h3f2 ; 8'h4a: sine = 10'h3ef ; 8'h4b: sine = 10'h3ec ; 8'h4c: sine = 10'h3e8 ; 8'h4d: sine = 10'h3e5 ; 8'h4e: sine = 10'h3e1 ; 8'h4f: sine = 10'h3dc ; 8'h50: sine = 10'h3d8 ; 8'h51: sine = 10'h3d3 ; 8'h52: sine = 10'h3cd ; 8'h53: sine = 10'h3c8 ; 8'h54: sine = 10'h3c2 ; 8'h55: sine = 10'h3bc ; 8'h56: sine = 10'h3b6 ; 8'h57: sine = 10'h3af ; 8'h58: sine = 10'h3a8 ; 8'h59: sine = 10'h3a1 ; 8'h5a: sine = 10'h39a ; 8'h5b: sine = 10'h392 ; 8'h5c: sine = 10'h38b ; 8'h5d: sine = 10'h382 ; 8'h5e: sine = 10'h37a ; 8'h5f: sine = 10'h372 ; 8'h60: sine = 10'h369 ; 8'h61: sine = 10'h360 ; 8'h62: sine = 10'h357 ; 8'h63: sine = 10'h34d ; 8'h64: sine = 10'h344 ; 8'h65: sine = 10'h33a ; 8'h66: sine = 10'h330 ; 8'h67: sine = 10'h326 ; 8'h68: sine = 10'h31b ; 8'h69: sine = 10'h311 ; 8'h6a: sine = 10'h306 ; 8'h6b: sine = 10'h2fb ; 8'h6c: sine = 10'h2f0 ; 8'h6d: sine = 10'h2e5 ; 8'h6e: sine = 10'h2da ; 8'h6f: sine = 10'h2cf ; 8'h70: sine = 10'h2c3 ; 8'h71: sine = 10'h2b7 ; 8'h72: sine = 10'h2ac ; 8'h73: sine = 10'h2a0 ; 8'h74: sine = 10'h294 ; 8'h75: sine = 10'h288 ; 8'h76: sine = 10'h27c ; 8'h77: sine = 10'h26f ; 8'h78: sine = 10'h263 ; 8'h79: sine = 10'h257 ; 8'h7a: sine = 10'h24a ; 8'h7b: sine = 10'h23e ; 8'h7c: sine = 10'h232 ; 8'h7d: sine = 10'h225 ; 8'h7e: sine = 10'h219 ; 8'h7f: sine = 10'h20c ; 8'h80: sine = 10'h200 ; 8'h81: sine = 10'h1f3 ; 8'h82: sine = 10'h1e6 ; 8'h83: sine = 10'h1da ; 8'h84: sine = 10'h1cd ; 8'h85: sine = 10'h1c1 ; 8'h86: sine = 10'h1b5 ; 8'h87: sine = 10'h1a8 ; 8'h88: sine = 10'h19c ; 8'h89: sine = 10'h190 ; 8'h8a: sine = 10'h183 ; 8'h8b: sine = 10'h177 ; 8'h8c: sine = 10'h16b ; 8'h8d: sine = 10'h15f ; 8'h8e: sine = 10'h153 ; 8'h8f: sine = 10'h148 ; 8'h90: sine = 10'h13c ; 8'h91: sine = 10'h130 ; 8'h92: sine = 10'h125 ; 8'h93: sine = 10'h11a ; 8'h94: sine = 10'h10f ; 8'h95: sine = 10'h104 ; 8'h96: sine = 10'h0f9 ; 8'h97: sine = 10'h0ee ; 8'h98: sine = 10'h0e4 ; 8'h99: sine = 10'h0d9 ; 8'h9a: sine = 10'h0cf ; 8'h9b: sine = 10'h0c5 ; 8'h9c: sine = 10'h0bb ; 8'h9d: sine = 10'h0b2 ; 8'h9e: sine = 10'h0a8 ; 8'h9f: sine = 10'h09f ; 8'ha0: sine = 10'h096 ; 8'ha1: sine = 10'h08d ; 8'ha2: sine = 10'h085 ; 8'ha3: sine = 10'h07d ; 8'ha4: sine = 10'h074 ; 8'ha5: sine = 10'h06d ; 8'ha6: sine = 10'h065 ; 8'ha7: sine = 10'h05e ; 8'ha8: sine = 10'h057 ; 8'ha9: sine = 10'h050 ; 8'haa: sine = 10'h049 ; 8'hab: sine = 10'h043 ; 8'hac: sine = 10'h03d ; 8'had: sine = 10'h037 ; 8'hae: sine = 10'h032 ; 8'haf: sine = 10'h02c ; 8'hb0: sine = 10'h027 ; 8'hb1: sine = 10'h023 ; 8'hb2: sine = 10'h01e ; 8'hb3: sine = 10'h01a ; 8'hb4: sine = 10'h017 ; 8'hb5: sine = 10'h013 ; 8'hb6: sine = 10'h010 ; 8'hb7: sine = 10'h00d ; 8'hb8: sine = 10'h00a ; 8'hb9: sine = 10'h008 ; 8'hba: sine = 10'h006 ; 8'hbb: sine = 10'h004 ; 8'hbc: sine = 10'h003 ; 8'hbd: sine = 10'h002 ; 8'hbe: sine = 10'h001 ; 8'hbf: sine = 10'h001 ; 8'hc0: sine = 10'h001 ; 8'hc1: sine = 10'h001 ; 8'hc2: sine = 10'h001 ; 8'hc3: sine = 10'h002 ; 8'hc4: sine = 10'h003 ; 8'hc5: sine = 10'h004 ; 8'hc6: sine = 10'h006 ; 8'hc7: sine = 10'h008 ; 8'hc8: sine = 10'h00a ; 8'hc9: sine = 10'h00d ; 8'hca: sine = 10'h010 ; 8'hcb: sine = 10'h013 ; 8'hcc: sine = 10'h017 ; 8'hcd: sine = 10'h01a ; 8'hce: sine = 10'h01e ; 8'hcf: sine = 10'h023 ; 8'hd0: sine = 10'h027 ; 8'hd1: sine = 10'h02c ; 8'hd2: sine = 10'h032 ; 8'hd3: sine = 10'h037 ; 8'hd4: sine = 10'h03d ; 8'hd5: sine = 10'h043 ; 8'hd6: sine = 10'h049 ; 8'hd7: sine = 10'h050 ; 8'hd8: sine = 10'h057 ; 8'hd9: sine = 10'h05e ; 8'hda: sine = 10'h065 ; 8'hdb: sine = 10'h06d ; 8'hdc: sine = 10'h074 ; 8'hdd: sine = 10'h07d ; 8'hde: sine = 10'h085 ; 8'hdf: sine = 10'h08d ; 8'he0: sine = 10'h096 ; 8'he1: sine = 10'h09f ; 8'he2: sine = 10'h0a8 ; 8'he3: sine = 10'h0b2 ; 8'he4: sine = 10'h0bb ; 8'he5: sine = 10'h0c5 ; 8'he6: sine = 10'h0cf ; 8'he7: sine = 10'h0d9 ; 8'he8: sine = 10'h0e4 ; 8'he9: sine = 10'h0ee ; 8'hea: sine = 10'h0f9 ; 8'heb: sine = 10'h104 ; 8'hec: sine = 10'h10f ; 8'hed: sine = 10'h11a ; 8'hee: sine = 10'h125 ; 8'hef: sine = 10'h130 ; 8'hf0: sine = 10'h13c ; 8'hf1: sine = 10'h148 ; 8'hf2: sine = 10'h153 ; 8'hf3: sine = 10'h15f ; 8'hf4: sine = 10'h16b ; 8'hf5: sine = 10'h177 ; 8'hf6: sine = 10'h183 ; 8'hf7: sine = 10'h190 ; 8'hf8: sine = 10'h19c ; 8'hf9: sine = 10'h1a8 ; 8'hfa: sine = 10'h1b5 ; 8'hfb: sine = 10'h1c1 ; 8'hfc: sine = 10'h1cd ; 8'hfd: sine = 10'h1da ; 8'hfe: sine = 10'h1e6 ; 8'hff: sine = 10'h1f3 ; endcase end endmodule

slope_ROM.v

LUT of 1/cycles

Exported from Notepad++
//The purpose of this LUT is to give back 1/cycles_per_beat where cycles_per_beat is the number of 50MHz cycles in between 2 eighth notes //The address corresponds to the tempo and goes from 50-240BPM in intervals of 1 BPM module slope8 (clock, address, data_out); input clock; input [7:0] address; output [17:0] data_out; reg [17:0] data_out; always @ (posedge clock) begin case (address) 8'b00000000: data_out = 18'h00011; 8'b00000001: data_out = 18'h00012; 8'b00000010: data_out = 18'h00012; 8'b00000011: data_out = 18'h00013; 8'b00000100: data_out = 18'h00013; 8'b00000101: data_out = 18'h00014; 8'b00000110: data_out = 18'h00014; 8'b00000111: data_out = 18'h00015; 8'b00001000: data_out = 18'h00015; 8'b00001001: data_out = 18'h00015; 8'b00001010: data_out = 18'h00016; 8'b00001011: data_out = 18'h00016; 8'b00001100: data_out = 18'h00017; 8'b00001101: data_out = 18'h00017; 8'b00001110: data_out = 18'h00018; 8'b00001111: data_out = 18'h00018; 8'b00010000: data_out = 18'h00018; 8'b00010001: data_out = 18'h00019; 8'b00010010: data_out = 18'h00019; 8'b00010011: data_out = 18'h0001a; 8'b00010100: data_out = 18'h0001a; 8'b00010101: data_out = 18'h0001b; 8'b00010110: data_out = 18'h0001b; 8'b00010111: data_out = 18'h0001c; 8'b00011000: data_out = 18'h0001c; 8'b00011001: data_out = 18'h0001c; 8'b00011010: data_out = 18'h0001d; 8'b00011011: data_out = 18'h0001d; 8'b00011100: data_out = 18'h0001e; 8'b00011101: data_out = 18'h0001e; 8'b00011110: data_out = 18'h0001f; 8'b00011111: data_out = 18'h0001f; 8'b00100000: data_out = 18'h0001f; 8'b00100001: data_out = 18'h00020; 8'b00100010: data_out = 18'h00020; 8'b00100011: data_out = 18'h00021; 8'b00100100: data_out = 18'h00021; 8'b00100101: data_out = 18'h00022; 8'b00100110: data_out = 18'h00022; 8'b00100111: data_out = 18'h00023; 8'b00101000: data_out = 18'h00023; 8'b00101001: data_out = 18'h00023; 8'b00101010: data_out = 18'h00024; 8'b00101011: data_out = 18'h00024; 8'b00101100: data_out = 18'h00025; 8'b00101101: data_out = 18'h00025; 8'b00101110: data_out = 18'h00026; 8'b00101111: data_out = 18'h00026; 8'b00110000: data_out = 18'h00026; 8'b00110001: data_out = 18'h00027; 8'b00110010: data_out = 18'h00027; 8'b00110011: data_out = 18'h00028; 8'b00110100: data_out = 18'h00028; 8'b00110101: data_out = 18'h00029; 8'b00110110: data_out = 18'h00029; 8'b00110111: data_out = 18'h0002a; 8'b00111000: data_out = 18'h0002a; 8'b00111001: data_out = 18'h0002a; 8'b00111010: data_out = 18'h0002b; 8'b00111011: data_out = 18'h0002b; 8'b00111100: data_out = 18'h0002c; 8'b00111101: data_out = 18'h0002c; 8'b00111110: data_out = 18'h0002d; 8'b00111111: data_out = 18'h0002d; 8'b01000000: data_out = 18'h0002d; 8'b01000001: data_out = 18'h0002e; 8'b01000010: data_out = 18'h0002e; 8'b01000011: data_out = 18'h0002f; 8'b01000100: data_out = 18'h0002f; 8'b01000101: data_out = 18'h00030; 8'b01000110: data_out = 18'h00030; 8'b01000111: data_out = 18'h00030; 8'b01001000: data_out = 18'h00031; 8'b01001001: data_out = 18'h00031; 8'b01001010: data_out = 18'h00032; 8'b01001011: data_out = 18'h00032; 8'b01001100: data_out = 18'h00033; 8'b01001101: data_out = 18'h00033; 8'b01001110: data_out = 18'h00034; 8'b01001111: data_out = 18'h00034; 8'b01010000: data_out = 18'h00034; 8'b01010001: data_out = 18'h00035; 8'b01010010: data_out = 18'h00035; 8'b01010011: data_out = 18'h00036; 8'b01010100: data_out = 18'h00036; 8'b01010101: data_out = 18'h00037; 8'b01010110: data_out = 18'h00037; 8'b01010111: data_out = 18'h00037; 8'b01011000: data_out = 18'h00038; 8'b01011001: data_out = 18'h00038; 8'b01011010: data_out = 18'h00039; 8'b01011011: data_out = 18'h00039; 8'b01011100: data_out = 18'h0003a; 8'b01011101: data_out = 18'h0003a; 8'b01011110: data_out = 18'h0003b; 8'b01011111: data_out = 18'h0003b; 8'b01100000: data_out = 18'h0003b; 8'b01100001: data_out = 18'h0003c; 8'b01100010: data_out = 18'h0003c; 8'b01100011: data_out = 18'h0003d; 8'b01100100: data_out = 18'h0003d; 8'b01100101: data_out = 18'h0003e; 8'b01100110: data_out = 18'h0003e; 8'b01100111: data_out = 18'h0003e; 8'b01101000: data_out = 18'h0003f; 8'b01101001: data_out = 18'h0003f; 8'b01101010: data_out = 18'h00040; 8'b01101011: data_out = 18'h00040; 8'b01101100: data_out = 18'h00041; 8'b01101101: data_out = 18'h00041; 8'b01101110: data_out = 18'h00042; 8'b01101111: data_out = 18'h00042; 8'b01110000: data_out = 18'h00042; 8'b01110001: data_out = 18'h00043; 8'b01110010: data_out = 18'h00043; 8'b01110011: data_out = 18'h00044; 8'b01110100: data_out = 18'h00044; 8'b01110101: data_out = 18'h00045; 8'b01110110: data_out = 18'h00045; 8'b01110111: data_out = 18'h00045; 8'b01111000: data_out = 18'h00046; 8'b01111001: data_out = 18'h00046; 8'b01111010: data_out = 18'h00047; 8'b01111011: data_out = 18'h00047; 8'b01111100: data_out = 18'h00048; 8'b01111101: data_out = 18'h00048; 8'b01111110: data_out = 18'h00049; 8'b01111111: data_out = 18'h00049; 8'b10000000: data_out = 18'h00049; 8'b10000001: data_out = 18'h0004a; 8'b10000010: data_out = 18'h0004a; 8'b10000011: data_out = 18'h0004b; 8'b10000100: data_out = 18'h0004b; 8'b10000101: data_out = 18'h0004c; 8'b10000110: data_out = 18'h0004c; 8'b10000111: data_out = 18'h0004c; 8'b10001000: data_out = 18'h0004d; 8'b10001001: data_out = 18'h0004d; 8'b10001010: data_out = 18'h0004e; 8'b10001011: data_out = 18'h0004e; 8'b10001100: data_out = 18'h0004f; 8'b10001101: data_out = 18'h0004f; 8'b10001110: data_out = 18'h00050; 8'b10001111: data_out = 18'h00050; 8'b10010000: data_out = 18'h00050; 8'b10010001: data_out = 18'h00051; 8'b10010010: data_out = 18'h00051; 8'b10010011: data_out = 18'h00052; 8'b10010100: data_out = 18'h00052; 8'b10010101: data_out = 18'h00053; 8'b10010110: data_out = 18'h00053; 8'b10010111: data_out = 18'h00053; 8'b10011000: data_out = 18'h00054; 8'b10011001: data_out = 18'h00054; 8'b10011010: data_out = 18'h00055; 8'b10011011: data_out = 18'h00055; 8'b10011100: data_out = 18'h00056; 8'b10011101: data_out = 18'h00056; 8'b10011110: data_out = 18'h00057; 8'b10011111: data_out = 18'h00057; 8'b10100000: data_out = 18'h00057; 8'b10100001: data_out = 18'h00058; 8'b10100010: data_out = 18'h00058; 8'b10100011: data_out = 18'h00059; 8'b10100100: data_out = 18'h00059; 8'b10100101: data_out = 18'h0005a; 8'b10100110: data_out = 18'h0005a; 8'b10100111: data_out = 18'h0005a; 8'b10101000: data_out = 18'h0005b; 8'b10101001: data_out = 18'h0005b; 8'b10101010: data_out = 18'h0005c; 8'b10101011: data_out = 18'h0005c; 8'b10101100: data_out = 18'h0005d; 8'b10101101: data_out = 18'h0005d; 8'b10101110: data_out = 18'h0005d; 8'b10101111: data_out = 18'h0005e; 8'b10110000: data_out = 18'h0005e; 8'b10110001: data_out = 18'h0005f; 8'b10110010: data_out = 18'h0005f; 8'b10110011: data_out = 18'h00060; 8'b10110100: data_out = 18'h00060; 8'b10110101: data_out = 18'h00061; 8'b10110110: data_out = 18'h00061; 8'b10110111: data_out = 18'h00061; 8'b10111000: data_out = 18'h00062; 8'b10111001: data_out = 18'h00062; 8'b10111010: data_out = 18'h00063; 8'b10111011: data_out = 18'h00063; 8'b10111100: data_out = 18'h00064; 8'b10111101: data_out = 18'h00064; 8'b10111110: data_out = 18'h00064; 8'b10111111: data_out = 18'h00065; 8'b11000000: data_out = 18'h00065; 8'b11000001: data_out = 18'h00066; 8'b11000010: data_out = 18'h00066; 8'b11000011: data_out = 18'h00067; 8'b11000100: data_out = 18'h00067; 8'b11000101: data_out = 18'h00068; 8'b11000110: data_out = 18'h00068; 8'b11000111: data_out = 18'h00068; 8'b11001000: data_out = 18'h00069; 8'b11001001: data_out = 18'h00069; 8'b11001010: data_out = 18'h0006a; 8'b11001011: data_out = 18'h0006a; 8'b11001100: data_out = 18'h0006b; 8'b11001101: data_out = 18'h0006b; 8'b11001110: data_out = 18'h0006b; 8'b11001111: data_out = 18'h0006c; 8'b11010000: data_out = 18'h0006c; 8'b11010001: data_out = 18'h0006d; 8'b11010010: data_out = 18'h0006d; default: data_out = 18'h00000000; endcase end endmodule

sounds.v

LUT of sampled sounds

Exported from Notepad++
//This module contains ROMs for bass, snare, and hat sounds //These sounds have already been downsampled by 2 module bass (clock, address, data_out); input clock; input [12:0] address; output [17:0] data_out; reg [17:0] data_out; always @ (posedge clock) begin case (address) 13'b0000000000000: data_out = 18'h3fbca; 13'b0000000000001: data_out = 18'h3f816; 13'b0000000000010: data_out = 18'h0155c; 13'b0000000000011: data_out = 18'h3e94a; 13'b0000000000100: data_out = 18'h01914; 13'b0000000000101: data_out = 18'h3e82f; 13'b0000000000110: data_out = 18'h3cf47; 13'b0000000000111: data_out = 18'h051d1; 13'b0000000001000: data_out = 18'h0291f; 13'b0000000001001: data_out = 18'h3c7cb; 13'b0000000001010: data_out = 18'h022dd; 13'b0000000001011: data_out = 18'h3e6ef; 13'b0000000001100: data_out = 18'h3f854; 13'b0000000001101: data_out = 18'h3f044; 13'b0000000001110: data_out = 18'h3fff2; 13'b0000000001111: data_out = 18'h3f9a4; 13'b0000000010000: data_out = 18'h3f063; 13'b0000000010001: data_out = 18'h05146; 13'b0000000010010: data_out = 18'h3f3ea; 13'b0000000010011: data_out = 18'h38058; 13'b0000000010100: data_out = 18'h067f8; 13'b0000000010101: data_out = 18'h3fd7b; 13'b0000000010110: data_out = 18'h014e6; 13'b0000000010111: data_out = 18'h3e733; 13'b0000000011000: data_out = 18'h3f1f3; 13'b0000000011001: data_out = 18'h059d5; 13'b0000000011010: data_out = 18'h3afa2; 13'b0000000011011: data_out = 18'h3c259; 13'b0000000011100: data_out = 18'h0607c; 13'b0000000011101: data_out = 18'h02475; 13'b0000000011110: data_out = 18'h3de50; 13'b0000000011111: data_out = 18'h00b15; 13'b0000000100000: data_out = 18'h378af; 13'b0000000100001: data_out = 18'h3f707; 13'b0000000100010: data_out = 18'h05fb5; 13'b0000000100011: data_out = 18'h0719e; 13'b0000000100100: data_out = 18'h014ab; 13'b0000000100101: data_out = 18'h3e5f5; 13'b0000000100110: data_out = 18'h00dd3; 13'b0000000100111: data_out = 18'h37273; 13'b0000000101000: data_out = 18'h3c65f; 13'b0000000101001: data_out = 18'h3900f; 13'b0000000101010: data_out = 18'h02e31; 13'b0000000101011: data_out = 18'h0276c; 13'b0000000101100: data_out = 18'h0006e; 13'b0000000101101: data_out = 18'h0867e; 13'b0000000101110: data_out = 18'h04835; 13'b0000000101111: data_out = 18'h0233a; 13'b0000000110000: data_out = 18'h3df32; 13'b0000000110001: data_out = 18'h3ff1a; 13'b0000000110010: data_out = 18'h3845a; 13'b0000000110011: data_out = 18'h3b331; 13'b0000000110100: data_out = 18'h3f6e5; 13'b0000000110101: data_out = 18'h3a561; 13'b0000000110110: data_out = 18'h3e8f3; 13'b0000000110111: data_out = 18'h064d1; 13'b0000000111000: data_out = 18'h0551c; 13'b0000000111001: data_out = 18'h0589a; 13'b0000000111010: data_out = 18'h09bfa; 13'b0000000111011: data_out = 18'h038e4; 13'b0000000111100: data_out = 18'h3f8cf; 13'b0000000111101: data_out = 18'h00f4a; 13'b0000000111110: data_out = 18'h04157; 13'b0000000111111: data_out = 18'h3e7a7; 13'b0000001000000: data_out = 18'h3f3b7; 13'b0000001000001: data_out = 18'h00f6b; 13'b0000001000010: data_out = 18'h35f40; 13'b0000001000011: data_out = 18'h3c3ff; 13'b0000001000100: data_out = 18'h3b6d2; 13'b0000001000101: data_out = 18'h39600; 13'b0000001000110: data_out = 18'h36b0a; 13'b0000001000111: data_out = 18'h02099; 13'b0000001001000: data_out = 18'h3c447; 13'b0000001001001: data_out = 18'h3f824; 13'b0000001001010: data_out = 18'h05677; 13'b0000001001011: data_out = 18'h3eaee; 13'b0000001001100: data_out = 18'h0567e; 13'b0000001001101: data_out = 18'h061e2; 13'b0000001001110: data_out = 18'h00562; 13'b0000001001111: data_out = 18'h067af; 13'b0000001010000: data_out = 18'h01d81; 13'b0000001010001: data_out = 18'h06682; 13'b0000001010010: data_out = 18'h03dde; 13'b0000001010011: data_out = 18'h3baca; 13'b0000001010100: data_out = 18'h03be3; 13'b0000001010101: data_out = 18'h01efe; 13'b0000001010110: data_out = 18'h3af38; 13'b0000001010111: data_out = 18'h38dcf; 13'b0000001011000: data_out = 18'h3e588; 13'b0000001011001: data_out = 18'h3653e; 13'b0000001011010: data_out = 18'h01a6c; 13'b0000001011011: data_out = 18'h024ca; 13'b0000001011100: data_out = 18'h01026; 13'b0000001011101: data_out = 18'h3eb53; 13'b0000001011110: data_out = 18'h37e2d; 13'b0000001011111: data_out = 18'h3cd6a; 13'b0000001100000: data_out = 18'h3d659; 13'b0000001100001: data_out = 18'h01898; 13'b0000001100010: data_out = 18'h03935; 13'b0000001100011: data_out = 18'h0356b; 13'b0000001100100: data_out = 18'h09138; 13'b0000001100101: data_out = 18'h01c76; 13'b0000001100110: data_out = 18'h050c6; 13'b0000001100111: data_out = 18'h00c22; 13'b0000001101000: data_out = 18'h3fb15; 13'b0000001101001: data_out = 18'h0675b; 13'b0000001101010: data_out = 18'h01fd8; 13'b0000001101011: data_out = 18'h04b72; 13'b0000001101100: data_out = 18'h02edd; 13'b0000001101101: data_out = 18'h025c2; 13'b0000001101110: data_out = 18'h01b8c; 13'b0000001101111: data_out = 18'h072be; 13'b0000001110000: data_out = 18'h02577; 13'b0000001110001: data_out = 18'h04118; 13'b0000001110010: data_out = 18'h3e5bf; 13'b0000001110011: data_out = 18'h3dd4f; 13'b0000001110100: data_out = 18'h3d55e; 13'b0000001110101: data_out = 18'h39965; 13'b0000001110110: data_out = 18'h3b74b; 13'b0000001110111: data_out = 18'h3d580; 13'b0000001111000: data_out = 18'h036b1; 13'b0000001111001: data_out = 18'h01296; 13'b0000001111010: data_out = 18'h3cbb5; 13'b0000001111011: data_out = 18'h3e27e; 13'b0000001111100: data_out = 18'h00413; 13'b0000001111101: data_out = 18'h3bfcb; 13'b0000001111110: data_out = 18'h35912; 13'b0000001111111: data_out = 18'h3bff1; 13'b0000010000000: data_out = 18'h3e7d9; 13'b0000010000001: data_out = 18'h3d654; 13'b0000010000010: data_out = 18'h381b7; 13'b0000010000011: data_out = 18'h3b0d0; 13'b0000010000100: data_out = 18'h39e88; 13'b0000010000101: data_out = 18'h028b1; 13'b0000010000110: data_out = 18'h07791; 13'b0000010000111: data_out = 18'h04a47; 13'b0000010001000: data_out = 18'h066e2; 13'b0000010001001: data_out = 18'h007ce; 13'b0000010001010: data_out = 18'h05704; 13'b0000010001011: data_out = 18'h01229; 13'b0000010001100: data_out = 18'h005e1; 13'b0000010001101: data_out = 18'h01332; 13'b0000010001110: data_out = 18'h01e37; 13'b0000010001111: data_out = 18'h010ca; 13'b0000010010000: data_out = 18'h3d676; 13'b0000010010001: data_out = 18'h3b330; 13'b0000010010010: data_out = 18'h3c0bf; 13'b0000010010011: data_out = 18'h00b1e; 13'b0000010010100: data_out = 18'h3d9a9; 13'b0000010010101: data_out = 18'h03b44; 13'b0000010010110: data_out = 18'h3cd42; 13'b0000010010111: data_out = 18'h3a6dc; 13'b0000010011000: data_out = 18'h3fd96; 13'b0000010011001: data_out = 18'h3c7d4; 13'b0000010011010: data_out = 18'h3c987; 13'b0000010011011: data_out = 18'h02eec; 13'b0000010011100: data_out = 18'h02d48; 13'b0000010011101: data_out = 18'h3ca40; 13'b0000010011110: data_out = 18'h0091e; 13'b0000010011111: data_out = 18'h006fa; 13'b0000010100000: data_out = 18'h01c4e; 13'b0000010100001: data_out = 18'h3dfcf; 13'b0000010100010: data_out = 18'h00846; 13'b0000010100011: data_out = 18'h00480; 13'b0000010100100: data_out = 18'h032cc; 13'b0000010100101: data_out = 18'h01045; 13'b0000010100110: data_out = 18'h3fed4; 13'b0000010100111: data_out = 18'h3de21; 13'b0000010101000: data_out = 18'h3c554; 13'b0000010101001: data_out = 18'h3da24; 13'b0000010101010: data_out = 18'h3ff3b; 13'b0000010101011: data_out = 18'h02196; 13'b0000010101100: data_out = 18'h01422; 13'b0000010101101: data_out = 18'h3c41d; 13'b0000010101110: data_out = 18'h00887; 13'b0000010101111: data_out = 18'h3b20c; 13'b0000010110000: data_out = 18'h035fd; 13'b0000010110001: data_out = 18'h3fce3; 13'b0000010110010: data_out = 18'h3fc6f; 13'b0000010110011: data_out = 18'h0657b; 13'b0000010110100: data_out = 18'h3a169; 13'b0000010110101: data_out = 18'h00f50; 13'b0000010110110: data_out = 18'h01670; 13'b0000010110111: data_out = 18'h3d62a; 13'b0000010111000: data_out = 18'h0214e; 13'b0000010111001: data_out = 18'h009be; 13'b0000010111010: data_out = 18'h3bd32; 13'b0000010111011: data_out = 18'h00f44; 13'b0000010111100: data_out = 18'h00d65; 13'b0000010111101: data_out = 18'h002bf; 13'b0000010111110: data_out = 18'h032af; 13'b0000010111111: data_out = 18'h3e1fe; 13'b0000011000000: data_out = 18'h0112a; 13'b0000011000001: data_out = 18'h3dc6b; 13'b0000011000010: data_out = 18'h3e50f; 13'b0000011000011: data_out = 18'h3e9da; 13'b0000011000100: data_out = 18'h3d7e4; 13'b0000011000101: data_out = 18'h3fa7a; 13'b0000011000110: data_out = 18'h3b014; 13'b0000011000111: data_out = 18'h3d5a0; 13'b0000011001000: data_out = 18'h3eb9f; 13'b0000011001001: data_out = 18'h3c990; 13'b0000011001010: data_out = 18'h00b01; 13'b0000011001011: data_out = 18'h3f996; 13'b0000011001100: data_out = 18'h3cc69; 13'b0000011001101: data_out = 18'h009fc; 13'b0000011001110: data_out = 18'h3da11; 13'b0000011001111: data_out = 18'h3f04f; 13'b0000011010000: data_out = 18'h024f2; 13'b0000011010001: data_out = 18'h3b049; 13'b0000011010010: data_out = 18'h3f5fa; 13'b0000011010011: data_out = 18'h0440f; 13'b0000011010100: data_out = 18'h0172a; 13'b0000011010101: data_out = 18'h0305d; 13'b0000011010110: data_out = 18'h02d3b; 13'b0000011010111: data_out = 18'h0249d; 13'b0000011011000: data_out = 18'h03066; 13'b0000011011001: data_out = 18'h0712d; 13'b0000011011010: data_out = 18'h02a4a; 13'b0000011011011: data_out = 18'h014ac; 13'b0000011011100: data_out = 18'h04dca; 13'b0000011011101: data_out = 18'h05448; 13'b0000011011110: data_out = 18'h3fd29; 13'b0000011011111: data_out = 18'h03af1; 13'b0000011100000: data_out = 18'h3ff51; 13'b0000011100001: data_out = 18'h05ab4; 13'b0000011100010: data_out = 18'h06488; 13'b0000011100011: data_out = 18'h02cd4; 13'b0000011100100: data_out = 18'h02bc7; 13'b0000011100101: data_out = 18'h00a53; 13'b0000011100110: data_out = 18'h3f8a6; 13'b0000011100111: data_out = 18'h3e45c; 13'b0000011101000: data_out = 18'h01dda; 13'b0000011101001: data_out = 18'h02954; 13'b0000011101010: data_out = 18'h3e7a4; 13'b0000011101011: data_out = 18'h0001d; 13'b0000011101100: data_out = 18'h3e46d; 13'b0000011101101: data_out = 18'h02593; 13'b0000011101110: data_out = 18'h003a5; 13'b0000011101111: data_out = 18'h00ae3; 13'b0000011110000: data_out = 18'h024be; 13'b0000011110001: data_out = 18'h3ee01; 13'b0000011110010: data_out = 18'h01c8d; 13'b0000011110011: data_out = 18'h3e593; 13'b0000011110100: data_out = 18'h0022c; 13'b0000011110101: data_out = 18'h02310; 13'b0000011110110: data_out = 18'h00981; 13'b0000011110111: data_out = 18'h0126e; 13'b0000011111000: data_out = 18'h3fc29; 13'b0000011111001: data_out = 18'h00655; 13'b0000011111010: data_out = 18'h00c0f; 13'b0000011111011: data_out = 18'h053e2; 13'b0000011111100: data_out = 18'h3e7ac; 13'b0000011111101: data_out = 18'h03d7a; 13'b0000011111110: data_out = 18'h03953; 13'b0000011111111: data_out = 18'h037e8; 13'b0000100000000: data_out = 18'h3fd92; 13'b0000100000001: data_out = 18'h05429; 13'b0000100000010: data_out = 18'h00fdd; 13'b0000100000011: data_out = 18'h03537; 13'b0000100000100: data_out = 18'h3ef52; 13'b0000100000101: data_out = 18'h02e8a; 13'b0000100000110: data_out = 18'h056c4; 13'b0000100000111: data_out = 18'h3e389; 13'b0000100001000: data_out = 18'h031c6; 13'b0000100001001: data_out = 18'h01593; 13'b0000100001010: data_out = 18'h03074; 13'b0000100001011: data_out = 18'h3edcc; 13'b0000100001100: data_out = 18'h04def; 13'b0000100001101: data_out = 18'h03604; 13'b0000100001110: data_out = 18'h03d55; 13'b0000100001111: data_out = 18'h013a7; 13'b0000100010000: data_out = 18'h0421d; 13'b0000100010001: data_out = 18'h00a23; 13'b0000100010010: data_out = 18'h0325a; 13'b0000100010011: data_out = 18'h01e03; 13'b0000100010100: data_out = 18'h010cd; 13'b0000100010101: data_out = 18'h01e4b; 13'b0000100010110: data_out = 18'h00179; 13'b0000100010111: data_out = 18'h3da52; 13'b0000100011000: data_out = 18'h3e76d; 13'b0000100011001: data_out = 18'h02abe; 13'b0000100011010: data_out = 18'h3be2a; 13'b0000100011011: data_out = 18'h009c7; 13'b0000100011100: data_out = 18'h3d044; 13'b0000100011101: data_out = 18'h3ccde; 13'b0000100011110: data_out = 18'h3abb2; 13'b0000100011111: data_out = 18'h3ef2c; 13'b0000100100000: data_out = 18'h37879; 13'b0000100100001: data_out = 18'h3c450; 13'b0000100100010: data_out = 18'h3980a; 13'b0000100100011: data_out = 18'h3a0c6; 13'b0000100100100: data_out = 18'h380ab; 13'b0000100100101: data_out = 18'h3abe4; 13'b0000100100110: data_out = 18'h38a64; 13'b0000100100111: data_out = 18'h3738a; 13'b0000100101000: data_out = 18'h37a7a; 13'b0000100101001: data_out = 18'h35fcc; 13'b0000100101010: data_out = 18'h36c9c; 13'b0000100101011: data_out = 18'h397ba; 13'b0000100101100: data_out = 18'h36f9d; 13'b0000100101101: data_out = 18'h3a311; 13'b0000100101110: data_out = 18'h35692; 13'b0000100101111: data_out = 18'h37d73; 13'b0000100110000: data_out = 18'h390df; 13'b0000100110001: data_out = 18'h39fc2; 13'b0000100110010: data_out = 18'h36d8f; 13'b0000100110011: data_out = 18'h360b0; 13'b0000100110100: data_out = 18'h3c92c; 13'b0000100110101: data_out = 18'h38c28; 13'b0000100110110: data_out = 18'h3d86a; 13'b0000100110111: data_out = 18'h386d6; 13'b0000100111000: data_out = 18'h3b018; 13'b0000100111001: data_out = 18'h3db5e; 13'b0000100111010: data_out = 18'h3bfdc; 13'b0000100111011: data_out = 18'h3c74c; 13'b0000100111100: data_out = 18'h00002; 13'b0000100111101: data_out = 18'h3df34; 13'b0000100111110: data_out = 18'h3e271; 13'b0000100111111: data_out = 18'h3d225; 13'b0000101000000: data_out = 18'h3f147; 13'b0000101000001: data_out = 18'h3ff46; 13'b0000101000010: data_out = 18'h3e50c; 13'b0000101000011: data_out = 18'h00ae6; 13'b0000101000100: data_out = 18'h3eb5c; 13'b0000101000101: data_out = 18'h024e9; 13'b0000101000110: data_out = 18'h019f3; 13'b0000101000111: data_out = 18'h02556; 13'b0000101001000: data_out = 18'h00e61; 13'b0000101001001: data_out = 18'h019a6; 13'b0000101001010: data_out = 18'h050b8; 13'b0000101001011: data_out = 18'h02584; 13'b0000101001100: data_out = 18'h0489a; 13'b0000101001101: data_out = 18'h061c6; 13'b0000101001110: data_out = 18'h014a8; 13'b0000101001111: data_out = 18'h05c91; 13'b0000101010000: data_out = 18'h06014; 13'b0000101010001: data_out = 18'h059d6; 13'b0000101010010: data_out = 18'h07bab; 13'b0000101010011: data_out = 18'h06be4; 13'b0000101010100: data_out = 18'h06631; 13'b0000101010101: data_out = 18'h071ba; 13'b0000101010110: data_out = 18'h0aca8; 13'b0000101010111: data_out = 18'h06a75; 13'b0000101011000: data_out = 18'h09aa0; 13'b0000101011001: data_out = 18'h08089; 13'b0000101011010: data_out = 18'h09d73; 13'b0000101011011: data_out = 18'h0a8d4; 13'b0000101011100: data_out = 18'h090b0; 13'b0000101011101: data_out = 18'h08ec4; 13'b0000101011110: data_out = 18'h09124; 13'b0000101011111: data_out = 18'h0a98d; 13'b0000101100000: data_out = 18'h086bc; 13'b0000101100001: data_out = 18'h0adcd; 13'b0000101100010: data_out = 18'h08cca; 13'b0000101100011: data_out = 18'h0a6c1; 13'b0000101100100: data_out = 18'h07ed5; 13'b0000101100101: data_out = 18'h081b9; 13'b0000101100110: data_out = 18'h091a6; 13'b0000101100111: data_out = 18'h08a15; 13'b0000101101000: data_out = 18'h07c36; 13'b0000101101001: data_out = 18'h06d51; 13'b0000101101010: data_out = 18'h051eb; 13'b0000101101011: data_out = 18'h05e8f; 13'b0000101101100: data_out = 18'h07cd0; 13'b0000101101101: data_out = 18'h03fc6; 13'b0000101101110: data_out = 18'h04cc1; 13'b0000101101111: data_out = 18'h03876; 13'b0000101110000: data_out = 18'h02399; 13'b0000101110001: data_out = 18'h0404f; 13'b0000101110010: data_out = 18'h3fc52; 13'b0000101110011: data_out = 18'h03a86; 13'b0000101110100: data_out = 18'h3eb3d; 13'b0000101110101: data_out = 18'h01865; 13'b0000101110110: data_out = 18'h3f102; 13'b0000101110111: data_out = 18'h00218; 13'b0000101111000: data_out = 18'h3edb2; 13'b0000101111001: data_out = 18'h3d9bd; 13'b0000101111010: data_out = 18'h3ebca; 13'b0000101111011: data_out = 18'h3d18e; 13'b0000101111100: data_out = 18'h3d5dd; 13'b0000101111101: data_out = 18'h3cc4d; 13'b0000101111110: data_out = 18'h3d239; 13'b0000101111111: data_out = 18'h3c903; 13'b0000110000000: data_out = 18'h3b318; 13'b0000110000001: data_out = 18'h38e63; 13'b0000110000010: data_out = 18'h3bad8; 13'b0000110000011: data_out = 18'h3bede; 13'b0000110000100: data_out = 18'h3a9f8; 13'b0000110000101: data_out = 18'h37a81; 13'b0000110000110: data_out = 18'h3bc26; 13'b0000110000111: data_out = 18'h39f69; 13'b0000110001000: data_out = 18'h37d26; 13'b0000110001001: data_out = 18'h38596; 13'b0000110001010: data_out = 18'h37c3d; 13'b0000110001011: data_out = 18'h38a82; 13'b0000110001100: data_out = 18'h36658; 13'b0000110001101: data_out = 18'h3944f; 13'b0000110001110: data_out = 18'h3761c; 13'b0000110001111: data_out = 18'h36639; 13'b0000110010000: data_out = 18'h35e24; 13'b0000110010001: data_out = 18'h36d1e; 13'b0000110010010: data_out = 18'h37736; 13'b0000110010011: data_out = 18'h3842f; 13'b0000110010100: data_out = 18'h351ed; 13'b0000110010101: data_out = 18'h36575; 13'b0000110010110: data_out = 18'h37315; 13'b0000110010111: data_out = 18'h36d95; 13'b0000110011000: data_out = 18'h37cec; 13'b0000110011001: data_out = 18'h3681b; 13'b0000110011010: data_out = 18'h388f4; 13'b0000110011011: data_out = 18'h35427; 13'b0000110011100: data_out = 18'h36b08; 13'b0000110011101: data_out = 18'h37c93; 13'b0000110011110: data_out = 18'h37c9e; 13'b0000110011111: data_out = 18'h3889f; 13'b0000110100000: data_out = 18'h380fb; 13'b0000110100001: data_out = 18'h37a26; 13'b0000110100010: data_out = 18'h36411; 13'b0000110100011: data_out = 18'h3be3b; 13'b0000110100100: data_out = 18'h3a11c; 13'b0000110100101: data_out = 18'h39441; 13'b0000110100110: data_out = 18'h3b86f; 13'b0000110100111: data_out = 18'h3cf41; 13'b0000110101000: data_out = 18'h3b1fd; 13'b0000110101001: data_out = 18'h3ad17; 13'b0000110101010: data_out = 18'h3daf6; 13'b0000110101011: data_out = 18'h3ec90; 13'b0000110101100: data_out = 18'h3df01; 13'b0000110101101: data_out = 18'h3e605; 13'b0000110101110: data_out = 18'h00bf4; 13'b0000110101111: data_out = 18'h3e8d8; 13'b0000110110000: data_out = 18'h01d1c; 13'b0000110110001: data_out = 18'h01570; 13'b0000110110010: data_out = 18'h02c51; 13'b0000110110011: data_out = 18'h014f5; 13'b0000110110100: data_out = 18'h048e7; 13'b0000110110101: data_out = 18'h00d63; 13'b0000110110110: data_out = 18'h03ab3; 13'b0000110110111: data_out = 18'h0502e; 13'b0000110111000: data_out = 18'h04a49; 13'b0000110111001: data_out = 18'h04718; 13'b0000110111010: data_out = 18'h05ad9; 13'b0000110111011: data_out = 18'h02b90; 13'b0000110111100: data_out = 18'h06d92; 13'b0000110111101: data_out = 18'h058b3; 13'b0000110111110: data_out = 18'h05f9a; 13'b0000110111111: data_out = 18'h06917; 13'b0000111000000: data_out = 18'h04b9d; 13'b0000111000001: data_out = 18'h083f3; 13'b0000111000010: data_out = 18'h06fee; 13'b0000111000011: data_out = 18'h051bf; 13'b0000111000100: data_out = 18'h07f55; 13'b0000111000101: data_out = 18'h07e0b; 13'b0000111000110: data_out = 18'h05fe9; 13'b0000111000111: data_out = 18'h08091; 13'b0000111001000: data_out = 18'h04f0c; 13'b0000111001001: data_out = 18'h0891b; 13'b0000111001010: data_out = 18'h07b7a; 13'b0000111001011: data_out = 18'h0833e; 13'b0000111001100: data_out = 18'h090a8; 13'b0000111001101: data_out = 18'h0842e; 13'b0000111001110: data_out = 18'h07556; 13'b0000111001111: data_out = 18'h07f5d; 13'b0000111010000: data_out = 18'h07a06; 13'b0000111010001: data_out = 18'h0a2b7; 13'b0000111010010: data_out = 18'h09117; 13'b0000111010011: data_out = 18'h06cd8; 13'b0000111010100: data_out = 18'h06c6d; 13'b0000111010101: data_out = 18'h08b4f; 13'b0000111010110: data_out = 18'h07e50; 13'b0000111010111: data_out = 18'h09f0a; 13'b0000111011000: data_out = 18'h06053; 13'b0000111011001: data_out = 18'h06e8f; 13'b0000111011010: data_out = 18'h095cc; 13'b0000111011011: data_out = 18'h06b10; 13'b0000111011100: data_out = 18'h08c0f; 13'b0000111011101: data_out = 18'h04582; 13'b0000111011110: data_out = 18'h08510; 13'b0000111011111: data_out = 18'h06d3f; 13'b0000111100000: data_out = 18'h06c1c; 13'b0000111100001: data_out = 18'h0648d; 13'b0000111100010: data_out = 18'h04695; 13'b0000111100011: data_out = 18'h04829; 13'b0000111100100: data_out = 18'h06fc6; 13'b0000111100101: data_out = 18'h02fac; 13'b0000111100110: data_out = 18'h04bd4; 13'b0000111100111: data_out = 18'h01f46; 13'b0000111101000: data_out = 18'h03307; 13'b0000111101001: data_out = 18'h0133c; 13'b0000111101010: data_out = 18'h02d76; 13'b0000111101011: data_out = 18'h01358; 13'b0000111101100: data_out = 18'h00fc9; 13'b0000111101101: data_out = 18'h000e4; 13'b0000111101110: data_out = 18'h3e5ea; 13'b0000111101111: data_out = 18'h3f98b; 13'b0000111110000: data_out = 18'h3e6f7; 13'b0000111110001: data_out = 18'h3ddea; 13'b0000111110010: data_out = 18'h3d23c; 13'b0000111110011: data_out = 18'h3ce5d; 13'b0000111110100: data_out = 18'h3d4de; 13'b0000111110101: data_out = 18'h3b222; 13'b0000111110110: data_out = 18'h3bd6d; 13'b0000111110111: data_out = 18'h3b289; 13'b0000111111000: data_out = 18'h38663; 13'b0000111111001: data_out = 18'h3a628; 13'b0000111111010: data_out = 18'h3ae3a; 13'b0000111111011: data_out = 18'h393e4; 13'b0000111111100: data_out = 18'h3898f; 13'b0000111111101: data_out = 18'h37eae; 13'b0000111111110: data_out = 18'h38781; 13'b0000111111111: data_out = 18'h3738a; 13'b0001000000000: data_out = 18'h39f5e; 13'b0001000000001: data_out = 18'h36ba2; 13'b0001000000010: data_out = 18'h386bd; 13'b0001000000011: data_out = 18'h36723; 13'b0001000000100: data_out = 18'h38297; 13'b0001000000101: data_out = 18'h37603; 13'b0001000000110: data_out = 18'h37c6f; 13'b0001000000111: data_out = 18'h38235; 13'b0001000001000: data_out = 18'h37029; 13'b0001000001001: data_out = 18'h39c28; 13'b0001000001010: data_out = 18'h38785; 13'b0001000001011: data_out = 18'h36ff3; 13'b0001000001100: data_out = 18'h36d1c; 13'b0001000001101: data_out = 18'h3a5fc; 13'b0001000001110: data_out = 18'h385e8; 13'b0001000001111: data_out = 18'h368d5; 13'b0001000010000: data_out = 18'h398c6; 13'b0001000010001: data_out = 18'h38f8f; 13'b0001000010010: data_out = 18'h37d9f; 13'b0001000010011: data_out = 18'h3a1d1; 13'b0001000010100: data_out = 18'h393eb; 13'b0001000010101: data_out = 18'h37360; 13'b0001000010110: data_out = 18'h39a52; 13'b0001000010111: data_out = 18'h3a082; 13'b0001000011000: data_out = 18'h389d0; 13'b0001000011001: data_out = 18'h380c6; 13'b0001000011010: data_out = 18'h3a38f; 13'b0001000011011: data_out = 18'h38175; 13'b0001000011100: data_out = 18'h39779; 13'b0001000011101: data_out = 18'h391ee; 13'b0001000011110: data_out = 18'h38c66; 13'b0001000011111: data_out = 18'h38922; 13'b0001000100000: data_out = 18'h38a95; 13'b0001000100001: data_out = 18'h3a7e7; 13'b0001000100010: data_out = 18'h387ae; 13'b0001000100011: data_out = 18'h39113; 13'b0001000100100: data_out = 18'h39c9a; 13'b0001000100101: data_out = 18'h3caa3; 13'b0001000100110: data_out = 18'h38719; 13'b0001000100111: data_out = 18'h3a821; 13'b0001000101000: data_out = 18'h3a0fe; 13'b0001000101001: data_out = 18'h3ae62; 13'b0001000101010: data_out = 18'h3be40; 13'b0001000101011: data_out = 18'h3b1a3; 13'b0001000101100: data_out = 18'h3da67; 13'b0001000101101: data_out = 18'h3acc6; 13'b0001000101110: data_out = 18'h3d1f9; 13'b0001000101111: data_out = 18'h3dfdf; 13'b0001000110000: data_out = 18'h3c944; 13'b0001000110001: data_out = 18'h3ffec; 13'b0001000110010: data_out = 18'h3d928; 13'b0001000110011: data_out = 18'h3f4bc; 13'b0001000110100: data_out = 18'h0021c; 13'b0001000110101: data_out = 18'h00562; 13'b0001000110110: data_out = 18'h001c4; 13'b0001000110111: data_out = 18'h3f498; 13'b0001000111000: data_out = 18'h03085; 13'b0001000111001: data_out = 18'h0078c; 13'b0001000111010: data_out = 18'h03301; 13'b0001000111011: data_out = 18'h0220f; 13'b0001000111100: data_out = 18'h0516b; 13'b0001000111101: data_out = 18'h02ad2; 13'b0001000111110: data_out = 18'h051e0; 13'b0001000111111: data_out = 18'h035b0; 13'b0001001000000: data_out = 18'h04ecb; 13'b0001001000001: data_out = 18'h06baf; 13'b0001001000010: data_out = 18'h05eef; 13'b0001001000011: data_out = 18'h073db; 13'b0001001000100: data_out = 18'h06ea2; 13'b0001001000101: data_out = 18'h05dcf; 13'b0001001000110: data_out = 18'h081ef; 13'b0001001000111: data_out = 18'h06a20; 13'b0001001001000: data_out = 18'h092ea; 13'b0001001001001: data_out = 18'h0685b; 13'b0001001001010: data_out = 18'h09b5c; 13'b0001001001011: data_out = 18'h08099; 13'b0001001001100: data_out = 18'h0884a; 13'b0001001001101: data_out = 18'h0827d; 13'b0001001001110: data_out = 18'h0a805; 13'b0001001001111: data_out = 18'h07fcf; 13'b0001001010000: data_out = 18'h0980d; 13'b0001001010001: data_out = 18'h08997; 13'b0001001010010: data_out = 18'h09cb3; 13'b0001001010011: data_out = 18'h08a79; 13'b0001001010100: data_out = 18'h09ff0; 13'b0001001010101: data_out = 18'h0977d; 13'b0001001010110: data_out = 18'h08815; 13'b0001001010111: data_out = 18'h0a18c; 13'b0001001011000: data_out = 18'h090be; 13'b0001001011001: data_out = 18'h0958d; 13'b0001001011010: data_out = 18'h09fb5; 13'b0001001011011: data_out = 18'h08718; 13'b0001001011100: data_out = 18'h089bf; 13'b0001001011101: data_out = 18'h07adb; 13'b0001001011110: data_out = 18'h09a8c; 13'b0001001011111: data_out = 18'h0801a; 13'b0001001100000: data_out = 18'h076ef; 13'b0001001100001: data_out = 18'h06eb9; 13'b0001001100010: data_out = 18'h07f4c; 13'b0001001100011: data_out = 18'h07e96; 13'b0001001100100: data_out = 18'h0696b; 13'b0001001100101: data_out = 18'h070e2; 13'b0001001100110: data_out = 18'h0652c; 13'b0001001100111: data_out = 18'h06601; 13'b0001001101000: data_out = 18'h0628b; 13'b0001001101001: data_out = 18'h06827; 13'b0001001101010: data_out = 18'h05afa; 13'b0001001101011: data_out = 18'h05860; 13'b0001001101100: data_out = 18'h062f9; 13'b0001001101101: data_out = 18'h05257; 13'b0001001101110: data_out = 18'h057e7; 13'b0001001101111: data_out = 18'h04e16; 13'b0001001110000: data_out = 18'h055a9; 13'b0001001110001: data_out = 18'h059bb; 13'b0001001110010: data_out = 18'h05924; 13'b0001001110011: data_out = 18'h04817; 13'b0001001110100: data_out = 18'h04715; 13'b0001001110101: data_out = 18'h05a2f; 13'b0001001110110: data_out = 18'h04d68; 13'b0001001110111: data_out = 18'h0421e; 13'b0001001111000: data_out = 18'h04c45; 13'b0001001111001: data_out = 18'h04968; 13'b0001001111010: data_out = 18'h04364; 13'b0001001111011: data_out = 18'h03df8; 13'b0001001111100: data_out = 18'h040c0; 13'b0001001111101: data_out = 18'h03aa6; 13'b0001001111110: data_out = 18'h036e7; 13'b0001001111111: data_out = 18'h031f5; 13'b0001010000000: data_out = 18'h02767; 13'b0001010000001: data_out = 18'h02438; 13'b0001010000010: data_out = 18'h022bd; 13'b0001010000011: data_out = 18'h0164e; 13'b0001010000100: data_out = 18'h0143b; 13'b0001010000101: data_out = 18'h015c0; 13'b0001010000110: data_out = 18'h00495; 13'b0001010000111: data_out = 18'h3fd55; 13'b0001010001000: data_out = 18'h3ff80; 13'b0001010001001: data_out = 18'h3f3cf; 13'b0001010001010: data_out = 18'h3e624; 13'b0001010001011: data_out = 18'h3e54e; 13'b0001010001100: data_out = 18'h3e09c; 13'b0001010001101: data_out = 18'h3d867; 13'b0001010001110: data_out = 18'h3d731; 13'b0001010001111: data_out = 18'h3cb6c; 13'b0001010010000: data_out = 18'h3c46c; 13'b0001010010001: data_out = 18'h3b820; 13'b0001010010010: data_out = 18'h3bc37; 13'b0001010010011: data_out = 18'h3ba56; 13'b0001010010100: data_out = 18'h3a6a9; 13'b0001010010101: data_out = 18'h3a8fa; 13'b0001010010110: data_out = 18'h39fb1; 13'b0001010010111: data_out = 18'h3a10b; 13'b0001010011000: data_out = 18'h3968f; 13'b0001010011001: data_out = 18'h38d35; 13'b0001010011010: data_out = 18'h39274; 13'b0001010011011: data_out = 18'h39045; 13'b0001010011100: data_out = 18'h3854f; 13'b0001010011101: data_out = 18'h384f6; 13'b0001010011110: data_out = 18'h3740c; 13'b0001010011111: data_out = 18'h37995; 13'b0001010100000: data_out = 18'h388b2; 13'b0001010100001: data_out = 18'h36e02; 13'b0001010100010: data_out = 18'h36bad; 13'b0001010100011: data_out = 18'h3689b; 13'b0001010100100: data_out = 18'h3737a; 13'b0001010100101: data_out = 18'h36cd1; 13'b0001010100110: data_out = 18'h36929; 13'b0001010100111: data_out = 18'h3646d; 13'b0001010101000: data_out = 18'h363af; 13'b0001010101001: data_out = 18'h372fb; 13'b0001010101010: data_out = 18'h36bca; 13'b0001010101011: data_out = 18'h360c8; 13'b0001010101100: data_out = 18'h36080; 13'b0001010101101: data_out = 18'h36f2d; 13'b0001010101110: data_out = 18'h37353; 13'b0001010101111: data_out = 18'h36d30; 13'b0001010110000: data_out = 18'h367d8; 13'b0001010110001: data_out = 18'h37053; 13'b0001010110010: data_out = 18'h375c7; 13'b0001010110011: data_out = 18'h37bae; 13'b0001010110100: data_out = 18'h37184; 13'b0001010110101: data_out = 18'h3771f; 13'b0001010110110: data_out = 18'h379f4; 13'b0001010110111: data_out = 18'h388b7; 13'b0001010111000: data_out = 18'h38679; 13'b0001010111001: data_out = 18'h3802e; 13'b0001010111010: data_out = 18'h38dcf; 13'b0001010111011: data_out = 18'h390d5; 13'b0001010111100: data_out = 18'h38d52; 13'b0001010111101: data_out = 18'h3a2d6; 13'b0001010111110: data_out = 18'h39d87; 13'b0001010111111: data_out = 18'h3a304; 13'b0001011000000: data_out = 18'h3a14f; 13'b0001011000001: data_out = 18'h3aa04; 13'b0001011000010: data_out = 18'h3a885; 13'b0001011000011: data_out = 18'h3aa96; 13'b0001011000100: data_out = 18'h3b08e; 13'b0001011000101: data_out = 18'h3b42c; 13'b0001011000110: data_out = 18'h3b11f; 13'b0001011000111: data_out = 18'h3b795; 13'b0001011001000: data_out = 18'h3b5b6; 13'b0001011001001: data_out = 18'h3b8e4; 13'b0001011001010: data_out = 18'h3ba90; 13'b0001011001011: data_out = 18'h3c4e5; 13'b0001011001100: data_out = 18'h3c21d; 13'b0001011001101: data_out = 18'h3c1bd; 13'b0001011001110: data_out = 18'h3bb03; 13'b0001011001111: data_out = 18'h3cdbd; 13'b0001011010000: data_out = 18'h3c8e0; 13'b0001011010001: data_out = 18'h3ca27; 13'b0001011010010: data_out = 18'h3ce4c; 13'b0001011010011: data_out = 18'h3cdae; 13'b0001011010100: data_out = 18'h3ccdf; 13'b0001011010101: data_out = 18'h3d41f; 13'b0001011010110: data_out = 18'h3d4a8; 13'b0001011010111: data_out = 18'h3dc2b; 13'b0001011011000: data_out = 18'h3def2; 13'b0001011011001: data_out = 18'h3df02; 13'b0001011011010: data_out = 18'h3ecd7; 13'b0001011011011: data_out = 18'h3e5a2; 13'b0001011011100: data_out = 18'h3ef36; 13'b0001011011101: data_out = 18'h3f352; 13'b0001011011110: data_out = 18'h3fd5b; 13'b0001011011111: data_out = 18'h3ff20; 13'b0001011100000: data_out = 18'h00451; 13'b0001011100001: data_out = 18'h00834; 13'b0001011100010: data_out = 18'h014f6; 13'b0001011100011: data_out = 18'h01731; 13'b0001011100100: data_out = 18'h018a2; 13'b0001011100101: data_out = 18'h01f49; 13'b0001011100110: data_out = 18'h02d66; 13'b0001011100111: data_out = 18'h02e24; 13'b0001011101000: data_out = 18'h02f04; 13'b0001011101001: data_out = 18'h03830; 13'b0001011101010: data_out = 18'h0420e; 13'b0001011101011: data_out = 18'h041fd; 13'b0001011101100: data_out = 18'h05140; 13'b0001011101101: data_out = 18'h04ea5; 13'b0001011101110: data_out = 18'h05936; 13'b0001011101111: data_out = 18'h05622; 13'b0001011110000: data_out = 18'h05e84; 13'b0001011110001: data_out = 18'h0675d; 13'b0001011110010: data_out = 18'h06c00; 13'b0001011110011: data_out = 18'h071c1; 13'b0001011110100: data_out = 18'h07002; 13'b0001011110101: data_out = 18'h08298; 13'b0001011110110: data_out = 18'h07a09; 13'b0001011110111: data_out = 18'h083bb; 13'b0001011111000: data_out = 18'h0832c; 13'b0001011111001: data_out = 18'h08b76; 13'b0001011111010: data_out = 18'h08962; 13'b0001011111011: data_out = 18'h08966; 13'b0001011111100: data_out = 18'h09958; 13'b0001011111101: data_out = 18'h09022; 13'b0001011111110: data_out = 18'h09119; 13'b0001011111111: data_out = 18'h09ec5; 13'b0001100000000: data_out = 18'h0936f; 13'b0001100000001: data_out = 18'h0970a; 13'b0001100000010: data_out = 18'h09f3f; 13'b0001100000011: data_out = 18'h09707; 13'b0001100000100: data_out = 18'h09ce7; 13'b0001100000101: data_out = 18'h097eb; 13'b0001100000110: data_out = 18'h0994e; 13'b0001100000111: data_out = 18'h09c3b; 13'b0001100001000: data_out = 18'h0a133; 13'b0001100001001: data_out = 18'h097ea; 13'b0001100001010: data_out = 18'h0986d; 13'b0001100001011: data_out = 18'h09408; 13'b0001100001100: data_out = 18'h09a6c; 13'b0001100001101: data_out = 18'h095cd; 13'b0001100001110: data_out = 18'h08e4e; 13'b0001100001111: data_out = 18'h08fb5; 13'b0001100010000: data_out = 18'h09035; 13'b0001100010001: data_out = 18'h08ae2; 13'b0001100010010: data_out = 18'h0847d; 13'b0001100010011: data_out = 18'h07f95; 13'b0001100010100: data_out = 18'h07d4e; 13'b0001100010101: data_out = 18'h07a3f; 13'b0001100010110: data_out = 18'h07787; 13'b0001100010111: data_out = 18'h07c1b; 13'b0001100011000: data_out = 18'h06c90; 13'b0001100011001: data_out = 18'h0701f; 13'b0001100011010: data_out = 18'h06889; 13'b0001100011011: data_out = 18'h06ae5; 13'b0001100011100: data_out = 18'h05de0; 13'b0001100011101: data_out = 18'h062a2; 13'b0001100011110: data_out = 18'h05ae2; 13'b0001100011111: data_out = 18'h0599c; 13'b0001100100000: data_out = 18'h05911; 13'b0001100100001: data_out = 18'h050b6; 13'b0001100100010: data_out = 18'h04b08; 13'b0001100100011: data_out = 18'h0506b; 13'b0001100100100: data_out = 18'h04af5; 13'b0001100100101: data_out = 18'h047b6; 13'b0001100100110: data_out = 18'h0495e; 13'b0001100100111: data_out = 18'h03ff3; 13'b0001100101000: data_out = 18'h03aba; 13'b0001100101001: data_out = 18'h03c5f; 13'b0001100101010: data_out = 18'h03cde; 13'b0001100101011: data_out = 18'h03441; 13'b0001100101100: data_out = 18'h02e8d; 13'b0001100101101: data_out = 18'h033fc; 13'b0001100101110: data_out = 18'h02e98; 13'b0001100101111: data_out = 18'h02d83; 13'b0001100110000: data_out = 18'h02e81; 13'b0001100110001: data_out = 18'h01f67; 13'b0001100110010: data_out = 18'h02385; 13'b0001100110011: data_out = 18'h0231d; 13'b0001100110100: data_out = 18'h024df; 13'b0001100110101: data_out = 18'h01421; 13'b0001100110110: data_out = 18'h014e0; 13'b0001100110111: data_out = 18'h010fa; 13'b0001100111000: data_out = 18'h01321; 13'b0001100111001: data_out = 18'h00b74; 13'b0001100111010: data_out = 18'h0046b; 13'b0001100111011: data_out = 18'h0003f; 13'b0001100111100: data_out = 18'h000e1; 13'b0001100111101: data_out = 18'h3fc5c; 13'b0001100111110: data_out = 18'h3f28e; 13'b0001100111111: data_out = 18'h3f461; 13'b0001101000000: data_out = 18'h3e513; 13'b0001101000001: data_out = 18'h3ea1f; 13'b0001101000010: data_out = 18'h3e1e4; 13'b0001101000011: data_out = 18'h3d835; 13'b0001101000100: data_out = 18'h3d646; 13'b0001101000101: data_out = 18'h3d057; 13'b0001101000110: data_out = 18'h3c924; 13'b0001101000111: data_out = 18'h3c5cf; 13'b0001101001000: data_out = 18'h3c029; 13'b0001101001001: data_out = 18'h3c15f; 13'b0001101001010: data_out = 18'h3b3b1; 13'b0001101001011: data_out = 18'h3b32e; 13'b0001101001100: data_out = 18'h3a9c0; 13'b0001101001101: data_out = 18'h3a9d9; 13'b0001101001110: data_out = 18'h3a584; 13'b0001101001111: data_out = 18'h3a131; 13'b0001101010000: data_out = 18'h38ec3; 13'b0001101010001: data_out = 18'h39b88; 13'b0001101010010: data_out = 18'h38e99; 13'b0001101010011: data_out = 18'h39466; 13'b0001101010100: data_out = 18'h38a9b; 13'b0001101010101: data_out = 18'h3852d; 13'b0001101010110: data_out = 18'h38a3e; 13'b0001101010111: data_out = 18'h37c6b; 13'b0001101011000: data_out = 18'h37ec8; 13'b0001101011001: data_out = 18'h374a2; 13'b0001101011010: data_out = 18'h37afb; 13'b0001101011011: data_out = 18'h3738d; 13'b0001101011100: data_out = 18'h3710d; 13'b0001101011101: data_out = 18'h36db7; 13'b0001101011110: data_out = 18'h370e0; 13'b0001101011111: data_out = 18'h36c8e; 13'b0001101100000: data_out = 18'h36abb; 13'b0001101100001: data_out = 18'h368c0; 13'b0001101100010: data_out = 18'h36c49; 13'b0001101100011: data_out = 18'h36b0f; 13'b0001101100100: data_out = 18'h35e9c; 13'b0001101100101: data_out = 18'h36e5f; 13'b0001101100110: data_out = 18'h36afb; 13'b0001101100111: data_out = 18'h361c8; 13'b0001101101000: data_out = 18'h36c46; 13'b0001101101001: data_out = 18'h36d4c; 13'b0001101101010: data_out = 18'h36a37; 13'b0001101101011: data_out = 18'h36397; 13'b0001101101100: data_out = 18'h36eec; 13'b0001101101101: data_out = 18'h36df9; 13'b0001101101110: data_out = 18'h36f01; 13'b0001101101111: data_out = 18'h370da; 13'b0001101110000: data_out = 18'h37a4f; 13'b0001101110001: data_out = 18'h372d9; 13'b0001101110010: data_out = 18'h37817; 13'b0001101110011: data_out = 18'h37da7; 13'b0001101110100: data_out = 18'h37b3b; 13'b0001101110101: data_out = 18'h381ab; 13'b0001101110110: data_out = 18'h38cd7; 13'b0001101110111: data_out = 18'h37eab; 13'b0001101111000: data_out = 18'h38bb4; 13'b0001101111001: data_out = 18'h38bef; 13'b0001101111010: data_out = 18'h38fa1; 13'b0001101111011: data_out = 18'h39624; 13'b0001101111100: data_out = 18'h39a0e; 13'b0001101111101: data_out = 18'h39130; 13'b0001101111110: data_out = 18'h39fe1; 13'b0001101111111: data_out = 18'h39fa9; 13'b0001110000000: data_out = 18'h39f40; 13'b0001110000001: data_out = 18'h3a71f; 13'b0001110000010: data_out = 18'h3b1a4; 13'b0001110000011: data_out = 18'h3ad79; 13'b0001110000100: data_out = 18'h3b109; 13'b0001110000101: data_out = 18'h3b9b9; 13'b0001110000110: data_out = 18'h3bb71; 13'b0001110000111: data_out = 18'h3b9e4; 13'b0001110001000: data_out = 18'h3bac2; 13'b0001110001001: data_out = 18'h3cab7; 13'b0001110001010: data_out = 18'h3c023; 13'b0001110001011: data_out = 18'h3cc23; 13'b0001110001100: data_out = 18'h3cd47; 13'b0001110001101: data_out = 18'h3d307; 13'b0001110001110: data_out = 18'h3d012; 13'b0001110001111: data_out = 18'h3d114; 13'b0001110010000: data_out = 18'h3dac5; 13'b0001110010001: data_out = 18'h3d963; 13'b0001110010010: data_out = 18'h3e22f; 13'b0001110010011: data_out = 18'h3df93; 13'b0001110010100: data_out = 18'h3e3b0; 13'b0001110010101: data_out = 18'h3e3bd; 13'b0001110010110: data_out = 18'h3e5d8; 13'b0001110010111: data_out = 18'h3eb48; 13'b0001110011000: data_out = 18'h3f2d3; 13'b0001110011001: data_out = 18'h3f2eb; 13'b0001110011010: data_out = 18'h3f2d6; 13'b0001110011011: data_out = 18'h3f37d; 13'b0001110011100: data_out = 18'h3f7cb; 13'b0001110011101: data_out = 18'h3fc11; 13'b0001110011110: data_out = 18'h00109; 13'b0001110011111: data_out = 18'h00294; 13'b0001110100000: data_out = 18'h008eb; 13'b0001110100001: data_out = 18'h00571; 13'b0001110100010: data_out = 18'h0083e; 13'b0001110100011: data_out = 18'h018b0; 13'b0001110100100: data_out = 18'h01c0c; 13'b0001110100101: data_out = 18'h010bc; 13'b0001110100110: data_out = 18'h01e61; 13'b0001110100111: data_out = 18'h02064; 13'b0001110101000: data_out = 18'h02429; 13'b0001110101001: data_out = 18'h02a6f; 13'b0001110101010: data_out = 18'h02714; 13'b0001110101011: data_out = 18'h03074; 13'b0001110101100: data_out = 18'h03115; 13'b0001110101101: data_out = 18'h039eb; 13'b0001110101110: data_out = 18'h03fec; 13'b0001110101111: data_out = 18'h04286; 13'b0001110110000: data_out = 18'h0455b; 13'b0001110110001: data_out = 18'h049ab; 13'b0001110110010: data_out = 18'h04887; 13'b0001110110011: data_out = 18'h056cc; 13'b0001110110100: data_out = 18'h05058; 13'b0001110110101: data_out = 18'h058c4; 13'b0001110110110: data_out = 18'h0627f; 13'b0001110110111: data_out = 18'h05ce3; 13'b0001110111000: data_out = 18'h065a0; 13'b0001110111001: data_out = 18'h06811; 13'b0001110111010: data_out = 18'h06b6c; 13'b0001110111011: data_out = 18'h074d2; 13'b0001110111100: data_out = 18'h07045; 13'b0001110111101: data_out = 18'h076f5; 13'b0001110111110: data_out = 18'h077f3; 13'b0001110111111: data_out = 18'h08262; 13'b0001111000000: data_out = 18'h08234; 13'b0001111000001: data_out = 18'h07b2d; 13'b0001111000010: data_out = 18'h08835; 13'b0001111000011: data_out = 18'h08979; 13'b0001111000100: data_out = 18'h08c37; 13'b0001111000101: data_out = 18'h0897a; 13'b0001111000110: data_out = 18'h093a3; 13'b0001111000111: data_out = 18'h08adb; 13'b0001111001000: data_out = 18'h094a4; 13'b0001111001001: data_out = 18'h09247; 13'b0001111001010: data_out = 18'h09085; 13'b0001111001011: data_out = 18'h099b2; 13'b0001111001100: data_out = 18'h09670; 13'b0001111001101: data_out = 18'h09571; 13'b0001111001110: data_out = 18'h093e7; 13'b0001111001111: data_out = 18'h0911e; 13'b0001111010000: data_out = 18'h093fc; 13'b0001111010001: data_out = 18'h09e3e; 13'b0001111010010: data_out = 18'h09283; 13'b0001111010011: data_out = 18'h090af; 13'b0001111010100: data_out = 18'h09736; 13'b0001111010101: data_out = 18'h09134; 13'b0001111010110: data_out = 18'h091f3; 13'b0001111010111: data_out = 18'h09202; 13'b0001111011000: data_out = 18'h08b0e; 13'b0001111011001: data_out = 18'h08a90; 13'b0001111011010: data_out = 18'h092bc; 13'b0001111011011: data_out = 18'h0863a; 13'b0001111011100: data_out = 18'h08ac3; 13'b0001111011101: data_out = 18'h0826c; 13'b0001111011110: data_out = 18'h07fdd; 13'b0001111011111: data_out = 18'h082db; 13'b0001111100000: data_out = 18'h07edb; 13'b0001111100001: data_out = 18'h07f69; 13'b0001111100010: data_out = 18'h08302; 13'b0001111100011: data_out = 18'h06b54; 13'b0001111100100: data_out = 18'h07cb5; 13'b0001111100101: data_out = 18'h06d8c; 13'b0001111100110: data_out = 18'h06f74; 13'b0001111100111: data_out = 18'h06c11; 13'b0001111101000: data_out = 18'h06be9; 13'b0001111101001: data_out = 18'h062ae; 13'b0001111101010: data_out = 18'h05e26; 13'b0001111101011: data_out = 18'h06420; 13'b0001111101100: data_out = 18'h05d18; 13'b0001111101101: data_out = 18'h05b13; 13'b0001111101110: data_out = 18'h050ca; 13'b0001111101111: data_out = 18'h05632; 13'b0001111110000: data_out = 18'h05028; 13'b0001111110001: data_out = 18'h041d8; 13'b0001111110010: data_out = 18'h0490e; 13'b0001111110011: data_out = 18'h042c4; 13'b0001111110100: data_out = 18'h03f00; 13'b0001111110101: data_out = 18'h03e1b; 13'b0001111110110: data_out = 18'h03f5f; 13'b0001111110111: data_out = 18'h03146; 13'b0001111111000: data_out = 18'h031c5; 13'b0001111111001: data_out = 18'h03396; 13'b0001111111010: data_out = 18'h02aea; 13'b0001111111011: data_out = 18'h02913; 13'b0001111111100: data_out = 18'h02233; 13'b0001111111101: data_out = 18'h024c7; 13'b0001111111110: data_out = 18'h01ac3; 13'b0001111111111: data_out = 18'h022eb; 13'b0010000000000: data_out = 18'h01219; 13'b0010000000001: data_out = 18'h01911; 13'b0010000000010: data_out = 18'h0123d; 13'b0010000000011: data_out = 18'h00aa9; 13'b0010000000100: data_out = 18'h015e1; 13'b0010000000101: data_out = 18'h00423; 13'b0010000000110: data_out = 18'h008f3; 13'b0010000000111: data_out = 18'h009be; 13'b0010000001000: data_out = 18'h0044c; 13'b0010000001001: data_out = 18'h3f701; 13'b0010000001010: data_out = 18'h3fead; 13'b0010000001011: data_out = 18'h3fd37; 13'b0010000001100: data_out = 18'h3f80a; 13'b0010000001101: data_out = 18'h3ec03; 13'b0010000001110: data_out = 18'h3f33b; 13'b0010000001111: data_out = 18'h3e927; 13'b0010000010000: data_out = 18'h3f48f; 13'b0010000010001: data_out = 18'h3e10c; 13'b0010000010010: data_out = 18'h3e83d; 13'b0010000010011: data_out = 18'h3e0b2; 13'b0010000010100: data_out = 18'h3e294; 13'b0010000010101: data_out = 18'h3e172; 13'b0010000010110: data_out = 18'h3d8a3; 13'b0010000010111: data_out = 18'h3db36; 13'b0010000011000: data_out = 18'h3d05e; 13'b0010000011001: data_out = 18'h3c84e; 13'b0010000011010: data_out = 18'h3dc46; 13'b0010000011011: data_out = 18'h3c133; 13'b0010000011100: data_out = 18'h3cb93; 13'b0010000011101: data_out = 18'h3ccfd; 13'b0010000011110: data_out = 18'h3c96e; 13'b0010000011111: data_out = 18'h3b8f8; 13'b0010000100000: data_out = 18'h3beb1; 13'b0010000100001: data_out = 18'h3c026; 13'b0010000100010: data_out = 18'h3ba4d; 13'b0010000100011: data_out = 18'h3ade9; 13'b0010000100100: data_out = 18'h3af46; 13'b0010000100101: data_out = 18'h3b4f4; 13'b0010000100110: data_out = 18'h3a7ea; 13'b0010000100111: data_out = 18'h3b07a; 13'b0010000101000: data_out = 18'h3a1de; 13'b0010000101001: data_out = 18'h3a816; 13'b0010000101010: data_out = 18'h3a03f; 13'b0010000101011: data_out = 18'h39d05; 13'b0010000101100: data_out = 18'h398d1; 13'b0010000101101: data_out = 18'h39933; 13'b0010000101110: data_out = 18'h39c8b; 13'b0010000101111: data_out = 18'h38abf; 13'b0010000110000: data_out = 18'h38ef0; 13'b0010000110001: data_out = 18'h392b0; 13'b0010000110010: data_out = 18'h38a39; 13'b0010000110011: data_out = 18'h38b1b; 13'b0010000110100: data_out = 18'h38817; 13'b0010000110101: data_out = 18'h37b96; 13'b0010000110110: data_out = 18'h382fc; 13'b0010000110111: data_out = 18'h37f45; 13'b0010000111000: data_out = 18'h378e4; 13'b0010000111001: data_out = 18'h37ce3; 13'b0010000111010: data_out = 18'h378d4; 13'b0010000111011: data_out = 18'h3773c; 13'b0010000111100: data_out = 18'h37e43; 13'b0010000111101: data_out = 18'h37043; 13'b0010000111110: data_out = 18'h36eda; 13'b0010000111111: data_out = 18'h36bb5; 13'b0010001000000: data_out = 18'h374fb; 13'b0010001000001: data_out = 18'h37169; 13'b0010001000010: data_out = 18'h36e27; 13'b0010001000011: data_out = 18'h36fc7; 13'b0010001000100: data_out = 18'h36f4b; 13'b0010001000101: data_out = 18'h369a5; 13'b0010001000110: data_out = 18'h36a11; 13'b0010001000111: data_out = 18'h367c2; 13'b0010001001000: data_out = 18'h36fed; 13'b0010001001001: data_out = 18'h36c8e; 13'b0010001001010: data_out = 18'h367fb; 13'b0010001001011: data_out = 18'h366b4; 13'b0010001001100: data_out = 18'h371a5; 13'b0010001001101: data_out = 18'h368d5; 13'b0010001001110: data_out = 18'h36c8f; 13'b0010001001111: data_out = 18'h3708e; 13'b0010001010000: data_out = 18'h36a5d; 13'b0010001010001: data_out = 18'h36792; 13'b0010001010010: data_out = 18'h377c2; 13'b0010001010011: data_out = 18'h372c4; 13'b0010001010100: data_out = 18'h36b77; 13'b0010001010101: data_out = 18'h379f8; 13'b0010001010110: data_out = 18'h37780; 13'b0010001010111: data_out = 18'h372bc; 13'b0010001011000: data_out = 18'h37100; 13'b0010001011001: data_out = 18'h380b8; 13'b0010001011010: data_out = 18'h37958; 13'b0010001011011: data_out = 18'h377cb; 13'b0010001011100: data_out = 18'h38726; 13'b0010001011101: data_out = 18'h38548; 13'b0010001011110: data_out = 18'h37ff8; 13'b0010001011111: data_out = 18'h3875c; 13'b0010001100000: data_out = 18'h38c82; 13'b0010001100001: data_out = 18'h38e28; 13'b0010001100010: data_out = 18'h38a68; 13'b0010001100011: data_out = 18'h39714; 13'b0010001100100: data_out = 18'h38def; 13'b0010001100101: data_out = 18'h39fcc; 13'b0010001100110: data_out = 18'h39d77; 13'b0010001100111: data_out = 18'h39b9e; 13'b0010001101000: data_out = 18'h39c50; 13'b0010001101001: data_out = 18'h3a945; 13'b0010001101010: data_out = 18'h3ab59; 13'b0010001101011: data_out = 18'h3a39f; 13'b0010001101100: data_out = 18'h3b17f; 13'b0010001101101: data_out = 18'h3b304; 13'b0010001101110: data_out = 18'h3b70e; 13'b0010001101111: data_out = 18'h3b306; 13'b0010001110000: data_out = 18'h3bdba; 13'b0010001110001: data_out = 18'h3c085; 13'b0010001110010: data_out = 18'h3c134; 13'b0010001110011: data_out = 18'h3cb4b; 13'b0010001110100: data_out = 18'h3c09b; 13'b0010001110101: data_out = 18'h3ccbf; 13'b0010001110110: data_out = 18'h3d2fb; 13'b0010001110111: data_out = 18'h3d18a; 13'b0010001111000: data_out = 18'h3d1ab; 13'b0010001111001: data_out = 18'h3e4aa; 13'b0010001111010: data_out = 18'h3d86a; 13'b0010001111011: data_out = 18'h3df49; 13'b0010001111100: data_out = 18'h3df25; 13'b0010001111101: data_out = 18'h3e4cf; 13'b0010001111110: data_out = 18'h3ea40; 13'b0010001111111: data_out = 18'h3e903; 13'b0010010000000: data_out = 18'h3f2e9; 13'b0010010000001: data_out = 18'h3f701; 13'b0010010000010: data_out = 18'h3eda5; 13'b0010010000011: data_out = 18'h3ff7f; 13'b0010010000100: data_out = 18'h3f8fc; 13'b0010010000101: data_out = 18'h00418; 13'b0010010000110: data_out = 18'h3f5a3; 13'b0010010000111: data_out = 18'h00499; 13'b0010010001000: data_out = 18'h00ab1; 13'b0010010001001: data_out = 18'h00ba6; 13'b0010010001010: data_out = 18'h0004b; 13'b0010010001011: data_out = 18'h00d93; 13'b0010010001100: data_out = 18'h00c48; 13'b0010010001101: data_out = 18'h0186f; 13'b0010010001110: data_out = 18'h00e1e; 13'b0010010001111: data_out = 18'h0159e; 13'b0010010010000: data_out = 18'h01687; 13'b0010010010001: data_out = 18'h01d16; 13'b0010010010010: data_out = 18'h01a0f; 13'b0010010010011: data_out = 18'h02638; 13'b0010010010100: data_out = 18'h01b05; 13'b0010010010101: data_out = 18'h01f9f; 13'b0010010010110: data_out = 18'h0217c; 13'b0010010010111: data_out = 18'h025bf; 13'b0010010011000: data_out = 18'h02206; 13'b0010010011001: data_out = 18'h02c87; 13'b0010010011010: data_out = 18'h0373d; 13'b0010010011011: data_out = 18'h03070; 13'b0010010011100: data_out = 18'h02ac1; 13'b0010010011101: data_out = 18'h038a9; 13'b0010010011110: data_out = 18'h03b43; 13'b0010010011111: data_out = 18'h03e5b; 13'b0010010100000: data_out = 18'h036e6; 13'b0010010100001: data_out = 18'h03a18; 13'b0010010100010: data_out = 18'h04baf; 13'b0010010100011: data_out = 18'h04984; 13'b0010010100100: data_out = 18'h0473e; 13'b0010010100101: data_out = 18'h042dd; 13'b0010010100110: data_out = 18'h04f35; 13'b0010010100111: data_out = 18'h05996; 13'b0010010101000: data_out = 18'h04b96; 13'b0010010101001: data_out = 18'h056f1; 13'b0010010101010: data_out = 18'h05d45; 13'b0010010101011: data_out = 18'h05ce1; 13'b0010010101100: data_out = 18'h05467; 13'b0010010101101: data_out = 18'h06598; 13'b0010010101110: data_out = 18'h05f46; 13'b0010010101111: data_out = 18'h070c9; 13'b0010010110000: data_out = 18'h06bda; 13'b0010010110001: data_out = 18'h0662f; 13'b0010010110010: data_out = 18'h06ba2; 13'b0010010110011: data_out = 18'h074ca; 13'b0010010110100: data_out = 18'h07528; 13'b0010010110101: data_out = 18'h07df0; 13'b0010010110110: data_out = 18'h072ea; 13'b0010010110111: data_out = 18'h08404; 13'b0010010111000: data_out = 18'h07dd8; 13'b0010010111001: data_out = 18'h0868a; 13'b0010010111010: data_out = 18'h082a7; 13'b0010010111011: data_out = 18'h08192; 13'b0010010111100: data_out = 18'h08d8a; 13'b0010010111101: data_out = 18'h08eb7; 13'b0010010111110: data_out = 18'h08fd4; 13'b0010010111111: data_out = 18'h08fd5; 13'b0010011000000: data_out = 18'h08f11; 13'b0010011000001: data_out = 18'h09476; 13'b0010011000010: data_out = 18'h09ea8; 13'b0010011000011: data_out = 18'h09462; 13'b0010011000100: data_out = 18'h097be; 13'b0010011000101: data_out = 18'h098b1; 13'b0010011000110: data_out = 18'h09fda; 13'b0010011000111: data_out = 18'h0995d; 13'b0010011001000: data_out = 18'h09d77; 13'b0010011001001: data_out = 18'h09f61; 13'b0010011001010: data_out = 18'h09a43; 13'b0010011001011: data_out = 18'h09d01; 13'b0010011001100: data_out = 18'h09f29; 13'b0010011001101: data_out = 18'h09450; 13'b0010011001110: data_out = 18'h0a27a; 13'b0010011001111: data_out = 18'h09b94; 13'b0010011010000: data_out = 18'h09df8; 13'b0010011010001: data_out = 18'h09d26; 13'b0010011010010: data_out = 18'h09d5f; 13'b0010011010011: data_out = 18'h09884; 13'b0010011010100: data_out = 18'h097d1; 13'b0010011010101: data_out = 18'h095f0; 13'b0010011010110: data_out = 18'h09bc6; 13'b0010011010111: data_out = 18'h095cc; 13'b0010011011000: data_out = 18'h09c82; 13'b0010011011001: data_out = 18'h09204; 13'b0010011011010: data_out = 18'h08f8a; 13'b0010011011011: data_out = 18'h0914d; 13'b0010011011100: data_out = 18'h09187; 13'b0010011011101: data_out = 18'h08777; 13'b0010011011110: data_out = 18'h08bf8; 13'b0010011011111: data_out = 18'h08c53; 13'b0010011100000: data_out = 18'h08205; 13'b0010011100001: data_out = 18'h08a7d; 13'b0010011100010: data_out = 18'h0822e; 13'b0010011100011: data_out = 18'h07569; 13'b0010011100100: data_out = 18'h081d9; 13'b0010011100101: data_out = 18'h08181; 13'b0010011100110: data_out = 18'h07494; 13'b0010011100111: data_out = 18'h06de4; 13'b0010011101000: data_out = 18'h073b3; 13'b0010011101001: data_out = 18'h06e15; 13'b0010011101010: data_out = 18'h06bd9; 13'b0010011101011: data_out = 18'h06a08; 13'b0010011101100: data_out = 18'h063e8; 13'b0010011101101: data_out = 18'h06347; 13'b0010011101110: data_out = 18'h0544b; 13'b0010011101111: data_out = 18'h05ea5; 13'b0010011110000: data_out = 18'h059ff; 13'b0010011110001: data_out = 18'h04ad9; 13'b0010011110010: data_out = 18'h05929; 13'b0010011110011: data_out = 18'h04f53; 13'b0010011110100: data_out = 18'h04536; 13'b0010011110101: data_out = 18'h041e1; 13'b0010011110110: data_out = 18'h042eb; 13'b0010011110111: data_out = 18'h03ed4; 13'b0010011111000: data_out = 18'h04056; 13'b0010011111001: data_out = 18'h03198; 13'b0010011111010: data_out = 18'h0351f; 13'b0010011111011: data_out = 18'h0339c; 13'b0010011111100: data_out = 18'h02b0e; 13'b0010011111101: data_out = 18'h027ad; 13'b0010011111110: data_out = 18'h02717; 13'b0010011111111: data_out = 18'h024f2; 13'b0010100000000: data_out = 18'h01ddd; 13'b0010100000001: data_out = 18'h01b41; 13'b0010100000010: data_out = 18'h015f3; 13'b0010100000011: data_out = 18'h011c3; 13'b0010100000100: data_out = 18'h0141a; 13'b0010100000101: data_out = 18'h011f1; 13'b0010100000110: data_out = 18'h00a4e; 13'b0010100000111: data_out = 18'h00981; 13'b0010100001000: data_out = 18'h004f1; 13'b0010100001001: data_out = 18'h3fe62; 13'b0010100001010: data_out = 18'h3fc94; 13'b0010100001011: data_out = 18'h00391; 13'b0010100001100: data_out = 18'h3f524; 13'b0010100001101: data_out = 18'h3fc66; 13'b0010100001110: data_out = 18'h3eaf8; 13'b0010100001111: data_out = 18'h3f9f2; 13'b0010100010000: data_out = 18'h3eef2; 13'b0010100010001: data_out = 18'h3f074; 13'b0010100010010: data_out = 18'h3e674; 13'b0010100010011: data_out = 18'h3e84b; 13'b0010100010100: data_out = 18'h3f18c; 13'b0010100010101: data_out = 18'h3e76d; 13'b0010100010110: data_out = 18'h3e0c6; 13'b0010100010111: data_out = 18'h3e617; 13'b0010100011000: data_out = 18'h3dba4; 13'b0010100011001: data_out = 18'h3e26d; 13'b0010100011010: data_out = 18'h3dd38; 13'b0010100011011: data_out = 18'h3de9d; 13'b0010100011100: data_out = 18'h3d6ce; 13'b0010100011101: data_out = 18'h3d3ad; 13'b0010100011110: data_out = 18'h3d8f8; 13'b0010100011111: data_out = 18'h3cf16; 13'b0010100100000: data_out = 18'h3d85a; 13'b0010100100001: data_out = 18'h3d7ea; 13'b0010100100010: data_out = 18'h3cc96; 13'b0010100100011: data_out = 18'h3cf1b; 13'b0010100100100: data_out = 18'h3d164; 13'b0010100100101: data_out = 18'h3bd77; 13'b0010100100110: data_out = 18'h3c6de; 13'b0010100100111: data_out = 18'h3cf01; 13'b0010100101000: data_out = 18'h3c34c; 13'b0010100101001: data_out = 18'h3c2eb; 13'b0010100101010: data_out = 18'h3c2e7; 13'b0010100101011: data_out = 18'h3bc3d; 13'b0010100101100: data_out = 18'h3c216; 13'b0010100101101: data_out = 18'h3bc30; 13'b0010100101110: data_out = 18'h3ae78; 13'b0010100101111: data_out = 18'h3ba39; 13'b0010100110000: data_out = 18'h3b165; 13'b0010100110001: data_out = 18'h3afe4; 13'b0010100110010: data_out = 18'h3b712; 13'b0010100110011: data_out = 18'h3a4eb; 13'b0010100110100: data_out = 18'h3a683; 13'b0010100110101: data_out = 18'h3a84a; 13'b0010100110110: data_out = 18'h3a3eb; 13'b0010100110111: data_out = 18'h3a123; 13'b0010100111000: data_out = 18'h39f91; 13'b0010100111001: data_out = 18'h39bf7; 13'b0010100111010: data_out = 18'h3936c; 13'b0010100111011: data_out = 18'h39295; 13'b0010100111100: data_out = 18'h38c1a; 13'b0010100111101: data_out = 18'h39167; 13'b0010100111110: data_out = 18'h384de; 13'b0010100111111: data_out = 18'h38b91; 13'b0010101000000: data_out = 18'h37c6d; 13'b0010101000001: data_out = 18'h3884b; 13'b0010101000010: data_out = 18'h37f6a; 13'b0010101000011: data_out = 18'h36ed1; 13'b0010101000100: data_out = 18'h37925; 13'b0010101000101: data_out = 18'h37ca2; 13'b0010101000110: data_out = 18'h36f39; 13'b0010101000111: data_out = 18'h370a2; 13'b0010101001000: data_out = 18'h36b05; 13'b0010101001001: data_out = 18'h3675a; 13'b0010101001010: data_out = 18'h36d4a; 13'b0010101001011: data_out = 18'h364ae; 13'b0010101001100: data_out = 18'h362f9; 13'b0010101001101: data_out = 18'h3678b; 13'b0010101001110: data_out = 18'h36034; 13'b0010101001111: data_out = 18'h35e8d; 13'b0010101010000: data_out = 18'h361a5; 13'b0010101010001: data_out = 18'h35d0c; 13'b0010101010010: data_out = 18'h3617c; 13'b0010101010011: data_out = 18'h35fef; 13'b0010101010100: data_out = 18'h357b0; 13'b0010101010101: data_out = 18'h361ab; 13'b0010101010110: data_out = 18'h35999; 13'b0010101010111: data_out = 18'h35b86; 13'b0010101011000: data_out = 18'h35b3b; 13'b0010101011001: data_out = 18'h35d8e; 13'b0010101011010: data_out = 18'h35ac7; 13'b0010101011011: data_out = 18'h35dbb; 13'b0010101011100: data_out = 18'h35f1e; 13'b0010101011101: data_out = 18'h35d12; 13'b0010101011110: data_out = 18'h35cd5; 13'b0010101011111: data_out = 18'h36155; 13'b0010101100000: data_out = 18'h35f7e; 13'b0010101100001: data_out = 18'h36479; 13'b0010101100010: data_out = 18'h35ee6; 13'b0010101100011: data_out = 18'h36254; 13'b0010101100100: data_out = 18'h36870; 13'b0010101100101: data_out = 18'h36885; 13'b0010101100110: data_out = 18'h36624; 13'b0010101100111: data_out = 18'h370c2; 13'b0010101101000: data_out = 18'h36855; 13'b0010101101001: data_out = 18'h37282; 13'b0010101101010: data_out = 18'h37318; 13'b0010101101011: data_out = 18'h37352; 13'b0010101101100: data_out = 18'h37721; 13'b0010101101101: data_out = 18'h37999; 13'b0010101101110: data_out = 18'h37d06; 13'b0010101101111: data_out = 18'h37eee; 13'b0010101110000: data_out = 18'h3823b; 13'b0010101110001: data_out = 18'h381ff; 13'b0010101110010: data_out = 18'h387c4; 13'b0010101110011: data_out = 18'h38de4; 13'b0010101110100: data_out = 18'h389ca; 13'b0010101110101: data_out = 18'h39641; 13'b0010101110110: data_out = 18'h396af; 13'b0010101110111: data_out = 18'h3932e; 13'b0010101111000: data_out = 18'h3a0c9; 13'b0010101111001: data_out = 18'h39d07; 13'b0010101111010: data_out = 18'h39fdc; 13'b0010101111011: data_out = 18'h3a140; 13'b0010101111100: data_out = 18'h3b4a7; 13'b0010101111101: data_out = 18'h3a9e7; 13'b0010101111110: data_out = 18'h3b4bf; 13'b0010101111111: data_out = 18'h3b0cb; 13'b0010110000000: data_out = 18'h3b769; 13'b0010110000001: data_out = 18'h3be97; 13'b0010110000010: data_out = 18'h3c4b2; 13'b0010110000011: data_out = 18'h3c391; 13'b0010110000100: data_out = 18'h3c364; 13'b0010110000101: data_out = 18'h3ca28; 13'b0010110000110: data_out = 18'h3cdd4; 13'b0010110000111: data_out = 18'h3cf13; 13'b0010110001000: data_out = 18'h3dc1b; 13'b0010110001001: data_out = 18'h3d374; 13'b0010110001010: data_out = 18'h3dead; 13'b0010110001011: data_out = 18'h3df15; 13'b0010110001100: data_out = 18'h3e4c0; 13'b0010110001101: data_out = 18'h3dfec; 13'b0010110001110: data_out = 18'h3ecb6; 13'b0010110001111: data_out = 18'h3ea96; 13'b0010110010000: data_out = 18'h3f052; 13'b0010110010001: data_out = 18'h3efdf; 13'b0010110010010: data_out = 18'h3f524; 13'b0010110010011: data_out = 18'h3f706; 13'b0010110010100: data_out = 18'h3f8cb; 13'b0010110010101: data_out = 18'h3fb61; 13'b0010110010110: data_out = 18'h3fb5e; 13'b0010110010111: data_out = 18'h00939; 13'b0010110011000: data_out = 18'h3ffd2; 13'b0010110011001: data_out = 18'h00c52; 13'b0010110011010: data_out = 18'h00789; 13'b0010110011011: data_out = 18'h00b38; 13'b0010110011100: data_out = 18'h00ed2; 13'b0010110011101: data_out = 18'h01062; 13'b0010110011110: data_out = 18'h01ad6; 13'b0010110011111: data_out = 18'h00906; 13'b0010110100000: data_out = 18'h01d2a; 13'b0010110100001: data_out = 18'h01463; 13'b0010110100010: data_out = 18'h020bb; 13'b0010110100011: data_out = 18'h016aa; 13'b0010110100100: data_out = 18'h01afe; 13'b0010110100101: data_out = 18'h0245a; 13'b0010110100110: data_out = 18'h0225f; 13'b0010110100111: data_out = 18'h01fc9; 13'b0010110101000: data_out = 18'h02ea9; 13'b0010110101001: data_out = 18'h02c69; 13'b0010110101010: data_out = 18'h026a7; 13'b0010110101011: data_out = 18'h0216b; 13'b0010110101100: data_out = 18'h03692; 13'b0010110101101: data_out = 18'h03283; 13'b0010110101110: data_out = 18'h0277f; 13'b0010110101111: data_out = 18'h02d14; 13'b0010110110000: data_out = 18'h03aed; 13'b0010110110001: data_out = 18'h03098; 13'b0010110110010: data_out = 18'h03698; 13'b0010110110011: data_out = 18'h03d41; 13'b0010110110100: data_out = 18'h0375f; 13'b0010110110101: data_out = 18'h037fe; 13'b0010110110110: data_out = 18'h0438c; 13'b0010110110111: data_out = 18'h03f6f; 13'b0010110111000: data_out = 18'h03aa2; 13'b0010110111001: data_out = 18'h04720; 13'b0010110111010: data_out = 18'h044c7; 13'b0010110111011: data_out = 18'h04a48; 13'b0010110111100: data_out = 18'h044d5; 13'b0010110111101: data_out = 18'h046cf; 13'b0010110111110: data_out = 18'h04f0b; 13'b0010110111111: data_out = 18'h0533d; 13'b0010111000000: data_out = 18'h04c58; 13'b0010111000001: data_out = 18'h05640; 13'b0010111000010: data_out = 18'h055c8; 13'b0010111000011: data_out = 18'h05359; 13'b0010111000100: data_out = 18'h0612c; 13'b0010111000101: data_out = 18'h05ce4; 13'b0010111000110: data_out = 18'h05f8f; 13'b0010111000111: data_out = 18'h058c9; 13'b0010111001000: data_out = 18'h06879; 13'b0010111001001: data_out = 18'h0699c; 13'b0010111001010: data_out = 18'h06925; 13'b0010111001011: data_out = 18'h06365; 13'b0010111001100: data_out = 18'h073bb; 13'b0010111001101: data_out = 18'h07562; 13'b0010111001110: data_out = 18'h07191; 13'b0010111001111: data_out = 18'h077e3; 13'b0010111010000: data_out = 18'h07dad; 13'b0010111010001: data_out = 18'h07bf4; 13'b0010111010010: data_out = 18'h08311; 13'b0010111010011: data_out = 18'h07ce2; 13'b0010111010100: data_out = 18'h08758; 13'b0010111010101: data_out = 18'h08dd6; 13'b0010111010110: data_out = 18'h08d5e; 13'b0010111010111: data_out = 18'h08a07; 13'b0010111011000: data_out = 18'h08cc8; 13'b0010111011001: data_out = 18'h08f81; 13'b0010111011010: data_out = 18'h09902; 13'b0010111011011: data_out = 18'h09445; 13'b0010111011100: data_out = 18'h08e95; 13'b0010111011101: data_out = 18'h09e5f; 13'b0010111011110: data_out = 18'h0a054; 13'b0010111011111: data_out = 18'h09a83; 13'b0010111100000: data_out = 18'h09e74; 13'b0010111100001: data_out = 18'h09e89; 13'b0010111100010: data_out = 18'h09ac7; 13'b0010111100011: data_out = 18'h0a2ab; 13'b0010111100100: data_out = 18'h0a151; 13'b0010111100101: data_out = 18'h0a1d0; 13'b0010111100110: data_out = 18'h0a248; 13'b0010111100111: data_out = 18'h0a50a; 13'b0010111101000: data_out = 18'h0a103; 13'b0010111101001: data_out = 18'h0a2c9; 13'b0010111101010: data_out = 18'h0a5a2; 13'b0010111101011: data_out = 18'h0a24a; 13'b0010111101100: data_out = 18'h0a661; 13'b0010111101101: data_out = 18'h09e4e; 13'b0010111101110: data_out = 18'h0a64a; 13'b0010111101111: data_out = 18'h0a033; 13'b0010111110000: data_out = 18'h0a1f2; 13'b0010111110001: data_out = 18'h0a196; 13'b0010111110010: data_out = 18'h0a097; 13'b0010111110011: data_out = 18'h09d51; 13'b0010111110100: data_out = 18'h0a0b8; 13'b0010111110101: data_out = 18'h09a80; 13'b0010111110110: data_out = 18'h09b46; 13'b0010111110111: data_out = 18'h09e00; 13'b0010111111000: data_out = 18'h098cb; 13'b0010111111001: data_out = 18'h08f1f; 13'b0010111111010: data_out = 18'h09b98; 13'b0010111111011: data_out = 18'h08f7d; 13'b0010111111100: data_out = 18'h08d54; 13'b0010111111101: data_out = 18'h090f8; 13'b0010111111110: data_out = 18'h08b54; 13'b0010111111111: data_out = 18'h08b67; 13'b0011000000000: data_out = 18'h08893; 13'b0011000000001: data_out = 18'h07e35; 13'b0011000000010: data_out = 18'h0850d; 13'b0011000000011: data_out = 18'h07b2a; 13'b0011000000100: data_out = 18'h07a61; 13'b0011000000101: data_out = 18'h07770; 13'b0011000000110: data_out = 18'h078da; 13'b0011000000111: data_out = 18'h06e4f; 13'b0011000001000: data_out = 18'h07476; 13'b0011000001001: data_out = 18'h06b1d; 13'b0011000001010: data_out = 18'h05f33; 13'b0011000001011: data_out = 18'h0701b; 13'b0011000001100: data_out = 18'h05fce; 13'b0011000001101: data_out = 18'h05e88; 13'b0011000001110: data_out = 18'h057cb; 13'b0011000001111: data_out = 18'h05c35; 13'b0011000010000: data_out = 18'h0547e; 13'b0011000010001: data_out = 18'h05029; 13'b0011000010010: data_out = 18'h050ae; 13'b0011000010011: data_out = 18'h04a49; 13'b0011000010100: data_out = 18'h041e0; 13'b0011000010101: data_out = 18'h0465d; 13'b0011000010110: data_out = 18'h040e7; 13'b0011000010111: data_out = 18'h03b1e; 13'b0011000011000: data_out = 18'h03ac1; 13'b0011000011001: data_out = 18'h0327b; 13'b0011000011010: data_out = 18'h037c1; 13'b0011000011011: data_out = 18'h02820; 13'b0011000011100: data_out = 18'h02fea; 13'b0011000011101: data_out = 18'h026de; 13'b0011000011110: data_out = 18'h0247c; 13'b0011000011111: data_out = 18'h02160; 13'b0011000100000: data_out = 18'h01e78; 13'b0011000100001: data_out = 18'h01eba; 13'b0011000100010: data_out = 18'h01527; 13'b0011000100011: data_out = 18'h016da; 13'b0011000100100: data_out = 18'h00f4e; 13'b0011000100101: data_out = 18'h010fa; 13'b0011000100110: data_out = 18'h00bae; 13'b0011000100111: data_out = 18'h007f8; 13'b0011000101000: data_out = 18'h00768; 13'b0011000101001: data_out = 18'h00182; 13'b0011000101010: data_out = 18'h001ab; 13'b0011000101011: data_out = 18'h3fbe0; 13'b0011000101100: data_out = 18'h000ee; 13'b0011000101101: data_out = 18'h3f1b4; 13'b0011000101110: data_out = 18'h3f870; 13'b0011000101111: data_out = 18'h3f678; 13'b0011000110000: data_out = 18'h3ee49; 13'b0011000110001: data_out = 18'h3ef4d; 13'b0011000110010: data_out = 18'h3ed73; 13'b0011000110011: data_out = 18'h3edbf; 13'b0011000110100: data_out = 18'h3e4d5; 13'b0011000110101: data_out = 18'h3e8b2; 13'b0011000110110: data_out = 18'h3e71b; 13'b0011000110111: data_out = 18'h3e1ae; 13'b0011000111000: data_out = 18'h3e015; 13'b0011000111001: data_out = 18'h3ddcd; 13'b0011000111010: data_out = 18'h3dda7; 13'b0011000111011: data_out = 18'h3db0c; 13'b0011000111100: data_out = 18'h3d65f; 13'b0011000111101: data_out = 18'h3db9c; 13'b0011000111110: data_out = 18'h3d3d7; 13'b0011000111111: data_out = 18'h3d7c0; 13'b0011001000000: data_out = 18'h3d191; 13'b0011001000001: data_out = 18'h3d11e; 13'b0011001000010: data_out = 18'h3cb8a; 13'b0011001000011: data_out = 18'h3d4bb; 13'b0011001000100: data_out = 18'h3cc25; 13'b0011001000101: data_out = 18'h3ca95; 13'b0011001000110: data_out = 18'h3c968; 13'b0011001000111: data_out = 18'h3cbbe; 13'b0011001001000: data_out = 18'h3c929; 13'b0011001001001: data_out = 18'h3c249; 13'b0011001001010: data_out = 18'h3c9ed; 13'b0011001001011: data_out = 18'h3bf65; 13'b0011001001100: data_out = 18'h3c6f6; 13'b0011001001101: data_out = 18'h3c06a; 13'b0011001001110: data_out = 18'h3bdf4; 13'b0011001001111: data_out = 18'h3c0fc; 13'b0011001010000: data_out = 18'h3bd45; 13'b0011001010001: data_out = 18'h3bb97; 13'b0011001010010: data_out = 18'h3bd09; 13'b0011001010011: data_out = 18'h3b93f; 13'b0011001010100: data_out = 18'h3b647; 13'b0011001010101: data_out = 18'h3b4f6; 13'b0011001010110: data_out = 18'h3b5ff; 13'b0011001010111: data_out = 18'h3af0d; 13'b0011001011000: data_out = 18'h3b5ae; 13'b0011001011001: data_out = 18'h3b3ea; 13'b0011001011010: data_out = 18'h3a75d; 13'b0011001011011: data_out = 18'h3ae64; 13'b0011001011100: data_out = 18'h3a2db; 13'b0011001011101: data_out = 18'h3aa2d; 13'b0011001011110: data_out = 18'h3a62e; 13'b0011001011111: data_out = 18'h3a095; 13'b0011001100000: data_out = 18'h39fd8; 13'b0011001100001: data_out = 18'h39b6d; 13'b0011001100010: data_out = 18'h3957d; 13'b0011001100011: data_out = 18'h39a7d; 13'b0011001100100: data_out = 18'h39058; 13'b0011001100101: data_out = 18'h39364; 13'b0011001100110: data_out = 18'h38fb6; 13'b0011001100111: data_out = 18'h38544; 13'b0011001101000: data_out = 18'h38a4e; 13'b0011001101001: data_out = 18'h38a4f; 13'b0011001101010: data_out = 18'h37f27; 13'b0011001101011: data_out = 18'h37dd0; 13'b0011001101100: data_out = 18'h37f86; 13'b0011001101101: data_out = 18'h37c72; 13'b0011001101110: data_out = 18'h374ad; 13'b0011001101111: data_out = 18'h3714f; 13'b0011001110000: data_out = 18'h36f48; 13'b0011001110001: data_out = 18'h37471; 13'b0011001110010: data_out = 18'h36e59; 13'b0011001110011: data_out = 18'h36370; 13'b0011001110100: data_out = 18'h369a2; 13'b0011001110101: data_out = 18'h367e8; 13'b0011001110110: data_out = 18'h363e7; 13'b0011001110111: data_out = 18'h362a0; 13'b0011001111000: data_out = 18'h35ce1; 13'b0011001111001: data_out = 18'h35f3a; 13'b0011001111010: data_out = 18'h3609f; 13'b0011001111011: data_out = 18'h35e11; 13'b0011001111100: data_out = 18'h35b01; 13'b0011001111101: data_out = 18'h35c2e; 13'b0011001111110: data_out = 18'h359e5; 13'b0011001111111: data_out = 18'h3582e; 13'b0011010000000: data_out = 18'h35970; 13'b0011010000001: data_out = 18'h357e5; 13'b0011010000010: data_out = 18'h35991; 13'b0011010000011: data_out = 18'h357df; 13'b0011010000100: data_out = 18'h35a59; 13'b0011010000101: data_out = 18'h35859; 13'b0011010000110: data_out = 18'h359d9; 13'b0011010000111: data_out = 18'h35832; 13'b0011010001000: data_out = 18'h3591e; 13'b0011010001001: data_out = 18'h35c4e; 13'b0011010001010: data_out = 18'h359f9; 13'b0011010001011: data_out = 18'h35b43; 13'b0011010001100: data_out = 18'h35bcf; 13'b0011010001101: data_out = 18'h3612c; 13'b0011010001110: data_out = 18'h35e03; 13'b0011010001111: data_out = 18'h35ff7; 13'b0011010010000: data_out = 18'h35e97; 13'b0011010010001: data_out = 18'h365a3; 13'b0011010010010: data_out = 18'h35fb1; 13'b0011010010011: data_out = 18'h36885; 13'b0011010010100: data_out = 18'h36aa8; 13'b0011010010101: data_out = 18'h36c21; 13'b0011010010110: data_out = 18'h36e12; 13'b0011010010111: data_out = 18'h36fee; 13'b0011010011000: data_out = 18'h3741d; 13'b0011010011001: data_out = 18'h378ac; 13'b0011010011010: data_out = 18'h376d4; 13'b0011010011011: data_out = 18'h379fb; 13'b0011010011100: data_out = 18'h3807c; 13'b0011010011101: data_out = 18'h383e6; 13'b0011010011110: data_out = 18'h38350; 13'b0011010011111: data_out = 18'h38b47; 13'b0011010100000: data_out = 18'h389a4; 13'b0011010100001: data_out = 18'h39567; 13'b0011010100010: data_out = 18'h38e34; 13'b0011010100011: data_out = 18'h3964a; 13'b0011010100100: data_out = 18'h39b11; 13'b0011010100101: data_out = 18'h39cd9; 13'b0011010100110: data_out = 18'h39f1c; 13'b0011010100111: data_out = 18'h3a722; 13'b0011010101000: data_out = 18'h3a583; 13'b0011010101001: data_out = 18'h3a951; 13'b0011010101010: data_out = 18'h3b253; 13'b0011010101011: data_out = 18'h3b2b3; 13'b0011010101100: data_out = 18'h3b383; 13'b0011010101101: data_out = 18'h3b9f8; 13'b0011010101110: data_out = 18'h3becc; 13'b0011010101111: data_out = 18'h3beb7; 13'b0011010110000: data_out = 18'h3c1ad; 13'b0011010110001: data_out = 18'h3ca64; 13'b0011010110010: data_out = 18'h3c7be; 13'b0011010110011: data_out = 18'h3cd9b; 13'b0011010110100: data_out = 18'h3d4d0; 13'b0011010110101: data_out = 18'h3d01c; 13'b0011010110110: data_out = 18'h3da67; 13'b0011010110111: data_out = 18'h3dae5; 13'b0011010111000: data_out = 18'h3df1f; 13'b0011010111001: data_out = 18'h3e6ba; 13'b0011010111010: data_out = 18'h3dfe4; 13'b0011010111011: data_out = 18'h3ea2e; 13'b0011010111100: data_out = 18'h3e99d; 13'b0011010111101: data_out = 18'h3edc8; 13'b0011010111110: data_out = 18'h3f808; 13'b0011010111111: data_out = 18'h3f0a1; 13'b0011011000000: data_out = 18'h3f5fb; 13'b0011011000001: data_out = 18'h3fb0c; 13'b0011011000010: data_out = 18'h3ff3c; 13'b0011011000011: data_out = 18'h002c2; 13'b0011011000100: data_out = 18'h3fec2; 13'b0011011000101: data_out = 18'h00353; 13'b0011011000110: data_out = 18'h009e6; 13'b0011011000111: data_out = 18'h00c02; 13'b0011011001000: data_out = 18'h00abe; 13'b0011011001001: data_out = 18'h00f94; 13'b0011011001010: data_out = 18'h01220; 13'b0011011001011: data_out = 18'h012a4; 13'b0011011001100: data_out = 18'h019a0; 13'b0011011001101: data_out = 18'h0155d; 13'b0011011001110: data_out = 18'h01339; 13'b0011011001111: data_out = 18'h02062; 13'b0011011010000: data_out = 18'h01cb3; 13'b0011011010001: data_out = 18'h02315; 13'b0011011010010: data_out = 18'h02266; 13'b0011011010011: data_out = 18'h02182; 13'b0011011010100: data_out = 18'h029c6; 13'b0011011010101: data_out = 18'h02691; 13'b0011011010110: data_out = 18'h029f5; 13'b0011011010111: data_out = 18'h028f3; 13'b0011011011000: data_out = 18'h02bf7; 13'b0011011011001: data_out = 18'h02d18; 13'b0011011011010: data_out = 18'h0311d; 13'b0011011011011: data_out = 18'h03204; 13'b0011011011100: data_out = 18'h0315a; 13'b0011011011101: data_out = 18'h03171; 13'b0011011011110: data_out = 18'h035af; 13'b0011011011111: data_out = 18'h0380b; 13'b0011011100000: data_out = 18'h03779; 13'b0011011100001: data_out = 18'h0360f; 13'b0011011100010: data_out = 18'h03c0b; 13'b0011011100011: data_out = 18'h03aeb; 13'b0011011100100: data_out = 18'h03d8c; 13'b0011011100101: data_out = 18'h03c15; 13'b0011011100110: data_out = 18'h04062; 13'b0011011100111: data_out = 18'h041fb; 13'b0011011101000: data_out = 18'h044c1; 13'b0011011101001: data_out = 18'h03e75; 13'b0011011101010: data_out = 18'h03ea9; 13'b0011011101011: data_out = 18'h04c83; 13'b0011011101100: data_out = 18'h04477; 13'b0011011101101: data_out = 18'h04999; 13'b0011011101110: data_out = 18'h04c04; 13'b0011011101111: data_out = 18'h047fa; 13'b0011011110000: data_out = 18'h04ae3; 13'b0011011110001: data_out = 18'h04f95; 13'b0011011110010: data_out = 18'h04e64; 13'b0011011110011: data_out = 18'h04ff6; 13'b0011011110100: data_out = 18'h04fc1; 13'b0011011110101: data_out = 18'h05a29; 13'b0011011110110: data_out = 18'h055a7; 13'b0011011110111: data_out = 18'h055e6; 13'b0011011111000: data_out = 18'h0570b; 13'b0011011111001: data_out = 18'h05cf5; 13'b0011011111010: data_out = 18'h05d55; 13'b0011011111011: data_out = 18'h061b8; 13'b0011011111100: data_out = 18'h05e5e; 13'b0011011111101: data_out = 18'h064f8; 13'b0011011111110: data_out = 18'h0650e; 13'b0011011111111: data_out = 18'h06bfd; 13'b0011100000000: data_out = 18'h06a74; 13'b0011100000001: data_out = 18'h0660d; 13'b0011100000010: data_out = 18'h06fe2; 13'b0011100000011: data_out = 18'h06f95; 13'b0011100000100: data_out = 18'h07618; 13'b0011100000101: data_out = 18'h07201; 13'b0011100000110: data_out = 18'h07704; 13'b0011100000111: data_out = 18'h07b49; 13'b0011100001000: data_out = 18'h07c6c; 13'b0011100001001: data_out = 18'h0815e; 13'b0011100001010: data_out = 18'h07ded; 13'b0011100001011: data_out = 18'h08811; 13'b0011100001100: data_out = 18'h081da; 13'b0011100001101: data_out = 18'h08a46; 13'b0011100001110: data_out = 18'h08d8f; 13'b0011100001111: data_out = 18'h08ead; 13'b0011100010000: data_out = 18'h0936c; 13'b0011100010001: data_out = 18'h08ed9; 13'b0011100010010: data_out = 18'h09303; 13'b0011100010011: data_out = 18'h09981; 13'b0011100010100: data_out = 18'h09791; 13'b0011100010101: data_out = 18'h098e8; 13'b0011100010110: data_out = 18'h09d38; 13'b0011100010111: data_out = 18'h09b6a; 13'b0011100011000: data_out = 18'h09ec0; 13'b0011100011001: data_out = 18'h0a224; 13'b0011100011010: data_out = 18'h0a05e; 13'b0011100011011: data_out = 18'h0a28e; 13'b0011100011100: data_out = 18'h0a11b; 13'b0011100011101: data_out = 18'h0a483; 13'b0011100011110: data_out = 18'h0a474; 13'b0011100011111: data_out = 18'h0a1c7; 13'b0011100100000: data_out = 18'h0a5ba; 13'b0011100100001: data_out = 18'h0a7e1; 13'b0011100100010: data_out = 18'h0a4e6; 13'b0011100100011: data_out = 18'h0a781; 13'b0011100100100: data_out = 18'h0a411; 13'b0011100100101: data_out = 18'h0a531; 13'b0011100100110: data_out = 18'h0a9a7; 13'b0011100100111: data_out = 18'h0a692; 13'b0011100101000: data_out = 18'h0a1a5; 13'b0011100101001: data_out = 18'h0a530; 13'b0011100101010: data_out = 18'h0a638; 13'b0011100101011: data_out = 18'h0a440; 13'b0011100101100: data_out = 18'h0a54c; 13'b0011100101101: data_out = 18'h0a29e; 13'b0011100101110: data_out = 18'h09e9d; 13'b0011100101111: data_out = 18'h0a3d8; 13'b0011100110000: data_out = 18'h09f7b; 13'b0011100110001: data_out = 18'h0a047; 13'b0011100110010: data_out = 18'h09c0b; 13'b0011100110011: data_out = 18'h09d15; 13'b0011100110100: data_out = 18'h09a5d; 13'b0011100110101: data_out = 18'h09a26; 13'b0011100110110: data_out = 18'h09445; 13'b0011100110111: data_out = 18'h0957e; 13'b0011100111000: data_out = 18'h08d4a; 13'b0011100111001: data_out = 18'h090d0; 13'b0011100111010: data_out = 18'h09033; 13'b0011100111011: data_out = 18'h08719; 13'b0011100111100: data_out = 18'h08941; 13'b0011100111101: data_out = 18'h084cf; 13'b0011100111110: data_out = 18'h0804e; 13'b0011100111111: data_out = 18'h07d11; 13'b0011101000000: data_out = 18'h07f3a; 13'b0011101000001: data_out = 18'h074a1; 13'b0011101000010: data_out = 18'h07716; 13'b0011101000011: data_out = 18'h07480; 13'b0011101000100: data_out = 18'h069b5; 13'b0011101000101: data_out = 18'h07200; 13'b0011101000110: data_out = 18'h064e3; 13'b0011101000111: data_out = 18'h06540; 13'b0011101001000: data_out = 18'h05e57; 13'b0011101001001: data_out = 18'h05ee7; 13'b0011101001010: data_out = 18'h05c91; 13'b0011101001011: data_out = 18'h0594c; 13'b0011101001100: data_out = 18'h0546a; 13'b0011101001101: data_out = 18'h04ba3; 13'b0011101001110: data_out = 18'h050ed; 13'b0011101001111: data_out = 18'h04b60; 13'b0011101010000: data_out = 18'h042cf; 13'b0011101010001: data_out = 18'h04513; 13'b0011101010010: data_out = 18'h040e8; 13'b0011101010011: data_out = 18'h0381a; 13'b0011101010100: data_out = 18'h03d3a; 13'b0011101010101: data_out = 18'h03118; 13'b0011101010110: data_out = 18'h034a3; 13'b0011101010111: data_out = 18'h03079; 13'b0011101011000: data_out = 18'h02ab2; 13'b0011101011001: data_out = 18'h02bed; 13'b0011101011010: data_out = 18'h02221; 13'b0011101011011: data_out = 18'h02225; 13'b0011101011100: data_out = 18'h01ee4; 13'b0011101011101: data_out = 18'h01d26; 13'b0011101011110: data_out = 18'h0156b; 13'b0011101011111: data_out = 18'h01bdb; 13'b0011101100000: data_out = 18'h01054; 13'b0011101100001: data_out = 18'h01000; 13'b0011101100010: data_out = 18'h00dbd; 13'b0011101100011: data_out = 18'h00678; 13'b0011101100100: data_out = 18'h009de; 13'b0011101100101: data_out = 18'h006a6; 13'b0011101100110: data_out = 18'h3fdf5; 13'b0011101100111: data_out = 18'h3ff05; 13'b0011101101000: data_out = 18'h3fc0f; 13'b0011101101001: data_out = 18'h3fd41; 13'b0011101101010: data_out = 18'h3f676; 13'b0011101101011: data_out = 18'h3f428; 13'b0011101101100: data_out = 18'h3efc1; 13'b0011101101101: data_out = 18'h3f169; 13'b0011101101110: data_out = 18'h3ebf2; 13'b0011101101111: data_out = 18'h3eca8; 13'b0011101110000: data_out = 18'h3e9ba; 13'b0011101110001: data_out = 18'h3e84d; 13'b0011101110010: data_out = 18'h3e22d; 13'b0011101110011: data_out = 18'h3e42d; 13'b0011101110100: data_out = 18'h3e04f; 13'b0011101110101: data_out = 18'h3dd7d; 13'b0011101110110: data_out = 18'h3dd56; 13'b0011101110111: data_out = 18'h3dbc2; 13'b0011101111000: data_out = 18'h3db1c; 13'b0011101111001: data_out = 18'h3da1c; 13'b0011101111010: data_out = 18'h3d291; 13'b0011101111011: data_out = 18'h3d529; 13'b0011101111100: data_out = 18'h3d4c0; 13'b0011101111101: data_out = 18'h3cf8b; 13'b0011101111110: data_out = 18'h3d21f; 13'b0011101111111: data_out = 18'h3cd98; 13'b0011110000000: data_out = 18'h3ced3; 13'b0011110000001: data_out = 18'h3caf3; 13'b0011110000010: data_out = 18'h3cacd; 13'b0011110000011: data_out = 18'h3c993; 13'b0011110000100: data_out = 18'h3c9d0; 13'b0011110000101: data_out = 18'h3c4a9; 13'b0011110000110: data_out = 18'h3c41c; 13'b0011110000111: data_out = 18'h3c542; 13'b0011110001000: data_out = 18'h3c179; 13'b0011110001001: data_out = 18'h3c0d6; 13'b0011110001010: data_out = 18'h3bcd5; 13'b0011110001011: data_out = 18'h3bec1; 13'b0011110001100: data_out = 18'h3c2e0; 13'b0011110001101: data_out = 18'h3bb02; 13'b0011110001110: data_out = 18'h3b695; 13'b0011110001111: data_out = 18'h3b884; 13'b0011110010000: data_out = 18'h3ba45; 13'b0011110010001: data_out = 18'h3b715; 13'b0011110010010: data_out = 18'h3b5a8; 13'b0011110010011: data_out = 18'h3b070; 13'b0011110010100: data_out = 18'h3b640; 13'b0011110010101: data_out = 18'h3b491; 13'b0011110010110: data_out = 18'h3ae2c; 13'b0011110010111: data_out = 18'h3b058; 13'b0011110011000: data_out = 18'h3b385; 13'b0011110011001: data_out = 18'h3aaa5; 13'b0011110011010: data_out = 18'h3ae1e; 13'b0011110011011: data_out = 18'h3ad8b; 13'b0011110011100: data_out = 18'h3aa6e; 13'b0011110011101: data_out = 18'h3a98d; 13'b0011110011110: data_out = 18'h3a7fe; 13'b0011110011111: data_out = 18'h3a7cd; 13'b0011110100000: data_out = 18'h3a811; 13'b0011110100001: data_out = 18'h3a144; 13'b0011110100010: data_out = 18'h3a36c; 13'b0011110100011: data_out = 18'h3a73c; 13'b0011110100100: data_out = 18'h3a1ca; 13'b0011110100101: data_out = 18'h39d6e; 13'b0011110100110: data_out = 18'h3a037; 13'b0011110100111: data_out = 18'h39de3; 13'b0011110101000: data_out = 18'h39cc6; 13'b0011110101001: data_out = 18'h39460; 13'b0011110101010: data_out = 18'h39b13; 13'b0011110101011: data_out = 18'h399b5; 13'b0011110101100: data_out = 18'h39a39; 13'b0011110101101: data_out = 18'h3932f; 13'b0011110101110: data_out = 18'h38f38; 13'b0011110101111: data_out = 18'h39213; 13'b0011110110000: data_out = 18'h391fd; 13'b0011110110001: data_out = 18'h38f70; 13'b0011110110010: data_out = 18'h38ad4; 13'b0011110110011: data_out = 18'h380f2; 13'b0011110110100: data_out = 18'h3894b; 13'b0011110110101: data_out = 18'h3856a; 13'b0011110110110: data_out = 18'h3841f; 13'b0011110110111: data_out = 18'h382e3; 13'b0011110111000: data_out = 18'h37b54; 13'b0011110111001: data_out = 18'h37f8d; 13'b0011110111010: data_out = 18'h37af9; 13'b0011110111011: data_out = 18'h37ab8; 13'b0011110111100: data_out = 18'h37574; 13'b0011110111101: data_out = 18'h373bd; 13'b0011110111110: data_out = 18'h373e9; 13'b0011110111111: data_out = 18'h36efc; 13'b0011111000000: data_out = 18'h370d2; 13'b0011111000001: data_out = 18'h36e07; 13'b0011111000010: data_out = 18'h36a1d; 13'b0011111000011: data_out = 18'h36776; 13'b0011111000100: data_out = 18'h367b8; 13'b0011111000101: data_out = 18'h36413; 13'b0011111000110: data_out = 18'h3637a; 13'b0011111000111: data_out = 18'h363a1; 13'b0011111001000: data_out = 18'h361bf; 13'b0011111001001: data_out = 18'h35cd2; 13'b0011111001010: data_out = 18'h36120; 13'b0011111001011: data_out = 18'h35ca1; 13'b0011111001100: data_out = 18'h35c12; 13'b0011111001101: data_out = 18'h35ad7; 13'b0011111001110: data_out = 18'h35c06; 13'b0011111001111: data_out = 18'h359bf; 13'b0011111010000: data_out = 18'h359f7; 13'b0011111010001: data_out = 18'h359ed; 13'b0011111010010: data_out = 18'h3577f; 13'b0011111010011: data_out = 18'h35a97; 13'b0011111010100: data_out = 18'h35987; 13'b0011111010101: data_out = 18'h357f0; 13'b0011111010110: data_out = 18'h3568a; 13'b0011111010111: data_out = 18'h3587b; 13'b0011111011000: data_out = 18'h35a59; 13'b0011111011001: data_out = 18'h35a0e; 13'b0011111011010: data_out = 18'h35724; 13'b0011111011011: data_out = 18'h35b43; 13'b0011111011100: data_out = 18'h35b20; 13'b0011111011101: data_out = 18'h35c77; 13'b0011111011110: data_out = 18'h35d81; 13'b0011111011111: data_out = 18'h35bfc; 13'b0011111100000: data_out = 18'h35bfd; 13'b0011111100001: data_out = 18'h362ac; 13'b0011111100010: data_out = 18'h35fcd; 13'b0011111100011: data_out = 18'h36437; 13'b0011111100100: data_out = 18'h36074; 13'b0011111100101: data_out = 18'h365a2; 13'b0011111100110: data_out = 18'h36b06; 13'b0011111100111: data_out = 18'h36ce1; 13'b0011111101000: data_out = 18'h36a03; 13'b0011111101001: data_out = 18'h36fd7; 13'b0011111101010: data_out = 18'h3745c; 13'b0011111101011: data_out = 18'h37536; 13'b0011111101100: data_out = 18'h375ff; 13'b0011111101101: data_out = 18'h37b40; 13'b0011111101110: data_out = 18'h3801b; 13'b0011111101111: data_out = 18'h380fc; 13'b0011111110000: data_out = 18'h38671; 13'b0011111110001: data_out = 18'h38818; 13'b0011111110010: data_out = 18'h38b15; 13'b0011111110011: data_out = 18'h38e31; 13'b0011111110100: data_out = 18'h393eb; 13'b0011111110101: data_out = 18'h39651; 13'b0011111110110: data_out = 18'h39a09; 13'b0011111110111: data_out = 18'h39dec; 13'b0011111111000: data_out = 18'h39f7a; 13'b0011111111001: data_out = 18'h3a5d9; 13'b0011111111010: data_out = 18'h3a6c2; 13'b0011111111011: data_out = 18'h3aaa7; 13'b0011111111100: data_out = 18'h3ada8; 13'b0011111111101: data_out = 18'h3b64b; 13'b0011111111110: data_out = 18'h3b5a7; 13'b0011111111111: data_out = 18'h3ba91; 13'b0100000000000: data_out = 18'h3bb5c; 13'b0100000000001: data_out = 18'h3c0c0; 13'b0100000000010: data_out = 18'h3c46a; 13'b0100000000011: data_out = 18'h3ca16; 13'b0100000000100: data_out = 18'h3c83f; 13'b0100000000101: data_out = 18'h3d07b; 13'b0100000000110: data_out = 18'h3d1b2; 13'b0100000000111: data_out = 18'h3d82d; 13'b0100000001000: data_out = 18'h3d49a; 13'b0100000001001: data_out = 18'h3debc; 13'b0100000001010: data_out = 18'h3dddb; 13'b0100000001011: data_out = 18'h3e53f; 13'b0100000001100: data_out = 18'h3e40a; 13'b0100000001101: data_out = 18'h3e858; 13'b0100000001110: data_out = 18'h3ebf2; 13'b0100000001111: data_out = 18'h3f0a2; 13'b0100000010000: data_out = 18'h3f19e; 13'b0100000010001: data_out = 18'h3f6dd; 13'b0100000010010: data_out = 18'h3f824; 13'b0100000010011: data_out = 18'h3f6e2; 13'b0100000010100: data_out = 18'h0000c; 13'b0100000010101: data_out = 18'h001ae; 13'b0100000010110: data_out = 18'h005be; 13'b0100000010111: data_out = 18'h004e8; 13'b0100000011000: data_out = 18'h00a59; 13'b0100000011001: data_out = 18'h006ec; 13'b0100000011010: data_out = 18'h00f78; 13'b0100000011011: data_out = 18'h0111d; 13'b0100000011100: data_out = 18'h012ba; 13'b0100000011101: data_out = 18'h0135d; 13'b0100000011110: data_out = 18'h01837; 13'b0100000011111: data_out = 18'h0154c; 13'b0100000100000: data_out = 18'h02030; 13'b0100000100001: data_out = 18'h01bd2; 13'b0100000100010: data_out = 18'h02132; 13'b0100000100011: data_out = 18'h0214c; 13'b0100000100100: data_out = 18'h024c5; 13'b0100000100101: data_out = 18'h0244a; 13'b0100000100110: data_out = 18'h027c7; 13'b0100000100111: data_out = 18'h02853; 13'b0100000101000: data_out = 18'h02b17; 13'b0100000101001: data_out = 18'h02d06; 13'b0100000101010: data_out = 18'h02df6; 13'b0100000101011: data_out = 18'h03085; 13'b0100000101100: data_out = 18'h030b9; 13'b0100000101101: data_out = 18'h0328c; 13'b0100000101110: data_out = 18'h03278; 13'b0100000101111: data_out = 18'h036a8; 13'b0100000110000: data_out = 18'h0367d; 13'b0100000110001: data_out = 18'h038dd; 13'b0100000110010: data_out = 18'h0382e; 13'b0100000110011: data_out = 18'h03b45; 13'b0100000110100: data_out = 18'h03c16; 13'b0100000110101: data_out = 18'h0402a; 13'b0100000110110: data_out = 18'h03d00; 13'b0100000110111: data_out = 18'h0413f; 13'b0100000111000: data_out = 18'h041ef; 13'b0100000111001: data_out = 18'h04285; 13'b0100000111010: data_out = 18'h04693; 13'b0100000111011: data_out = 18'h04490; 13'b0100000111100: data_out = 18'h04601; 13'b0100000111101: data_out = 18'h047b7; 13'b0100000111110: data_out = 18'h0461c; 13'b0100000111111: data_out = 18'h04b5c; 13'b0100001000000: data_out = 18'h04e17; 13'b0100001000001: data_out = 18'h0466b; 13'b0100001000010: data_out = 18'h04ce8; 13'b0100001000011: data_out = 18'h05007; 13'b0100001000100: data_out = 18'h04ee7; 13'b0100001000101: data_out = 18'h05120; 13'b0100001000110: data_out = 18'h05322; 13'b0100001000111: data_out = 18'h04fc7; 13'b0100001001000: data_out = 18'h053ac; 13'b0100001001001: data_out = 18'h055ec; 13'b0100001001010: data_out = 18'h056b3; 13'b0100001001011: data_out = 18'h05690; 13'b0100001001100: data_out = 18'h056f1; 13'b0100001001101: data_out = 18'h059dd; 13'b0100001001110: data_out = 18'h05b5d; 13'b0100001001111: data_out = 18'h05bfe; 13'b0100001010000: data_out = 18'h05edd; 13'b0100001010001: data_out = 18'h05c04; 13'b0100001010010: data_out = 18'h06081; 13'b0100001010011: data_out = 18'h0605a; 13'b0100001010100: data_out = 18'h0639a; 13'b0100001010101: data_out = 18'h06331; 13'b0100001010110: data_out = 18'h06292; 13'b0100001010111: data_out = 18'h065b6; 13'b0100001011000: data_out = 18'h066d3; 13'b0100001011001: data_out = 18'h06899; 13'b0100001011010: data_out = 18'h068c8; 13'b0100001011011: data_out = 18'h06dd1; 13'b0100001011100: data_out = 18'h06c4a; 13'b0100001011101: data_out = 18'h06d94; 13'b0100001011110: data_out = 18'h06e46; 13'b0100001011111: data_out = 18'h0704a; 13'b0100001100000: data_out = 18'h071b7; 13'b0100001100001: data_out = 18'h072f5; 13'b0100001100010: data_out = 18'h07782; 13'b0100001100011: data_out = 18'h075a0; 13'b0100001100100: data_out = 18'h075f8; 13'b0100001100101: data_out = 18'h0795e; 13'b0100001100110: data_out = 18'h07dc9; 13'b0100001100111: data_out = 18'h07ec9; 13'b0100001101000: data_out = 18'h07ab7; 13'b0100001101001: data_out = 18'h080aa; 13'b0100001101010: data_out = 18'h0821b; 13'b0100001101011: data_out = 18'h081df; 13'b0100001101100: data_out = 18'h082b1; 13'b0100001101101: data_out = 18'h086a5; 13'b0100001101110: data_out = 18'h0868d; 13'b0100001101111: data_out = 18'h0888c; 13'b0100001110000: data_out = 18'h08d02; 13'b0100001110001: data_out = 18'h08b72; 13'b0100001110010: data_out = 18'h08a64; 13'b0100001110011: data_out = 18'h08d27; 13'b0100001110100: data_out = 18'h090e7; 13'b0100001110101: data_out = 18'h09292; 13'b0100001110110: data_out = 18'h09536; 13'b0100001110111: data_out = 18'h0976c; 13'b0100001111000: data_out = 18'h09754; 13'b0100001111001: data_out = 18'h09686; 13'b0100001111010: data_out = 18'h09900; 13'b0100001111011: data_out = 18'h09a99; 13'b0100001111100: data_out = 18'h09aae; 13'b0100001111101: data_out = 18'h099c3; 13'b0100001111110: data_out = 18'h09fcf; 13'b0100001111111: data_out = 18'h09daf; 13'b0100010000000: data_out = 18'h09f42; 13'b0100010000001: data_out = 18'h0a003; 13'b0100010000010: data_out = 18'h0a10f; 13'b0100010000011: data_out = 18'h0a2c2; 13'b0100010000100: data_out = 18'h0a1bb; 13'b0100010000101: data_out = 18'h09fa5; 13'b0100010000110: data_out = 18'h0a3a0; 13'b0100010000111: data_out = 18'h0a4e8; 13'b0100010001000: data_out = 18'h0a26b; 13'b0100010001001: data_out = 18'h0a23e; 13'b0100010001010: data_out = 18'h0a47e; 13'b0100010001011: data_out = 18'h0a343; 13'b0100010001100: data_out = 18'h0a448; 13'b0100010001101: data_out = 18'h0a2f6; 13'b0100010001110: data_out = 18'h0a33b; 13'b0100010001111: data_out = 18'h0a351; 13'b0100010010000: data_out = 18'h0a2d0; 13'b0100010010001: data_out = 18'h0a216; 13'b0100010010010: data_out = 18'h0a289; 13'b0100010010011: data_out = 18'h0a160; 13'b0100010010100: data_out = 18'h0a0a2; 13'b0100010010101: data_out = 18'h0a122; 13'b0100010010110: data_out = 18'h09b20; 13'b0100010010111: data_out = 18'h09ea4; 13'b0100010011000: data_out = 18'h09c9f; 13'b0100010011001: data_out = 18'h09b3c; 13'b0100010011010: data_out = 18'h0998c; 13'b0100010011011: data_out = 18'h09816; 13'b0100010011100: data_out = 18'h095b3; 13'b0100010011101: data_out = 18'h093ea; 13'b0100010011110: data_out = 18'h0933f; 13'b0100010011111: data_out = 18'h08ec7; 13'b0100010100000: data_out = 18'h08e45; 13'b0100010100001: data_out = 18'h08a22; 13'b0100010100010: data_out = 18'h08acc; 13'b0100010100011: data_out = 18'h085f6; 13'b0100010100100: data_out = 18'h08398; 13'b0100010100101: data_out = 18'h07f41; 13'b0100010100110: data_out = 18'h0814e; 13'b0100010100111: data_out = 18'h076e2; 13'b0100010101000: data_out = 18'h078f1; 13'b0100010101001: data_out = 18'h074e9; 13'b0100010101010: data_out = 18'h070b9; 13'b0100010101011: data_out = 18'h06eb2; 13'b0100010101100: data_out = 18'h06a13; 13'b0100010101101: data_out = 18'h065e9; 13'b0100010101110: data_out = 18'h0651c; 13'b0100010101111: data_out = 18'h05fe9; 13'b0100010110000: data_out = 18'h05e97; 13'b0100010110001: data_out = 18'h0587d; 13'b0100010110010: data_out = 18'h054c8; 13'b0100010110011: data_out = 18'h05358; 13'b0100010110100: data_out = 18'h05078; 13'b0100010110101: data_out = 18'h04a99; 13'b0100010110110: data_out = 18'h04563; 13'b0100010110111: data_out = 18'h04829; 13'b0100010111000: data_out = 18'h04177; 13'b0100010111001: data_out = 18'h03c25; 13'b0100010111010: data_out = 18'h037b1; 13'b0100010111011: data_out = 18'h037b9; 13'b0100010111100: data_out = 18'h03448; 13'b0100010111101: data_out = 18'h02ff7; 13'b0100010111110: data_out = 18'h02c22; 13'b0100010111111: data_out = 18'h028ed; 13'b0100011000000: data_out = 18'h02270; 13'b0100011000001: data_out = 18'h02375; 13'b0100011000010: data_out = 18'h020bd; 13'b0100011000011: data_out = 18'h01ba1; 13'b0100011000100: data_out = 18'h01748; 13'b0100011000101: data_out = 18'h017d4; 13'b0100011000110: data_out = 18'h01187; 13'b0100011000111: data_out = 18'h00d42; 13'b0100011001000: data_out = 18'h00eb5; 13'b0100011001001: data_out = 18'h007c2; 13'b0100011001010: data_out = 18'h00566; 13'b0100011001011: data_out = 18'h002fb; 13'b0100011001100: data_out = 18'h0037f; 13'b0100011001101: data_out = 18'h3fb88; 13'b0100011001110: data_out = 18'h3fbc9; 13'b0100011001111: data_out = 18'h3f707; 13'b0100011010000: data_out = 18'h3f768; 13'b0100011010001: data_out = 18'h3f1b4; 13'b0100011010010: data_out = 18'h3eed8; 13'b0100011010011: data_out = 18'h3eec4; 13'b0100011010100: data_out = 18'h3ec0e; 13'b0100011010101: data_out = 18'h3e7aa; 13'b0100011010110: data_out = 18'h3e660; 13'b0100011010111: data_out = 18'h3e4ea; 13'b0100011011000: data_out = 18'h3e3ca; 13'b0100011011001: data_out = 18'h3dd07; 13'b0100011011010: data_out = 18'h3df54; 13'b0100011011011: data_out = 18'h3db33; 13'b0100011011100: data_out = 18'h3d91a; 13'b0100011011101: data_out = 18'h3d716; 13'b0100011011110: data_out = 18'h3d6ea; 13'b0100011011111: data_out = 18'h3d3eb; 13'b0100011100000: data_out = 18'h3d15d; 13'b0100011100001: data_out = 18'h3cfe9; 13'b0100011100010: data_out = 18'h3cf8c; 13'b0100011100011: data_out = 18'h3cdca; 13'b0100011100100: data_out = 18'h3caff; 13'b0100011100101: data_out = 18'h3c9d8; 13'b0100011100110: data_out = 18'h3c780; 13'b0100011100111: data_out = 18'h3c621; 13'b0100011101000: data_out = 18'h3c882; 13'b0100011101001: data_out = 18'h3c4f1; 13'b0100011101010: data_out = 18'h3c2c0; 13'b0100011101011: data_out = 18'h3c1cf; 13'b0100011101100: data_out =