System Generator is not my cup of tea, but some folks like it. The evaluation is free, so give it a try. I consider it one tool in my toolbox. Someday it may save me a day of work, and it will pay for itself.
When I design signal processing systems, I do the high-level concept simulation in MATLAB m-code or C. MATLAB is easier unless I'm doing a lot of tricky binary manipulations, and that's easier in C. I don't use Simulink. My high-level simulation also spits out coefficient tables (in HDL format) for initializing block RAMs. Finally, I code the whole system in Verilog, test it with ModelSim, and compile to FPGA.
chinsin83, please let us know if that System Generator m-code block does anything useful for you. I guess I overlooked that key feature. Here's the online help introduction:
The Xilinx MCode block is a container for executing a user-supplied MATLAB function within Simulink. A parameter on the block specifies the m-code function name. The block executes the m-code to calculate block outputs during a Simulink simulation. The same code is translated in a straightforward way into equivalent behavioral VHDL when hardware is generated. The block's Simulink interface is derived from the MATLAB function signature, and from block mask parameters. There is one input port for each parameter to the function, and one output port for each value the function returns. Port names and ordering correspond to the names and ordering of parameters and return values.
The MCode block does not support the entire MATLAB language; the supported subset is described below. There are several noteworthy additional restrictions on the block and its usage:
- All block inputs and outputs must be of Xilinx fixed point type.
- The block must have at least one output port.
- The code for the block must exist on the MATLAB path or in the same directory as the model that uses the block.
This block provides a convenient and flexible way to implement arithmetic functions and to build finite state machines and control logic. The MCode block tutorial shows three examples of functions for the MCode block. The first example (also described below) consists of a function xlmax which returns the maximum of its inputs. The second illustrates how to do simple arithmetic. The third shows how to build finite state machines. The example models are linked from the Examples section of this guide.
<snip>