test

Committer:
Nasungil
Date:
Mon Dec 17 09:31:45 2018 +0000
Revision:
4:b906344e8ddb
Parent:
3:1a838bfb4101
Socket Board PGM 181217

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