wiki:sysgen2opb

Version 27 (modified by elliotng, 18 years ago) (diff)

--

sysgen2opb Peripheral Conversion Tool

This is a MATLAB script which converts a model built in Xilinx System Generator into an OPB-compliant peripheral for use with the embedded PowerPCs. The script replaces all the model's gateways in/out with memory mapped registers. It also creates the necessary address decode logic and a C header file with the resulting register map.

The latest copy of this tool is available in the repository.

Using sysgen2opb

  1. Prepend "no_reg_" to a gateway's name to prevent its being converted to a register. These gateways will become top-level HDL ports in the exported peripheral.
  2. There are different versions of the script and supporting model for System Generator 7.1 and 8.1.
  3. Copy the conversion script (sysgen72opb.m or sysgen82opb.m) and its required skelton peripheral model (skeleton_periph_model7.mdl or skeleton_periph_model8.mdl) to the same directory as your model.
  4. Make sure MATLAB's current working directory is the folder containing your model, the sysgen2opb script and skeleton model. Run the script on the MATLAB command line like sysgen82opb('yourModelName', hex2dec('yourBaseAddress'), 'newPrefix').
    1. Replace yourModelName with your Simulink model's name without the .mdl extension.
    2. Replace yourBaseAddress with a 32-bit memory address in hexidecimal notation. FF100000 is usually a safe choice.
    3. Replace newPrefix with a string which will replace the "no_reg" prefix attached to unconverted gateways. Use a blank string ('') to simply strip the "no_reg_" prefix.

Current Limitations

  • The script (sysgen2opb.m) and skelton peripheral model (skeleton_periph_model.mdl) must in the same directory as the model you wish to convert.
  • The model you're converting must contian at least one Gateway In and one Gateway Out which will become registers.
  • Gateways in masked subsystems will not be converted, regardless of their name. Use ports to bring the gateways out of the masked subsystem before converting the model.
  • The base address and memory size of the resulting OPB peripheral cannot be changed dynamically in XPS. These parameters must be entered manually in XPS and locked before autogenerating addresses for other peripherals.
  • All gateways which become registers must be clocked at the system sample period.
  • The initial values for all created registers are 0, regardless of data type or which sources drove the original gateways.
  • Any sources driving gateways which are converted to registers will remain in the model. Functionally this is fine; they're just clutter.
  • Every register created by the script will have a unique address on a 4-byte boundary (i.e. addr[1:0]=2'b0 for all).
  • Every register will be read/write. Read/write-only must be enforced by software.
  • From the script, we can have at most 1024 Gateways. However, with some limitation in one of the tools, we can only use 450 Gateways. A check is implemented to make sure that we have less than/equal 450 Gateways.
  • The memory interface blocks created by the script will be placed in the middle of the top-level of the model, probably underneath existing subsystems. Connectivity won't be changed, but you'll have to clean things up by hand.

Current Bugs

  • The high address that is automatically calculated for the p_select block is 1 too big (should be base+1023, not base+1024)
  • The script fails if there are no gateways or if there are no gateways out. It should fail only if there are no gateways at all.