We can update you automatically when our Tip of the Month
changes.
To receive regular notification of updates to our Tip of the
Month section, click here.
In almost any testbench, a clock signal is usually required in order to synchronise stimulus signals within the testbench. A free-running clock can be created thus:
-- architecture declarative part signal clock : std_ulogic := '1'; -- architecture statement part clock <= not clock after 5ns;
Note the use of declaration initialization for the clock signal. We need this becuase the default initialization value of a std_ulogic signal is 'U'. The first time the signal assignment executes, not 'U' is 'X' and the remaining executions (every 5 ns) of this statement yield not 'X' is 'X' no clock sequence at all. The disadvantage of this approach is that the clock runs forever and so will the simulation!
Rather than continuous generation, what we would like to do is implement the clock generator inside a process so that a known number of clock cycles can be generated, courtesy of a for loop.
-- architecture declarative part constant num_cycles : integer := 320; signal clock : std_ulogic := '1'; -- architecture statement part process begin for i in 1 to num_cycles loop clock <= not clock; wait for 5 ns; clock <= not clock; wait for 5 ns; -- clock period = 10 ns end loop; end process;
Note that a VHDL constant is used to allow easy maintainance of the simulation duration. However, this piece of code doesnt really do the trick. After 320 cycles, the loop exits and the process is re-invoked, generating sets of 320 cycles continuously. In order to stop the simulation from running forever due to continuous clock cycle generation, we can append a wait statement to this process to suspend the process indefinitely after one pass of 320 cycles.
process begin for i in 1 to num_cycles loop clock <= not clock; wait for 5 ns; clock <= not clock; wait for 5 ns; -- clock period = 10 ns end loop; wait; -- simulation stops here end process;
Comprehensive VHDL for FPGA / ASIC
Advanced VHDL for Synthesis
Copyright 1995-1997 Doulos
This page was last updated 24th April 1997
We welcome your e-mail comments. Please contact us at: webmaste@doulos.co.uk