From 1c4d4c7fa988b46088f1fe13a49eb5e919007ad7 Mon Sep 17 00:00:00 2001 From: YRabbit Date: Tue, 25 Jun 2024 09:37:19 +1000 Subject: [PATCH] Describe the BSRAM regs in GW1NR-9C and GW2AR-18C Tangnano9k and Tangnano20k have problems with internal registers at the BSRAM output. Here we describe a solution that Gowin uses and which we will repeat in the near future. Signed-off-by: YRabbit --- doc/bsram-fix.md | 11 ++++++++++- doc/fig/sp-rmode-1-9c-20c.dia | Bin 0 -> 2717 bytes doc/fig/sp-rmode-1-9c-20c.png | Bin 0 -> 14015 bytes 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 doc/fig/sp-rmode-1-9c-20c.dia create mode 100644 doc/fig/sp-rmode-1-9c-20c.png diff --git a/doc/bsram-fix.md b/doc/bsram-fix.md index 14764d9..05fd3a8 100644 --- a/doc/bsram-fix.md +++ b/doc/bsram-fix.md @@ -40,7 +40,16 @@ One more note for the future - if these additional things are intended to correc ![READ_MODE=1'b0, WRITE_MODE=2'b10](fig/sp-rmode-1-wmode-10.png) +<<<<<<< HEAD + +### Tangnano9k and Tangnano20k +For chips on these boards, no new elements are formed around the BSRAM, that is, we can conclude that whatever was broken in the previous families was fixed here. However, now the built-in output registers only work with 32 or 36 bits - with a different bit size, the internal registers are disabled (read mode is forced to switch to 1'b0 bypass) and external DFFs are added. + +Which type is added, DFFCE or DFFRE, is determined by the SYNC parameter. + +![Tangnano9k and Tangnano20k with READ_MODE=1'b1](fig/sp-rmode-1-9c-20c.png) + + # TODO - - Explore SP in Tangnano9k and Tangnano20k - Explore DPB, SDPB and pROM diff --git a/doc/fig/sp-rmode-1-9c-20c.dia b/doc/fig/sp-rmode-1-9c-20c.dia new file mode 100644 index 0000000000000000000000000000000000000000..e2eaac0e78e91b9e71f610ab51b467c88590ee5a GIT binary patch literal 2717 zcmV;O3S#viiwFP!000021MOYga@$4{efL+e=vM`t`z4H=avZz1D%o<@_SSCYMFoj4 zg$+cgKuEG)_G|JR*>CVCZ4W?7B5ouu!xgflD!ELmIcH|nedbJ0WAxqkU#_CbZIG

`^WNrNKTVVH{3Z=1EB`7uou2y_ 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 XMg9W5mx+J%>cxKnj;lv6FOL8K_6svh literal 0 HcmV?d00001 diff --git a/doc/fig/sp-rmode-1-9c-20c.png b/doc/fig/sp-rmode-1-9c-20c.png new file mode 100644 index 0000000000000000000000000000000000000000..fff3bbb90f4a53bf6d9ecbebfd4f9049c08f9434 GIT binary patch literal 14015 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