From 62b2c48b329aa7eb86ee9608e738bee76b820026 Mon Sep 17 00:00:00 2001 From: Romain Dolbeau Date: Sun, 17 Apr 2022 11:25:48 +0200 Subject: [PATCH] update to first tested version --- Pictures/NuBusFPGA.jpg | Bin 0 -> 255178 bytes README.md | 2 +- .../ConsoleTest/.AppleDouble/.Parent | Bin 0 -> 741 bytes .../ConsoleTest/.AppleDouble/ConsoleTest | Bin 0 -> 741 bytes .../ConsoleTest/.AppleDouble/HelloWorld.c | Bin 0 -> 1169 bytes .../ConsoleTest/ConsoleTest | Bin 0 -> 64914 bytes .../ConsoleTest Data/.AppleDouble/.Parent | Bin 0 -> 741 bytes .../.AppleDouble/68K Std C Console.tdm | Bin 0 -> 1027 bytes .../.AppleDouble/CW Settings.stm | Bin 0 -> 741 bytes .../ConsoleTest Data/68K Std C Console.tdm | Bin 0 -> 32252 bytes .../ConsoleTest Data/CW Settings.stm | Bin 0 -> 2103 bytes .../ConsoleTest/HelloWorld.c | 1 + nubus-to-ztex-gateware/DeclROM/Makefile | 13 +- .../DeclROM/NuBusFPGADrvr.h | 22 +- .../DeclROM/NuBusFPGADrvr_Ctrl.c | 4 +- .../DeclROM/NuBusFPGADrvr_OpenClose.c | 11 +- .../DeclROM/NuBusFPGADrvr_Status.c | 4 +- .../DeclROM/NuBusFPGAPrimaryInit.s | 106 +--- .../DeclROM/NuBusFPGAPrimaryInit_Primary.c | 100 ++++ .../DeclROM/NuBusFPGASecondaryInit.s | 38 ++ nubus-to-ztex-gateware/DeclROM/goblinfb.zip | Bin 0 -> 7605 bytes nubus-to-ztex-gateware/DeclROM/vid_decl_rom.s | 19 +- nubus-to-ztex-gateware/DepVideoEqu.a | 1 + nubus-to-ztex-gateware/NuBusFPGADrvr.a | 0 nubus-to-ztex-gateware/NuBusFPGAPrimaryInit.a | 1 + .../NuBusFPGASecondaryInit.a | 0 nubus-to-ztex-gateware/do | 2 +- nubus-to-ztex-gateware/fb_dma.py | 18 +- nubus-to-ztex-gateware/fb_video.py | 44 +- nubus-to-ztex-gateware/goblin_fb.py | 500 +++++++++++++----- nubus-to-ztex-gateware/nubus.py | 53 +- nubus-to-ztex-gateware/nubus.v | 235 +++++--- nubus-to-ztex-gateware/nubus_arbiter.v | 14 +- nubus-to-ztex-gateware/nubus_cpld.ucf | 2 +- nubus-to-ztex-gateware/nubus_cpld.v | 30 +- nubus-to-ztex-gateware/nubus_cpu_wb.py | 32 ++ .../nubus_fpga_V1_0_timings.xdc | 130 +++++ nubus-to-ztex-gateware/nubus_master_tst.py | 55 ++ nubus-to-ztex-gateware/nubus_mem_wb.py | 26 +- nubus-to-ztex-gateware/nubus_to_fpga_soc.py | 107 ++-- .../post_process_timings.sh | 15 + nubus-to-ztex-gateware/rom.a | 1 + nubus-to-ztex-gateware/sdram_init.py | 139 +++++ nubus-to-ztex-gateware/slave_tb.sv | 85 ++- nubus-to-ztex-gateware/ztex213_nubus.py | 4 +- ...27034_seeed_dfareporta172464820220211.xlsx | Bin 0 -> 196178 bytes nubus-to-ztex/691037.pdf | Bin 0 -> 119566 bytes nubus-to-ztex/N2Z_backplate.scad | 158 ++++++ nubus-to-ztex/dfa_reply.txt | 9 + nubus-to-ztex/nubus-to-ztex-B.Cu.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-Edge.Cuts.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-F.Cu.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-F.Mask.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-F.Paste.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-F.SilkS.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-In1.Cu.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-In2.Cu.gbr | 4 +- nubus-to-ztex/nubus-to-ztex-NPTH-drl_map.ps | 2 +- nubus-to-ztex/nubus-to-ztex-NPTH.drl | 2 +- nubus-to-ztex/nubus-to-ztex-PTH-drl_map.ps | 198 +++---- nubus-to-ztex/nubus-to-ztex-PTH.drl | 30 +- nubus-to-ztex/nubus-to-ztex-bottom.pos | 2 +- nubus-to-ztex/nubus-to-ztex-drl.rpt | 2 +- nubus-to-ztex/nubus-to-ztex-top.pos | 2 +- nubus-to-ztex/nubus-to-ztex.kicad_pcb | 15 +- nubus-to-ztex/nubus-to-ztex.kicad_pcb-bak | 15 +- nubus-to-ztex/nubus-to-ztex.rpt | 2 +- nubus-to-ztex/nubus-to-ztex.xml | 2 +- nubus-to-ztex/nubus-to-ztex.zip | Bin 847313 -> 910676 bytes nubus-to-ztex/pkg.sh | 4 +- nubus-to-ztex/signals.xlsx | Bin 58674 -> 61092 bytes 71 files changed, 1684 insertions(+), 605 deletions(-) create mode 100644 Pictures/NuBusFPGA.jpg create mode 100644 nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/.Parent create mode 100644 nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/ConsoleTest create mode 100644 nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/HelloWorld.c create mode 100644 nubus-to-ztex-gateware/ConsoleTest/ConsoleTest create mode 100644 nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/.Parent create mode 100644 nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/68K Std C Console.tdm create mode 100644 nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/CW Settings.stm create mode 100644 nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/68K Std C Console.tdm create mode 100644 nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/CW Settings.stm create mode 100644 nubus-to-ztex-gateware/ConsoleTest/HelloWorld.c create mode 100644 nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit_Primary.c create mode 100644 nubus-to-ztex-gateware/DeclROM/NuBusFPGASecondaryInit.s create mode 100644 nubus-to-ztex-gateware/DeclROM/goblinfb.zip create mode 100755 nubus-to-ztex-gateware/DepVideoEqu.a create mode 100644 nubus-to-ztex-gateware/NuBusFPGADrvr.a create mode 100644 nubus-to-ztex-gateware/NuBusFPGAPrimaryInit.a create mode 100644 nubus-to-ztex-gateware/NuBusFPGASecondaryInit.a create mode 100644 nubus-to-ztex-gateware/nubus_cpu_wb.py create mode 100644 nubus-to-ztex-gateware/nubus_fpga_V1_0_timings.xdc create mode 100644 nubus-to-ztex-gateware/nubus_master_tst.py create mode 100755 nubus-to-ztex-gateware/post_process_timings.sh create mode 100644 nubus-to-ztex-gateware/rom.a create mode 100644 nubus-to-ztex-gateware/sdram_init.py create mode 100644 nubus-to-ztex/1727034_seeed_dfareporta172464820220211.xlsx create mode 100644 nubus-to-ztex/691037.pdf create mode 100644 nubus-to-ztex/N2Z_backplate.scad create mode 100644 nubus-to-ztex/dfa_reply.txt diff --git a/Pictures/NuBusFPGA.jpg b/Pictures/NuBusFPGA.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b63269e15303aa10ef12ca2e825e2c7437de5b3 GIT binary patch literal 255178 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�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
9%q9k2CXZ%r|AEvr%5-Uj?D!D>? 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index a2de52d..9540115 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,4 @@ The goal of this repository is to be able to interface a modern (2021 era) [FPGA ## Current status -Early draft version, this has not been built or tested. +First prototype is working, implements a basic single-resolution, 8-bits only framebuffer over HDMI or VGA. diff --git a/nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/.Parent b/nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/.Parent new file mode 100644 index 0000000000000000000000000000000000000000..81ea9cacd614a0481a73018822039f393c06da07 GIT binary patch literal 741 zcmZQz6=P>$V!#BvKp~(w(^IGvGmzc}#N0s4!oa||6)MgFR8tFN3ji@EklhQU6@VD1 zj_Dwf2Ff!4&0>P7=L51g0>yx4Fz^G}YeDP=7uPT#`y`Of(ctOl4`g2ivx6i3fb5$P zc32&d{Se4zan8>x&d*5=Ni8nPNmVej@CFKwf*}_Izn;3LYnH7`ZveVnvuyDpCU%BS nW(lS~W>Cs&grv&D4k+FdMd2ZF^r38%rUWo+{{6>^P$44#Yi%T5 literal 0 HcmV?d00001 diff --git a/nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/ConsoleTest b/nubus-to-ztex-gateware/ConsoleTest/.AppleDouble/ConsoleTest new file mode 100644 index 0000000000000000000000000000000000000000..86fdcdb94da06049a6bdafe88f6376993de336d2 GIT binary patch literal 741 zcmZQz6=P>$V!#BvKp~(w(^IGvGmzc}#N0s4!oa||6)MgFR8tFN3ji@EklhQU6@VD1 zj_Dwf2Ff!4&0>P7=L51g0>yx4Fz^G}YeDP=7uPT#`y`Of(ctOl4`g2ivx6i3fb5$P zc32&d{Se4zan8>x&d*5=Ni8nPNmVej@Yc&sE&xi5f*}h+yHd7X4&FH nzP$V!#BvKp~(w(^Ccp#x+1TGZ1eBVjdu70g7z}(jdSAR8tG21%Q|n$nFKw z3P8*aWFG|5KzRnBSxhkXd_eX_pcv2$27VxWEr{LV;u;2Ip9Hcw8a(~{f$WQ5c5tL0 zkbM)v4yyyQ9|GAd9;rDw`QiCRIVpO{K>jEgnj!G5F7<_G*{<>ipz}4$79R?6jR7hgOG2ylM_%(i}@`gR+-;}**+lmFn<8E!SMnBmYPE* literal 0 HcmV?d00001 diff --git a/nubus-to-ztex-gateware/ConsoleTest/ConsoleTest b/nubus-to-ztex-gateware/ConsoleTest/ConsoleTest new file mode 100644 index 0000000000000000000000000000000000000000..f3ef1bbbd97dd664ea2d4b6568549b419480d7c4 GIT binary patch literal 64914 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 literal 0 HcmV?d00001 diff --git a/nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/.Parent b/nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/.Parent new file mode 100644 index 0000000000000000000000000000000000000000..a9bcbe55ed4e6a361c390f964e63d60463633114 GIT binary patch literal 741 zcmZQz6=P>$V!#BvKp~(w(^IGvGmzc}!~#If!oa||6)MgFR8tET=LE8QfougJ<_5A4 z0%@Q;1JEocn0h`Sdm~T`Xa)m6ki8bfZg6o81F}y7*&Gd?e*QrAMKC)!(htbK31NrT z0of0MY!>JIyyEVMnpjo!~FbFpQoerXj@PQF7HTqBq>!t)S MYySPmuw-Eh0C2q_eE$V!#BvKp~(w(^CcpMmZpx8Hl$5u_zF;0L8WfX%OH5s;LFi0zk|OWcLDT z1t8`IvJV1jpgaT6EGC$GJ|KG|Pz-1W13!?x7Q}9FaSa2qPXgH-4W54fK=ws2J2=u0 z$i4|-ht&bu4}okJGYfBp;F1&tX9ef{yyE3DY literal 0 HcmV?d00001 diff --git a/nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/CW Settings.stm b/nubus-to-ztex-gateware/ConsoleTest/ConsoleTest Data/.AppleDouble/CW Settings.stm new file mode 100644 index 0000000000000000000000000000000000000000..6ae6b8e2f1edb19b04a09371b49e0f203713ce61 GIT binary patch literal 741 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 * */ #include #include /* #include */ #include #include typedef int int32_t; typedef unsigned int uint32_t; struct nubusfpga_leds_softc { uint32_t slotid; }; struct nubusfpga_leds_softc sc; uint32_t csr_read_simple(uint32_t offset); void csr_write_simple(uint32_t value, uint32_t offset); uint32_t rev(uint32_t d); uint32_t csr_read_simple(uint32_t offset) { uint32_t *addr; addr = (uint32_t*)(((0x000000F0 | sc.slotid) << 24) + offset); return *addr; } void csr_write_simple(uint32_t value, uint32_t offset) { uint32_t *addr; addr = (uint32_t*)(((0x000000F0 | sc.slotid) << 24) + offset); *addr = value; } uint32_t rev(uint32_t d) { uint32_t r; r = 0; r |= (d & 0x80808080) >> 7; r |= (d & 0x40404040) >> 5; r |= (d & 0x20202020) >> 3; r |= (d & 0x10101010) >> 1; r |= (d & 0x08080808) << 1; r |= (d & 0x04040404) << 3; r |= (d & 0x02020202) << 5; r |= (d & 0x01010101) << 7; return r; } #define inline #include "nubusfpga_csr_leds.h" #undef inline int main(void) { uint32_t x1 = 0xDEADBEEF, x2 = 0xDEADBEEF; sc.slotid = 0x9; printf("Test Application for NuBusFPGA\n\n"); printf("Machine settings: char %d short %d int %d long %d long long %d\n", sizeof(char), sizeof(short int), sizeof(int), sizeof(long int), sizeof(long long int)); printf("Global access struct is located in 0x%08X\n", &sc); printf("Slot id hardwired to 0x%x, check the ID on the card and the ID allocation for the host.\n", sc.slotid); printf("MMU Mode is: %s\n", (int)GetMMUMode() ? "32-bits" : "24-bits"); printf("Checking HW access by reading Ethernet ROM...\n"); x1 = *(uint32_t*)0x50F08000; x2 = *(uint32_t*)0x50F08004; printf("I got 0x%08x 0x%08x (rev: 0x%08x 0x%08x)\n", x1, x2, rev(x1), rev(x2)); printf("Checking if we see our PROM...\n"); x1 = (0xF0000000 | (sc.slot_id<<24) | 0x00FFFFFC); x2 = *(uint32_t*)x1; printf("I got 0x%08x for 0x%08x (rev: 0x%08x for 0x%08x)\n", x2, x1, rev(x2), rev(x1)); return 0; } \ No newline at end of file diff --git a/nubus-to-ztex-gateware/DeclROM/Makefile b/nubus-to-ztex-gateware/DeclROM/Makefile index 7336d8f..7b1518a 100644 --- a/nubus-to-ztex-gateware/DeclROM/Makefile +++ b/nubus-to-ztex-gateware/DeclROM/Makefile @@ -8,15 +8,15 @@ PROCESS_ROM=${NS816DECLROMDIR}/process_rom APPLEINCS=${NS816DECLROMDIR}/atrap.inc ${NS816DECLROMDIR}/declrom.inc ${NS816DECLROMDIR}/globals.inc -HRES=1152 -VRES=870 +HRES=1920 +VRES=1080 -CSRC=NuBusFPGADrvr_OpenClose.c NuBusFPGADrvr_Ctrl.c NuBusFPGADrvr_Status.c +CSRC=NuBusFPGADrvr_OpenClose.c NuBusFPGADrvr_Ctrl.c NuBusFPGADrvr_Status.c NuBusFPGAPrimaryInit_Primary.c CSRC_ASM=${CSRC:.c=.s} all: vid_decl_rom.bin vid_decl_rom.srec -vid_decl_rom.o: vid_decl_rom.s NuBusFPGAPrimaryInit.s NuBusFPGADrvr.s ${APPLEINCS} ${CSRC_ASM} DepVideo.inc +vid_decl_rom.o: vid_decl_rom.s NuBusFPGAPrimaryInit.s NuBusFPGAPrimaryInit_Primary.s NuBusFPGASecondaryInit.s NuBusFPGADrvr.s ${APPLEINCS} ${CSRC_ASM} DepVideo.inc rm -f res.inc echo -e "HRES=${HRES}\nVRES=${VRES}\n" | tee res.inc ${AS} -march=68020 -mcpu=68020 -I${NS816DECLROMDIR} $< -o $@ -a > vid_decl_rom.l @@ -36,6 +36,11 @@ NuBusFPGADrvr_Status.s: NuBusFPGADrvr_Status.c NuBusFPGADrvr.h sed -i -e 's/^\([^a-zA-Z0-9_]*\.globl.*\)/# --- \1/' $@ sed -i -e 's/\.\(L[0-9][0-9]*\)/.Status_\1/g' $@ +NuBusFPGAPrimaryInit_Primary.s: NuBusFPGAPrimaryInit_Primary.c NuBusFPGADrvr.h + ${CC} -march=68020 -mcpu=68020 -O2 $< -S -o $@ -DHRES=${HRES} -DVRES=${VRES} + sed -i -e 's/^\([^a-zA-Z0-9_]*\.globl.*\)/# --- \1/' $@ + sed -i -e 's/\.\(L[0-9][0-9]*\)/.PIPrimary_\1/g' $@ + vid_decl_rom.srec: vid_decl_rom.o ${OBJCOPY} $^ $@ --input-target=elf32-m68k --output-target=srec diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr.h b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr.h index 0fffce0..57cdc0b 100644 --- a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr.h +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr.h @@ -19,17 +19,30 @@ #define GOBOFB_BASE 0x00900000 +//#define GOBOFB_REG_BASE 0x00900000 +//#define GOBOFB_MEM_BASE 0x00000000 /* remapped to 0x8f800000 by HW */ + #define GOBOFB_MODE 0x0 #define GOBOFB_VBL_MASK 0x4 -//#define GOBOFB_VBL_DIS 0x8 +#define GOBOFB_VIDEOCTRL 0x8 #define GOBOFB_INTR_CLEAR 0xc #define GOBOFB_RESET 0x10 #define GOBOFB_LUT_ADDR 0x14 #define GOBOFB_LUT 0x18 -#define GOBOFB_DEBUG 0x20 +#define GOBOFB_DEBUG 0x1c +//#define GOBOFB_CURSOR_LUT 0x20 +//#define GOBOFB_CURSOR_XY 0x24 +//#define GOBOFB_MASK_BASE 0x80 +//#define GOBOFB_BITS_BASE 0x100 #define GOBOFB_INTR_VBL 0x1 +#define GOBOFB_MODE_1BIT 0x0 +#define GOBOFB_MODE_2BIT 0x1 +#define GOBOFB_MODE_4BIT 0x2 +#define GOBOFB_MODE_8BIT 0x3 +//#define GOBOFB_MODE_24BIT 0x10 + struct MyGammaTbl { short gVersion; /*gamma version number*/ short gType; /*gamma data type*/ @@ -71,4 +84,9 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce); OSErr cNuBusFPGAOpen(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce); OSErr cNuBusFPGAClose(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce); +/* primary init */ +UInt32 Primary(SEBlock* block); + +#define Check32QDTrap 0xAB03 + #endif diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Ctrl.c b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Ctrl.c index 4896d31..8292dc0 100644 --- a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Ctrl.c +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Ctrl.c @@ -104,8 +104,8 @@ OSErr cNuBusFPGACtl(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce) short ret = -1; char busMode = 1; - write_reg(dce, GOBOFB_DEBUG, 0xBEEF0001); - write_reg(dce, GOBOFB_DEBUG, pb->csCode); + /* write_reg(dce, GOBOFB_DEBUG, 0xBEEF0001); */ + /* write_reg(dce, GOBOFB_DEBUG, pb->csCode); */ #if 1 switch (pb->csCode) { diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_OpenClose.c b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_OpenClose.c index 0d2dc57..4933408 100644 --- a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_OpenClose.c +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_OpenClose.c @@ -3,8 +3,8 @@ OSErr cNuBusFPGAOpen(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce) { OSErr ret = noErr; - write_reg(dce, GOBOFB_DEBUG, 0xBEEF0000); - write_reg(dce, GOBOFB_DEBUG, (unsigned long)dce->dCtlDevBase); + /* write_reg(dce, GOBOFB_DEBUG, 0xBEEF0000); */ + /* write_reg(dce, GOBOFB_DEBUG, (unsigned long)dce->dCtlDevBase); */ if (dce->dCtlStorage == nil) { @@ -47,6 +47,10 @@ OSErr cNuBusFPGAOpen(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce) linearGamma(*dStoreHdl); + write_reg(dce, GOBOFB_MODE, GOBOFB_MODE_8BIT); + + write_reg(dce, GOBOFB_VIDEOCTRL, 1); + ret = changeIRQ(dce, 1, openErr); } @@ -62,7 +66,8 @@ OSErr cNuBusFPGAClose(IOParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce) if (dce->dCtlStorage != nil) { ret = changeIRQ(dce, 0, openErr); - DisposePtr((*(NuBusFPGADriverGlobalsHdl)dce->dCtlStorage)->siqel); + write_reg(dce, GOBOFB_VIDEOCTRL, 0); + DisposePtr((Ptr)(*(NuBusFPGADriverGlobalsHdl)dce->dCtlStorage)->siqel); DisposeHandle(dce->dCtlStorage); dce->dCtlStorage = nil; } diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Status.c b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Status.c index 918d564..f36a17f 100644 --- a/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Status.c +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGADrvr_Status.c @@ -38,8 +38,8 @@ OSErr cNuBusFPGAStatus(CntrlParamPtr pb, /* DCtlPtr */ AuxDCEPtr dce) NuBusFPGADriverGlobalsHdl dStoreHdl = (NuBusFPGADriverGlobalsHdl)dce->dCtlStorage; NuBusFPGADriverGlobalsPtr dStore = *dStoreHdl; short ret = -1; - write_reg(dce, GOBOFB_DEBUG, 0xBEEF0002); - write_reg(dce, GOBOFB_DEBUG, pb->csCode); + /* write_reg(dce, GOBOFB_DEBUG, 0xBEEF0002); */ + /* write_reg(dce, GOBOFB_DEBUG, pb->csCode); */ #if 1 switch (pb->csCode) { diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit.s b/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit.s index 54ede0f..74537da 100644 --- a/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit.s +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit.s @@ -2,102 +2,12 @@ .byte sExec2 /* Code revision (Primary init) */ .byte sCPU68020 /* CPU type is 68020 */ .short 0 /* Reserved */ - .long Begin-. /* Offset to code. */ + .long BeginPrimary-. /* Offset to code. */ -Begin: - movew #1,%A0@(seStatus) /* VendorStatus <- 1 {Code was executed} */ - movel %A0,%A3 /* save param block {A0 is destroyed} */ - -/* Turn the slot number into a base address. */ - moveq #0,%D0 /* D0 <- 00000000 */ - MOVE.B %A0@(seSlot),%D0 /* D0 <- 0000000s */ - LSL.W #4,%D0 /* D0 <- 000000s0 */ - /* OR.B %A0@(seSlot),%D0 /* D0 <- 000000ss */ - OR.W #0xF00,%D0 /* D0 <- 00000Fss */ - SWAP %D0 /* D0 <- 0Fss0000 */ - LSL.L #4,%D0 /* D0 <- Fss00000 */ - movel %D0,%A2 /* A2 <- Base address to the slot. */ - - -/* Reset the hardware. */ -/* DO YOUR RESET STUFF HERE */ - -/* Set mode to one bit per pixel. ; */ -/* DO YOUR MODE SETTING HERE */ - -/* Disable interrupts. ; */ - movel %A2,%A0 /* get slot base */ - ADD.L #0x00900004,%A0 /* Adjust the base */ /* FIXME */ - CLR.B (%A0) /* Disable interrupt from card */ - -/* set the color table to black and white */ -/* SET THE TABLE HERE */ - - -/* The Apple Video card configuration ROM has two video sResources conforming to the */ -/* two possible different memory configurations. Now we want to figure out which */ -/* of the configurations we have, and delete the incorrect video sResource from */ -/* the slot resource table. */ -/* */ -/* size the RAM on the video card. To do this, we look for a nice longword in the second */ -/* half of the frame buffer array that doesn't show up on the screen. I've selected the */ -/* last longword of the first scanline that is a multiple of 8 in the second RAM bank (line 264). */ -/* This alignment guarantees that this memory is off the right edge in all pixel depths */ -/* when the frame buffer base addr is on a normal page boundary. */ -/* */ -/* */ -/* */ -TestPos = (265*1024)-4 /* */ -TestPat = 0x4d434132 /* test bit pattern */ - - SUBA #smParamBlockSize,%SP /* make an SDM parameter block on stack */ - movel %SP,%A0 /* get pointer to parm block now */ - MOVE.B seSlot(%A3),spSlot(%A0) /* put slot in pBlock */ - CLR.B spExtDev(%A0) /* external device = 0 */ - -/* movel #TestPos,%D1 /* get offset in %D1 */ -/* movel #TestPat,(%A2,%D1.L) /* write to alleged RAM */ -/* movel #-1,-(%SP) /* write out some garbage to clear data lines */ -/* ADDQ #4,%SP /* and pitch it */ -/* movel (%A2,%D1.L),%D0 /* read pattern back */ -/* CMP.L #TestPat,%D0 /* did it stick? */ -/* BEQ.S ram /* if equal, we have ram */ -/* MOVE.B #sRsrc_Video8,spID(%A0) /* if not, remove 8-bit table */ -/* BRA.S noram -/*ram: -/* MOVE.B #sRsrc_Video4,spID(%A0) /* remove 4-bit table if we have ram */ -/*noram: - /* _sDeleteSRTRec */ /* remove the invalid entry */ -/* movel #SDeleteSRTRec,%d0 -/* _SlotManager -/* BNE.S done /* */ - MOVE #2,seStatus(%A3) /* mark the change */ -done: ADDA #smParamBlockSize,%SP /* clean up */ - -/* Clear video RAM to a nice gray */ - movel #0xAAAAAAAA,%D0 /* graypat1 := $AAAAAAAA */ - movel %D0,%D1 - NOT.L %D1 - - MOVE.W #defScrnRow,%D4 /* sRow := defScrnRow {Bytes per pixel line} */ - MOVE.W #defmBounds_Bs-1,%D3 /* sHei := defScrnHeight {Screen Height in pixels} */ - - movel %A2,%A1 /* init row pointer /* REPEAT */ -NxtRow: movel %A1,%A0 /* get next row */ - MOVE.W #defScrnRow/4-1,%D2 /* rowlongs := defScrnRow/4 - 1 {How many Longs there are} */ -NxtLong: movel %D0,(%A0)+ /* (%A0) := graypat(1/2) */ - DBF %D2,NxtLong /* UNTIL rowlongs < 0 */ - EXG %D0,%D1 /* graypat1 <-> graypat2 */ - ADD.W %D4,%A1 /* %A1 := %A1 + sRow */ - DBF %D3,NxtRow /* UNTIL sHei < 0 */ - -/* Exit */ -Exit: RTS /* Return */ - - -/* */ - -/* END PrimaryInit */ - - - +BeginPrimary: + MOVE.L %A0, -(%A7) + JSR Primary + MOVE.L (%A7)+, %a0 + rts + .include "NuBusFPGAPrimaryInit_Primary.s" + .text diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit_Primary.c b/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit_Primary.c new file mode 100644 index 0000000..06dd30b --- /dev/null +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGAPrimaryInit_Primary.c @@ -0,0 +1,100 @@ +#include "NuBusFPGADrvr.h" + +#include + +#define PRIM_WRITEREG(reg, val) \ + *((volatile UInt32*)(a32+GOBOFB_BASE+reg)) = (UInt32)val; + +UInt32 Primary(SEBlock* seblock) { + UInt32 a32 = 0xF0000000 | ((UInt32)seblock->seSlot << 24); + UInt32 a32_l0, a32_l1; + UInt32 a32_4p0, a32_4p1; + SpBlock spblock; + UInt8 pram[8]; + OSErr err; + UInt16 i,j; + char busMode; + UniversalProcPtr qd32ptr, unimpptr; + + busMode = 1; + SwapMMUMode ( &busMode ); // to32 // this likely won't work on older MacII ??? + + PRIM_WRITEREG(GOBOFB_VBL_MASK, 0);// disable interrupts + + /* PRIM_WRITEREG(GOBOFB_DEBUG, busMode);// trace */ + + /* grey the screen */ + a32_l0 = a32; + a32_l1 = a32 + HRES; + for (j = 0 ; j < VRES ; j+= 2) { + a32_4p0 = a32_l0; + a32_4p1 = a32_l1; + for (i = 0 ; i < HRES ; i += 4) { + *((UInt32*)a32_4p0) = 0xAAAAAAAA; + *((UInt32*)a32_4p1) = 0x55555555; + a32_4p0 += 4; + a32_4p1 += 4; + } + a32_l0 += 2*HRES; + a32_l1 += 2*HRES; + } + + SwapMMUMode ( &busMode ); // restore + + /* call SVersion to figure out if we have a recent SlotManager */ + //spblock.spSlot = seblock->seSlot; + //spblock.spExtDev = 0; + err = SVersion(&spblock); + + busMode = 1; + SwapMMUMode ( &busMode ); // to32 + if (err) { + /* DCDMF3 p178: if error, old slot manager*/ + /* PRIM_WRITEREG(GOBOFB_DEBUG, 0xFFFFFFFF);*/ + /* PRIM_WRITEREG(GOBOFB_DEBUG, err);*/ + } else { + /* DCDMF3 p178: new slot manager */ + /* PRIM_WRITEREG(GOBOFB_DEBUG, 0);*/ + /* PRIM_WRITEREG(GOBOFB_DEBUG, spblock.spResult);*/ + } + SwapMMUMode ( &busMode ); // restore + + /* check for 32-bits QuickDraw */ + qd32ptr = GetTrapAddress(Check32QDTrap); + unimpptr = GetTrapAddress(_Unimplemented); + + busMode = 1; + SwapMMUMode ( &busMode ); // to32 + if (qd32ptr == unimpptr) { + /* no 32QD */ + PRIM_WRITEREG(GOBOFB_DEBUG, 0xFFFFFFFF); + PRIM_WRITEREG(GOBOFB_DEBUG, unimpptr); + } else { + /* yes 32QD */ + PRIM_WRITEREG(GOBOFB_DEBUG, 0x00C0FFEE); + } + SwapMMUMode ( &busMode ); // restore + + /* check the content of the PRAM */ + spblock.spSlot = seblock->seSlot; + spblock.spResult = (UInt32)pram; + err = SReadPRAMRec(&spblock); + + busMode = 1; + SwapMMUMode ( &busMode ); // to32 + if (err) { + /* PRIM_WRITEREG(GOBOFB_DEBUG, 0xFFFFFFFF);*/ + /* PRIM_WRITEREG(GOBOFB_DEBUG, err);*/ + } else { + /* PRIM_WRITEREG(GOBOFB_DEBUG, 0xC0FFEE00);*/ + /* for (i = 0 ; i < 8 ; i++) */ + /* PRIM_WRITEREG(GOBOFB_DEBUG, pram[i]);*/ + } + SwapMMUMode ( &busMode ); // restore + + + seblock->seStatus = 1; + + return 0; +} + diff --git a/nubus-to-ztex-gateware/DeclROM/NuBusFPGASecondaryInit.s b/nubus-to-ztex-gateware/DeclROM/NuBusFPGASecondaryInit.s new file mode 100644 index 0000000..9f65184 --- /dev/null +++ b/nubus-to-ztex-gateware/DeclROM/NuBusFPGASecondaryInit.s @@ -0,0 +1,38 @@ + + .byte sExec2 /* Code revision (Primary init) */ + .byte sCPU68020 /* CPU type is 68020 */ + .short 0 /* Reserved */ + .long BeginSecondary-. /* Offset to code. */ + +BeginSecondary: + movew #1,%A0@(seStatus) /* VendorStatus <- 1 {Code was executed} */ + movel %A0,%A3 /* save param block */ + /* Set up a slot parameter block in %A0 */ + SUBA #smParamBlockSize,%SP /* make an SDM parameter block on stack */ + movel %SP,%A0 /* get pointer to parm block now */ + MOVE.B seSlot(%A3),spSlot(%A0) /* put slot in pBlock */ + CLR.B spExtDev(%A0) /* external device = 0 */ + + moveq #8,%D0 /* _sVersion ; find the Slot Manager version */ + .word 0xA06E /* _sVersion ; find the Slot Manager version */ + + MOVEL spResult(%A0),%D1 /* recover result */ + ADDA #smParamBlockSize,%SP /* drop the slot Parameter block */ + + moveq #0,%D0 /* D0 <- 00000000 */ + MOVEB %A3@(seSlot),%D0 /* D0 <- 0000000s */ + LSLW #4,%D0 /* D0 <- 000000s0 */ + /* OR.B %A3@(seSlot),%D0 /* D0 <- 000000ss */ + OR.W #0xF00,%D0 /* D0 <- 00000Fs0 */ + SWAP %D0 /* D0 <- 0Fs00000 */ + LSLL #4,%D0 /* D0 <- Fs000000 */ + MOVEAL %D0,%A1 + + /* param block in %A3, our HW (32-bits mode) in %A1 */ + addl #0x00900000, %A1 + movel #0x0f0f0f0f,%A1@(0x20) /* marker to qemu */ + movel %D1,%A1@(0x20) /*_sVersion spResult to Qemu */ + +ExitSecondary: + RTS /* Return */ + diff --git a/nubus-to-ztex-gateware/DeclROM/goblinfb.zip b/nubus-to-ztex-gateware/DeclROM/goblinfb.zip new file mode 100644 index 0000000000000000000000000000000000000000..a7b3a5d08e9faa661577f4b28b25cbf978194a40 GIT binary patch literal 7605 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 literal 0 HcmV?d00001 diff --git a/nubus-to-ztex-gateware/DeclROM/vid_decl_rom.s b/nubus-to-ztex-gateware/DeclROM/vid_decl_rom.s index 8a129e6..32cb4bb 100644 --- a/nubus-to-ztex-gateware/DeclROM/vid_decl_rom.s +++ b/nubus-to-ztex-gateware/DeclROM/vid_decl_rom.s @@ -20,7 +20,7 @@ _sRsrc_Board: DatLstEntry boardId,NuBusFPGAID /* board ID # (assigned by DTS) */ OSLstEntry primaryInit,_sPInitRec /* offset to PrimaryInit exec blk */ OSLstEntry vendorInfo,_VendorInfo /* offset to vendor info record */ - /* OSLstEntry SecondaryInit,_sSInitRec */ /* offset to SecondaryInit block */ + OSLstEntry secondaryInit,_sSInitRec /* offset to SecondaryInit block */ OSLstEntry sRsrcVidNames, _VModeName .long EndOfList @@ -40,14 +40,16 @@ _BoardName: _sPInitRec: .long _EndsPInitRec-_sPInitRec /* physical block size */ .include "NuBusFPGAPrimaryInit.s" /* the header/code */ + .text ALIGN 2 -_EndsPInitRec: +_EndsPInitRec: -/* _sSInitRec */ -/* .long _EndsSInitRec-_sSInitRec ; physical block size */ -/* INCLUDE "NuBusFPGASecondaryInit.a" ; the header/code */ -/* ALIGN 2 */ - /* _EndsSInitRec */ +_sSInitRec: + .long _EndsSInitRec-_sSInitRec /* physical block size */ + .include "NuBusFPGASecondaryInit.s" /* the header/code */ + .text + ALIGN 2 +_EndsSInitRec: ALIGN 2 _VendorInfo: @@ -183,7 +185,8 @@ _EndEBVParms: DeclROMDir: OSLstEntry 0, _sRsrcDir .long DeclRomEnd-_sRsrcDir /* Length should be 0x824 */ -DeclROMCRC: .long 0x0 /* TODO: calculate this */ +DeclROMCRC: + .long 0x0 /* TODO: calculate this */ .byte 1 /* Revision Level */ .byte appleFormat /* Apple Format */ .long testPattern /* magic TestPattern */ diff --git a/nubus-to-ztex-gateware/DepVideoEqu.a b/nubus-to-ztex-gateware/DepVideoEqu.a new file mode 100755 index 0000000..d6eb7ac --- /dev/null +++ b/nubus-to-ztex-gateware/DepVideoEqu.a @@ -0,0 +1 @@ +NuBusFPGAID EQU $BEEF defMinorBase EQU 0 ; beginning defMinorLength EQU $C0000 ; 768 KiB Pages8s EQU 1 ; no idea defmBounds_Ts EQU 0 defmBounds_Ls EQU 0 defmBounds_Bs EQU 480 defmBounds_Rs EQU 640 DrHwNuBusFPGA EQU $BEEF ; placeholder defmBaseOffset EQU 0 ; beginning, placeholder devVersion EQU 0 ; placeholder defmHRes EQU $480000 ;Horizontal Pixels/inch defmVRes EQU $480000 ;Vertical pixels/inch defmDevType EQU 0 ;0 = CLUTType defmPlaneBytes EQU 0 ;Offset from one plane to the next. SGammaResID EQU 0 RB8s EQU 640 ChunkyIndexed EQU 0 defVersion EQU 0 ;Version = 0 ROMSize EQU $1000 ;4K byte ROM \ No newline at end of file diff --git a/nubus-to-ztex-gateware/NuBusFPGADrvr.a b/nubus-to-ztex-gateware/NuBusFPGADrvr.a new file mode 100644 index 0000000..e69de29 diff --git a/nubus-to-ztex-gateware/NuBusFPGAPrimaryInit.a b/nubus-to-ztex-gateware/NuBusFPGAPrimaryInit.a new file mode 100644 index 0000000..a78c4f4 --- /dev/null +++ b/nubus-to-ztex-gateware/NuBusFPGAPrimaryInit.a @@ -0,0 +1 @@ + DC.B sExec2 ; code revision DC.B sCPU68020 ; CPU type is 68020 DC.W 0 ; reserved DC.L Begin1stInit-* ; offset to code WITH seBlock,spBlock Begin1stInit MOVE.W #1,seStatus(A0) ; assume a good return MOVE.L #$F0000000,D1 ; Dl <- F0000000 MOVE.B seSlot(A0),D0 ; get slot number BFINS D0,D1{4:4} ; Dl <- Fs000000 MOVE.L D1,A1 ; copy to address reg ;;; INITIALIZE SOME STUFF HERE SUBA #spBlockSize,SP ; make an spB10ck MOVE.L SP,A0 ; get pointer to parms MOVE.B D0,spSlot(A0) ; identify the slot CLR.B SpExtDev(A0) ; external device = 0 RTS ENDWITH \ No newline at end of file diff --git a/nubus-to-ztex-gateware/NuBusFPGASecondaryInit.a b/nubus-to-ztex-gateware/NuBusFPGASecondaryInit.a new file mode 100644 index 0000000..e69de29 diff --git a/nubus-to-ztex-gateware/do b/nubus-to-ztex-gateware/do index ed236e7..a20eb15 100644 --- a/nubus-to-ztex-gateware/do +++ b/nubus-to-ztex-gateware/do @@ -2,7 +2,7 @@ source /opt/Xilinx/Vivado/2020.1/settings64.sh export LD_LIBRARY_PATH=/opt/Xilinx/Vivado/2020.1/lib/lnx64.o/SuSE -python3 nubus_to_fpga_soc.py --build --csr-csv csr.csv --csr-json csr.json --variant=ztex2.13a --version=V1.0 --goblin --goblin-res 1280x1024@60Hz --sys-clk-freq 100e6 +python3 nubus_to_fpga_soc.py --build --csr-csv csr.csv --csr-json csr.json --variant=ztex2.13a --version=V1.0 --sys-clk-freq 100e6 --goblin --goblin-res 1920x1080@60Hz --hdmi ) 2>&1 | tee build_V1_0.log # --goblin --goblin-res 1280x1024@60Hz # --hdmi diff --git a/nubus-to-ztex-gateware/fb_dma.py b/nubus-to-ztex-gateware/fb_dma.py index 2ac5425..c343fe7 100644 --- a/nubus-to-ztex-gateware/fb_dma.py +++ b/nubus-to-ztex-gateware/fb_dma.py @@ -1,3 +1,5 @@ +from math import log2 + from migen import * from litedram.frontend.dma import LiteDRAMDMAReader; @@ -9,15 +11,21 @@ class LiteDRAMFBDMAReader(LiteDRAMDMAReader): def __init__(self, port, fifo_depth=16, default_base=0, default_length=0): LiteDRAMDMAReader.__init__(self = self, port = port, fifo_depth = fifo_depth, fifo_buffered = True, with_csr = False) - enable = self.enable = Signal(reset = 0) - base = self.base = Signal(self.port.address_width, reset = default_base) - offset = self.offset = Signal(self.port.address_width, reset = 0) - length = self.length = Signal(self.port.address_width, reset = default_length) + self.enable = Signal(reset = 0) + self.base = Signal(32, reset = default_base) + self.length = Signal(32, reset = default_length) + + shift = log2_int(self.port.data_width//8) + base = Signal(self.port.address_width) + length = Signal(self.port.address_width) + offset = Signal(self.port.address_width, reset = 0) + self.comb += base.eq(self.base[shift:]) + self.comb += length.eq(self.length[shift:]) fsm = FSM(reset_state="IDLE") fsm = ResetInserter()(fsm) self.submodules.fsm = fsm - self.comb += fsm.reset.eq(~enable) + self.comb += fsm.reset.eq(~self.enable) fsm.act("IDLE", NextValue(offset, 0), NextState("RUN"), diff --git a/nubus-to-ztex-gateware/fb_video.py b/nubus-to-ztex-gateware/fb_video.py index 1f78476..792ddea 100644 --- a/nubus-to-ztex-gateware/fb_video.py +++ b/nubus-to-ztex-gateware/fb_video.py @@ -12,12 +12,26 @@ from litex.build.io import SDROutput, DDROutput from litex.soc.cores.video import * +video_timing_hwcursor_layout = [ + # Synchronization signals. + ("hsync", 1), + ("vsync", 1), + ("de", 1), + ("hwcursor", 1), + ("hwcursorx", 5), + ("hwcursory", 5), + # Extended/Optional synchronization signals. + ("hres", hbits), + ("vres", vbits), + ("hcount", hbits), + ("vcount", vbits), +] # FB Video Timing Generator --------------------------------------------------------------------------- # Same as the normal one except (a) _enable isn't a CSR class FBVideoTimingGenerator(Module, AutoCSR): - def __init__(self, default_video_timings="800x600@60Hz"): + def __init__(self, default_video_timings="800x600@60Hz", hwcursor=False): # Check / Get Video Timings (can be str or dict) if isinstance(default_video_timings, str): try: @@ -31,7 +45,7 @@ class FBVideoTimingGenerator(Module, AutoCSR): self.video_timings = vt = default_video_timings # MMAP Control/Status Registers. - self._enable = Signal(reset = 0) + self.enable = Signal() # external control signal self._hres = CSRStorage(hbits, vt["h_active"]) self._hsync_start = CSRStorage(hbits, vt["h_active"] + vt["h_sync_offset"]) @@ -44,14 +58,19 @@ class FBVideoTimingGenerator(Module, AutoCSR): self._vscan = CSRStorage(vbits, vt["v_active"] + vt["v_blanking"]) # Video Timing Source - self.source = source = stream.Endpoint(video_timing_layout) + if (hwcursor): + self.source = source = stream.Endpoint(video_timing_hwcursor_layout) + _hwcursor_x = Signal(12) # 12 out of 16 is enough + _hwcursor_y = Signal(12) # 12 out of 16 is enough + self.hwcursor_x = Signal(12) + self.hwcursor_y = Signal(12) + self.specials += MultiReg(self.hwcursor_x, _hwcursor_x) + self.specials += MultiReg(self.hwcursor_y, _hwcursor_y) + else: + self.source = source = stream.Endpoint(video_timing_layout) # # # - # Resynchronize Enable to Video clock domain. - self.enable = enable = Signal() - self.specials += MultiReg(self._enable, enable) - # Resynchronize Horizontal Timings to Video clock domain. self.hres = hres = Signal(hbits) self.hsync_start = hsync_start = Signal(hbits) @@ -78,7 +97,7 @@ class FBVideoTimingGenerator(Module, AutoCSR): fsm = FSM(reset_state="IDLE") fsm = ResetInserter()(fsm) self.submodules.fsm = fsm - self.comb += fsm.reset.eq(~enable) + self.comb += fsm.reset.eq(~self.enable) fsm.act("IDLE", NextValue(hactive, 0), NextValue(vactive, 0), @@ -120,3 +139,12 @@ class FBVideoTimingGenerator(Module, AutoCSR): ) ) ) + + + if (hwcursor): + self.sync += source.hwcursor.eq((source.hcount >= _hwcursor_x) & + (source.hcount < (_hwcursor_x+32)) & + (source.vcount >= _hwcursor_y) & + (source.vcount < (_hwcursor_y+32))) + self.sync += source.hwcursorx.eq(_hwcursor_x - source.hcount) + self.sync += source.hwcursory.eq(_hwcursor_y - source.vcount) diff --git a/nubus-to-ztex-gateware/goblin_fb.py b/nubus-to-ztex-gateware/goblin_fb.py index 06a8777..bb957d2 100644 --- a/nubus-to-ztex-gateware/goblin_fb.py +++ b/nubus-to-ztex-gateware/goblin_fb.py @@ -8,6 +8,8 @@ from litex.soc.cores.code_tmds import TMDSEncoder from litex.build.io import SDROutput, DDROutput +from migen.genlib.cdc import MultiReg + from litex.soc.cores.video import * from fb_video import * @@ -27,29 +29,60 @@ omap_layout = [ def goblin_rounded_size(hres, vres): mib = int(ceil(((hres * vres) + 0) / 1048576)) - if (mib == 3): - mib = 4 - if (mib > 4 and mib < 8): + if (mib > 0 and mib < 8): # FIXME : NuBus mib = 8 - if (mib > 8 or mib < 1): + #if (mib > 0 and mib < 16): # FIXME : SBus + # mib = 16 + if (mib > 16 or mib < 1): print(f"{mib} mebibytes framebuffer not supported") assert(False) return int(1048576 * mib) -class VideoFrameBuffer256c(Module, AutoCSR): - """Video FrameBuffer256c""" - def __init__(self, dram_port, upd_clut_fifo = None, hres=800, vres=600, base=0x00000000, fifo_depth=65536, clock_domain="sys", clock_faster_than_sys=False): +class VideoFrameBufferMultiDepth(Module, AutoCSR): + """Video FrameBufferMultiDepth""" + def __init__(self, dram_port, upd_clut_fifo = None, hres=800, vres=600, base=0x00000000, fifo_depth=65536, clock_domain="sys", clock_faster_than_sys=False, hwcursor=False, upd_overlay_fifo=False, upd_omap_fifo=False, truecolor=True): print(f"FRAMEBUFFER: dram_port.data_width = {dram_port.data_width}, {hres}x{vres}, 0x{base:x}, in {clock_domain}, clock_faster_than_sys={clock_faster_than_sys}") - npixelsdiv8 = hres * vres // 8 + vga_sync = getattr(self.sync, clock_domain) + npixels = hres * vres + + # if 0, 32-bits mode + # should only be changed while in reset + self.use_indexed = Signal(1, reset = 0x1) # mode, as x in 2^x (so 1, 2, 4, 8 bits) # should only be changed while in reset - self.mode = Signal(2, reset = 3) + self.indexed_mode = Signal(2, reset = 0x3) self.vblping = Signal(reset = 0) + + if (hwcursor): + self.vtg_sink = vtg_sink = stream.Endpoint(video_timing_hwcursor_layout) + upd_omap_fifo_dout = Record(omap_layout) + self.comb += upd_omap_fifo_dout.raw_bits().eq(upd_omap_fifo.dout) + overlay = Array(Array(Array(Signal(1) for x in range(0,32)) for y in range(0,32)) for i in range(0, 2)) + omap = Array(Array(Signal(8, reset = (255-i)) for i in range(0, 4)) for j in range(0, 3)) + vga_sync += [ + If(upd_overlay_fifo.readable, + upd_overlay_fifo.re.eq(1), + [ overlay[upd_overlay_fifo.dout[0]][upd_overlay_fifo.dout[1:6]][x].eq(upd_overlay_fifo.dout[6+x]) for x in range(0, 32)], + ).Else( + upd_overlay_fifo.re.eq(0), + ) + ] + vga_sync += [ + If(upd_omap_fifo.readable, + upd_omap_fifo.re.eq(1), + omap[upd_omap_fifo_dout.color][upd_omap_fifo_dout.address].eq(upd_omap_fifo_dout.data), + ).Else( + upd_omap_fifo.re.eq(0), + ) + ] + else: + self.vtg_sink = vtg_sink = stream.Endpoint(video_timing_layout) - self.vtg_sink = vtg_sink = stream.Endpoint(video_timing_layout) + + self.source = source = stream.Endpoint(video_data_layout) self.underflow = Signal() @@ -58,7 +91,22 @@ class VideoFrameBuffer256c(Module, AutoCSR): source_buf_de = Signal() source_buf_hsync = Signal() source_buf_vsync = Signal() - data_buf = Signal(8) + data_buf_index = Signal(8) + data_buf_direct = Array(Signal(8) for x in range(3)) + if (hwcursor): + hwcursor_buf = Signal() + hwcursorx_buf = Signal(5) + hwcursory_buf = Signal(5) + + source_buf_b_valid = Signal() + source_buf_b_de = Signal() + source_buf_b_hsync = Signal() + source_buf_b_vsync = Signal() + data_buf_b_index = Signal(8) + if (truecolor): + data_buf_b_direct = Array(Signal(8) for x in range(3)) + if (hwcursor): + hwcursor_color_idx = Signal(2) #source_out_ready = Signal() source_out_valid = Signal() @@ -70,19 +118,18 @@ class VideoFrameBuffer256c(Module, AutoCSR): source_out_b = Signal(8) # # # - # First the Color Look-up Table (for all but 1 bit) + # First the Color Look-up Table (for all but 1 bit & 32 bits) # updated from the FIFO # 8-and-less-than-8-bits mode used the 2^x first entries - clut = Array(Array(Signal(8, reset = (255-i)) for i in range(0, 256)) for j in range(0, 3)) + ### clut = Array(Array(Signal(8, reset = (255-i)) for i in range(0, 256)) for j in range(0, 3)) + clut = Array(Array(Signal(8, reset = (255-i)) for j in range(0, 3)) for i in range(0, 256)) upd_clut_fifo_dout = Record(cmap_layout) self.comb += upd_clut_fifo_dout.raw_bits().eq(upd_clut_fifo.dout) - - vga_sync = getattr(self.sync, clock_domain) vga_sync += [ If(upd_clut_fifo.readable, upd_clut_fifo.re.eq(1), - clut[upd_clut_fifo_dout.color][upd_clut_fifo_dout.address].eq(upd_clut_fifo_dout.data), + clut[upd_clut_fifo_dout.address][upd_clut_fifo_dout.color].eq(upd_clut_fifo_dout.data), ).Else( upd_clut_fifo.re.eq(0), ) @@ -94,10 +141,13 @@ class VideoFrameBuffer256c(Module, AutoCSR): from fb_dma import LiteDRAMFBDMAReader # length should be changed to match mode self.submodules.fb_dma = LiteDRAMFBDMAReader(dram_port, - fifo_depth=fifo_depth//(dram_port.data_width//8), + fifo_depth = fifo_depth//(dram_port.data_width//8), default_base = base, - default_length = npixelsdiv8 * 8) - + default_length = npixels) + ##self.submodules.fb_dma = ResetInserter()(self._fb_dma) + ##self.fb_dma_reset = Signal(reset = 0) + ##self.comb += self.fb_dma.reset.eq(self.fb_dma_reset) + # If DRAM Data Width > 8-bit and Video clock is faster than sys_clk: # actually always use that case to simplify the design # if (dram_port.data_width > 8) and clock_faster_than_sys: @@ -105,69 +155,148 @@ class VideoFrameBuffer256c(Module, AutoCSR): self.submodules.cdc = stream.ClockDomainCrossing([("data", dram_port.data_width)], cd_from="sys", cd_to=clock_domain) self.comb += self.fb_dma.source.connect(self.cdc.sink) # ... and then Data-Width Conversion. - # we have 4 possible conversion and mux/connect the appropriate one + # we have 5 possible conversion and mux/connect the appropriate one + if (truecolor): + self.submodules.conv32 = ClockDomainsRenamer({"sys": clock_domain})(stream.Converter(dram_port.data_width, 32)) + handle_truecolor_sink = [ self.cdc.source.connect(self.conv32.sink) ] + handle_truecolor_source = [ source_buf_valid.eq(self.conv32.source.valid), + self.conv32.source.connect(source, keep={"ready"}), ] + handle_truecolor_databuf = [ data_buf_direct[0].eq(self.conv32.source.data[24:32]), + data_buf_direct[1].eq(self.conv32.source.data[16:24]), + data_buf_direct[2].eq(self.conv32.source.data[8:16]), ] + handle_truecolor_databuf_b = [ data_buf_b_direct[0].eq(data_buf_direct[0]), + data_buf_b_direct[1].eq(data_buf_direct[1]), + data_buf_b_direct[2].eq(data_buf_direct[2]), ] + handle_truecolor_source = [ source_out_r.eq(data_buf_b_direct[2]), + source_out_g.eq(data_buf_b_direct[1]), + source_out_b.eq(data_buf_b_direct[0]), ] + else: + handle_truecolor_sink = [ ] + handle_truecolor_source = [ ] + handle_truecolor_databuf = [ ] + handle_truecolor_databuf_b = [ ] + handle_truecolor_source = [ ] self.submodules.conv8 = ClockDomainsRenamer({"sys": clock_domain})(stream.Converter(dram_port.data_width, 8)) self.submodules.conv4 = ClockDomainsRenamer({"sys": clock_domain})(stream.Converter(dram_port.data_width, 4)) self.submodules.conv2 = ClockDomainsRenamer({"sys": clock_domain})(stream.Converter(dram_port.data_width, 2)) self.submodules.conv1 = ClockDomainsRenamer({"sys": clock_domain})(stream.Converter(dram_port.data_width, 1)) - self.comb += Case(self.mode, { - 0x3: self.cdc.source.connect(self.conv8.sink), - 0x2: self.cdc.source.connect(self.conv4.sink), - 0x1: self.cdc.source.connect(self.conv2.sink), - 0x0: self.cdc.source.connect(self.conv1.sink), - }) - + self.comb += [ + If(self.use_indexed, + Case(self.indexed_mode, { + 0x3: self.cdc.source.connect(self.conv8.sink), + 0x2: self.cdc.source.connect(self.conv4.sink), + 0x1: self.cdc.source.connect(self.conv2.sink), + 0x0: self.cdc.source.connect(self.conv1.sink), + }) + ).Else( + *handle_truecolor_sink + ) + ] + # Video Generation. - # buffered by 1 cycle to accomodate the look-ups self.comb += [ vtg_sink.ready.eq(1), If(vtg_sink.valid & vtg_sink.de, - Case(self.mode, { - 0x3: [ source_buf_valid.eq(self.conv8.source.valid), - self.conv8.source.connect(source, keep={"ready"}), - data_buf.eq(self.conv8.source.data), - ], - 0x2: [ source_buf_valid.eq(self.conv4.source.valid), - self.conv4.source.connect(source, keep={"ready"}), - data_buf.eq(Cat(self.conv4.source.data, Signal(4, reset = 0))), - ], - 0x1: [ source_buf_valid.eq(self.conv2.source.valid), - self.conv2.source.connect(source, keep={"ready"}), - data_buf.eq(Cat(self.conv2.source.data, Signal(6, reset = 0))), - ], - 0x0: [ source_buf_valid.eq(self.conv1.source.valid), - self.conv1.source.connect(source, keep={"ready"}), - data_buf.eq(Replicate(self.conv2.source.data, 8)), - ], - }), + If(self.use_indexed, + Case(self.indexed_mode, { + 0x3: [ source_buf_valid.eq(self.conv8.source.valid), + self.conv8.source.connect(source, keep={"ready"}), + ], + 0x2: [ source_buf_valid.eq(self.conv4.source.valid), + self.conv4.source.connect(source, keep={"ready"}), + ], + 0x1: [ source_buf_valid.eq(self.conv2.source.valid), + self.conv2.source.connect(source, keep={"ready"}), + ], + 0x0: [ source_buf_valid.eq(self.conv1.source.valid), + self.conv1.source.connect(source, keep={"ready"}), + ], + }), + ).Else( + *handle_truecolor_source, + ), vtg_sink.ready.eq(source_buf_valid & source.ready), ), source_buf_de.eq(vtg_sink.de), source_buf_hsync.eq(vtg_sink.hsync), source_buf_vsync.eq(vtg_sink.vsync), + Case(self.indexed_mode, { + 0x3: [ data_buf_index.eq(self.conv8.source.data), + ], + 0x2: [ data_buf_index.eq(Cat(self.conv4.source.data, Signal(4, reset = 0))), + ], + 0x1: [ data_buf_index.eq(Cat(self.conv2.source.data, Signal(6, reset = 0))), + ], + 0x0: [ data_buf_index.eq(Replicate(self.conv1.source.data, 8)), + ], + }), + *handle_truecolor_databuf, ] - + if (hwcursor): + self.comb += [ + hwcursor_buf.eq(vtg_sink.hwcursor), + hwcursorx_buf.eq(vtg_sink.hwcursorx), + hwcursory_buf.eq(vtg_sink.hwcursory), + ] vga_sync += [ - source_out_de.eq(source_buf_de), - source_out_hsync.eq(source_buf_hsync), - source_out_vsync.eq(source_buf_vsync), - source_out_valid.eq(source_buf_valid), - #source_buf_ready.eq(source_out_ready), # ready flow the other way - If(source_buf_de, - If(self.mode == 0x0, - source_out_r.eq(data_buf), - source_out_g.eq(data_buf), - source_out_b.eq(data_buf) - ).Else( - source_out_r.eq(clut[0][data_buf]), - source_out_g.eq(clut[1][data_buf]), - source_out_b.eq(clut[2][data_buf]) - ) - ).Else(source_out_r.eq(0), - source_out_g.eq(0), - source_out_b.eq(0) - ) ] - + source_buf_b_de.eq(source_buf_de), + source_buf_b_hsync.eq(source_buf_hsync), + source_buf_b_vsync.eq(source_buf_vsync), + source_buf_b_valid.eq(source_buf_valid), + data_buf_b_index.eq(data_buf_index), + *handle_truecolor_databuf_b, + ] + if (hwcursor): + vga_sync += [ + If(hwcursor_buf, + hwcursor_color_idx.eq(Cat(overlay[0][hwcursory_buf][hwcursorx_buf], overlay[1][hwcursory_buf][hwcursorx_buf])), + ).Else( + hwcursor_color_idx.eq(0), + ) + ] + + vga_sync += [ + source_out_de.eq(source_buf_b_de), + source_out_hsync.eq(source_buf_b_hsync), + source_out_vsync.eq(source_buf_b_vsync), + source_out_valid.eq(source_buf_b_valid), + #source_buf_ready.eq(source_out_ready), # ready flow the other way + ] + if (hwcursor): + vga_sync += [ + If(hwcursor_color_idx != 0, + source_out_r.eq(omap[0][hwcursor_color_idx]), + source_out_g.eq(omap[1][hwcursor_color_idx]), + source_out_b.eq(omap[2][hwcursor_color_idx]), + ).Elif(source_buf_b_de, + If(self.use_indexed, + source_out_r.eq(clut[data_buf_b_index][2]), + source_out_g.eq(clut[data_buf_b_index][1]), + source_out_b.eq(clut[data_buf_b_index][0]) + ).Else( + *handle_truecolor_source, + ), + ).Else(source_out_r.eq(0), + source_out_g.eq(0), + source_out_b.eq(0) + ) + ] + else: + vga_sync += [ + If(source_buf_b_de, + If(self.use_indexed, + source_out_r.eq(clut[data_buf_b_index][2]), + source_out_g.eq(clut[data_buf_b_index][1]), + source_out_b.eq(clut[data_buf_b_index][0]) + ).Else( + *handle_truecolor_source, + ), + ).Else(source_out_r.eq(0), + source_out_g.eq(0), + source_out_b.eq(0) + ) + ] + self.comb += [ source.de.eq(source_out_de), source.hsync.eq(source_out_hsync), @@ -180,31 +309,8 @@ class VideoFrameBuffer256c(Module, AutoCSR): ] # Underflow. - self.comb += self.underflow.eq(~source.valid) - - # track mode changes - # in sys cd, not vga cd, as that's where the DMA runs - # whenever the mode change, we fully reset the DMA - # (we also need to reset the VTG at the same time) - old_mode = Signal(2, reset = 3) - force_reset = Signal(reset = 0) - finish_reset = Signal(reset = 0) - old_enable = Signal() - self.sync += [ - old_mode.eq(self.mode), - If(old_mode != self.mode, - force_reset.eq(1),), - If(force_reset == 1, - old_enable.eq(self.fb_dma.enable), - self.fb_dma.enable.eq(0), - self.fb_dma.length.eq(npixelsdiv8 << self.mode), - force_reset.eq(0), - finish_reset.eq(1),), - If(finish_reset == 1, - self.fb_dma.enable.eq(old_enable), - finish_reset.eq(0)), - ] - + self.comb += self.underflow.eq(~source.valid & source.de) + # VBL handling # create a pulse in self.vlbping in sys at the end of the frame from migen.genlib.cdc import PulseSynchronizer @@ -223,19 +329,28 @@ class VideoFrameBuffer256c(Module, AutoCSR): self.comb += self.vblping.eq(self.vbl_ps.o) class goblin(Module, AutoCSR): - def __init__(self, soc, phy=None, timings = None, clock_domain="sys"): + def __init__(self, soc=None, phy=None, timings=None, clock_domain="sys", irq_line=None, endian="big", truecolor=True): # 2 bits for color (0/r, 1/g, 2/b), 8 for @ and 8 for value - self.submodules.upd_cmap_fifo = upd_cmap_fifo = ClockDomainsRenamer({"read": "vga", "write": "sys"})(AsyncFIFOBuffered(width=layout_len(cmap_layout), depth=8)) + self.submodules.upd_cmap_fifo = upd_cmap_fifo = ClockDomainsRenamer({"read": clock_domain, "write": "sys"})(AsyncFIFOBuffered(width=layout_len(cmap_layout), depth=8)) upd_cmap_fifo_din = Record(cmap_layout) self.comb += self.upd_cmap_fifo.din.eq(upd_cmap_fifo_din.raw_bits()) + + # hw cursor support + self.submodules.upd_overlay_fifo = upd_overlay_fifo = ClockDomainsRenamer({"read": clock_domain, "write": "sys"})(AsyncFIFOBuffered(width=1+5+32, depth=8)) + self.submodules.upd_omap_fifo = upd_omap_fifo = ClockDomainsRenamer({"read": clock_domain, "write": "sys"})(AsyncFIFOBuffered(width=layout_len(omap_layout), depth=8)) + upd_omap_fifo_din = Record(omap_layout) + self.comb += self.upd_omap_fifo.din.eq(upd_omap_fifo_din.raw_bits()) name = "video_framebuffer" # near duplicate of plaform.add_video_framebuffer # Video Timing Generator. - vtg = FBVideoTimingGenerator(default_video_timings=timings if isinstance(timings, str) else timings[1]) + vtg = FBVideoTimingGenerator(default_video_timings=timings if isinstance(timings, str) else timings[1], hwcursor=True) vtg = ClockDomainsRenamer(clock_domain)(vtg) setattr(self.submodules, f"{name}_vtg", vtg) + vtg_enable = Signal(reset = 0) + #self.specials += MultiReg(vtg_enable, vtg.enable, clock_domain) + self.comb += [ vtg.enable.eq(vtg_enable) ] # Video FrameBuffer. timings = timings if isinstance(timings, str) else timings[0] @@ -245,14 +360,22 @@ class goblin(Module, AutoCSR): vres = int(timings.split("@")[0].split("x")[1]) freq = vtg.video_timings["pix_clk"] print(f"goblin: using {hres} x {vres}, {freq/1e6} MHz pixclk") - vfb = VideoFrameBuffer256c(dram_port = soc.sdram.crossbar.get_port(), - upd_clut_fifo = upd_cmap_fifo, - hres = hres, - vres = vres, - base = base, - clock_domain = clock_domain, - clock_faster_than_sys = (vtg.video_timings["pix_clk"] > soc.sys_clk_freq)) + vfb = VideoFrameBufferMultiDepth(dram_port = soc.sdram.crossbar.get_port(), + upd_clut_fifo = upd_cmap_fifo, + hres = hres, + vres = vres, + base = base, + fifo_depth=(64*1024), + clock_domain = clock_domain, + clock_faster_than_sys = (vtg.video_timings["pix_clk"] > soc.sys_clk_freq), + hwcursor = True, + upd_overlay_fifo = upd_overlay_fifo, + upd_omap_fifo = upd_omap_fifo, + truecolor = truecolor, + ) setattr(self.submodules, name, vfb) + ##dma_reset = Signal(reset = 0) + ##self.comb += self.video_framebuffer.fb_dma_reset.eq(dma_reset) # Connect Video Timing Generator to Video FrameBuffer. self.comb += vtg.source.connect(vfb.vtg_sink) @@ -265,34 +388,35 @@ class goblin(Module, AutoCSR): soc.add_constant("VIDEO_FRAMEBUFFER_HRES", hres) soc.add_constant("VIDEO_FRAMEBUFFER_VRES", vres) - # goblin registers - # struct bt_regs { - # u_int bt_addr; /* map address register */ - # u_int bt_cmap; /* colormap data register */ - # u_int bt_ctrl; /* control register */ - # u_int bt_omap; /* overlay (cursor) map register */ - # }; + # HW Cursor + + hwcursor_x = Signal(12) + hwcursor_y = Signal(12) + + self.comb += vtg.hwcursor_x.eq(hwcursor_x) + self.comb += vtg.hwcursor_y.eq(hwcursor_y) self.bus = bus = wishbone.Interface() # current cmap logic for the goblin, similar to the cg6, minus the HW cursor - bt_mode = Signal(4, reset = 0) # 0 is 3, 2 is 0, 4 is 1, 8 is 2, and bit depth is 2^ + bt_mode = Signal(8, reset = 0x3) # bit depth is 2^x ; 0x10 is direct mode (32 bits) bt_addr = Signal(8, reset = 0) bt_cmap_state = Signal(2, reset = 0) m_vbl_disable = Signal(reset = 1) + + videoctrl = Signal() vbl_signal = Signal(reset = 0) - vbl_irq = soc.platform.request("nmrq_3v3_n") - self.comb += vbl_irq.eq(~vbl_signal | m_vbl_disable) # active low - - #self.comb += Case(bt_mode, { - # 0x0: self.video_framebuffer.mode.eq(3), - # 0x2: self.video_framebuffer.mode.eq(0), - # 0x4: self.video_framebuffer.mode.eq(1), - # 0x8: self.video_framebuffer.mode.eq(2), - # }) - + self.comb += irq_line.eq(~vbl_signal | m_vbl_disable) # active low + + if (endian == "big"): + low_byte = slice(0, 8) + low_bit = slice(0, 1) + else: + low_byte = slice(24, 32) + low_bit = slice(24, 25) + self.submodules.wishbone_fsm = wishbone_fsm = FSM(reset_state = "Reset") wishbone_fsm.act("Reset", NextValue(bus.ack, 0), @@ -301,17 +425,25 @@ class goblin(Module, AutoCSR): If(bus.cyc & bus.stb & bus.we & ~bus.ack & upd_cmap_fifo.writable, #write # FIXME: should check for prefix? Case(bus.adr[0:18], { + "default": [], # gobofb_mode - 0x0: [ NextValue(bt_mode, bus.dat_w[0:8]), ], + 0x0: [ NextValue(bt_mode, bus.dat_w[low_byte]), ], + # set vbl + 0x1: [ NextValue(m_vbl_disable, ~bus.dat_w[low_bit]), ], + # gobofb on/off + 0x2: [ NextValue(videoctrl, bus.dat_w[low_bit]), ], + # clear irq + 0x3: [ NextValue(vbl_signal, 0), ], + # 0x4: rest in SW # gobofb_lut_addr - 0x5: [ NextValue(bt_addr, bus.dat_w[0:8]), + 0x5: [ NextValue(bt_addr, bus.dat_w[low_byte]), NextValue(bt_cmap_state, 0), ], # gobofb_lut 0x6: [ upd_cmap_fifo.we.eq(1), upd_cmap_fifo_din.color.eq(bt_cmap_state), upd_cmap_fifo_din.address.eq(bt_addr), - upd_cmap_fifo_din.data.eq(bus.dat_w[0:8]), + upd_cmap_fifo_din.data.eq(bus.dat_w[low_byte]), Case(bt_cmap_state, { 0: [ NextValue(bt_cmap_state, 1), ], 1: [ NextValue(bt_cmap_state, 2), ], @@ -319,17 +451,39 @@ class goblin(Module, AutoCSR): "default": NextValue(bt_cmap_state, 0), }), ], - # set vbl - 0x1: [ NextValue(m_vbl_disable, ~bus.dat_w[0:1]), ], - # clear irq - 0x3: [ NextValue(vbl_signal, 0), ], + # 0x7: debug in SW + # cursor lut + 0x8: [ upd_omap_fifo.we.eq(1), + upd_omap_fifo_din.color.eq(bt_cmap_state), + upd_omap_fifo_din.address.eq(bt_addr[0:2]), + upd_omap_fifo_din.data.eq(bus.dat_w[low_byte]), + Case(bt_cmap_state, { + 0: [ NextValue(bt_cmap_state, 1), ], + 1: [ NextValue(bt_cmap_state, 2), ], + 2: [ NextValue(bt_cmap_state, 0), NextValue(bt_addr, (bt_addr+1) & 0xFF), ], + "default": NextValue(bt_cmap_state, 0), + }), + ], + # hw cursor x/y + 0x9: [ NextValue(hwcursor_x, bus.dat_w[16:28]), # FIXME: endianess + NextValue(hwcursor_y, bus.dat_w[ 0:12]), # FIXME: endianess + ], + }), + Case(bus.adr[5:18], { "default": [], + 0x1 : [ upd_overlay_fifo.we.eq(1), # 1*32 = 32..63 / 0x20..0x3F + upd_overlay_fifo.din.eq(Cat(Signal(1, reset = 0), 31-bus.adr[0:5], bus.dat_w)) # FIXME: endianess + ], + 0x2 : [ upd_overlay_fifo.we.eq(1), # 2*32 = 64..95 / 0x40..0x5F + upd_overlay_fifo.din.eq(Cat(Signal(1, reset = 1), 31-bus.adr[0:5], bus.dat_w)) # FIXME: endianess + ], }), NextValue(bus.ack, 1), ).Elif(bus.cyc & bus.stb & ~bus.we & ~bus.ack, #read Case(bus.adr[0:18], { # bt_addr - 0x0: [ NextValue(bus.dat_r, bt_mode), ], + 0x0: [ NextValue(bus.dat_r[low_byte], bt_mode), ], + 0x2: [ NextValue(bus.dat_r[low_byte], videoctrl), ], "default": [ NextValue(bus.dat_r, 0xDEADBEEF)], }), NextValue(bus.ack, 1), @@ -338,28 +492,86 @@ class goblin(Module, AutoCSR): ), ) # mode switch logic - old_bt_mode = Signal(4) - vtg_reset_counter = Signal(4, reset = 0) # to put the VTG in reset for a few cyles so that the DMA can restart + npixels = hres * vres + old_bt_mode = Signal(8) # different from bt_mode + in_reset = Signal() + post_reset_ctr = Signal(3) + previous_videoctrl = Signal() + + if (truecolor): + handle_truecolor_bit = [ self.video_framebuffer.use_indexed.eq(~bt_mode[4:5]) ] + else: + handle_truecolor_bit = [ ] + + # this has grown complicated and should be a FSM... self.sync += [ old_bt_mode.eq(bt_mode), - If(old_bt_mode != bt_mode, - Case(bt_mode, { - 0x2: self.video_framebuffer.mode.eq(0), - 0x4: self.video_framebuffer.mode.eq(1), - 0x8: self.video_framebuffer.mode.eq(2), - 0x0: self.video_framebuffer.mode.eq(3), + If(old_bt_mode != bt_mode, + in_reset.eq(1), + videoctrl.eq(0), # start a disabling cycle, or stay disabled + previous_videoctrl.eq(videoctrl), # preserve old state for restoration later + ), + If(in_reset & ~vtg_enable, # we asked for a reset and by now, the VTG has been turned off (or was off) so we reset the DMA and change the parameters + ##dma_reset.eq(1), # hpefully this will clear the FIFO as well + self.video_framebuffer.indexed_mode.eq(bt_mode[0:2] & ~(Replicate(bt_mode[4:5], 2))), + *handle_truecolor_bit, + in_reset.eq(0), + post_reset_ctr.eq(7), + ), + ##If(post_reset_ctr == 5, # take DMA out of reset + ## dma_reset.eq(0), + ##), + If(post_reset_ctr == 4, # now reconfigure the DMA + If(bt_mode[4:5], + self.video_framebuffer.fb_dma.length.eq(npixels * 4), + ).Else( + Case(bt_mode[0:2], { + 3: self.video_framebuffer.fb_dma.length.eq(npixels ), + 2: self.video_framebuffer.fb_dma.length.eq(npixels//2), + 1: self.video_framebuffer.fb_dma.length.eq(npixels//4), + 0: self.video_framebuffer.fb_dma.length.eq(npixels//8), }), - vtg_reset_counter.eq(15), - vtg._enable.eq(0),), - If(vtg_reset_counter == 1, - vtg._enable.eq(1),), - If(vtg_reset_counter > 0, - vtg_reset_counter.eq(vtg_reset_counter - 1),), - ] - + ), + ), + If(post_reset_ctr == 1, # we've waited for the mode switch so restore video mode + videoctrl.eq(previous_videoctrl), + ), + If(post_reset_ctr != 0, + post_reset_ctr.eq(post_reset_ctr - 1), + ), + ] + # videoctrl logic + old_videoctrl = Signal() + videoctrl_starting = Signal() + videoctrl_stopping = Signal() + self.sync += [ + If(~videoctrl_starting & ~videoctrl_stopping, # while we're changing state, delay any new request for change + old_videoctrl.eq(videoctrl), + ), + # turn on + If(videoctrl & ~old_videoctrl, # pos edge + self.video_framebuffer.fb_dma.enable.eq(1), # enable DMA + videoctrl_starting.eq(1), + ), + If(videoctrl & (self.video_framebuffer.fb_dma.rsv_level != 0), + vtg_enable.eq(1), # there's some data requested, good to go + videoctrl_starting.eq(0), + ), + # turn off + If(~videoctrl & old_videoctrl, # neg edge + self.video_framebuffer.fb_dma.enable.eq(0), # disable DMA + videoctrl_stopping.eq(1), + ), + If(~videoctrl & (self.video_framebuffer.fb_dma.rsv_level == 0) & (self.video_framebuffer.underflow), + vtg_enable.eq(0), # the DMA FIFO is purged, stop vtg + videoctrl_stopping.eq(0), + ), + ] + # VBL logic self.sync += [ If(self.video_framebuffer.vblping == 1, vbl_signal.eq(1), ),] + diff --git a/nubus-to-ztex-gateware/nubus.py b/nubus-to-ztex-gateware/nubus.py index 5e0cb83..846d9f2 100644 --- a/nubus-to-ztex-gateware/nubus.py +++ b/nubus-to-ztex-gateware/nubus.py @@ -22,18 +22,17 @@ class NuBus(Module): self.mem_tryagain = Signal() # cpu - #self.cpu_valid = Signal(reset = 0) - #self.cpu_addr = Signal(32) - #self.cpu_wdata = Signal(32) - #self.cpu_ready = Signal() - #self.cpu_write = Signal(4) - #self.cpu_rdata = Signal(32) - #self.cpu_lock = Signal() - #self.cpu_eclr = Signal() - #self.cpu_errors = Signal(4) + self.cpu_valid = Signal(reset = 0) + self.cpu_addr = Signal(32) + self.cpu_wdata = Signal(32) + self.cpu_ready = Signal() + self.cpu_write = Signal(4) + self.cpu_rdata = Signal(32) + self.cpu_lock = Signal() + self.cpu_eclr = Signal() + self.cpu_errors = Signal(4) - # utilities - self.tmoen = Signal() + # utilities (unused) self.mem_stdslot = Signal() self.mem_super = Signal() self.mem_local = Signal() @@ -48,7 +47,6 @@ class NuBus(Module): p_SUPERSLOTS_ADDRESS = 0x9, p_WDT_W = 0x8, p_LOCAL_SPACE_EXPOSED_TO_NUBUS = 0, - p_NON_ECC_PARITY = 0, i_nub_clkn = ClockSignal(cd_nubus), i_nub_resetn = ~ResetSignal(cd_nubus), i_nub_idn = platform.request("id_3v3_n"), @@ -60,10 +58,11 @@ class NuBus(Module): io_nub_rqstn = platform.request("rqst_3v3_n"), io_nub_ackn = platform.request("ack_3v3_n"), # io_nub_arbn = platform.request("nubus_arb_n"), - o_arb = platform.request("arb"), + o_arbcy_n = platform.request("arbcy_n"), i_grant = platform.request("grant"), o_tmoen = platform.request("tmoen"), o_NUBUS_AD_DIR = platform.request("nubus_ad_dir"), + o_nubus_master_dir = platform.request("nubus_master_dir"), # io_nub_nmrqn = platform.request("nmrq_3v3_n"), # io_nub_spn = self.nubus_sp_n, # io_nub_spvn = self.nubus_spv_n, @@ -75,19 +74,21 @@ class NuBus(Module): i_mem_rdata = self.mem_rdata, i_mem_error = self.mem_error, i_mem_tryagain = self.mem_tryagain, - #i_cpu_valid = self.cpu_valid, - #i_cpu_addr = self.cpu_addr, - #i_cpu_wdata = self.cpu_wdata, - #o_cpu_ready = self.cpu_ready, - #i_cpu_write = self.cpu_write, - #o_cpu_rdata = self.cpu_rdata, - #i_cpu_lock = self.cpu_lock, - #i_cpu_eclr = self.cpu_eclr, - #o_cpu_errors = self.cpu_errors, + i_cpu_valid = self.cpu_valid, + i_cpu_addr = self.cpu_addr, + i_cpu_wdata = self.cpu_wdata, + o_cpu_ready = self.cpu_ready, + i_cpu_write = self.cpu_write, + o_cpu_rdata = self.cpu_rdata, + i_cpu_lock = self.cpu_lock, + i_cpu_eclr = self.cpu_eclr, + o_cpu_errors = self.cpu_errors, o_mem_stdslot = self.mem_stdslot, o_mem_super = self.mem_super, o_mem_local = self.mem_local, + o_fpga_to_cpld_signal = platform.request("fpga_to_cpld_signal"), + i_nub_clk2xn = ClockSignal(cd_nubus90), io_nub_tm2n = platform.request("tm2_3v3_n"), ) @@ -98,10 +99,10 @@ class NuBus(Module): def add_sources(self, platform): platform.add_source("nubus.v", "verilog") platform.add_source("/home/dolbeau/XiBus/nubus.svh", "verilog") - #platform.add_source("/home/dolbeau/XiBus/nubus_arbiter.v", "verilog") - #platform.add_source("/home/dolbeau/XiBus/nubus_cpubus.v", "verilog") + #platform.add_source("/home/dolbeau/XiBus/nubus_arbiter.v", "verilog") # in the CPLD + platform.add_source("/home/dolbeau/XiBus/nubus_cpubus.v", "verilog") platform.add_source("/home/dolbeau/XiBus/nubus_driver.v", "verilog") - #platform.add_source("/home/dolbeau/XiBus/nubus_errors.v", "verilog") + #platform.add_source("/home/dolbeau/XiBus/nubus_errors.v", "verilog") # unused platform.add_source("/home/dolbeau/XiBus/nubus_membus.v", "verilog") - #platform.add_source("/home/dolbeau/XiBus/nubus_master.v", "verilog") + platform.add_source("/home/dolbeau/XiBus/nubus_master.v", "verilog") platform.add_source("/home/dolbeau/XiBus/nubus_slave.v", "verilog") diff --git a/nubus-to-ztex-gateware/nubus.v b/nubus-to-ztex-gateware/nubus.v index 7d8d2ed..85def86 100644 --- a/nubus-to-ztex-gateware/nubus.v +++ b/nubus-to-ztex-gateware/nubus.v @@ -2,72 +2,103 @@ * NuBus controller * * Autor: Valeriya Pudova (hww.github.io) + * Adapted by Romain Dolbeau for the NuBusFPGA + * Copyright (c) 2021-2022 */ +/* This module is running on the FPGA */ + module nubus #( - // All slots area starts with addrss $FXXX XXXX + // All slots area starts with address $FXXX XXXX parameter SLOTS_ADDRESS = 'hF, // All superslots starts at $9000 0000 parameter SUPERSLOTS_ADDRESS = 'h9, // Watch dog timer bits. Master controller will terminate transfer // after (2 ^ WDT_W) clocks parameter WDT_W = 8, - // Local space of card start and end addres. For example 0-5 + // Local space of card start and end address. For example 0-5 // makes local space address $00000000-$50000000 + // UNUSED in NuBusFPGA parameter LOCAL_SPACE_EXPOSED_TO_NUBUS = 0, parameter LOCAL_SPACE_START = 0, - parameter LOCAL_SPACE_END = 5, - // Generate parity without ECC memory - parameter NON_ECC_PARITY = 0 + parameter LOCAL_SPACE_END = 5 ) ( - /* NuBus signals */ - + /* *** NuBus signals *** */ + /* those are connected to the FPGA */ + /* connected via the CPLD */ input nub_clkn, // Clock (rising is driving edge, faling is sampling) input nub_resetn, // Reset - input [ 3:0] nub_idn, // Slot Identificatjon - - // inout nub_pfwn, // Power Fail Warning - inout [31:0] nub_adn, // Address/Data + input [ 3:0] nub_idn, // Slot Identification inout nub_tm0n, // Transfer Mode inout nub_tm1n, // Transfer Mode inout nub_startn, // Start inout nub_rqstn, // Request inout nub_ackn, // Acknowledge - // inout [ 3:0] nub_arbn, // Arbitration - output arb, - input grant, - output tmoen, - output NUBUS_AD_DIR, - //inout nub_nmrqn, // Non-Master Request, handled in the Litex code - + // connected via the CPLD but NuBus90 (unimplemented) + input nub_clk2xn, + inout nub_tm2n, + + /* connected via the 74LVT245 */ + inout [31:0] nub_adn, // Address/Data + + /* those are not used, and not even connected in the board */ + // inout nub_pfwn, // Power Fail Warning // inout nub_spn, // System Parity // inout nub_spvn, // System Parity Valid - /* Memory bus signals connected to a memory, accesible by nubus or processor */ + /* those ared used but handled in directly in the Litex code */ + // output nub_nmrqn, // Non-Master Request, handled in the Litex code + /* those are used but connected only to the CPLD */ + /* we deal with the CPLD via 'arbcy_n' and 'grant' + // inout [ 3:0] nub_arbn, // Arbitration + + /* *** CPLD <-> FPGA signals, not in NuBus */ + output arbcy_n, // request arbitration + input grant, // arbitration won + output tmoen, // output enable for tm0/1 + + /* *** CPLD <-> FPGA signals, spare, currently unused */ + output fpga_to_cpld_signal, // regular signal + // inout fpga_to_cpld_signal_2, // regular signal + // inout fpga_to_cpld_clk, // clk input on CPLD or regular signal + + /* FPGA -> drivers */ + output NUBUS_AD_DIR, // direction for the LS245 (input/output for A/D lines) + output nubus_master_dir, // are we in master mode (to drive the proper signals) + + /* 'memory bus' signals; those are used to interface with the Wishbone to access the FPGA resources from NuBus */ output mem_valid, output [31:0] mem_addr, output [31:0] mem_wdata, output [ 3:0] mem_write, input mem_ready, input [31:0] mem_rdata, - input mem_error, - input mem_tryagain, + input mem_error, // ignored + input mem_tryagain, // ignored + + /* 'processor bus' signals; those are used to interface with the Wishbone to access NuBus resources from the FPGA */ + input cpu_valid, + input [31:0] cpu_addr, + input [31:0] cpu_wdata, + input [ 3:0] cpu_write, + output cpu_ready, + output [31:0] cpu_rdata, + input cpu_lock, + input cpu_eclr, // ignored + output [3:0] cpu_errors, // ignored + /* utilities signal from the NuBus stuff, currently unused */ // Access to slot area output mem_stdslot, // Access to superslot area ($sXXXXXXX where is card id) output mem_super, // Access to local memory on the card - output mem_local, - - // NuBus90 (unimplemented) - input nub_clk2xn, - inout nub_tm2n + output mem_local ); `include "nubus.svh" @@ -83,46 +114,66 @@ module nubus // Global signals // ========================================================================== - wire slv_master, slv_slave, slv_tm1n, slv_tm0n, slv_ackcyn, slv_myslotcy; - wire unsigned [31:0] slv_addr; - wire drv_tmoen, drv_mstdn; + // ===== SLAVE ===== + //wire slv_master; + wire slv_slave; // output nubus_slave module; input internal ; active during slave cycle + wire slv_tm1n; // output nubus_slave module; input internal & nubus_membus + wire slv_tm0n; // output nubus_slave module; input nubus_membus + wire slv_ackcyn; // output nubus_slave module; input nubus_driver + wire slv_myslotcy; // output nubus_slave module; input internal & nubus_driver + wire unsigned [31:0] slv_addr;// output nubus_slave module; input nubus_membus - wire mst_timeout; + // ===== CPU ==== + wire unsigned [31:0] cpu_ad; // output nubus_master; input MUX to A/D lines 'nub_ad' (nub_ad then as an OE and an iverter to reach nub_adn) + wire cpu_tm1n; // R(h)/W(l); output nubus_cpu; input nubus_driver & internal + wire cpu_tm0n; // byte size(l); idem + wire cpu_masterd; // ignored + + // ===== DRIVER ===== + wire drv_tmoen; // output enable for tm0n/tm1n (== tmoen) by nubus_driver + wire drv_mstdn; // ??? only connected to driver as an output + + // ===== MASTER === + wire mst_timeout; // timeout???; output nubus_master; input nubus_driver & nubus_slave + wire mst_arbcyn; // req. arb; output nubus_master; input internal & to CPLD & nubus_driver + assign arbcy_n = mst_arbcyn; + wire mst_adrcyn; // during the address cycle for master; output nubus_master; input nubus_driver & nubus_cpubus + wire mst_lockedn; // for locked accesses (?); output nubus_master; input nubus_driver + wire mst_arbdn; // delay during arbitration; output nubus_master; input [NULL] ??? + wire mst_busyn; // busy during transfer; output nubus_master; input [NULL] ??? + wire mst_ownern; // master is bus owner; output nubus_master; input nubus_driver & internal + wire mst_dtacyn; // during the data cycle for master; output nubus_master; input nubus_driver & internal // ========================================================================== // Drive NuBus address-data line // ========================================================================== - // Select nubus data signals - wire [31:0] nub_ad = mem_rdata; + // Should we be putting the address (instead of data) on the bus [see also nub_adoe] + // yes during address cycle, or if we're reading (not writing) data + // actually during write the CPU puts data in cpu_ad so also when writing + // nub_adoe takes care of the enablement + wire cpu_adsel = ~mst_adrcyn | ~mst_dtacyn;// & ~cpu_tm1n; + // Select nubus address or data signals + wire [31:0] nub_ad = cpu_adsel ? cpu_ad : mem_rdata; - // When 1 - drive the NuBus AD lines - wire nub_adoe = slv_slave & slv_tm1n - /*SLAVE read of card*/ + // Tri-state control for the A/D line + // nub_adoe is the output enable, when 0 A/D lines are high-impedance + // Slave: only drive the A/D lines to return data on a read (slave cycle with tm1n high) + // Master: drives during (a) address cycle + // (b) data cycle when writing + wire nub_adoe = slv_slave & slv_tm1n /* SLAVE read of card */ + | cpu_valid & ~mst_adrcyn /* MASTER address cycle*/ + | ~mst_ownern & ~mst_dtacyn & ~cpu_tm1n /* MASTER data cycle, when writing*/ ; - - wire rqst_n, rqst_oe_n; - - assign rqst_n = 'b1; // no master yet - assign nub_rqstn = ~rqst_oe_n ? rqst_n : 'bZ; - - // Output to nubus the assign nub_adn = nub_adoe ? ~nub_ad : 'bZ; - - assign mem_valid = slv_myslotcy; - + /* for direction */ assign NUBUS_AD_DIR = ~nub_adoe; + //assign nubus_master_dir = grant | ~mst_adrcyn | ~mst_arbdn | ~mst_ownern | ~mst_dtacyn; + assign nubus_master_dir = ~mst_ownern; - // ========================================================================== - // Parity checking - // ========================================================================== - - //wire parity = ~^nub_adn; - //wire nub_noparity = NON_ECC_PARITY & ~nub_adoe & ~nub_spvn & nub_spn == parity; - - //assign nub_spn = NON_ECC_PARITY & nub_adoe ? parity : 'bZ; - //assign nub_spvn = NON_ECC_PARITY & nub_adoe ? 0 : 'bZ; + /* for slave access, enable the access during slv_myslotcy*/ + assign mem_valid = slv_myslotcy; // ========================================================================== // Slave FSM @@ -133,10 +184,10 @@ module nubus .SLOTS_ADDRESS (SLOTS_ADDRESS), .SUPERSLOTS_ADDRESS(SUPERSLOTS_ADDRESS), .SIMPLE_MAP(0), + // UNUSED in NuBusFPGA .LOCAL_SPACE_EXPOSED_TO_NUBUS(LOCAL_SPACE_EXPOSED_TO_NUBUS), .LOCAL_SPACE_START(LOCAL_SPACE_START), .LOCAL_SPACE_END(LOCAL_SPACE_END) - ) USlave ( @@ -149,7 +200,7 @@ module nubus .nub_tm1n(nub_tm1n), // Transition mode 1 (Read/Write) .nub_tm0n(nub_tm0n), .mem_ready(mem_ready), - .mst_timeout(0), + .mst_timeout(mst_timeout), .slv_slave_o(slv_slave), // Slave mode .slv_tm1n_o(slv_tm1n), // Latched transition mode 1 (Read/Write) @@ -161,6 +212,35 @@ module nubus .slv_local_o(mem_local), // Local area .slv_myslotcy_o(slv_myslotcy) // Any slot ); + + // ========================================================================== + // Master FSM + // ========================================================================== + + nubus_master + #( + .WDT_W(WDT_W) + ) + UMaster + ( + .nub_clkn(nub_clkn), // Clock + .nub_resetn(nub_resetn), // Reset + .nub_rqstn(nub_rqstn), // Bus request + .nub_startn(nub_startn), // Start transfer + .nub_ackn(nub_ackn), // End of transfer + .arb_grant(grant), // Grant access + .cpu_lock(cpu_lock), // Address line + .cpu_masterd(cpu_valid), // Master mode (delayed) // FIXME: ignoring cpu_masterd which is always 0 (see below) + + .mst_lockedn_o(mst_lockedn), // Locked or not tranfer + .mst_arbdn_o(mst_arbdn), + .mst_busyn_o(mst_busyn), + .mst_ownern_o(mst_ownern), // Address or data transfer + .mst_dtacyn_o(mst_dtacyn), // Data strobe + .mst_adrcyn_o(mst_adrcyn), // Address strobe + .mst_arbcyn_o(mst_arbcyn), // Arbiter enabled + .mst_timeout_o(mst_timeout) + ); // ========================================================================== // Driver Nubus @@ -170,26 +250,49 @@ module nubus nubus_driver UNDriver ( - .slv_ackcyn(slv_ackcyn), // Achnowlege - .mst_arbcyn(1), // Arbiter enabled - .mst_adrcyn(1), // Address strobe - .mst_dtacyn(1), // Data strobe - .mst_ownern(1), // Master is owner of the bus - .mst_lockedn(1), // Locked or not transfer - .mst_tm1n(1), // Address ines - .mst_tm0n(1), // Address ines - .mst_timeout(0), + .slv_ackcyn(slv_ackcyn), // Acknowlege + .mst_arbcyn(mst_arbcyn), // Arbiter enabled + .mst_adrcyn(mst_adrcyn), // Address strobe + .mst_dtacyn(mst_dtacyn), // Data strobe + .mst_ownern(mst_ownern), // Master is owner of the bus + .mst_lockedn(mst_lockedn), // Locked or not transfer + .mst_tm1n(cpu_tm1n), // Address lines + .mst_tm0n(cpu_tm0n), // Address lines + .mst_timeout(mst_timeout), .mis_errorn(TMN_COMPLETE), .nub_tm0n_o(nub_tm0n), // Transfer mode .nub_tm1n_o(nub_tm1n), // Transfer mode .nub_ackn_o(nub_ackn), // Achnowlege .nub_startn_o(nub_startn), // Transfer start .nub_rqstn_o(nub_rqstn), // Bus request - .nub_rqstoen_o(rqst_oe_n), // Bus request enable + .nub_rqstoen_o(fpga_to_cpld_signal), // Bus request enable .drv_tmoen_o(drv_tmoen), // Transfer mode enable .drv_mstdn_o(drv_mstdn) // Guess: Slave sends /ACK. Master responds with /MSTDN, which allows slave to clear /ACK and listen for next transaction. ); + // ========================================================================== + // CPU Interface + // ========================================================================== + + assign cpu_rdata = ~nub_adn; + assign cpu_ready = ~nub_ackn & nub_startn; + + nubus_cpubus UCPUBus + ( + .nub_clkn(nub_clkn), + .nub_resetn(nub_resetn), + .mst_adrcyn(mst_adrcyn), + .cpu_valid(cpu_valid), + .cpu_write(cpu_write), + .cpu_addr(cpu_addr), + .cpu_wdata(cpu_wdata), + .cpu_ad_o(cpu_ad), + .cpu_tm1n_o(cpu_tm1n), + .cpu_tm0n_o(cpu_tm0n), + .cpu_error_o(cpu_errors), + .cpu_masterd_o(cpu_masterd) // FIXME, set to 0 in Xibus nubus_cpubus + ); + // ========================================================================== // Memory Interface // ========================================================================== diff --git a/nubus-to-ztex-gateware/nubus_arbiter.v b/nubus-to-ztex-gateware/nubus_arbiter.v index a795a53..6f80074 100644 --- a/nubus-to-ztex-gateware/nubus_arbiter.v +++ b/nubus-to-ztex-gateware/nubus_arbiter.v @@ -6,16 +6,18 @@ * generation of lower ARB<3:0> bits. * The GRANT signal must be timed externally to determine proper * NuBus constraints. - * This version uses a new technique to minimize skews . + * This version uses a new technique to minimize skews. + * + * Modified from the XiBus version to support external drivers in the NuBusFPGA */ module nubus_arbiter ( - input [3:0] idn, // ID of this card - input [3:0] arbn, // NuBus arbiter's lines (input) - output [3:0] arbon, // NuBus arbiter's lines (control) - input arbcyn, // enable arbitter - output grant // Grant access + input [3:0] idn, // ID of this card + input [3:0] arbn, // NuBus arbiter's lines (input) + output [3:0] arbon, // NuBus arbiter's lines (control) + input arbcyn, // enable arbitter + output grant // Grant access ); wire arb2oen, arb1oen, arb0oen; diff --git a/nubus-to-ztex-gateware/nubus_cpld.ucf b/nubus-to-ztex-gateware/nubus_cpld.ucf index 9bb70f3..c345e30 100644 --- a/nubus-to-ztex-gateware/nubus_cpld.ucf +++ b/nubus-to-ztex-gateware/nubus_cpld.ucf @@ -55,7 +55,7 @@ NET "reset_n_3v3" LOC = "S:PIN48"; NET "nubus_master_dir" LOC = "S:PIN49"; NET "fpga_to_cpld_signal_2" LOC = "S:PIN50"; NET "tmoen" LOC = "S:PIN51"; -NET "arb" LOC = "S:PIN52"; +NET "arbcy_n" LOC = "S:PIN52"; // PIN53: JTAG_TDO // PIN24: GND // PIN55: VCCIO diff --git a/nubus-to-ztex-gateware/nubus_cpld.v b/nubus-to-ztex-gateware/nubus_cpld.v index 9c709cb..0c554a9 100644 --- a/nubus-to-ztex-gateware/nubus_cpld.v +++ b/nubus-to-ztex-gateware/nubus_cpld.v @@ -13,7 +13,7 @@ module nubus_cpld // Spares input fpga_to_cpld_clk, // unused (extra line from FPGA to CPLD, pin is a clk input) - inout fpga_to_cpld_signal, // unused (extra line from FPGA to CPLD) + input fpga_to_cpld_signal, // unused (extra line from FPGA to CPLD) inout fpga_to_cpld_signal_2, // unused (extra line from FPGA to CPLD) // NuBus (output to FPGA) @@ -23,7 +23,7 @@ module nubus_cpld output clk2x_n_3v3, // nubus90 clk to FPGA // NuBus Arbiter - input arb, // enable arbitter + input arbcy_n, // enable arbitter input [3:0] arb_n_5v, // NuBus arbiter's lines output [3:0] arb_o_n, // NuBus arbiter's control lines output grant, // Grant access @@ -56,12 +56,12 @@ module nubus_cpld // Master Request (OC) input rqst_n_5v, // rqst from NuBus; needs monitoring before driving - inout rqst_n_3v3, // rqst from/to FPGA; needs monitoring before driving?; needed? or is arb enough? + inout rqst_n_3v3, // rqst from/to FPGA output rqst_o_n // rqst to NuBus ); // placeholder to make pretend we use the signals - assign fpga_to_cpld_signal_2 = fpga_to_cpld_signal ^ fpga_to_cpld_clk; + assign fpga_to_cpld_signal_2 = fpga_to_cpld_clk; // placeholders assign clk2x_n_3v3 = clk2x_n_5v; assign tm2_n_3v3 = tm2_n_5v; @@ -80,28 +80,28 @@ module nubus_cpld assign start_n_3v3 = nubus_oe ? 'bZ : (~nubus_master_dir ? start_n_5v : 'bZ); // master in // rqst_o_n is always driven (the 74lvt125 wired as open collector will convert 1 to Z) and is active low - assign rqst_o_n = nubus_oe ? 1 : ( nubus_master_dir ? rqst_n_3v3 : 1); // master out - assign rqst_n_3v3 = nubus_oe ? 'bZ : (~nubus_master_dir ? rqst_n_5v : 'bZ); // master in + assign rqst_o_n = nubus_oe ? 1 : (~fpga_to_cpld_signal ? rqst_n_3v3 : 1); // master out + assign rqst_n_3v3 = nubus_oe ? 'bZ : ( fpga_to_cpld_signal ? rqst_n_5v : 'bZ); // master in //assign ack_o_5v = nubus_oe ? 'bZ : ((nubus_master_dir ^ ~tmoen) ? ack_n_3v3 : 'bZ); // slave out/in - assign ack_o_n = nubus_oe ? 1 : ((nubus_master_dir ^ ~tmoen) ? ack_n_3v3 : 1); // slave out/in - assign ack_oe_n = nubus_oe ? 1 : ((nubus_master_dir ^ ~tmoen) ? 0 : 1); // slave out/in - assign ack_n_3v3 = nubus_oe ? 'bZ : ((nubus_master_dir ^ tmoen) ? ack_n_5v : 'bZ); // slave out/in + assign ack_o_n = nubus_oe ? 1 : (( ~tmoen) ? ack_n_3v3 : 1); // slave out/in + assign ack_oe_n = nubus_oe ? 1 : (( ~tmoen) ? 0 : 1); // slave out/in + assign ack_n_3v3 = nubus_oe ? 'bZ : (( tmoen) ? ack_n_5v : 'bZ); // slave out/in //assign tm0_n_5v = nubus_oe ? 'bZ : ((nubus_master_dir ^ ~tmoen) ? tm0_n_3v3 : 'bZ); // slave out/in //assign tm1_n_5v = nubus_oe ? 'bZ : ((nubus_master_dir ^ ~tmoen) ? tm1_n_3v3 : 'bZ); // slave out/in - assign tm0_o_n = nubus_oe ? 1 : ((nubus_master_dir ^ ~tmoen) ? tm0_n_3v3 : 1); // slave out/in - assign tm1_o_n = nubus_oe ? 1 : ((nubus_master_dir ^ ~tmoen) ? tm1_n_3v3 : 1); // slave out/in - assign tmx_oe_n = nubus_oe ? 1 : ((nubus_master_dir ^ ~tmoen) ? 0 : 1); // slave out/in - assign tm0_n_3v3 = nubus_oe ? 'bZ : ((nubus_master_dir ^ tmoen) ? tm0_n_5v : 'bZ); // slave in/out - assign tm1_n_3v3 = nubus_oe ? 'bZ : ((nubus_master_dir ^ tmoen) ? tm1_n_5v : 'bZ); // slave in/out + assign tm0_o_n = nubus_oe ? 1 : (( ~tmoen) ? tm0_n_3v3 : 1); // slave out/in + assign tm1_o_n = nubus_oe ? 1 : (( ~tmoen) ? tm1_n_3v3 : 1); // slave out/in + assign tmx_oe_n = nubus_oe ? 1 : (( ~tmoen) ? 0 : 1); // slave out/in + assign tm0_n_3v3 = nubus_oe ? 'bZ : (( tmoen) ? tm0_n_5v : 'bZ); // slave in/out + assign tm1_n_3v3 = nubus_oe ? 'bZ : (( tmoen) ? tm1_n_5v : 'bZ); // slave in/out nubus_arbiter UArbiter ( .idn(id_n_5v), .arbn(arb_n_5v), .arbon(arb_o_n), - .arbcyn(arb), + .arbcyn(arbcy_n), .grant(grant) ); diff --git a/nubus-to-ztex-gateware/nubus_cpu_wb.py b/nubus-to-ztex-gateware/nubus_cpu_wb.py new file mode 100644 index 0000000..f4d1aac --- /dev/null +++ b/nubus-to-ztex-gateware/nubus_cpu_wb.py @@ -0,0 +1,32 @@ +from migen import * +from migen.genlib.fifo import * + +import litex +from litex.soc.interconnect import wishbone + +from migen.genlib.cdc import BusSynchronizer + +class Wishbone2NuBus(Module): + def __init__(self, nubus, wb): + + # cpu + # input cpu_valid, + # input [31:0] cpu_addr, + # input [31:0] cpu_wdata, + # input [ 3:0] cpu_write, + # output cpu_ready, + # output [31:0] cpu_rdata, + #input cpu_lock, + #input cpu_eclr, + #output [3:0] cpu_errors, + + self.comb += nubus.cpu_valid.eq(wb.cyc & wb.stb) + self.comb += nubus.cpu_addr.eq(Cat(Signal(2, reset = 0), wb.adr)) + self.comb += nubus.cpu_wdata.eq(wb.dat_w) + self.comb += If(wb.we == 1, + nubus.cpu_write.eq(wb.sel)).Else( + nubus.cpu_write.eq(0)) + self.comb += wb.ack.eq(nubus.cpu_ready) + self.comb += wb.dat_r.eq(nubus.cpu_rdata) + self.comb += nubus.cpu_lock.eq(0) # FIXME: TODO: ??? + self.comb += nubus.cpu_eclr.eq(0) # FIXME: TODO: ??? diff --git a/nubus-to-ztex-gateware/nubus_fpga_V1_0_timings.xdc b/nubus-to-ztex-gateware/nubus_fpga_V1_0_timings.xdc new file mode 100644 index 0000000..608be42 --- /dev/null +++ b/nubus-to-ztex-gateware/nubus_fpga_V1_0_timings.xdc @@ -0,0 +1,130 @@ +set_input_delay -clock nubus_clk -min 2.404 [get_ports {rqst_3v3_n}] +set_input_delay -clock nubus_clk -max 52.456 [get_ports {rqst_3v3_n}] +set_output_delay -clock nubus_clk -min -6.155 [get_ports {rqst_3v3_n}] +set_output_delay -clock nubus_clk -max 53.627 [get_ports {rqst_3v3_n}] +set_input_delay -clock nubus_clk -min 2.457 [get_ports {start_3v3_n}] +set_input_delay -clock nubus_clk -max 52.526 [get_ports {start_3v3_n}] +set_output_delay -clock nubus_clk -min -6.102 [get_ports {start_3v3_n}] +set_output_delay -clock nubus_clk -max 53.697 [get_ports {start_3v3_n}] +set_input_delay -clock nubus_clk -min 2.525 [get_ports {ack_3v3_n}] +set_input_delay -clock nubus_clk -max 52.617 [get_ports {ack_3v3_n}] +set_output_delay -clock nubus_clk -min -6.034 [get_ports {ack_3v3_n}] +set_output_delay -clock nubus_clk -max 53.788 [get_ports {ack_3v3_n}] +set_input_delay -clock nubus_clk -min 2.285 [get_ports {ad_3v3_n[31]}] +set_input_delay -clock nubus_clk -max 52.296 [get_ports {ad_3v3_n[31]}] +set_output_delay -clock nubus_clk -min -6.274 [get_ports {ad_3v3_n[31]}] +set_output_delay -clock nubus_clk -max 53.468 [get_ports {ad_3v3_n[31]}] +set_input_delay -clock nubus_clk -min 2.274 [get_ports {ad_3v3_n[30]}] +set_input_delay -clock nubus_clk -max 52.282 [get_ports {ad_3v3_n[30]}] +set_output_delay -clock nubus_clk -min -6.285 [get_ports {ad_3v3_n[30]}] +set_output_delay -clock nubus_clk -max 53.453 [get_ports {ad_3v3_n[30]}] +set_input_delay -clock nubus_clk -min 2.261 [get_ports {ad_3v3_n[29]}] +set_input_delay -clock nubus_clk -max 52.265 [get_ports {ad_3v3_n[29]}] +set_output_delay -clock nubus_clk -min -6.298 [get_ports {ad_3v3_n[29]}] +set_output_delay -clock nubus_clk -max 53.436 [get_ports {ad_3v3_n[29]}] +set_input_delay -clock nubus_clk -min 2.259 [get_ports {ad_3v3_n[28]}] +set_input_delay -clock nubus_clk -max 52.262 [get_ports {ad_3v3_n[28]}] +set_output_delay -clock nubus_clk -min -6.300 [get_ports {ad_3v3_n[28]}] +set_output_delay -clock nubus_clk -max 53.433 [get_ports {ad_3v3_n[28]}] +set_input_delay -clock nubus_clk -min 2.257 [get_ports {ad_3v3_n[27]}] +set_input_delay -clock nubus_clk -max 52.260 [get_ports {ad_3v3_n[27]}] +set_output_delay -clock nubus_clk -min -6.302 [get_ports {ad_3v3_n[27]}] +set_output_delay -clock nubus_clk -max 53.431 [get_ports {ad_3v3_n[27]}] +set_input_delay -clock nubus_clk -min 2.239 [get_ports {ad_3v3_n[26]}] +set_input_delay -clock nubus_clk -max 52.236 [get_ports {ad_3v3_n[26]}] +set_output_delay -clock nubus_clk -min -6.320 [get_ports {ad_3v3_n[26]}] +set_output_delay -clock nubus_clk -max 53.407 [get_ports {ad_3v3_n[26]}] +set_input_delay -clock nubus_clk -min 2.244 [get_ports {ad_3v3_n[25]}] +set_input_delay -clock nubus_clk -max 52.242 [get_ports {ad_3v3_n[25]}] +set_output_delay -clock nubus_clk -min -6.315 [get_ports {ad_3v3_n[25]}] +set_output_delay -clock nubus_clk -max 53.414 [get_ports {ad_3v3_n[25]}] +set_input_delay -clock nubus_clk -min 2.246 [get_ports {ad_3v3_n[23]}] +set_input_delay -clock nubus_clk -max 52.244 [get_ports {ad_3v3_n[23]}] +set_output_delay -clock nubus_clk -min -6.313 [get_ports {ad_3v3_n[23]}] +set_output_delay -clock nubus_clk -max 53.416 [get_ports {ad_3v3_n[23]}] +set_input_delay -clock nubus_clk -min 2.291 [get_ports {ad_3v3_n[24]}] +set_input_delay -clock nubus_clk -max 52.305 [get_ports {ad_3v3_n[24]}] +set_output_delay -clock nubus_clk -min -6.268 [get_ports {ad_3v3_n[24]}] +set_output_delay -clock nubus_clk -max 53.476 [get_ports {ad_3v3_n[24]}] +set_input_delay -clock nubus_clk -min 2.239 [get_ports {ad_3v3_n[21]}] +set_input_delay -clock nubus_clk -max 52.235 [get_ports {ad_3v3_n[21]}] +set_output_delay -clock nubus_clk -min -6.320 [get_ports {ad_3v3_n[21]}] +set_output_delay -clock nubus_clk -max 53.406 [get_ports {ad_3v3_n[21]}] +set_input_delay -clock nubus_clk -min 2.218 [get_ports {ad_3v3_n[22]}] +set_input_delay -clock nubus_clk -max 52.207 [get_ports {ad_3v3_n[22]}] +set_output_delay -clock nubus_clk -min -6.341 [get_ports {ad_3v3_n[22]}] +set_output_delay -clock nubus_clk -max 53.378 [get_ports {ad_3v3_n[22]}] +set_input_delay -clock nubus_clk -min 2.211 [get_ports {ad_3v3_n[18]}] +set_input_delay -clock nubus_clk -max 52.198 [get_ports {ad_3v3_n[18]}] +set_output_delay -clock nubus_clk -min -6.348 [get_ports {ad_3v3_n[18]}] +set_output_delay -clock nubus_clk -max 53.370 [get_ports {ad_3v3_n[18]}] +set_input_delay -clock nubus_clk -min 2.202 [get_ports {ad_3v3_n[20]}] +set_input_delay -clock nubus_clk -max 52.185 [get_ports {ad_3v3_n[20]}] +set_output_delay -clock nubus_clk -min -6.357 [get_ports {ad_3v3_n[20]}] +set_output_delay -clock nubus_clk -max 53.357 [get_ports {ad_3v3_n[20]}] +set_input_delay -clock nubus_clk -min 2.251 [get_ports {ad_3v3_n[16]}] +set_input_delay -clock nubus_clk -max 52.252 [get_ports {ad_3v3_n[16]}] +set_output_delay -clock nubus_clk -min -6.308 [get_ports {ad_3v3_n[16]}] +set_output_delay -clock nubus_clk -max 53.423 [get_ports {ad_3v3_n[16]}] +set_input_delay -clock nubus_clk -min 2.205 [get_ports {ad_3v3_n[19]}] +set_input_delay -clock nubus_clk -max 52.190 [get_ports {ad_3v3_n[19]}] +set_output_delay -clock nubus_clk -min -6.354 [get_ports {ad_3v3_n[19]}] +set_output_delay -clock nubus_clk -max 53.361 [get_ports {ad_3v3_n[19]}] +set_input_delay -clock nubus_clk -min 2.147 [get_ports {ad_3v3_n[14]}] +set_input_delay -clock nubus_clk -max 52.113 [get_ports {ad_3v3_n[14]}] +set_output_delay -clock nubus_clk -min -6.412 [get_ports {ad_3v3_n[14]}] +set_output_delay -clock nubus_clk -max 53.284 [get_ports {ad_3v3_n[14]}] +set_input_delay -clock nubus_clk -min 2.178 [get_ports {ad_3v3_n[17]}] +set_input_delay -clock nubus_clk -max 52.154 [get_ports {ad_3v3_n[17]}] +set_output_delay -clock nubus_clk -min -6.381 [get_ports {ad_3v3_n[17]}] +set_output_delay -clock nubus_clk -max 53.326 [get_ports {ad_3v3_n[17]}] +set_input_delay -clock nubus_clk -min 2.148 [get_ports {ad_3v3_n[15]}] +set_input_delay -clock nubus_clk -max 52.113 [get_ports {ad_3v3_n[15]}] +set_output_delay -clock nubus_clk -min -6.411 [get_ports {ad_3v3_n[15]}] +set_output_delay -clock nubus_clk -max 53.285 [get_ports {ad_3v3_n[15]}] +set_input_delay -clock nubus_clk -min 2.145 [get_ports {ad_3v3_n[12]}] +set_input_delay -clock nubus_clk -max 52.110 [get_ports {ad_3v3_n[12]}] +set_output_delay -clock nubus_clk -min -6.414 [get_ports {ad_3v3_n[12]}] +set_output_delay -clock nubus_clk -max 53.281 [get_ports {ad_3v3_n[12]}] +set_input_delay -clock nubus_clk -min 2.134 [get_ports {ad_3v3_n[13]}] +set_input_delay -clock nubus_clk -max 52.095 [get_ports {ad_3v3_n[13]}] +set_output_delay -clock nubus_clk -min -6.425 [get_ports {ad_3v3_n[13]}] +set_output_delay -clock nubus_clk -max 53.267 [get_ports {ad_3v3_n[13]}] +set_input_delay -clock nubus_clk -min 2.139 [get_ports {ad_3v3_n[10]}] +set_input_delay -clock nubus_clk -max 52.103 [get_ports {ad_3v3_n[10]}] +set_output_delay -clock nubus_clk -min -6.420 [get_ports {ad_3v3_n[10]}] +set_output_delay -clock nubus_clk -max 53.274 [get_ports {ad_3v3_n[10]}] +set_input_delay -clock nubus_clk -min 2.120 [get_ports {ad_3v3_n[11]}] +set_input_delay -clock nubus_clk -max 52.077 [get_ports {ad_3v3_n[11]}] +set_output_delay -clock nubus_clk -min -6.439 [get_ports {ad_3v3_n[11]}] +set_output_delay -clock nubus_clk -max 53.248 [get_ports {ad_3v3_n[11]}] +set_input_delay -clock nubus_clk -min 2.163 [get_ports {ad_3v3_n[8]}] +set_input_delay -clock nubus_clk -max 52.134 [get_ports {ad_3v3_n[8]}] +set_output_delay -clock nubus_clk -min -6.396 [get_ports {ad_3v3_n[8]}] +set_output_delay -clock nubus_clk -max 53.306 [get_ports {ad_3v3_n[8]}] +set_input_delay -clock nubus_clk -min 2.146 [get_ports {ad_3v3_n[6]}] +set_input_delay -clock nubus_clk -max 52.111 [get_ports {ad_3v3_n[6]}] +set_input_delay -clock nubus_clk -min 2.128 [get_ports {ad_3v3_n[9]}] +set_input_delay -clock nubus_clk -max 52.087 [get_ports {ad_3v3_n[9]}] +set_input_delay -clock nubus_clk -min 2.166 [get_ports {ad_3v3_n[4]}] +set_input_delay -clock nubus_clk -max 52.138 [get_ports {ad_3v3_n[4]}] +set_input_delay -clock nubus_clk -min 2.142 [get_ports {ad_3v3_n[7]}] +set_input_delay -clock nubus_clk -max 52.106 [get_ports {ad_3v3_n[7]}] +set_input_delay -clock nubus_clk -min 2.189 [get_ports {ad_3v3_n[5]}] +set_input_delay -clock nubus_clk -max 52.169 [get_ports {ad_3v3_n[5]}] +set_output_delay -clock nubus_clk -min -6.370 [get_ports {ad_3v3_n[5]}] +set_output_delay -clock nubus_clk -max 53.340 [get_ports {ad_3v3_n[5]}] +set_input_delay -clock nubus_clk -min 2.614 [get_ports {tm2_3v3_n}] +set_input_delay -clock nubus_clk -max 52.736 [get_ports {tm2_3v3_n}] +set_input_delay -clock nubus_clk -min 2.168 [get_ports {ad_3v3_n[3]}] +set_input_delay -clock nubus_clk -max 52.141 [get_ports {ad_3v3_n[3]}] +set_input_delay -clock nubus_clk -min 2.136 [get_ports {ad_3v3_n[2]}] +set_input_delay -clock nubus_clk -max 52.097 [get_ports {ad_3v3_n[2]}] +set_input_delay -clock nubus_clk -min 2.250 [get_ports {ad_3v3_n[0]}] +set_input_delay -clock nubus_clk -max 52.250 [get_ports {ad_3v3_n[0]}] +set_input_delay -clock nubus_clk -min 2.264 [get_ports {ad_3v3_n[1]}] +set_input_delay -clock nubus_clk -max 52.269 [get_ports {ad_3v3_n[1]}] +set_input_delay -clock nubus_clk -min 2.508 [get_ports {tm1_3v3_n}] +set_input_delay -clock nubus_clk -max 52.594 [get_ports {tm1_3v3_n}] +set_input_delay -clock nubus_clk -min 2.498 [get_ports {tm0_3v3_n}] +set_input_delay -clock nubus_clk -max 52.581 [get_ports {tm0_3v3_n}] diff --git a/nubus-to-ztex-gateware/nubus_master_tst.py b/nubus-to-ztex-gateware/nubus_master_tst.py new file mode 100644 index 0000000..4e27a43 --- /dev/null +++ b/nubus-to-ztex-gateware/nubus_master_tst.py @@ -0,0 +1,55 @@ +from migen import * +from migen.genlib.fifo import * + +import litex +from litex.soc.interconnect import wishbone + +class PingMaster(Module): + def __init__(self): + self.bus_slv = bus_slv = wishbone.Interface() + self.bus_mst = bus_mst = wishbone.Interface() + + valu_reg = Signal(32) + addr_reg = Signal(32) + writ_del = Signal(6) + + self.sync += If(writ_del != 0, + writ_del.eq(writ_del - 1)) + + self.submodules.wishbone_fsm = wishbone_fsm = FSM(reset_state = "Reset") + wishbone_fsm.act("Reset", + NextValue(bus_slv.ack, 0), + NextState("Idle")) + wishbone_fsm.act("Idle", + If(bus_slv.cyc & bus_slv.stb & bus_slv.we & ~bus_slv.ack, #write + # FIXME: should check for prefix? + Case(bus_slv.adr[0:1], { + 0x0: [ NextValue(valu_reg, bus_slv.dat_w[0:32]), ], + 0x1: [ NextValue(addr_reg, bus_slv.dat_w[0:32]), + NextValue(writ_del, 63), ], + }), + NextValue(bus_slv.ack, 1), + ).Elif(bus_slv.cyc & bus_slv.stb & ~bus_slv.we & ~bus_slv.ack, #read + Case(bus_slv.adr[0:1], { + 0x0: [ NextValue(bus_slv.dat_r, valu_reg), ], + 0x1: [ NextValue(bus_slv.dat_r, addr_reg), ], + }), + NextValue(bus_slv.ack, 1), + ).Else( + NextValue(bus_slv.ack, 0), + ), + If(writ_del == 1, + NextState("Write"),), + ) + wishbone_fsm.act("Write", + bus_mst.cyc.eq(1), + bus_mst.stb.eq(1), + bus_mst.we.eq(1), + bus_mst.dat_w.eq(valu_reg), + bus_mst.adr.eq(addr_reg[2:32]), + bus_mst.sel.eq(0xf), + If(bus_mst.ack, + NextState("Idle")), + ) + + diff --git a/nubus-to-ztex-gateware/nubus_mem_wb.py b/nubus-to-ztex-gateware/nubus_mem_wb.py index 2946c2c..6dd3fc2 100644 --- a/nubus-to-ztex-gateware/nubus_mem_wb.py +++ b/nubus-to-ztex-gateware/nubus_mem_wb.py @@ -7,7 +7,6 @@ from litex.soc.interconnect import wishbone from migen.genlib.cdc import BusSynchronizer class NuBus2Wishbone(Module): - """Wishbone Clock Domain Crossing [Master]""" def __init__(self, nubus, wb): # memory @@ -20,15 +19,30 @@ class NuBus2Wishbone(Module): #nubus.mem_error #nubus.mem_tryagain + #nubus_mem_addr_revb = Signal(32) + #self.comb += nubus_mem_addr_revb.eq(Cat(nubus.mem_addr[24:32], nubus.mem_addr[16:24], nubus.mem_addr[8:16], nubus.mem_addr[0:8])) + self.comb += wb.cyc.eq(nubus.mem_valid) self.comb += wb.stb.eq(nubus.mem_valid) self.comb += If(nubus.mem_write == 0, wb.sel.eq(0xF)).Else( wb.sel.eq(nubus.mem_write)) self.comb += wb.we.eq(nubus.mem_write != 0) - self.comb += wb.adr.eq(Cat(nubus.mem_addr[2:24], Signal(8, reset = 0))) # 24 bits, a.k.a 22 bits of words - self.comb += wb.dat_w.eq(nubus.mem_wdata) - self.comb += nubus.mem_rdata.eq(wb.dat_r) + + self.comb += [ + If(~nubus.mem_addr[23], # first 8 MiB of slot space: remap to last 8 Mib of SDRAM + wb.adr.eq(Cat(nubus.mem_addr[2:23], Signal(1, reset=1), Signal(8, reset = 0x8f))), # 0x8f8... + ).Else( # second 8 MiB: direct access + wb.adr.eq(Cat(nubus.mem_addr[2:24], Signal(8, reset = 0)))), # 24 bits, a.k.a 22 bits of words + ] + + self.comb += [ + wb.dat_w.eq(nubus.mem_wdata), + nubus.mem_rdata.eq(wb.dat_r), + #wb.dat_w.eq(Cat(nubus.mem_wdata[24:32], nubus.mem_wdata[16:24], nubus.mem_wdata[8:16], nubus.mem_wdata[0:8])), + #nubus.mem_rdata.eq(Cat(wb.dat_r[24:32], wb.dat_r[16:24], wb.dat_r[8:16], wb.dat_r[0:8])), + ] + self.comb += nubus.mem_ready.eq(wb.ack) - self.comb += nubus.mem_error.eq(0) - self.comb += nubus.mem_tryagain.eq(0) + self.comb += nubus.mem_error.eq(0) # FIXME: TODO: ??? + self.comb += nubus.mem_tryagain.eq(0) # FIXME: TODO: ??? diff --git a/nubus-to-ztex-gateware/nubus_to_fpga_soc.py b/nubus-to-ztex-gateware/nubus_to_fpga_soc.py index 90e4c86..a10ba39 100644 --- a/nubus-to-ztex-gateware/nubus_to_fpga_soc.py +++ b/nubus-to-ztex-gateware/nubus_to_fpga_soc.py @@ -26,12 +26,15 @@ from litedram.frontend.dma import * from migen.genlib.cdc import BusSynchronizer from migen.genlib.resetsync import AsyncResetSynchronizer +from litex.soc.cores.video import VideoS7HDMIPHY from litex.soc.cores.video import VideoVGAPHY +from litex.soc.cores.video import video_timings import goblin_fb # Wishbone stuff from sbus_wb import WishboneDomainCrossingMaster from nubus_mem_wb import NuBus2Wishbone +from nubus_cpu_wb import Wishbone2NuBus # CRG ---------------------------------------------------------------------------------------------- class _CRG_MINI_SIM(Module): @@ -78,10 +81,10 @@ class _CRG_MINI_SIM(Module): num_adv = 0 num_clk = 0 - platform.add_platform_command("create_clock -name sysclk -period 20.8333 [get_nets clk48]") - self.sys_bufg = Signal() - self.specials += Instance("BUFG", i_I=clk48, o_O=self.sys_bufg) - self.comb += self.cd_native.clk.eq(self.sys_bufg) + #platform.add_platform_command("create_clock -name sysclk -period 20.8333 [get_nets clk48]") + #self.sys_bufg = Signal() + #self.specials += Instance("BUFG", i_I=clk48, o_O=self.sys_bufg) + #self.comb += self.cd_native.clk.eq(self.sys_bufg) class _CRG(Module): @@ -179,8 +182,8 @@ class _CRG(Module): platform.add_platform_command("create_generated_clock -name vga_clk [get_pins {{{{MMCME2_ADV_{}/CLKOUT{}}}}}]".format(num_adv, num_clk)) num_clk = num_clk + 1 else: - video_pll.create_clkout(self.cd_hdmi, pix_clk, margin = 0.0005) - video_pll.create_clkout(self.cd_hdmi5x, 5*pix_clk, margin = 0.0005) + video_pll.create_clkout(self.cd_hdmi, pix_clk, margin = 0.005) + video_pll.create_clkout(self.cd_hdmi5x, 5*pix_clk, margin = 0.005) platform.add_platform_command("create_generated_clock -name hdmi_clk [get_pins {{{{MMCME2_ADV_{}/CLKOUT{}}}}}]".format(num_adv, num_clk)) num_clk = num_clk + 1 platform.add_platform_command("create_generated_clock -name hdmi5x_clk [get_pins {{{{MMCME2_ADV_{}/CLKOUT{}}}}}]".format(num_adv, num_clk)) @@ -232,29 +235,35 @@ class NuBusFPGA(SoCCore): # * $A through $E for the Macintosh Quadra 900; $9 through $B for the Macintosh IIcx; # * $C through $E for the Macintosh IIci; $D and $E for the Macintosh Quadra 700; and # * $9 for the Macintosh IIsi). - # So at best we get 16 MiB in 32-bits moden unless using "super slot space" + # the Q650 is $C through $E like the IIci, $E is the one with the PDS. + # So at best we get 16 MiB in 32-bits mode, unless using "super slot space" # in 24 bits it's only one megabyte, $s0 0000 through $sF FFFF # they are translated: '$s0 0000-$sF FFFF' to '$Fs00 0000-$Fs0F FFFF' (for s in range $9 through $E) + # let's assume we have 32-bits mode, this can be requested in the DeclROM apparently self.wb_mem_map = wb_mem_map = { "goblin_mem": 0x00000000, # up to 8 MiB of FB memory + #"END OF FIRST MB" : 0x000FFFFF, + #"END OF 8 MB": 0x007FFFFF, "goblin_bt" : 0x00900000, # BT for goblin "csr" : 0x00a00000, # CSR + "pingmaster": 0x00b00000, "rom": 0x00FF8000, # ROM at the end (32 KiB of it ATM) - "END OF FIRST MB" : 0x000FFFFF, - "END OF SLOT SPACE": 0x00FFFFFF, + #"END OF SLOT SPACE": 0x00FFFFFF, "main_ram": 0x80000000, # not directly reachable from NuBus "video_framebuffer": 0x80000000 + 0x10000000 - goblin_fb_size, # Updated later + "fixme_master": 0xF0000000, } self.mem_map.update(wb_mem_map) - self.submodules.crg = _CRG(platform=platform, sys_clk_freq=sys_clk_freq, goblin=goblin, pix_clk=litex.soc.cores.video.video_timings[goblin_res]["pix_clk"]) + self.submodules.crg = _CRG(platform=platform, sys_clk_freq=sys_clk_freq, goblin=goblin, hdmi=hdmi, pix_clk=litex.soc.cores.video.video_timings[goblin_res]["pix_clk"]) ## add our custom timings after the clocks have been defined xdc_timings_filename = None; - #if (version == "V1.0"): - # xdc_timings_filename = "/home/dolbeau/nubus-to-ztex-gateware/nubus-to-ztex-timings.xdc" + if (version == "V1.0"): + xdc_timings_filename = "/home/dolbeau/nubus-to-ztex-gateware/nubus_fpga_V1_0_timings.xdc" if (xdc_timings_filename != None): xdc_timings_file = open(xdc_timings_filename) + xdc_timings_lines = xdc_timings_file.readlines() for line in xdc_timings_lines: if (line[0:3] == "set"): @@ -263,7 +272,7 @@ class NuBusFPGA(SoCCore): platform.add_platform_command(fix_line) rom_file = "rom_{}.bin".format(version.replace(".", "_")) - rom_data = soc_core.get_mem_data(rom_file, "big") + rom_data = soc_core.get_mem_data(rom_file, "little") # "big" # rom = Array(rom_data) #print("\n****************************************\n") #for i in range(len(rom)): @@ -271,26 +280,34 @@ class NuBusFPGA(SoCCore): #print("\n****************************************\n") self.add_ram("rom", origin=self.mem_map["rom"], size=2**15, contents=rom_data, mode="r") ## 32 KiB, must match mmap - avail_sdram = 0 - self.submodules.ddrphy = s7ddrphy.A7DDRPHY(platform.request("ddram"), - memtype = "DDR3", - nphases = 4, - sys_clk_freq = sys_clk_freq) - self.add_sdram("sdram", - phy = self.ddrphy, - module = MT41J128M16(sys_clk_freq, "1:4"), - l2_cache_size = 0, - ) - avail_sdram = self.bus.regions["main_ram"].size - from sdram_init import DDR3FBInit - self.submodules.sdram_init = DDR3FBInit(sys_clk_freq=sys_clk_freq, bitslip=1, delay=25) - self.bus.add_master(name="DDR3Init", master=self.sdram_init.bus) - #avail_sdram = 256 * 1024 * 1024 + #from wb_test import WA2D + #self.submodules.wa2d = WA2D(self.platform) + #self.bus.add_slave("WA2D", self.wa2d.bus, SoCRegion(origin=0x00C00000, size=0x00400000, cached=False)) - self.submodules.leds = LedChaser( - pads = platform.request_all("user_led"), - sys_clk_freq = sys_clk_freq) - self.add_csr("leds") + notsimul = 1 + if (notsimul): + avail_sdram = 0 + self.submodules.ddrphy = s7ddrphy.A7DDRPHY(platform.request("ddram"), + memtype = "DDR3", + nphases = 4, + sys_clk_freq = sys_clk_freq) + self.add_sdram("sdram", + phy = self.ddrphy, + module = MT41J128M16(sys_clk_freq, "1:4"), + l2_cache_size = 0, + ) + avail_sdram = self.bus.regions["main_ram"].size + from sdram_init import DDR3FBInit + self.submodules.sdram_init = DDR3FBInit(sys_clk_freq=sys_clk_freq, bitslip=1, delay=25) + self.bus.add_master(name="DDR3Init", master=self.sdram_init.bus) + else: + avail_sdram = 256 * 1024 * 1024 + self.add_ram("ram", origin=self.mem_map["goblin_mem"], size=2**16, mode="rw") + + #self.submodules.leds = ClockDomainsRenamer("nubus")(LedChaser( + # pads = platform.request_all("user_led"), + # sys_clk_freq = 10e6)) + #self.add_csr("leds") base_fb = self.wb_mem_map["main_ram"] + avail_sdram - 1048576 # placeholder if (goblin): @@ -298,6 +315,7 @@ class NuBusFPGA(SoCCore): avail_sdram = avail_sdram - goblin_fb_size base_fb = self.wb_mem_map["main_ram"] + avail_sdram self.wb_mem_map["video_framebuffer"] = base_fb + print(f"FrameBuffer base_fb @ {base_fb:x}") else: print("***** ERROR ***** Can't have a FrameBuffer without main ram\n") assert(False) @@ -307,13 +325,16 @@ class NuBusFPGA(SoCCore): # requires us to reset the Macintosh afterward so the FPGA board # is properly identified # This is in the 'native' ClockDomain that is never reset + # not needed, FPGA initializes fast enough, works on cold boots #hold_reset_ctr = Signal(30, reset=960000000) hold_reset_ctr = Signal(5, reset=31) self.sync.native += If(hold_reset_ctr>0, hold_reset_ctr.eq(hold_reset_ctr - 1)) - hold_reset = Signal(reset=1) + hold_reset = Signal() self.comb += hold_reset.eq(~(hold_reset_ctr == 0)) pad_nubus_oe = platform.request("nubus_oe") self.comb += pad_nubus_oe.eq(hold_reset) + #pad_user_led_0 = platform.request("user_led", 0) + #self.comb += pad_user_led_0.eq(~hold_reset) # Interface NuBus to wishbone # we need to cross clock domains @@ -325,14 +346,30 @@ class NuBusFPGA(SoCCore): self.submodules.nubus = nubus.NuBus(platform=platform, cd_nubus="nubus") self.submodules.nubus2wishbone = ClockDomainsRenamer("nubus")(NuBus2Wishbone(nubus=self.nubus,wb=self.wishbone_master_nubus)) + wishbone_slave_nubus = wishbone.Interface(data_width=self.bus.data_width) + self.submodules.wishbone2nubus = ClockDomainsRenamer("nubus")(Wishbone2NuBus(nubus=self.nubus,wb=wishbone_slave_nubus)) + self.submodules.wishbone_slave_sys = WishboneDomainCrossingMaster(platform=self.platform, slave=wishbone_slave_nubus, cd_master="sys", cd_slave="nubus") + self.bus.add_slave("DMA", self.wishbone_slave_sys, SoCRegion(origin=self.mem_map.get("fixme_master", None), size=0x0fffffff, cached=False)) + + if (goblin): if (not hdmi): self.submodules.videophy = VideoVGAPHY(platform.request("vga"), clock_domain="vga") - self.submodules.goblin = goblin_fb.goblin(soc=self, phy=self.videophy, timings=goblin_res, clock_domain="vga") # clock_domain for the VGA side, goblin is running in cd_sys + self.submodules.goblin = goblin_fb.goblin(soc=self, phy=self.videophy, timings=goblin_res, clock_domain="vga", irq_line=self.platform.request("nmrq_3v3_n"), endian="little", truecolor=False) # clock_domain for the VGA side, goblin is running in cd_sys else: self.submodules.videophy = VideoS7HDMIPHY(platform.request("hdmi"), clock_domain="hdmi") - self.submodules.goblin = goblin_fb.goblin(soc=self, phy=self.videophy, timings=goblin_res, clock_domain="hdmi") # clock_domain for the VGA side, goblin is running in cd_sys + self.submodules.goblin = goblin_fb.goblin(soc=self, phy=self.videophy, timings=goblin_res, clock_domain="hdmi", irq_line=self.platform.request("nmrq_3v3_n"), endian="little", truecolor=False) # clock_domain for the HDMI side, goblin is running in cd_sys self.bus.add_slave("goblin_bt", self.goblin.bus, SoCRegion(origin=self.mem_map.get("goblin_bt", None), size=0x1000, cached=False)) + pad_user_led_0 = platform.request("user_led", 0) + pad_user_led_1 = platform.request("user_led", 1) + self.comb += pad_user_led_0.eq(self.goblin.video_framebuffer.underflow) + self.comb += pad_user_led_1.eq(self.goblin.video_framebuffer.fb_dma.enable) + + # for testing + #from nubus_master_tst import PingMaster + #self.submodules.pingmaster = PingMaster() + #self.bus.add_slave("pingmaster_slv", self.pingmaster.bus_slv, SoCRegion(origin=self.mem_map.get("pingmaster", None), size=0x010, cached=False)) + #self.bus.add_master(name="pingmaster_mst", master=self.pingmaster.bus_mst) def main(): diff --git a/nubus-to-ztex-gateware/post_process_timings.sh b/nubus-to-ztex-gateware/post_process_timings.sh new file mode 100755 index 0000000..7991b68 --- /dev/null +++ b/nubus-to-ztex-gateware/post_process_timings.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +FILE=$1 + +sed -e 's/ad_n\([0-9]*\)/ad_3v3_n[\1]/' \ + -e 's/clk_n/clk_3v3_n/' \ + -e 's/rqst_n/rqst_3v3_n/' \ + -e 's/start_n/start_3v3_n/' \ + -e 's/ack_n/ack_3v3_n/' \ + -e 's/clk_n/clk_3v3_n/' \ + -e 's/tm_n\([0-9]*\)/tm\1_3v3_n/' \ + -e 's/clk_3v3_n/nubus_clk/g' \ + $FILE | grep -v 'nubus_clk.*nubus_clk' | grep '^set' | tee $2 + + diff --git a/nubus-to-ztex-gateware/rom.a b/nubus-to-ztex-gateware/rom.a new file mode 100644 index 0000000..7b921d3 --- /dev/null +++ b/nubus-to-ztex-gateware/rom.a @@ -0,0 +1 @@ +;Include files PRINT OFF INCLUDE 'SysErr.a' ;Macintosh System equates INCLUDE 'SysEqu.a' ;Macintosh System equates INCLUDE 'ROMEqu.a' ;Declaration ROM equates INCLUDE 'SlotEqu.a' ;Slot Manager equates and macros INCLUDE 'TimeEqu.a' ;Macintosh traps INCLUDE 'Traps.a' ;Macintosh traps INCLUDE 'VideoEqu.a' ;Video driver equates INCLUDE 'DepVideoEqu.a' PRINT ON MACHINE MC68020 DclROM MAIN sRsrc_Board EQU 1 ; board sResource (>0 & <128) sRsrc_VidS8 EQU $80 ; functional sResources _sRsrcDir OSLstEntry sRsrc_Board,_sRsrc_Board ; board sRsrc List OSLstEntry sRsrc_VidS8,_sRsrc_VidS8 ; video sRsrc List DatLstEntry EndOfList,0 ; end of list STRING C _sRsrc_Board OSLstEntry sRsrcType,_BoardType ; offset to board descriptor OSLstEntry sRsrcName,_BoardName ; offset to name of board DatLstEntry boardId,NuBusFPGAID ; board ID # (assigned by DTS) OSLstEntry PrimaryInit,_sPInitRec ; offset to PrimaryInit exec blk OSLstEntry VendorInfo,_VendorInfo ; offset to vendor info record ;OSLstEntry SecondaryInit,_sSInitRec ; offset to SecondaryInit block DatLstEntry EndOfList,0 ; end of list _BoardType DC.W CatBoard ; board sResource DC.W TypBoard DC.W 0 DC.W 0 _BoardName DC.L 'SBusFPGA Video' ; name of board ; _VidICON ; optional icon, not needed ; _sVidNameDir ; optional name(s), not needed _sPInitRec DC.L _EndsPInitRec-_sPInitRec ; physical block size INCLUDE 'NuBusFPGAPrimaryInit.a' ; the header/code ALIGN 2 _EndsPInitRec ;_sSInitRec ; DC.L _EndsSInitRec-_sSInitRec ; physical block size ; INCLUDE 'NuBusFPGASecondaryInit.a' ; the header/code ; ALIGN 2 ;_EndsSInitRec STRING C _VendorInfo OSLstEntry VendorId,_VendorId ; offset to vendor ID OSLstEntry RevLevel,_RevLevel ; offset to revision OSLstEntry PartNum,_PartNum ; offset to part number record OSLstEntry Date,_Date ; offset to ROM build date DatLstEntry EndOfList,0 _VendorId DC.L 'Romain Dolbeau' ; vendor ID _RevLevel DC.L 'NuBusFPGA V1.0' ; revision level _PartNum DC.L 'Part Number' ; part number _Date DC.B '&SysDate' ; date _sRsrc_VidS8 OSLstEntry sRsrcType,_VideoType ; video type descriptor OSLstEntry sRsrcName,_VideoName ; offset to driver name string ; OSLstEntry sRsrcDrvrDir,_VidDrvrDir ; offset to driver directory DatLstEntry sRsrcHWDevId,1 ; hardware device ID OSLstEntry MinorBaseOS,_MinorBase ; offset to frame buffer array OSLstEntry MinorLength,_MinorLength ; offset to frame buffer length OSLstEntry sGammaDir,_GammaDirS ; directory for 640x480 monitor ; Parameters OSLstEntry FirstVidMode,_EBMs ; offset to EightBitMode parms DatLstEntry EndOfList,0 ; end of list STRING C _VideoType DC.W CatDisplay ; DC.W TypVideo ; DC.W DrSwApple ; DC.W DrHwNuBusFPGA ; _VideoName DC.L 'Video_NuBusFPGA' ; video driver name _MinorBase DC.L defMinorBase ; frame buffer offset _MinorLength DC.L defMinorLength ; frame buffer length ;_VidDrvrDir ; OSLstEntry sMacOS68020,_sMacOS68020 driver directory for Mac OS ; DatLstEntry EndOfList,0 ; ;_sMacOS68020 ; DC.L _End020Drvr- sMacOS68020 ; physical block size ; INCLUDE 'NuBusFPGADrvr.a' ; driver code ;_End020Drvr STRING C _GammaDirS ; for the 640x480 monitor OSLstEntry 128,_SmallGamma DatLstEntry EndOfList,0 _SmallGamma DC.L _EndSmallGamma-_SmallGamma DC.W SGammaResID DC.B 'Small Gamma' ; Monitors name ALIGN 2 DC.W $0000 ; gVersion DC.W DrHwNuBusFPGA ; gType DC.W $0000 ; gFormulaSize DC.W $0001 ; gChanCnt DC.W $0100 ; gDataCnt DC.W $0008 ; gChanWidth DC.L $0005090B,$0E101315,$17191B1D,$1E202224 DC.L $2527282A,$2C2D2F30,$31333436,$37383A3B DC.L $3C3E3F40,$42434445,$4748494A,$4B4D4E4F DC.L $50515254,$55565758,$595A5B5C,$5E5F6061 DC.L $62636465,$66676869,$6A6B6C6D,$6E6F7071 DC.L $72737475,$76777879,$7A7B7C7D,$7E7F8081 DC.L $81828384,$85868788,$898A8B8C,$8C8D8E8F DC.L $90919293,$94959596,$9798999A,$9B9B9C9D DC.L $9E9FA0A1,$A1A2A3A4,$A5A6A6A7,$A8A9AAAB DC.L $ABACADAE,$AFB0B0B1,$B2B3B4B4,$B5B6B7B8 DC.L $B8B9BABB,$BCBCBDBE,$BFC0C0C1,$C2C3C3C4 DC.L $C5C6C7C7,$C8C9CACA,$CBCCCDCD,$CECFD0D0 DC.L $D1D2D3D3,$D4D5D6D6,$D7D8D9D9,$DADBDCDC DC.L $DDDEDFDF,$E0E1E1E2,$E3E4E4E5,$E6E7E7E8 DC.L $E9B9EAEB,$ECECEDEE,$EEEFF0F1,$F1F2F3F3 DC.L $F4F5F5F6,$F7F8F8F9,$FAFAFBFC,$FCFDFEFF _EndSmallGamma _EBMs OSLstEntry mVidParams,_EBVParms ; offset to vid parameters DatLstEntry mPageCnt,Pages8s ; number of video pages DatLstEntry mDevType,defmDevType ; device type DatLstEntry EndOfList,0 ; end of list _EBVParms DC.L _EndEBVParms-_EBVParms ; physical block size DC.L defmBaseOffset ; QuickDraw base offset ; vpBaseOffset DC.W RB8s ; physRowBytes ; vpRowBytes DC.W defmBounds_Ts,defmBounds_Ls,defmBounds_Bs,defmBounds_Rs ; vpBounds DC.W defVersion ; bmVersion ; vpVersion DC.W 0 ; packType not used ; vpPackType DC.L 0 ; packSize not used ; vpPackSize DC.L defmHRes ; bmHRes DC.L defmVRes ; bmVRes DC.W ChunkyIndexed ; bmPixelType DC.W 8 ; bmPixelSize DC.W 1 ; bmCmpCount DC.W 8 ; bmCmpSize DC.L defmPlaneBytes ; bmPlaneBytes _EndEBVParms WITH FHeaderRec ORG ROMSize-FHeaderRec.fhBlockSize DC.L (_sRsrcDir-*)**$00FFFFFF ;offset to sResource directory DC.L ROMSize ;length of declaration data DC.L 0 ;CRC {Patched by crcPatch} DC.B 2 ;revision (1-9) DC.B AppleFormat ; format DC.L TestPattern ;test pattern DC.B 0 ;reserved byte DC.B $0F ;ByteLanes: 1111 0001 ENDWITH END \ No newline at end of file diff --git a/nubus-to-ztex-gateware/sdram_init.py b/nubus-to-ztex-gateware/sdram_init.py new file mode 100644 index 0000000..d314bf4 --- /dev/null +++ b/nubus-to-ztex-gateware/sdram_init.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +from migen import * + +from wb_master import * +from wb_master import _WRITE_CMD, _WAIT_CMD, _DONE_CMD + + +dfii_control_sel = 0x01 +dfii_control_cke = 0x02 +dfii_control_odt = 0x04 +dfii_control_reset_n = 0x08 + +dfii_command_cs = 0x01 +dfii_command_we = 0x02 +dfii_command_cas = 0x04 +dfii_command_ras = 0x08 +dfii_command_wrdata = 0x10 +dfii_command_rddata = 0x20 + +# /!\ keep up to date with csr /!\ +sdram_dfii_base = 0x00a01000 +sdram_dfii_control = sdram_dfii_base + 0x000 +sdram_dfii_pi0_command = sdram_dfii_base + 0x004 +sdram_dfii_pi0_command_issue = sdram_dfii_base + 0x008 +sdram_dfii_pi0_address = sdram_dfii_base + 0x00c +sdram_dfii_pi0_baddress = sdram_dfii_base + 0x010 + +# /!\ keep up to date with csr /!\ +ddrphy_base = 0x00a00000 +ddrphy_rst = ddrphy_base + 0x000 +ddrphy_dly_sel = ddrphy_base + 0x010 +ddrphy_rdly_dq_rst = ddrphy_base + 0x014 +ddrphy_rdly_dq_inc = ddrphy_base + 0x018 +ddrphy_rdly_dq_bitslip_rst = ddrphy_base + 0x01c +ddrphy_rdly_dq_bitslip = ddrphy_base + 0x020 +ddrphy_wdly_dq_bitslip_rst = ddrphy_base + 0x024 +ddrphy_wdly_dq_bitslip = ddrphy_base + 0x028 +ddrphy_rdphase = ddrphy_base + 0x02c +ddrphy_wdphase = ddrphy_base + 0x030 + + +def period_to_cycles(sys_clk_freq, period): + return int(period*sys_clk_freq) + +def ddr3_init_instructions(sys_clk_freq): + return [ + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.001), + # phase + _WRITE_CMD, ddrphy_rdphase, 2, + _WRITE_CMD, ddrphy_wdphase, 3, + + # software control + _WRITE_CMD, sdram_dfii_control, dfii_control_reset_n | dfii_control_odt | dfii_control_cke, + + # reset + _WRITE_CMD, ddrphy_rst, 1, + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.001), + _WRITE_CMD, ddrphy_rst, 0, + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.001), + + # release reset + _WRITE_CMD, sdram_dfii_pi0_address, 0x0, + _WRITE_CMD, sdram_dfii_pi0_baddress, 0, + _WRITE_CMD, sdram_dfii_control, dfii_control_odt|dfii_control_reset_n, + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.005), + + # bring cke high + _WRITE_CMD, sdram_dfii_pi0_address, 0x0, + _WRITE_CMD, sdram_dfii_pi0_baddress, 0, + _WRITE_CMD, sdram_dfii_control, dfii_control_cke|dfii_control_odt|dfii_control_reset_n, + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.001), + + # load mode register 2, CWL = 5 + _WRITE_CMD, sdram_dfii_pi0_address, 0x200, + _WRITE_CMD, sdram_dfii_pi0_baddress, 2, + _WRITE_CMD, sdram_dfii_pi0_command, dfii_command_ras|dfii_command_cas|dfii_command_we|dfii_command_cs, + _WRITE_CMD, sdram_dfii_pi0_command_issue, 1, + + # load mode register 3 + _WRITE_CMD, sdram_dfii_pi0_address, 0x0, + _WRITE_CMD, sdram_dfii_pi0_baddress, 3, + _WRITE_CMD, sdram_dfii_pi0_command, dfii_command_ras|dfii_command_cas|dfii_command_we|dfii_command_cs, + _WRITE_CMD, sdram_dfii_pi0_command_issue, 1, + + # load mode register 1 + _WRITE_CMD, sdram_dfii_pi0_address, 0x6, + _WRITE_CMD, sdram_dfii_pi0_baddress, 1, + _WRITE_CMD, sdram_dfii_pi0_command, dfii_command_ras|dfii_command_cas|dfii_command_we|dfii_command_cs, + _WRITE_CMD, sdram_dfii_pi0_command_issue, 1, + + # load mode register 0, CL=6, BL=8 + _WRITE_CMD, sdram_dfii_pi0_address, 0x920, + _WRITE_CMD, sdram_dfii_pi0_baddress, 0, + _WRITE_CMD, sdram_dfii_pi0_command, dfii_command_ras|dfii_command_cas|dfii_command_we|dfii_command_cs, + _WRITE_CMD, sdram_dfii_pi0_command_issue, 1, + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.0002), + + # zq calibration + _WRITE_CMD, sdram_dfii_pi0_address, 0x400, + _WRITE_CMD, sdram_dfii_pi0_baddress, 0, + _WRITE_CMD, sdram_dfii_pi0_command, dfii_command_we|dfii_command_cs, + _WRITE_CMD, sdram_dfii_pi0_command_issue, 1, + _WAIT_CMD | period_to_cycles(sys_clk_freq, 0.0002), + + # hardware control + _WRITE_CMD, sdram_dfii_control, dfii_control_sel, +] + + +def ddr3_config_instructions(bitslip, delay): + r = [] + for module in range(2): + r += [_WRITE_CMD, ddrphy_dly_sel, 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