32 lines
919 B
Python
32 lines
919 B
Python
from nmigen import *
|
|
|
|
class RegisterFile(Elaboratable):
|
|
def __init__(self):
|
|
self.regs = Array([Signal(32) for _ in range(32)])
|
|
|
|
self.wen = Signal()
|
|
self.waddr = Signal(unsigned(5))
|
|
self.raddr1 = Signal(unsigned(5))
|
|
self.raddr2 = Signal(unsigned(5))
|
|
self.wdata = Signal(unsigned(32))
|
|
self.rdata1 = Signal(unsigned(32))
|
|
self.rdata2 = Signal(unsigned(32))
|
|
|
|
def elaborate(self, platform):
|
|
m = Module()
|
|
|
|
with m.If(self.wen):
|
|
m.d.sync += self.regs[self.waddr].eq(self.wdata)
|
|
|
|
with m.If(self.raddr1 == 0):
|
|
m.d.comb += self.rdata1.eq(0)
|
|
with m.Else():
|
|
m.d.comb += self.rdata1.eq(self.regs[self.raddr1])
|
|
|
|
with m.If(self.raddr2 == 0):
|
|
m.d.comb += self.rdata2.eq(0)
|
|
with m.Else():
|
|
m.d.comb += self.rdata2.eq(self.regs[self.raddr2])
|
|
|
|
return m
|