Initial commit of project!
This commit is contained in:
commit
62e13b6cb0
4 changed files with 138 additions and 0 deletions
74
main.c
Normal file
74
main.c
Normal file
|
@ -0,0 +1,74 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <stddef.h>
|
||||
|
||||
// x^16 + x^15 + x^13 + x^1 + 1 -- D4 LFSR
|
||||
// 0, 7, 12, 14 works for 16-bits
|
||||
// 1, 12, 14, 15 works for 16-bits
|
||||
// 16,14,13,11
|
||||
// 0, 12, 14, 15 works for 15-bits
|
||||
// 31, 9, 7, 6, 3, 2
|
||||
// 29, 28, 25, 24, 22, 0
|
||||
// 0x8000019F
|
||||
|
||||
void createGnuplot(int tap1, int tap2, int tap3, int tap4) {
|
||||
char buf[1] = " ";
|
||||
FILE *template = fopen("plottemplate", "r");
|
||||
FILE *plotout = fopen("plot", "w");
|
||||
if(template == NULL || plotout == NULL) {
|
||||
return;
|
||||
}
|
||||
while(1) {
|
||||
*buf = fgetc(template);
|
||||
if (*buf == EOF) {
|
||||
fflush(plotout);
|
||||
break;
|
||||
}
|
||||
if(*buf == '$') {
|
||||
fprintf(plotout, "%d, %d, %d, %d", tap1, tap2, tap3, tap4);
|
||||
} else {
|
||||
fputc(*buf, plotout);
|
||||
}
|
||||
}
|
||||
fclose(template);
|
||||
fclose(plotout);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
uint16_t startState = 0x0005;
|
||||
uint16_t lfsr = startState;
|
||||
uint16_t bit;
|
||||
uint32_t count = 0;
|
||||
char *c;
|
||||
int tap1, tap2, tap3, tap4;
|
||||
|
||||
|
||||
if(argc == 5) {
|
||||
tap1 = strtol(argv[1], NULL, 10);
|
||||
tap2 = strtol(argv[2], NULL, 10);
|
||||
tap3 = strtol(argv[3], NULL, 10);
|
||||
tap4 = strtol(argv[4], NULL, 10);
|
||||
} else {
|
||||
tap1 = 15;
|
||||
tap2 = 4;
|
||||
tap3 = 2;
|
||||
tap4 = 1;
|
||||
}
|
||||
//printf("Initial state: %0x\n", lfsr);
|
||||
|
||||
do {
|
||||
bit = ((lfsr >> tap1) ^ (lfsr >> tap2) ^ (lfsr >> tap3) ^ (lfsr >> tap4));
|
||||
lfsr = (lfsr >> 1) | (bit << 15);
|
||||
count++;
|
||||
//count % 100000000 == 0 ? printf("0x%08x\t%032b\n", lfsr, lfsr) : 0; // comment this line for speed check
|
||||
printf("%d\n", lfsr);
|
||||
// *c = scanf("%s");
|
||||
} while(lfsr != startState && count < 70000); //while(lfsr != startState);
|
||||
//printf("Final count: %u\n", count);
|
||||
createGnuplot(tap1, tap2, tap3, tap4);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue