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: 
Participant mishra.pras
Participant
12,789 Views
Registered: ‎03-07-2011

Two dimensional array in VHDL

Dear users,

 

I want to implement a two dimensional array (memory) in VHDL, and want to access (read ) it through various components,  one of the components (both for reading and writing)is in verilog.

Can anyone suggest me a way to declare a module and its linkage to various components.

 

Pras

Pras
0 Kudos
11 Replies
Teacher rcingham
Teacher
12,787 Views
Registered: ‎09-09-2010

Re: Two dimensional array in VHDL

It would be easier to stick to one HDL if at all possible.

------------------------------------------
"If it don't work in simulation, it won't work on the board."
0 Kudos
Participant mishra.pras
Participant
12,782 Views
Registered: ‎03-07-2011

Re: Two dimensional array in VHDL

Ok.

But what is the procedure to access the memory (array) in the top file from other components?

Pras

Pras
0 Kudos
Teacher rcingham
Teacher
12,775 Views
Registered: ‎09-09-2010

Re: Two dimensional array in VHDL

I'm not sure what you are actually trying to do and in what context.

In VHDL you cannot access signals inside other architectures except via their entity's ports. Verilog is not so strict.

Assuming VHDL, you need to design access structures to enable you to write and read the memory array. Or you could use LogiCore to build you a memory component that has the ports and usage thereof defined.

Have you done digital design before?

------------------------------------------
"If it don't work in simulation, it won't work on the board."
0 Kudos
Highlighted
Scholar drjohnsmith
Scholar
12,771 Views
Registered: ‎07-09-2009

Re: Two dimensional array in VHDL

what is your experiance in vhdl ?

 

can you write a single vector module ?

 

<== If this was helpful, please feel free to give Kudos, and close if it answers your question ==>
Tags (1)
0 Kudos
Instructor
Instructor
12,767 Views
Registered: ‎08-14-2007

Re: Two dimensional array in VHDL

VHDL probably allows you to have two dimensional arrays in the component's ports.

Verilog does not allow multidimensional arrays in ports.

 

So the usual method is to define a two-dimensional array that behaves just like

distributed or block RAM (depending on how big it is and how it's used), possibly

multiported.  Then run the address and data ports (not the array itself) of the

RAM to the module ports.

 

It doesn't really matter whether the module containing the RAM is VHDL or Verilog.  The

important point is to have all of the behavioral code for memory access (the address

and data ports, and read and write processes) in the module where the memory

is defined.  You can get this from the language templates or the XST manual.

 

-- Gabor

-- Gabor
0 Kudos
Participant mishra.pras
Participant
12,759 Views
Registered: ‎03-07-2011

Re: Two dimensional array in VHDL

Dear users, I am new to FPGAs. I have made some programs in verilog. VHDL I am trying for the first time. My concern is how can we bring the memory to entity port? That too has to be used as input (many components) and output(for one comp, for writing purpose). In verilog I was able to access the memory simply as reg1<=memory[address]; that too inside a single module. I am confused how to bring this memory at port, there may be too many wires to connect to diff modules/entity. Again I can go for declare as many vectors/reg as memory elements, but the problem is same how to bring them all at the port? Please provide me a direction. Pras
Pras
0 Kudos
Teacher rcingham
Teacher
12,750 Views
Registered: ‎09-09-2010

Re: Two dimensional array in VHDL

If you have some experience in Verilog, why do you need/want to switch to VHDL? If you can do it in Verilog, do it in Verilog!

------------------------------------------
"If it don't work in simulation, it won't work on the board."
0 Kudos
Instructor
Instructor
12,745 Views
Registered: ‎08-14-2007

Re: Two dimensional array in VHDL

 


@mishra.pras wrote:
Dear users, I am new to FPGAs. I have made some programs in verilog. VHDL I am trying for the first time. My concern is how can we bring the memory to entity port? That too has to be used as input (many components) and output(for one comp, for writing purpose). In verilog I was able to access the memory simply as reg1<=memory[address]; that too inside a single module. I am confused how to bring this memory at port, there may be too many wires to connect to diff modules/entity. Again I can go for declare as many vectors/reg as memory elements, but the problem is same how to bring them all at the port? Please provide me a direction. Pras

 

This is really a hardware design issue, not a language issue.  If you don't want synthesis to

generate thousands of flip-flops to build your "memory" you need to abide by the rules of the

available memory structures (single or dual port, distributed or block RAM).  The memory itself

should always be contained within one module (or component).  That module needs to have

all of the direct access to the memory array as in reg1<=memory[address];  The ports

of the module are the ports of the memory (addr_a, addr_b, din_a, din_b, dout_a, dout_b ...)

not the memory array itself.

 

As I said in the earlier post, you can find VHDL (or Verilog) templates for inference of

all available memory types in the language templates as well as the XST user manual.

 

So the short answer of how to attach the memory array to module (component) ports is

don't do it.  While it is allowed in VHDL, you can't access it from Verilog, and the synthesis

tools will not infer memory, but rather tons of flip-flops.

 

-- Gabor

-- Gabor
0 Kudos
Participant mishra.pras
Participant
12,731 Views
Registered: ‎03-07-2011

Re: Two dimensional array in VHDL

Dear users,
I wrote a vhdl programme to write and read memory. I did it successfully.

Then I added this vhdl file as a component to another verilog program. I tried to acces theis vhdl component using address and data lines. But during synthesis it displayed error of multisourcing on the data signal. Though this data signal is output of the vhdl programme and is being used as an input only.

Is this problem due to the mixing of verilog and vhdl.
Pras
0 Kudos
Scholar drjohnsmith
Scholar
4,584 Views
Registered: ‎07-09-2009

Re: Two dimensional array in VHDL

Hi

 

I'm going to be blunt here,

   sorry

 

you are way off base. way way off base.

 

don't mix languages, that is true, but that is not the basic feature,

    it's that you are not experianced enough in vhdl / verilog,

        and you seem to be approaching a description language in the same way

            you would a stack process like C++.

 

you need to take step back me thinks,

 

 

<== If this was helpful, please feel free to give Kudos, and close if it answers your question ==>
0 Kudos
Xilinx Employee
Xilinx Employee
4,580 Views
Registered: ‎01-03-2008

Re: Two dimensional array in VHDL

> I wrote a vhdl programme to write and read memory. I did it successfully.

 

Actually, you created a VHDL design.  You are not creating "programs" you are creating a hardware design.

 

> Then I added this vhdl file as a component to another verilog program.

 

Actually, you added the VHDL design as a component or sub-module in another Verilog design.

 

> I tried to acces theis vhdl component using address and data lines.

 

You are creating hardware and not software, so you are not accessing the VHDL read/write memory design that you created earlier.  The Verilog design would be controlling the VHDL design by providing the necessary hardware signals for address, data and clock and in return using the data output in other parts of the Verilog design.

 

> But during synthesis it displayed error of multisourcing on the data signal. Though this data signal is

> output of the vhdl programme and is being used as an input only.

 

When the synthesizer reports that a net has multiple sources it means that you have two points in your HDL that are trying to change the state of the net.   You will need to re-examine your HDL source to determine where this occuring.

 

My guess is that this is occuring because you are trying to do something that is not practical in a real design.  Way back at the beginning of this thread you stated that you wanted to have a single two dimensional memory array that can be accessed from many places within the design.  This concept works with software running on a CPU, but you are not designing software you are designing hardware.  

 

The hardware that you are creating runs everything circuit at the same time time, while software runs each instruction sequentially.  If you have 10 modules that each want to read or write the memory array then that means that you need a 10 port memory.   Creating a 10 port memory is not practical in an FPGA, but can be done if needed.  You will need to create a memory module that has 10 ports each with address, data_in, data_out and read/write in order to do this. 

 

> Is this problem due to the mixing of verilog and vhdl.

 

No it is because your design is wrong.

------Have you tried typing your question into Google? If not you should before posting.
Too many results? Try adding site:www.xilinx.com