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, #wb_adr_rev = Signal(32) #self.comb += [ wb_adr_rev[ 0: 8].eq(wb.adr[22:30]), # wb_adr_rev[ 8:16].eq(wb.adr[14:22]), # wb_adr_rev[16:24].eq(wb.adr[ 6:14]), # wb_adr_rev[24:32].eq(Cat(Signal(2, reset = 0),wb.adr[ 0: 6])), ] 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_addr.eq(wb_adr_rev) 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: ??? #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(nubus.cpu_valid) #cpu_valid_ex = Signal(reset = 0) #self.sync += cpu_valid_ex.eq(nubus.cpu_valid | cpu_valid_ex) #self.comb += pad_user_led_1.eq(cpu_valid_ex)