Na sungil / NM500_Test_Socket
Committer:
Nasungil
Date:
Fri Nov 24 00:33:13 2017 +0000
Revision:
1:f23d9ead1017
Parent:
0:f7ea94750875
Child:
2:4a75bdce2735
NM500 Test Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nasungil 0:f7ea94750875 1 #include "NM500.h"
Nasungil 0:f7ea94750875 2 #include "Test.h"
Nasungil 0:f7ea94750875 3 #include "mbed.h"
Nasungil 0:f7ea94750875 4 #include "SDFileSystem.h"
Nasungil 0:f7ea94750875 5
Nasungil 0:f7ea94750875 6 SDFileSystem sd(SD_MOSI, SD_MISO, SD_SCK, SD_CS, "sd"); // the pinout on the mbed Cool Components workshop board
Nasungil 0:f7ea94750875 7
Nasungil 0:f7ea94750875 8 FILE *fp=NULL;
Nasungil 0:f7ea94750875 9
Nasungil 0:f7ea94750875 10
Nasungil 1:f23d9ead1017 11
Nasungil 0:f7ea94750875 12 DigitalOut SDCard_CS(D10);
Nasungil 0:f7ea94750875 13
Nasungil 0:f7ea94750875 14 unsigned char vector[NEURONSIZE];
Nasungil 0:f7ea94750875 15
Nasungil 0:f7ea94750875 16 extern int NSR_Conn_fail;
Nasungil 0:f7ea94750875 17 extern int GCR_Conn_fail;
Nasungil 0:f7ea94750875 18 extern int MINIF_Conn_fail;
Nasungil 0:f7ea94750875 19 extern int MAXIF_Conn_fail;
Nasungil 1:f23d9ead1017 20 extern int AIF_Conn_fail;
Nasungil 0:f7ea94750875 21 extern int NCR_Conn_fail;
Nasungil 0:f7ea94750875 22 extern int Memory_fail;
Nasungil 0:f7ea94750875 23
Nasungil 0:f7ea94750875 24 extern int Connection;
Nasungil 0:f7ea94750875 25
Nasungil 0:f7ea94750875 26 extern int Reset_fail;
Nasungil 0:f7ea94750875 27
Nasungil 0:f7ea94750875 28 extern int CMN_Nsr;
Nasungil 0:f7ea94750875 29
Nasungil 0:f7ea94750875 30 extern int CMN_RC;
Nasungil 0:f7ea94750875 31 extern int aif_fail;
Nasungil 0:f7ea94750875 32 extern int ncount_fail;
Nasungil 0:f7ea94750875 33 extern int id_fail;
Nasungil 0:f7ea94750875 34 extern int nsr_fail;
Nasungil 0:f7ea94750875 35 extern int Nid1;
Nasungil 0:f7ea94750875 36 extern int Nid2;
Nasungil 0:f7ea94750875 37 extern int Dist1;
Nasungil 0:f7ea94750875 38 extern int Dist2;
Nasungil 0:f7ea94750875 39 extern int Gcr1;
Nasungil 0:f7ea94750875 40 extern int Gcr2;
Nasungil 0:f7ea94750875 41 extern int Aif1;
Nasungil 0:f7ea94750875 42 extern int Aif2;
Nasungil 0:f7ea94750875 43 extern int Minif1;
Nasungil 0:f7ea94750875 44 extern int Minif2;
Nasungil 0:f7ea94750875 45 extern int Maxif1;
Nasungil 0:f7ea94750875 46 extern int Maxif2;
Nasungil 0:f7ea94750875 47 extern int Cat1;
Nasungil 0:f7ea94750875 48 extern int Cat2;
Nasungil 0:f7ea94750875 49
Nasungil 0:f7ea94750875 50 extern int Memory1;
Nasungil 0:f7ea94750875 51 extern int Memory2;
Nasungil 0:f7ea94750875 52
Nasungil 0:f7ea94750875 53 extern unsigned char array1[NEURONSIZE];
Nasungil 0:f7ea94750875 54 extern unsigned char array2[NEURONSIZE];
Nasungil 0:f7ea94750875 55
Nasungil 0:f7ea94750875 56 extern int Learn1;
Nasungil 0:f7ea94750875 57 extern int Learn2;
Nasungil 0:f7ea94750875 58
Nasungil 0:f7ea94750875 59 //SPI init
Nasungil 0:f7ea94750875 60 void SD_Init(void)
Nasungil 0:f7ea94750875 61 {
Nasungil 0:f7ea94750875 62 //test CS
Nasungil 0:f7ea94750875 63
Nasungil 0:f7ea94750875 64 SDCard_CS = HIGH; //disable
Nasungil 0:f7ea94750875 65 wait(0.1);
Nasungil 0:f7ea94750875 66 mkdir("/sd", 0777);
Nasungil 0:f7ea94750875 67 fp = fopen("/sd/data.txt", "w");
Nasungil 0:f7ea94750875 68
Nasungil 0:f7ea94750875 69 if(fp == NULL)
Nasungil 0:f7ea94750875 70 {
Nasungil 0:f7ea94750875 71 error("Could not open file for write\n");
Nasungil 0:f7ea94750875 72 }
Nasungil 1:f23d9ead1017 73 fclose(fp);
Nasungil 0:f7ea94750875 74 printf("SD Init OK\n");
Nasungil 0:f7ea94750875 75 }
Nasungil 0:f7ea94750875 76 void RESET_Test(void)
Nasungil 0:f7ea94750875 77 {
Nasungil 1:f23d9ead1017 78
Nasungil 1:f23d9ead1017 79 printf("\nRESET Test\n");
Nasungil 1:f23d9ead1017 80
Nasungil 1:f23d9ead1017 81 //nomal mode
Nasungil 1:f23d9ead1017 82 //printf("NOMAL MODE \n");
Nasungil 0:f7ea94750875 83 int nsr = read(NM_NSR);
Nasungil 1:f23d9ead1017 84 //printf("NSR : 0x%x \n",nsr);
Nasungil 0:f7ea94750875 85 int gcr = read(NM_GCR);
Nasungil 1:f23d9ead1017 86 //printf("GCR : 0x%x \n",gcr);
Nasungil 0:f7ea94750875 87 int minif = read(NM_MINIF);
Nasungil 1:f23d9ead1017 88 //printf("MINIF : 0x%x \n",minif);
Nasungil 1:f23d9ead1017 89 int maxif = read(NM_MAXIF);
Nasungil 1:f23d9ead1017 90 //printf("MAXIF : 0x%x \n",maxif);
Nasungil 1:f23d9ead1017 91 int dist = read(NM_DIST);
Nasungil 1:f23d9ead1017 92 //printf("dist : 0x%x \n",dist);
Nasungil 1:f23d9ead1017 93 int cat = read(NM_CAT);
Nasungil 1:f23d9ead1017 94 //printf("cat : 0x%x \n",cat);
Nasungil 1:f23d9ead1017 95 int ncount = read(NM_NCOUNT);
Nasungil 1:f23d9ead1017 96 //printf("ncount : 0x%x \n",ncount);
Nasungil 1:f23d9ead1017 97
Nasungil 1:f23d9ead1017 98
Nasungil 0:f7ea94750875 99
Nasungil 1:f23d9ead1017 100 //sr mode
Nasungil 1:f23d9ead1017 101 // printf("\nSR MODE \n");
Nasungil 1:f23d9ead1017 102 write(NM_NSR,0x10);
Nasungil 1:f23d9ead1017 103 // int comp = read(NM_COMP);
Nasungil 1:f23d9ead1017 104 // printf("COMP : 0x%x \n",comp);
Nasungil 1:f23d9ead1017 105 //nsr = read(NM_NSR);
Nasungil 1:f23d9ead1017 106 //printf("NSR : 0x%x \n",nsr);
Nasungil 1:f23d9ead1017 107 //minif = read(NM_MINIF);
Nasungil 1:f23d9ead1017 108 //printf("MINIF : 0x%x \n",minif);
Nasungil 1:f23d9ead1017 109 int ncr = read(NM_NCR);
Nasungil 1:f23d9ead1017 110 //printf("ncr : 0x%x \n",ncr);
Nasungil 1:f23d9ead1017 111 //dist = read(NM_DIST);
Nasungil 1:f23d9ead1017 112 //printf("dist : 0x%x \n",dist);
Nasungil 1:f23d9ead1017 113 //cat = read(NM_CAT);
Nasungil 1:f23d9ead1017 114 //printf("cat : 0x%x \n",cat);
Nasungil 1:f23d9ead1017 115 int aif = read(NM_AIF);
Nasungil 1:f23d9ead1017 116 //printf("aif : 0x%x \n",aif);
Nasungil 1:f23d9ead1017 117 int nid = read(NM_NID);
Nasungil 1:f23d9ead1017 118 //printf("nid : 0x%x \n",nid);
Nasungil 1:f23d9ead1017 119
Nasungil 1:f23d9ead1017 120 write(NM_NSR,0x00);
Nasungil 0:f7ea94750875 121
Nasungil 0:f7ea94750875 122 if(nsr != 0x00)
Nasungil 0:f7ea94750875 123 Reset_fail = 1;
Nasungil 0:f7ea94750875 124 if(gcr != 0x01)
Nasungil 0:f7ea94750875 125 Reset_fail = 1;
Nasungil 0:f7ea94750875 126 if(minif != 0x02)
Nasungil 0:f7ea94750875 127 Reset_fail = 1;
Nasungil 0:f7ea94750875 128 if(maxif != 0x4000)
Nasungil 0:f7ea94750875 129 Reset_fail = 1;
Nasungil 1:f23d9ead1017 130 if(dist != 0xffff)
Nasungil 1:f23d9ead1017 131 Reset_fail = 1;
Nasungil 1:f23d9ead1017 132 if(cat != 0xffff)
Nasungil 1:f23d9ead1017 133 Reset_fail = 1;
Nasungil 1:f23d9ead1017 134 if(ncr != 0x01)
Nasungil 1:f23d9ead1017 135 Reset_fail = 1;
Nasungil 1:f23d9ead1017 136 if(aif != 0x4000)
Nasungil 1:f23d9ead1017 137 Reset_fail = 1;
Nasungil 1:f23d9ead1017 138 if(nid != 0x0000)
Nasungil 1:f23d9ead1017 139 Reset_fail = 1;
Nasungil 1:f23d9ead1017 140
Nasungil 0:f7ea94750875 141 if(Reset_fail == 0)
Nasungil 0:f7ea94750875 142 printf("Reset Test Pass\n");
Nasungil 1:f23d9ead1017 143 else{
Nasungil 1:f23d9ead1017 144 printf("Reset Test Fail\n");
Nasungil 0:f7ea94750875 145 printf("Reset the NM500 and proceed\n");
Nasungil 1:f23d9ead1017 146 }
Nasungil 0:f7ea94750875 147 }
Nasungil 0:f7ea94750875 148 //각 레지스터의 데이터가 깨지는 것이 없는지 확인
Nasungil 0:f7ea94750875 149 void Connection_test(void)
Nasungil 0:f7ea94750875 150 {
Nasungil 0:f7ea94750875 151 ///////////NSR 시작//////////////
Nasungil 1:f23d9ead1017 152 printf("\nConnection Test\n");
Nasungil 1:f23d9ead1017 153 // //기존 NSR 백업
Nasungil 1:f23d9ead1017 154 // //int init_NSR = read(NM_NSR);
Nasungil 1:f23d9ead1017 155 // //NSR의 데이터에 0xaa write
Nasungil 1:f23d9ead1017 156 // write(NM_NSR, 0xaa);
Nasungil 1:f23d9ead1017 157 // //사용하는 비트만 & 연산
Nasungil 1:f23d9ead1017 158 // int temp_NSR = read(NM_NSR)& 0x3f;
Nasungil 1:f23d9ead1017 159 // //printf("NSR : 0x%x\n", temp_NSR);
Nasungil 1:f23d9ead1017 160 // if(temp_NSR != 0x2a){
Nasungil 1:f23d9ead1017 161 // printf("NSR Connection error\n");
Nasungil 1:f23d9ead1017 162 // NSR_Conn_fail=1;
Nasungil 1:f23d9ead1017 163 // Connection = 1;
Nasungil 1:f23d9ead1017 164 // }
Nasungil 1:f23d9ead1017 165 //
Nasungil 1:f23d9ead1017 166 // //NSR의 데이터를 0x55로 변경하여 write
Nasungil 1:f23d9ead1017 167 // write(NM_NSR, 0x055);
Nasungil 1:f23d9ead1017 168 // temp_NSR = read(NM_NSR)&0x3f;
Nasungil 1:f23d9ead1017 169 // //printf("NSR : 0x%x\n",temp_NSR);
Nasungil 1:f23d9ead1017 170 // if(temp_NSR != 0x19){
Nasungil 1:f23d9ead1017 171 // printf("NSR Connection error\n");
Nasungil 1:f23d9ead1017 172 // NSR_Conn_fail=1;
Nasungil 1:f23d9ead1017 173 // Connection = 1;
Nasungil 1:f23d9ead1017 174 // }
Nasungil 1:f23d9ead1017 175 //// if(NSR_Conn_fail == 0)
Nasungil 1:f23d9ead1017 176 //// printf("NSR_Connetion PASS \n");
Nasungil 1:f23d9ead1017 177 //
Nasungil 1:f23d9ead1017 178 // //NSR을 초기 저장값으로 복원
Nasungil 1:f23d9ead1017 179 // write(NM_NSR, 0);
Nasungil 0:f7ea94750875 180
Nasungil 0:f7ea94750875 181 ////////////NSR 종료////////////
Nasungil 0:f7ea94750875 182
Nasungil 0:f7ea94750875 183
Nasungil 1:f23d9ead1017 184 ///////////GCR 시작//////////////
Nasungil 0:f7ea94750875 185 //write GCR 0xaa
Nasungil 0:f7ea94750875 186 write(NM_GCR, 0xaa);
Nasungil 0:f7ea94750875 187 //GCR Read
Nasungil 0:f7ea94750875 188 unsigned int temp_GCR = read(NM_GCR);
Nasungil 1:f23d9ead1017 189 // printf("GCR : 0x%x\n", temp_GCR);
Nasungil 0:f7ea94750875 190
Nasungil 0:f7ea94750875 191 //GCR data가 깨졌을 경우
Nasungil 0:f7ea94750875 192 if(temp_GCR != 0xaa){
Nasungil 0:f7ea94750875 193 GCR_Conn_fail = 1;
Nasungil 0:f7ea94750875 194 Connection = 1;
Nasungil 0:f7ea94750875 195 printf("GCR Connection error\n");
Nasungil 0:f7ea94750875 196 }
Nasungil 0:f7ea94750875 197 //write GCR 0x55
Nasungil 0:f7ea94750875 198 write(NM_GCR, 0x55);
Nasungil 0:f7ea94750875 199 temp_GCR = read(NM_GCR);
Nasungil 0:f7ea94750875 200 //printf("GCR : 0x%x\n", temp_GCR);
Nasungil 0:f7ea94750875 201 //GCR data가 깨졌을 경우
Nasungil 0:f7ea94750875 202 if(temp_GCR != 0x55){
Nasungil 0:f7ea94750875 203 GCR_Conn_fail = 1;
Nasungil 0:f7ea94750875 204 Connection = 1;
Nasungil 0:f7ea94750875 205 printf("GCR Connection error\n");
Nasungil 0:f7ea94750875 206 }
Nasungil 1:f23d9ead1017 207
Nasungil 0:f7ea94750875 208 ///////////GCR 종료//////////////
Nasungil 0:f7ea94750875 209
Nasungil 0:f7ea94750875 210
Nasungil 0:f7ea94750875 211
Nasungil 0:f7ea94750875 212 ///////////MINIF 시작//////////////
Nasungil 1:f23d9ead1017 213
Nasungil 1:f23d9ead1017 214 write(NM_MINIF, 0xaaaa);
Nasungil 0:f7ea94750875 215 int temp_MINIF = read(NM_MINIF);
Nasungil 0:f7ea94750875 216 //printf("MINIF : 0x%x\n", temp_MINIF);
Nasungil 0:f7ea94750875 217 //minif data 확인
Nasungil 1:f23d9ead1017 218 if(temp_MINIF != 0xaaaa){
Nasungil 0:f7ea94750875 219 MINIF_Conn_fail = 1;
Nasungil 0:f7ea94750875 220 Connection = 1;
Nasungil 0:f7ea94750875 221 printf("MINIF Connection error\n");
Nasungil 0:f7ea94750875 222 }
Nasungil 0:f7ea94750875 223 //write MINIF 0x55
Nasungil 1:f23d9ead1017 224 write(NM_MINIF, 0x5555);
Nasungil 0:f7ea94750875 225 temp_MINIF = read(NM_MINIF);
Nasungil 0:f7ea94750875 226 //printf("MINIF : 0x%x\n", temp_MINIF);
Nasungil 0:f7ea94750875 227 //MINIF test
Nasungil 1:f23d9ead1017 228 if(temp_MINIF != 0x5555){
Nasungil 0:f7ea94750875 229 MINIF_Conn_fail = 1;
Nasungil 0:f7ea94750875 230 Connection = 1;
Nasungil 0:f7ea94750875 231 printf("MINIF Connection error\n");
Nasungil 0:f7ea94750875 232 }
Nasungil 1:f23d9ead1017 233
Nasungil 1:f23d9ead1017 234 //////////END MINIF/////////////////
Nasungil 1:f23d9ead1017 235
Nasungil 1:f23d9ead1017 236 ///////////MAXIF 시작//////////////
Nasungil 0:f7ea94750875 237
Nasungil 0:f7ea94750875 238
Nasungil 1:f23d9ead1017 239 //write maxif 0xaaaa
Nasungil 1:f23d9ead1017 240
Nasungil 1:f23d9ead1017 241 write(NM_MAXIF, 0xaaaa);
Nasungil 0:f7ea94750875 242 int temp_MAXIF = read(NM_MAXIF);
Nasungil 0:f7ea94750875 243 //printf("MAXIF : 0x%x\n", temp_MAXIF);
Nasungil 1:f23d9ead1017 244 //maxif data 확인
Nasungil 1:f23d9ead1017 245 if(temp_MAXIF != 0xaaaa){
Nasungil 0:f7ea94750875 246 MAXIF_Conn_fail = 1;
Nasungil 0:f7ea94750875 247 Connection = 1;
Nasungil 0:f7ea94750875 248 printf("MAXIF Connection error\n");
Nasungil 0:f7ea94750875 249 }
Nasungil 0:f7ea94750875 250 //write MAXIF 0x55
Nasungil 1:f23d9ead1017 251 write(NM_MAXIF, 0x5555);
Nasungil 0:f7ea94750875 252 temp_MAXIF = read(NM_MAXIF);
Nasungil 0:f7ea94750875 253 //printf("MAXIF : 0x%x\n", temp_MAXIF);
Nasungil 0:f7ea94750875 254 //MAXIF test
Nasungil 1:f23d9ead1017 255 if(temp_MAXIF != 0x5555){
Nasungil 0:f7ea94750875 256 MAXIF_Conn_fail = 1;
Nasungil 0:f7ea94750875 257 Connection = 1;
Nasungil 0:f7ea94750875 258 printf("MAXIF Connection error\n");
Nasungil 1:f23d9ead1017 259 }
Nasungil 1:f23d9ead1017 260 //////////END MAXIF/////////////////
Nasungil 1:f23d9ead1017 261
Nasungil 1:f23d9ead1017 262
Nasungil 0:f7ea94750875 263 ///////////NCR 시작//////////////
Nasungil 0:f7ea94750875 264 //NSR 저장
Nasungil 0:f7ea94750875 265 //SR Mode 전환
Nasungil 0:f7ea94750875 266 write(NM_NSR, 0x10);
Nasungil 0:f7ea94750875 267 int init_NCR = read(NM_NCR);
Nasungil 0:f7ea94750875 268 // printf("init NCR : 0x%x\n",init_NCR);
Nasungil 0:f7ea94750875 269 //write NCR 0xaa
Nasungil 0:f7ea94750875 270 write(NM_NCR, 0xaa);
Nasungil 0:f7ea94750875 271 int temp_NCR = read(NM_NCR);
Nasungil 1:f23d9ead1017 272 //printf("NCR : 0x%x\n", temp_NCR);
Nasungil 0:f7ea94750875 273 //NCR test
Nasungil 0:f7ea94750875 274 if(temp_NCR != 0xaa){
Nasungil 0:f7ea94750875 275 NCR_Conn_fail = 1;
Nasungil 0:f7ea94750875 276 Connection = 1;
Nasungil 0:f7ea94750875 277 printf("NCR Connection error\n");
Nasungil 0:f7ea94750875 278 }
Nasungil 0:f7ea94750875 279 //write NCR 0x55
Nasungil 0:f7ea94750875 280 write(NM_NCR, 0x55);
Nasungil 0:f7ea94750875 281 temp_NCR = read(NM_NCR);
Nasungil 0:f7ea94750875 282 //printf("NCR : 0x%x\n", temp_NCR);
Nasungil 0:f7ea94750875 283 //NCR test
Nasungil 0:f7ea94750875 284 if(temp_NCR != 0x55){
Nasungil 0:f7ea94750875 285 NCR_Conn_fail = 1;
Nasungil 0:f7ea94750875 286 Connection = 1;
Nasungil 0:f7ea94750875 287 printf("NCR Connection error\n");
Nasungil 0:f7ea94750875 288 }
Nasungil 1:f23d9ead1017 289
Nasungil 1:f23d9ead1017 290 ///////////NCR 종료//////////////
Nasungil 1:f23d9ead1017 291
Nasungil 1:f23d9ead1017 292 /////////////////AIF
Nasungil 1:f23d9ead1017 293
Nasungil 1:f23d9ead1017 294 write(NM_AIF, 0xaaaa);
Nasungil 1:f23d9ead1017 295 int temp_AIF = read(NM_AIF);
Nasungil 1:f23d9ead1017 296 //printf("AIF : 0x%x\n", temp_AIF);
Nasungil 1:f23d9ead1017 297 //AIF test
Nasungil 1:f23d9ead1017 298 if(temp_AIF != 0xaaaa){
Nasungil 1:f23d9ead1017 299 AIF_Conn_fail = 1;
Nasungil 1:f23d9ead1017 300 Connection = 1;
Nasungil 1:f23d9ead1017 301 printf("AIF Connection error\n");
Nasungil 1:f23d9ead1017 302 }
Nasungil 1:f23d9ead1017 303 //write AIF 0x55
Nasungil 1:f23d9ead1017 304 write(NM_AIF, 0x5555);
Nasungil 1:f23d9ead1017 305 temp_AIF = read(NM_AIF);
Nasungil 1:f23d9ead1017 306 /// printf("AIF : 0x%x\n", temp_AIF);
Nasungil 1:f23d9ead1017 307 //AIF test
Nasungil 1:f23d9ead1017 308 if(temp_AIF != 0x5555){
Nasungil 1:f23d9ead1017 309 AIF_Conn_fail = 1;
Nasungil 1:f23d9ead1017 310 Connection = 1;
Nasungil 1:f23d9ead1017 311 printf("AIF Connection error\n");
Nasungil 1:f23d9ead1017 312 }
Nasungil 1:f23d9ead1017 313
Nasungil 1:f23d9ead1017 314 write(NM_NSR, 0x00);
Nasungil 0:f7ea94750875 315
Nasungil 0:f7ea94750875 316 if(Connection == 1)
Nasungil 1:f23d9ead1017 317 printf("Connection Test Fail\n");
Nasungil 0:f7ea94750875 318 else
Nasungil 0:f7ea94750875 319 printf("Connection Test Pass\n");
Nasungil 0:f7ea94750875 320 }
Nasungil 0:f7ea94750875 321
Nasungil 0:f7ea94750875 322 void Memory_Test(void)
Nasungil 0:f7ea94750875 323 {
Nasungil 0:f7ea94750875 324 int ncount, old_ncnt;
Nasungil 0:f7ea94750875 325
Nasungil 0:f7ea94750875 326 printf("Memory Test Start \n");
Nasungil 0:f7ea94750875 327 printf("Data Save \n");
Nasungil 0:f7ea94750875 328 //1번째 학습 홀수 : 0x0a, 짝수 : 0x05
Nasungil 0:f7ea94750875 329 for(int i = 1; i <=MAXNEURONS; i=i+2){
Nasungil 0:f7ea94750875 330 //학습할 데이터
Nasungil 0:f7ea94750875 331 for(int j=0;j<NEURONSIZE;j=j+2){
Nasungil 0:f7ea94750875 332 array1[j] =0xa;
Nasungil 0:f7ea94750875 333 array1[j+1] =0x5;
Nasungil 0:f7ea94750875 334 array2[j] =0x5;
Nasungil 0:f7ea94750875 335 array2[j+1] =0xa;
Nasungil 0:f7ea94750875 336 }
Nasungil 0:f7ea94750875 337 //A 5 A 5....학습
Nasungil 0:f7ea94750875 338 ncount = learn(array1, NEURONSIZE, i); //input : data, neuronsize, cat, return : ncount
Nasungil 0:f7ea94750875 339 //5 A 5 A....학습
Nasungil 0:f7ea94750875 340 ncount = learn(array2, NEURONSIZE, i+1); //input : data, neuronsize, cat, return : ncount
Nasungil 0:f7ea94750875 341
Nasungil 0:f7ea94750875 342 //학습여부 판단
Nasungil 0:f7ea94750875 343 if(ncount == old_ncnt){ //ncount가 변화가 없으면
Nasungil 0:f7ea94750875 344 if(ncount <=576){
Nasungil 0:f7ea94750875 345 Learn1 = 1;
Nasungil 0:f7ea94750875 346 printf("NCOUNT : %d\n ", ncount);
Nasungil 0:f7ea94750875 347 error("\n Learn Fail NM500 #1\n");
Nasungil 0:f7ea94750875 348 }
Nasungil 0:f7ea94750875 349 else{
Nasungil 0:f7ea94750875 350 Learn2 = 1;
Nasungil 0:f7ea94750875 351 printf("NCOUNT : %d\n ", ncount);
Nasungil 0:f7ea94750875 352 error("\n Learn Fail NM500 #2\n");
Nasungil 0:f7ea94750875 353 }
Nasungil 0:f7ea94750875 354 }
Nasungil 0:f7ea94750875 355 //ncount가 증가하였을 경우
Nasungil 0:f7ea94750875 356 else{
Nasungil 0:f7ea94750875 357 old_ncnt = ncount; //old ncount 갱신
Nasungil 0:f7ea94750875 358 printf(".");
Nasungil 0:f7ea94750875 359 }
Nasungil 0:f7ea94750875 360
Nasungil 0:f7ea94750875 361 }
Nasungil 0:f7ea94750875 362 //학습 뉴런 갯수가 MAXNEURONS일 경우
Nasungil 0:f7ea94750875 363 if(ncount == 0xFFFF || ncount == 0x7FFF) //change
Nasungil 0:f7ea94750875 364 ncount = MAXNEURONS;
Nasungil 0:f7ea94750875 365
Nasungil 0:f7ea94750875 366 printf("\n");
Nasungil 0:f7ea94750875 367 //학습된 뉴런 갯수 출력
Nasungil 0:f7ea94750875 368 // printf("NCOUNT : %d ",ncount);
Nasungil 0:f7ea94750875 369 //end memory write
Nasungil 0:f7ea94750875 370
Nasungil 0:f7ea94750875 371 //NSR 백업
Nasungil 0:f7ea94750875 372 printf("Data Compare\n");
Nasungil 0:f7ea94750875 373 int temp_NSR = read(NM_NSR);
Nasungil 0:f7ea94750875 374 //write NSR-SR Mode
Nasungil 0:f7ea94750875 375 write(NM_NSR, 0x10);
Nasungil 0:f7ea94750875 376 write(NM_RSTCHAIN, 0);
Nasungil 0:f7ea94750875 377
Nasungil 0:f7ea94750875 378 int temp_data[NEURONSIZE];
Nasungil 0:f7ea94750875 379 for(int i = 1; i<=MAXNEURONS; i++){
Nasungil 0:f7ea94750875 380 printf(".");
Nasungil 0:f7ea94750875 381 //전체 뉴런 데이터 리드
Nasungil 0:f7ea94750875 382 for(int j = 0; j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 383 temp_data[j]=read(NM_COMP);
Nasungil 0:f7ea94750875 384 //fprintf(fp,"%d,", temp_data[j]);
Nasungil 0:f7ea94750875 385 //A 5 A 5 일 경우
Nasungil 0:f7ea94750875 386 if(i%2 == 1){
Nasungil 0:f7ea94750875 387 //학습한 데이터와 다를 경우
Nasungil 0:f7ea94750875 388 if(temp_data[j]!= array1[j]){
Nasungil 0:f7ea94750875 389 printf("\nNID : %d , %d byte Memory Error\n",i,j);
Nasungil 0:f7ea94750875 390 Memory_fail = 1;
Nasungil 0:f7ea94750875 391 }
Nasungil 0:f7ea94750875 392
Nasungil 0:f7ea94750875 393 }
Nasungil 0:f7ea94750875 394 //5 A 5 A 일 경우
Nasungil 0:f7ea94750875 395 else if( i%2 == 0){
Nasungil 0:f7ea94750875 396 //학습한 데이터와 다를 경우
Nasungil 0:f7ea94750875 397 if(temp_data[j]!= array2[j]){
Nasungil 0:f7ea94750875 398 printf("\nNID : %d , %d byte Memory Error\n",i,j);
Nasungil 0:f7ea94750875 399 Memory_fail = 1;
Nasungil 0:f7ea94750875 400 }
Nasungil 0:f7ea94750875 401 }
Nasungil 0:f7ea94750875 402 }
Nasungil 0:f7ea94750875 403 //다음 뉴런으로 변경
Nasungil 0:f7ea94750875 404 int cat = read(NM_CAT)& 0x7FFF;
Nasungil 0:f7ea94750875 405 //fprintf(fp,"\t%d\n", cat);
Nasungil 0:f7ea94750875 406 }
Nasungil 0:f7ea94750875 407 //노말모드로 복귀
Nasungil 0:f7ea94750875 408 write(NM_NSR, temp_NSR);
Nasungil 0:f7ea94750875 409 //초기화
Nasungil 0:f7ea94750875 410 forget();
Nasungil 0:f7ea94750875 411 ////////////데이터 변경//////////////////
Nasungil 0:f7ea94750875 412
Nasungil 0:f7ea94750875 413 ////////5 a 5 a learn///////////////////
Nasungil 0:f7ea94750875 414 printf("\nData Change\n");
Nasungil 0:f7ea94750875 415 for(int i = 1; i <=MAXNEURONS; i=i+2){
Nasungil 0:f7ea94750875 416 //memory array init
Nasungil 0:f7ea94750875 417 for(int j=0;j<NEURONSIZE;j=j+2){
Nasungil 0:f7ea94750875 418 array1[j] =0xa;
Nasungil 0:f7ea94750875 419 array1[j+1] =0x5;
Nasungil 0:f7ea94750875 420 array2[j] =0x5;
Nasungil 0:f7ea94750875 421 array2[j+1] =0xa;
Nasungil 0:f7ea94750875 422 }
Nasungil 0:f7ea94750875 423
Nasungil 0:f7ea94750875 424 ncount = learn(array2, NEURONSIZE, i); //input : data, neuronsize, cat, return : ncount
Nasungil 0:f7ea94750875 425 ncount = learn(array1, NEURONSIZE, i+1); //input : data, neuronsize, cat, return : ncount
Nasungil 0:f7ea94750875 426
Nasungil 0:f7ea94750875 427 if(ncount == old_ncnt){ //ncount가 변화가 없으면
Nasungil 0:f7ea94750875 428 if(ncount <=576){
Nasungil 0:f7ea94750875 429 Learn1 = 1;
Nasungil 0:f7ea94750875 430 printf("NCOUNT : %d\n",ncount);
Nasungil 0:f7ea94750875 431 error("\n Learn Fail NM500 #1\n");
Nasungil 0:f7ea94750875 432 }
Nasungil 0:f7ea94750875 433 else{
Nasungil 0:f7ea94750875 434 Learn2 = 1;
Nasungil 0:f7ea94750875 435 printf("NCOUNT : %d\n",ncount);
Nasungil 0:f7ea94750875 436 error("\n Learn Fail NM500 #2\n");
Nasungil 0:f7ea94750875 437 }
Nasungil 0:f7ea94750875 438 }
Nasungil 0:f7ea94750875 439 //ncount가 증가하였을 경우
Nasungil 0:f7ea94750875 440 else{
Nasungil 0:f7ea94750875 441 old_ncnt = ncount; //old ncount 갱신
Nasungil 0:f7ea94750875 442 printf(".");
Nasungil 0:f7ea94750875 443 }
Nasungil 0:f7ea94750875 444 }
Nasungil 0:f7ea94750875 445 //NCOUNT cheak
Nasungil 0:f7ea94750875 446 if(ncount == 0xFFFF || ncount == 0x7FFF) //change
Nasungil 0:f7ea94750875 447 ncount = MAXNEURONS;
Nasungil 0:f7ea94750875 448 //printf("NCOUNT : %d ",ncount);
Nasungil 0:f7ea94750875 449 //end memory write
Nasungil 0:f7ea94750875 450 //////////////////////////////////////////////////////////////
Nasungil 0:f7ea94750875 451 //fprintf(fp,"5 A\n");
Nasungil 0:f7ea94750875 452 //backup NSR
Nasungil 0:f7ea94750875 453 temp_NSR = read(NM_NSR);
Nasungil 0:f7ea94750875 454 //write NSR-SR Mode
Nasungil 0:f7ea94750875 455 write(NM_NSR, 0x10);
Nasungil 0:f7ea94750875 456 write(NM_RSTCHAIN, 0);
Nasungil 0:f7ea94750875 457
Nasungil 0:f7ea94750875 458
Nasungil 0:f7ea94750875 459
Nasungil 0:f7ea94750875 460 //compare memory(cheak)
Nasungil 0:f7ea94750875 461 printf("\nData Compare \n");
Nasungil 0:f7ea94750875 462 for(int i = 1; i<=MAXNEURONS; i++){
Nasungil 0:f7ea94750875 463 printf(".");
Nasungil 0:f7ea94750875 464 for(int j = 0; j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 465 temp_data[j]=read(NM_COMP);
Nasungil 0:f7ea94750875 466 //fprintf(fp,"%d,", temp_data[j]);
Nasungil 0:f7ea94750875 467 if(i%2 == 1){
Nasungil 0:f7ea94750875 468 if(temp_data[j]!= array2[j]){
Nasungil 0:f7ea94750875 469 printf("\nNID : %d , %d byte Memory Error\n",i,j);
Nasungil 0:f7ea94750875 470 Memory_fail = 1;
Nasungil 0:f7ea94750875 471 }
Nasungil 0:f7ea94750875 472
Nasungil 0:f7ea94750875 473 }
Nasungil 0:f7ea94750875 474 else if( i%2 == 0){
Nasungil 0:f7ea94750875 475 if(temp_data[j]!= array1[j]){
Nasungil 0:f7ea94750875 476 printf("\nNID : %d , %d byte Memory Error\n",i,j);
Nasungil 0:f7ea94750875 477 Memory_fail = 1;
Nasungil 0:f7ea94750875 478 }
Nasungil 0:f7ea94750875 479 }
Nasungil 0:f7ea94750875 480 }
Nasungil 0:f7ea94750875 481 int cat = read(NM_CAT)& 0x7FFF;
Nasungil 0:f7ea94750875 482 // fprintf(fp,"\t%d\n", cat);
Nasungil 0:f7ea94750875 483 }
Nasungil 0:f7ea94750875 484 //return Nomal Mode
Nasungil 0:f7ea94750875 485 write(NM_NSR, temp_NSR);
Nasungil 0:f7ea94750875 486 forget();
Nasungil 0:f7ea94750875 487 //fclose(fp);
Nasungil 0:f7ea94750875 488 //error("Momory test ok");
Nasungil 0:f7ea94750875 489 if(Memory_fail == 0)
Nasungil 0:f7ea94750875 490 printf("\nMemort Test Pass\n");
Nasungil 0:f7ea94750875 491 }
Nasungil 0:f7ea94750875 492
Nasungil 0:f7ea94750875 493 int data_learn(void)
Nasungil 0:f7ea94750875 494 {
Nasungil 0:f7ea94750875 495 int ncnt=0,old_ncnt=0; //ncount, old ncount
Nasungil 0:f7ea94750875 496
Nasungil 0:f7ea94750875 497 //number of neuron 576*2
Nasungil 0:f7ea94750875 498 for(int i=1;i<=MAXNEURONS;i++){
Nasungil 0:f7ea94750875 499 // ex
Nasungil 0:f7ea94750875 500 // 1. 0 1 0 1....
Nasungil 0:f7ea94750875 501 // 2. 0 2 0 2....
Nasungil 0:f7ea94750875 502 // 3. 0 3 0 3....
Nasungil 0:f7ea94750875 503 // .....
Nasungil 0:f7ea94750875 504 // 255. 0 255 0 255....
Nasungil 0:f7ea94750875 505 // 256. 1 0 1 0....
Nasungil 0:f7ea94750875 506 // 257. 1 1 1 1....
Nasungil 0:f7ea94750875 507 if(i%2 == 1){
Nasungil 0:f7ea94750875 508 for(int j =0;j<DATA_CNT;j=j+2){
Nasungil 0:f7ea94750875 509 vector[j] = i>>8; //upper bit save
Nasungil 0:f7ea94750875 510 vector[j+1] = i; //low bit save
Nasungil 0:f7ea94750875 511 }
Nasungil 0:f7ea94750875 512 for(int j =DATA_CNT;j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 513 vector[j] = array1[j]; //upper bit save
Nasungil 0:f7ea94750875 514 }
Nasungil 0:f7ea94750875 515 }
Nasungil 0:f7ea94750875 516 else if(i%2==0){
Nasungil 0:f7ea94750875 517 for(int j =0;j<DATA_CNT;j=j+2){
Nasungil 0:f7ea94750875 518 vector[j] = i>>8; //upper bit save
Nasungil 0:f7ea94750875 519 vector[j+1] = i; //low bit save
Nasungil 0:f7ea94750875 520 }
Nasungil 0:f7ea94750875 521 for(int j =DATA_CNT;j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 522 vector[j] = array2[j]; //upper bit save
Nasungil 0:f7ea94750875 523 }
Nasungil 0:f7ea94750875 524 }
Nasungil 0:f7ea94750875 525
Nasungil 0:f7ea94750875 526 //data learn
Nasungil 0:f7ea94750875 527 ncnt = learn(vector, NEURONSIZE, i); //input : data, neuronsize, cat, return : ncount
Nasungil 0:f7ea94750875 528 if(ncnt == 0xffff || ncnt == 0x7FFF) //change
Nasungil 0:f7ea94750875 529 ncnt = MAXNEURONS;
Nasungil 0:f7ea94750875 530 //pc.printf("ncount # %d\n",ncnt);
Nasungil 0:f7ea94750875 531
Nasungil 0:f7ea94750875 532 if(ncnt == old_ncnt){ //ncount가 변화가 없으면
Nasungil 0:f7ea94750875 533 if(ncnt <=576){
Nasungil 0:f7ea94750875 534 Learn1 = 1;
Nasungil 0:f7ea94750875 535 error("\n Learn Fail NM500 #1\n");
Nasungil 0:f7ea94750875 536 }
Nasungil 0:f7ea94750875 537 else{
Nasungil 0:f7ea94750875 538 Learn2 = 1;
Nasungil 0:f7ea94750875 539 error("\n Learn Fail NM500 #2\n");
Nasungil 0:f7ea94750875 540 }
Nasungil 0:f7ea94750875 541 }
Nasungil 0:f7ea94750875 542 //ncount가 증가하였을 경우
Nasungil 0:f7ea94750875 543 else
Nasungil 0:f7ea94750875 544 old_ncnt = ncnt; //old ncount 갱신
Nasungil 0:f7ea94750875 545
Nasungil 0:f7ea94750875 546 printf(".");
Nasungil 0:f7ea94750875 547 }
Nasungil 0:f7ea94750875 548 printf("\n");
Nasungil 1:f23d9ead1017 549 // printf("NCOUNT : %d\n",ncnt);
Nasungil 0:f7ea94750875 550 //학습 완료 후 ncount가 MAXNEURONS보다 작을 경우
Nasungil 0:f7ea94750875 551 if(ncnt == MAXNEURONS/2)
Nasungil 0:f7ea94750875 552 return 1; //데이지체인 불량
Nasungil 0:f7ea94750875 553 else if( ncnt != MAXNEURONS)
Nasungil 0:f7ea94750875 554 error("NCOUNT Fail\n");
Nasungil 0:f7ea94750875 555 return 0; //정상 출력
Nasungil 0:f7ea94750875 556 }
Nasungil 0:f7ea94750875 557
Nasungil 0:f7ea94750875 558 int NeuronToSD()
Nasungil 0:f7ea94750875 559 {
Nasungil 0:f7ea94750875 560
Nasungil 0:f7ea94750875 561 char neurons[NEURONSIZE];
Nasungil 0:f7ea94750875 562 int aif=0;
Nasungil 0:f7ea94750875 563 fp = fopen("/sd/data.txt", "w");
Nasungil 0:f7ea94750875 564 if(fp == NULL)
Nasungil 0:f7ea94750875 565 error("Write SD Fail");
Nasungil 0:f7ea94750875 566 fflush(stdin);
Nasungil 0:f7ea94750875 567
Nasungil 0:f7ea94750875 568 //save NSR
Nasungil 0:f7ea94750875 569 int TempNSR = read(NM_NSR);
Nasungil 0:f7ea94750875 570
Nasungil 0:f7ea94750875 571 //read NCOUNT
Nasungil 0:f7ea94750875 572 int nm_cnt = read(NM_NCOUNT);
Nasungil 0:f7ea94750875 573 if(nm_cnt == 0xFFFF || nm_cnt == 0x7FFF) //change
Nasungil 0:f7ea94750875 574 nm_cnt = MAXNEURONS;
Nasungil 0:f7ea94750875 575 //printf("NCOUNT : %d\n", nm_cnt);
Nasungil 0:f7ea94750875 576
Nasungil 0:f7ea94750875 577
Nasungil 0:f7ea94750875 578 //write NSR-SR Mode
Nasungil 0:f7ea94750875 579 write(NM_NSR, 0x10);
Nasungil 0:f7ea94750875 580
Nasungil 0:f7ea94750875 581 //reset chain
Nasungil 0:f7ea94750875 582 write(NM_RSTCHAIN, 0);
Nasungil 0:f7ea94750875 583
Nasungil 0:f7ea94750875 584 //loop until max neruon
Nasungil 0:f7ea94750875 585 for(int cnt = 1; cnt<=nm_cnt; cnt++){
Nasungil 0:f7ea94750875 586
Nasungil 0:f7ea94750875 587 //read context
Nasungil 0:f7ea94750875 588 int context = read(NM_NCR);
Nasungil 0:f7ea94750875 589 //printf("context #%d\t,", context);
Nasungil 0:f7ea94750875 590 fprintf(fp,"%d\t", context);
Nasungil 0:f7ea94750875 591
Nasungil 0:f7ea94750875 592 //GCR register fail
Nasungil 0:f7ea94750875 593 if(context != 5){
Nasungil 0:f7ea94750875 594 if(cnt < 577){ //neuron1 fail
Nasungil 0:f7ea94750875 595 Gcr1=1;
Nasungil 0:f7ea94750875 596 printf("\nNID # %d, GCR # %d \n",cnt,context);
Nasungil 0:f7ea94750875 597 }
Nasungil 0:f7ea94750875 598 else{ //neruon2 fail
Nasungil 0:f7ea94750875 599 Gcr2=1;
Nasungil 0:f7ea94750875 600 printf("\nNID # %d, GCR # %d \n",cnt,context);
Nasungil 0:f7ea94750875 601 }
Nasungil 0:f7ea94750875 602 }
Nasungil 0:f7ea94750875 603 char temp_neuron[NEURONSIZE];
Nasungil 0:f7ea94750875 604 // for(int j =0;j<NEURONSIZE;j=j+2){
Nasungil 0:f7ea94750875 605 // temp_neuron[j] = cnt>>8; //upper bit save
Nasungil 0:f7ea94750875 606 // temp_neuron[j+1] = cnt; //low bit save
Nasungil 0:f7ea94750875 607 // }
Nasungil 0:f7ea94750875 608 if(cnt%2 == 1){
Nasungil 0:f7ea94750875 609 for(int j =0;j<DATA_CNT;j=j+2){
Nasungil 0:f7ea94750875 610 temp_neuron[j] = cnt>>8; //upper bit save
Nasungil 0:f7ea94750875 611 temp_neuron[j+1] = cnt; //low bit save
Nasungil 0:f7ea94750875 612 }
Nasungil 0:f7ea94750875 613 for(int j =DATA_CNT;j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 614 temp_neuron[j] = array1[j]; //upper bit save
Nasungil 0:f7ea94750875 615 }
Nasungil 0:f7ea94750875 616 }
Nasungil 0:f7ea94750875 617 else if(cnt%2 == 0){
Nasungil 0:f7ea94750875 618 for(int j =0;j<DATA_CNT;j=j+2){
Nasungil 0:f7ea94750875 619 temp_neuron[j] = cnt>>8; //upper bit save
Nasungil 0:f7ea94750875 620 temp_neuron[j+1] = cnt; //low bit save
Nasungil 0:f7ea94750875 621 }
Nasungil 0:f7ea94750875 622 for(int j =DATA_CNT;j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 623 temp_neuron[j] = array2[j]; //upper bit save
Nasungil 0:f7ea94750875 624 }
Nasungil 0:f7ea94750875 625 }
Nasungil 0:f7ea94750875 626 //printf("Neruon Data : ");
Nasungil 0:f7ea94750875 627 //read Neuron data
Nasungil 0:f7ea94750875 628 for (int j=0; j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 629 //read COMP
Nasungil 0:f7ea94750875 630 neurons[j]=read(NM_COMP);
Nasungil 0:f7ea94750875 631 fprintf(fp,"%d,", neurons[j]);
Nasungil 0:f7ea94750875 632 //printf("%d,", neurons[j]);
Nasungil 0:f7ea94750875 633 if(temp_neuron[j]!= neurons[j]){
Nasungil 0:f7ea94750875 634
Nasungil 0:f7ea94750875 635 if(j<MAXNEURONS/2){
Nasungil 0:f7ea94750875 636 printf("NID # %d Memory Fail\n", cnt);
Nasungil 0:f7ea94750875 637 Memory1 = 1;
Nasungil 0:f7ea94750875 638 }
Nasungil 0:f7ea94750875 639 else{
Nasungil 0:f7ea94750875 640 printf("NID # %d Memory Fail\n", cnt);
Nasungil 0:f7ea94750875 641 Memory2 = 1;
Nasungil 0:f7ea94750875 642 }
Nasungil 0:f7ea94750875 643 printf("# %d : temp %d, neruon %d\n",j, temp_neuron[j],neurons[j]);
Nasungil 0:f7ea94750875 644
Nasungil 0:f7ea94750875 645 }
Nasungil 0:f7ea94750875 646
Nasungil 0:f7ea94750875 647 }
Nasungil 0:f7ea94750875 648
Nasungil 0:f7ea94750875 649
Nasungil 0:f7ea94750875 650
Nasungil 0:f7ea94750875 651 //read AIF
Nasungil 0:f7ea94750875 652 aif=read(NM_AIF);
Nasungil 0:f7ea94750875 653 fprintf(fp,"\t%d\t", aif);
Nasungil 0:f7ea94750875 654 //printf("AIF : %d,\t", aif);
Nasungil 0:f7ea94750875 655
Nasungil 0:f7ea94750875 656 //aif register fail
Nasungil 0:f7ea94750875 657 if(aif != 5){
Nasungil 0:f7ea94750875 658 if(cnt <= 576){ //neuron1 fail
Nasungil 0:f7ea94750875 659 Aif1=1;
Nasungil 0:f7ea94750875 660 printf("\nNID # %d, AIF # %d \n",cnt,aif);
Nasungil 0:f7ea94750875 661 }
Nasungil 0:f7ea94750875 662 else{ //neruon2 fail
Nasungil 0:f7ea94750875 663 Aif2=1;
Nasungil 0:f7ea94750875 664 printf("\nNID # %d, AIF # %d \n",cnt,aif);
Nasungil 0:f7ea94750875 665 }
Nasungil 0:f7ea94750875 666 }
Nasungil 0:f7ea94750875 667
Nasungil 0:f7ea94750875 668 //raed minif
Nasungil 0:f7ea94750875 669 int minif=read(NM_MINIF);
Nasungil 0:f7ea94750875 670 //printf("MINIF : %d,\t", minif);
Nasungil 0:f7ea94750875 671 fprintf(fp,"%d\t", minif);
Nasungil 0:f7ea94750875 672
Nasungil 0:f7ea94750875 673 //minif register fail
Nasungil 0:f7ea94750875 674 if(minif != 3){
Nasungil 0:f7ea94750875 675 if(cnt <= 576){ //neuron1 fail
Nasungil 0:f7ea94750875 676 Minif1 = 1;
Nasungil 0:f7ea94750875 677 printf("\nNID # %d, MINIF # %d \n",cnt,minif);
Nasungil 0:f7ea94750875 678 }
Nasungil 0:f7ea94750875 679 else{ //neruon2 fail
Nasungil 0:f7ea94750875 680 Minif2 = 1;
Nasungil 0:f7ea94750875 681 printf("\nNID # %d, MINIF # %d \n",cnt,minif);
Nasungil 0:f7ea94750875 682 }
Nasungil 0:f7ea94750875 683 }
Nasungil 0:f7ea94750875 684
Nasungil 0:f7ea94750875 685 //read cat
Nasungil 0:f7ea94750875 686 int cat = read(NM_CAT) & 0x7FFF;
Nasungil 0:f7ea94750875 687 fprintf(fp,"%d\t", cat);
Nasungil 0:f7ea94750875 688 fprintf(fp,"\n");
Nasungil 0:f7ea94750875 689 //printf("****CAT : %d\n", cat);
Nasungil 0:f7ea94750875 690
Nasungil 0:f7ea94750875 691 //reset chain test
Nasungil 0:f7ea94750875 692 // if(cnt > 2 && cat == 1)
Nasungil 0:f7ea94750875 693 // CMN_RC = 1;
Nasungil 0:f7ea94750875 694
Nasungil 0:f7ea94750875 695 //cat test
Nasungil 0:f7ea94750875 696 if(cnt != cat){
Nasungil 0:f7ea94750875 697 printf("cnt : %d , cat : %d \n", cnt, cat);
Nasungil 0:f7ea94750875 698 if(cnt <= 576){
Nasungil 0:f7ea94750875 699 Cat1 = 1;
Nasungil 0:f7ea94750875 700 printf("\n NM500 #1 Cat Fail # %d\n", cnt);
Nasungil 0:f7ea94750875 701 }
Nasungil 0:f7ea94750875 702 else {
Nasungil 0:f7ea94750875 703 Cat2 = 1;
Nasungil 0:f7ea94750875 704 printf("\n NM500 #2 Cat Fail # %d\n", cnt);
Nasungil 0:f7ea94750875 705 }
Nasungil 0:f7ea94750875 706 }
Nasungil 0:f7ea94750875 707 printf(".");
Nasungil 0:f7ea94750875 708 }
Nasungil 0:f7ea94750875 709 printf("\n");
Nasungil 0:f7ea94750875 710
Nasungil 0:f7ea94750875 711
Nasungil 0:f7ea94750875 712 fclose(fp);
Nasungil 0:f7ea94750875 713 write(NM_NSR, TempNSR); // set the NN back to its calling status
Nasungil 0:f7ea94750875 714 return read(NM_NCOUNT);
Nasungil 0:f7ea94750875 715 }
Nasungil 0:f7ea94750875 716
Nasungil 0:f7ea94750875 717
Nasungil 0:f7ea94750875 718 int SDToNeurons()
Nasungil 0:f7ea94750875 719 {
Nasungil 0:f7ea94750875 720 int context,aif,minif,cat;
Nasungil 0:f7ea94750875 721 char neurons[NEURONSIZE];
Nasungil 0:f7ea94750875 722 fp = fopen("/sd/data.txt", "r");
Nasungil 0:f7ea94750875 723
Nasungil 0:f7ea94750875 724
Nasungil 0:f7ea94750875 725 if(fp == NULL)
Nasungil 0:f7ea94750875 726 error("Read SD Fail");
Nasungil 0:f7ea94750875 727
Nasungil 0:f7ea94750875 728 //save NSR
Nasungil 0:f7ea94750875 729 int TempNSR = read(NM_NSR);
Nasungil 0:f7ea94750875 730
Nasungil 0:f7ea94750875 731 //write NSR-SR Mode
Nasungil 0:f7ea94750875 732 write(NM_NSR, 0x10);
Nasungil 0:f7ea94750875 733
Nasungil 0:f7ea94750875 734 //reset chain
Nasungil 0:f7ea94750875 735 write(NM_RSTCHAIN, 0);
Nasungil 0:f7ea94750875 736
Nasungil 0:f7ea94750875 737 //SD data read -> Neurons
Nasungil 0:f7ea94750875 738 for(int i=1;i<=MAXNEURONS;i++){
Nasungil 0:f7ea94750875 739 //read context
Nasungil 0:f7ea94750875 740 fscanf(fp,"%d", &context);
Nasungil 0:f7ea94750875 741 // printf("context # %d ", context);
Nasungil 0:f7ea94750875 742 write(NM_GCR,context);
Nasungil 0:f7ea94750875 743
Nasungil 0:f7ea94750875 744
Nasungil 0:f7ea94750875 745 //read comp
Nasungil 0:f7ea94750875 746 for (int j=0; j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 747 //read COMP
Nasungil 0:f7ea94750875 748 fscanf(fp,"%d,", &neurons[j]);
Nasungil 0:f7ea94750875 749 // printf("%d\t,", neurons[j]);
Nasungil 0:f7ea94750875 750 write(NM_COMP,neurons[j]);
Nasungil 0:f7ea94750875 751 }
Nasungil 0:f7ea94750875 752 fscanf(fp,"\t%d\t", &aif);
Nasungil 0:f7ea94750875 753 // printf("AIF # %d \t", aif);
Nasungil 0:f7ea94750875 754 write(NM_AIF,aif);
Nasungil 0:f7ea94750875 755
Nasungil 0:f7ea94750875 756 fscanf(fp,"%d\t", &minif);
Nasungil 0:f7ea94750875 757 // printf("MINIF # %d", minif);
Nasungil 0:f7ea94750875 758 write(NM_MINIF,minif);
Nasungil 0:f7ea94750875 759
Nasungil 0:f7ea94750875 760 fscanf(fp,"%d\t", &cat);
Nasungil 0:f7ea94750875 761 // printf("CAT # %d \n", cat);
Nasungil 0:f7ea94750875 762 write(NM_CAT,cat);
Nasungil 0:f7ea94750875 763 printf(".");
Nasungil 0:f7ea94750875 764
Nasungil 0:f7ea94750875 765 }
Nasungil 0:f7ea94750875 766 printf("\n");
Nasungil 0:f7ea94750875 767 fclose(fp);
Nasungil 0:f7ea94750875 768 write(NM_NSR, TempNSR); // set the NN back to its calling status
Nasungil 0:f7ea94750875 769 return NCOUNT();
Nasungil 0:f7ea94750875 770 }
Nasungil 0:f7ea94750875 771
Nasungil 0:f7ea94750875 772 void NSR_Test(void)
Nasungil 0:f7ea94750875 773 {
Nasungil 0:f7ea94750875 774 //KNN Mode setting
Nasungil 0:f7ea94750875 775 setKNN();
Nasungil 0:f7ea94750875 776 //read KNN Register
Nasungil 0:f7ea94750875 777 int nsr = read(NM_NSR) & 0x20;
Nasungil 0:f7ea94750875 778 if(nsr != 32)
Nasungil 0:f7ea94750875 779 CMN_Nsr = 1; //fail
Nasungil 0:f7ea94750875 780
Nasungil 0:f7ea94750875 781 //RBF Mode setting
Nasungil 0:f7ea94750875 782 setRBF();
Nasungil 0:f7ea94750875 783 nsr = read(NM_NSR) & 0x20;
Nasungil 0:f7ea94750875 784 if(nsr != 0)
Nasungil 0:f7ea94750875 785 CMN_Nsr = 1; //fail
Nasungil 0:f7ea94750875 786
Nasungil 0:f7ea94750875 787 int temp_nsr = read(NM_NSR);
Nasungil 0:f7ea94750875 788
Nasungil 0:f7ea94750875 789 //SR Mode test
Nasungil 0:f7ea94750875 790 write(NM_NSR, 0x10);
Nasungil 0:f7ea94750875 791 nsr = read(NM_NSR) & 0x10;
Nasungil 0:f7ea94750875 792 if(nsr != 16)
Nasungil 0:f7ea94750875 793 CMN_Nsr = 1;
Nasungil 0:f7ea94750875 794
Nasungil 0:f7ea94750875 795 //Nomal Mode Test
Nasungil 0:f7ea94750875 796 write(NM_NSR, temp_nsr);
Nasungil 0:f7ea94750875 797 nsr = read(NM_NSR) & 0x10;
Nasungil 0:f7ea94750875 798 if(nsr != 0)
Nasungil 0:f7ea94750875 799 CMN_Nsr = 1;
Nasungil 0:f7ea94750875 800 }
Nasungil 0:f7ea94750875 801
Nasungil 0:f7ea94750875 802
Nasungil 0:f7ea94750875 803 void data_classify(void)
Nasungil 0:f7ea94750875 804 {
Nasungil 0:f7ea94750875 805 int distance, cat, nid;
Nasungil 0:f7ea94750875 806 //number of neuron 1156
Nasungil 1:f23d9ead1017 807 for(int i=1;i<=MAXNEURONS;i++){
Nasungil 0:f7ea94750875 808 if(i%2 == 1){
Nasungil 0:f7ea94750875 809 for(int j =0;j<DATA_CNT;j=j+2){
Nasungil 0:f7ea94750875 810 vector[j] = i>>8; //upper bit save
Nasungil 0:f7ea94750875 811 vector[j+1] = i; //low bit save
Nasungil 0:f7ea94750875 812 }
Nasungil 0:f7ea94750875 813 for(int j =DATA_CNT;j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 814 vector[j] = array1[j]; //upper bit save
Nasungil 0:f7ea94750875 815 }
Nasungil 0:f7ea94750875 816 }
Nasungil 0:f7ea94750875 817 else if(i%2==0){
Nasungil 0:f7ea94750875 818 for(int j =0;j<DATA_CNT;j=j+2){
Nasungil 0:f7ea94750875 819 vector[j] = i>>8; //upper bit save
Nasungil 0:f7ea94750875 820 vector[j+1] = i; //low bit save
Nasungil 0:f7ea94750875 821 }
Nasungil 0:f7ea94750875 822 for(int j =DATA_CNT;j<NEURONSIZE; j++){
Nasungil 0:f7ea94750875 823 vector[j] = array2[j]; //upper bit save
Nasungil 0:f7ea94750875 824 }
Nasungil 0:f7ea94750875 825 }
Nasungil 0:f7ea94750875 826
Nasungil 0:f7ea94750875 827 //input : data, data length output : distance, category, Neuron ID return 인식된 데이터 갯수
Nasungil 0:f7ea94750875 828 int nsr = classify(vector, NEURONSIZE, &distance, &cat, &nid);
Nasungil 1:f23d9ead1017 829
Nasungil 0:f7ea94750875 830 id_fail = nsr & 0x70;
Nasungil 0:f7ea94750875 831 if(id_fail == 0)
Nasungil 0:f7ea94750875 832 nsr_fail = 1;
Nasungil 0:f7ea94750875 833
Nasungil 0:f7ea94750875 834 printf(".");
Nasungil 0:f7ea94750875 835 // printf(" neuron# %d \t", nid);
Nasungil 0:f7ea94750875 836 // printf(" distance = %d,\t ", distance);
Nasungil 0:f7ea94750875 837 // printf(" cat = %d\n", cat);
Nasungil 0:f7ea94750875 838
Nasungil 0:f7ea94750875 839 //nid test
Nasungil 0:f7ea94750875 840 //cat register pass AND (nid,cat diff)
Nasungil 0:f7ea94750875 841 if((nid!=cat) && (Cat1==0 && Cat2==0)){
Nasungil 0:f7ea94750875 842 if(nid < 576){
Nasungil 0:f7ea94750875 843 Nid1 = 1;
Nasungil 0:f7ea94750875 844 printf("\nNID Register Fail # %d\n",nid);
Nasungil 0:f7ea94750875 845 }
Nasungil 0:f7ea94750875 846 else{
Nasungil 0:f7ea94750875 847 Nid2 = 1;
Nasungil 0:f7ea94750875 848 printf("\nNID Register Fail # %d\n",nid);
Nasungil 0:f7ea94750875 849 }
Nasungil 0:f7ea94750875 850 }
Nasungil 0:f7ea94750875 851 if(distance != 0){
Nasungil 0:f7ea94750875 852 if(nid < 576){
Nasungil 0:f7ea94750875 853 Dist1 = 1;
Nasungil 0:f7ea94750875 854 printf("\nDistance Register Fail # %d, Distance # %d\n",nid,distance);
Nasungil 0:f7ea94750875 855 }
Nasungil 0:f7ea94750875 856 else{
Nasungil 0:f7ea94750875 857 Dist2 = 1;
Nasungil 0:f7ea94750875 858 printf("\nDistance Register Fail # %d, Distance # %d\n",nid,distance);
Nasungil 0:f7ea94750875 859 }
Nasungil 0:f7ea94750875 860 }
Nasungil 0:f7ea94750875 861
Nasungil 0:f7ea94750875 862 }
Nasungil 0:f7ea94750875 863 printf("\n");
Nasungil 0:f7ea94750875 864
Nasungil 0:f7ea94750875 865 }
Nasungil 0:f7ea94750875 866
Nasungil 0:f7ea94750875 867
Nasungil 0:f7ea94750875 868
Nasungil 0:f7ea94750875 869