bus/csr: configurable data width

This commit is contained in:
Sebastien Bourdeauducq 2012-08-26 21:19:34 +02:00
parent 9aa5ceb6d9
commit 4164fb4ac9
3 changed files with 12 additions and 13 deletions

View file

@ -1,5 +1,5 @@
from migen.fhdl.structure import *
from migen.bus.csr import *
from migen.bus import csr
from migen.bank.description import *
class Bank:
@ -7,7 +7,7 @@ class Bank:
self.description = description
self.address = address
if interface is None:
interface = Interface()
interface = csr.Interface()
self.interface = interface
def get_fragment(self):
@ -17,7 +17,7 @@ class Bank:
sel = Signal()
comb.append(sel.eq(self.interface.adr[9:] == Constant(self.address, BV(5))))
desc_exp = expand_description(self.description, 8)
desc_exp = expand_description(self.description, csr.data_width)
nbits = bits_for(len(desc_exp)-1)
# Bus writes
@ -66,10 +66,10 @@ class Bank:
else:
raise TypeError
if brcases:
sync.append(self.interface.dat_r.eq(Constant(0, BV(8))))
sync.append(self.interface.dat_r.eq(0))
sync.append(If(sel, Case(self.interface.adr[:nbits], *brcases)))
else:
comb.append(self.interface.dat_r.eq(Constant(0, BV(8))))
comb.append(self.interface.dat_r.eq(0))
# Device access
for reg in self.description:

View file

@ -3,16 +3,15 @@ from migen.bus.simple import *
from migen.bus.transactions import *
from migen.sim.generic import PureSimulable
_desc = Description(
(M_TO_S, "adr", 14),
(M_TO_S, "we", 1),
(M_TO_S, "dat_w", 8),
(S_TO_M, "dat_r", 8)
)
data_width = 8
class Interface(SimpleInterface):
def __init__(self):
super().__init__(_desc)
super().__init__(Description(
(M_TO_S, "adr", 14),
(M_TO_S, "we", 1),
(M_TO_S, "dat_w", data_width),
(S_TO_M, "dat_r", data_width)))
class Interconnect(SimpleInterconnect):
pass

View file

@ -11,7 +11,7 @@ class WB2CSR:
def get_fragment(self):
sync = [
self.csr.we.eq(0),
self.csr.dat_w.eq(self.wishbone.dat_w[:8]),
self.csr.dat_w.eq(self.wishbone.dat_w[:csr.data_width]),
self.csr.adr.eq(self.wishbone.adr[:14]),
self.wishbone.dat_r.eq(self.csr.dat_r)
]