UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Explorer
Explorer
18,573 Views
Registered: ‎11-13-2009

Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Vivado 2013.4 Project Mode

 

I am looking for a way to write the .bmm file from within the "Implementation" view of the design.  My intention is to allow post bit file inclusion of custom memory files to specific block ram blocks.  The current method attachs a .MIF/.MEM/.COE file to the XIP generated block but this requires a full run through the tools for each change which is becoming time prohibitive as the design size increases.

 

The requirements are as follows:

 

Need to provide an "instance" path to the XIP memory block as the source of the bmm file.

 

The tool needs to find all the Block RAM for that instance and orgainze it so that a MEM file could be attached.  The BMM file requires the instance path, the correct order and the Location of the various memory components.

 

To this point I have been able to use the following command to uncover all the memories attached to a given instance:

 

get_cells -hier -filter {PRIMITIVE_TYPE =~ BMEM.*.*}

 

The top level instance names are "mem_a, mem_b, mem_x" for example and I can further filter on that as well which will meet my first requirement above.

 

Next I need the location and I believe the following works:

 

report_property LOC <object_type>

 

Now with a list of BMEM cells and the locations I should be able to dump this info into a file; maybe format it properly as well.

 

What I am struggling to get done is finding some example code that does this type of object + list manipulation ending with a formated output.  The best would be if someone already solved this problem and I could apply my unique RAM sizes to the BMM file to be used.

 

So a simple example that worked in the implementation and parse filtered object searched properties and formatted in a human readable form would be most excellent start.

 

Well thanks in advance,

TomT...

 

 

0 Kudos
1 Solution

Accepted Solutions
Explorer
Explorer
24,046 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

All -- well I have an implementation of a tool that a user could customize for there own use that does that I requested.  Yes my design has an assumed layout and memory instance name which Ihave tried to note in the code with FIXUP so the user isn't using this out of the box.  YOU MUST CUSTOMIZE THIS TCL to your needs.

 

I thought I would share it with the community as an example of why Vivado and TCL is so powerful!

 

Here is the code:

 

#
# file: extract_bmm_refloc.tcl
#
# Purpose: This TCL codes reads an implemented design and builds a
# skeleton of a BMM file to be used with data2mem. The Format of the
# BMM file is specific to our needs but the general skeleton of
# searching memories and outputting in the correct format is the same
# for anyone wanting to us this.
#
# Background: This design has a fixed 32-bit wide by 64K deep memory
# using the cascade mode of the RAM36B blocks in a V7 FPGA.  Each bit
# is it's own pair of cascaded memories. 
#
# Usage: We only care about a blocks we call mem_a and mem_b for this
# case. We are always dumping to a fixed file called mem_dump.bmm and
# then changing copying it to where we need it.
#
# History:
#  tdt 14/04/18 -- Initial Version

set myInsts [get_cells -hier -filter {PRIMITIVE_TYPE =~ BMEM.*.*}]
puts "Raw Number for Instances: [llength $myInsts]"
set bmmList {}; # make it empty incase you were running it interactively

foreach memInst $myInsts {
    # this is the property we need
    #LOC                             site     false      RAMB36_X6Y39
    #report_property $memInst LOC
    set loc [get_property LOC $memInst]
    # for BMM the location is just the XY location so remove the extra data
    set loc [string trimleft $loc RAMB36_]
    # find the bus index, this is specific to our design
    set busindex [string range $memInst [string first \[ $memInst] [string last \] $memInst]]
    # build a list in a format which is close to the output we need
    set x "$memInst $busindex LOC=$loc"
    lappend bmmList $x
    #puts "set_property LOC $loc \[get_cells $memInst\]"  # for XDC locking
    #DEBUG: puts "Locating Instance: $memInst to $x"
}

# debug message:
puts "Parsed Locations Number of Intances: [llength $bmmList]"
#DEBUG: foreach memInst $bmmList { puts "Stored: $memInst" }

# Remove duplicates, although there shouldn't be any
set bmmUniqueList [lsort -unique $bmmList]

# FIXUP: Here we have a the fixed file location for our output:
# Open a file to put the data into.
set fp [open mem_dump.bmm w]
#
# The format of the BMM file is specificed in the data2mem manual and
# this is what just works for us so if you want something different
# then you need to understand how this file behaves.
# Start the A Memories:
puts $fp "ADDRESS_SPACE memory_a COMBINED \[0x000000:0x03FFFF\]"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    #DEBUG: puts "Processing $printList"
    # our unique instance to match.
    if [string match "*mem_a*" $printList] {
	# we have 2 cascaded memories this is one of them:
	if [string match "*.lower*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    if [string match "*mem_a*" $printList] {
	if [string match "*.upper*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;\nEND_ADDRESS_SPACE;\n"

# Start the B Memories:
puts $fp "ADDRESS_SPACE memory_b COMBINED \[0x000000:0x03FFFF\]"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    if [string match "*mem_b*" $printList] {
	if [string match "*.lower*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    if [string match "*mem_b*" $printList] {
	if [string match "*.upper*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;\nEND_ADDRESS_SPACE;"

close $fp

# cleanup
unset myInsts
unset bmmList
unset loc
unset busindex 
unset x 
unset bmmUniqueList
unset fp 

# end of file

 Enjoy,

TomT...

Tags (1)
14 Replies
Explorer
Explorer
18,561 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

An update with a code snippet to show you what I am doing.

 

set myInsts [get_cells -hier -filter {PRIMITIVE_TYPE =~ BMEM.*.*}]

foreach memInst [lsort -increasing $myInsts] {
    #puts $memInst
    # this is the property we need
    #LOC                             site     false      RAMB36_X6Y39
    #report_property $memInst LOC
    set loc [get_property LOC $memInst]
    #puts $loc
    puts "$memInst BUSWIDTH PLACED = $loc"
}

 

The output looks like:

 

mem_x/U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[67].ram.r/v6_init.ram/NO_BMM_INFO.SP.CASCADED_PRIM36.ram_B BUSWIDTH PLACED = RAMB36_X6Y32
mem_x/U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[67].ram.r/v6_init.ram/NO_BMM_INFO.SP.CASCADED_PRIM36.ram_T BUSWIDTH PLACED = RAMB36_X6Y33
mem_x/U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[6].ram.r/v6_init.ram/NO_BMM_INFO.SP.SIMPLE_PRIM36.ram BUSWIDTH PLACED = RAMB36_X5Y48
mem_x/U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[7].ram.r/v6_init.ram/NO_BMM_INFO.SP.SIMPLE_PRIM36.ram BUSWIDTH PLACED = RAMB36_X4Y48
mem_x/U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[8].ram.r/v6_init.ram/NO_BMM_INFO.SP.SIMPLE_PRIM36.ram BUSWIDTH PLACED = RAMB36_X5Y47
mem_x/U0/inst_blk_mem_gen/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[9].ram.r/v6_init.ram/NO_BMM_INFO.SP.SIMPLE_PRIM36.ram BUSWIDTH PLACED = RAMB36_X5Y45

 

Now my problem is that I have a lot of memories in this design for one block of addresses.  Using CoreGen to generate one memory of size 64Kx40-bits.  It seems the memory is orgainzed using 4Kx9 groups of 5.  But it wasn't based on ramloop[0-4] but more on ramloop[0], ramloop[11], ramloop[23]...

 

I wish I understood the modulo+modulo that Xilinx has choosen to build these structures so that I could build the BMM file correctly.

 

Thanks for reviewing and thinking -- I still don't have the solution but am getting closer!

TomT...

0 Kudos
Xilinx Employee
Xilinx Employee
18,547 Views
Registered: ‎11-28-2007

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Hi TomT,

 

Not sure if it can be of any help, but did you see this section in the data2mem userguide UG658?

screenshot_004.jpg

 

 

Best regards,

Dries

--------------------------------------------------------------------------------------------------------------------
Please mark the Answer as "Accept as solution" if the information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented by clicking the star next to the post.
0 Kudos
Explorer
Explorer
18,543 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Absolutely, that is what I am trying to do.  Constructing the BMM file by hand is required, but this AR does NOT indicate how one would go about it other than saying you could probe the design in either PlanAhead or FPGA Editor.  Furthermore it doesn't give you any guidance when you are talking about 72 block RAMs and how to order them so they get initialized properly (I have 3 sets of 64Kx40-bit memories I am trying to capture).

 

All of this seemed to within the realm of TCL until I discovered that the CoreGen Memory has some pattern of memory instanications that don't seem to make sense to me.  I am absolutely sure that Xilinx has this figured out because I can attach a COE file to the CoreGen block memory and it is initialized as expected.  I need that method exposed so that I can develop a script that is more generalized (I have need for other NON-EDK based designs to use this approach).

 

So I am asking two questions:

1) How does CoreGen make the decision of how to layout the block RAMs based on the user input of depth and data width?

2) What would a BMM file look like that was referencing 72 block RAMs where 5 - 4Kx9-bit BRAMs are used to describe a slice of address?  Are these done with multiple Address blocks and a Combine?

 

Thanks so much for the response, I do need more input!

TomT...

0 Kudos
Explorer
Explorer
18,542 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Just for your reference I am using the following documentation to understand this problem and arrive at a solution:

 

Data2MEM User Guide UG658
 
 
 
 
Furthermore in forum #12972 the user indicated that he was having issues with data2mem loading 9-bit BRAM which is appears CoreGen has selected?  Yes this is a while ago but just wanted to understand if this was still and issue.
 
Thanks,
TomT...
 
 
0 Kudos
Explorer
Explorer
18,542 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

After further analysis, I cannot determine the pattern that CoreGen followed, it seemd to us 4-2Kx9 memories to build but bus [35:0] and then used 4 groups of 2 cascaded 32Kx1 to generate a single bit at time but the combination is the upper nibble [39:36]?  This is making it very difficult to construct a BMM file with this structure.

 

I might have to rebuild this by hand using 40 groups of 2 cascades of 32KX1 which would remove all the input address selecting and the final much selection.  From that it would be easier to develop a BMM file but would elminate the ease at which we are currently using the COE file.  In the long run we need to be able to add the data with a BMM file first while we migrate to using a Microblaze based loader which is our final goal.

 

I still believe this approach is correct and having a tool that can run on an implemented design and dump groups of BRAMs into a BMM file would be an excellent start to solving this problem.  What I have above is a start but something that could determine the data bus order and the address size would be very useful.  I am not quite there yet and am looking for more guidance.

 

Thanks,

TomT...

0 Kudos
Xilinx Employee
Xilinx Employee
18,538 Views
Registered: ‎09-14-2007

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Hi,


Currently we do not have support for using Data2MEM outside of the Processor based flow. IPI in Vivado and XPS In ISE..

 

This is on our roadmap right now.

 

Thanks

Duth

 

0 Kudos
Explorer
Explorer
18,534 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Duth,

 

I know there may not be an automated flow right now, I am quite capable of writing the TCL code necessary and really need to understand how the CoreGen memory is developed to assist me in writing the system.  I am planning on doing some TCL based connectivity analysis to confirm my understanding but some guidance from Xilinx would be helpful.

 

You are not saying this isn't supported you are saying the Xilinx hasn't developed tools which support this approach?

 

If a user wants to they can use data2MEM in there own flow to load a multiple block rams in a device -- that is what I need to be sure of as well?

 

TomT...

0 Kudos
Xilinx Employee
Xilinx Employee
18,532 Views
Registered: ‎09-14-2007

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Hi Tom,

 

In ISE you can get further along on this process although that would be with Tcl, where you can create your own BMM file to describe the memory break-up and from there you can use Data2MEM. We have had a few people successful with it, although more people have not been too successful.

 

In Vivado on the other hand we dont use BMM directly, as this is something that is stored inside the netlist as embedded BMM. There are APIs provided to the IP teams to build this and have the correct embedded BMM in there such that it can be recognized by Vivado memdata flow. These are not Tcl APIs they are acutally embedded C++ APIs that being called. This is why we say it is not supported right now. There is work to port this over to a customer visible API. We have roadmap plans to support both inferred and instantiated memory with Vivado Data2MEM.

 

Thanks

Duth

 

0 Kudos
Xilinx Employee
Xilinx Employee
18,499 Views
Registered: ‎11-28-2007

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Hi TomT,

 

I think you are on the right track.

 

The Block Memory Generator has a very advanced algorithm to create very compact and area efficient memories.

In your case this is unfortunately complicating your efforts as you have experienced.

 

You could instantiate the memories, alternatively you could infer the memory. XST or Vivado synthesis do not use the same algorithm that the Block Memory Generator IP uses.

Check out the XST memory templates in the XST userguide or the templates window in Vivado.

It is still possible to initialize your memories with a file. There are code examples how to do that and you have the added benefit that you can customize the format even.

 

 

Best regards,

Dries

--------------------------------------------------------------------------------------------------------------------
Please mark the Answer as "Accept as solution" if the information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented by clicking the star next to the post.
0 Kudos
Scholar markcurry
Scholar
14,035 Views
Registered: ‎09-16-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Tom,

 

I'm not sure how the TCL flow in Vivaldo can help you here.  I also don't think it matters how your create the memories (via the block memory generator) or infer the memories.  You're still mapping a logical memory map to physical block memories.

 

We've just always created the BMM files by hand.  And it's difficult to get right.  The tool really could use some improvement in it's syntax, syntax checking,etc...  The errors you get when you get things wrong are often vague and confusing...

 

And while I'm at it, I wish there was a way to change/correct it post-PAR, as currently changing it triggers a full new ngdbuild/map/place - or whatever the equivalent is in Vivaldo.  Painfully long cycles to fix the BMM syntax..

 

We've maintain a lot of BMM files, but they all reference just two or three different blocks, which are used on many FPGAs.  So the BMM files is very similar between devices.  Creating the BMM the first time is painful, but then it's cut/paste/edit, and you're done.  (Just don't touch the logic structure again.)

 

We've only had to do this with 8-9 block rams.  72+, yes I think I'd want to cry...

 

I just dump out verilog structural netlist from synthesis (netgen), and use that to find the generate block ram hierarchal path name.    Iterate a few times, cause you're likely to get the ordering wrong, (and find your ram contents scrambled).

 

Are you sure you need to modify the contents of the all the memories post build?  If they're fixed at build time, then just use the built in options to do the initilization within the design itself, and avoid all this hassle.  $Readmemh, etc...

 

Good luck.

 

--Mark

 

0 Kudos
Explorer
Explorer
13,945 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

All,

 

Thanks for the encouragement and I wanted to say your guidance lead to a successful deployment of the solution.

 

I wanted to let all out there reading this that it really isn't that hard to do.  It does involve a lot of bookkeeping in both the BMM file as well as the XDC file to keep the memories in place.  The TCL sample I showed make it easy to start but you still need to keep the Memories locations in lock step between these two files.

 

Some other gotcha's:

The LOC in XDC is referenced using RAMB36_X##Y## whereas inside the BMM file they are just X##Y## -- this is an inconsistancy that Xilinx should resolve as it could make it possible to write a TCL script to drop out both components.

 

The next thing is to understand the endian behavior of your data vs how data2mem sees your .MEM file.  For me I ended up using the COMBINED form of the .BMM fomat and just given the various blocks that made up the bits.

 

We need a 64K x 40-bit so I used the cascaded form of the block memories to get to 64Kx1-bit and replicated it 40 times using "generate".  Later we changed it to 128K x 32-bits and I used 2 generates to make it happen.  They next key was making sure my data was in the rigth endian and like I said it was really trial and error for this to see what worked properly.  I wuold suggest you just hand code the .MEM file for a few spot checks with good patterns and use Chipscope to confirm you have it right.  I used an small design to test the concept.

 

So don't be afraid it really isn't that hard and I don't fault Xilinx for not making a generalized solution as I cannot conceive of one that would be general.  But all the tools are there.

 

The end of the day I took a process that was taking 30+ minutes (we were jaming COE files in to coregen memories at the beginning of an implementation) down to 2 minutes my using data2mem on a bit file.  For us it was totally worth the effort.

 

TomT...

Xilinx Employee
Xilinx Employee
13,935 Views
Registered: ‎11-28-2007

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Thank you for sharing your experience TomT!

--------------------------------------------------------------------------------------------------------------------
Please mark the Answer as "Accept as solution" if the information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented by clicking the star next to the post.
0 Kudos
Explorer
Explorer
24,047 Views
Registered: ‎11-13-2009

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

All -- well I have an implementation of a tool that a user could customize for there own use that does that I requested.  Yes my design has an assumed layout and memory instance name which Ihave tried to note in the code with FIXUP so the user isn't using this out of the box.  YOU MUST CUSTOMIZE THIS TCL to your needs.

 

I thought I would share it with the community as an example of why Vivado and TCL is so powerful!

 

Here is the code:

 

#
# file: extract_bmm_refloc.tcl
#
# Purpose: This TCL codes reads an implemented design and builds a
# skeleton of a BMM file to be used with data2mem. The Format of the
# BMM file is specific to our needs but the general skeleton of
# searching memories and outputting in the correct format is the same
# for anyone wanting to us this.
#
# Background: This design has a fixed 32-bit wide by 64K deep memory
# using the cascade mode of the RAM36B blocks in a V7 FPGA.  Each bit
# is it's own pair of cascaded memories. 
#
# Usage: We only care about a blocks we call mem_a and mem_b for this
# case. We are always dumping to a fixed file called mem_dump.bmm and
# then changing copying it to where we need it.
#
# History:
#  tdt 14/04/18 -- Initial Version

set myInsts [get_cells -hier -filter {PRIMITIVE_TYPE =~ BMEM.*.*}]
puts "Raw Number for Instances: [llength $myInsts]"
set bmmList {}; # make it empty incase you were running it interactively

foreach memInst $myInsts {
    # this is the property we need
    #LOC                             site     false      RAMB36_X6Y39
    #report_property $memInst LOC
    set loc [get_property LOC $memInst]
    # for BMM the location is just the XY location so remove the extra data
    set loc [string trimleft $loc RAMB36_]
    # find the bus index, this is specific to our design
    set busindex [string range $memInst [string first \[ $memInst] [string last \] $memInst]]
    # build a list in a format which is close to the output we need
    set x "$memInst $busindex LOC=$loc"
    lappend bmmList $x
    #puts "set_property LOC $loc \[get_cells $memInst\]"  # for XDC locking
    #DEBUG: puts "Locating Instance: $memInst to $x"
}

# debug message:
puts "Parsed Locations Number of Intances: [llength $bmmList]"
#DEBUG: foreach memInst $bmmList { puts "Stored: $memInst" }

# Remove duplicates, although there shouldn't be any
set bmmUniqueList [lsort -unique $bmmList]

# FIXUP: Here we have a the fixed file location for our output:
# Open a file to put the data into.
set fp [open mem_dump.bmm w]
#
# The format of the BMM file is specificed in the data2mem manual and
# this is what just works for us so if you want something different
# then you need to understand how this file behaves.
# Start the A Memories:
puts $fp "ADDRESS_SPACE memory_a COMBINED \[0x000000:0x03FFFF\]"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    #DEBUG: puts "Processing $printList"
    # our unique instance to match.
    if [string match "*mem_a*" $printList] {
	# we have 2 cascaded memories this is one of them:
	if [string match "*.lower*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    if [string match "*mem_a*" $printList] {
	if [string match "*.upper*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;\nEND_ADDRESS_SPACE;\n"

# Start the B Memories:
puts $fp "ADDRESS_SPACE memory_b COMBINED \[0x000000:0x03FFFF\]"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    if [string match "*mem_b*" $printList] {
	if [string match "*.lower*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;"
puts $fp "  ADDRESS_RANGE RAMB32\n     BUS_BLOCK"
foreach printList [lsort -dictionary $bmmUniqueList] {
    if [string match "*mem_b*" $printList] {
	if [string match "*.upper*" $printList] {
	    puts $fp "       $printList;"
	}
    }
}
puts $fp "     END_BUS_BLOCK;\n  END_ADDRESS_RANGE;\nEND_ADDRESS_SPACE;"

close $fp

# cleanup
unset myInsts
unset bmmList
unset loc
unset busindex 
unset x 
unset bmmUniqueList
unset fp 

# end of file

 Enjoy,

TomT...

Tags (1)
13,183 Views
Registered: ‎05-28-2014

Re: Need TCL script to generate data2mem .bmm file from NON-EDK based design

Jump to solution

Hello Mark,

 

This is very useful when one has a large design that takes many hours to implement, ASIC emulation for example.

a change is ROM or SW to an embedded core..... 

having an easy way to change RAM content..... could be very useful...

 

Regards

Benhur

0 Kudos