From 72ffb2bce302be54dd1c993cc29770b6328f6007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Fri, 20 Sep 2019 16:45:38 +0200 Subject: [PATCH 1/9] file renamed --- doc/{Doxygen.cfg => Doxyfile} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/{Doxygen.cfg => Doxyfile} (100%) diff --git a/doc/Doxygen.cfg b/doc/Doxyfile similarity index 100% rename from doc/Doxygen.cfg rename to doc/Doxyfile From 7431fc5abb128f292faa8530b22ef7475abe8d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Tue, 24 Sep 2019 11:00:06 +0200 Subject: [PATCH 2/9] Fixed Makefile, definitive Makefile using newlib --- tests/C/long_test1/Makefile | 19 +++++++-------- tests/C/long_test1/helper_functions.c | 35 +++++++++++++++++++++++++++ tests/C/long_test1/long_test1.c | 29 ---------------------- 3 files changed, 44 insertions(+), 39 deletions(-) create mode 100644 tests/C/long_test1/helper_functions.c diff --git a/tests/C/long_test1/Makefile b/tests/C/long_test1/Makefile index fc446be..220c92f 100644 --- a/tests/C/long_test1/Makefile +++ b/tests/C/long_test1/Makefile @@ -1,16 +1,16 @@ TARGET = long_test1 -TARGET_ARCH=riscv32 +TARGET_ARCH = riscv32 CC = riscv32-unknown-elf-gcc # compiling flags here CFLAGS = -Wall -I. -O0 -static -march=rv32imac -mabi=ilp32 --specs=nosys.specs +# CFLAGS = -Wall -I. -O0 -static -march=rv32imac -mabi=ilp32 --specs=nano.specs - -LINKER = riscv32-unknown-linux-gnu-gcc +LINKER = riscv32-unknown-elf-gcc # linking flags here -LDFLAGS = -I. --entry main -L/opt/riscv/riscv32-unknown-elf/lib/ -T ld_script.ld +LDFLAGS = -I. -static LIBS = $(EXTRA_LIBS) @@ -30,15 +30,14 @@ rm = rm -f $(BINDIR)/$(TARGET): $(OBJECTS) -# $(LINKER) $(OBJECTS) $(LDFLAGS) $(LIBS) $(LIBDIR) -o $@ - riscv32-unknown-elf-objdump -d $< > dump - riscv32-unknown-elf-objcopy -Oihex $< $(TARGET).hex -# @echo "Linking complete!" + $(LINKER) $(CFLAGS) $(LDFLAGS) $(LIBS) $(LIBDIR) $(OBJECTS) -o $@ + riscv32-unknown-elf-objdump -d $@ > dump + riscv32-unknown-elf-objcopy -Oihex $@ $(TARGET).hex + @echo "Linking complete!" $(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c @echo "Compiling "$<" ..." -# $(CC) $(CFLAGS) $(INCDIR) -c $< -o $@ - $(CC) $(CFLAGS) $(INCDIR) $< -o $@ + $(CC) $(CFLAGS) $(INCDIR) -c $< -o $@ @echo "Done!" .PHONY: clean diff --git a/tests/C/long_test1/helper_functions.c b/tests/C/long_test1/helper_functions.c new file mode 100644 index 0000000..18efcba --- /dev/null +++ b/tests/C/long_test1/helper_functions.c @@ -0,0 +1,35 @@ +#include +#include + + +#define TRACE (*(unsigned char *)0x40000000) +int _read(int file, char* ptr, int len) { + return 0; +} + +int _close(int fd){ + return 0; +} + +int _fstat_r(int fd) { + return 0; +} + +int _lseek_r(struct _reent *ptr, FILE *fp, long offset, int whence){ + return 0; +} + +int _isatty_r(struct _reent *ptr, int fd) { + return 0; +} + +int _write(int file, const char *ptr, int len) { + int x; + + for (x = 0; x < len; x++) { + TRACE = *ptr++; + } + + return (len); +} + diff --git a/tests/C/long_test1/long_test1.c b/tests/C/long_test1/long_test1.c index d2d8a70..71fcb49 100644 --- a/tests/C/long_test1/long_test1.c +++ b/tests/C/long_test1/long_test1.c @@ -1,36 +1,7 @@ #include #include -#define TRACE (*(unsigned char *)0x40000000) -int _read(int file, char* ptr, int len) { - return 0; -} -int _close(int fd){ - return 0; -} - -int _fstat_r(int fd) { - return 0; -} - -int _lseek_r(struct _reent *ptr, FILE *fp, long offset, int whence){ - return 0; -} - -int _isatty_r(struct _reent *ptr, int fd) { - return 0; -} - -int _write(int file, const char *ptr, int len) { - int x; - - for (x = 0; x < len; x++) { - TRACE = *ptr++; - } - - return (len); -} int main(void) { From 5f0da6b208503a29d2407823249fa6e97ff4a0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Tue, 24 Sep 2019 11:02:15 +0200 Subject: [PATCH 3/9] fixed potential bug on memcpy --- src/CPU.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CPU.cpp b/src/CPU.cpp index ff271fe..ac0b514 100644 --- a/src/CPU.cpp +++ b/src/CPU.cpp @@ -547,7 +547,7 @@ void CPU::CPU_thread(void) { void CPU::call_interrupt(tlm::tlm_generic_payload &trans, sc_time &delay) { interrupt = true; /* Socket caller send a cause (its id) */ - memcpy(&int_cause, trans.get_data_ptr(), sizeof(int)); + memcpy(&int_cause, trans.get_data_ptr(), sizeof(uint32_t)); } void CPU::invalidate_direct_mem_ptr(sc_dt::uint64 start, sc_dt::uint64 end) From 70e9313025aeb394fda938e211b81507f23b4d09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Tue, 24 Sep 2019 11:03:31 +0200 Subject: [PATCH 4/9] fixed wrong interrupt enable value --- tests/C/timer/timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/C/timer/timer.c b/tests/C/timer/timer.c index a9c1d80..4f43332 100644 --- a/tests/C/timer/timer.c +++ b/tests/C/timer/timer.c @@ -35,7 +35,7 @@ void register_timer_isr() { asm volatile("csrw mie, t1"); // enable interrupts - asm volatile( "csrs mstatus,1" ); + asm volatile( "csrs mstatus,0x0F" ); } int main(void) { From d575410a068fc0d7bdd549f1b7d2e43925513bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Tue, 24 Sep 2019 11:12:47 +0200 Subject: [PATCH 5/9] if condition clarified --- src/CPU.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/CPU.cpp b/src/CPU.cpp index ac0b514..46a24ca 100644 --- a/src/CPU.cpp +++ b/src/CPU.cpp @@ -40,8 +40,7 @@ bool CPU::cpu_process_IRQ() { if (interrupt == true) { csr_temp = register_bank->getCSR(CSR_MSTATUS); - if (csr_temp & MSTATUS_MIE) { - } else { + if ( (csr_temp & MSTATUS_MIE) == 0) { log->SC_log(Log::DEBUG) << "interrupt delayed" << endl; return ret_value; } From 2e9044a68c908457e08ca0b819cda18457f9fa91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Tue, 24 Sep 2019 11:18:54 +0200 Subject: [PATCH 6/9] new test using malloc() --- tests/C/{test_malloc => malloc_test}/Makefile | 24 ++++++------ tests/C/malloc_test/helper_functions.c | 35 +++++++++++++++++ tests/C/malloc_test/malloc_test | Bin 0 -> 207452 bytes .../malloc_test.c} | 36 ------------------ 4 files changed, 47 insertions(+), 48 deletions(-) rename tests/C/{test_malloc => malloc_test}/Makefile (57%) create mode 100644 tests/C/malloc_test/helper_functions.c create mode 100755 tests/C/malloc_test/malloc_test rename tests/C/{test_malloc/test_malloc.c => malloc_test/malloc_test.c} (70%) diff --git a/tests/C/test_malloc/Makefile b/tests/C/malloc_test/Makefile similarity index 57% rename from tests/C/test_malloc/Makefile rename to tests/C/malloc_test/Makefile index 656ba6c..f761442 100644 --- a/tests/C/test_malloc/Makefile +++ b/tests/C/malloc_test/Makefile @@ -1,15 +1,15 @@ -TARGET = test_malloc +TARGET = malloc_test -TARGET_ARCH=riscv32 +TARGET_ARCH = riscv32 CC = riscv32-unknown-elf-gcc # compiling flags here -CFLAGS = -Wall -I. -O0 -static --specs=nosys.specs +CFLAGS = -Wall -I. -O0 -static -march=rv32imac -mabi=ilp32 --specs=nosys.specs -LINKER = riscv32-unknown-linux-gnu-gcc +LINKER = riscv32-unknown-elf-gcc # linking flags here -LDFLAGS = -I. --entry main -L/opt/riscv/riscv32-unknown-elf/lib/ -T ld_script.ld +LDFLAGS = -I. -static LIBS = $(EXTRA_LIBS) @@ -24,19 +24,19 @@ LIBDIR = -L. SOURCES := $(wildcard $(SRCDIR)/*.c) INCLUDES := $(wildcard $(INCDIR)/*.h) OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) + rm = rm -f $(BINDIR)/$(TARGET): $(OBJECTS) -# $(LINKER) $(OBJECTS) $(LDFLAGS) $(LIBS) $(LIBDIR) -o $@ - riscv32-unknown-elf-objdump -d $< > dump - objcopy -Oihex $< $(TARGET).hex -# @echo "Linking complete!" + $(LINKER) $(CFLAGS) $(LDFLAGS) $(LIBS) $(LIBDIR) $(OBJECTS) -o $@ + riscv32-unknown-elf-objdump -d $@ > dump + riscv32-unknown-elf-objcopy -Oihex $@ $(TARGET).hex + @echo "Linking complete!" $(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c @echo "Compiling "$<" ..." -# $(CC) $(CFLAGS) $(INCDIR) -c $< -o $@ - $(CC) $(CFLAGS) $(INCDIR) $< -o $@ + $(CC) $(CFLAGS) $(INCDIR) -c $< -o $@ @echo "Done!" .PHONY: clean @@ -46,5 +46,5 @@ clean: .PHONY: remove remove: clean - @$(rm) $(BINDIR)/$(TARGET) + @$(rm) $(BINDIR)/$(TARGET) $(OBJECTS) @echo "Executable removed!" diff --git a/tests/C/malloc_test/helper_functions.c b/tests/C/malloc_test/helper_functions.c new file mode 100644 index 0000000..18efcba --- /dev/null +++ b/tests/C/malloc_test/helper_functions.c @@ -0,0 +1,35 @@ +#include +#include + + +#define TRACE (*(unsigned char *)0x40000000) +int _read(int file, char* ptr, int len) { + return 0; +} + +int _close(int fd){ + return 0; +} + +int _fstat_r(int fd) { + return 0; +} + +int _lseek_r(struct _reent *ptr, FILE *fp, long offset, int whence){ + return 0; +} + +int _isatty_r(struct _reent *ptr, int fd) { + return 0; +} + +int _write(int file, const char *ptr, int len) { + int x; + + for (x = 0; x < len; x++) { + TRACE = *ptr++; + } + + return (len); +} + diff --git a/tests/C/malloc_test/malloc_test b/tests/C/malloc_test/malloc_test new file mode 100755 index 0000000000000000000000000000000000000000..3e29984ee9e761859dc0282385b4b8c4bd6d43b4 GIT binary patch literal 207452 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%0A{ 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 d|Mck%!3{dU`^W7umZ{!f=pp9Yt|aVw|1U}+E #include #include -#include -#include #define BUFFER_SIZE (512) -#define TRACE (*(unsigned char *)0x40000000) -extern int errno; - -int _write(int file, const char *ptr, int len) { - int x; - - for (x = 0; x < len; x++) { - TRACE = *ptr++; - } - - return (len); -} - -int _read (int file, char *ptr, int len) { - return 0; -} - -int _close (int file) { - errno = EBADF; - return -1; -} - -int _fstat (int file, struct stat *st) { - st->st_mode = S_IFCHR; - return 0; -} - -int _isatty (int file) { - return 1; -} - -int _lseek (int file, int offset, int whence) { - return 0; -} int main(void) { uint16_t *buffA, *buffB; From 1379eca32d0bcb884b2ff59a00772402bda7fb0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Tue, 24 Sep 2019 11:19:19 +0200 Subject: [PATCH 7/9] unused option --- tests/C/long_test1/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/C/long_test1/Makefile b/tests/C/long_test1/Makefile index 220c92f..9e76816 100644 --- a/tests/C/long_test1/Makefile +++ b/tests/C/long_test1/Makefile @@ -6,7 +6,6 @@ CC = riscv32-unknown-elf-gcc # compiling flags here CFLAGS = -Wall -I. -O0 -static -march=rv32imac -mabi=ilp32 --specs=nosys.specs -# CFLAGS = -Wall -I. -O0 -static -march=rv32imac -mabi=ilp32 --specs=nano.specs LINKER = riscv32-unknown-elf-gcc # linking flags here From 62b8bc4cb2813347b05ce15994decbc6694c22d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Wed, 25 Sep 2019 08:15:08 +0200 Subject: [PATCH 8/9] better docker explanation --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a38101..282c242 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ $ ./RISCV_TLM asm/BasicLoop.hex ### Arguments -D loglevel: 3 for detailed (INFO) log, 0 to ERROR log level + -f filename .hex filename to use ## Cross-compiler @@ -147,10 +148,16 @@ This container has RISCV-TLM already build at /usr/src/riscv64/RISCV-TLM directo $ docker pull mariusmm/riscv-tlm $ docker run -v /:/tmp -u $UID -e DISPLAY=$DISPLAY --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" -it mariusmm/riscv-tlm /bin/bash -# cd /usr/src/riscv64/RISCV_TLM/ +# cd /usr/src/riscv64/RISC-V-TLM/ # ./RISCV_TLM /tmp/ ``` +or you can call binary inside docker image directly: + +``` +$ docker run -v /:/tmp -u $UID -e DISPLAY=$DISPLAY --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" -it mariusmm/riscv-tlm /usr/src/riscv64/RISC-V-TLM/RISCV_TLM /tmp/ +``` + I'm using docker image [zmors/riscv_gcc](https://hub.docker.com/r/zmors/riscv_gcc) to have a cross-compiler, I'm using both docker images this way: ``` console1: From dc5f6aa37b4c1be3ae007eb15ab0856bc23b02ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A0rius=20Mont=C3=B3n?= Date: Wed, 25 Sep 2019 09:04:44 +0200 Subject: [PATCH 9/9] Makefile for newlib nano and new Trace peripheral explanied --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 282c242..ea0c672 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Helper classes: Current performance is about 1.500.000 instructions / sec in a Intel Core i5-5200@2.2Ghz and about 3.000.000 instructions / sec in a Intel Core i7-8550U@1.8Ghz. +Trace perihperal creates a xterm window where it prints out all received data. ### Structure ![Modules' hierarchy](https://github.com/mariusmm/RISC-V-TLM/blob/master/doc/Hierarchy.png) @@ -72,7 +73,7 @@ i5-5200@2.2Ghz and about 3.000.000 instructions / sec in a Intel Co | Base | Module | Description | | ---- | :----: | ---- | -| 0x40000000 | Trace | Output data directly to stdout | +| 0x40000000 | Trace | Output data to xterm | | 0x40004000 | Timer | LSB Timer | | 0x40004004 | Timer | MSB Timer | | 0x40004008 | Timer | MSB Timer Comparator | @@ -138,6 +139,11 @@ wait for long time ... $ export PATH=$PATH:/opt/riscv/bin ~~~ +In test/C/long_test/ example there is a Makefile that compiles a project with any .c files and links them against new-lib nano. +There is a Helper_functions.c file with defiitions of all missing functions needed by the library (**_read()**, **_close()**, **_fstat_r()**, +**_lseek_r()**, **_isatty_r()**, **_write()**). All of them are defined empty except **_write()** that is written to use the Trace perihperal. +The definition of the function **_write()** allows developer to use printf() as usual and the stdout will be redirected to the Trace perihperal. + ## Docker container There is a Docker container available with the latest release at https://hub.docker.com/r/mariusmm/riscv-tlm.