11import random
2+ import string
23from decimal import Decimal
34
45import siliconcompiler
78from cocotb .clock import Clock
89from cocotb .triggers import ClockCycles , Timer , Combine
910from cocotb .regression import TestFactory
10- from cocotb import utils
1111
1212from lambdalib import ramlib
1313from lambdalib .utils ._tb_common import (
@@ -30,6 +30,12 @@ def bursty_en_gen(burst_len=20):
3030 yield en_state
3131
3232
33+ def random_decimal (max : int , min : int , decimal_places = 2 ) -> Decimal :
34+ prefix = str (random .randint (min , max ))
35+ suffix = '' .join (random .choice (string .digits ) for _ in range (decimal_places ))
36+ return Decimal (prefix + "." + suffix )
37+
38+
3339@cocotb .test ()
3440async def test_almost_full (dut ):
3541
@@ -115,7 +121,7 @@ async def fifo_rd_wr_test(
115121
116122 await cocotb .start (Clock (dut .wr_clk , wr_clk_period_ns , units = "ns" ).start ())
117123 # Randomize phase shift between clocks
118- await Timer (wr_clk_period_ns * random .random (), "ns" , round_mode = "round" )
124+ await Timer (wr_clk_period_ns * Decimal ( random .random () ), "ns" , round_mode = "round" )
119125 await cocotb .start (Clock (dut .rd_clk , rd_clk_period_ns , units = "ns" ).start ())
120126
121127 await ClockCycles (dut .wr_clk , 3 )
@@ -134,21 +140,13 @@ async def fifo_rd_wr_test(
134140
135141
136142# 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
143+ MAX_PERIOD_NS = 10
144+ MIN_PERIOD_NS = 1
145+
139146# 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 )]
147+ RAND_WR_CLK_PERIOD_NS , RAND_RD_CLK_PERIOD_NS = [
148+ random_decimal (MAX_PERIOD_NS , MIN_PERIOD_NS ) for _ in range (2 )
149+ ]
152150
153151# Factory to automatically generate a set of tests based on the different permutations
154152# of the provided test arguments
0 commit comments