Merge branch 'master' into vexiiriscv-macsg
This commit is contained in:
commit
dd092863f8
|
@ -58,6 +58,7 @@ class VexiiRiscv(CPU):
|
||||||
with_rva = False
|
with_rva = False
|
||||||
with_dma = False
|
with_dma = False
|
||||||
with_axi3 = False
|
with_axi3 = False
|
||||||
|
with_opensbi = False
|
||||||
jtag_tap = False
|
jtag_tap = False
|
||||||
jtag_instruction = False
|
jtag_instruction = False
|
||||||
with_cpu_clk = False
|
with_cpu_clk = False
|
||||||
|
@ -166,6 +167,7 @@ class VexiiRiscv(CPU):
|
||||||
VexiiRiscv.vexii_args += " --relaxed-branch"
|
VexiiRiscv.vexii_args += " --relaxed-branch"
|
||||||
|
|
||||||
if args.cpu_variant in ["linux", "debian"]:
|
if args.cpu_variant in ["linux", "debian"]:
|
||||||
|
VexiiRiscv.with_opensbi = True
|
||||||
VexiiRiscv.vexii_args += " --with-rva --with-supervisor"
|
VexiiRiscv.vexii_args += " --with-rva --with-supervisor"
|
||||||
VexiiRiscv.vexii_args += " --fetch-l1-ways=4 --fetch-l1-mem-data-width-min=64"
|
VexiiRiscv.vexii_args += " --fetch-l1-ways=4 --fetch-l1-mem-data-width-min=64"
|
||||||
VexiiRiscv.vexii_args += " --lsu-l1-ways=4 --lsu-l1-mem-data-width-min=64"
|
VexiiRiscv.vexii_args += " --lsu-l1-ways=4 --lsu-l1-mem-data-width-min=64"
|
||||||
|
@ -395,6 +397,7 @@ class VexiiRiscv(CPU):
|
||||||
md5_hash.update(str(VexiiRiscv.vexii_args).encode('utf-8'))
|
md5_hash.update(str(VexiiRiscv.vexii_args).encode('utf-8'))
|
||||||
md5_hash.update(str(VexiiRiscv.vexii_video).encode('utf-8'))
|
md5_hash.update(str(VexiiRiscv.vexii_video).encode('utf-8'))
|
||||||
md5_hash.update(str(VexiiRiscv.vexii_macsg).encode('utf-8'))
|
md5_hash.update(str(VexiiRiscv.vexii_macsg).encode('utf-8'))
|
||||||
|
md5_hash.update(str(VexiiRiscv.with_opensbi).encode('utf-8'))
|
||||||
|
|
||||||
# md5_hash.update(str(VexiiRiscv.internal_bus_width).encode('utf-8'))
|
# md5_hash.update(str(VexiiRiscv.internal_bus_width).encode('utf-8'))
|
||||||
|
|
||||||
|
@ -473,6 +476,7 @@ class VexiiRiscv(CPU):
|
||||||
# Set Human-name.
|
# Set Human-name.
|
||||||
self.human_name = f"{self.human_name} {self.xlen}-bit"
|
self.human_name = f"{self.human_name} {self.xlen}-bit"
|
||||||
|
|
||||||
|
if VexiiRiscv.with_opensbi:
|
||||||
# Set UART/Timer0 CSRs to the ones used by OpenSBI.
|
# Set UART/Timer0 CSRs to the ones used by OpenSBI.
|
||||||
soc.csr.add("uart", n=2)
|
soc.csr.add("uart", n=2)
|
||||||
soc.csr.add("timer0", n=3)
|
soc.csr.add("timer0", n=3)
|
||||||
|
|
|
@ -137,7 +137,8 @@ class WS2812(LiteXModule):
|
||||||
self.bus = bus = wishbone.Interface(data_width=32, address_width=32, addressing="word")
|
self.bus = bus = wishbone.Interface(data_width=32, address_width=32, addressing="word")
|
||||||
else:
|
else:
|
||||||
# Memory.
|
# Memory.
|
||||||
mem = Memory(32, nleds, init=init)
|
mem_depth = max(nleds, 2)
|
||||||
|
mem = Memory(32, mem_depth, init=init)
|
||||||
port = mem.get_port()
|
port = mem.get_port()
|
||||||
self.specials += mem, port
|
self.specials += mem, port
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ from litex.soc.cores.led import WS2812
|
||||||
|
|
||||||
class TestWS2812(unittest.TestCase):
|
class TestWS2812(unittest.TestCase):
|
||||||
test_clk_freqs = [75e6, 50e6, 25e6]
|
test_clk_freqs = [75e6, 50e6, 25e6]
|
||||||
|
test_led_data = [0x100000, 0x200000, 0x300000, 0x400000, 0x500000, 0x600000, 0x700000, 0x800000, 0x900000]
|
||||||
|
|
||||||
def generator(self, dut, led_signal, led_data, sys_clk_freq, iterations):
|
def generator(self, dut, led_signal, led_data, sys_clk_freq, iterations):
|
||||||
# Error Margin from WS2812 datasheet.
|
# Error Margin from WS2812 datasheet.
|
||||||
|
@ -71,17 +72,21 @@ class TestWS2812(unittest.TestCase):
|
||||||
return ( int(x) for x in bin(num)[2:].zfill(length) )
|
return ( int(x) for x in bin(num)[2:].zfill(length) )
|
||||||
|
|
||||||
|
|
||||||
def run_test(self, revision, sys_clk_freq):
|
def run_test(self, revision, sys_clk_freq, led_data):
|
||||||
led_signal = Signal()
|
led_signal = Signal()
|
||||||
led_data = [0x100000, 0x200000, 0x300000, 0x400000, 0x500000, 0x600000, 0x700000, 0x800000, 0x900000]
|
|
||||||
iterations = 2
|
iterations = 2
|
||||||
dut = WS2812(led_signal, len(led_data), sys_clk_freq, revision=revision, init=led_data)
|
dut = WS2812(led_signal, len(led_data), sys_clk_freq, revision=revision, init=led_data)
|
||||||
run_simulation(dut, self.generator(dut, led_signal, led_data, sys_clk_freq, iterations), vcd_name="sim.vcd")
|
run_simulation(dut, self.generator(dut, led_signal, led_data, sys_clk_freq, iterations), vcd_name="sim.vcd")
|
||||||
|
|
||||||
def test_WS2812_old(self):
|
def test_WS2812_old(self):
|
||||||
for sys_clk_freq in self.test_clk_freqs:
|
for sys_clk_freq in self.test_clk_freqs:
|
||||||
self.run_test("old", sys_clk_freq)
|
self.run_test("old", sys_clk_freq, self.test_led_data)
|
||||||
|
|
||||||
def test_WS2812_new(self):
|
def test_WS2812_new(self):
|
||||||
for sys_clk_freq in self.test_clk_freqs:
|
for sys_clk_freq in self.test_clk_freqs:
|
||||||
self.run_test("new", sys_clk_freq)
|
self.run_test("new", sys_clk_freq, self.test_led_data)
|
||||||
|
|
||||||
|
def test_WS2812_1led(self):
|
||||||
|
led_data = [0x100000]
|
||||||
|
for sys_clk_freq in self.test_clk_freqs:
|
||||||
|
self.run_test("old", sys_clk_freq, led_data)
|
||||||
|
|
Loading…
Reference in New Issue