12-05-2018 07:36 AM
I have a project, which includes a blockdesign with a MIG (DDR memory interface generator). If I copy and import the *.bd file to a new project, all IPs and connections (in the blockdesign) ok, except the MIG. The box of the MIG is missing, and I get several errors regarding to the MIG. Like the following:
[BD 41-6] mig_7series_0 does not have a port called ui_clk [BD 41-6] mig_7series_0 does not have a port called aresetn [BD 41-6] mig_7series_0 does not have a port called mmcm_locked
Is it normal to include MIG into blockdesign? Or this is not recommended, and I should insert it into the topmodule HDL.
What other source files should I copy/import to restore the blockdesign? Other IPs in the blockdesign not requires to import their *.xci files does MIG requires?
(The motivation of the copy is to store only the *.bd file in version control, so I want to regenerate the whole project from the *.bd, wrapper, and constraints)
12-05-2018 10:52 AM - edited 12-05-2018 10:54 AM
7-Series MIG whether you are using IP Catalog or IPI Flow requires the usage of a mig.prj file. If you are using a "board aware" flow like with a Arty A7-35T for example, then instead of referenceing a mig.prj the *.bd will be referencing ddr3_sdram for example. Which is actually a reference to the board.prj included in the board repo.
If you are not using the "board aware" flow, and you actually customize MIG to provide a pinout, that pinout and ALL the IP configuration will be store in a mig_a.prj and/or a mig_b.prj. This file is crucial to properly revision control a 7-Series MIG IP in IPI or IP Catalog.
Example of BD including reference to mig_a.prj
<spirit:instanceName>mig_7series_0</spirit:instanceName> <spirit:componentRef spirit:library="ip" spirit:name="mig_7series" spirit:vendor="xilinx.com" spirit:version="4.1"/> <spirit:configurableElementValues> <spirit:configurableElementValue spirit:referenceId="bd:xciName">design_1_mig_7series_0_0</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="XML_INPUT_FILE">mig_a.prj</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="RESET_BOARD_INTERFACE">Custom</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="MIG_DONT_TOUCH_PARAM">Custom</spirit:configurableElementValue> <spirit:configurableElementValue spirit:referenceId="BOARD_MIG_PARAM">Custom</spirit:configurableElementValue>
If you don't want to worry about the mig_a.prj file, then I recommend porting your BD that includes 7-Series MIG by using the write_bd_tcl command. We end up taking the contents of the mig_a.prj and embedding it in the produced *.tcl script. You can then use this script to recreate your *.bd in a different project or a new BD.
I have attached a sample *.tcl script to re-create a BD including 7-Series MIG properly. Most of the time the only thing you need to change is the design_name variable.
12-05-2018 11:03 PM
12-06-2018 07:03 AM
I would think that an IP that require *.coe, *.mem, init files csv, etc would also require extra care with revision control. But I am not sure how other IP function with external files.
I think a post in Design Entry would be a better target area for this more broad question.
12-06-2018 07:24 AM
I have experimented that 3 files are needed by the MIG:
If any of files above is missing the blockdesign cannot open properly. (Note, that no files are needed by other IPs.)
12-06-2018 08:20 AM
The minimum sets of files required by IP Integrator per UG892 is as follows:
If you use the write_bd_tcl and add that scripts into revision control with your BD and the UI folder, then you don't need to worry about all the extra files required for MIG. The BD recreated will include everything you need.