ADDRESS_SPACE was defined as 0x00004000 bytes, but the ADDRESS_RANGE total is 0x00000800 bytes.
Wha? I don't have an ADDRESS_SPACE element.
I want to merge a MEM file that is 4k bytes long, 16 bits wide, into a BRAM that is of the same dimensions. How do I say that in a BMM file?
Finally got my Papilio Pro. Thanks to the Papilio Loader update, everything seems to be working fine, and I've been able to get the stuff that had been working on the Papilio One 500 over to the Pro.
My problem is that I'm struggling with using data2mem and a BMM file to load the block RAM I'm using in a project.
I'm using the J1 Forth processor in a project. I've got it running and talking over the serial line.
In the process of porting to the Pro, I needed to use Spartan 6 specific block ram, so I used the IP core generator to make me a 16 bit wide block RAM, and I hooked that up. Ran great, I was able to get everything working on the Pro as it did on the One.
...then I run my tests and get one more debugging step in (I think I'm close to isolating a bug related to the math being done in the Forth core).
All of the steps are relatively fast, except for the "Force the IP Core to be regenerated" and the "synth/imp/bitgen" part, even on a fast machine, these are slow steps.
All the documentation I'm reading leads me to believe I can just regen the bit file with data2mem, if only I could get the BMM file format correct.
Help!? -- I would really really like to decrease the amount of time it takes to load a new image into the block ram. I really don't want to go through the synth/imp/bitgen cycle every time I need to load a different set of bytes.
By day I'm a software development lead, and I've already been bitten by the "software guy tries to write hardware" problem a few times, but I'm pretty sure this is just a "help me figure out how to properly construct a BMM file" problem.
I am not a complete idiot in these matters, but I do recognize that I am out of my area of expertise.
with the Papilio Pro. I'm pretty new to all this, so that isn't surprising.
Let me know what you find out. I'd love to try it.
This might help.... sorry for the length! It is multiple memory spaces, each consisiting of multiple BRAM blocks.
Thank you for that Hamster! Getting the BMM right is always the hardest part for me too... The error message is completely unhelpful, and I never discovered the BMM documentation until after I got the BMM working.
One thing that I found helped with finding the correct net names was to look at the design in the FPGA Editor.
My current attempt, (listed in my original post) was to take the original BMM file that came with the j1 core, and modify that. The original setup was for 8 bit lanes each 2 bits wide. I thought if I just deleted all but one lane, and made the bit width go to the full 16 bits I'd be fine. But I get the error I listed in the original post, and this is just when I run the syntax check with data2mem. I'm not specifying a bit file, so even if I have messed up a net reference, I'm assuming that's not the issue I'm dealing with here.
But I admit, I don't know the tools. I've been using PlanAhead for development, as the tools seem more current than the environment provided by ISE, that could be a factor.
By day, I'm a software guy. That could be part of the problem.
Yes, you are guys are too advanced for me!
synthesis process. When I used that bmm file with data2mem, it worked.
pirx: You have actually described exactly the RAM I instantiated. I just used the IP Core Generator to do the dirty work.
Well, maybe not EXACTLY the RAM I instantiated. I needed a true dual port item, so that's what I specified.
Hey guys, there is unfortunately no template BMM file we can give you. There are path dependencies involved so the BMM file will depend on the structure of your project. I would recommend that you zip up your project directory here and attach it. I can take a look at it and tell you what I had to do to figure out the correct path and configuration.
I'm betting though that if you have read the data2mem documentation you have the BMM file structure correct. You are probably just not getting the path to your memory correct, and the tools do not make that easy, especially when you use the coregen to generate your memory. I've always had to synthesize my design without the BMM file, open the resulting design using FPGA editor, search for the memory nets and then you can see the correct path to add to the BMM file.
Hi Bithead - I'm just knocking up a sample for you now. I'll put it up on my WIki and add the address later today.
Short answer is - don't bother with the IP wizard , use the primitives instead.
How these are tiled together to form a memory space is anybody's guess, so you will never get the data into the correct place!
Hamster, you are awesome. I'll dig into this more myself.
I have to admit, I was reading your site, and the though that came to my mind was "Man, you better get going, this guy is way beyond you right now."
I love your stuff. My only complaint is that I've found that Verilog matches my brain better than VHDL, but that may be a temporary condition.