11import random
2+ import string
23from decimal import Decimal
34
45import 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 ()
3441async 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