xform: now works with "arbitrary" memory sizes
Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
c18eea9c62
commit
7d2f99e899
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1536
memtest/mem.init
1536
memtest/mem.init
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -11,7 +11,7 @@ module memtest (
|
|||||||
input clki
|
input clki
|
||||||
);
|
);
|
||||||
|
|
||||||
reg [31:0] mem[0:2047];
|
reg [31:0] mem[0:511];
|
||||||
reg [10:0] memadr;
|
reg [10:0] memadr;
|
||||||
assign random_rom_dat_r = mem[memadr];
|
assign random_rom_dat_r = mem[memadr];
|
||||||
|
|
||||||
|
1466
memtest/top.rpt
1466
memtest/top.rpt
File diff suppressed because it is too large
Load Diff
1920
output.txt
1920
output.txt
File diff suppressed because it is too large
Load Diff
68
xform.c
68
xform.c
@ -1,25 +1,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
bit 0 -> bit 7
|
For mem = 65536 bits:
|
||||||
bit 1 -> bit 15
|
|
||||||
bit 8192 -> bit 6
|
|
||||||
bit 8193 -> bit 14
|
|
||||||
bit 16384 -> bit 5
|
|
||||||
bit 16385 -> Bit 13
|
|
||||||
bit 24576 -> bit 4
|
|
||||||
bit 24577 -> bit 12
|
|
||||||
bit 32768 -> bit 3
|
|
||||||
bit 32769 -> bit 11
|
|
||||||
bit 40960 -> bit 2
|
|
||||||
bit 40961 -> bit 10
|
|
||||||
bit 49152 -> bit 1
|
|
||||||
bit 49153 -> Bit 9
|
|
||||||
bit 57344 -> bit 0
|
|
||||||
bit 57345 -> bit 8
|
|
||||||
|
|
||||||
bit 0 <- 0
|
bit 0 <- 0
|
||||||
bit 1 <- 8192
|
bit 1 <- 8192
|
||||||
bit 2 <- 16384
|
bit 2 <- 16384
|
||||||
@ -36,6 +21,24 @@ bit 12 <- 40961
|
|||||||
bit 13 <- 1281
|
bit 13 <- 1281
|
||||||
bit 14 <- 49153
|
bit 14 <- 49153
|
||||||
bit 15 <- 57345
|
bit 15 <- 57345
|
||||||
|
|
||||||
|
For mem = 32768 bits:
|
||||||
|
bit 0 <- 0
|
||||||
|
bit 1 <- 8192
|
||||||
|
bit 2 <- 16384
|
||||||
|
bit 3 <- 24576
|
||||||
|
bit 4 <- 1
|
||||||
|
bit 5 <- 8193
|
||||||
|
bit 6 <- 16385
|
||||||
|
bit 7 <- 24577
|
||||||
|
bit 8 <- 2
|
||||||
|
bit 9 <- 8194
|
||||||
|
bit 10 <- 16386
|
||||||
|
bit 11 <- 24578
|
||||||
|
bit 12 <- 3
|
||||||
|
bit 13 <- 8195
|
||||||
|
bit 14 <- 16387
|
||||||
|
bit 15 <- 24579
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uint32_t xorshift32(uint32_t x)
|
uint32_t xorshift32(uint32_t x)
|
||||||
@ -95,16 +98,15 @@ static uint16_t reverse_u16(uint16_t nonreversed)
|
|||||||
return reversed;
|
return reversed;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t get_bit_offset(int bit) {
|
static uint32_t get_bit_offset(int x, int total_bits) {
|
||||||
return (8192 * (bit & 7)) + (bit >> 3);
|
// return (8192 * (x & 7)) + (x >> 3);
|
||||||
|
int bitshift = ffs(total_bits)-1;
|
||||||
|
return ((x * 8192) % total_bits) + ((x*8192) >> bitshift);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 32; i++) {
|
|
||||||
printf("bit offset %d: %d\n", i, get_bit_offset(i));
|
|
||||||
}
|
|
||||||
// uint32_t test_1[] = {1};
|
// uint32_t test_1[] = {1};
|
||||||
// uint32_t test_2[] = {0, 1};
|
// uint32_t test_2[] = {0, 1};
|
||||||
// uint32_t test_3[] = {2, 0};
|
// uint32_t test_3[] = {2, 0};
|
||||||
@ -127,23 +129,35 @@ int main(int argc, char **argv)
|
|||||||
// printf("test_4: bit %d set\n", i);
|
// printf("test_4: bit %d set\n", i);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
uint32_t input[2048] = {};
|
uint32_t input[512] = {};
|
||||||
uint32_t output[2048] = {};
|
uint32_t output[512] = {};
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++) {
|
||||||
|
printf("bit %d: %d\n", i, get_bit_offset(i, sizeof(input)*8));
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t init = 1;
|
uint32_t init = 1;
|
||||||
for (i = 0; i < sizeof(input) / 4; i++)
|
for (i = 0; i < sizeof(input) / 4; i++)
|
||||||
{
|
{
|
||||||
init = get_rand(init);
|
init = get_rand(init);
|
||||||
input[i] = init;
|
input[i] = init;
|
||||||
|
// input[i] = 0;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
input[0] = 0xf0000000;
|
||||||
|
input[256] = 0xf0000000;
|
||||||
|
input[512] = 0xc0000000;
|
||||||
|
input[768] = 0xc0000000;
|
||||||
|
input[1024] = 0xc0000000;*/
|
||||||
// print_hex(input, sizeof(input), 0);
|
// print_hex(input, sizeof(input), 0);
|
||||||
// return;
|
// return;
|
||||||
|
// memset(input, 0xff, sizeof(input));
|
||||||
|
|
||||||
for (i = 0; i < sizeof(input) * 8; i++)
|
for (i = 0; i < sizeof(input) * 8; i++)
|
||||||
{
|
{
|
||||||
int bit;
|
int bit;
|
||||||
assert(get_bit_offset(i) < sizeof(output) * 8);
|
assert(get_bit_offset(i, sizeof(output)*8) < sizeof(output) * 8);
|
||||||
bit = get_bit(input, get_bit_offset(i));
|
bit = get_bit(input, get_bit_offset(i, sizeof(input)*8));
|
||||||
// bit = get_bit(input, i);
|
// bit = get_bit(input, i);
|
||||||
// if (bit)
|
// if (bit)
|
||||||
// printf("bit %d is set\n", i);
|
// printf("bit %d is set\n", i);
|
||||||
@ -189,7 +203,7 @@ int main(int argc, char **argv)
|
|||||||
// o16[i] = reverse_u16(o16[i]);
|
// o16[i] = reverse_u16(o16[i]);
|
||||||
|
|
||||||
// print_hex(output, sizeof(output), 0);
|
// print_hex(output, sizeof(output), 0);
|
||||||
FILE *infile = fopen("infile.txt", "w");
|
FILE *infile = fopen("memtest/mem.init", "w");
|
||||||
FILE *outfile = fopen("outfile.txt", "w");
|
FILE *outfile = fopen("outfile.txt", "w");
|
||||||
for (i = 0; i < sizeof(input)/4; i++) {
|
for (i = 0; i < sizeof(input)/4; i++) {
|
||||||
fprintf(infile, "%08x\n", input[i]);
|
fprintf(infile, "%08x\n", input[i]);
|
||||||
|
Loading…
Reference in New Issue
Block a user