1
0
mirror of synced 2026-01-11 23:42:59 +00:00

changes to be able to test cg3/cg6 support with original PROM contents

This commit is contained in:
Romain Dolbeau 2022-01-08 10:34:34 +01:00
parent 7fb915237d
commit 479b976567
5 changed files with 69 additions and 23 deletions

View File

@ -11,7 +11,7 @@ class CG6Accel(Module): # AutoCSR ?
def __init__(self, soc, base_fb, hres, vres):
platform = soc.platform
# for FBC and TEC - where we just ignore TEC
# for FBC and TEC
self.bus = bus = wishbone.Interface()
self.COORD_BITS = COORD_BITS = 12
@ -86,7 +86,7 @@ class CG6Accel(Module): # AutoCSR ?
wishbone_fsm.act("Idle",
self.fbc_fifo_font.we.eq(0),
If(bus.cyc & bus.stb & bus.we & ~bus.ack, #write
Case(bus.adr[0:11], {
Case(bus.adr[0:12], { # the thirteenth bit is to match the FBC but not the TEC
"default": [ ],
# 0: fbc_config R/O
1: [ NextValue(fbc_mode, bus.dat_w) ],
@ -166,7 +166,7 @@ class CG6Accel(Module): # AutoCSR ?
}),
NextValue(bus.ack, 1),
).Elif(bus.cyc & bus.stb & ~bus.we & ~bus.ack, #read
Case(bus.adr[0:11], {
Case(bus.adr[0:12], { # the thirteenth bit is to match the FBC but not the TEC
"default": [ NextValue(bus.dat_r, 0xDEADBEEF) ],
0: [ NextValue(bus.dat_r, fbc_config) ],
1: [ NextValue(bus.dat_r, fbc_mode) ],
@ -177,13 +177,13 @@ class CG6Accel(Module): # AutoCSR ?
],
# 5: fbc_draw R/O -> start a "draw" on R
5: [ NextValue(fbc_do_draw, ~fbc_s[GX_INPROGRESS_BIT]), # ignore command while working
NextValue(bus.dat_r, 0),
NextValue(bus.dat_r, fbc_s), # FIXME, returns the FULL and INPROGRESS bit only
#NextValue(draw_blit_overflow, draw_blit_overflow | fbc_do_draw | fbc_do_blit),
#NextValue(draw_blit_overflow, draw_blit_overflow | fbc_s[GX_INPROGRESS_BIT]),
],
# 6: fbc_blit R/O -> start a "blit" on R
6: [ NextValue(fbc_do_blit, ~fbc_s[GX_INPROGRESS_BIT]), # ignore command while working
NextValue(bus.dat_r, 0),
NextValue(bus.dat_r, fbc_s), # FIXME, returns the FULL and INPROGRESS bit only
#NextValue(draw_blit_overflow, draw_blit_overflow | fbc_do_draw | fbc_do_blit),
#NextValue(draw_blit_overflow, draw_blit_overflow | fbc_s[GX_INPROGRESS_BIT]),
],
@ -197,21 +197,23 @@ class CG6Accel(Module): # AutoCSR ?
41: [ NextValue(bus.dat_r, fbc_y[2]) ],
44: [ NextValue(bus.dat_r, fbc_x[3]) ], # 0x0b0
45: [ NextValue(bus.dat_r, fbc_y[3]) ], # 0x0b4
48: [ NextValue(bus.dat_r, fbc_offx) ],
48: [ NextValue(bus.dat_r, fbc_offx) ], # 0x0c0
49: [ NextValue(bus.dat_r, fbc_offy) ],
52: [ NextValue(bus.dat_r, fbc_incx) ], # 0x0d0
53: [ NextValue(bus.dat_r, fbc_incy) ],
# 54-55: pad81
56: [ NextValue(bus.dat_r, fbc_clipminx) ],
56: [ NextValue(bus.dat_r, fbc_clipminx) ], # 0x0e0
57: [ NextValue(bus.dat_r, fbc_clipminy) ],
# 58-59: pad9
60: [ NextValue(bus.dat_r, fbc_clipmaxx) ],
60: [ NextValue(bus.dat_r, fbc_clipmaxx) ], # 0x0f0
61: [ NextValue(bus.dat_r, fbc_clipmaxy) ],
# 62-63: pad10
64: [ NextValue(bus.dat_r, fbc_fg) ], # 0x100
65: [ NextValue(bus.dat_r, fbc_bg) ], # 0x104
66: [ NextValue(bus.dat_r, fbc_alu) ], # 0x108
67: [ NextValue(bus.dat_r, fbc_pm) ], # 0x10c
67: [ NextValue(bus.dat_r, fbc_pm) ], # 0x10c # planemask
#68: pixelmask (written to 0xFFFFFFFF by 510-2325 prom)
#72-79: patterns (written to 0xFFFFFFFF by 510-2325 prom)
576: [ NextValue(bus.dat_r, fbc_arectx),
],
577: [ NextValue(bus.dat_r, fbc_arecty),
@ -287,7 +289,7 @@ class CG6Accel(Module): # AutoCSR ?
If(fbc_r5_cmd[FUN_DONE_BIT],
fbc_r5_cmd.eq(0),
fbc_s[GX_INPROGRESS_BIT].eq(0),
#fbc_s[GX_FULL_BIT].eq(0),
fbc_s[GX_FULL_BIT].eq(0),
local_reset.eq(1),
#timeout.eq(timeout_rst),
).Elif(self.fbc_fifo_font.readable & fbc_s[GX_INPROGRESS_BIT] & fbc_r5_cmd[FUN_FONT_NEXT_REQ_BIT] & (fbc_r5_cmd[0:4] == 0x4),
@ -313,21 +315,21 @@ class CG6Accel(Module): # AutoCSR ?
fbc_next_y0.eq(fbc_fifo_font_out.y0),
fbc_r5_cmd.eq(FUN_FONT), # includes FUN_FONT_NEXT_RDY_BIT
fbc_s[GX_INPROGRESS_BIT].eq(1),
#fbc_s[GX_FULL_BIT].eq(1),
fbc_s[GX_FULL_BIT].eq(1),
local_reset.eq(0),
#timeout.eq(timeout_rst),
).Elif(fbc_do_draw & ~fbc_s[GX_INPROGRESS_BIT],
fbc_do_draw.eq(0),
fbc_r5_cmd.eq(FUN_DRAW),
fbc_s[GX_INPROGRESS_BIT].eq(1),
#fbc_s[GX_FULL_BIT].eq(1),
fbc_s[GX_FULL_BIT].eq(1),
local_reset.eq(0),
#timeout.eq(timeout_rst),
).Elif(fbc_do_blit & ~fbc_s[GX_INPROGRESS_BIT],
fbc_do_blit.eq(0),
fbc_r5_cmd.eq(FUN_BLIT),
fbc_s[GX_INPROGRESS_BIT].eq(1),
#fbc_s[GX_FULL_BIT].eq(1),
fbc_s[GX_FULL_BIT].eq(1),
local_reset.eq(0),
#timeout.eq(timeout_rst),
@ -336,7 +338,7 @@ class CG6Accel(Module): # AutoCSR ?
#).Elif((timeout == 0) & fbc_s[GX_INPROGRESS_BIT], # OUPS
# fbc_r5_cmd.eq(0),
# fbc_s[GX_INPROGRESS_BIT].eq(0),
# #fbc_s[GX_FULL_BIT].eq(0),
# fbc_s[GX_FULL_BIT].eq(0),
# local_reset.eq(1),
# timeout.eq(timeout_rst),
#),

View File

@ -163,7 +163,8 @@ class cg6(Module, AutoCSR):
#pad_SBUS_DATA_OE_LED = soc.platform.request("SBUS_DATA_OE_LED")
#self.comb += pad_SBUS_DATA_OE_LED.eq((hwcursor_x < 1280) & (hwcursor_y < 1024));
# FHC / THC
self.bus2 = bus2 = wishbone.Interface()
self.submodules.wishbone_fsm2 = wishbone_fsm2 = FSM(reset_state = "Reset")
wishbone_fsm2.act("Reset",
@ -171,13 +172,13 @@ class cg6(Module, AutoCSR):
NextState("Idle"))
wishbone_fsm2.act("Idle",
If(bus2.cyc & bus2.stb & bus2.we & ~bus2.ack, #write
Case(bus2.adr[0:11], {
Case(bus2.adr[0:12], {
"default": [ ],
1599: [ NextValue(hwcursor_x, bus2.dat_w[16:28]),
NextValue(hwcursor_y, bus2.dat_w[ 0:12]),
],
}),
Case(bus2.adr[5:11], {
Case(bus2.adr[5:12], {
"default": [ ],
50 : [ upd_overlay_fifo.we.eq(1), # 50*32 = 1600..1631
upd_overlay_fifo.din.eq(Cat(Signal(1, reset = 0), 31-bus2.adr[0:5], bus2.dat_w))
@ -188,13 +189,32 @@ class cg6(Module, AutoCSR):
}),
NextValue(bus2.ack, 1),
).Elif(bus2.cyc & bus2.stb & ~bus2.we & ~bus2.ack, #read
Case(bus2.adr[0:10], {
Case(bus2.adr[0:12], {
"default": [ NextValue(bus2.dat_r, 0xDEADBEEF) ],
0: [ NextValue(bus2.dat_r, 0x60b00000) ], # claim revision 11 (TurboGX)
# my TGX+ is 0x64b009ff as a console in 1152x900
#0: [ NextValue(bus2.dat_r, 0x64b009ff) ], # claim revision 11 (TurboGX), that's the 0xb<<20
0: [ NextValue(bus2.dat_r, 0x64b509ff) ], # claim revision 11 (TurboGX), that's the 0xb<<20
}),
NextValue(bus2.ack, 1),
).Else(
NextValue(bus2.ack, 0),
)
)
# ALT catch-all
self.bus3 = bus3 = wishbone.Interface()
self.submodules.wishbone_fsm3 = wishbone_fsm3 = FSM(reset_state = "Reset")
wishbone_fsm3.act("Reset",
NextValue(bus3.ack, 0),
NextState("Idle"))
wishbone_fsm3.act("Idle",
If(bus3.cyc & bus3.stb & bus3.we & ~bus3.ack, #write
NextValue(bus3.ack, 1),
).Elif(bus3.cyc & bus3.stb & ~bus3.we & ~bus3.ack, #read
NextValue(bus3.dat_r, 0xDEADBEEF),
NextValue(bus3.ack, 1),
).Else(
NextValue(bus3.ack, 0),
)
)

View File

@ -150,8 +150,8 @@ class ExchangeWithMem(Module, AutoCSR):
self.irqctrl.we.eq(0),
)
pad_SBUS_DATA_OE_LED = platform.request("SBUS_DATA_OE_LED")
self.comb += pad_SBUS_DATA_OE_LED.eq(self.irq)
#pad_SBUS_DATA_OE_LED = platform.request("SBUS_DATA_OE_LED")
#self.comb += pad_SBUS_DATA_OE_LED.eq(self.irq)
#self.comb += self.dma_status.status[16:17].eq(self.wishbone_w_master.cyc) # show the WB iface status (W)
#self.comb += self.dma_status.status[17:18].eq(self.wishbone_w_master.stb)

View File

@ -32,6 +32,7 @@ SRAM_ADDR_PFX = Signal(12, reset = 0x009) # unmapped ; LE
ENGINE_ADDR_PFXA = Signal(12, reset = 0x00a)
ENGINE_ADDR_PFXB = Signal(12, reset = 0x00b)
CG6_BT_ADDR_PFX = Signal(12, reset = 0x020)
CG6_ALT_ADDR_PFX = Signal(12, reset = 0x028)
CG6_FHC_ADDR_PFX = Signal(12, reset = 0x030)
CG3_BT_ADDR_PFX = Signal(12, reset = 0x040)
FBC_ROM_ADDR_PFX = Signal(12, reset = 0x041)
@ -492,6 +493,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_PARITY),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
).Elif(((SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == ROM_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == WISHBONE_CSR_ADDR_PFX) |
@ -502,6 +504,7 @@ class SBusFPGABus(Module):
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == ENGINE_ADDR_PFXA) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == ENGINE_ADDR_PFXB) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_BT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_ALT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_FHC_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG3_BT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_BIGPFX_LOW:ADDR_BIGPFX_LOW+ADDR_BIGPFX_LENGTH] == CG3_PIXELS_ADDR_BIGPFX)),
@ -548,6 +551,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_ADDRESS),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
)
# ***** Slave Byte Read *****
@ -603,6 +607,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_ADDRESS),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
)
# ***** Slave HalfWord Read *****
@ -616,9 +621,11 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_PARITY),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
).Elif(((SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == ROM_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == SRAM_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_FHC_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG3_BT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_BIGPFX_LOW:ADDR_BIGPFX_LOW+ADDR_BIGPFX_LENGTH] == CG3_PIXELS_ADDR_BIGPFX)),
NextValue(SBUS_3V3_ACKs_o, ACK_IDLE), # need to wait for data, don't ACK yet
@ -664,6 +671,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_ADDRESS),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
)
# ***** Slave (Multi-)Word Write *****
@ -685,6 +693,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_PARITY),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
).Elif(((SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == WISHBONE_CSR_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == FBC_ROM_ADDR_PFX) |
@ -694,6 +703,7 @@ class SBusFPGABus(Module):
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == ENGINE_ADDR_PFXA) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == ENGINE_ADDR_PFXB) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_BT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_ALT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_FHC_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG3_BT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_BIGPFX_LOW:ADDR_BIGPFX_LOW+ADDR_BIGPFX_LENGTH] == CG3_PIXELS_ADDR_BIGPFX)),
@ -727,6 +737,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_ADDRESS),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
)
# ***** Slave Byte Write *****
@ -768,6 +779,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_ADDRESS),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
)
# ***** Slave HalfWord Write *****
@ -781,8 +793,10 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_PARITY),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
).Elif(((SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == SRAM_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG6_FHC_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_PFX_LOW:ADDR_PFX_LOW+ADDR_PFX_LENGTH] == CG3_BT_ADDR_PFX) |
(SBUS_3V3_PA_i[ADDR_BIGPFX_LOW:ADDR_BIGPFX_LOW+ADDR_BIGPFX_LENGTH] == CG3_PIXELS_ADDR_BIGPFX)),
NextValue(sbus_wishbone_le,
@ -815,6 +829,7 @@ class SBusFPGABus(Module):
NextValue(SBUS_3V3_ERRs_o, 1),
#NextValue(led0123, led0123 | LED_ADDRESS),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
)
).Elif(self.wishbone_slave.cyc &
@ -1033,6 +1048,7 @@ class SBusFPGABus(Module):
#NextValue(self.led_display.value, 0x000000000F | Cat(Signal(8, reset = 0x00), SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, SBUS_3V3_PPRD_i)),
#NextValue(led0123, led0123 | LED_UNKNOWNREQ),
NextValue(stat_slave_early_error_counter, stat_slave_early_error_counter + 1),
#NextValue(sbus_master_error_virtual, Cat(SBUS_3V3_PA_i, SBUS_3V3_SIZ_i, Signal(1, reset=0))),
NextState("Slave_Error")
).Elif(~SBUS_3V3_BGs_i,
### ouch we got the bus but nothing more to do ?!?

View File

@ -277,6 +277,7 @@ class SBusFPGA(SoCCore):
"curve25519engine": 0x000a0000, # includes microcode (4 KiB@0) and registers (16 KiB @ 64 KiB)
"cg6_bt": 0x00200000, # required for compatibility, bt_regs for cg6
#"cg6_dhc": 0x00240000, # required for compatibility, unused
"cg6_alt": 0x00280000, # required for compatibility
"cg6_fhc": 0x00300000, # required for compatibility
#"cg6_thc": 0x00301000, # required for compatibility
"cg3_bt": 0x00400000, # required for compatibility, bt_regs for cg3 & bw2
@ -337,15 +338,18 @@ class SBusFPGA(SoCCore):
#self.comb += SBUS_DATA_OE_LED_o.eq(~SBUS_3V3_INT1s_o)
prom_file = "prom_{}.fc".format(version.replace(".", "_"))
#prom_file = "SUNW,501-2325.bin" # real TGX
#prom_file = "SUNW,501-1415.bin" # real cg3
#prom_file = "SUNW,501-2253.bin" # real TGX+
prom_data = soc_core.get_mem_data(prom_file, "big")
# prom = Array(prom_data)
#print("\n****************************************\n")
#for i in range(len(prom)):
# print(hex(prom[i]))
#print("\n****************************************\n")
self.add_ram("prom", origin=self.mem_map["prom"], size=2**14, contents=prom_data, mode="r") ### FIXME: round up the prom_data size & check for <= 2**16!
self.add_ram("prom", origin=self.mem_map["prom"], size=2**15, contents=prom_data, mode="r") ### FIXME: round up the prom_data size & check for <= 2**16!
#getattr(self,"prom").mem.init = prom_data
#getattr(self,"prom").mem.depth = 2**14
#getattr(self,"prom").mem.depth = 2**15
self.submodules.ddrphy = s7ddrphy.A7DDRPHY(platform.request("ddram"),
memtype = "DDR3",
@ -357,6 +361,9 @@ class SBusFPGA(SoCCore):
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)
base_fb = self.wb_mem_map["main_ram"] + avail_sdram - 1048576 # placeholder
if (framebuffer):
@ -510,6 +517,7 @@ class SBusFPGA(SoCCore):
self.submodules.cg6_accel = cg6_accel.CG6Accel(soc = self, base_fb = base_fb, hres = hres, vres = vres)
self.bus.add_slave("cg6_fbc", self.cg6_accel.bus, SoCRegion(origin=self.mem_map.get("cg6_fbc", None), size=0x2000, cached=False))
self.bus.add_slave("cg6_fhc", self.cg6.bus2, SoCRegion(origin=self.mem_map.get("cg6_fhc", None), size=0x2000, cached=False))
self.bus.add_slave("cg6_alt", self.cg6.bus3, SoCRegion(origin=self.mem_map.get("cg6_alt", None), size=0x2000, cached=False))
self.bus.add_master(name="cg6_accel_r5_i", master=self.cg6_accel.ibus)
self.bus.add_master(name="cg6_accel_r5_d", master=self.cg6_accel.dbus)
cg6_rom_file = "blit.raw"