Git Product home page Git Product logo

verilog-generator-of-neural-net-digit-detector-for-fpga's Introduction

Verilog Generator of Neural Net Digit Detector for FPGA

It's the project which train neural net to detect dark digits on light background. Then neural net converted to verilog HDL representation using several techniques to reduce needed resources on FPGA and increase speed of processing. Code is production ready to use in real device. It can be easily extended to be used with detection of other objects with different neural net structure.

Requirements

Python 3.5, Tensorflow 1.4.0, Keras 2.1.3

How to run:

  • python r01_train_neural_net_and_prepare_initial_weights.py
  • python r02_rescale_weights_to_use_fixed_point_representation.py
  • python r03_find_optimal_bit_for_weights.py
  • python r04_verilog_generator_grayscale_file.py
  • python r05_verilog_generator_neural_net_structure.py

Verilog already added in repository in ''verilog'' folder. It has everything you need including all code to interact with camera or screen. Neural net verilog description is located in ''verliog/code/neuroset'' folder.

Neural net structure

Neural Net Structure

Device

To recreate the device you need 3 components:

Connection of components

Connection scheme

De0-Nano connection

Connection photo

Demo video with detection

Convolutional Neural Net implementation in FPGA (Demo)

Notes

  • You can change constant num_conv = 2 in r05_verilog_generator_neural_net_structure.py to 1, 2 or 4 convolutional blocks which will work in parallel. More blocks will require more LE in FPGA, but increase the overall speed.

  • Comparison table for different bit weights and number of convolution blocks below (red rows: unable to synthesize, due to Cyclone IV limitations).

Used FPGA resources

Related project

The similar project but with more complicated and widely used neural net: MobileNet (v1). It uses some other set of devices. It has similar code structure. It has fast speed (>40 FPS) and much better accuracy comparing to this project. It suitable for most image classification tasks in real time.

Citation

You can find detailed description of the method in our paper (or unpaywalled preprint). If you find this work useful, please consider citing:

  @inproceedings{solovyev2019fixed,
    title={Fixed-point convolutional neural network for real-time video processing in FPGA},
    author={Solovyev, Roman and Kustov, Alexander and Telpukhov, Dmitry and Rukhlov, Vladimir and Kalinin, Alexandr},
    booktitle={2019 IEEE Conference of Russian Young Researchers in Electrical and Electronic Engineering (EIConRus)},
    pages={1605--1611},
    year={2019},
    organization={IEEE}
  }

verilog-generator-of-neural-net-digit-detector-for-fpga's People

Contributors

aaronferrucci avatar alxndrkalinin avatar idmippm avatar makaroiiika avatar zfturbo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

verilog-generator-of-neural-net-digit-detector-for-fpga's Issues

Different components configure

Hi,

I tried to buy the same components as your spec, but it seems that there are some slight differnce and after 100% sucessful build, it didn't work at all.

Can you help to guide me how to configure with my components here, as I try to plug in as far as I know but the LCD is not working and didn't show anything.

photo 1-7-19 3 07 18 pm
photo 1-7-19 3 07 34 pm

改变结构

请问我如果改变网络的层数,比如再加一层卷积层,那么生成的verilog代码还能够正常工作吗?我试了发现无法工作。

The verilog project fails under higher clock frequencies (use PLL frequency multiplication 100MHz), and the FPGA output is not as expected

First of all, this project is really good. I admire you for doing such an excellent job and very interested in your work.
I want to ask you some questions. I tested whether the project works under different system clocks, and found that it can only run normally at 50Mhz or lower frequency. If I use 100Mhz system clock, the output result is unstable or even wrong. How can i solve this problem? I hope to get your guidance, thank you very much anyway.

屏幕截图 2022-04-14 140817
屏幕截图 2022-04-14 140956

Terasic DE10-Lite

Does the project work in Terasic DE10-Lite? The board have max10 FPGA chip

Pin Planner for FPGA

Hi !

This is an awesome project! I came across your project and wanted to implement it in FPGA however I'm a little bit unsure on the manual assignments for Pin Planner in the FPGA. Is there a specific pin to be allocated for the node not found in the FPGA datasheet?

Thanks in advance!

Some problems with reading verilog code

Hello, I found it difficult to understand some of the details in the process of reading the verilog code. Do you have any suggestions? Do you have information on the role of each module's signal ports? (For example, the role of each signal port of maxp, the role of the border module, etc.) I hope you can give me some pointers, thank you very much! !

Convert_image_for_testbench.py

Dear sir,
Thanks for your code ,it is really helpful for me ,but I have a doubt in convert_image_for_testbench.py codes .I have to give test image number as 2 ,but default it is 0 ,i don't have an idea to change the code for giving test image as 2 , could you please help me to solve this problem.

the question of verilog code generator

Hello, I would like to ask you a question, your py code to generate verilog code, is actually just some import of weights?The timing of the verilog code is still a lot of work, right?

some question about simulasion

Hello! After you modified convert_image_for_testbench.py yesterday, I used this code to generate the storage data in Figure 1, but found that the simulation results are still all "a" (only the first "0" was successfully recognized, and all other results were It outputs "a", as shown in Figure 2), the following is my testbench, I am still very confused about this, I hope you can give me some pointers, thank you very much! !
fig1:
image
fig2:
image
fig3:
image

testbench:

module test();
parameter SIZE=11;

  reg clk;
  reg GO;
  reg signed [SIZE-1:0] storage [0:783]; 
  
  reg we_database;
  reg [SIZE-1:0] dp_database;
  reg [12:0] address_p_database;
  
  reg [9:0] x;
  
  wire [3:0] RESULT;
  TOP TOP(
	.clk					(clk),
	.GO						(GO),
	.RESULT					(RESULT),
	.we_database			(we_database), 
	.dp_database			(dp_database), 
	.address_p_database		(address_p_database-1'b1),
	.STOP					(STOP)
  );
initial begin
  clk=0;
  address_p_database=0;
  x=0;
  we_database=1;
  #200 GO=1;
end
always #10 clk=~clk;
always @(posedge clk)
	begin
		if (we_database)
		begin
			if (address_p_database<=783) 
				begin
						dp_database = storage[address_p_database];
						address_p_database=address_p_database+1'b1;
				end
			else we_database=0;
		end
		if ((x<=28*28)&&(GO)) x=x+1;
		else GO=0;
	if (STOP==1)
	begin
		$display("RESULT: %d",RESULT);
		$finish;
	end
 end
 
// Precision: 11
// Image size: 28x28
// Answer: 3

initial
begin
	storage[0] =  10'b1001000100; // [ 0.56640625]
	storage[1] =  10'b1001000100; // [ 0.56640625]
	storage[2] =  10'b1001001100; // [ 0.57421875]
	storage[3] =  10'b1001010100; // [ 0.58203125]
	storage[4] =  10'b1001011000; // [ 0.5859375]
	storage[5] =  10'b1001011100; // [ 0.58984375]
	storage[6] =  10'b1001100100; // [ 0.59765625]
	storage[7] =  10'b1001101000; // [ 0.6015625]
	storage[8] =  10'b1001101100; // [ 0.60546875]
	storage[9] =  10'b1001101100; // [ 0.60546875]
	storage[10] =  10'b1001100000; // [ 0.59375]
	storage[11] =  10'b1000100100; // [ 0.53515625]
	storage[12] =  10'b0111101100; // [ 0.48046875]
	storage[13] =  10'b0111101100; // [ 0.48046875]
	storage[14] =  10'b0111111100; // [ 0.49609375]
	storage[15] =  10'b0111111000; // [ 0.4921875]
	storage[16] =  10'b1000000100; // [ 0.50390625]
	storage[17] =  10'b1001010000; // [ 0.578125]
	storage[18] =  10'b1001111100; // [ 0.62109375]
	storage[19] =  10'b1010000000; // [ 0.625]
	storage[20] =  10'b1010000000; // [ 0.625]
	storage[21] =  10'b1001111100; // [ 0.62109375]
	storage[22] =  10'b1001110100; // [ 0.61328125]
	storage[23] =  10'b1001101000; // [ 0.6015625]
	storage[24] =  10'b1001011100; // [ 0.58984375]
	storage[25] =  10'b1001011000; // [ 0.5859375]
	storage[26] =  10'b1001010000; // [ 0.578125]
	storage[27] =  10'b1001001100; // [ 0.57421875]
	storage[28] =  10'b1001001000; // [ 0.5703125]
	storage[29] =  10'b1001001100; // [ 0.57421875]
	storage[30] =  10'b1001010000; // [ 0.578125]
	storage[31] =  10'b1001011000; // [ 0.5859375]
	storage[32] =  10'b1001100000; // [ 0.59375]
	storage[33] =  10'b1001100100; // [ 0.59765625]
	storage[34] =  10'b1001101000; // [ 0.6015625]
	storage[35] =  10'b1001101100; // [ 0.60546875]
	storage[36] =  10'b1001110000; // [ 0.609375]
	storage[37] =  10'b1001101000; // [ 0.6015625]
	storage[38] =  10'b1000010100; // [ 0.51953125]
	storage[39] =  10'b0111110100; // [ 0.48828125]
	storage[40] =  10'b1001001000; // [ 0.5703125]
	storage[41] =  10'b1001110000; // [ 0.609375]
	storage[42] =  10'b1001111000; // [ 0.6171875]
	storage[43] =  10'b1001110000; // [ 0.609375]
	storage[44] =  10'b1000111100; // [ 0.55859375]
	storage[45] =  10'b1000010000; // [ 0.515625]
	storage[46] =  10'b1001100100; // [ 0.59765625]
	storage[47] =  10'b1010000000; // [ 0.625]
	storage[48] =  10'b1010000000; // [ 0.625]
	storage[49] =  10'b1001111100; // [ 0.62109375]
	storage[50] =  10'b1001110100; // [ 0.61328125]
	storage[51] =  10'b1001101000; // [ 0.6015625]
	storage[52] =  10'b1001100100; // [ 0.59765625]
	storage[53] =  10'b1001011100; // [ 0.58984375]
	storage[54] =  10'b1001011100; // [ 0.58984375]
	storage[55] =  10'b1001010000; // [ 0.578125]
	storage[56] =  10'b1001001000; // [ 0.5703125]
	storage[57] =  10'b1001010000; // [ 0.578125]
	storage[58] =  10'b1001010100; // [ 0.58203125]
	storage[59] =  10'b1001011000; // [ 0.5859375]
	storage[60] =  10'b1001100000; // [ 0.59375]
	storage[61] =  10'b1001100100; // [ 0.59765625]
	storage[62] =  10'b1001101000; // [ 0.6015625]
	storage[63] =  10'b1001101100; // [ 0.60546875]
	storage[64] =  10'b1001110000; // [ 0.609375]
	storage[65] =  10'b1001011000; // [ 0.5859375]
	storage[66] =  10'b1000001100; // [ 0.51171875]
	storage[67] =  10'b1001100100; // [ 0.59765625]
	storage[68] =  10'b1010000000; // [ 0.625]
	storage[69] =  10'b1010000000; // [ 0.625]
	storage[70] =  10'b1010000000; // [ 0.625]
	storage[71] =  10'b1001111100; // [ 0.62109375]
	storage[72] =  10'b1001110000; // [ 0.609375]
	storage[73] =  10'b1000110100; // [ 0.55078125]
	storage[74] =  10'b1000101100; // [ 0.54296875]
	storage[75] =  10'b1010000100; // [ 0.62890625]
	storage[76] =  10'b1010001000; // [ 0.6328125]
	storage[77] =  10'b1010000100; // [ 0.62890625]
	storage[78] =  10'b1001111000; // [ 0.6171875]
	storage[79] =  10'b1001101100; // [ 0.60546875]
	storage[80] =  10'b1001101100; // [ 0.60546875]
	storage[81] =  10'b1001100100; // [ 0.59765625]
	storage[82] =  10'b1001100000; // [ 0.59375]
	storage[83] =  10'b1001011000; // [ 0.5859375]
	storage[84] =  10'b1001001000; // [ 0.5703125]
	storage[85] =  10'b1001010100; // [ 0.58203125]
	storage[86] =  10'b1001011000; // [ 0.5859375]
	storage[87] =  10'b1001011100; // [ 0.58984375]
	storage[88] =  10'b1001100100; // [ 0.59765625]
	storage[89] =  10'b1001101000; // [ 0.6015625]
	storage[90] =  10'b1001101100; // [ 0.60546875]
	storage[91] =  10'b1001110100; // [ 0.61328125]
	storage[92] =  10'b1001111000; // [ 0.6171875]
	storage[93] =  10'b1001110100; // [ 0.61328125]
	storage[94] =  10'b1001110100; // [ 0.61328125]
	storage[95] =  10'b1010001000; // [ 0.6328125]
	storage[96] =  10'b1010001000; // [ 0.6328125]
	storage[97] =  10'b1010001000; // [ 0.6328125]
	storage[98] =  10'b1010001000; // [ 0.6328125]
	storage[99] =  10'b1010000100; // [ 0.62890625]
	storage[100] =  10'b1001111100; // [ 0.62109375]
	storage[101] =  10'b1001001100; // [ 0.57421875]
	storage[102] =  10'b1000011000; // [ 0.5234375]
	storage[103] =  10'b1010001000; // [ 0.6328125]
	storage[104] =  10'b1010010100; // [ 0.64453125]
	storage[105] =  10'b1010001100; // [ 0.63671875]
	storage[106] =  10'b1001111100; // [ 0.62109375]
	storage[107] =  10'b1001110100; // [ 0.61328125]
	storage[108] =  10'b1001101100; // [ 0.60546875]
	storage[109] =  10'b1001101100; // [ 0.60546875]
	storage[110] =  10'b1001100100; // [ 0.59765625]
	storage[111] =  10'b1001100000; // [ 0.59375]
	storage[112] =  10'b1001001100; // [ 0.57421875]
	storage[113] =  10'b1001011000; // [ 0.5859375]
	storage[114] =  10'b1001011100; // [ 0.58984375]
	storage[115] =  10'b1001100100; // [ 0.59765625]
	storage[116] =  10'b1001101000; // [ 0.6015625]
	storage[117] =  10'b1001110000; // [ 0.609375]
	storage[118] =  10'b1001110100; // [ 0.61328125]
	storage[119] =  10'b1001111000; // [ 0.6171875]
	storage[120] =  10'b1001111100; // [ 0.62109375]
	storage[121] =  10'b1010000100; // [ 0.62890625]
	storage[122] =  10'b1010001100; // [ 0.63671875]
	storage[123] =  10'b1010010000; // [ 0.640625]
	storage[124] =  10'b1010010000; // [ 0.640625]
	storage[125] =  10'b1010001100; // [ 0.63671875]
	storage[126] =  10'b1010001100; // [ 0.63671875]
	storage[127] =  10'b1010001000; // [ 0.6328125]
	storage[128] =  10'b1001111100; // [ 0.62109375]
	storage[129] =  10'b1000110100; // [ 0.55078125]
	storage[130] =  10'b1000100100; // [ 0.53515625]
	storage[131] =  10'b1010010100; // [ 0.64453125]
	storage[132] =  10'b1010011100; // [ 0.65234375]
	storage[133] =  10'b1010010000; // [ 0.640625]
	storage[134] =  10'b1010000100; // [ 0.62890625]
	storage[135] =  10'b1001111100; // [ 0.62109375]
	storage[136] =  10'b1001110100; // [ 0.61328125]
	storage[137] =  10'b1001110000; // [ 0.609375]
	storage[138] =  10'b1001101000; // [ 0.6015625]
	storage[139] =  10'b1001100100; // [ 0.59765625]
	storage[140] =  10'b1001010100; // [ 0.58203125]
	storage[141] =  10'b1001011100; // [ 0.58984375]
	storage[142] =  10'b1001100100; // [ 0.59765625]
	storage[143] =  10'b1001101100; // [ 0.60546875]
	storage[144] =  10'b1001110000; // [ 0.609375]
	storage[145] =  10'b1001111000; // [ 0.6171875]
	storage[146] =  10'b1001111100; // [ 0.62109375]
	storage[147] =  10'b1010000000; // [ 0.625]
	storage[148] =  10'b1010000100; // [ 0.62890625]
	storage[149] =  10'b1010001100; // [ 0.63671875]
	storage[150] =  10'b1010010100; // [ 0.64453125]
	storage[151] =  10'b1010010100; // [ 0.64453125]
	storage[152] =  10'b1010010000; // [ 0.640625]
	storage[153] =  10'b1010010100; // [ 0.64453125]
	storage[154] =  10'b1010010100; // [ 0.64453125]
	storage[155] =  10'b1010001000; // [ 0.6328125]
	storage[156] =  10'b1001110000; // [ 0.609375]
	storage[157] =  10'b1000000100; // [ 0.50390625]
	storage[158] =  10'b1001011000; // [ 0.5859375]
	storage[159] =  10'b1010100000; // [ 0.65625]
	storage[160] =  10'b1010100000; // [ 0.65625]
	storage[161] =  10'b1010010100; // [ 0.64453125]
	storage[162] =  10'b1010001000; // [ 0.6328125]
	storage[163] =  10'b1010000000; // [ 0.625]
	storage[164] =  10'b1001110100; // [ 0.61328125]
	storage[165] =  10'b1001110000; // [ 0.609375]
	storage[166] =  10'b1001101100; // [ 0.60546875]
	storage[167] =  10'b1001100000; // [ 0.59375]
	storage[168] =  10'b1001011000; // [ 0.5859375]
	storage[169] =  10'b1001011100; // [ 0.58984375]
	storage[170] =  10'b1001101000; // [ 0.6015625]
	storage[171] =  10'b1001110000; // [ 0.609375]
	storage[172] =  10'b1001110100; // [ 0.61328125]
	storage[173] =  10'b1010000000; // [ 0.625]
	storage[174] =  10'b1010000100; // [ 0.62890625]
	storage[175] =  10'b1010001000; // [ 0.6328125]
	storage[176] =  10'b1010001100; // [ 0.63671875]
	storage[177] =  10'b1010010000; // [ 0.640625]
	storage[178] =  10'b1010011000; // [ 0.6484375]
	storage[179] =  10'b1010011000; // [ 0.6484375]
	storage[180] =  10'b1010011000; // [ 0.6484375]
	storage[181] =  10'b1010011000; // [ 0.6484375]
	storage[182] =  10'b1010011000; // [ 0.6484375]
	storage[183] =  10'b1010000100; // [ 0.62890625]
	storage[184] =  10'b1000101100; // [ 0.54296875]
	storage[185] =  10'b1000001100; // [ 0.51171875]
	storage[186] =  10'b1010001100; // [ 0.63671875]
	storage[187] =  10'b1010100100; // [ 0.66015625]
	storage[188] =  10'b1010100000; // [ 0.65625]
	storage[189] =  10'b1010011000; // [ 0.6484375]
	storage[190] =  10'b1010001100; // [ 0.63671875]
	storage[191] =  10'b1010000100; // [ 0.62890625]
	storage[192] =  10'b1001111100; // [ 0.62109375]
	storage[193] =  10'b1001110100; // [ 0.61328125]
	storage[194] =  10'b1001101100; // [ 0.60546875]
	storage[195] =  10'b1001101000; // [ 0.6015625]
	storage[196] =  10'b1001011000; // [ 0.5859375]
	storage[197] =  10'b1001100000; // [ 0.59375]
	storage[198] =  10'b1001101000; // [ 0.6015625]
	storage[199] =  10'b1001110000; // [ 0.609375]
	storage[200] =  10'b1001111000; // [ 0.6171875]
	storage[201] =  10'b1010000000; // [ 0.625]
	storage[202] =  10'b1010000100; // [ 0.62890625]
	storage[203] =  10'b1010001000; // [ 0.6328125]
	storage[204] =  10'b1010010000; // [ 0.640625]
	storage[205] =  10'b1010011000; // [ 0.6484375]
	storage[206] =  10'b1010011000; // [ 0.6484375]
	storage[207] =  10'b1010011000; // [ 0.6484375]
	storage[208] =  10'b1010011000; // [ 0.6484375]
	storage[209] =  10'b1010011000; // [ 0.6484375]
	storage[210] =  10'b1010001000; // [ 0.6328125]
	storage[211] =  10'b1001000000; // [ 0.5625]
	storage[212] =  10'b0111111000; // [ 0.4921875]
	storage[213] =  10'b1001011100; // [ 0.58984375]
	storage[214] =  10'b1010100000; // [ 0.65625]
	storage[215] =  10'b1010100100; // [ 0.66015625]
	storage[216] =  10'b1010101000; // [ 0.6640625]
	storage[217] =  10'b1010100100; // [ 0.66015625]
	storage[218] =  10'b1010011100; // [ 0.65234375]
	storage[219] =  10'b1010010000; // [ 0.640625]
	storage[220] =  10'b1010000100; // [ 0.62890625]
	storage[221] =  10'b1001111100; // [ 0.62109375]
	storage[222] =  10'b1001110100; // [ 0.61328125]
	storage[223] =  10'b1001101100; // [ 0.60546875]
	storage[224] =  10'b1001011100; // [ 0.58984375]
	storage[225] =  10'b1001100100; // [ 0.59765625]
	storage[226] =  10'b1001101000; // [ 0.6015625]
	storage[227] =  10'b1001110000; // [ 0.609375]
	storage[228] =  10'b1001111000; // [ 0.6171875]
	storage[229] =  10'b1010000000; // [ 0.625]
	storage[230] =  10'b1010000100; // [ 0.62890625]
	storage[231] =  10'b1010001100; // [ 0.63671875]
	storage[232] =  10'b1010010000; // [ 0.640625]
	storage[233] =  10'b1010011100; // [ 0.65234375]
	storage[234] =  10'b1010011100; // [ 0.65234375]
	storage[235] =  10'b1010011100; // [ 0.65234375]
	storage[236] =  10'b1010011100; // [ 0.65234375]
	storage[237] =  10'b1010001100; // [ 0.63671875]
	storage[238] =  10'b1001000100; // [ 0.56640625]
	storage[239] =  10'b0111111000; // [ 0.4921875]
	storage[240] =  10'b1001011100; // [ 0.58984375]
	storage[241] =  10'b1010010000; // [ 0.640625]
	storage[242] =  10'b1010100000; // [ 0.65625]
	storage[243] =  10'b1010110000; // [ 0.671875]
	storage[244] =  10'b1010101100; // [ 0.66796875]
	storage[245] =  10'b1010101100; // [ 0.66796875]
	storage[246] =  10'b1010100100; // [ 0.66015625]
	storage[247] =  10'b1010011100; // [ 0.65234375]
	storage[248] =  10'b1010001100; // [ 0.63671875]
	storage[249] =  10'b1010000000; // [ 0.625]
	storage[250] =  10'b1001111000; // [ 0.6171875]
	storage[251] =  10'b1001110000; // [ 0.609375]
	storage[252] =  10'b1001011100; // [ 0.58984375]
	storage[253] =  10'b1001100100; // [ 0.59765625]
	storage[254] =  10'b1001101100; // [ 0.60546875]
	storage[255] =  10'b1001110100; // [ 0.61328125]
	storage[256] =  10'b1001111000; // [ 0.6171875]
	storage[257] =  10'b1010000100; // [ 0.62890625]
	storage[258] =  10'b1010001000; // [ 0.6328125]
	storage[259] =  10'b1010010000; // [ 0.640625]
	storage[260] =  10'b1010011000; // [ 0.6484375]
	storage[261] =  10'b1010011100; // [ 0.65234375]
	storage[262] =  10'b1010011100; // [ 0.65234375]
	storage[263] =  10'b1010011000; // [ 0.6484375]
	storage[264] =  10'b1010010000; // [ 0.640625]
	storage[265] =  10'b1001000000; // [ 0.5625]
	storage[266] =  10'b0111111000; // [ 0.4921875]
	storage[267] =  10'b1001011000; // [ 0.5859375]
	storage[268] =  10'b1010010000; // [ 0.640625]
	storage[269] =  10'b1010011000; // [ 0.6484375]
	storage[270] =  10'b1010100000; // [ 0.65625]
	storage[271] =  10'b1010101000; // [ 0.6640625]
	storage[272] =  10'b1010110100; // [ 0.67578125]
	storage[273] =  10'b1010110000; // [ 0.671875]
	storage[274] =  10'b1010101000; // [ 0.6640625]
	storage[275] =  10'b1010011000; // [ 0.6484375]
	storage[276] =  10'b1010001100; // [ 0.63671875]
	storage[277] =  10'b1001111100; // [ 0.62109375]
	storage[278] =  10'b1001110100; // [ 0.61328125]
	storage[279] =  10'b1001110000; // [ 0.609375]
	storage[280] =  10'b1001100000; // [ 0.59375]
	storage[281] =  10'b1001101000; // [ 0.6015625]
	storage[282] =  10'b1001110000; // [ 0.609375]
	storage[283] =  10'b1001110100; // [ 0.61328125]
	storage[284] =  10'b1001111100; // [ 0.62109375]
	storage[285] =  10'b1010000100; // [ 0.62890625]
	storage[286] =  10'b1010001000; // [ 0.6328125]
	storage[287] =  10'b1010010000; // [ 0.640625]
	storage[288] =  10'b1010010100; // [ 0.64453125]
	storage[289] =  10'b1010010100; // [ 0.64453125]
	storage[290] =  10'b1010010100; // [ 0.64453125]
	storage[291] =  10'b1010000000; // [ 0.625]
	storage[292] =  10'b1000101100; // [ 0.54296875]
	storage[293] =  10'b0111001100; // [ 0.44921875]
	storage[294] =  10'b1000011000; // [ 0.5234375]
	storage[295] =  10'b1001100000; // [ 0.59375]
	storage[296] =  10'b1001111000; // [ 0.6171875]
	storage[297] =  10'b1010001100; // [ 0.63671875]
	storage[298] =  10'b1010011000; // [ 0.6484375]
	storage[299] =  10'b1010011100; // [ 0.65234375]
	storage[300] =  10'b1010101100; // [ 0.66796875]
	storage[301] =  10'b1010101100; // [ 0.66796875]
	storage[302] =  10'b1010100100; // [ 0.66015625]
	storage[303] =  10'b1010010100; // [ 0.64453125]
	storage[304] =  10'b1010001000; // [ 0.6328125]
	storage[305] =  10'b1010000000; // [ 0.625]
	storage[306] =  10'b1001111000; // [ 0.6171875]
	storage[307] =  10'b1001101100; // [ 0.60546875]
	storage[308] =  10'b1001011100; // [ 0.58984375]
	storage[309] =  10'b1001100100; // [ 0.59765625]
	storage[310] =  10'b1001110000; // [ 0.609375]
	storage[311] =  10'b1001110000; // [ 0.609375]
	storage[312] =  10'b1001111000; // [ 0.6171875]
	storage[313] =  10'b1010000000; // [ 0.625]
	storage[314] =  10'b1010001000; // [ 0.6328125]
	storage[315] =  10'b1010001100; // [ 0.63671875]
	storage[316] =  10'b1010010000; // [ 0.640625]
	storage[317] =  10'b1010010000; // [ 0.640625]
	storage[318] =  10'b1001100100; // [ 0.59765625]
	storage[319] =  10'b1000000000; // [ 0.5]
	storage[320] =  10'b0111001000; // [ 0.4453125]
	storage[321] =  10'b0111100100; // [ 0.47265625]
	storage[322] =  10'b1000001100; // [ 0.51171875]
	storage[323] =  10'b1000010000; // [ 0.515625]
	storage[324] =  10'b1000001100; // [ 0.51171875]
	storage[325] =  10'b1000100000; // [ 0.53125]
	storage[326] =  10'b1001011000; // [ 0.5859375]
	storage[327] =  10'b1010001100; // [ 0.63671875]
	storage[328] =  10'b1010100000; // [ 0.65625]
	storage[329] =  10'b1010011100; // [ 0.65234375]
	storage[330] =  10'b1010011100; // [ 0.65234375]
	storage[331] =  10'b1010010000; // [ 0.640625]
	storage[332] =  10'b1010000100; // [ 0.62890625]
	storage[333] =  10'b1001111100; // [ 0.62109375]
	storage[334] =  10'b1001110100; // [ 0.61328125]
	storage[335] =  10'b1001101100; // [ 0.60546875]
	storage[336] =  10'b1001100000; // [ 0.59375]
	storage[337] =  10'b1001101000; // [ 0.6015625]
	storage[338] =  10'b1001101100; // [ 0.60546875]
	storage[339] =  10'b1001110000; // [ 0.609375]
	storage[340] =  10'b1001111000; // [ 0.6171875]
	storage[341] =  10'b1010000000; // [ 0.625]
	storage[342] =  10'b1010000100; // [ 0.62890625]
	storage[343] =  10'b1010001100; // [ 0.63671875]
	storage[344] =  10'b1010010000; // [ 0.640625]
	storage[345] =  10'b1001111100; // [ 0.62109375]
	storage[346] =  10'b1000001000; // [ 0.5078125]
	storage[347] =  10'b1000011000; // [ 0.5234375]
	storage[348] =  10'b1001101100; // [ 0.60546875]
	storage[349] =  10'b1010001000; // [ 0.6328125]
	storage[350] =  10'b1010010000; // [ 0.640625]
	storage[351] =  10'b1010001100; // [ 0.63671875]
	storage[352] =  10'b1010000000; // [ 0.625]
	storage[353] =  10'b1001100000; // [ 0.59375]
	storage[354] =  10'b1000101000; // [ 0.5390625]
	storage[355] =  10'b1000101000; // [ 0.5390625]
	storage[356] =  10'b1001111000; // [ 0.6171875]
	storage[357] =  10'b1010010000; // [ 0.640625]
	storage[358] =  10'b1010001100; // [ 0.63671875]
	storage[359] =  10'b1010001000; // [ 0.6328125]
	storage[360] =  10'b1010000000; // [ 0.625]
	storage[361] =  10'b1001111000; // [ 0.6171875]
	storage[362] =  10'b1001110100; // [ 0.61328125]
	storage[363] =  10'b1001101100; // [ 0.60546875]
	storage[364] =  10'b1001011000; // [ 0.5859375]
	storage[365] =  10'b1001100100; // [ 0.59765625]
	storage[366] =  10'b1001101100; // [ 0.60546875]
	storage[367] =  10'b1001110000; // [ 0.609375]
	storage[368] =  10'b1001111100; // [ 0.62109375]
	storage[369] =  10'b1010000000; // [ 0.625]
	storage[370] =  10'b1010001000; // [ 0.6328125]
	storage[371] =  10'b1010010000; // [ 0.640625]
	storage[372] =  10'b1010010000; // [ 0.640625]
	storage[373] =  10'b1010010000; // [ 0.640625]
	storage[374] =  10'b1001110000; // [ 0.609375]
	storage[375] =  10'b1010010000; // [ 0.640625]
	storage[376] =  10'b1010100000; // [ 0.65625]
	storage[377] =  10'b1010011000; // [ 0.6484375]
	storage[378] =  10'b1010101000; // [ 0.6640625]
	storage[379] =  10'b1010011100; // [ 0.65234375]
	storage[380] =  10'b1010011000; // [ 0.6484375]
	storage[381] =  10'b1010010100; // [ 0.64453125]
	storage[382] =  10'b1010000100; // [ 0.62890625]
	storage[383] =  10'b1001001100; // [ 0.57421875]
	storage[384] =  10'b1000110000; // [ 0.546875]
	storage[385] =  10'b1010000100; // [ 0.62890625]
	storage[386] =  10'b1010010000; // [ 0.640625]
	storage[387] =  10'b1010000100; // [ 0.62890625]
	storage[388] =  10'b1010000000; // [ 0.625]
	storage[389] =  10'b1001111100; // [ 0.62109375]
	storage[390] =  10'b1001111000; // [ 0.6171875]
	storage[391] =  10'b1001110000; // [ 0.609375]
	storage[392] =  10'b1001011100; // [ 0.58984375]
	storage[393] =  10'b1001100000; // [ 0.59375]
	storage[394] =  10'b1001101000; // [ 0.6015625]
	storage[395] =  10'b1001110100; // [ 0.61328125]
	storage[396] =  10'b1001111100; // [ 0.62109375]
	storage[397] =  10'b1010001000; // [ 0.6328125]
	storage[398] =  10'b1010001100; // [ 0.63671875]
	storage[399] =  10'b1010010100; // [ 0.64453125]
	storage[400] =  10'b1010011000; // [ 0.6484375]
	storage[401] =  10'b1010100000; // [ 0.65625]
	storage[402] =  10'b1010100000; // [ 0.65625]
	storage[403] =  10'b1010100000; // [ 0.65625]
	storage[404] =  10'b1010101000; // [ 0.6640625]
	storage[405] =  10'b1010101000; // [ 0.6640625]
	storage[406] =  10'b1010100100; // [ 0.66015625]
	storage[407] =  10'b1010100100; // [ 0.66015625]
	storage[408] =  10'b1010011100; // [ 0.65234375]
	storage[409] =  10'b1010011000; // [ 0.6484375]
	storage[410] =  10'b1010010100; // [ 0.64453125]
	storage[411] =  10'b1010010000; // [ 0.640625]
	storage[412] =  10'b1000110100; // [ 0.55078125]
	storage[413] =  10'b1001011000; // [ 0.5859375]
	storage[414] =  10'b1010001000; // [ 0.6328125]
	storage[415] =  10'b1010001000; // [ 0.6328125]
	storage[416] =  10'b1010000000; // [ 0.625]
	storage[417] =  10'b1001111100; // [ 0.62109375]
	storage[418] =  10'b1001110100; // [ 0.61328125]
	storage[419] =  10'b1001110000; // [ 0.609375]
	storage[420] =  10'b1001011100; // [ 0.58984375]
	storage[421] =  10'b1001100100; // [ 0.59765625]
	storage[422] =  10'b1001101100; // [ 0.60546875]
	storage[423] =  10'b1001110100; // [ 0.61328125]
	storage[424] =  10'b1001111100; // [ 0.62109375]
	storage[425] =  10'b1010001000; // [ 0.6328125]
	storage[426] =  10'b1010010000; // [ 0.640625]
	storage[427] =  10'b1010010000; // [ 0.640625]
	storage[428] =  10'b1010100000; // [ 0.65625]
	storage[429] =  10'b1010100000; // [ 0.65625]
	storage[430] =  10'b1010100100; // [ 0.66015625]
	storage[431] =  10'b1010100000; // [ 0.65625]
	storage[432] =  10'b1010101000; // [ 0.6640625]
	storage[433] =  10'b1010101000; // [ 0.6640625]
	storage[434] =  10'b1010100100; // [ 0.66015625]
	storage[435] =  10'b1010100000; // [ 0.65625]
	storage[436] =  10'b1010100000; // [ 0.65625]
	storage[437] =  10'b1010011000; // [ 0.6484375]
	storage[438] =  10'b1010011100; // [ 0.65234375]
	storage[439] =  10'b1010011000; // [ 0.6484375]
	storage[440] =  10'b1001011100; // [ 0.58984375]
	storage[441] =  10'b1000100100; // [ 0.53515625]
	storage[442] =  10'b1010001000; // [ 0.6328125]
	storage[443] =  10'b1010001000; // [ 0.6328125]
	storage[444] =  10'b1010000000; // [ 0.625]
	storage[445] =  10'b1001111100; // [ 0.62109375]
	storage[446] =  10'b1001110100; // [ 0.61328125]
	storage[447] =  10'b1001101100; // [ 0.60546875]
	storage[448] =  10'b1001011100; // [ 0.58984375]
	storage[449] =  10'b1001100100; // [ 0.59765625]
	storage[450] =  10'b1001101100; // [ 0.60546875]
	storage[451] =  10'b1001110100; // [ 0.61328125]
	storage[452] =  10'b1001111100; // [ 0.62109375]
	storage[453] =  10'b1010001000; // [ 0.6328125]
	storage[454] =  10'b1010001100; // [ 0.63671875]
	storage[455] =  10'b1010011000; // [ 0.6484375]
	storage[456] =  10'b1010011000; // [ 0.6484375]
	storage[457] =  10'b1010100000; // [ 0.65625]
	storage[458] =  10'b1010100100; // [ 0.66015625]
	storage[459] =  10'b1010100100; // [ 0.66015625]
	storage[460] =  10'b1010100100; // [ 0.66015625]
	storage[461] =  10'b1010100000; // [ 0.65625]
	storage[462] =  10'b1010100000; // [ 0.65625]
	storage[463] =  10'b1010100000; // [ 0.65625]
	storage[464] =  10'b1010100000; // [ 0.65625]
	storage[465] =  10'b1010011000; // [ 0.6484375]
	storage[466] =  10'b1010011100; // [ 0.65234375]
	storage[467] =  10'b1010010100; // [ 0.64453125]
	storage[468] =  10'b1001101100; // [ 0.60546875]
	storage[469] =  10'b1000010000; // [ 0.515625]
	storage[470] =  10'b1001111100; // [ 0.62109375]
	storage[471] =  10'b1010001000; // [ 0.6328125]
	storage[472] =  10'b1010000000; // [ 0.625]
	storage[473] =  10'b1001111000; // [ 0.6171875]
	storage[474] =  10'b1001110000; // [ 0.609375]
	storage[475] =  10'b1001101100; // [ 0.60546875]
	storage[476] =  10'b1001011100; // [ 0.58984375]
	storage[477] =  10'b1001100100; // [ 0.59765625]
	storage[478] =  10'b1001101100; // [ 0.60546875]
	storage[479] =  10'b1001110100; // [ 0.61328125]
	storage[480] =  10'b1001111100; // [ 0.62109375]
	storage[481] =  10'b1010001000; // [ 0.6328125]
	storage[482] =  10'b1010001100; // [ 0.63671875]
	storage[483] =  10'b1010010000; // [ 0.640625]
	storage[484] =  10'b1010010100; // [ 0.64453125]
	storage[485] =  10'b1010100000; // [ 0.65625]
	storage[486] =  10'b1010100000; // [ 0.65625]
	storage[487] =  10'b1010100000; // [ 0.65625]
	storage[488] =  10'b1010100000; // [ 0.65625]
	storage[489] =  10'b1010011100; // [ 0.65234375]
	storage[490] =  10'b1010100000; // [ 0.65625]
	storage[491] =  10'b1010011100; // [ 0.65234375]
	storage[492] =  10'b1010100000; // [ 0.65625]
	storage[493] =  10'b1010011000; // [ 0.6484375]
	storage[494] =  10'b1010010000; // [ 0.640625]
	storage[495] =  10'b1010001100; // [ 0.63671875]
	storage[496] =  10'b1001110100; // [ 0.61328125]
	storage[497] =  10'b1000000100; // [ 0.50390625]
	storage[498] =  10'b1001110000; // [ 0.609375]
	storage[499] =  10'b1010001000; // [ 0.6328125]
	storage[500] =  10'b1010000100; // [ 0.62890625]
	storage[501] =  10'b1001111000; // [ 0.6171875]
	storage[502] =  10'b1001110000; // [ 0.609375]
	storage[503] =  10'b1001101100; // [ 0.60546875]
	storage[504] =  10'b1001011000; // [ 0.5859375]
	storage[505] =  10'b1001011100; // [ 0.58984375]
	storage[506] =  10'b1001101000; // [ 0.6015625]
	storage[507] =  10'b1001110000; // [ 0.609375]
	storage[508] =  10'b1001111000; // [ 0.6171875]
	storage[509] =  10'b1010000100; // [ 0.62890625]
	storage[510] =  10'b1010001000; // [ 0.6328125]
	storage[511] =  10'b1010001100; // [ 0.63671875]
	storage[512] =  10'b1010010000; // [ 0.640625]
	storage[513] =  10'b1010010100; // [ 0.64453125]
	storage[514] =  10'b1010011000; // [ 0.6484375]
	storage[515] =  10'b1010011000; // [ 0.6484375]
	storage[516] =  10'b1010011100; // [ 0.65234375]
	storage[517] =  10'b1010011100; // [ 0.65234375]
	storage[518] =  10'b1010100000; // [ 0.65625]
	storage[519] =  10'b1010011100; // [ 0.65234375]
	storage[520] =  10'b1010011000; // [ 0.6484375]
	storage[521] =  10'b1010010000; // [ 0.640625]
	storage[522] =  10'b1010000100; // [ 0.62890625]
	storage[523] =  10'b1010001000; // [ 0.6328125]
	storage[524] =  10'b1001101000; // [ 0.6015625]
	storage[525] =  10'b0111111000; // [ 0.4921875]
	storage[526] =  10'b1001110000; // [ 0.609375]
	storage[527] =  10'b1010000000; // [ 0.625]
	storage[528] =  10'b1001111100; // [ 0.62109375]
	storage[529] =  10'b1001110100; // [ 0.61328125]
	storage[530] =  10'b1001101100; // [ 0.60546875]
	storage[531] =  10'b1001101000; // [ 0.6015625]
	storage[532] =  10'b1001010100; // [ 0.58203125]
	storage[533] =  10'b1001011000; // [ 0.5859375]
	storage[534] =  10'b1001100000; // [ 0.59375]
	storage[535] =  10'b1001101100; // [ 0.60546875]
	storage[536] =  10'b1001110000; // [ 0.609375]
	storage[537] =  10'b1010000000; // [ 0.625]
	storage[538] =  10'b1010000000; // [ 0.625]
	storage[539] =  10'b1010000100; // [ 0.62890625]
	storage[540] =  10'b1010001100; // [ 0.63671875]
	storage[541] =  10'b1010001100; // [ 0.63671875]
	storage[542] =  10'b1010010000; // [ 0.640625]
	storage[543] =  10'b1010010000; // [ 0.640625]
	storage[544] =  10'b1010010100; // [ 0.64453125]
	storage[545] =  10'b1010010100; // [ 0.64453125]
	storage[546] =  10'b1010010100; // [ 0.64453125]
	storage[547] =  10'b1010001100; // [ 0.63671875]
	storage[548] =  10'b1010001100; // [ 0.63671875]
	storage[549] =  10'b1010000100; // [ 0.62890625]
	storage[550] =  10'b1001111100; // [ 0.62109375]
	storage[551] =  10'b1001111100; // [ 0.62109375]
	storage[552] =  10'b1001001000; // [ 0.5703125]
	storage[553] =  10'b0111110100; // [ 0.48828125]
	storage[554] =  10'b1001110000; // [ 0.609375]
	storage[555] =  10'b1001111000; // [ 0.6171875]
	storage[556] =  10'b1001110000; // [ 0.609375]
	storage[557] =  10'b1001101100; // [ 0.60546875]
	storage[558] =  10'b1001100100; // [ 0.59765625]
	storage[559] =  10'b1001011100; // [ 0.58984375]
	storage[560] =  10'b1001001100; // [ 0.57421875]
	storage[561] =  10'b1001010000; // [ 0.578125]
	storage[562] =  10'b1001011000; // [ 0.5859375]
	storage[563] =  10'b1001100000; // [ 0.59375]
	storage[564] =  10'b1001101100; // [ 0.60546875]
	storage[565] =  10'b1001111000; // [ 0.6171875]
	storage[566] =  10'b1001111000; // [ 0.6171875]
	storage[567] =  10'b1001111100; // [ 0.62109375]
	storage[568] =  10'b1010000000; // [ 0.625]
	storage[569] =  10'b1010000000; // [ 0.625]
	storage[570] =  10'b1010000000; // [ 0.625]
	storage[571] =  10'b1010000100; // [ 0.62890625]
	storage[572] =  10'b1010001000; // [ 0.6328125]
	storage[573] =  10'b1010000100; // [ 0.62890625]
	storage[574] =  10'b1010000100; // [ 0.62890625]
	storage[575] =  10'b1010000100; // [ 0.62890625]
	storage[576] =  10'b1010000000; // [ 0.625]
	storage[577] =  10'b1001111100; // [ 0.62109375]
	storage[578] =  10'b1001110100; // [ 0.61328125]
	storage[579] =  10'b1001110000; // [ 0.609375]
	storage[580] =  10'b1000001100; // [ 0.51171875]
	storage[581] =  10'b1000010000; // [ 0.515625]
	storage[582] =  10'b1001110100; // [ 0.61328125]
	storage[583] =  10'b1001110000; // [ 0.609375]
	storage[584] =  10'b1001101100; // [ 0.60546875]
	storage[585] =  10'b1001101000; // [ 0.6015625]
	storage[586] =  10'b1001100000; // [ 0.59375]
	storage[587] =  10'b1001011000; // [ 0.5859375]
	storage[588] =  10'b1001001000; // [ 0.5703125]
	storage[589] =  10'b1001001000; // [ 0.5703125]
	storage[590] =  10'b1001010000; // [ 0.578125]
	storage[591] =  10'b1001011100; // [ 0.58984375]
	storage[592] =  10'b1001101000; // [ 0.6015625]
	storage[593] =  10'b1001110000; // [ 0.609375]
	storage[594] =  10'b1001110100; // [ 0.61328125]
	storage[595] =  10'b1001110000; // [ 0.609375]
	storage[596] =  10'b1001111000; // [ 0.6171875]
	storage[597] =  10'b1001111100; // [ 0.62109375]
	storage[598] =  10'b1001111100; // [ 0.62109375]
	storage[599] =  10'b1001111100; // [ 0.62109375]
	storage[600] =  10'b1010000000; // [ 0.625]
	storage[601] =  10'b1010000000; // [ 0.625]
	storage[602] =  10'b1010000000; // [ 0.625]
	storage[603] =  10'b1010000000; // [ 0.625]
	storage[604] =  10'b1001111100; // [ 0.62109375]
	storage[605] =  10'b1001111000; // [ 0.6171875]
	storage[606] =  10'b1001110000; // [ 0.609375]
	storage[607] =  10'b1001001000; // [ 0.5703125]
	storage[608] =  10'b0111010100; // [ 0.45703125]
	storage[609] =  10'b1001000100; // [ 0.56640625]
	storage[610] =  10'b1001110000; // [ 0.609375]
	storage[611] =  10'b1001110000; // [ 0.609375]
	storage[612] =  10'b1001101100; // [ 0.60546875]
	storage[613] =  10'b1001100100; // [ 0.59765625]
	storage[614] =  10'b1001011000; // [ 0.5859375]
	storage[615] =  10'b1001010100; // [ 0.58203125]
	storage[616] =  10'b1001000000; // [ 0.5625]
	storage[617] =  10'b1001000100; // [ 0.56640625]
	storage[618] =  10'b1001010000; // [ 0.578125]
	storage[619] =  10'b1001011000; // [ 0.5859375]
	storage[620] =  10'b1001100000; // [ 0.59375]
	storage[621] =  10'b1001100100; // [ 0.59765625]
	storage[622] =  10'b1001101000; // [ 0.6015625]
	storage[623] =  10'b1001101100; // [ 0.60546875]
	storage[624] =  10'b1001110000; // [ 0.609375]
	storage[625] =  10'b1001110100; // [ 0.61328125]
	storage[626] =  10'b1001111000; // [ 0.6171875]
	storage[627] =  10'b1001111000; // [ 0.6171875]
	storage[628] =  10'b1001111000; // [ 0.6171875]
	storage[629] =  10'b1001111000; // [ 0.6171875]
	storage[630] =  10'b1001111100; // [ 0.62109375]
	storage[631] =  10'b1001111000; // [ 0.6171875]
	storage[632] =  10'b1001111000; // [ 0.6171875]
	storage[633] =  10'b1001110000; // [ 0.609375]
	storage[634] =  10'b1001011100; // [ 0.58984375]
	storage[635] =  10'b0111100100; // [ 0.47265625]
	storage[636] =  10'b0111110000; // [ 0.484375]
	storage[637] =  10'b1001101000; // [ 0.6015625]
	storage[638] =  10'b1001101100; // [ 0.60546875]
	storage[639] =  10'b1001101000; // [ 0.6015625]
	storage[640] =  10'b1001100100; // [ 0.59765625]
	storage[641] =  10'b1001011100; // [ 0.58984375]
	storage[642] =  10'b1001010100; // [ 0.58203125]
	storage[643] =  10'b1001001100; // [ 0.57421875]
	storage[644] =  10'b1000111000; // [ 0.5546875]
	storage[645] =  10'b1001000000; // [ 0.5625]
	storage[646] =  10'b1001001000; // [ 0.5703125]
	storage[647] =  10'b1001001100; // [ 0.57421875]
	storage[648] =  10'b1001011000; // [ 0.5859375]
	storage[649] =  10'b1001000100; // [ 0.56640625]
	storage[650] =  10'b1000011100; // [ 0.52734375]
	storage[651] =  10'b1001100000; // [ 0.59375]
	storage[652] =  10'b1001101100; // [ 0.60546875]
	storage[653] =  10'b1001110000; // [ 0.609375]
	storage[654] =  10'b1001110000; // [ 0.609375]
	storage[655] =  10'b1001110100; // [ 0.61328125]
	storage[656] =  10'b1001110100; // [ 0.61328125]
	storage[657] =  10'b1001110100; // [ 0.61328125]
	storage[658] =  10'b1001110100; // [ 0.61328125]
	storage[659] =  10'b1001110100; // [ 0.61328125]
	storage[660] =  10'b1001101000; // [ 0.6015625]
	storage[661] =  10'b1001000000; // [ 0.5625]
	storage[662] =  10'b0111011100; // [ 0.46484375]
	storage[663] =  10'b0111011000; // [ 0.4609375]
	storage[664] =  10'b1001001000; // [ 0.5703125]
	storage[665] =  10'b1001101000; // [ 0.6015625]
	storage[666] =  10'b1001101000; // [ 0.6015625]
	storage[667] =  10'b1001100000; // [ 0.59375]
	storage[668] =  10'b1001011100; // [ 0.58984375]
	storage[669] =  10'b1001011000; // [ 0.5859375]
	storage[670] =  10'b1001010000; // [ 0.578125]
	storage[671] =  10'b1001000100; // [ 0.56640625]
	storage[672] =  10'b1000110000; // [ 0.546875]
	storage[673] =  10'b1000111000; // [ 0.5546875]
	storage[674] =  10'b1001000100; // [ 0.56640625]
	storage[675] =  10'b1001001000; // [ 0.5703125]
	storage[676] =  10'b1001010000; // [ 0.578125]
	storage[677] =  10'b1001000000; // [ 0.5625]
	storage[678] =  10'b0111111000; // [ 0.4921875]
	storage[679] =  10'b1000011000; // [ 0.5234375]
	storage[680] =  10'b1001010100; // [ 0.58203125]
	storage[681] =  10'b1001101000; // [ 0.6015625]
	storage[682] =  10'b1001101100; // [ 0.60546875]
	storage[683] =  10'b1001101000; // [ 0.6015625]
	storage[684] =  10'b1001101000; // [ 0.6015625]
	storage[685] =  10'b1001100100; // [ 0.59765625]
	storage[686] =  10'b1001011000; // [ 0.5859375]
	storage[687] =  10'b1000111000; // [ 0.5546875]
	storage[688] =  10'b0111110100; // [ 0.48828125]
	storage[689] =  10'b0111001000; // [ 0.4453125]
	storage[690] =  10'b0111111100; // [ 0.49609375]
	storage[691] =  10'b1001001100; // [ 0.57421875]
	storage[692] =  10'b1001100100; // [ 0.59765625]
	storage[693] =  10'b1001100100; // [ 0.59765625]
	storage[694] =  10'b1001011100; // [ 0.58984375]
	storage[695] =  10'b1001011000; // [ 0.5859375]
	storage[696] =  10'b1001010100; // [ 0.58203125]
	storage[697] =  10'b1001010000; // [ 0.578125]
	storage[698] =  10'b1001001000; // [ 0.5703125]
	storage[699] =  10'b1000111100; // [ 0.55859375]
	storage[700] =  10'b1000101000; // [ 0.5390625]
	storage[701] =  10'b1000110000; // [ 0.546875]
	storage[702] =  10'b1000111000; // [ 0.5546875]
	storage[703] =  10'b1001000000; // [ 0.5625]
	storage[704] =  10'b1001001000; // [ 0.5703125]
	storage[705] =  10'b1001010000; // [ 0.578125]
	storage[706] =  10'b1000111000; // [ 0.5546875]
	storage[707] =  10'b0111111100; // [ 0.49609375]
	storage[708] =  10'b0111101100; // [ 0.48046875]
	storage[709] =  10'b1000000000; // [ 0.5]
	storage[710] =  10'b1000010100; // [ 0.51953125]
	storage[711] =  10'b1000011100; // [ 0.52734375]
	storage[712] =  10'b1000001100; // [ 0.51171875]
	storage[713] =  10'b0111110000; // [ 0.484375]
	storage[714] =  10'b0111011000; // [ 0.4609375]
	storage[715] =  10'b0111011000; // [ 0.4609375]
	storage[716] =  10'b0111110100; // [ 0.48828125]
	storage[717] =  10'b1000110000; // [ 0.546875]
	storage[718] =  10'b1001011000; // [ 0.5859375]
	storage[719] =  10'b1001011100; // [ 0.58984375]
	storage[720] =  10'b1001100000; // [ 0.59375]
	storage[721] =  10'b1001011100; // [ 0.58984375]
	storage[722] =  10'b1001010100; // [ 0.58203125]
	storage[723] =  10'b1001010000; // [ 0.578125]
	storage[724] =  10'b1001001100; // [ 0.57421875]
	storage[725] =  10'b1001001000; // [ 0.5703125]
	storage[726] =  10'b1001000000; // [ 0.5625]
	storage[727] =  10'b1000111000; // [ 0.5546875]
	storage[728] =  10'b1000100000; // [ 0.53125]
	storage[729] =  10'b1000101000; // [ 0.5390625]
	storage[730] =  10'b1000110000; // [ 0.546875]
	storage[731] =  10'b1000111000; // [ 0.5546875]
	storage[732] =  10'b1001000000; // [ 0.5625]
	storage[733] =  10'b1001001100; // [ 0.57421875]
	storage[734] =  10'b1001000100; // [ 0.56640625]
	storage[735] =  10'b1001000100; // [ 0.56640625]
	storage[736] =  10'b1000110000; // [ 0.546875]
	storage[737] =  10'b1000010100; // [ 0.51953125]
	storage[738] =  10'b0111111100; // [ 0.49609375]
	storage[739] =  10'b0111110000; // [ 0.484375]
	storage[740] =  10'b1000000000; // [ 0.5]
	storage[741] =  10'b1000011100; // [ 0.52734375]
	storage[742] =  10'b1000110100; // [ 0.55078125]
	storage[743] =  10'b1001001100; // [ 0.57421875]
	storage[744] =  10'b1001011000; // [ 0.5859375]
	storage[745] =  10'b1001011000; // [ 0.5859375]
	storage[746] =  10'b1001011000; // [ 0.5859375]
	storage[747] =  10'b1001011000; // [ 0.5859375]
	storage[748] =  10'b1001011000; // [ 0.5859375]
	storage[749] =  10'b1001010100; // [ 0.58203125]
	storage[750] =  10'b1001010000; // [ 0.578125]
	storage[751] =  10'b1001001000; // [ 0.5703125]
	storage[752] =  10'b1001001000; // [ 0.5703125]
	storage[753] =  10'b1001000100; // [ 0.56640625]
	storage[754] =  10'b1000111100; // [ 0.55859375]
	storage[755] =  10'b1000110100; // [ 0.55078125]
	storage[756] =  10'b1000010100; // [ 0.51953125]
	storage[757] =  10'b1000100100; // [ 0.53515625]
	storage[758] =  10'b1000101000; // [ 0.5390625]
	storage[759] =  10'b1000110100; // [ 0.55078125]
	storage[760] =  10'b1000111000; // [ 0.5546875]
	storage[761] =  10'b1001000100; // [ 0.56640625]
	storage[762] =  10'b1001001000; // [ 0.5703125]
	storage[763] =  10'b1001001000; // [ 0.5703125]
	storage[764] =  10'b1001010000; // [ 0.578125]
	storage[765] =  10'b1001010100; // [ 0.58203125]
	storage[766] =  10'b1001011000; // [ 0.5859375]
	storage[767] =  10'b1001011000; // [ 0.5859375]
	storage[768] =  10'b1001011000; // [ 0.5859375]
	storage[769] =  10'b1001011100; // [ 0.58984375]
	storage[770] =  10'b1001100000; // [ 0.59375]
	storage[771] =  10'b1001011100; // [ 0.58984375]
	storage[772] =  10'b1001011100; // [ 0.58984375]
	storage[773] =  10'b1001011000; // [ 0.5859375]
	storage[774] =  10'b1001011000; // [ 0.5859375]
	storage[775] =  10'b1001010000; // [ 0.578125]
	storage[776] =  10'b1001010000; // [ 0.578125]
	storage[777] =  10'b1001001100; // [ 0.57421875]
	storage[778] =  10'b1001001000; // [ 0.5703125]
	storage[779] =  10'b1001000100; // [ 0.56640625]
	storage[780] =  10'b1000111100; // [ 0.55859375]
	storage[781] =  10'b1000111100; // [ 0.55859375]
	storage[782] =  10'b1000110100; // [ 0.55078125]
	storage[783] =  10'b1000101100; // [ 0.54296875]
end

endmodule

convert_image_for_testbench.py

Dear sir,
Thanks for your code ,it is really helpful for me ,but I have a doubt in convert_image_for_testbench.py codes I have to give test image number as 2 ,but default it is 0 ,i don't have idea to change the code for giving test image as 2 , could you please help me to solve this problem.

some questions about project

Hello! Thank you very much for your previous reply. In the past few days, I still have some doubts about your project. I would like to ask you:

  1. When using the latest project to run python r04_verilog_generator_grayscale_file.py, the error shown in Figure 1 occurs. The guess is that the parameters are missing, so I changed "get_optimal_bit_for_weights()" to "get_optimal_bit_for_weights(parse_opt())", I don't know Whether this modification is correct, so I would like to ask you, I hope you can give me some pointers.
  2. After running python r05_verilog_generator_neural_net_structure.py after modifying it according to the first question, the error shown in Figure 2 appears. This error seems to mean that the index is out of range, but I don't know where to modify it, so I still want to ask you
  3. After modifying the name of the file keras_model_low_weights_digit_detector.h5 according to your instructions to retrain it, it was found that an error occurred when the training reached 156/2000, which caused the interruption, as shown in Figure 3

fig1:
image
fig2:
image

fig3:
image

some question about verilog/code/neuroset

Hello! I am learning the verilog code of neural network accelerator recently. I saw your project. I am very interested in your verilog code of neural network accelerator generated using python. I admire the work you have done, so I want to spend time correcting The neuroset code you generated is simulated and verified, but there are some problems during the simulation, so I would like to ask you for advice:

  1. I am using convert_image_for_testbench.py to convert the image into storage data, and replace it with the storage data in the testbench. I have tried a number of different numbers but the final simulation results are the same. The output is interrupted at 47349us "a "(as shown in Figure 1), I am very puzzled about this, I hope the seniors can give me some pointers, thank you very much! !
    Note: The code used is the code in verilog/code/neuroset/
    fig1:
    image

2、How to get the verilog code of the CNN architecture in Figure 2? Is it to modify the value of num_conv? Modifying num_conv equals to how much is the corresponding architecture of Figure 2? num_conv is equal to how much recognition effect is the best?
image

Some questions about network architecture

Hello! In the process of using your project, I encountered some problems and would like to ask you:

  1. In the current verilog/code/neuroset verilog, the neural network architecture of Figure 1 does not seem to be seen. For example, maxpooling is called only once in TOP, but maxpooling is used 3 times in the architecture of Figure 1, as if the code and architecture diagram do not correspond
  2. After reading your paper, I did not find a comparison of the software and hardware implementation results of your neural network architecture (such as speed comparison, etc.). After running python r01_train_neural_net_and_prepare_initial_weights.py, I found that the accuracy rate: 84.97%, as shown in Figure 2,but the code marked Accuracy : 97.39%, as shown in Figure 3. Is there any way to improve Accuracy?
    Can the maximum value given by num_conv only be 4 when the FPGA resources are sufficient?

fig1:
image
fig2:
image
fig3:
image

Quartus compilation failing

I'm trying to compile the Quartus project as per the Quartus readme. The compilation is failing, the error its generating says:

Error (12006): Node instance "maxpooling" instantiates undefined entity "maxp"

Something you've seen before?

Thanks for any help

Questions about the architecture of CNN

Hello, I admire you for doing such an excellent job. I would like to ask how you designed this CNN architecture to achieve such good performance in the end? How did you determine the structure of the network? What are the advantages of this structure? I am a beginner of neural network accelerator, I want to learn your ideas for this work, thank you

On the simulation problem of neuroset's verilog

Hello! In the process of using your project, I encountered some problems and would like to ask you:

  1. I am using convert_image_for_testbench.py ​​to generate the storage data as shown in Figure 1, and replace the storage data in the testbench, but the final simulation results of these data are all "a", and I have not found a correct simulation. storage data, I am very puzzled about this, I hope you can answer it, Figure 2 is the code structure of my project.,Figure 3 is the simulation waveform
    I hope you can give some advice, thank you very much!
    Figure 1:
    image
    Figure 2:
    image
    Figure 3:
    image

testbench:

module test();
parameter SIZE=12;
  reg clk;
  reg GO;
  reg signed [SIZE-1:0] storage [0:783]; 
  reg we_database;
  reg [SIZE-1:0] dp_database;
  reg [12:0] address_p_database;  
  reg [9:0] x;
  
  wire [3:0] RESULT;
  TOP TOP(
	.clk					(clk),
	.GO						(GO),
	.RESULT					(RESULT),
	.we_database			(we_database), 
	.dp_database			(dp_database), 
	.address_p_database		(address_p_database-1'b1),
	.STOP					(STOP)
  );
initial begin
  clk=0;
  address_p_database=0;
  x=0;
  we_database=1;
  #200 GO=1;
end
always #10 clk=~clk;
always @(posedge clk)
	begin
		if (we_database)
		begin
			if (address_p_database<=783) 
				begin
						dp_database = storage[address_p_database];
						address_p_database=address_p_database+1'b1;
				end
			else we_database=0;
		end
		if ((x<=28*28)&&(GO)) x=x+1;
		else GO=0;
	if (STOP==1)
	begin
		$display("RESULT: %d",RESULT);
		$finish;
	end
 end
 
 // Precision: 12
// Image size: 28x28
// Answer: 5

initial
begin
	storage[0] =  11'b10001010000; // [ 0.5390625]
	storage[1] =  11'b10001100000; // [ 0.546875]
	storage[2] =  11'b10001110000; // [ 0.5546875]
	storage[3] =  11'b10010000000; // [ 0.5625]
	storage[4] =  11'b10010010000; // [ 0.5703125]
	storage[5] =  11'b10010110000; // [ 0.5859375]
	storage[6] =  11'b10010111000; // [ 0.58984375]
	storage[7] =  11'b10011000000; // [ 0.59375]
	storage[8] =  11'b10011001000; // [ 0.59765625]
	storage[9] =  11'b10011010000; // [ 0.6015625]
	storage[10] =  11'b10011011000; // [ 0.60546875]
	storage[11] =  11'b10011011000; // [ 0.60546875]
	storage[12] =  11'b10011011000; // [ 0.60546875]
	storage[13] =  11'b10011100000; // [ 0.609375]
	storage[14] =  11'b10011100000; // [ 0.609375]
	storage[15] =  11'b10011011000; // [ 0.60546875]
	storage[16] =  11'b10011010000; // [ 0.6015625]
	storage[17] =  11'b10011001000; // [ 0.59765625]
	storage[18] =  11'b10010111000; // [ 0.58984375]
	storage[19] =  11'b10010111000; // [ 0.58984375]
	storage[20] =  11'b10010111000; // [ 0.58984375]
	storage[21] =  11'b10010110000; // [ 0.5859375]
	storage[22] =  11'b10010110000; // [ 0.5859375]
	storage[23] =  11'b10010101000; // [ 0.58203125]
	storage[24] =  11'b10010100000; // [ 0.578125]
	storage[25] =  11'b10010011000; // [ 0.57421875]
	storage[26] =  11'b10010001000; // [ 0.56640625]
	storage[27] =  11'b10001111000; // [ 0.55859375]
	storage[28] =  11'b10001100000; // [ 0.546875]
	storage[29] =  11'b10001111000; // [ 0.55859375]
	storage[30] =  11'b10010001000; // [ 0.56640625]
	storage[31] =  11'b10010011000; // [ 0.57421875]
	storage[32] =  11'b10010101000; // [ 0.58203125]
	storage[33] =  11'b10011001000; // [ 0.59765625]
	storage[34] =  11'b10011001000; // [ 0.59765625]
	storage[35] =  11'b10011010000; // [ 0.6015625]
	storage[36] =  11'b10011011000; // [ 0.60546875]
	storage[37] =  11'b10011011000; // [ 0.60546875]
	storage[38] =  11'b10011101000; // [ 0.61328125]
	storage[39] =  11'b10011101000; // [ 0.61328125]
	storage[40] =  11'b10011101000; // [ 0.61328125]
	storage[41] =  11'b10011110000; // [ 0.6171875]
	storage[42] =  11'b10011110000; // [ 0.6171875]
	storage[43] =  11'b10011100000; // [ 0.609375]
	storage[44] =  11'b10011100000; // [ 0.609375]
	storage[45] =  11'b10011001000; // [ 0.59765625]
	storage[46] =  11'b10011001000; // [ 0.59765625]
	storage[47] =  11'b10011000000; // [ 0.59375]
	storage[48] =  11'b10011000000; // [ 0.59375]
	storage[49] =  11'b10010111000; // [ 0.58984375]
	storage[50] =  11'b10010110000; // [ 0.5859375]
	storage[51] =  11'b10010101000; // [ 0.58203125]
	storage[52] =  11'b10010011000; // [ 0.57421875]
	storage[53] =  11'b10010010000; // [ 0.5703125]
	storage[54] =  11'b10010010000; // [ 0.5703125]
	storage[55] =  11'b10010001000; // [ 0.56640625]
	storage[56] =  11'b10001111000; // [ 0.55859375]
	storage[57] =  11'b10010001000; // [ 0.56640625]
	storage[58] =  11'b10010011000; // [ 0.57421875]
	storage[59] =  11'b10010101000; // [ 0.58203125]
	storage[60] =  11'b10010110000; // [ 0.5859375]
	storage[61] =  11'b10011001000; // [ 0.59765625]
	storage[62] =  11'b10011010000; // [ 0.6015625]
	storage[63] =  11'b10011100000; // [ 0.609375]
	storage[64] =  11'b10011101000; // [ 0.61328125]
	storage[65] =  11'b10011101000; // [ 0.61328125]
	storage[66] =  11'b10011110000; // [ 0.6171875]
	storage[67] =  11'b10011110000; // [ 0.6171875]
	storage[68] =  11'b10011111000; // [ 0.62109375]
	storage[69] =  11'b10011111000; // [ 0.62109375]
	storage[70] =  11'b10011110000; // [ 0.6171875]
	storage[71] =  11'b10011101000; // [ 0.61328125]
	storage[72] =  11'b10011011000; // [ 0.60546875]
	storage[73] =  11'b10011010000; // [ 0.6015625]
	storage[74] =  11'b10011000000; // [ 0.59375]
	storage[75] =  11'b10011000000; // [ 0.59375]
	storage[76] =  11'b10010111000; // [ 0.58984375]
	storage[77] =  11'b10010100000; // [ 0.578125]
	storage[78] =  11'b10001111000; // [ 0.55859375]
	storage[79] =  11'b10001010000; // [ 0.5390625]
	storage[80] =  11'b10000011000; // [ 0.51171875]
	storage[81] =  11'b01111100000; // [ 0.484375]
	storage[82] =  11'b10000111000; // [ 0.52734375]
	storage[83] =  11'b10010010000; // [ 0.5703125]
	storage[84] =  11'b10010000000; // [ 0.5625]
	storage[85] =  11'b10010010000; // [ 0.5703125]
	storage[86] =  11'b10010100000; // [ 0.578125]
	storage[87] =  11'b10010111000; // [ 0.58984375]
	storage[88] =  11'b10011000000; // [ 0.59375]
	storage[89] =  11'b10011011000; // [ 0.60546875]
	storage[90] =  11'b10011100000; // [ 0.609375]
	storage[91] =  11'b10011100000; // [ 0.609375]
	storage[92] =  11'b10011101000; // [ 0.61328125]
	storage[93] =  11'b10011111000; // [ 0.62109375]
	storage[94] =  11'b10011110000; // [ 0.6171875]
	storage[95] =  11'b10011110000; // [ 0.6171875]
	storage[96] =  11'b10011111000; // [ 0.62109375]
	storage[97] =  11'b10011110000; // [ 0.6171875]
	storage[98] =  11'b10011110000; // [ 0.6171875]
	storage[99] =  11'b10011100000; // [ 0.609375]
	storage[100] =  11'b10011000000; // [ 0.59375]
	storage[101] =  11'b10010010000; // [ 0.5703125]
	storage[102] =  11'b10001000000; // [ 0.53125]
	storage[103] =  11'b10000000000; // [ 0.5]
	storage[104] =  11'b01111100000; // [ 0.484375]
	storage[105] =  11'b01111001000; // [ 0.47265625]
	storage[106] =  11'b01111010000; // [ 0.4765625]
	storage[107] =  11'b01111101000; // [ 0.48828125]
	storage[108] =  11'b10000001000; // [ 0.50390625]
	storage[109] =  11'b10000110000; // [ 0.5234375]
	storage[110] =  11'b10001110000; // [ 0.5546875]
	storage[111] =  11'b10010100000; // [ 0.578125]
	storage[112] =  11'b10010001000; // [ 0.56640625]
	storage[113] =  11'b10010011000; // [ 0.57421875]
	storage[114] =  11'b10010101000; // [ 0.58203125]
	storage[115] =  11'b10010111000; // [ 0.58984375]
	storage[116] =  11'b10011001000; // [ 0.59765625]
	storage[117] =  11'b10011100000; // [ 0.609375]
	storage[118] =  11'b10011011000; // [ 0.60546875]
	storage[119] =  11'b10011100000; // [ 0.609375]
	storage[120] =  11'b10011110000; // [ 0.6171875]
	storage[121] =  11'b10011111000; // [ 0.62109375]
	storage[122] =  11'b10100000000; // [ 0.625]
	storage[123] =  11'b10100000000; // [ 0.625]
	storage[124] =  11'b10100000000; // [ 0.625]
	storage[125] =  11'b10100000000; // [ 0.625]
	storage[126] =  11'b10011111000; // [ 0.62109375]
	storage[127] =  11'b10001010000; // [ 0.5390625]
	storage[128] =  11'b01110100000; // [ 0.453125]
	storage[129] =  11'b01111001000; // [ 0.47265625]
	storage[130] =  11'b10000010000; // [ 0.5078125]
	storage[131] =  11'b10001100000; // [ 0.546875]
	storage[132] =  11'b10010100000; // [ 0.578125]
	storage[133] =  11'b10011001000; // [ 0.59765625]
	storage[134] =  11'b10011010000; // [ 0.6015625]
	storage[135] =  11'b10011010000; // [ 0.6015625]
	storage[136] =  11'b10011010000; // [ 0.6015625]
	storage[137] =  11'b10011001000; // [ 0.59765625]
	storage[138] =  11'b10011000000; // [ 0.59375]
	storage[139] =  11'b10010111000; // [ 0.58984375]
	storage[140] =  11'b10010000000; // [ 0.5625]
	storage[141] =  11'b10010100000; // [ 0.578125]
	storage[142] =  11'b10010110000; // [ 0.5859375]
	storage[143] =  11'b10011000000; // [ 0.59375]
	storage[144] =  11'b10011001000; // [ 0.59765625]
	storage[145] =  11'b10011101000; // [ 0.61328125]
	storage[146] =  11'b10011101000; // [ 0.61328125]
	storage[147] =  11'b10011111000; // [ 0.62109375]
	storage[148] =  11'b10100000000; // [ 0.625]
	storage[149] =  11'b10100001000; // [ 0.62890625]
	storage[150] =  11'b10100010000; // [ 0.6328125]
	storage[151] =  11'b10100010000; // [ 0.6328125]
	storage[152] =  11'b10100010000; // [ 0.6328125]
	storage[153] =  11'b10100001000; // [ 0.62890625]
	storage[154] =  11'b10100000000; // [ 0.625]
	storage[155] =  11'b10000000000; // [ 0.5]
	storage[156] =  11'b10000101000; // [ 0.51953125]
	storage[157] =  11'b10011110000; // [ 0.6171875]
	storage[158] =  11'b10011110000; // [ 0.6171875]
	storage[159] =  11'b10011111000; // [ 0.62109375]
	storage[160] =  11'b10011111000; // [ 0.62109375]
	storage[161] =  11'b10011110000; // [ 0.6171875]
	storage[162] =  11'b10011101000; // [ 0.61328125]
	storage[163] =  11'b10011101000; // [ 0.61328125]
	storage[164] =  11'b10011100000; // [ 0.609375]
	storage[165] =  11'b10011011000; // [ 0.60546875]
	storage[166] =  11'b10011001000; // [ 0.59765625]
	storage[167] =  11'b10010111000; // [ 0.58984375]
	storage[168] =  11'b10010010000; // [ 0.5703125]
	storage[169] =  11'b10010101000; // [ 0.58203125]
	storage[170] =  11'b10010111000; // [ 0.58984375]
	storage[171] =  11'b10011001000; // [ 0.59765625]
	storage[172] =  11'b10011011000; // [ 0.60546875]
	storage[173] =  11'b10011110000; // [ 0.6171875]
	storage[174] =  11'b10011111000; // [ 0.62109375]
	storage[175] =  11'b10100000000; // [ 0.625]
	storage[176] =  11'b10100010000; // [ 0.6328125]
	storage[177] =  11'b10100011000; // [ 0.63671875]
	storage[178] =  11'b10100011000; // [ 0.63671875]
	storage[179] =  11'b10100100000; // [ 0.640625]
	storage[180] =  11'b10100011000; // [ 0.63671875]
	storage[181] =  11'b10100011000; // [ 0.63671875]
	storage[182] =  11'b10100000000; // [ 0.625]
	storage[183] =  11'b01111110000; // [ 0.4921875]
	storage[184] =  11'b10010010000; // [ 0.5703125]
	storage[185] =  11'b10100001000; // [ 0.62890625]
	storage[186] =  11'b10011111000; // [ 0.62109375]
	storage[187] =  11'b10100000000; // [ 0.625]
	storage[188] =  11'b10100001000; // [ 0.62890625]
	storage[189] =  11'b10011111000; // [ 0.62109375]
	storage[190] =  11'b10011110000; // [ 0.6171875]
	storage[191] =  11'b10011110000; // [ 0.6171875]
	storage[192] =  11'b10011101000; // [ 0.61328125]
	storage[193] =  11'b10011100000; // [ 0.609375]
	storage[194] =  11'b10011010000; // [ 0.6015625]
	storage[195] =  11'b10010111000; // [ 0.58984375]
	storage[196] =  11'b10010100000; // [ 0.578125]
	storage[197] =  11'b10010110000; // [ 0.5859375]
	storage[198] =  11'b10011000000; // [ 0.59375]
	storage[199] =  11'b10011011000; // [ 0.60546875]
	storage[200] =  11'b10011011000; // [ 0.60546875]
	storage[201] =  11'b10100001000; // [ 0.62890625]
	storage[202] =  11'b10100000000; // [ 0.625]
	storage[203] =  11'b10100001000; // [ 0.62890625]
	storage[204] =  11'b10100010000; // [ 0.6328125]
	storage[205] =  11'b10100100000; // [ 0.640625]
	storage[206] =  11'b10100100000; // [ 0.640625]
	storage[207] =  11'b10100101000; // [ 0.64453125]
	storage[208] =  11'b10100100000; // [ 0.640625]
	storage[209] =  11'b10100100000; // [ 0.640625]
	storage[210] =  11'b10011111000; // [ 0.62109375]
	storage[211] =  11'b01111100000; // [ 0.484375]
	storage[212] =  11'b10011001000; // [ 0.59765625]
	storage[213] =  11'b10100011000; // [ 0.63671875]
	storage[214] =  11'b10100000000; // [ 0.625]
	storage[215] =  11'b10100000000; // [ 0.625]
	storage[216] =  11'b10100000000; // [ 0.625]
	storage[217] =  11'b10011111000; // [ 0.62109375]
	storage[218] =  11'b10011111000; // [ 0.62109375]
	storage[219] =  11'b10100000000; // [ 0.625]
	storage[220] =  11'b10011111000; // [ 0.62109375]
	storage[221] =  11'b10011101000; // [ 0.61328125]
	storage[222] =  11'b10011011000; // [ 0.60546875]
	storage[223] =  11'b10011001000; // [ 0.59765625]
	storage[224] =  11'b10010101000; // [ 0.58203125]
	storage[225] =  11'b10010111000; // [ 0.58984375]
	storage[226] =  11'b10011001000; // [ 0.59765625]
	storage[227] =  11'b10011011000; // [ 0.60546875]
	storage[228] =  11'b10011101000; // [ 0.61328125]
	storage[229] =  11'b10100000000; // [ 0.625]
	storage[230] =  11'b10100001000; // [ 0.62890625]
	storage[231] =  11'b10100010000; // [ 0.6328125]
	storage[232] =  11'b10100011000; // [ 0.63671875]
	storage[233] =  11'b10100100000; // [ 0.640625]
	storage[234] =  11'b10100101000; // [ 0.64453125]
	storage[235] =  11'b10100101000; // [ 0.64453125]
	storage[236] =  11'b10100100000; // [ 0.640625]
	storage[237] =  11'b10100100000; // [ 0.640625]
	storage[238] =  11'b10011101000; // [ 0.61328125]
	storage[239] =  11'b01111010000; // [ 0.4765625]
	storage[240] =  11'b10011111000; // [ 0.62109375]
	storage[241] =  11'b10100100000; // [ 0.640625]
	storage[242] =  11'b10100001000; // [ 0.62890625]
	storage[243] =  11'b10100001000; // [ 0.62890625]
	storage[244] =  11'b10100001000; // [ 0.62890625]
	storage[245] =  11'b10100001000; // [ 0.62890625]
	storage[246] =  11'b10100001000; // [ 0.62890625]
	storage[247] =  11'b10100010000; // [ 0.6328125]
	storage[248] =  11'b10100000000; // [ 0.625]
	storage[249] =  11'b10011110000; // [ 0.6171875]
	storage[250] =  11'b10011101000; // [ 0.61328125]
	storage[251] =  11'b10011011000; // [ 0.60546875]
	storage[252] =  11'b10010101000; // [ 0.58203125]
	storage[253] =  11'b10010111000; // [ 0.58984375]
	storage[254] =  11'b10011001000; // [ 0.59765625]
	storage[255] =  11'b10011011000; // [ 0.60546875]
	storage[256] =  11'b10011101000; // [ 0.61328125]
	storage[257] =  11'b10100001000; // [ 0.62890625]
	storage[258] =  11'b10100001000; // [ 0.62890625]
	storage[259] =  11'b10100010000; // [ 0.6328125]
	storage[260] =  11'b10100010000; // [ 0.6328125]
	storage[261] =  11'b10100101000; // [ 0.64453125]
	storage[262] =  11'b10100101000; // [ 0.64453125]
	storage[263] =  11'b10100110000; // [ 0.6484375]
	storage[264] =  11'b10100110000; // [ 0.6484375]
	storage[265] =  11'b10100101000; // [ 0.64453125]
	storage[266] =  11'b10011001000; // [ 0.59765625]
	storage[267] =  11'b01111011000; // [ 0.48046875]
	storage[268] =  11'b10100010000; // [ 0.6328125]
	storage[269] =  11'b10100100000; // [ 0.640625]
	storage[270] =  11'b10100011000; // [ 0.63671875]
	storage[271] =  11'b10100011000; // [ 0.63671875]
	storage[272] =  11'b10100010000; // [ 0.6328125]
	storage[273] =  11'b10100010000; // [ 0.6328125]
	storage[274] =  11'b10100010000; // [ 0.6328125]
	storage[275] =  11'b10100011000; // [ 0.63671875]
	storage[276] =  11'b10100010000; // [ 0.6328125]
	storage[277] =  11'b10011111000; // [ 0.62109375]
	storage[278] =  11'b10011110000; // [ 0.6171875]
	storage[279] =  11'b10011100000; // [ 0.609375]
	storage[280] =  11'b10010101000; // [ 0.58203125]
	storage[281] =  11'b10011000000; // [ 0.59375]
	storage[282] =  11'b10011011000; // [ 0.60546875]
	storage[283] =  11'b10011100000; // [ 0.609375]
	storage[284] =  11'b10011110000; // [ 0.6171875]
	storage[285] =  11'b10100101000; // [ 0.64453125]
	storage[286] =  11'b10100010000; // [ 0.6328125]
	storage[287] =  11'b10100100000; // [ 0.640625]
	storage[288] =  11'b10100101000; // [ 0.64453125]
	storage[289] =  11'b10100110000; // [ 0.6484375]
	storage[290] =  11'b10101000000; // [ 0.65625]
	storage[291] =  11'b10101000000; // [ 0.65625]
	storage[292] =  11'b10100111000; // [ 0.65234375]
	storage[293] =  11'b10101000000; // [ 0.65625]
	storage[294] =  11'b10010011000; // [ 0.57421875]
	storage[295] =  11'b01111000000; // [ 0.46875]
	storage[296] =  11'b10010000000; // [ 0.5625]
	storage[297] =  11'b10001010000; // [ 0.5390625]
	storage[298] =  11'b10010010000; // [ 0.5703125]
	storage[299] =  11'b10011100000; // [ 0.609375]
	storage[300] =  11'b10100001000; // [ 0.62890625]
	storage[301] =  11'b10100011000; // [ 0.63671875]
	storage[302] =  11'b10100011000; // [ 0.63671875]
	storage[303] =  11'b10100011000; // [ 0.63671875]
	storage[304] =  11'b10100011000; // [ 0.63671875]
	storage[305] =  11'b10100000000; // [ 0.625]
	storage[306] =  11'b10011111000; // [ 0.62109375]
	storage[307] =  11'b10011100000; // [ 0.609375]
	storage[308] =  11'b10010110000; // [ 0.5859375]
	storage[309] =  11'b10010111000; // [ 0.58984375]
	storage[310] =  11'b10011011000; // [ 0.60546875]
	storage[311] =  11'b10011110000; // [ 0.6171875]
	storage[312] =  11'b10100000000; // [ 0.625]
	storage[313] =  11'b10100011000; // [ 0.63671875]
	storage[314] =  11'b10100011000; // [ 0.63671875]
	storage[315] =  11'b10100101000; // [ 0.64453125]
	storage[316] =  11'b10100110000; // [ 0.6484375]
	storage[317] =  11'b10100110000; // [ 0.6484375]
	storage[318] =  11'b10101001000; // [ 0.66015625]
	storage[319] =  11'b10101001000; // [ 0.66015625]
	storage[320] =  11'b10101000000; // [ 0.65625]
	storage[321] =  11'b10101001000; // [ 0.66015625]
	storage[322] =  11'b10000110000; // [ 0.5234375]
	storage[323] =  11'b01100100000; // [ 0.390625]
	storage[324] =  11'b01111110000; // [ 0.4921875]
	storage[325] =  11'b10001101000; // [ 0.55078125]
	storage[326] =  11'b10001000000; // [ 0.53125]
	storage[327] =  11'b01111111000; // [ 0.49609375]
	storage[328] =  11'b10000101000; // [ 0.51953125]
	storage[329] =  11'b10011011000; // [ 0.60546875]
	storage[330] =  11'b10100011000; // [ 0.63671875]
	storage[331] =  11'b10100011000; // [ 0.63671875]
	storage[332] =  11'b10100010000; // [ 0.6328125]
	storage[333] =  11'b10100000000; // [ 0.625]
	storage[334] =  11'b10011111000; // [ 0.62109375]
	storage[335] =  11'b10011101000; // [ 0.61328125]
	storage[336] =  11'b10010111000; // [ 0.58984375]
	storage[337] =  11'b10011001000; // [ 0.59765625]
	storage[338] =  11'b10011100000; // [ 0.609375]
	storage[339] =  11'b10011110000; // [ 0.6171875]
	storage[340] =  11'b10011111000; // [ 0.62109375]
	storage[341] =  11'b10100100000; // [ 0.640625]
	storage[342] =  11'b10100100000; // [ 0.640625]
	storage[343] =  11'b10100101000; // [ 0.64453125]
	storage[344] =  11'b10100110000; // [ 0.6484375]
	storage[345] =  11'b10100110000; // [ 0.6484375]
	storage[346] =  11'b10101001000; // [ 0.66015625]
	storage[347] =  11'b10101000000; // [ 0.65625]
	storage[348] =  11'b10101000000; // [ 0.65625]
	storage[349] =  11'b10101001000; // [ 0.66015625]
	storage[350] =  11'b10010011000; // [ 0.57421875]
	storage[351] =  11'b10010000000; // [ 0.5625]
	storage[352] =  11'b10100110000; // [ 0.6484375]
	storage[353] =  11'b10101000000; // [ 0.65625]
	storage[354] =  11'b10100110000; // [ 0.6484375]
	storage[355] =  11'b10100000000; // [ 0.625]
	storage[356] =  11'b10010000000; // [ 0.5625]
	storage[357] =  11'b01111110000; // [ 0.4921875]
	storage[358] =  11'b10011110000; // [ 0.6171875]
	storage[359] =  11'b10100011000; // [ 0.63671875]
	storage[360] =  11'b10100010000; // [ 0.6328125]
	storage[361] =  11'b10100001000; // [ 0.62890625]
	storage[362] =  11'b10011111000; // [ 0.62109375]
	storage[363] =  11'b10011100000; // [ 0.609375]
	storage[364] =  11'b10010111000; // [ 0.58984375]
	storage[365] =  11'b10011001000; // [ 0.59765625]
	storage[366] =  11'b10011100000; // [ 0.609375]
	storage[367] =  11'b10011101000; // [ 0.61328125]
	storage[368] =  11'b10100000000; // [ 0.625]
	storage[369] =  11'b10100101000; // [ 0.64453125]
	storage[370] =  11'b10100011000; // [ 0.63671875]
	storage[371] =  11'b10100101000; // [ 0.64453125]
	storage[372] =  11'b10100110000; // [ 0.6484375]
	storage[373] =  11'b10100110000; // [ 0.6484375]
	storage[374] =  11'b10101000000; // [ 0.65625]
	storage[375] =  11'b10101001000; // [ 0.66015625]
	storage[376] =  11'b10101000000; // [ 0.65625]
	storage[377] =  11'b10101001000; // [ 0.66015625]
	storage[378] =  11'b10101001000; // [ 0.66015625]
	storage[379] =  11'b10101001000; // [ 0.66015625]
	storage[380] =  11'b10101001000; // [ 0.66015625]
	storage[381] =  11'b10101010000; // [ 0.6640625]
	storage[382] =  11'b10100111000; // [ 0.65234375]
	storage[383] =  11'b10100100000; // [ 0.640625]
	storage[384] =  11'b10100001000; // [ 0.62890625]
	storage[385] =  11'b10001010000; // [ 0.5390625]
	storage[386] =  11'b10001000000; // [ 0.53125]
	storage[387] =  11'b10100000000; // [ 0.625]
	storage[388] =  11'b10100010000; // [ 0.6328125]
	storage[389] =  11'b10100001000; // [ 0.62890625]
	storage[390] =  11'b10011110000; // [ 0.6171875]
	storage[391] =  11'b10011100000; // [ 0.609375]
	storage[392] =  11'b10010110000; // [ 0.5859375]
	storage[393] =  11'b10011001000; // [ 0.59765625]
	storage[394] =  11'b10011011000; // [ 0.60546875]
	storage[395] =  11'b10011101000; // [ 0.61328125]
	storage[396] =  11'b10011111000; // [ 0.62109375]
	storage[397] =  11'b10100010000; // [ 0.6328125]
	storage[398] =  11'b10100100000; // [ 0.640625]
	storage[399] =  11'b10100101000; // [ 0.64453125]
	storage[400] =  11'b10100110000; // [ 0.6484375]
	storage[401] =  11'b10100110000; // [ 0.6484375]
	storage[402] =  11'b10101001000; // [ 0.66015625]
	storage[403] =  11'b10101000000; // [ 0.65625]
	storage[404] =  11'b10101000000; // [ 0.65625]
	storage[405] =  11'b10101000000; // [ 0.65625]
	storage[406] =  11'b10101010000; // [ 0.6640625]
	storage[407] =  11'b10101011000; // [ 0.66796875]
	storage[408] =  11'b10101001000; // [ 0.66015625]
	storage[409] =  11'b10101000000; // [ 0.65625]
	storage[410] =  11'b10101000000; // [ 0.65625]
	storage[411] =  11'b10100100000; // [ 0.640625]
	storage[412] =  11'b10100010000; // [ 0.6328125]
	storage[413] =  11'b10011011000; // [ 0.60546875]
	storage[414] =  11'b01111111000; // [ 0.49609375]
	storage[415] =  11'b10010010000; // [ 0.5703125]
	storage[416] =  11'b10100000000; // [ 0.625]
	storage[417] =  11'b10100000000; // [ 0.625]
	storage[418] =  11'b10011110000; // [ 0.6171875]
	storage[419] =  11'b10011011000; // [ 0.60546875]
	storage[420] =  11'b10010110000; // [ 0.5859375]
	storage[421] =  11'b10011000000; // [ 0.59375]
	storage[422] =  11'b10011011000; // [ 0.60546875]
	storage[423] =  11'b10011101000; // [ 0.61328125]
	storage[424] =  11'b10011111000; // [ 0.62109375]
	storage[425] =  11'b10100011000; // [ 0.63671875]
	storage[426] =  11'b10100011000; // [ 0.63671875]
	storage[427] =  11'b10100100000; // [ 0.640625]
	storage[428] =  11'b10100101000; // [ 0.64453125]
	storage[429] =  11'b10100111000; // [ 0.65234375]
	storage[430] =  11'b10100111000; // [ 0.65234375]
	storage[431] =  11'b10101000000; // [ 0.65625]
	storage[432] =  11'b10101000000; // [ 0.65625]
	storage[433] =  11'b10101001000; // [ 0.66015625]
	storage[434] =  11'b10100111000; // [ 0.65234375]
	storage[435] =  11'b10101000000; // [ 0.65625]
	storage[436] =  11'b10101001000; // [ 0.66015625]
	storage[437] =  11'b10101000000; // [ 0.65625]
	storage[438] =  11'b10100101000; // [ 0.64453125]
	storage[439] =  11'b10100011000; // [ 0.63671875]
	storage[440] =  11'b10100010000; // [ 0.6328125]
	storage[441] =  11'b10011111000; // [ 0.62109375]
	storage[442] =  11'b10001111000; // [ 0.55859375]
	storage[443] =  11'b01111011000; // [ 0.48046875]
	storage[444] =  11'b10011101000; // [ 0.61328125]
	storage[445] =  11'b10011110000; // [ 0.6171875]
	storage[446] =  11'b10011101000; // [ 0.61328125]
	storage[447] =  11'b10011011000; // [ 0.60546875]
	storage[448] =  11'b10010101000; // [ 0.58203125]
	storage[449] =  11'b10011000000; // [ 0.59375]
	storage[450] =  11'b10011010000; // [ 0.6015625]
	storage[451] =  11'b10011100000; // [ 0.609375]
	storage[452] =  11'b10011111000; // [ 0.62109375]
	storage[453] =  11'b10100001000; // [ 0.62890625]
	storage[454] =  11'b10100001000; // [ 0.62890625]
	storage[455] =  11'b10100011000; // [ 0.63671875]
	storage[456] =  11'b10100100000; // [ 0.640625]
	storage[457] =  11'b10100101000; // [ 0.64453125]
	storage[458] =  11'b10100101000; // [ 0.64453125]
	storage[459] =  11'b10100111000; // [ 0.65234375]
	storage[460] =  11'b10100111000; // [ 0.65234375]
	storage[461] =  11'b10100111000; // [ 0.65234375]
	storage[462] =  11'b10101000000; // [ 0.65625]
	storage[463] =  11'b10101001000; // [ 0.66015625]
	storage[464] =  11'b10101000000; // [ 0.65625]
	storage[465] =  11'b10100111000; // [ 0.65234375]
	storage[466] =  11'b10100110000; // [ 0.6484375]
	storage[467] =  11'b10100101000; // [ 0.64453125]
	storage[468] =  11'b10100010000; // [ 0.6328125]
	storage[469] =  11'b10100000000; // [ 0.625]
	storage[470] =  11'b10011010000; // [ 0.6015625]
	storage[471] =  11'b01110100000; // [ 0.453125]
	storage[472] =  11'b10010101000; // [ 0.58203125]
	storage[473] =  11'b10011101000; // [ 0.61328125]
	storage[474] =  11'b10011100000; // [ 0.609375]
	storage[475] =  11'b10011011000; // [ 0.60546875]
	storage[476] =  11'b10010011000; // [ 0.57421875]
	storage[477] =  11'b10010110000; // [ 0.5859375]
	storage[478] =  11'b10011001000; // [ 0.59765625]
	storage[479] =  11'b10011100000; // [ 0.609375]
	storage[480] =  11'b10011101000; // [ 0.61328125]
	storage[481] =  11'b10100000000; // [ 0.625]
	storage[482] =  11'b10100001000; // [ 0.62890625]
	storage[483] =  11'b10100011000; // [ 0.63671875]
	storage[484] =  11'b10100100000; // [ 0.640625]
	storage[485] =  11'b10100110000; // [ 0.6484375]
	storage[486] =  11'b10100110000; // [ 0.6484375]
	storage[487] =  11'b10100111000; // [ 0.65234375]
	storage[488] =  11'b10101000000; // [ 0.65625]
	storage[489] =  11'b10101001000; // [ 0.66015625]
	storage[490] =  11'b10101000000; // [ 0.65625]
	storage[491] =  11'b10101000000; // [ 0.65625]
	storage[492] =  11'b10101000000; // [ 0.65625]
	storage[493] =  11'b10100110000; // [ 0.6484375]
	storage[494] =  11'b10100110000; // [ 0.6484375]
	storage[495] =  11'b10100100000; // [ 0.640625]
	storage[496] =  11'b10100010000; // [ 0.6328125]
	storage[497] =  11'b10100000000; // [ 0.625]
	storage[498] =  11'b10011100000; // [ 0.609375]
	storage[499] =  11'b01110110000; // [ 0.4609375]
	storage[500] =  11'b10001111000; // [ 0.55859375]
	storage[501] =  11'b10011101000; // [ 0.61328125]
	storage[502] =  11'b10011100000; // [ 0.609375]
	storage[503] =  11'b10011010000; // [ 0.6015625]
	storage[504] =  11'b10010011000; // [ 0.57421875]
	storage[505] =  11'b10010111000; // [ 0.58984375]
	storage[506] =  11'b10011001000; // [ 0.59765625]
	storage[507] =  11'b10011100000; // [ 0.609375]
	storage[508] =  11'b10011101000; // [ 0.61328125]
	storage[509] =  11'b10100000000; // [ 0.625]
	storage[510] =  11'b10100010000; // [ 0.6328125]
	storage[511] =  11'b10100011000; // [ 0.63671875]
	storage[512] =  11'b10100011000; // [ 0.63671875]
	storage[513] =  11'b10100110000; // [ 0.6484375]
	storage[514] =  11'b10100110000; // [ 0.6484375]
	storage[515] =  11'b10100111000; // [ 0.65234375]
	storage[516] =  11'b10101001000; // [ 0.66015625]
	storage[517] =  11'b10101000000; // [ 0.65625]
	storage[518] =  11'b10101000000; // [ 0.65625]
	storage[519] =  11'b10101000000; // [ 0.65625]
	storage[520] =  11'b10100101000; // [ 0.64453125]
	storage[521] =  11'b10100101000; // [ 0.64453125]
	storage[522] =  11'b10100101000; // [ 0.64453125]
	storage[523] =  11'b10100011000; // [ 0.63671875]
	storage[524] =  11'b10100001000; // [ 0.62890625]
	storage[525] =  11'b10011111000; // [ 0.62109375]
	storage[526] =  11'b10011100000; // [ 0.609375]
	storage[527] =  11'b01111000000; // [ 0.46875]
	storage[528] =  11'b10001011000; // [ 0.54296875]
	storage[529] =  11'b10011100000; // [ 0.609375]
	storage[530] =  11'b10011011000; // [ 0.60546875]
	storage[531] =  11'b10011001000; // [ 0.59765625]
	storage[532] =  11'b10010100000; // [ 0.578125]
	storage[533] =  11'b10010111000; // [ 0.58984375]
	storage[534] =  11'b10011010000; // [ 0.6015625]
	storage[535] =  11'b10011011000; // [ 0.60546875]
	storage[536] =  11'b10011101000; // [ 0.61328125]
	storage[537] =  11'b10100011000; // [ 0.63671875]
	storage[538] =  11'b10100001000; // [ 0.62890625]
	storage[539] =  11'b10100011000; // [ 0.63671875]
	storage[540] =  11'b10100100000; // [ 0.640625]
	storage[541] =  11'b10100100000; // [ 0.640625]
	storage[542] =  11'b10100110000; // [ 0.6484375]
	storage[543] =  11'b10100110000; // [ 0.6484375]
	storage[544] =  11'b10101001000; // [ 0.66015625]
	storage[545] =  11'b10100111000; // [ 0.65234375]
	storage[546] =  11'b10100111000; // [ 0.65234375]
	storage[547] =  11'b10100110000; // [ 0.6484375]
	storage[548] =  11'b10100101000; // [ 0.64453125]
	storage[549] =  11'b10100100000; // [ 0.640625]
	storage[550] =  11'b10100100000; // [ 0.640625]
	storage[551] =  11'b10100011000; // [ 0.63671875]
	storage[552] =  11'b10100001000; // [ 0.62890625]
	storage[553] =  11'b10011111000; // [ 0.62109375]
	storage[554] =  11'b10011011000; // [ 0.60546875]
	storage[555] =  11'b01110110000; // [ 0.4609375]
	storage[556] =  11'b10001001000; // [ 0.53515625]
	storage[557] =  11'b10011011000; // [ 0.60546875]
	storage[558] =  11'b10011010000; // [ 0.6015625]
	storage[559] =  11'b10010111000; // [ 0.58984375]
	storage[560] =  11'b10010100000; // [ 0.578125]
	storage[561] =  11'b10010110000; // [ 0.5859375]
	storage[562] =  11'b10011000000; // [ 0.59375]
	storage[563] =  11'b10011011000; // [ 0.60546875]
	storage[564] =  11'b10011101000; // [ 0.61328125]
	storage[565] =  11'b10011111000; // [ 0.62109375]
	storage[566] =  11'b10100001000; // [ 0.62890625]
	storage[567] =  11'b10100010000; // [ 0.6328125]
	storage[568] =  11'b10100011000; // [ 0.63671875]
	storage[569] =  11'b10100100000; // [ 0.640625]
	storage[570] =  11'b10100101000; // [ 0.64453125]
	storage[571] =  11'b10100101000; // [ 0.64453125]
	storage[572] =  11'b10100101000; // [ 0.64453125]
	storage[573] =  11'b10100110000; // [ 0.6484375]
	storage[574] =  11'b10100101000; // [ 0.64453125]
	storage[575] =  11'b10100101000; // [ 0.64453125]
	storage[576] =  11'b10100100000; // [ 0.640625]
	storage[577] =  11'b10100011000; // [ 0.63671875]
	storage[578] =  11'b10100011000; // [ 0.63671875]
	storage[579] =  11'b10100010000; // [ 0.6328125]
	storage[580] =  11'b10011111000; // [ 0.62109375]
	storage[581] =  11'b10011100000; // [ 0.609375]
	storage[582] =  11'b10010110000; // [ 0.5859375]
	storage[583] =  11'b01101100000; // [ 0.421875]
	storage[584] =  11'b10001101000; // [ 0.55078125]
	storage[585] =  11'b10011001000; // [ 0.59765625]
	storage[586] =  11'b10011000000; // [ 0.59375]
	storage[587] =  11'b10010110000; // [ 0.5859375]
	storage[588] =  11'b10010011000; // [ 0.57421875]
	storage[589] =  11'b10010101000; // [ 0.58203125]
	storage[590] =  11'b10010111000; // [ 0.58984375]
	storage[591] =  11'b10011010000; // [ 0.6015625]
	storage[592] =  11'b10011100000; // [ 0.609375]
	storage[593] =  11'b10011111000; // [ 0.62109375]
	storage[594] =  11'b10011111000; // [ 0.62109375]
	storage[595] =  11'b10100000000; // [ 0.625]
	storage[596] =  11'b10100001000; // [ 0.62890625]
	storage[597] =  11'b10100001000; // [ 0.62890625]
	storage[598] =  11'b10100011000; // [ 0.63671875]
	storage[599] =  11'b10100100000; // [ 0.640625]
	storage[600] =  11'b10100011000; // [ 0.63671875]
	storage[601] =  11'b10100101000; // [ 0.64453125]
	storage[602] =  11'b10100100000; // [ 0.640625]
	storage[603] =  11'b10100100000; // [ 0.640625]
	storage[604] =  11'b10100100000; // [ 0.640625]
	storage[605] =  11'b10100010000; // [ 0.6328125]
	storage[606] =  11'b10100010000; // [ 0.6328125]
	storage[607] =  11'b10100000000; // [ 0.625]
	storage[608] =  11'b10011110000; // [ 0.6171875]
	storage[609] =  11'b10011011000; // [ 0.60546875]
	storage[610] =  11'b10010000000; // [ 0.5625]
	storage[611] =  11'b01101010000; // [ 0.4140625]
	storage[612] =  11'b10010100000; // [ 0.578125]
	storage[613] =  11'b10011001000; // [ 0.59765625]
	storage[614] =  11'b10010111000; // [ 0.58984375]
	storage[615] =  11'b10010101000; // [ 0.58203125]
	storage[616] =  11'b10010000000; // [ 0.5625]
	storage[617] =  11'b10010011000; // [ 0.57421875]
	storage[618] =  11'b10010101000; // [ 0.58203125]
	storage[619] =  11'b10010111000; // [ 0.58984375]
	storage[620] =  11'b10011010000; // [ 0.6015625]
	storage[621] =  11'b10011101000; // [ 0.61328125]
	storage[622] =  11'b10011101000; // [ 0.61328125]
	storage[623] =  11'b10011101000; // [ 0.61328125]
	storage[624] =  11'b10011111000; // [ 0.62109375]
	storage[625] =  11'b10100000000; // [ 0.625]
	storage[626] =  11'b10100010000; // [ 0.6328125]
	storage[627] =  11'b10100011000; // [ 0.63671875]
	storage[628] =  11'b10100011000; // [ 0.63671875]
	storage[629] =  11'b10100100000; // [ 0.640625]
	storage[630] =  11'b10100011000; // [ 0.63671875]
	storage[631] =  11'b10100010000; // [ 0.6328125]
	storage[632] =  11'b10100010000; // [ 0.6328125]
	storage[633] =  11'b10100000000; // [ 0.625]
	storage[634] =  11'b10100001000; // [ 0.62890625]
	storage[635] =  11'b10011111000; // [ 0.62109375]
	storage[636] =  11'b10011100000; // [ 0.609375]
	storage[637] =  11'b10011000000; // [ 0.59375]
	storage[638] =  11'b01111110000; // [ 0.4921875]
	storage[639] =  11'b01110010000; // [ 0.4453125]
	storage[640] =  11'b10011000000; // [ 0.59375]
	storage[641] =  11'b10011001000; // [ 0.59765625]
	storage[642] =  11'b10010110000; // [ 0.5859375]
	storage[643] =  11'b10010100000; // [ 0.578125]
	storage[644] =  11'b10001110000; // [ 0.5546875]
	storage[645] =  11'b10010001000; // [ 0.56640625]
	storage[646] =  11'b10010011000; // [ 0.57421875]
	storage[647] =  11'b10010110000; // [ 0.5859375]
	storage[648] =  11'b10011000000; // [ 0.59375]
	storage[649] =  11'b10011100000; // [ 0.609375]
	storage[650] =  11'b10011100000; // [ 0.609375]
	storage[651] =  11'b10011100000; // [ 0.609375]
	storage[652] =  11'b10011101000; // [ 0.61328125]
	storage[653] =  11'b10011110000; // [ 0.6171875]
	storage[654] =  11'b10011111000; // [ 0.62109375]
	storage[655] =  11'b10100000000; // [ 0.625]
	storage[656] =  11'b10100000000; // [ 0.625]
	storage[657] =  11'b10100000000; // [ 0.625]
	storage[658] =  11'b10100000000; // [ 0.625]
	storage[659] =  11'b10011111000; // [ 0.62109375]
	storage[660] =  11'b10011111000; // [ 0.62109375]
	storage[661] =  11'b10011110000; // [ 0.6171875]
	storage[662] =  11'b10011101000; // [ 0.61328125]
	storage[663] =  11'b10011011000; // [ 0.60546875]
	storage[664] =  11'b10011010000; // [ 0.6015625]
	storage[665] =  11'b10001111000; // [ 0.55859375]
	storage[666] =  11'b01101000000; // [ 0.40625]
	storage[667] =  11'b10001000000; // [ 0.53125]
	storage[668] =  11'b10011000000; // [ 0.59375]
	storage[669] =  11'b10010111000; // [ 0.58984375]
	storage[670] =  11'b10010100000; // [ 0.578125]
	storage[671] =  11'b10010001000; // [ 0.56640625]
	storage[672] =  11'b10001101000; // [ 0.55078125]
	storage[673] =  11'b10001110000; // [ 0.5546875]
	storage[674] =  11'b10010001000; // [ 0.56640625]
	storage[675] =  11'b10010011000; // [ 0.57421875]
	storage[676] =  11'b10010110000; // [ 0.5859375]
	storage[677] =  11'b10011001000; // [ 0.59765625]
	storage[678] =  11'b10011001000; // [ 0.59765625]
	storage[679] =  11'b10011011000; // [ 0.60546875]
	storage[680] =  11'b10011011000; // [ 0.60546875]
	storage[681] =  11'b10011011000; // [ 0.60546875]
	storage[682] =  11'b10011010000; // [ 0.6015625]
	storage[683] =  11'b10011011000; // [ 0.60546875]
	storage[684] =  11'b10011101000; // [ 0.61328125]
	storage[685] =  11'b10011101000; // [ 0.61328125]
	storage[686] =  11'b10011101000; // [ 0.61328125]
	storage[687] =  11'b10011101000; // [ 0.61328125]
	storage[688] =  11'b10011101000; // [ 0.61328125]
	storage[689] =  11'b10011100000; // [ 0.609375]
	storage[690] =  11'b10011011000; // [ 0.60546875]
	storage[691] =  11'b10011001000; // [ 0.59765625]
	storage[692] =  11'b10010100000; // [ 0.578125]
	storage[693] =  11'b01110011000; // [ 0.44921875]
	storage[694] =  11'b01110000000; // [ 0.4375]
	storage[695] =  11'b10010100000; // [ 0.578125]
	storage[696] =  11'b10010101000; // [ 0.58203125]
	storage[697] =  11'b10010100000; // [ 0.578125]
	storage[698] =  11'b10010010000; // [ 0.5703125]
	storage[699] =  11'b10010000000; // [ 0.5625]
	storage[700] =  11'b10001010000; // [ 0.5390625]
	storage[701] =  11'b10001100000; // [ 0.546875]
	storage[702] =  11'b10001111000; // [ 0.55859375]
	storage[703] =  11'b10010001000; // [ 0.56640625]
	storage[704] =  11'b10010011000; // [ 0.57421875]
	storage[705] =  11'b10011010000; // [ 0.6015625]
	storage[706] =  11'b10010111000; // [ 0.58984375]
	storage[707] =  11'b10011000000; // [ 0.59375]
	storage[708] =  11'b10011001000; // [ 0.59765625]
	storage[709] =  11'b10011001000; // [ 0.59765625]
	storage[710] =  11'b10001101000; // [ 0.55078125]
	storage[711] =  11'b10000010000; // [ 0.5078125]
	storage[712] =  11'b10011001000; // [ 0.59765625]
	storage[713] =  11'b10011011000; // [ 0.60546875]
	storage[714] =  11'b10011011000; // [ 0.60546875]
	storage[715] =  11'b10011011000; // [ 0.60546875]
	storage[716] =  11'b10011010000; // [ 0.6015625]
	storage[717] =  11'b10011001000; // [ 0.59765625]
	storage[718] =  11'b10010111000; // [ 0.58984375]
	storage[719] =  11'b10010101000; // [ 0.58203125]
	storage[720] =  11'b01111101000; // [ 0.48828125]
	storage[721] =  11'b01100110000; // [ 0.3984375]
	storage[722] =  11'b10001101000; // [ 0.55078125]
	storage[723] =  11'b10010101000; // [ 0.58203125]
	storage[724] =  11'b10010100000; // [ 0.578125]
	storage[725] =  11'b10010010000; // [ 0.5703125]
	storage[726] =  11'b10010000000; // [ 0.5625]
	storage[727] =  11'b10001101000; // [ 0.55078125]
	storage[728] =  11'b10001001000; // [ 0.53515625]
	storage[729] =  11'b10001011000; // [ 0.54296875]
	storage[730] =  11'b10001101000; // [ 0.55078125]
	storage[731] =  11'b10010000000; // [ 0.5625]
	storage[732] =  11'b10010010000; // [ 0.5703125]
	storage[733] =  11'b10010111000; // [ 0.58984375]
	storage[734] =  11'b10010110000; // [ 0.5859375]
	storage[735] =  11'b10010111000; // [ 0.58984375]
	storage[736] =  11'b10010111000; // [ 0.58984375]
	storage[737] =  11'b10011000000; // [ 0.59375]
	storage[738] =  11'b10010100000; // [ 0.578125]
	storage[739] =  11'b01111001000; // [ 0.47265625]
	storage[740] =  11'b10001000000; // [ 0.53125]
	storage[741] =  11'b10010110000; // [ 0.5859375]
	storage[742] =  11'b10011001000; // [ 0.59765625]
	storage[743] =  11'b10010111000; // [ 0.58984375]
	storage[744] =  11'b10010110000; // [ 0.5859375]
	storage[745] =  11'b10010101000; // [ 0.58203125]
	storage[746] =  11'b10010001000; // [ 0.56640625]
	storage[747] =  11'b01111011000; // [ 0.48046875]
	storage[748] =  11'b01100101000; // [ 0.39453125]
	storage[749] =  11'b10000110000; // [ 0.5234375]
	storage[750] =  11'b10010011000; // [ 0.57421875]
	storage[751] =  11'b10010011000; // [ 0.57421875]
	storage[752] =  11'b10010001000; // [ 0.56640625]
	storage[753] =  11'b10001111000; // [ 0.55859375]
	storage[754] =  11'b10001101000; // [ 0.55078125]
	storage[755] =  11'b10001010000; // [ 0.5390625]
	storage[756] =  11'b10000110000; // [ 0.5234375]
	storage[757] =  11'b10001001000; // [ 0.53515625]
	storage[758] =  11'b10001100000; // [ 0.546875]
	storage[759] =  11'b10001111000; // [ 0.55859375]
	storage[760] =  11'b10010001000; // [ 0.56640625]
	storage[761] =  11'b10010100000; // [ 0.578125]
	storage[762] =  11'b10010100000; // [ 0.578125]
	storage[763] =  11'b10010110000; // [ 0.5859375]
	storage[764] =  11'b10010110000; // [ 0.5859375]
	storage[765] =  11'b10010111000; // [ 0.58984375]
	storage[766] =  11'b10010110000; // [ 0.5859375]
	storage[767] =  11'b10001101000; // [ 0.55078125]
	storage[768] =  11'b01111011000; // [ 0.48046875]
	storage[769] =  11'b01111000000; // [ 0.46875]
	storage[770] =  11'b10000010000; // [ 0.5078125]
	storage[771] =  11'b10001000000; // [ 0.53125]
	storage[772] =  11'b10000100000; // [ 0.515625]
	storage[773] =  11'b01111001000; // [ 0.47265625]
	storage[774] =  11'b01101001000; // [ 0.41015625]
	storage[775] =  11'b01101100000; // [ 0.421875]
	storage[776] =  11'b10001000000; // [ 0.53125]
	storage[777] =  11'b10010001000; // [ 0.56640625]
	storage[778] =  11'b10010000000; // [ 0.5625]
	storage[779] =  11'b10010000000; // [ 0.5625]
	storage[780] =  11'b10001110000; // [ 0.5546875]
	storage[781] =  11'b10001100000; // [ 0.546875]
	storage[782] =  11'b10001010000; // [ 0.5390625]
	storage[783] =  11'b10001000000; // [ 0.53125]
end
 endmodule

Increase convolutional speed

Sir i wish to increase the Convolution speed ,but it didn't worked ,is there any method to increase the Convolution speed , please do reply sir .

cam_proj.out.sdc

Critical Warning (332148): Timing requirements not met
Info (11105): For recommendations on closing timing, run Report Timing Closure Recommendations in the TimeQuest Timing Analyzer.
Critical Warning (332148): Timing requirements not met
Info (11105): For recommendations on closing timing, run Report Timing Closure Recommendations in the TimeQuest Timing Analyzer.
Critical Warning (332148): Timing requirements not met
Info (11105): For recommendations on closing timing, run Report Timing Closure Recommendations in the TimeQuest Timing Analyzer.

Hello, there is no file
cam_proj.out.sdc. And this series of errors appears, please help !!!

How to simulate the generated verilog

Hi,

I don't have the hardware ... but I'm interested to compare speedup of result's to understand the code and get an estimate. Can you please tell me how can I do that ?

thanks,
Tarun

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.