As it could be seen in the last section, it's possible to read more from files than just data. Many commercially available testbenches support sophisticated commands. There are limits however: in most cases structural elements like loops and procedures are missing. It's theoretically possible to extend the file reader into a proper parser and add these language elements, however VHDL is not really suited for these tasks and access to the source code may not always be possible. A way to get around these problems is to generate the input files with a different language such as perl.
The perl script below will generate an input file which can be read by file_read.vhd.
print "00011\n"; print "11100\n"; for ($i=0;$i<10;$i++) { print num2binary($i,5)."\n"; } print "1UXZW\n"; print "11111\n";
Resulting Stimulus File:
00011 11100 00000 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 1UXZW HL111 11111
It's straightforward to extend this approach e.g. for 256 iterations if all values of a 8 bit word are to be covered. Entering these values manually would be very cumbersome. The script actually calls a procedure num2binary which can be found in the complete script. More complex procedures like PRBS patterns or CRC generators could be used in a similar fashion.
Here is the complete perl script:
tgen.pl |