From 2ea04336a07a4567acff5b3d1150ce052a496260 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Wed, 6 Apr 2022 15:58:57 +0100 Subject: [PATCH 01/10] feat(sw): update LIB, UART with improved drivers --- submodules/LIB | 2 +- submodules/UART | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/LIB b/submodules/LIB index ab25c36b3..5656b00f7 160000 --- a/submodules/LIB +++ b/submodules/LIB @@ -1 +1 @@ -Subproject commit ab25c36b35c1e53c648b98475d6d58b903d6825b +Subproject commit 5656b00f7df3e921b4cb6479317688c8c1ae2434 diff --git a/submodules/UART b/submodules/UART index f10dc749b..1d5babba1 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit f10dc749bd69942edbb449022c0ef0d3e2c669cf +Subproject commit 1d5babba1d381f00616422bb73940111f5a28672 From 7162d7f3e54fafe339f7e50af314a9d6a651a075 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Wed, 6 Apr 2022 17:40:44 +0100 Subject: [PATCH 02/10] fix(test): update LIB, test.expected files - Update LIB with small bug fix - Update test.expected files - Latest UART drivers passes tests --- document/pb/pb.pdf | Bin 72034 -> 72032 bytes document/presentation/presentation.pdf | Bin 186370 -> 186447 bytes .../fpga/quartus/CYCLONEV-GT-DK/test.expected | 4 ++-- .../fpga/vivado/AES-KU040-DB-G/test.expected | 8 ++++---- hardware/simulation/test.expected | 8 ++++---- submodules/LIB | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/document/pb/pb.pdf b/document/pb/pb.pdf index 73aad8a537254dda501ca23cb5504042eded61f2..bf5884d53382104ba43fbbcbf938e44f20fb775a 100644 GIT binary patch delta 2644 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 CwGh?- delta 2645 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 D;gb}d diff --git a/document/presentation/presentation.pdf b/document/presentation/presentation.pdf index abb09876003e6d8e5c9fcb7696650e36daeb3d1f..95a204ffc7227fddc6021a5d209a14377e004d4f 100644 GIT binary patch delta 18704 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 Date: Wed, 6 Apr 2022 17:43:57 +0100 Subject: [PATCH 03/10] update(UART): update UART submodule --- submodules/UART | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/UART b/submodules/UART index 1d5babba1..0d9d51757 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit 1d5babba1d381f00616422bb73940111f5a28672 +Subproject commit 0d9d517579906496090efdf3ba1aac0ce8f941ff From 9118c26d935d0eff1dad96b675699b91ff44dd26 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Wed, 6 Apr 2022 20:59:57 +0100 Subject: [PATCH 04/10] update(submodules): Update LIB, UART - Update LIB and UART submodules --- submodules/LIB | 2 +- submodules/UART | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/LIB b/submodules/LIB index e3c5ee42e..439016953 160000 --- a/submodules/LIB +++ b/submodules/LIB @@ -1 +1 @@ -Subproject commit e3c5ee42e2b4fb97c02c7b9bf0d204f63777ef64 +Subproject commit 439016953e35d53fe670b205dcb8ce1d6485a2a4 diff --git a/submodules/UART b/submodules/UART index 0d9d51757..d7930859b 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit 0d9d517579906496090efdf3ba1aac0ce8f941ff +Subproject commit d7930859bf73ca30d8987b0bcc2438a6ca2be7ed From c040a45ca4c6445186c696df272c8ff8998d690b Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Thu, 7 Apr 2022 11:31:25 +0100 Subject: [PATCH 05/10] update(LIB, UART) --- submodules/LIB | 2 +- submodules/UART | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/LIB b/submodules/LIB index 439016953..52190e049 160000 --- a/submodules/LIB +++ b/submodules/LIB @@ -1 +1 @@ -Subproject commit 439016953e35d53fe670b205dcb8ce1d6485a2a4 +Subproject commit 52190e04980a075db9d8520def3a94fb3f07f825 diff --git a/submodules/UART b/submodules/UART index d7930859b..2c9ff50e1 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit d7930859bf73ca30d8987b0bcc2438a6ca2be7ed +Subproject commit 2c9ff50e1d96a736598308595a310952567d665c From 870d229de5d7804938356707770f76ff790c8d07 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Fri, 8 Apr 2022 13:27:38 +0100 Subject: [PATCH 06/10] feat(sw): update UART, LIB software drivers --- software/bootloader/Makefile | 2 +- software/bootloader/boot.c | 4 ++-- software/firmware/Makefile | 3 ++- software/pc-emul/Makefile | 2 +- submodules/LIB | 2 +- submodules/UART | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/software/bootloader/Makefile b/software/bootloader/Makefile index 0956c33e5..c7dcf7c84 100644 --- a/software/bootloader/Makefile +++ b/software/bootloader/Makefile @@ -23,6 +23,6 @@ boot.elf: ../template.lds $(HDR) $(SRC) $(TOOLCHAIN_PREFIX)objcopy -O binary boot.elf boot.bin clean: gen-clean - @rm -rf boot.bin boot.elf boot.map *.hex *swreg.h + @rm -rf boot.bin boot.elf boot.map *.hex *swreg*.h *swreg*.c .PHONY: clean diff --git a/software/bootloader/boot.c b/software/bootloader/boot.c index cd624f4ed..cdb89a6c2 100644 --- a/software/bootloader/boot.c +++ b/software/bootloader/boot.c @@ -18,9 +18,9 @@ int main() { //connect with console do { - if(uart_istxready()) + if(UART_GET_TXREADY()) uart_putc((char) ENQ); - } while(!uart_isrxready()); + } while(!UART_GET_RXREADY()); //welcome message uart_puts (PROGNAME); diff --git a/software/firmware/Makefile b/software/firmware/Makefile index 8ab5824ed..d49d3876e 100644 --- a/software/firmware/Makefile +++ b/software/firmware/Makefile @@ -24,6 +24,7 @@ firmware.elf: ../template.lds $(HDR) $(SRC) $(TOOLCHAIN_PREFIX)objcopy -O binary firmware.elf firmware.bin clean: gen-clean - @rm -rf firmware.bin firmware.elf firmware.map *.hex periphs.h *swreg.h + @rm -rf firmware.bin firmware.elf firmware.map *.hex periphs.h *swreg*.h \ + *swreg*.c .PHONY: clean diff --git a/software/pc-emul/Makefile b/software/pc-emul/Makefile index 29f0520e0..0ac11d6d8 100644 --- a/software/pc-emul/Makefile +++ b/software/pc-emul/Makefile @@ -42,6 +42,6 @@ test: diff -q $(PC_DIR)/test.log $(PC_DIR)/test.expected clean: - @rm -rf firmware.out periphs.h test.log *swreg.h + @rm -rf firmware.out periphs.h test.log *swreg*.h *swreg*.c .PHONY: all build run clean subs periphs_tmp.h test diff --git a/submodules/LIB b/submodules/LIB index 52190e049..5a9bf39e3 160000 --- a/submodules/LIB +++ b/submodules/LIB @@ -1 +1 @@ -Subproject commit 52190e04980a075db9d8520def3a94fb3f07f825 +Subproject commit 5a9bf39e31605b9064a190f869f6a8e4ed9b6031 diff --git a/submodules/UART b/submodules/UART index 2c9ff50e1..9d2a42e6f 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit 2c9ff50e1d96a736598308595a310952567d665c +Subproject commit 9d2a42e6f34c33846365b997b59c8d4b5a2571ca From e0d208f3b8f5caf1823fdb9bbdba5c906b234e49 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Fri, 8 Apr 2022 15:57:29 +0100 Subject: [PATCH 07/10] feat(sw): update LIB, UART - multiple improvements to software drivers --- submodules/LIB | 2 +- submodules/UART | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/LIB b/submodules/LIB index 5a9bf39e3..0de7b285e 160000 --- a/submodules/LIB +++ b/submodules/LIB @@ -1 +1 @@ -Subproject commit 5a9bf39e31605b9064a190f869f6a8e4ed9b6031 +Subproject commit 0de7b285e1fb57ea050366a27f90fbfb0a99ab35 diff --git a/submodules/UART b/submodules/UART index 9d2a42e6f..8ca63bb69 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit 9d2a42e6f34c33846365b997b59c8d4b5a2571ca +Subproject commit 8ca63bb6985e0e200babdeb85a1bfccc2c2e61bb From 327c7a995abbe1070e43aed4c9837372ff3048a8 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Fri, 8 Apr 2022 17:22:27 +0100 Subject: [PATCH 08/10] update(LIB, UART) --- submodules/LIB | 2 +- submodules/UART | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/LIB b/submodules/LIB index 0de7b285e..b7eee1057 160000 --- a/submodules/LIB +++ b/submodules/LIB @@ -1 +1 @@ -Subproject commit 0de7b285e1fb57ea050366a27f90fbfb0a99ab35 +Subproject commit b7eee1057792b6413707f3e89b478f64ff125d70 diff --git a/submodules/UART b/submodules/UART index 8ca63bb69..1127efdf9 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit 8ca63bb6985e0e200babdeb85a1bfccc2c2e61bb +Subproject commit 1127efdf91f6281a161d0db145e1dcabf01ce593 From 61e6ec0373057c62dc2a5e7390232ffc819bd772 Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Fri, 8 Apr 2022 18:25:50 +0100 Subject: [PATCH 09/10] feat(test): update test.expected files --- hardware/fpga/quartus/CYCLONEV-GT-DK/test.expected | 4 ++-- hardware/fpga/vivado/AES-KU040-DB-G/test.expected | 8 ++++---- hardware/simulation/test.expected | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/hardware/fpga/quartus/CYCLONEV-GT-DK/test.expected b/hardware/fpga/quartus/CYCLONEV-GT-DK/test.expected index cbc1032d1..d7ace23ef 100644 --- a/hardware/fpga/quartus/CYCLONEV-GT-DK/test.expected +++ b/hardware/fpga/quartus/CYCLONEV-GT-DK/test.expected @@ -35,14 +35,14 @@ IOb-Bootloader: connected! IOb-UART: requesting to receive file IOb-Console: got file send request IOb-Console: file name b'firmware.bin' -IOb-Console: file of size 19060 bytes +IOb-Console: file of size 19092 bytes IOb-Console: file sent IOb-UART: file received IOb-Bootloader: Loading firmware... IOb-UART: requesting to send file IOb-Console: got file receive request IOb-Console: file name b's_fw.bin' -IOb-Console : file size: 19060 bytes +IOb-Console : file size: 19092 bytes IOb-Console: file received IOb-UART: file sent IOb-Bootloader: Restart CPU to run user program... diff --git a/hardware/fpga/vivado/AES-KU040-DB-G/test.expected b/hardware/fpga/vivado/AES-KU040-DB-G/test.expected index 9787ca0cc..161e78deb 100644 --- a/hardware/fpga/vivado/AES-KU040-DB-G/test.expected +++ b/hardware/fpga/vivado/AES-KU040-DB-G/test.expected @@ -35,14 +35,14 @@ IOb-Bootloader: connected! IOb-UART: requesting to receive file IOb-Console: got file send request IOb-Console: file name b'firmware.bin' -IOb-Console: file of size 19060 bytes +IOb-Console: file of size 19092 bytes IOb-Console: file sent IOb-UART: file received IOb-Bootloader: Loading firmware... IOb-UART: requesting to send file IOb-Console: got file receive request IOb-Console: file name b's_fw.bin' -IOb-Console : file size: 19060 bytes +IOb-Console : file size: 19092 bytes IOb-Console: file received IOb-UART: file sent IOb-Bootloader: Restart CPU to run user program... @@ -72,14 +72,14 @@ IOb-Bootloader: program to run from DDR IOb-UART: requesting to receive file IOb-Console: got file send request IOb-Console: file name b'firmware.bin' -IOb-Console: file of size 19220 bytes +IOb-Console: file of size 19244 bytes IOb-Console: file sent IOb-UART: file received IOb-Bootloader: Loading firmware... IOb-UART: requesting to send file IOb-Console: got file receive request IOb-Console: file name b's_fw.bin' -IOb-Console : file size: 19220 bytes +IOb-Console : file size: 19244 bytes IOb-Console: file received IOb-UART: file sent IOb-Bootloader: Restart CPU to run user program... diff --git a/hardware/simulation/test.expected b/hardware/simulation/test.expected index afa4f534d..7a05793ad 100644 --- a/hardware/simulation/test.expected +++ b/hardware/simulation/test.expected @@ -27,7 +27,7 @@ IOb-Bootloader: connected! IOb-UART: requesting to receive file IOb-Console: got file send request IOb-Console: file name b'firmware.bin' -IOb-Console: file of size 19052 bytes +IOb-Console: file of size 19084 bytes 0 % 10 % 20 % @@ -45,7 +45,7 @@ IOb-Bootloader: Loading firmware... IOb-UART: requesting to send file IOb-Console: got file receive request IOb-Console: file name b's_fw.bin' -IOb-Console : file size: 19052 bytes +IOb-Console : file size: 19084 bytes 0 % 10 % 20 % @@ -121,7 +121,7 @@ IOb-Bootloader: program to run from DDR IOb-UART: requesting to receive file IOb-Console: got file send request IOb-Console: file name b'firmware.bin' -IOb-Console: file of size 19212 bytes +IOb-Console: file of size 19244 bytes 0 % 10 % 20 % @@ -139,7 +139,7 @@ IOb-Bootloader: Loading firmware... IOb-UART: requesting to send file IOb-Console: got file receive request IOb-Console: file name b's_fw.bin' -IOb-Console : file size: 19212 bytes +IOb-Console : file size: 19244 bytes 0 % 10 % 20 % From 584ba4eac6e66a4153bac8693b8ce9148af736ba Mon Sep 17 00:00:00 2001 From: P-Miranda Date: Fri, 8 Apr 2022 18:41:59 +0100 Subject: [PATCH 10/10] update(UART) --- submodules/UART | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/UART b/submodules/UART index 1127efdf9..7cd3dc144 160000 --- a/submodules/UART +++ b/submodules/UART @@ -1 +1 @@ -Subproject commit 1127efdf91f6281a161d0db145e1dcabf01ce593 +Subproject commit 7cd3dc144859d5d4b2ac1dcf22faf136318b16e6