A file with the .vliw extension is a pulseblaster .vliw file. This contains commands ready to be read by pb_prog or pb_asm.
It is human-readable, but not particularly flexible; it is intended to be generated from a .pbsrc file.
The intention is to be as close to the (idealised) hardware as possible.
For more details, see pulseblaster-opcodes.txt and the source of pb_prog.c.  
For a sample file, see example.vliw, or run pb_vliw. Note that a .vliw file is itself valid as a (simple) pbsrc file.
For the raw binary format generated by pb_asm, see raw.txt


Each line represents one VLIW instruction.
Blank lines, and comments are ignored. A comment begins with  //	

The instructions are in exactly 4 columns (and optional comment), delimited by whitespace. The order is:
  OUTPUT  OPCODE  ARG  LENGTH   //comment


OUTPUT
------
Output (hex, or dec) is a 3-byte value for the outputs. Eg  0x249249 or 2396745
If OPCODE is STOP, then output is ignored. It must be 0, or -.		[This convention makes the ignored value more explicit]


OPCODE
------
Opcode (string, case-insensitive) is one of the 9 allowed opcodes. The allowed opcodes are:
	CONT, LONGDELAY, LOOP, ENDLOOP, GOTO, CALL, RETURN, WAIT, STOP.


ARG
---
Arg (hex or dec) is the argument to the opcode.
In some cases, an opcode ignores ARG. Here, the ARG must be 0.    	[This is a convention to make the ignored value more explicit]
Alternatively, '-' may be used to donate N/A; it will be parsed as a 0 anyway.


LENGTH
------
Length (hex or dec)  is the 4-byte delay value. Eg 100000000 = 1 second exactly.
If OPCODE is STOP, then this length has no meaning. It must be 0, or -. [This convention makes the ignored value more explicit]
NOTE: Length should be the delay (in ticks) that the user actually WANTS.
      [Compensation for PB_INTERNAL_LATENCY and PB_WAIT_LATENCY is done later by pb_make_vliw()]


