Interaction of threads

Proxelera
2 min readJun 10, 2021

Hi Folks
In the last write-up, I mentioned threads in simulation. Specifically, I said that the threads of a simulation can interact with each other. Well, what does that mean? Consider the Verilog code-snippet below -

assign y = a + b; // continuous assignment
initial begin // initial block
$monitor(“@time %t -> a=%d, b=%d, y=%d”, $time,a,b,y);

a = 0; b = 0;
#10
a = 5;
#10
b = -5;
#10
$finish;
end

It produces this output:

@time 0 -> a= 0, b= 0, y= 0

@time 10 -> a= 5, b= 0, y= 5

@time 20 -> a= 5, b= -5, y= 0

Let’s explain this in a moment.

For the sake of convenience, let’s call the ‘continuous assignment statement’ in the code snippet as T1. Let’s call the ‘initial block’ in the code snippet as T2.

What we did in T2 is — we changed the value of variables ‘a’ and ‘b’ randomly over a period of time.

When the values of ‘a’ and ‘b’ changed, T1 triggered? Why is that?

The reason is -

  1. Variables ‘a’ and ‘b’ are on the RHS of T1 expression. That is, ‘a’ and ‘b’ are in the sensitivity list of T1
  2. Technically, a value change in ‘a’ or ‘b’ is known as an ‘event on a’ or ‘event on b’ respectively
  3. According to the rules of Verilog, whenever an event occurs on the sensitivity list of a continuous assignment statement, the expression in the continuous assignment has to be evaluated and the newly computed value of the RHS has to be assigned to the LHS

As per T2, we are causing events on a or b at times 0, 10 and 20. Hence, new values of ‘a+b’ (and hence y) are printed at times 0, 10 and 20.

So, an action on T2 is causing T1 to execute.

Now, does it give an idea on how T1 and T2 can interact? The rest is your creativity as you try to write complex models.

Happy coding, Folks!

Tech Pubs,

Proxelera

--

--

Proxelera

Proxelera is founded by professionals with deep expertise in VLSI design. Our main charter is to be reliable, cost-effective and high quality design engineering