ruifernandomarques
Newbie
Hello! Literally my first post here. Here goes:
I'm a 8y verilogger, who's re-starting in VHDL, and with System Verilog there's a way to create a "sequence of events" where I force values of the internal IP "signals" (they are called "registers" in verilog).
One might say that this is bad practice, but then I'd welcome an alternative to simulate SEEs (Single Event Effects, related to Radiation Environments, which literally change the value of internal random bits), or even time constraint violation due to temperature / voltage level fluctuation, etc.
Other classic answer is to create an external interface for "debug"/"test"/"fault injection" mode but, creating these "debug"/"test"/"fault injection" interfaces to interact via external interface heightens the projects % and enlarges the used area where more SEEs may occur.
I am also aware I can force signals through a ".do" script file. That's not what I'm looking for either.
Within the VHDL testbench, create a sequence of events equal to:
eg ( improvised / not VHDL testbenching ) :
Is there such a thing in VHDL testbenching, or is it something strictly to System Verilog?
Thank you for the help!
I'm a 8y verilogger, who's re-starting in VHDL, and with System Verilog there's a way to create a "sequence of events" where I force values of the internal IP "signals" (they are called "registers" in verilog).
One might say that this is bad practice, but then I'd welcome an alternative to simulate SEEs (Single Event Effects, related to Radiation Environments, which literally change the value of internal random bits), or even time constraint violation due to temperature / voltage level fluctuation, etc.
Other classic answer is to create an external interface for "debug"/"test"/"fault injection" mode but, creating these "debug"/"test"/"fault injection" interfaces to interact via external interface heightens the projects % and enlarges the used area where more SEEs may occur.
I am also aware I can force signals through a ".do" script file. That's not what I'm looking for either.
Within the VHDL testbench, create a sequence of events equal to:
- -> run QuestaSim/ModelSim for 1ms
- -> manually force value on the waveform tab
- -> run 1ps
- -> noForce the same signal.
- -> run -all
eg ( improvised / not VHDL testbenching ) :
-- the following lines should be within testbench file
process
begin
begin
wait 1ms ; -- wait for 1 ms before creating a SEE on the LSB of a counter (internal IP signal of "i_myPLL" VHDL)
force -freeze i_myPLL.counter(0) = '0' ; -- i_myPLL is the instantiation of a "myPLL" VHDL block, that has "counter" as an internal std_logic_vector
wait 2ns ; -- wait for 2 ns before "releasing" the "counter" value
release i_myPLL.counter(0) ; -- from this point onwards, the std_logic_vector "counter" is only dependent on the "i_myPLL" internal logic
wait ; -- simulation continues with no forced signals
end
-- end of example
Is there such a thing in VHDL testbenching, or is it something strictly to System Verilog?
Thank you for the help!