Source code for hwtBuildsystem.examples.example_units
from hwt.code import If
from hwt.hdl.types.bits import Bits
from hwt.interfaces.std import Handshaked, BramPort_withoutClk
from hwt.interfaces.utils import addClkRstn
from hwt.synthesizer.param import Param
from hwt.synthesizer.unit import Unit
from hwtBuildsystem.ioConstraints import ConstrainIo
from hwtBuildsystem.vivado.xdcGen import XdcIoStandard
# from hwtBuildsystem.vivado.part import XilinxPart
# from hwtBuildsystem.quartus.part import IntelPart
[docs]class ExampleTop0(Unit):
"""
Lorem Ipsum componet to have something to compile
"""
def _config(self):
self.DATA_WIDTH = Param(2)
def _declr(self):
addClkRstn(self)
with self._paramsShared():
self.a = Handshaked()
self.b = Handshaked()._m()
r = self.ram_port = BramPort_withoutClk()
r.ADDR_WIDTH = 10
r.DATA_WIDTH = 8
def _impl(self):
a, b = self.a, self.b
vld = self._reg("vld_delayed", def_val=0)
vld(a.vld)
b.vld(vld)
b.data(a.data + 1)
a.rd(b.rd & ~vld)
ram_port = self.ram_port
ram = self._sig("ram", Bits(8)[1024])
If(self.clk._onRisingEdge(),
If(ram_port.en,
ram_port.dout(ram[ram_port.addr])
),
If(ram_port.en & ram_port.we,
ram[ram_port.addr](ram_port.din)
),
)
def r(row, start, last):
a = []
for x in range(start, last + 1):
a.append(row + ("%d" % x))
return a
def p(intf, pinMap, ioStd=XdcIoStandard.LVCMOS18):
ConstrainIo(intf, pinMap, ioStd)
#if isinstance(self._target_platform, XilinxVivadoPlatform):
# assert self._target_platform.part == XilinxPart(
# XilinxPart.Family.kintex7,
# XilinxPart.Size._160t,
# XilinxPart.Package.ffg676,
# XilinxPart.Speedgrade._2)
# p(a.data, r("A", 8, 10) + r("A", 12, 15) + ["B9"])
# p(a.rd, ["B12", ])
# p(a.vld, ["B14", ])
#
# p(b.data, ["B15", "C9"] + r("C", 11, 12) + ["C14"] + r("D", 8, 10))
# p(b.rd, ["D14", ])
# p(b.vld, ["E10", ])
# raise NotImplementedError("clk, rst_n and ram_port")
#elif isinstance(self._target_platform, IntelPart):
# raise NotImplementedError()