Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • soclabs/nanosoc_tech
1 result
Show changes
Commits on Source (1)
......@@ -28,3 +28,4 @@ $(SOCLABS_NANOSOC_TECH_DIR)/verif/trace/verilog/nanosoc_track_tb_iostream.v
$(SOCLABS_NANOSOC_TECH_DIR)/verif/trace/verilog/nanosoc_ft1248x1_track.v
$(SOCLABS_NANOSOC_TECH_DIR)/verif/trace/verilog/nanosoc_dma_log_to_file.v
$(SOCLABS_NANOSOC_TECH_DIR)/verif/trace/verilog/nanosoc_accelerator_ss_logger.v
$(SOCLABS_NANOSOC_TECH_DIR)/verif/trace/verilog/nanosoc_axi_stream_io_8_txd_from_datafile.v
......@@ -73,6 +73,9 @@ endif
mkdir -p $(SIM_DIR) ; \
cp $(TESTNAME).hex $(SIM_DIR)/image.hex ; \
cp adp.cmd $(SIM_DIR)/adp.cmd ; \
if [ -e data_in.csv ] ; then \
cp data_in.csv $(SIM_DIR)/data_in.csv ; \
fi ;\
else \
while [ ! -e $(TESTNAME).hex ] ; do \
echo Wait for $(TESTNAME).hex file ...; \
......@@ -94,6 +97,9 @@ endif
if [ -e expram_h.hex ] ; then \
cp expram_h.hex $(SIM_DIR)/expram_h.hex ; \
fi ;\
if [ -e data_in.csv ] ; then \
cp data_in.csv $(SIM_DIR)/data_in.csv ; \
fi ;\
cd $(SIM_DIR) ;\
elif [ -d "$(PROJ_SW_DIR)/$(TESTNAME)" ] ; then \
cd $(PROJ_SW_DIR)/$(TESTNAME) ;\
......@@ -105,6 +111,9 @@ endif
mkdir -p $(SIM_DIR) ; \
cp $(TESTNAME).hex $(SIM_DIR)/image.hex ; \
cp adp.cmd $(SIM_DIR)/adp.cmd ; \
if [ -e data_in.csv ] ; then \
cp data_in.csv $(SIM_DIR)/data_in.csv ; \
fi ;\
else \
while [ ! -e $(TESTNAME).hex ] ; do \
echo Wait for $(TESTNAME).hex file ...; \
......@@ -202,4 +211,4 @@ clean_all_code:
# Remove only bootloader and default selected test
clean_code:
@(cd $(TESTCODES_DIR)/$(BOOTLOADER) ; $(MAKE) clean; cd $(SIM_DIR); )
@(cd $(TESTCODES_DIR)/$(TESTNAME) ; $(MAKE) clean; cd $(SIM_DIR); )
\ No newline at end of file
@(cd $(TESTCODES_DIR)/$(TESTNAME) ; $(MAKE) clean; cd $(SIM_DIR); )
Subproject commit 049294a8aa4385e4b2e2a03210b315a574e2a787
Subproject commit 9ef8d848da72e57f806b24eed5c2f6bbdce66668
0000100101000110,0000110001000110,0000110001000110,0000100101000110,0000011001000110,0000011001000110,0000010101000110,0000100001000110,0000110101000110,0000101101000110,0000100001000110,0000010001000110,0000001101000110,0000100001000110,0000100101000110,0000101001000110,0000100101000111,0000010101000111,0000010101000111,0000010101000111,0000011101000111,0000100101000111,0000101001000111,0000100001000111,0000010001000111,0000001001000111,0000010001000111,0000100001000111,0000101101000111,0000100101000111,0000011001000111,0000010001000111,0000010001000111,0000011001000111,0000100101000111,0000101001000111,0000100101000111,0000010101000111,0000001001000111,0000010101000111
0000010100101010,1111110100101010,0000010100101010,0000000100101001,1111111000101010,0000011000101001,0000000100101001,0000010100101000,0000010100101000,0000000100101000,0000101100101000,0000101000101000,0000011100100111,0000101000101000,0000101100100111,0000110100100111,0000101100100111,0000100100100111,0000111000100111,0000101000100111,0000001100100111,0000101000100111,0000011100100110,0000001000100110,0000011100100110,0000011100100110,0000100100100110,0000101000100110,0000001100100101,0000101000100101,0000010100100101,0000000000100101,0000011000100101,0000010000100101,0000001000100100,0000010000100100,1111111100100101,0000011000100100,0000001000100100,1111110000100100
0000000000000000,0000000000000001,0000000000000011,0000000000000111,0000000000001111,0000000000011111,0000000000111111,0000000001111111,0000000011111111,0000000111111111,0000001111111111,0000011111111111,0000111111111111,0001111111111111,0011111111111111,0111111111111111,1111111111111111
1111111111111111,1111111111111110,1111111111111100,1111111111111000,1111111111110000,1111111111100000,1111111111000000,1111111110000000,1111111100000000,1111111000000000,1111110000000000,1111100000000000,1111000000000000,1110000000000000,1100000000000000,1000000000000000,0000000000000000
0000000000000000,0000000000000001,0000000000000010,0000000000000100,0000000000001000,0000000000010000,0000000000100000,0000000001000000,0000000010000000,0000000100000000,0000001000000000,0000010000000000,0000100000000000,0001000000000000,0010000000000000,0100000000000000,1000000000000000
//-----------------------------------------------------------------------------
// customised Cortex-M0 'nanosoc' controller
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Flynn (d.w.flynn@soton.ac.uk)
//
// Copyright (c) 2025 SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
#include "CMSDK_CM0.h"
#define DATA_UART ((CMSDK_UART_TypeDef *) CMSDK_UART1_BASE )
#define UART_STATE_TXFULL CMSDK_UART_STATE_TXBF_Msk
#define UART_STATE_RXFULL CMSDK_UART_STATE_RXBF_Msk
#define UART_CTRL_TXEN CMSDK_UART_CTRL_TXEN_Msk
#define UART_CTRL_RXEN CMSDK_UART_CTRL_RXEN_Msk
#define UART_CTRL_TXRXEN (CMSDK_UART_CTRL_TXEN_Msk + CMSDK_UART_CTRL_RXEN_Msk)
#define UART_CTRL_TXIRQEN (CMSDK_UART_CTRL_TXIRQEN_Msk + UART_CTRL_TXRXEN)
#define UART_CTRL_RXIRQEN (CMSDK_UART_CTRL_RXIRQEN_Msk + UART_CTRL_TXRXEN)
unsigned int DataIO_enable(void) {
DATA_UART->CTRL = 0x00; // re-initialise/flush
DATA_UART->CTRL = UART_CTRL_TXRXEN; // enble TX and RX
return(0);
}
unsigned int DataIO_init(void) {
DATA_UART->CTRL = 0x00; // re-initialise/flush
DATA_UART->CTRL = UART_CTRL_TXRXEN; // enble TX and RX
return(0);
}
// Output ready check
unsigned int DataIO_putc_ready(void) {
return((DATA_UART->STATE & UART_STATE_TXFULL) == 0); // ready if TXBUF empty
}
// Output Busy check
unsigned int DataIO_putc_busy(void) {
return((DATA_UART->STATE & UART_STATE_TXFULL) != 0); // busy if TXBUF full
}
// Output a character
unsigned char DataIO_putc(unsigned char my_ch) {
while (DataIO_putc_busy()) ; // busy wait
DATA_UART->DATA = my_ch; // output the character
return (my_ch);
}
// Output a (zero-terminated) string
void DataIO_puts(unsigned char * mytext) {
unsigned char string_ch;
do {
string_ch = *mytext;
if (string_ch != (char) 0x0) {
DataIO_putc(string_ch); // Normal data
}
*mytext++;
} while (string_ch != 0);
return;
}
// Input ready check
unsigned int DataIO_getc_ready(void) {
return((DATA_UART->STATE & UART_STATE_RXFULL) != 0); // ready if RXBUF set
}
// Input Busy check
unsigned int DataIO_getc_busy(void) {
return((DATA_UART->STATE & UART_STATE_RXFULL) == 0); // busy if RXBUF not set
}
// Input a character
unsigned char DataIO_getc(void) {
while (DataIO_getc_busy()) ; // busy wait
return (DATA_UART->DATA);
}
//-----------------------------------------------------------------------------
// customised Cortex-M0 'nanosoc' controller
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Flynn (d.w.flynn@soton.ac.uk)
//
// Copyright (c) 2025 SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
// IO enable
extern unsigned int DataIO_enable(void);
extern unsigned int DataIO_init(void);
// Output ready check
extern unsigned char DataIO_putc_ready(void);
// Output busy check
extern unsigned int DataIO_putc_busy(void);
// Output a character
extern unsigned char DataIO_putc(unsigned char my_ch);
// DataIO string output
extern void DataIO_puts(unsigned char * mytext);
// Input ready check
extern unsigned int DataIO_getc_ready(void);
// Input busy check
extern unsigned int DataIO_getc_busy(void);
// Input a character
extern unsigned char DataIO_getc(void);
/* example usage
#include "CMSDK_CM0.h"
#include <string.h>
#include "uart_stdout.h"
#include <stdio.h>
#include "DataIO_functions.h"
int main(void) {
unsigned char ch;
char tx_buf[32];
UartStdOutInit(); // console channel init
printf("Data Channel CSV Reader/Writer (ASC binary -> Hex) tests\n");
DataIO_init(); // datachannel init
do { // rx process CSV entry
if (DataIO_getc_ready()) {
ch = DataIO_Getc();
// ...
}
DataIO_puts((unsigned char*) tx_buf);
do { // tx process
if (DataIO_putc_ready()) {
DataIO_putc(tx_buf[<i>]);
}
*/
#include "CMSDK_CM0.h"
#include <string.h>
#include "uart_stdout.h"
#include <stdio.h>
#include "dataio_functions.h"
int main(void) {
unsigned char ch;
char tx_buf[20];
unsigned int tx_count;
unsigned int rx_count;
unsigned int value;
unsigned int end_of_record ;
unsigned int end_of_data ;
//// FILE *datain, *dataout;
UartStdOutInit();
printf("Data Channel CSV Reader/Writer (ASC binary -> Hex) tests\n");
DataIO_init();
end_of_data = 0;
do { // record at a time
tx_count = 0;
rx_count = 0;
value = 0;
end_of_record = 0;
do { // rx process CSV entry
if (DataIO_getc_ready()) {
ch = DataIO_getc();
if (ch == '0') { value = (value << 1); rx_count++; }
if (ch == '1') { value = (value << 1) + 1; rx_count++; }
if (ch == ',') end_of_record = 1;
if ((ch == '\n') || (ch == '\r')) end_of_record = 1;
if ((ch == '\n') || (ch == '\r')) end_of_data = (rx_count == 0) ? 1 : 0;
}
} while ((rx_count <= 16) && (end_of_record == 0));
if (rx_count > 0) {
if (ch == ',')
printf(","); // ',' per CSV record
else
printf(".\n"); // newline delimiter
if (ch == ',')
sprintf(tx_buf,"%04x,", value);
else
sprintf(tx_buf,"%04x\n", value);
tx_buf[5]=0; // string zero terminate
DataIO_puts((unsigned char*) tx_buf);
// do { /*tx process */
// if (DataIO_putc_ready()) {
// DataIO_putc(tx_buf[tx_count++]);
// }
// } while (tx_count < 5);
}
} while (end_of_data == 0); // outer record loop
printf("** DATA FILE PROCESSING ** TEST PASSED **\n");
//// dataout = fopen("dataout","w");
//// printf("file handle =,%08x\n",dataout);
//// fputc(127, dataout);
//// fclose(dataout);
UartEndSimulation();
return 0;
}
68
04
00
30
B9
02
00
00
C1
02
00
00
C3
02
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
C5
02
00
00
00
00
00
00
00
00
00
00
C7
02
00
00
C9
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
CB
02
00
00
00
F0
02
F8
00
F0
46
F8
0C
A0
30
C8
08
38
24
18
2D
18
A2
46
67
1E
AB
46
54
46
5D
46
AC
42
01
D1
00
F0
38
F8
7E
46
0F
3E
0F
CC
B6
46
01
26
33
42
00
D0
FB
1A
A2
46
AB
46
33
43
18
47
48
07
00
00
68
07
00
00
10
3A
02
D3
78
C8
78
C1
FA
D8
52
07
01
D3
30
C8
30
C1
01
D5
04
68
0C
60
70
47
00
00
00
23
00
24
00
25
00
26
10
3A
01
D3
78
C1
FB
D8
52
07
00
D3
30
C1
00
D5
0B
60
70
47
10
B5
78
29
02
D1
00
F0
D9
F9
10
BD
00
20
10
BD
1F
B5
1F
BD
10
B5
10
BD
00
F0
26
FB
11
46
FF
F7
F7
FF
00
F0
09
F8
00
F0
3E
FB
03
B4
FF
F7
F2
FF
03
BC
00
F0
D2
F8
00
00
F0
B5
87
B0
00
F0
CE
F8
28
A0
00
F0
71
F9
00
F0
2E
F9
00
20
05
90
00
24
26
46
27
46
00
F0
4F
F9
00
28
1B
D0
00
F0
56
F9
05
46
30
28
08
D0
31
2D
09
D0
2C
2D
0B
D0
0A
2D
0B
D0
0D
2D
09
D0
0D
E0
76
00
64
1C
0A
E0
76
00
64
1C
76
1C
06
E0
01
27
04
E0
01
27
00
2C
1A
D0
00
20
05
90
10
2C
03
D8
00
2F
DB
D0
00
2C
0F
D0
2C
2D
18
D0
1E
A0
00
F0
3F
F9
32
46
1D
A1
68
46
00
F0
48
F9
00
20
69
46
48
71
68
46
00
F0
0F
F9
05
98
00
28
C3
D0
19
A0
00
F0
2E
F9
00
F0
D2
F8
00
20
07
B0
F0
BD
20
A0
00
F0
26
F9
32
46
1F
A1
E5
E7
00
00
44
61
74
61
20
43
68
61
6E
6E
65
6C
20
43
53
56
20
52
65
61
64
65
72
2F
57
72
69
74
65
72
20
28
41
53
43
20
62
69
6E
61
72
79
20
2D
3E
20
48
65
78
29
20
74
65
73
74
73
0A
00
00
00
2E
0A
00
00
25
30
34
78
0A
00
00
00
2A
2A
20
44
41
54
41
20
46
49
4C
45
20
50
52
4F
43
45
53
53
49
4E
47
20
2A
2A
20
54
45
53
54
20
50
41
53
53
45
44
20
2A
2A
0A
00
00
2C
00
00
00
25
30
34
78
2C
00
00
00
04
49
03
48
08
60
70
47
02
49
01
48
08
60
70
47
00
1C
4E
0E
00
00
00
30
07
48
80
47
07
48
00
47
FE
E7
FE
E7
FE
E7
FE
E7
FE
E7
FE
E7
04
48
05
49
05
4A
06
4B
70
47
00
00
A9
02
00
00
C1
00
00
00
68
00
00
30
68
04
00
30
68
02
00
30
68
02
00
30
10
B5
C0
B2
00
F0
36
F8
10
BD
10
B5
00
F0
41
F8
00
F0
30
F8
10
BD
00
20
C0
43
70
47
10
B5
C0
B2
00
F0
28
F8
10
BD
FE
E7
27
48
00
21
81
60
27
49
01
61
01
21
81
60
26
48
03
21
01
61
81
60
25
49
20
20
88
61
70
47
25
48
23
49
01
60
24
49
81
61
01
21
C1
60
C3
21
81
60
01
69
C9
07
FC
D0
1D
49
20
20
88
61
1A
48
00
21
81
60
30
21
01
61
03
21
81
60
70
47
16
49
8A
68
D2
07
04
D0
4A
68
D2
07
FC
D1
08
60
70
47
10
4A
53
68
DB
07
FC
D1
10
60
F7
E7
0D
48
0E
49
42
68
4B
68
92
07
D2
17
9B
07
DB
17
52
1C
5B
1C
1A
42
F5
D1
42
68
92
07
01
D5
00
68
03
E0
48
68
80
07
01
D5
08
68
C0
B2
70
47
04
20
FF
F7
D7
FF
FE
E7
00
60
00
40
6A
18
00
00
00
E0
00
40
00
10
01
40
8E
0C
01
00
00
20
00
40
24
F4
00
00
21
48
00
21
81
60
03
21
81
60
00
20
70
47
1E
48
00
21
81
60
03
21
81
60
00
20
70
47
1A
48
40
68
C0
07
C0
17
40
1C
70
47
17
48
40
68
C0
07
C0
0F
70
47
00
B5
01
46
FF
F7
F7
FF
00
28
FB
D1
12
48
01
60
08
46
00
BD
00
B5
02
46
13
78
00
2B
02
D0
18
46
FF
F7
EE
FF
52
1C
00
2B
F6
D1
00
BD
0A
48
40
68
80
07
C0
0F
70
47
07
48
40
68
80
07
C0
17
40
1C
70
47
00
B5
FF
F7
F7
FF
00
28
FB
D1
02
48
00
68
C0
B2
00
BD
00
00
00
50
00
40
70
47
00
00
0F
B4
05
49
10
B5
03
AA
02
98
00
F0
85
F9
10
BC
08
BC
04
B0
18
47
00
00
04
00
00
30
0F
B4
1C
B5
07
4B
06
AA
7B
44
69
46
00
90
05
98
00
F0
5B
F9
00
20
69
46
00
F0
6A
F9
1C
BC
08
BC
04
B0
18
47
E5
02
00
00
70
B5
04
46
85
69
00
68
C1
06
01
D5
30
26
00
E0
20
26
C0
07
07
D0
70
BD
62
68
30
46
A1
68
90
47
20
6A
40
1C
20
62
6D
1E
F6
D5
70
BD
70
B5
04
46
85
69
00
78
C0
07
07
D1
70
BD
62
68
A1
68
20
20
90
47
20
6A
40
1C
20
62
6D
1E
F6
D5
70
BD
00
00
70
B5
04
46
0D
46
21
46
10
68
C0
46
C0
46
21
88
09
05
02
D5
0F
4A
7A
44
02
E0
0E
4A
7A
44
0E
32
23
46
00
21
24
33
05
E0
06
07
00
09
36
0F
96
5D
5E
54
49
1C
00
28
F7
D1
20
78
00
23
00
07
05
D5
70
2D
03
D0
00
29
01
D0
02
23
11
32
20
46
00
F0
A2
F8
70
BD
F8
02
00
00
F3
B5
04
46
00
20
81
B0
20
62
20
46
E1
68
88
47
00
28
7D
D0
25
28
02
D0
62
68
A1
68
83
E0
45
4F
00
25
7F
44
20
46
E1
68
88
47
20
28
06
46
08
DB
31
2E
06
D2
B8
19
20
38
00
78
00
28
01
D0
05
43
F0
E7
A8
07
01
D5
04
20
85
43
00
20
E0
61
07
46
A0
61
2A
2E
0A
D0
30
46
00
F0
28
F9
00
28
27
D0
B8
00
00
19
30
3E
00
90
86
61
19
E0
02
98
BA
00
12
19
02
C8
91
61
02
90
20
46
E1
68
88
47
01
2F
06
46
17
D1
E0
69
00
28
1F
DA
20
20
85
43
1C
E0
00
98
0A
21
80
69
48
43
00
99
80
19
30
38
88
61
20
46
E1
68
88
47
06
46
00
F0
00
F9
00
28
EF
D1
01
2F
0A
D0
2E
2E
08
D1
20
46
E1
68
88
47
06
46
20
20
05
43
7F
1C
02
2F
C3
DB
A0
69
00
28
03
DA
40
42
A0
61
01
20
05
43
E8
07
01
D0
10
20
85
43
00
2E
24
D0
30
46
41
38
19
28
03
D8
01
20
C0
02
05
43
20
36
20
46
25
60
31
46
02
9A
15
46
FF
F7
75
FD
00
28
0C
D0
01
28
07
D0
ED
1D
E8
08
00
E0
0D
E0
C0
00
08
30
02
90
77
E7
2D
1D
02
95
74
E7
62
68
30
46
A1
68
90
47
20
6A
40
1C
6C
E7
20
6A
FE
BD
00
00
BC
02
00
00
70
47
70
47
70
47
FF
B5
04
46
0D
46
81
B0
24
30
00
90
21
68
88
06
04
D5
10
22
E0
69
91
43
21
60
00
E0
01
20
A8
42
01
DD
47
1B
00
E0
00
27
04
98
A1
69
7A
19
10
18
08
1A
A0
61
20
78
C0
06
02
D4
20
46
FF
F7
ED
FE
00
26
08
E0
03
98
62
68
A1
68
80
5D
90
47
20
6A
40
1C
76
1C
20
62
04
98
86
42
F3
DB
20
78
C0
06
0A
D5
20
46
FF
F7
D9
FE
06
E0
62
68
A1
68
30
20
90
47
20
6A
40
1C
20
62
38
46
7F
1E
00
28
F4
DC
07
E0
00
98
62
68
A1
68
40
5D
90
47
20
6A
40
1C
20
62
28
46
6D
1E
00
28
F3
DC
20
46
FF
F7
D3
FE
20
78
00
06
02
D5
02
20
05
B0
F0
BD
01
20
FB
E7
00
00
01
69
4A
1C
02
61
08
78
70
47
00
B5
8F
B0
02
91
00
21
05
91
05
49
01
93
79
44
03
91
11
46
04
90
68
46
FF
F7
F5
FE
0F
B0
00
BD
00
00
E5
FF
FF
FF
0A
68
10
70
52
1C
0A
60
70
47
00
00
08
4B
70
B5
0D
46
7B
44
FF
F7
E1
FF
04
46
28
46
FF
F7
BB
FD
00
28
02
D0
00
20
C0
43
70
BD
20
46
70
BD
00
00
6B
FB
FF
FF
75
46
00
F0
25
F8
AE
46
05
00
69
46
53
46
C0
08
C0
00
85
46
18
B0
20
B5
FF
F7
86
FD
60
BC
00
27
49
08
B6
46
00
26
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
C0
C5
40
3D
49
00
8D
46
70
47
10
B5
04
46
C0
46
C0
46
20
46
FF
F7
BB
FC
10
BD
00
00
00
48
70
47
08
00
00
30
30
38
0A
28
01
D2
01
20
70
47
00
20
70
47
30
31
32
33
34
35
36
37
38
39
41
42
43
44
45
46
40
30
58
00
30
31
32
33
34
35
36
37
38
39
61
62
63
64
65
66
40
30
78
00
04
00
00
08
00
00
00
00
00
00
00
02
00
01
00
00
10
00
64
08
00
00
00
00
00
30
08
00
00
00
04
01
00
00
6C
08
00
00
08
00
00
30
60
04
00
00
20
01
00
00
00
1C
4E
0E
00
00
00
00
#-----------------------------------------------------------------------------
# The confidential and proprietary information contained in this file may
# only be used by a person authorised under and to the extent permitted
# by a subsisting licensing agreement from Arm Limited or its affiliates.
#
# (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates.
# ALL RIGHTS RESERVED
#
# This entire notice must be reproduced on all copies of this file
# and copies of this file may only be made by a person if such person is
# permitted to do so under the terms of a subsisting license agreement
# from Arm Limited or its affiliates.
#
# SVN Information
#
# Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $
#
# Revision : $Revision: 371321 $
#
# Release Information : Cortex-M System Design Kit-r1p1-00rel0
#-----------------------------------------------------------------------------
#
# Cortex-M System Design Kit software compilation make file
#
#-----------------------------------------------------------------------------
#
# Configurations
#
# Choose the core instantiated, can be
# - CORTEX_M0
# - CORTEX_M0PLUS
CPU_PRODUCT = CORTEX_M0
# Shared software directory
SOFTWARE_DIR = $(SOCLABS_NANOSOC_TECH_DIR)/software
CMSIS_DIR = $(SOFTWARE_DIR)/cmsis
CORE_DIR = $(CMSIS_DIR)/CMSIS/Include
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0plus
else
DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0
endif
# Program file
TESTNAME = dataio_tests
# Endian Option
COMPILE_BIGEND = 0
# Configuration
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
USER_DEFINE = -DCORTEX_M0PLUS
else
USER_DEFINE = -DCORTEX_M0
endif
DEPS_LIST = makefile
# Tool chain : ds5 / gcc / keil
TOOL_CHAIN = ds5
ifeq ($(TOOL_CHAIN),ds5)
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
CPU_TYPE = --cpu Cortex-M0plus
else
CPU_TYPE = --cpu Cortex-M0
endif
endif
ifeq ($(TOOL_CHAIN),gcc)
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
CPU_TYPE = -mcpu=cortex-m0plus
else
CPU_TYPE = -mcpu=cortex-m0
endif
endif
# Startup code directory for DS-5
ifeq ($(TOOL_CHAIN),ds5)
STARTUP_DIR = $(DEVICE_DIR)/Source/ARM
endif
# Startup code directory for gcc
ifeq ($(TOOL_CHAIN),gcc)
STARTUP_DIR = $(DEVICE_DIR)/Source/GCC
endif
ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS)
STARTUP_FILE = startup_CMSDK_CM0plus
SYSTEM_FILE = system_CMSDK_CM0plus
else
STARTUP_FILE = startup_CMSDK_CM0
SYSTEM_FILE = system_CMSDK_CM0
endif
# ---------------------------------------------------------------------------------------
# DS-5 options
# MicroLIB option
COMPILE_MICROLIB = 0
# Small Multiply (Cortex-M0/M0+ has small multiplier option)
COMPILE_SMALLMUL = 0
ARM_CC_OPTIONS = -c -O3 -Ospace -I $(DEVICE_DIR)/Include -I $(CORE_DIR) \
-I $(SOFTWARE_DIR)/common/retarget -I $(SOFTWARE_DIR)/drivers $(USER_DEFINE)
ARM_ASM_OPTIONS =
ARM_LINK_OPTIONS = "--keep=$(STARTUP_FILE).o(RESET)" "--first=$(STARTUP_FILE).o(RESET)" \
--no_debug --rw_base 0x30000000 --ro_base 0x00000000 --map --info sizes
ifeq ($(COMPILE_BIGEND),1)
# Big Endian
ARM_CC_OPTIONS += --bigend
ARM_ASM_OPTIONS += --bigend
ARM_LINK_OPTIONS += --be8
endif
ifeq ($(COMPILE_MICROLIB),1)
# MicroLIB
ARM_CC_OPTIONS += --library_type=microlib
ARM_ASM_OPTIONS += --library_type=microlib --pd "__MICROLIB SETA 1"
ARM_LINK_OPTIONS += --library_type=microlib
endif
ifeq ($(COMPILE_SMALLMUL),1)
# In Cortex-M0, small multiply takes 32 cycles
ARM_CC_OPTIONS += --multiply_latency=32
endif
# ---------------------------------------------------------------------------------------
# gcc options
GNG_CC = arm-none-eabi-gcc
GNU_OBJDUMP = arm-none-eabi-objdump
GNU_OBJCOPY = arm-none-eabi-objcopy
LINKER_SCRIPT_PATH = $(SOFTWARE_DIR)/common/scripts
LINKER_SCRIPT = $(LINKER_SCRIPT_PATH)/cmsdk_cm0.ld
GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE)
ifeq ($(COMPILE_BIGEND),1)
# Big Endian
GNU_CC_FLAGS += -mbig-endian
endif
# ---------------------------------------------------------------------------------------
all: all_$(TOOL_CHAIN)
# ---------------------------------------------------------------------------------------
# DS-5
all_ds5 : $(TESTNAME).hex $(TESTNAME).lst $(TESTNAME).bin
$(TESTNAME).o : $(TESTNAME).c $(DEPS_LIST)
armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
dataio_functions.o : dataio_functions.c dataio_functions.h $(DEPS_LIST)
armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
$(SYSTEM_FILE).o : $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c $(DEPS_LIST)
armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
retarget.o : $(SOFTWARE_DIR)/common/retarget/retarget.c $(DEPS_LIST)
armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
uart_stdout.o : $(SOFTWARE_DIR)/common/retarget/uart_stdout.c $(DEPS_LIST)
armcc $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@
$(STARTUP_FILE).o : $(STARTUP_DIR)/$(STARTUP_FILE).s $(DEPS_LIST)
armasm $(ARM_ASM_OPTIONS) $(CPU_TYPE) $< -o $@
$(TESTNAME).ELF : $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o dataio_functions.o retarget.o uart_stdout.o
armlink $(ARM_LINK_OPTIONS) -o $@ $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o dataio_functions.o
$(TESTNAME).hex : $(TESTNAME).ELF
fromelf --vhx --8x1 $< --output $@
$(TESTNAME).bin : $(TESTNAME).ELF
fromelf --bin $< --output $@
$(TESTNAME).lst : $(TESTNAME).ELF
fromelf -c -d -e -s -z -v $< --output $@
# ---------------------------------------------------------------------------------------
# gcc
all_gcc:
$(GNG_CC) $(GNU_CC_FLAGS) $(STARTUP_DIR)/$(STARTUP_FILE).s \
$(TESTNAME).c \
$(SOFTWARE_DIR)/common/retarget/retarget.c \
$(SOFTWARE_DIR)/common/retarget/uart_stdout.c \
$(DEVICE_DIR)/Source/$(SYSTEM_FILE).c \
-I $(DEVICE_DIR)/Include -I $(CORE_DIR) \
-I $(SOFTWARE_DIR)/common/retarget \
-I $(SOFTWARE_DIR)/drivers \
-L $(LINKER_SCRIPT_PATH) \
-D__STACK_SIZE=0x200 \
-D__HEAP_SIZE=0x1000 \
$(USER_DEFINE) -T $(LINKER_SCRIPT) -o $(TESTNAME).o
# Generate disassembly code
$(GNU_OBJDUMP) -S $(TESTNAME).o > $(TESTNAME).lst
# Generate binary file
$(GNU_OBJCOPY) -S $(TESTNAME).o -O binary $(TESTNAME).bin
# Generate hex file
$(GNU_OBJCOPY) -S $(TESTNAME).o -O verilog $(TESTNAME).hex
# Note:
# If the version of object copy you are using does not support verilog hex file output,
# you can generate the hex file from binary file using the following command
# od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex
# ---------------------------------------------------------------------------------------
# Keil MDK
all_keil:
@echo "Please compile your project code and press ENTER when ready"
@read dummy
# ---------------------------------------------------------------------------------------
# Binary
all_bin: $(TESTNAME).bin
# Generate hex file from binary
od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex
# ---------------------------------------------------------------------------------------
# Clean
clean :
@rm -rf *.o
@if [ -e $(TESTNAME).hex ] ; then \
rm -rf $(TESTNAME).hex ; \
fi
@if [ -e $(TESTNAME).lst ] ; then \
rm -rf $(TESTNAME).lst ; \
fi
@if [ -e $(TESTNAME).ELF ] ; then \
rm -rf $(TESTNAME).ELF ; \
fi
@if [ -e $(TESTNAME).bin ] ; then \
rm -rf $(TESTNAME).bin ; \
fi
@rm -rf *.crf
@rm -rf *.plg
@rm -rf *.tra
@rm -rf *.htm
@rm -rf *.map
@rm -rf *.dep
@rm -rf *.d
@rm -rf *.lnp
@rm -rf *.bak
@rm -rf *.lst
@rm -rf *.axf
@rm -rf *.sct
@rm -rf *.__i
@rm -rf *._ia
......@@ -17,3 +17,4 @@ apb_mux_tests
memory_tests
romtable_tests
interrupt_demo
dataio_tests
......@@ -92,7 +92,10 @@ localparam BE=0;
localparam ADP_FILENAME="adp.cmd";
`endif
localparam DATA_IN_FILENAME="data_in.csv";
localparam DATA_OUT_FILENAME="logs/data_out.csv";
/*
SROM_Ax32
#(.ADDRWIDTH (8),
.filename ("bootrom/hex/bootloader.hex"),
......@@ -104,6 +107,7 @@ SROM_Ax32
.SEL(1'b0),
.RDATA( )
);
*/
`ifdef SDF_SIM
initial
......@@ -334,20 +338,6 @@ extio8x4_axis_target u_extio8x4_axis_target
);
`endif
/*
nanosoc_axi_stream_io_8_txd_from_file #(
.TXDFILENAME(ADP_FILENAME),
// .CODEFILENAME("null.hex"),
.FAST_LOAD(FAST_LOAD)
) u_nanosoc_axi_stream_io_dat_txd_from_file (
.aclk (CLK),
.aresetn (NRST),
.txd8_ready (axis_rx1_tready),
.txd8_valid (axis_rx1_tvalid),
.txd8_data (axis_rx1_tdata8)
);
*/
nanosoc_axi_stream_io_8_rxd_to_file#(
.RXDFILENAME("logs/extadp_out.log"),
.VERBOSE(0)
......@@ -372,21 +362,29 @@ extio8x4_axis_target u_extio8x4_axis_target
.AUXCTRL ()
);
nanosoc_axi_stream_io_8_txd_from_datafile #(
.TXDFILENAME(DATA_IN_FILENAME)
) u_nanosoc_axi_stream_io_8_txd_from_datafile (
.aclk (CLK),
.aresetn (NRST),
.txd8_ready (axis_rx1_tready),
.txd8_valid (axis_rx1_tvalid),
.txd8_data (axis_rx1_tdata8)
);
nanosoc_axi_stream_io_8_rxd_to_file#(
.RXDFILENAME("logs/extdat_out.log")
.RXDFILENAME(DATA_OUT_FILENAME)
) u_nanosoc_axi_stream_io_extdata_8_rxd_to_file (
.aclk (CLK),
.aresetn (NRST),
.eof_received ( ),
.rxd8_ready ( ), //axis_tx1_tready),
.rxd8_valid (axis_tx1_tvalid & axis_tx1_tready),
.rxd8_ready (axis_tx1_tready),
.rxd8_valid (axis_tx1_tvalid),
.rxd8_data (axis_tx1_tdata8)
);
assign axis_tx1_tready = axis_rx1_tready;
assign axis_rx1_tvalid = axis_tx1_tvalid;
assign axis_rx1_tdata8 = axis_tx1_tdata8;
`endif
// --------------------------------------------------------------------------------
......
//-----------------------------------------------------------------------------
// 8-bit AXI-Stream File TX playback
//
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Flynn (d.w.flynn@soton.ac.uk)
//
// Copyright (c) 2023-25, SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------
module nanosoc_axi_stream_io_8_txd_from_datafile
#(parameter TXDFILENAME = "data.txt",
parameter WAITSTATE = 0,
parameter VERBOSE = 0)
(
input wire aclk,
input wire aresetn,
input wire txd8_ready,
output wire txd8_valid,
output wire [7:0] txd8_data
);
//----------------------------------------------
//-- File I/O
//----------------------------------------------
integer fd; // channel descriptor for cmd file input
integer ch;
integer i;
`define EOF -1
reg valid;
reg [7:0] data8;
reg eot; // Ctrl-D encountered
initial
begin
eot <= 1'b0;
valid <= 1'b0;
// $timeformat(-9, 0, " ns", 14);
fd= $fopen(TXDFILENAME,"r");
if (fd == 0)
$write("** %m : input file failed to open **\n");
else begin
@(posedge aresetn);
ch = $fgetc(fd);
while ((ch != `EOF) && (!eot)) begin
@(posedge aclk);
data8 <= (ch & 8'hff);
valid <= 1'b1;
if (ch == 8'h04)
eot <= 1'b1;
@(posedge aclk);
while (txd8_ready == 1'b0)
@(posedge aclk);
valid <= 1'b0;
ch = (eot) ? `EOF : $fgetc(fd);
for (i=0; i < WAITSTATE; i=i+1)
@(posedge aclk);
end
$write("** %m : file closed after stream TX completed **\n");
$fclose(fd);
valid <= 1'b0;
end
end
assign txd8_valid = valid;
assign txd8_data = data8;
endmodule
......@@ -58,7 +58,6 @@ module soclabs_axis8_capture
(
input wire RESETn, // Power on reset
input wire CLK, // Clock (baud rate)
input wire RXD, // Received data
output wire RXD8_READY,
input wire RXD8_VALID,
......@@ -69,7 +68,6 @@ module soclabs_axis8_capture
output wire [7:0] AUXCTRL); // Auxiliary control
reg [8:0] rx_shift_reg;
wire [8:0] nxt_rx_shift;
reg [6:0] string_length;
reg [7:0] tube_string [127:0];
reg [7:0] text_char;
......@@ -104,20 +102,7 @@ assign RXD8_READY = rx_shift_reg[0]; // ready except for a cycle processing
end
// Receive shift register
assign nxt_rx_shift = {RXD,rx_shift_reg[8:1]};
assign char_received = (rx_shift_reg[0]==1'b0);
/*
always @(posedge CLK or negedge RESETn)
begin
if (~RESETn)
rx_shift_reg <= {9{1'b0}};
else
if (rx_shift_reg[0]==1'b0) // Start bit reach bit[0]
rx_shift_reg <= {9{1'b1}};
else
rx_shift_reg <= nxt_rx_shift;
end
*/
// ARM design wants valid char in rx_shift_reg[9:1]
// and a zero in rx_shift_reg[0] to indicate valid start bit (so preset back to 1 after a clock cycle)
......