473674060639c8b94e4d77fb7df47511606af139
1 from fractions
import Fraction
3 from migen
.fhdl
.structure
import *
4 from migen
.fhdl
import verilog
, autofragment
5 from migen
.bus
import wishbone
, asmibus
, wishbone2asmi
, csr
, wishbone2csr
, dfi
7 from milkymist
import m1crg
, lm32
, norflash
, uart
, sram
, s6ddrphy
, dfii
11 clk_freq
= (83 + Fraction(1, 3))*MHz
12 sram_size
= 4096 # in bytes
13 l2_size
= 8192 # in bytes
17 dfi_d
= 128 # TODO -> 64
19 def ddrphy_clocking(crg
, phy
):
25 "clk4x_wr_strb_right",
29 "clk4x_rd_strb_right",
31 comb
= [getattr(phy
, name
).eq(getattr(crg
, name
)) for name
in names
]
38 asmihub0
= asmibus
.Hub(23, 128, 12) # TODO: get hub from memory controller
39 asmiport_wb
= asmihub0
.get_port()
45 ddrphy0
= s6ddrphy
.S6DDRPHY(1, dfi_a
, dfi_ba
, dfi_d
)
46 dfii0
= dfii
.DFIInjector(2, dfi_a
, dfi_ba
, dfi_d
, 1)
47 dficon0
= dfi
.Interconnect(dfii0
.master
, ddrphy0
.dfi
)
53 norflash0
= norflash
.NorFlash(25, 12)
54 sram0
= sram
.SRAM(sram_size
//4)
55 wishbone2asmi0
= wishbone2asmi
.WB2ASMI(l2_size
//4, asmiport_wb
)
56 wishbone2csr0
= wishbone2csr
.WB2CSR()
58 # norflash 0x00000000 (shadow @0x80000000)
59 # SRAM/debug 0x10000000 (shadow @0x90000000)
60 # USB 0x20000000 (shadow @0xa0000000)
61 # Ethernet 0x30000000 (shadow @0xb0000000)
62 # SDRAM 0x40000000 (shadow @0xc0000000)
63 # CSR bridge 0x60000000 (shadow @0xe0000000)
64 wishbonecon0
= wishbone
.InterconnectShared(
69 (binc("000"), norflash0
.bus
),
70 (binc("001"), sram0
.bus
),
71 (binc("10"), wishbone2asmi0
.wishbone
),
72 (binc("11"), wishbone2csr0
.wishbone
)
80 uart0
= uart
.UART(0, clk_freq
, baud
=115200)
81 csrcon0
= csr
.Interconnect(wishbone2csr0
.csr
, [
83 ddrphy0
.bank
.interface
,
90 interrupts
= Fragment([
91 cpu0
.interrupt
[0].eq(uart0
.events
.irq
)
97 crg0
= m1crg
.M1CRG(50*MHz
, clk_freq
)
99 frag
= autofragment
.from_local() + interrupts
+ ddrphy_clocking(crg0
, ddrphy0
)
100 src_verilog
, vns
= verilog
.convert(frag
,
101 {crg0
.trigger_reset
},
103 clk_signal
=crg0
.sys_clk
,
104 rst_signal
=crg0
.sys_rst
,
106 src_ucf
= constraints
.get(vns
, crg0
, norflash0
, uart0
, ddrphy0
)
107 return (src_verilog
, src_ucf
)