| Odin II - Version 1.0 - User's Manual |
| |
| INSTALL |
| ------------ |
| |
| 1. libarchfpga |
| |
| This library needs to be built for your platform. The Makefile for |
| Odin will link the libarchfpga library located in: |
| ../libarchfpga_5 or ../libarchfpga_6 |
| |
| By default Odin II uses libarchfpga_6. To compile it, change directory to |
| ../libarchfpga_6 and type "make". |
| |
| Note: |
| - for WIN32 compilation you'll have to edit the ezxml.c files |
| to "#define WIN32" or not. |
| |
| 2. Odin II |
| |
| Odin is compiled with a standard Makefile. For the first time |
| I would suggest a: |
| make clean && make |
| |
| Note: |
| - that Odin relies on ctags, bison, and flex. These details are not |
| included in this install and are left to the user. (On linux systems, |
| these packages are generally available through your distribution's package |
| management system.) |
| - the default make targets VRP 6.0. For VPR 5.0 you can either |
| change the Makefile variable "BUILD=" to VPR5 or you can type: |
| make clean && make BUILD=VPR5 |
| |
| USAGE |
| ------------- |
| |
| After you build Odin, please run the included verify_microbenchmarks.sh |
| script. This will automatically compile, simulate, and verify all of the |
| included microbenchmark circuits to ensure that Odin is working |
| correctly on your system. |
| |
| To use Odin II, invoke it from the command line as ./odin_II.exe. |
| ./odin_II.exe -h will give you a list of the possible options. Commonly |
| used options are -V to supply a verilog file to compile, -a to supply |
| an FPGA arch file to map to, and -o to supply a blif output filename. |
| |
| You can specify a configuration file with the -c |
| option, as it ./odin_II.exe -c config.xml. A config file looks |
| like the following: |
| <config> |
| <verilog_files> |
| <!-- Way of specifying multiple files in a project! --> |
| <verilog_file>verilog_file.v</verilog_file> |
| </verilog_files> |
| <output> |
| <!-- These are the output flags for the project --> |
| <output_type>blif</output_type> |
| <output_path_and_name>./output_file.blif</output_path_and_name> |
| <target> |
| <!-- This is the target device the output is being built for --> |
| <arch_file>fpga_architecture_file.xml</arch_file> |
| </target> |
| </output> |
| <optimizations> |
| <!-- This is where the optimization flags go --> |
| </optimizations> |
| <debug_outputs> |
| <!-- Various debug options --> |
| <debug_output_path>.</debug_output_path> |
| <output_ast_graphs>1</output_ast_graphs> |
| <output_netlist_graphs>1</output_netlist_graphs> |
| </debug_outputs> |
| </config> |
| |
| You may specify multiple verilog files for synthesis. The |
| fpga_architecture_file.xml format is specified from VPR. output_ast_graphs set |
| to 1 will give you abstract syntax tree graphs which can be viewed using |
| GraphViz. The output_netliet_graphs does the same, except it visualizes the |
| netlist synthesized by Odin II. |
| |
| The -g x flag will simulate the generated netlist with x clock cycles using |
| pseudo-random test vectors. These vectors and the resulting output vectors are |
| written to "input_vectors" and "output_vectors" respectively. You can supply |
| a predefined input vector file by replacing the -g option with the -t option. |
| The output vectors can also be verified against a predefined output vector |
| file via the -T option. |
| |
| A test vector file is as follows: |
| # Example vector file |
| intput_1 input_2 output_1 output_2 output_3 |
| # Comment |
| 0 0XA 1 0XD 1101 |
| ------------- |
| |
| Each line represents a vector. Each value must be specified in binary or hex. |
| Comments may be included by placing an # at the start of the line. Blank lines |
| are ignored. Values may be separated by non-newline whitespace. (tabs and spaces) |
| Hex values must be prefixed with 0X. |
| |
| Each line in the vector file represents one cycle, or one falling edge and one |
| rising edge. Input vectors are read on a falling edge, while output vectors are |
| written on a rising edge. |
| |
| Hard blocks can be simulated; given a hardblock named "block" in the |
| architecture file with an instance of it named "instance" in the verilog file, |
| write a C method with signature defined in SRC/sim_block.h and compile it with |
| an output filename of "block+instance.so" in the directory you plan to invoke |
| Odin-II from. When compiling the file, you'll need to specify the following |
| arguments to the compiler (assuming that you're in the SANBOX directory): |
| "`cc -I../../libarchfpga_6/include/ -L../../libarchfpga_6 -lvpr_6 -lm --shared -o |
| block+instance.so block.c". When compiling against VPR5, adjust the arguments |
| accordingly. |
| |
| If the netlist generated by Odin II contains the definition of a hardblock which |
| doesn't have a shared object file defined for it in the working directory, |
| Odin II will not work if you specify it to use the simulator with the -g or -t |
| options. |
| |
| Use of static memory within the simulation code necessitates compiling a |
| distinct shared object file for each instance of the block you wish to simulate. |
| The method signature the simulator expects contains only int and int[] |
| parameters, leaving the code provided to simulate the hard blokc agnostic of the |
| internal Odin II data structures. However, a cycle parameter is included to |
| provide researchers with the ability to delay results of operations performed by |
| the simulation code. |
| |
| DOCUMENTING ODIN II |
| ------------------- |
| |
| Any new command line options added to Odin II should be fully documented by |
| the print_usage() function within odin_ii.c before checking in the changes. |
| |
| TESTING ODIN II |
| ---------------- |
| |
| The verify_microbenchmarks.sh and verify_regression_tests.sh scripts |
| compile and simulate the microbenchmarks and a larger set of benchmark |
| circuits. These scripts use simulation results which have been verified |
| against ModelSim. |
| |
| After you build Odin II, run verify_microbenchmarks.sh to ensure that |
| everything is working correctly on your system. Unlike the |
| verify_regression_tests.sh script, verify_microbenchmarks.sh also |
| simulates the blif output, as well as simulating the verilog with and |
| without the architecture file. |
| |
| Before checking in any changes to Odin II, please run both of these |
| scripts to ensure that both of these scripts execute correctly. If there |
| is a failure, use ModelSim to verify that the failure is within Odin II |
| and not a faulty regression test. The Odin II simulator will produce |
| a test.do file containing clock and input vector information for ModelSim. |
| |
| When additional circuits are found to agree with ModelSim, they should |
| be added to these test sets. When new features are added to Odin II, new |
| microbenchmarks should be developed which test those features for |
| regression. Use existing circuits as a template for the addition of |
| new circuits. |
| |
| USING MODELSIM TO TEST ODIN II |
| ------------------------------- |
| |
| ModelSim may be installed as part of the Quartus II Web Edition IDE. Load |
| the Verilog circuit into a new project in ModelSim. Compile the circuit, |
| and load the resulting library for simulation. |
| |
| Simulate the circuit in Odin II using the -E option to ensure that Odin II |
| outputs both edges of the clock. You may use random vectors via the -g option, |
| or specify your own input vectors using the -t option. When simulation is |
| complete, load the resulting test.do file into your ModelSim project and |
| execute it. You may now directly compare the vectors in the output_vectors |
| file with those produced by ModelSim. |
| |
| To add the verified vectors and circuit to an existing test set, move the |
| verilog file (eg: test_circuit.v) to the test set folder. Next, move the |
| input_vectors file to the test set folder, and rename it test_circuit_input. |
| Finally, move the output_vectors file to the test set folder and rename |
| it test_circuit_output. |
| |
| CONTACT |
| ------------- |
| |
| jamieson dot peter at gmail dot com |
| ken at unb dot ca |
| - We will service all requests as timely as possible, but |
| please explain the problem with enough detail to help. |