Jump to content

    
Sign in to follow this  
Amper25

Как в квартусе прицепить RAM к своему блоку.

Recommended Posts

Раньше во всех проектах всю логику писал на VHDL, потом делал блок по VHDL файлу и к этому блоку в схемном

редакторе подключал проводами RAM.

 

Но вот захотелось написать все в виде одного VHDL файла, чтобы потом легче портировалось. А как описать блок

RAM и потом подключить его к VHDL файлу в текстовом виде незнаю.

Share this post


Link to post
Share on other sites

Такой подход понятен, но как указать ему, что "array() of std_logic_vector" надо на кристале потом разместить в RAM блоках а не реализовать в виде логики?

8192x32 как то не очень хорошо реализуются с помощью D-тригеров.

Share this post


Link to post
Share on other sites
Такой подход понятен, но как указать ему, что "array() of std_logic_vector" надо на кристале потом разместить в RAM блоках а не реализовать в виде логики?

Запустите мегавизард, и сформируйте в нем нужное Вам ОЗУ (например, на основе altsyncram).

Опишите это ОЗУ в вашем исходнике как компонент.

 

library ieee;
use ieee.std_logic_1164.all;

entity nano_cisc8 is
port( clk	  : in  std_logic;						 -- Clock
  rst	  : in  std_logic;						 -- Active-low Reset

  outdata  : out std_logic_vector(7 downto 0);
  outaddress : out std_logic_vector(11 downto 0)
);
end nano_cisc8;

architecture behaviour of nano_cisc8 is

 component altram32x12				 -- Single-Port Edge-Triggered 32 12-bit words RAM
 port( address : in  std_logic_vector(4 downto 0);	 -- Address
	clock   : in  std_logic;						-- Write Clock
	data	: in  std_logic_vector(11 downto 0);	-- Synchronous Input
	wren	: in  std_logic;						-- Write Enable
	q	   : out std_logic_vector(11 downto 0)	 -- Asynchronous Output
  );
 end component;

signal sp		: std_logic_vector(4 downto 0);		  -- Stack Pointer.
signal stack_in  : std_logic_vector(11 downto 0);		 -- Stack Data Input.
signal stack_we  : std_logic;							 -- Stack Write Enable.
signal stack_out : std_logic_vector(11 downto 0);		 -- Stack Data Output.

begin
 -- Stack: RAM 32x12.
stack:	altram32x12 port map( address => sp,
						  clock   => clk,
						  data	=> stack_in,
						  wren	=> stack_we,
						  q	   => stack_out
						);								
.........

 

При компиляции сперва компилируете файл, созданный мегавизардом, потом Ваш исходник.

Share this post


Link to post
Share on other sites
Такой подход понятен, но как указать ему, что "array() of std_logic_vector" надо на кристале потом разместить в RAM блоках а не реализовать в виде логики?

8192x32 как то не очень хорошо реализуются с помощью D-тригеров.

В доках на синтезатор есть примеры описания разных устройств.

Share this post


Link to post
Share on other sites

Понтяно.

А, вообще, есть ли в VHDL(без привязки к мегафункциям quartus-а) какой нибудь тип или класс, с помощью которого можно реализовать двупортовую память размером 1024х32 с разными клоками на чтение и запись?(+ защелки на чтение и запись)

 

Или просто можно сделать так:

-------------------------------------------

type RamBlock is array(0 to 1023) of std_logic_vector(31 downto 0);

signal RAM : RamBlock;

signal WR_ADDR: integer range 0 to 1023;

signal WR_DATA: std_logic_vector(31 downto 0);

signal WR_EN: std_logic;

signal RD_ADDR: integer range 0 to 1023;

signal RD_DATA: std_logic_vector(31 downto 0);

 

if ((WR_CLK'event) and (WR_CLK='1')) then

if (WR_EN='1') then RAM(WR_ADDR) <= WR_DATA; end if;

end if;

 

if ((RD_CLK'event) and (RD_CLK='1')) then

RD_DATA <= RAM(RD_ADDR);

end if;

--------------------------------------------

 

И если сделать так, то разместит он в блоках RAM это или нет?

 

И еще вопрос по защелкам WR_ADDR, WR_DATA ...

С CycloneIII были проблемы, компиллер ругается что нельзя делать блоки RAM без защелкивания адреса и данных.(асинхронный вариант)

Хотя для Acex1K можно было.

Share this post


Link to post
Share on other sites
Пробовал компилить array of std_logic_vector, помещает в логические ячейки а не в RAM.

Что делать?

Телепаты в отпуске. Пока вы не покажете свой код, вам не помогут.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this