npu-arm-apb bridge
DESCRIPTION
Uploaded from Google DocsTRANSCRIPT
NPU AHB Modules, APB Bridge project! Name: Hung-Jui Wang (Rex), Powen Ko Student ID: 5771, 7478 we can finish the project until Sat.and i'll make the project as powerpoint and then send to pro. ------------------------------------------------------------------------------------------------------
*SystemC 2.0 Source Code
Main.CPP
/***************************************************************************** The following code is derived, directly or indirectly, from Powen Ko and Hung-Jui Wang Copyright (c) 2006 by all NPU. All Rights reserved.
*****************************************************************************//*****************************************************************************
main.cpp -- This is the top level file instantiating the modules and binding ports to signals.
Original Author: Amit Rao, Synopsys, Inc.
*****************************************************************************/
#include "systemc.h"#include "stage1.h"
#include "stage2.h"#include "stage3.h"#include "display.h"#include "numgen.h"#include "AHBBridge.h"#define NS * 1e-9int sc_main(int ac, char *av[]){
//Clock sc_signal<bool> clk;
//Signals sc_signal<bool> HRESETn; sc_signal<sc_uint<32> > HADRR; sc_signal<sc_uint<2> > HTRANS; sc_signal<bool> HWRITE; sc_signal<sc_uint<32> > HWDATA; sc_signal<bool> HSELAPBif; sc_signal<sc_uint<32> > HRDATA; sc_signal<bool> HREADin; sc_signal<bool> HREADYout; sc_signal<sc_uint<2> > HRESP; sc_signal<sc_uint<32> > PRDATA; sc_signal<sc_uint<32> > PWDATA; sc_signal<bool> PENABLE; sc_signal<bool> PSELx; sc_signal<sc_uint<32> > PADDR; sc_signal<bool> PWRITE;
//Signals sc_signal<double> in1; sc_signal<double> in2; sc_signal<double> sum; sc_signal<double> diff; sc_signal<double> prod; sc_signal<double> quot; sc_signal<double> powr;
AHBBridge AHBBridge1("AHBBridge"); AHBBridge1(clk,HRESETn,HADRR,HTRANS, HWRITE,HWDATA,HSELAPBif,HRDATA, HREADin,HREADYout,HRESP,PRDATA,PWDATA,PENABLE, PSELx,PADDR,PWRITE );
/* numgen N("numgen"); //instance of `numgen' module N(in1, in2, clk ); //Positional port binding
stage1 S1("stage1"); //instance of `stage1' module //Named port binding S1.in1(in1); S1.in2(in2); S1.sum(sum); S1.diff(diff); S1.clk(clk);
stage2 S2("stage2"); //instance of `stage2' module S2(sum, diff, prod, quot, clk ); //Positional port binding stage3 S3("stage3"); //instance of `stage3' module
S3( prod, quot, powr, clk); //Positional port binding*/
display D("display"); //instance of `display' module D(powr, clk); //Positional port binding sc_initialize(); //Initialize simulation for(int i = 0; i < 50; i++){ clk.write(1); sc_cycle( 10 NS ); clk.write(0); sc_cycle( 10 NS ); } return 0;}
AHBBridge.H
/*****************************************************************************
AHBBridge.H -- This is the interface file for the stage1 module.
Original Author: Amit Rao, Synopsys, Inc.
*****************************************************************************/
#ifndef AHBBRIDGE1_H#define AHBBRIDGE_Hstruct AHBBridge : sc_module {
//Signals sc_in<bool> clk; sc_in<bool> HRESETn; sc_in<sc_uint<32> > HADRR; sc_in<sc_uint<2> > HTRANS; sc_in<bool> HWRITE; sc_in<sc_uint<32> > HWDATA; sc_in<bool> HSELAPBif; sc_out<sc_uint<32> > HRDATA; sc_in<bool> HREADin; sc_out<bool> HREADYout; sc_out<sc_uint<2> > HRESP; sc_in<sc_uint<32> > PRDATA; sc_out<sc_uint<32> > PWDATA; sc_out<bool> PENABLE; sc_out<bool> PSELx; sc_out<sc_uint<32> > PADDR; sc_out<bool> PWRITE;
//u_int
// sc_uint<32> Memory[0xff];
//Signals
sc_in<double> in1; //input 1 sc_in<double> in2; //input 2 sc_out<double> sum; //output 1 sc_out<double> diff; //output 2 // sc_in<bool> clk; //clock // void addsub(); //method implementing functionality void Action();
//Counstructor SC_CTOR( AHBBridge ) { SC_METHOD( Action ); //Declare addsub as SC_METHOD and dont_initialize(); sensitive_pos << clk; //make it sensitive to positive clock edge }};#endif
AHBBridge.cpp
#include "systemc.h"#include "AHBBridge.h"//Definition of addsub method/* sc_in<bool> clk; sc_in<bool> HRESETn; sc_in<sc_uint<32> > HADRR; sc_in<sc_uint<2> > HTRANS; sc_in<bool> HWRITE; sc_in<sc_uint<32> > HWDATA; sc_in<bool> HSELAPBif; sc_out<sc_uint<32> > HRDATA; sc_in<bool> HREADin; sc_out<bool> HREADYout; sc_out<sc_uint<2> > HRESP; sc_in<sc_uint<32> > PRDATA; sc_out<sc_uint<32> > PWDATA; sc_out<bool> PENABLE; sc_out<bool> PSELx; sc_out<sc_uint<32> > PADDR; sc_out<bool> PWRITE; */
void AHBBridge::Action(){ bool i_HRESETn; bool i_HWRITE; bool valid=true; sc_uint<32> i_PRDATA; sc_uint<32> i_HWDATA;
// double b; i_HRESETn = HRESETn.read(); i_HWRITE = HWRITE.read(); i_PRDATA = PRDATA.read(); i_HWDATA = HWDATA.read();
if (i_HRESETn==false && i_HWRITE==false && i_PRDATA!=0) { //Read PWDATA.write(i_PRDATA); PSELx.write(1); PWRITE.write(0); }else if (i_HRESETn==false && i_HWRITE==true) { //write PWDATA.write(i_HWDATA);
}else { //Idle PSELx.write(0); PENABLE.write(0); }
} // end of addsub method
Below is Final Exam
Main.CPP
//main.cpp#include "systemc.h"#include "fetch.h"#include "decode.h"#include "exec.h"#include "mem_acc.h"#include "wr_back.h"#include "Memory.h"int sc_main(int ac, char *av[]){//Memory
sc_signal<bool> m_Read_en; sc_signal<int> m_addressShift; sc_signal<int> m_address;
sc_signal<sc_uint<32> > m_MemoryData32;
//fetchsc_signal<int> nnpc; // out of mem_accsc_signal<int> npc;sc_signal<int> ir;//decodesc_signal<int> mux3_out;sc_signal<int> A;sc_signal<int> B;sc_signal<int> imm;sc_signal<bool> mux0_en;
sc_signal<bool> mux1_en;sc_signal<sc_uint<5> > alu_cont;sc_signal<sc_uint<3> > cond_sel;sc_signal<int> dest_out;//execsc_signal<bool> cond_out;sc_signal<int> alu_out;sc_signal<bool> mux3_en;sc_signal<bool> wrd;//mem_accsc_signal<int> lmd;
//wr_back all signals have been already defined//const int delay_cycles = 2;sc_clock clk("Clock", 1, 0.5, 0.0);
Memory MEM ("memory_block");MEM << clk << m_Read_en << m_addressShift << m_address << m_MemoryData32 ;// << ir << mux3_out << A << B << imm << mux0_en << mux1_en<<alu_cont << cond_sel << dest_out;decode IDU ("decode_block");IDU << clk << ir << mux3_out << A << B << imm << mux0_en << mux1_en<<alu_cont << cond_sel << dest_out;
/*//initialize nnpcnnpc.write(0); //***********check it outmux3_out.write(777);//instantiationfetch IFU("fetch_block") ;IFU << nnpc << clk << npc << ir ;
decode IDU ("decode_block");IDU << clk << ir << mux3_out << A << B << imm << mux0_en << mux1_en<<alu_cont << cond_sel << dest_out;
exec IEU("execute_block");IEU << clk << npc << A << mux0_en << B << imm << mux1_en << alu_cont <<cond_sel << cond_out << alu_out << mux3_en << wrd;
mem_acc MU("memory_access_block");MU << clk << dest_out << wrd << alu_out << cond_out << npc << nnpc << lmd ;
wr_back WB("write_back_block");WB << lmd << alu_out << mux3_en << mux3_out;*/
sc_start(clk, -1); cout << "Time for simulation = " << (time(NULL) - tbuffer) << endl; return 0; /* this is necessary */} //end of main
decode.h
//decode header file decode.hSC_MODULE(decode){//input portssc_in_clk clk;//sc_in<int> npc;sc_in<int> ir;sc_in<int> mux3_out; //for destination register or for LD
//-------------------------/* sc_in<short> i_P; sc_out<short> o_PopP;*/
// sc_uint<4> t_P; //sc_short<>//------------------------
//output portssc_out<int> A;sc_out<int> B;sc_out<int> imm;sc_out<bool> mux0_en;sc_out<bool> mux1_en;sc_out<sc_uint<5> > alu_cont;sc_out<sc_uint<3> > cond_sel; //branch select to condsc_out<int> dest_out; //for store// registers 16x32sc_int<32> reg_mem[16];//tempsc_uint<32> ir_temp;sc_uint<32> imm_temp;// inst formatsc_uint<5> opcode;sc_uint<4> dest;sc_uint<4> src_a;sc_uint<4> src_b;sc_uint<16> offset;//constructorSC_CTOR(decode) { reg_mem[0] = 0x1; reg_mem[1] = 0x2; reg_mem[2] = 0x5; reg_mem[3] = 0x4; reg_mem[4] = 0x5; reg_mem[5] = 0x1; reg_mem[6] = 0x7; reg_mem[7] = 0x3; reg_mem[8] = 0xA; reg_mem[9] = 0x7; reg_mem[10] = 0xB; reg_mem[11] = 0x1; reg_mem[12] = 0x1; reg_mem[13] = 0x1; reg_mem[14] = 0x1; reg_mem[15] = 0x1;
SC_CTHREAD(decoder, clk.pos());SC_CTHREAD(sign_extend, clk.pos());SC_CTHREAD(registers, clk.pos());
} //end of constructor//fuctionality of the processvoid decoder();void sign_extend();void registers();
/*void CodecInitialize();void CodecPushPixel(); //short p);void CodecPopPixel();//void);void CodecDoFdct();//void);*/
}; //end of decode.h
decode.cpp
// implementation file decode.cpp#include "systemc.h"#include "decode.h"/*--------------------------------------------------------------------------*/static const short COS_TABLE[8][8] = {
{ 32768, 32138, 30273, 27245, 23170, 18204, 12539, 6392 }, { 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204 }, { 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245 }, { 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138 }, { 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138 }, { 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245 }, { 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204 }, { 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392 }};
static const short ONE_OVER_SQRT_TWO = 23170;/*--------------------------------------------------------------------------*/static short buffer[8][8];static int idx;
void decode :: decoder(){
int counter=0; while( 1 ) { counter = counter +1; ir_temp=ir.read(); printf ("ir_temp decoder is %x \n", ir_temp);
opcode = ir_temp.range(31,27); printf ("opcode is %x \n", opcode);
switch(opcode){ case 0: { mux0_en.write(1); // ld mux1_en.write(1); alu_cont.write(0); cond_sel.write(0); break; } case 1: { mux0_en.write(1); //st mux1_en.write(1); alu_cont.write(1); cond_sel.write(0); break; } case 2: { mux0_en.write(1); //lhi mux1_en.write(1); alu_cont.write(2); cond_sel.write(0); break; } case 3: { mux0_en.write(1); //add cout << " i am in case 3" << endl; cout << "mux0_en is " << mux0_en << endl; mux1_en.write(0); alu_cont.write(3); cond_sel.write(0); break; } case 4: { mux0_en.write(1); //addi mux1_en.write(1); alu_cont.write(4); cond_sel.write(0); break; } case 5: { mux0_en.write(1); //sub mux1_en.write(0); alu_cont.write(5); cond_sel.write(0); break; } case 6: { mux0_en.write(1); //subi mux1_en.write(1); alu_cont.write(6); cond_sel.write(0); break; } case 7: { mux0_en.write(1); //mod mux1_en.write(0); alu_cont.write(7); cond_sel.write(0); break; } case 8: { mux0_en.write(1); //mul mux1_en.write(0); alu_cont.write(8); cond_sel.write(0); break; } case 9: { mux0_en.write(1); //div mux1_en.write(0); alu_cont.write(9); cond_sel.write(0); break; } case 10: { mux0_en.write(1); //and mux1_en.write(0); alu_cont.write(10); cond_sel.write(0); break; } case 11: { mux0_en.write(1); //andi mux1_en.write(1); alu_cont.write(11); cond_sel.write(0); break; } case 12: { mux0_en.write(1); //or mux1_en.write(0); alu_cont.write(12);
cond_sel.write(0); break; } case 13: { mux0_en.write(1); //ori mux1_en.write(1); alu_cont.write(13); cond_sel.write(0); break; } case 14: { mux0_en.write(1); //xor mux1_en.write(0); alu_cont.write(14); cond_sel.write(0); break; } case 15: { mux0_en.write(1); //xori mux1_en.write(1); alu_cont.write(15); cond_sel.write(0); break; } case 16: { mux0_en.write(1); //not mux1_en.write(0); //don't care alu_cont.write(16); cond_sel.write(0); break; } case 17: { mux0_en.write(1); //lsl mux1_en.write(0); //don't care alu_cont.write(17); cond_sel.write(0); break; } case 18: { mux0_en.write(1); //lsr mux1_en.write(0); //don't care alu_cont.write(18); cond_sel.write(0); break; } case 19: { mux0_en.write(1); //asr mux1_en.write(0); //don't care alu_cont.write(19); cond_sel.write(0); break; } case 20: { mux0_en.write(0); //jmp mux1_en.write(1); alu_cont.write(20); cond_sel.write(7); break; } case 21: { mux0_en.write(1); //jmpr mux1_en.write(1); alu_cont.write(21); cond_sel.write(7); break; } case 22: { mux0_en.write(0); //jali mux1_en.write(1); alu_cont.write(22); cond_sel.write(7); break; } case 23: { mux0_en.write(0); //beqz mux1_en.write(1); alu_cont.write(23); cond_sel.write(1); break; } case 24: { mux0_en.write(0); //bneqz mux1_en.write(1); alu_cont.write(24); cond_sel.write(2); break; } case 25: { mux0_en.write(0); //bgtz mux1_en.write(1); alu_cont.write(25); cond_sel.write(3); break; } case 26: { mux0_en.write(0); //bgtez mux1_en.write(1);
alu_cont.write(26); cond_sel.write(4); break; } case 27: { mux0_en.write(0); //bltz mux1_en.write(1); alu_cont.write(27); cond_sel.write(5); break; } case 28: { mux0_en.write(0); //bltez mux1_en.write(1); alu_cont.write(28); cond_sel.write(6); break; } case 29: { mux0_en.write(1); //trap mux1_en.write(1); alu_cont.write(29); cond_sel.write(0); break; } case 30: { mux0_en.write(0); //tret mux1_en.write(1); alu_cont.write(30); cond_sel.write(0); break; } case 31: { mux0_en.write(1); //don't care //noop mux1_en.write(0); //don't care alu_cont.write(31); cond_sel.write(0); break; } } //end of switch stmt wait(); }
// idx = 0;} //end of decoder
void decode :: registers(){ int counter =0; while ( 1 ) { counter =counter+1; ir_temp=ir.read(); opcode = ir_temp.range(31,27); printf ("opcode in REG %x \n", opcode); printf("IR is %x \n", ir.read());ir_temp=ir.read();dest = ir_temp.range(26,23);src_a = ir_temp.range(22,19);src_b = ir_temp.range(18,15);cout << " dest is " << dest << endl;cout << " src_a is " << src_a << endl;cout << " src_b is " << src_b << endl;A.write(reg_mem[src_a]);B.write(reg_mem[src_b]);/*if ( (opcode != 0x01) || (opcode != 0x14) || (opcode != 0x15) || (opcode != 0x16) || (opcode != 0x17) || (opcode != 0x18) || (opcode != 0x19) || (opcode != 0x1A) || (opcode != 0x1B) || (opcode != 0x1C) || (opcode != 0x1D) || (opcode != 0x1E) || (opcode != 0x1F) ) { reg_mem[dest]=mux3_out.read(); }*/cout << "mux3_out is " << mux3_out << endl;dest_out.write(reg_mem[dest]); // rd for store
wait(); }}
void decode :: sign_extend(){int counter =0;offset=0;imm_temp=0;imm.write(0);while (1) { counter =counter +1;ir_temp=ir.read();printf( "ir_temp is %x \n ", ir_temp);offset = ir_temp.range(15,0);printf( "offset is %x \n ", offset);imm_temp.range(15,0)=offset;printf( "imm_temp is %x \n ", imm_temp);for(int i=31; i>=16; i--)imm_temp[i]=offset[15];printf( "imm_temp1 is %x \n ", imm_temp);imm.write(imm_temp); //put back from imm_temp to immwait();}}//-----------------------------------------------------------------------------
/*///--------------------------------------------------------------------------static double Y(int a, int b) {
return COS_TABLE[a][b] / 32768.0;}//-------------------------------------------------------------------------static double C(int h) {
return h ? 1.0 : ONE_OVER_SQRT_TWO / 32768.0;}//--------------------------------------------------------------------------static int F(int u, int v, short img[8][8]) {
double s[8], r = 0; int x;
for(x=0; x<8; x++) {
s[x] = img[x][0] * Y(0, v) + img[x][1] * Y(1, v) + img[x][2] * Y(2, v) + img[x][3] * Y(3, v) + img[x][4] * Y(4, v) + img[x][5] * Y(5, v) + img[x][6] * Y(6, v) + img[x][7] * Y(7, v); }
for(x=0; x<8; x++) {
r += s[x] * Y(x, u); }
return (short)(r * .25 * C(u) * C(v));}
void decode::CodecInitialize(){ idx = 0;}
void decode::CodecPushPixel() //short p);{
short t_P=i_P.read(); if( idx == 64 ) {
idx = 0; }
buffer[idx / 8][idx % 8] = t_P; idx++;}//--------------------------------------------------------------------------void decode ::CodecPopPixel(){ short p;
if( idx == 64 ) {
idx = 0; }
p = buffer[idx / 8][idx % 8]; idx++; o_PopP.write(p);}void decode ::CodecDoFdct(){ int x, y; short tempBuffer[8][8];
for(x=0; x<8; x++) {
for(y=0; y<8; y++) {
tempBuffer[x][y] = F(x, y, buffer); } } for(x=0; x<8; x++) {
for(y=0; y<8; y++) {
buffer[x][y] = tempBuffer[x][y]; } } idx = 0;} */
memory.h
SC_MODULE(Memory){ //input ports //sc_in_clk clk;/* sc_in<int> mux3_0; sc_in<int> mux3_1; sc_in<bool> mux3_en;*/
//input ports sc_in_clk clk; sc_in<bool> i_Read_en; sc_in<int> i_addressShift; sc_in<int> i_address;
//output ports sc_out<sc_uint<32> > o_MemoryData32; sc_uint<32> t_MemoryData32; sc_int<32> t_address;
/* sc_out<int> mux3_out;
*/ SC_CTOR(Memory){SC_METHOD(ReadWriteMemory);//SC_METHOD(mux3);// sensitive << mux3_en ; } //functionality of the process //void mux3(); void ReadWriteMemory();
}; //end of mem_acc.h
memory.cpp
// implementation file wr_back.cpp #include "systemc.h" #include "Memory.h"
/*--------------------------------------------------------------------------*/static const short COS_MemoryTABLE[8*8*8*8] = {//1,1 00001, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,2 00001, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,3 00001, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,4 00001, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170,
-6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,5 00001, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,6 00001, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,7 00001, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//1,8 00001, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,
//2,1 00002, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,2 00002, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,3 00002, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,4
00002, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,5 00002, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,6 00002, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,7 00002, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//2,8 00002, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,1 00003, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,2 00003, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,3 00003, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170,
-6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,4 00003, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,5 00003, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,6 00003, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,7 00003, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//3,8 00003, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,1 00004, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,2 00004, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,3 00004, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -
32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,4 00004, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,5 00004, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,6 00004, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,7 00004, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//4,8 00004, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,1 00005, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,2 00005, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245,
32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,3 00005, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,4 00005, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,5 00005, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,6 00005, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,7 00005, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//5,8 00005, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,1 00006, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,2 00006, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204,
32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,3 00006, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,4 00006, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,5 00006, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,6 00006, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,7 00006, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//6,8 00006, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,
//7,1 00007, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245,
32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,2 00007, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,3 00007, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,4 00007, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,5 00007, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,6 00007, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,7 00007, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//7,8 00007, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,
//8,1 8, 00001, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -
32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,,2 8, 00002, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,3 8, 00003, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,4 8, 00004, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,5 8, 00005, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,6 8, 00006, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,7 8, 00007, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245, 32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,//8,8 8, 8, 30273, 27245, 23170, 18204, 12539, 6392, 32768, 27245, 12539, -6392, -23170, -32138, -30273, -18204, 32768, 18204, -12539, -32138, -23170, 6392, 30273, 27245, 32768, 6392, -30273, -18204, 23170, 27245, -12539, -32138, 32768, -6392, -30273, 18204, 23170, -27245, -12539, 32138, 32768, -18204, -12539, 32138, -23170, -6392, 30273, -27245,
32768, -27245, 12539, 6392, -23170, 32138, -30273, 18204, 32768, -32138, 30273, -27245, 23170, -18204, 12539, -6392,};
/* void Memory :: mux3(){ cout << " I AM IN MUX3" << endl; if (mux3_en.read() == 0) { mux3_out.write(mux3_0.read()); } else { mux3_out.write(mux3_1.read()); }}*/void Memory :: ReadWriteMemory(){ cout << " ReadWrite Memory" << endl; if (i_Read_en.read() == 0) { //Write data to Memory
t_address=i_address.read()+(i_addressShift.read()); t_MemoryData32=COS_MemoryTABLE[t_address]; o_MemoryData32.write(t_MemoryData32);
} else { //Read data to Memory.
t_address=i_address.read()+(i_addressShift.read()); t_MemoryData32=COS_MemoryTABLE[t_address]; o_MemoryData32.write(t_MemoryData32); }}