Source code for hwtLib.examples.hierarchy.groupOfBlockrams
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from hwt.hwIOs.std import HwIOSignal, HwIOClk, HwIOVectSignal
from hwt.hwModule import HwModule
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtLib.mem.ram import RamMultiClock
[docs]
class GroupOfBlockrams(HwModule):
"""
.. hwt-autodoc::
"""
@override
def hwConfig(self):
self.ADDR_WIDTH = HwParam(8)
self.DATA_WIDTH = HwParam(64)
@override
def hwDeclr(self):
with self._hwParamsShared():
def extData():
return HwIOVectSignal(self.DATA_WIDTH)
self.clk = HwIOClk()
self.en = HwIOSignal()
self.we = HwIOSignal()
self.addr = HwIOVectSignal(self.ADDR_WIDTH)
self.in_w_a = extData()
self.in_w_b = extData()
self.in_r_a = extData()
self.in_r_b = extData()
self.out_w_a = extData()._m()
self.out_w_b = extData()._m()
self.out_r_a = extData()._m()
self.out_r_b = extData()._m()
with self._hwParamsShared():
r = self.bramR = RamMultiClock()
w = self.bramW = RamMultiClock()
r.PORT_CNT = w.PORT_CNT = 2
@override
def hwImpl(self):
s = self
bramR = s.bramR
bramW = s.bramW
all_bram_ports = [*bramR.port, *bramW.port]
for p in all_bram_ports:
p.clk(s.clk)
p.en(s.en)
p.we(s.we)
p.addr(s.addr)
bramW.port[0].din(s.in_w_a)
bramW.port[1].din(s.in_w_b)
bramR.port[0].din(s.in_r_a)
bramR.port[1].din(s.in_r_b)
s.out_w_a(bramW.port[0].dout)
s.out_w_b(bramW.port[1].dout)
s.out_r_a(bramR.port[0].dout)
s.out_r_b(bramR.port[1].dout)
if __name__ == "__main__":
from hwt.synth import to_rtl_str
print(to_rtl_str(GroupOfBlockrams()))