FPGA Groups

FPGA Groups (http://www.fpgacentral.com/group/index.php)
-   Verilog (http://www.fpgacentral.com/group/forumdisplay.php?f=12)
-   -   Inferring dual port two output sram (http://www.fpgacentral.com/group/showthread.php?t=45597)

[email protected] 08-15-2006 10:20 AM

Inferring dual port two output sram
 
Hi,

I wish to infer a dual port SRAM with one input write data port and two
output read data ports. Ideally I'd like describe this abstractly
enough so that the code will generate the correct hardware for my
prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
library (memory to be inferred via Synopsys Designware). The following
code in ISE results in 2 dual port memories with a single input and
output - which is not what I want

always @(posedge clk)
begin
if (wr_en)
ram[waddr] <= data_in;
end
//-----------------------------------------------------------------------

always @(posedge clk)
begin
if(rst_n ==1'b0)
begin
data_out0 <= 'b0;
data_out1 <= 'b0;
end
else
if(wr_en!=1'b1)
begin
data_out0 <= ram[raddr0];
data_out1 <= ram[raddr1];
end
end

Any suggestions would be most welcome!
thanks


gabor 08-15-2006 03:41 PM

Re: Inferring dual port two output sram
 

[email protected] wrote:
> Hi,
>
> I wish to infer a dual port SRAM with one input write data port and two
> output read data ports. Ideally I'd like describe this abstractly
> enough so that the code will generate the correct hardware for my
> prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
> library (memory to be inferred via Synopsys Designware). The following
> code in ISE results in 2 dual port memories with a single input and
> output - which is not what I want
>
> always @(posedge clk)
> begin
> if (wr_en)
> ram[waddr] <= data_in;
> end
> //-----------------------------------------------------------------------
>
> always @(posedge clk)
> begin
> if(rst_n ==1'b0)
> begin
> data_out0 <= 'b0;
> data_out1 <= 'b0;
> end
> else
> if(wr_en!=1'b1)
> begin
> data_out0 <= ram[raddr0];
> data_out1 <= ram[raddr1];
> end
> end
>
> Any suggestions would be most welcome!
> thanks


To end up with one dual-port memory, one of the outputs
in the second process needs to use the same address
as the write section, i.e. replace either raddr0 or raddr1
with waddr. Otherwise this can't be implemented in a
single DP RAM. What you've described is a quasi three
port memory (1 write and 2 read) since you have three
address buses.

Regards,
Gabor


John_H 08-15-2006 03:45 PM

Re: Inferring dual port two output sram
 
For a dual port memory in the Xilinx architecture, each port has one
address, not two addresses. You specify a waddr which is different than
raddr0 and raddr1. You're describing a three port memory. If you can
use a 2x clock for the memory, it's simple to enable the write on the
equivalent of the 1x clock rising edge and the read on the 1x clk
falling edge by delivering the 2x clk with the write enable in the
correct place. The address also needs to be muxed but muxes are fast.


[email protected] wrote:
> Hi,
>
> I wish to infer a dual port SRAM with one input write data port and two
> output read data ports. Ideally I'd like describe this abstractly
> enough so that the code will generate the correct hardware for my
> prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
> library (memory to be inferred via Synopsys Designware). The following
> code in ISE results in 2 dual port memories with a single input and
> output - which is not what I want
>
> always @(posedge clk)
> begin
> if (wr_en)
> ram[waddr] <= data_in;
> end
> //-----------------------------------------------------------------------
>
> always @(posedge clk)
> begin
> if(rst_n ==1'b0)
> begin
> data_out0 <= 'b0;
> data_out1 <= 'b0;
> end
> else
> if(wr_en!=1'b1)
> begin
> data_out0 <= ram[raddr0];
> data_out1 <= ram[raddr1];
> end
> end
>
> Any suggestions would be most welcome!
> thanks
>


John_H 08-15-2006 03:48 PM

Re: Inferring dual port two output sram
 
Sorry, it's early... I see now you don't need the read value during the
write. Define a wire for one of the addresses that looks like
rwaddr = wr_en? waddr : raddr0;
and use the rwaddr in both the write and appropriate read.


[email protected] wrote:
> Hi,
>
> I wish to infer a dual port SRAM with one input write data port and two
> output read data ports. Ideally I'd like describe this abstractly
> enough so that the code will generate the correct hardware for my
> prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
> library (memory to be inferred via Synopsys Designware). The following
> code in ISE results in 2 dual port memories with a single input and
> output - which is not what I want
>
> always @(posedge clk)
> begin
> if (wr_en)
> ram[waddr] <= data_in;
> end
> //-----------------------------------------------------------------------
>
> always @(posedge clk)
> begin
> if(rst_n ==1'b0)
> begin
> data_out0 <= 'b0;
> data_out1 <= 'b0;
> end
> else
> if(wr_en!=1'b1)
> begin
> data_out0 <= ram[raddr0];
> data_out1 <= ram[raddr1];
> end
> end
>
> Any suggestions would be most welcome!
> thanks
>


mk 08-15-2006 06:41 PM

Re: Inferring dual port two output sram
 
On 15 Aug 2006 01:20:34 -0700, "[email protected]"
<[email protected]> wrote:

>Hi,
>
>I wish to infer a dual port SRAM with one input write data port and two
>output read data ports. Ideally I'd like describe this abstractly
>enough so that the code will generate the correct hardware for my
>prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
>library (memory to be inferred via Synopsys Designware).


I haven't used Designware recently but I'd be very surprised if they
added memory inferring to its features. In ASICs one needs to run a
memory compiler which is specific to each process and it's supplied by
the library vendor (or another third party memory IP vendor). So you
probably will have to run a memory compiler get a model and
instantiate that model in your design. If so it makes more sense to do
the same for the FPGA flow too.

[email protected] 08-15-2006 07:35 PM

Re: Inferring dual port two output sram
 
Thanks for that John! that definitely points me in the right direction

John_H wrote:
> Sorry, it's early... I see now you don't need the read value during the
> write. Define a wire for one of the addresses that looks like
> rwaddr = wr_en? waddr : raddr0;
> and use the rwaddr in both the write and appropriate read.
>
>
> [email protected] wrote:
> > Hi,
> >
> > I wish to infer a dual port SRAM with one input write data port and two
> > output read data ports. Ideally I'd like describe this abstractly
> > enough so that the code will generate the correct hardware for my
> > prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
> > library (memory to be inferred via Synopsys Designware). The following
> > code in ISE results in 2 dual port memories with a single input and
> > output - which is not what I want
> >
> > always @(posedge clk)
> > begin
> > if (wr_en)
> > ram[waddr] <= data_in;
> > end
> > //-----------------------------------------------------------------------
> >
> > always @(posedge clk)
> > begin
> > if(rst_n ==1'b0)
> > begin
> > data_out0 <= 'b0;
> > data_out1 <= 'b0;
> > end
> > else
> > if(wr_en!=1'b1)
> > begin
> > data_out0 <= ram[raddr0];
> > data_out1 <= ram[raddr1];
> > end
> > end
> >
> > Any suggestions would be most welcome!
> > thanks
> >



[email protected] 08-15-2006 07:38 PM

Re: Inferring dual port two output sram
 
> >I wish to infer a dual port SRAM with one input write data port and two
> >output read data ports. Ideally I'd like describe this abstractly
> >enough so that the code will generate the correct hardware for my
> >prototype FPGA platform (xilinx Spartan 3) and also when using an ASIC
> >library (memory to be inferred via Synopsys Designware).

>
> I haven't used Designware recently but I'd be very surprised if they
> added memory inferring to its features. In ASICs one needs to run a
> memory compiler which is specific to each process and it's supplied by
> the library vendor (or another third party memory IP vendor). So you
> probably will have to run a memory compiler get a model and
> instantiate that model in your design. If so it makes more sense to do
> the same for the FPGA flow too.


aha :-( thanks for clearing that up.



All times are GMT +1. The time now is 01:57 PM.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright 2008 @ FPGA Central. All rights reserved