Add tcam test, fix tcam
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
yaml:
|
||||
- "parser/sim.yaml"
|
||||
- "parser/sim.yaml"
|
||||
- "tcam/sim.yaml"
|
||||
7
sim/net_core/tcam/sim.yaml
Normal file
7
sim/net_core/tcam/sim.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
tests:
|
||||
- name: "tcam_sanity"
|
||||
toplevel: "tcam"
|
||||
modules:
|
||||
- "tcam_sanity"
|
||||
sources: "sources.list"
|
||||
waves: True
|
||||
4
sim/net_core/tcam/sources.list
Normal file
4
sim/net_core/tcam/sources.list
Normal file
@@ -0,0 +1,4 @@
|
||||
../../verilator.vlt
|
||||
|
||||
../../../src/net_core/sources.list
|
||||
../../../src/common/taxi_sources.list
|
||||
65
sim/net_core/tcam/tcam_sanity.py
Normal file
65
sim/net_core/tcam/tcam_sanity.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import cocotb
|
||||
|
||||
import logging
|
||||
|
||||
from cocotb.clock import Clock
|
||||
from cocotb.triggers import Timer, RisingEdge, FallingEdge
|
||||
|
||||
import random
|
||||
|
||||
CLK_PERIOD = 20
|
||||
|
||||
|
||||
class TB:
|
||||
def __init__(self, dut):
|
||||
self.dut = dut
|
||||
|
||||
self.log = logging.getLogger("cocotb.tb")
|
||||
self.log.setLevel(logging.INFO)
|
||||
|
||||
cocotb.start_soon(Clock(self.dut.i_clk, CLK_PERIOD, unit="ns").start())
|
||||
|
||||
|
||||
async def program_line(self, addr: int, value: int):
|
||||
self.dut.i_program_addr.value = addr
|
||||
self.dut.i_program_data.value = value & (2**32-1)
|
||||
self.dut.i_program_we.value = 1
|
||||
await RisingEdge(self.dut.i_clk)
|
||||
self.dut.i_program_addr.value = 0
|
||||
self.dut.i_program_data.value = 0
|
||||
self.dut.i_program_we.value = 0
|
||||
|
||||
async def send_data(self, value: int):
|
||||
self.dut.i_search_data.value = value & (2**32-1)
|
||||
self.dut.i_search_valid.value = 1
|
||||
await RisingEdge(self.dut.i_clk)
|
||||
self.dut.i_search_data.value = 0
|
||||
self.dut.i_search_valid.value = 0
|
||||
|
||||
@cocotb.test
|
||||
async def test_sanity(dut):
|
||||
tb = TB(dut)
|
||||
|
||||
for _ in range(4):
|
||||
await RisingEdge(tb.dut.i_clk)
|
||||
|
||||
for i in range(32):
|
||||
await tb.program_line(i, 0xffffffff)
|
||||
await tb.program_line(i+32, 0xffffffff)
|
||||
|
||||
for _ in range(4):
|
||||
await RisingEdge(tb.dut.i_clk)
|
||||
|
||||
await tb.program_line(0, 0x5432edc0)
|
||||
await tb.program_line(32, 0xabcd1230)
|
||||
|
||||
await tb.program_line(1, ~0xabcd1234)
|
||||
await tb.program_line(33, 0xabcd1234)
|
||||
|
||||
for _ in range(4):
|
||||
await RisingEdge(tb.dut.i_clk)
|
||||
|
||||
await tb.send_data(0xabcd1234)
|
||||
await tb.send_data(0xabcd1235)
|
||||
|
||||
await Timer(1, "us")
|
||||
Reference in New Issue
Block a user