Need help to understand: Efficient Multi-Ported Memories for FPGAs

Hi,
I cannot understand the following paper:
"Efficient Multi-Ported Memories for FPGAs"
formatting link

FPGA has a structure with 1 write port and 2 read port memory block: 2 memory blocks sharing the same write port and each of 2 blocks can be read individually by 2 different read.
The paper essence for 2 write ports and 2 read ports is:
There are 2 memory blocks each having 1 write port and 2 read ports.
The 2 memory blocks provide 2 write ports to write independently.
There is another memory block, called LVT (Live Value Table), with 2 write ports and 2 read ports, each cell of which stores the port number which holds the latest write data.
Example:
simultaneously:
Write through port 1 with address 3; --- no problem
Write through port 0 with address 2;
simultaneously:
0 --> LVT(2);
1 --> LVT(3); --- how can it write 2 cells of a memory at the same cycle?
If above 2 simultaneously write operation are feasible, 2 read operations can read from LVT first to get proper port number, and then get the correct latest data read from the port number.
Thank you.
Weng
Reply to
Weng Tianxiang
Loading thread data ...
Hi Weng,
It is quite a simple scheme, assume you have 2 write ports each writing into their own blockram. If port0 write to address 0x12 and port1 writes to address 0x15 then the LVT (single bit array in this case) will store array[12]=0 and array[15]=1. Then if a read port read from address 15 the LVT array will set the mux to 1 which connect the second blockram to the output.
I use the XOR variant in my processor for a 8w8r block.
Good luck, Hans
formatting link

Reply to
HT-Lab
Hi Hans,
"If port0 write to address 0x12 and port1 writes to address 0x15 then the LVT (single bit array in this case) will store array[12]=0 and array[15]=1. "
How do you do: 0 --> array[12], 1 --> array[15] on the same cycle?
Thank you.
Weng
Reply to
Weng Tianxiang
memory blocks sharing the same write port and each of 2 blocks can be read individually by 2 different read.
ite ports and 2 read ports, each cell of which stores the port number which holds the latest write data.
e?
ns can read from LVT first to get proper port number, and then get the corr ect latest data read from the port number.
Our patent seeking friend fails to understand the very basic issue of how a multi-write port RAM can operate. The paper describes how you can fake a multi-write port RAM using multiple single-write port RAMs using a smaller word size multi-write port RAM. This smaller RAM can be constructed from l ogic in the FPGA fabric which is clearly explained in the paper.
Sometimes you need to actually understand the field you are trying to seek patents in. Or you can just use a shotgun approach and obtain many patents hoping someday one of them ends up paying off.
Rick C.
- Get 6 months of free supercharging - Tesla referral code -
formatting link
Reply to
gnuarm.deletethisbit
Always there with a pure heart of kindness, one given to teaching, apt to help compensate when someone is perhaps less than they should be. Always accommodating, always uplifting, always at the ready to improve another's life, eh Rick?
--
Rick C. Hodgin
Reply to
Rick C. Hodgin
Although the kicker with this paper is in simultaneous reads. They gloss pretty hard over the fact that (per the end of 5.3 and 5.4), for N write ports and M read ports, you need N*M redundant BRAMs. For their example of a 4-write, 8-read RAM they're using 32-fold the actual RAM requirements. Can't even take advantage of BRAM packing, since they use both ports of each RAM to keep one dedicated write port and one dedicated read. 32x is a hell of a multiplier to be fighting against; it'll chew up all the RAM in a cheap FPGA before you can bat an eye.
--
Rob Gaddi, Highland Technology -- www.highlandtechnology.com 
Email address domain is currently out of order.  See above to fix.
Reply to
Rob Gaddi
I am happy to answer questions and provide advice to those who ask for it. Sometimes the person finds it useful other times not. I am not alone in o ffering the same sort of help to more than one person in this group. But i t is often declined presumably because the person asking for help doesn't r eally want help as much as getting others to do their work for them.
Rick C.
+ Get 6 months of free supercharging + Tesla referral code -
formatting link
Reply to
gnuarm.deletethisbit
le?
s
I'm not sure what your point is. That is the nature of multiport memories. If you need it, you need it. They can be the performance limiting portio n of a design and so they would be very welcome at nearly any cost.
I seem to recall when Xilinx block rams had true quad port capability in th at they could read and write from two ports all at the same time. There ma y have only been two address buses, I can't recall. But the two write port s could operate simultaneously. The only limitation was both ports could n ot write to the same address.
Rick C.
-- Get 6 months of free supercharging -- Tesla referral code -
formatting link
Reply to
gnuarm.deletethisbit
On Monday, January 14, 2019 at 7:01:55 PM UTC-5, snipped-for-privacy@gmail.com wr ote:
. Sometimes the person finds it useful other times not. I am not alone in offering the same sort of help to more than one person in this group. But it is often declined presumably because the person asking for help doesn't really want help as much as getting others to do their work for them.
Whoosh!
--
Rick C. Hodgin
Reply to
Rick C. Hodgin
it. Sometimes the person finds it useful other times not. I am not alone in offering the same sort of help to more than one person in this group. B ut it is often declined presumably because the person asking for help doesn 't really want help as much as getting others to do their work for them.
Are we trolling? That is so un-Christian of you!
Rick C.
-+ Get 6 months of free supercharging -+ Tesla referral code -
formatting link
Reply to
gnuarm.deletethisbit
Hi Weng,
The LVT array is not a blockram but just a bank of FF's, so you can set multiple bits at the same time.
Regards, Hans.
Reply to
HT-Lab
:
e
d
r it. Sometimes the person finds it useful other times not. I am not alon e in offering the same sort of help to more than one person in this group. But it is often declined presumably because the person asking for help doe sn't really want help as much as getting others to do their work for them.
I don't troll.
That was the sound of my point in the prior post flying right past you.
--
Rick C. Hodgin
Reply to
Rick C. Hodgin
Hi,
Here is my perfect answer to my question in VHDL and it has one copy and is capable for doing N writes and N reads at the same time:
signal R0, R1, ..., Rn_1 : std_logic_vector(BITS-1 downto 0); type NR_NW_TYPE : (0 to N-1) of unsigned(BITS-1 downto 0); alias NR_NW : NR_NW_TYPE := (R0, R1, ..., Rn_1);
Now one can do N writes to any data and N reads from any data of NR_NW on the same cycle.
A1 A1
Reply to
Weng Tianxiang
There are no limits on the number of reading and writing:
If 2 writes are for the same address one must arrange them in a same if-statement.
Weng
Reply to
Weng Tianxiang
There is another thread on this topic:
formatting link

I have a diagram here which shows how to make a 4-port RAM (2 writes, 2 reads) that keeps the semaphores in blockRAMs:
formatting link

The diagram might be easier to understand than a long explanation.
Reply to
Kevin Neilson
I needed a 4-port RAM to do 2 read-modify-writes per cycle. This quadrupled the blockRAM requirement. It was totally worth it for that design. It's not always worth it.
Reply to
Kevin Neilson
:
te:
sue
,
uld
to
for it. Sometimes the person finds it useful other times not. I am not al one in offering the same sort of help to more than one person in this group . But it is often declined presumably because the person asking for help d oesn't really want help as much as getting others to do their work for them .
I can see that you would not understand you are trolling. You understand s o little of what is written to you here. You never seem to understand how you interact with people here. You always feel people are lashing out at y ou. I've only tried to help you and in the end you decide that what anyone if offering to teach you is not what you need to learn and you freak out r etreating into your religious shell-home.
I find it interesting that this time you returned, not because you have som e technical imperative that you want to discuss, but because you just want to throw dirt at someone. You seem to be regressing.
I believe the term that best describes you is pious. The very nature of yo ur present conversation is un-Christian. By definition you are trolling, t rying to get a rise out of me. Can't you see any of that? If you can't se e it, perhaps you would be better off not posting here until you have learn ed those two things? Then once you have learned what God is trying to teac h you it will be of benefit for you to return.
Rick C.
+- Get 6 months of free supercharging +- Tesla referral code -
formatting link
Reply to
gnuarm.deletethisbit
I would like to see that code. BTW, what is the point of the alias in your above description? Why bother with the Rj notation at all?
Rick C.
++ Get 6 months of free supercharging ++ Tesla referral code -
formatting link
Reply to
gnuarm.deletethisbit
On Monday, January 14, 2019 at 5:11:48 PM UTC-7, snipped-for-privacy@gmail.com wr ote:
2
e
ycle?
en
ng
tes
re
ux
N
e
s. If you need it, you need it. They can be the performance limiting port ion of a design and so they would be very welcome at nearly any cost.
that they could read and write from two ports all at the same time. There may have only been two address buses, I can't recall. But the two write po rts could operate simultaneously. The only limitation was both ports could not write to the same address.
You could consider the Xilinx BRAMs true quad port, if you set both ports t o READ_FIRST, with the limitation that there are only 2 address buses and y ou have to read from the same address to which you are writing. Most of th e time you want to read from some address other than the one to which you a re writing.
When I was trying to make a true quad port (4 addresses) I found a Xilinx a pp note (XAPP228) on making a BRAM-based quad port. I was excited I wouldn 't have to design one from scratch. I opened the app note and saw it descr ibed how to double the clock and use timeslicing to make extra virtual port s. Thanks, Xilinx! Like I needed an app note for that. No problem; I'll just double my 350MHz clock to 700MHz.
Reply to
Kevin Neilson
My point is ... be nice and respectful of people, even if you think they are not what they should be in terms of knowledge or ability.
--
Rick C. Hodgin
Reply to
Rick C. Hodgin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.