From ec3d1b135c4b2519e02d81c6e2ffdbb4f2f14599 Mon Sep 17 00:00:00 2001 From: Tim Tran Date: Sat, 30 May 2026 18:45:05 -0400 Subject: [PATCH 1/6] gowin project setup --- firmware/devices/tang_nano_20k/.gitignore | 47 ++++++++++++++++++ .../asl_glove/asl_glove.gprj | 8 +++ .../asl_glove/asl_glove.gprj.user | 16 ++++++ firmware/devices/tang_nano_20k/gowin_setup.md | 25 ++++++++++ .../wrist_board-2026-05-25_022425.zip | Bin 0 -> 141714 bytes 5 files changed, 96 insertions(+) create mode 100644 firmware/devices/tang_nano_20k/.gitignore create mode 100644 firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj create mode 100644 firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj.user create mode 100644 firmware/devices/tang_nano_20k/gowin_setup.md create mode 100644 hardware/wrist_board/wrist_board-backups/wrist_board-2026-05-25_022425.zip diff --git a/firmware/devices/tang_nano_20k/.gitignore b/firmware/devices/tang_nano_20k/.gitignore new file mode 100644 index 0000000..72c94fe --- /dev/null +++ b/firmware/devices/tang_nano_20k/.gitignore @@ -0,0 +1,47 @@ +# Gowin EDA Generated Files +*.jou +*.log +*.str +*.pb +*.wdb +*.tr +*.rpt +*.pwr +*.pnr +*.lock +*.lck +*.db +*.db9 + +# Gowin EDA Build Folders +impl/ +syn/ +sim/ +simulation/ +.ipcache/ + +# HLS Build Folders +solution*/ +csim/ +cosim/ + +# Gowin IP Core Generated Output +# Keep .ipc config files but ignore generated HDL +src/ipcore/ +ip/*/ + +# Bitstreams — KEEP for flashing without Gowin +# .fs files are committed so team can flash +# directly without running full synthesis +# Uncomment the line below to ignore them instead +# *.fs + +# OS / Editor Junk +.DS_Store +Thumbs.db +.vscode/ +*.swp + +# Temporary Files +*.tmp +*.bak \ No newline at end of file diff --git a/firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj b/firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj new file mode 100644 index 0000000..3b6fed8 --- /dev/null +++ b/firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj @@ -0,0 +1,8 @@ + + + + + 5 + gw2ar18-000 + + diff --git a/firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj.user b/firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj.user new file mode 100644 index 0000000..f8205c7 --- /dev/null +++ b/firmware/devices/tang_nano_20k/gowin_eda_project/asl_glove/asl_glove.gprj.user @@ -0,0 +1,16 @@ + + + + 1.0 + + + + + + + + + + 000000ff00000001fd00000002000000000000014100000675fc0200000001fc00000041000006750000000000fffffffaffffffff0200000003fb00000030004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00440065007300690067006e0100000000ffffffff0000000000000000fb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00500072006f00630065007300730100000000ffffffff0000000000000000fb00000036004600700067006100500072006f006a006500630074002e00500061006e0065006c002e0048006900650072006100720063006800790100000000ffffffff00000000000000000000000300000f000000012cfc0100000001fc0000000000000f00000000b900fffffffa000000010100000002fb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00470065006e006500720061006c0100000000ffffffff0000007700fffffffb0000002e004600700067006100500072006f006a006500630074002e00500061006e0065006c002e004900730073007500650100000000ffffffff000000b900ffffff00000db90000067500000004000000040000000800000008fc000000010000000200000004000000220043006f00720065002e0054006f006f006c006200610072002e00460069006c00650100000000ffffffff0000000000000000000000220043006f00720065002e0054006f006f006c006200610072002e004500640069007401000000b4ffffffff0000000000000000000000240043006f00720065002e0054006f006f006c006200610072002e0054006f006f006c00730100000190ffffffff0000000000000000000000280043006f00720065002e0054006f006f006c006200610072002e00500072006f00630065007300730100000279ffffffff0000000000000000 + + diff --git a/firmware/devices/tang_nano_20k/gowin_setup.md b/firmware/devices/tang_nano_20k/gowin_setup.md new file mode 100644 index 0000000..460d7a4 --- /dev/null +++ b/firmware/devices/tang_nano_20k/gowin_setup.md @@ -0,0 +1,25 @@ +# Inital Setup for Gowin EDA + +## Step 1 +Register for Gowin account + +## Step 2 + +Download Gowin EDA online: https://www.gowinsemi.com/en/support/download_eda/ +Project version: 1.9.12.02_SP2 (64-bit) build(85219) + +## Step 3 Apply for license online + +Apply for license online: https://www.gowinsemi.com/en/support/license/ +Just use your own name and email +You should get an email with the license + +## Step 4 + +Install Gowin EDA and Programmer +You shoud have the option for both in the installer +Put the license you downloaded in the same folder + +## Step 5 + +Reload Gowin, open the project folder, and you should be good to go! \ No newline at end of file diff --git a/hardware/wrist_board/wrist_board-backups/wrist_board-2026-05-25_022425.zip b/hardware/wrist_board/wrist_board-backups/wrist_board-2026-05-25_022425.zip new file mode 100644 index 0000000000000000000000000000000000000000..dd7a170517000970b60b102469841f48c3321763 GIT binary patch literal 141714 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%0D#Zod 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