Skip to content

Commit 40b3229

Browse files
committed
Fixed random clock period generation
1 parent ba97212 commit 40b3229

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

lambdalib/ramlib/tests/tb_la_asyncfifo.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import random
2+
import string
23
from decimal import Decimal
34

45
import siliconcompiler
@@ -30,6 +31,12 @@ def bursty_en_gen(burst_len=20):
3031
yield en_state
3132

3233

34+
def random_decimal(max: int, min: int, decimal_places=2) -> Decimal:
35+
prefix = str(random.randint(min, max))
36+
suffix = ''.join(random.choice(string.digits) for _ in range(decimal_places))
37+
return Decimal(prefix + "." + suffix)
38+
39+
3340
@cocotb.test()
3441
async def test_almost_full(dut):
3542

@@ -115,7 +122,7 @@ async def fifo_rd_wr_test(
115122

116123
await cocotb.start(Clock(dut.wr_clk, wr_clk_period_ns, units="ns").start())
117124
# Randomize phase shift between clocks
118-
await Timer(wr_clk_period_ns * random.random(), "ns", round_mode="round")
125+
await Timer(wr_clk_period_ns * Decimal(random.random()), "ns", round_mode="round")
119126
await cocotb.start(Clock(dut.rd_clk, rd_clk_period_ns, units="ns").start())
120127

121128
await ClockCycles(dut.wr_clk, 3)
@@ -134,21 +141,11 @@ async def fifo_rd_wr_test(
134141

135142

136143
# Generate sets of tests based on the different permutations of the possible arguments to fifo_test
137-
MAX_PERIOD_NS = 10.0
138-
MIN_PERIOD_NS = 1.0
144+
MAX_PERIOD_NS = 10
145+
MIN_PERIOD_NS = 1
146+
139147
# Generate random clk period to test between min and max
140-
RAND_WR_CLK_PERIOD_NS, RAND_RD_CLK_PERIOD_NS = [utils.get_time_from_sim_steps(
141-
# Time step must be even for cocotb clock driver
142-
steps=utils.get_sim_steps(
143-
time=Decimal(MIN_PERIOD_NS) + (
144-
Decimal(MAX_PERIOD_NS - MIN_PERIOD_NS)
145-
* Decimal(random.random()).quantize(Decimal("0.00"))
146-
),
147-
units="ns",
148-
round_mode="round"
149-
) & ~1,
150-
units="ns"
151-
) for _ in range(0, 2)]
148+
RAND_WR_CLK_PERIOD_NS, RAND_RD_CLK_PERIOD_NS = [random_decimal(MAX_PERIOD_NS, MIN_PERIOD_NS) for _ in range(2)]
152149

153150
# Factory to automatically generate a set of tests based on the different permutations
154151
# of the provided test arguments

0 commit comments

Comments
 (0)