реклама на сайте
подробности

 
 
> Nios II обращение к внешней памяти как к массиву
Dootch
сообщение Aug 29 2015, 02:12
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 12-02-10
Из: Хабаровск
Пользователь №: 55 441



Доброго времени суток.
В процессе работы возник следующий вопрос:
В квартусе создаю Simple Dual-Port RAM (dual clock), прямо из темплейта.

CODE
-- Quartus II VHDL Template
-- Simple Dual-Port RAM with different read/write addresses and
-- different read/write clock

library ieee;
use ieee.std_logic_1164.all;

entity simple_dual_port_ram_dual_clock is

generic
(
DATA_WIDTH : natural := 32;
ADDR_WIDTH : natural := 6
);

port
(
rclk : in std_logic;
wclk : in std_logic;
raddr : in natural range 0 to 2**ADDR_WIDTH - 1;
waddr : in natural range 0 to 2**ADDR_WIDTH - 1;
data : in std_logic_vector((DATA_WIDTH-1) downto 0);
we : in std_logic := '1';
q : out std_logic_vector((DATA_WIDTH -1) downto 0)
);

end simple_dual_port_ram_dual_clock;

architecture rtl of simple_dual_port_ram_dual_clock is

-- Build a 2-D array type for the RAM
subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0);
type memory_t is array(2**ADDR_WIDTH-1 downto 0) of word_t;

-- Declare the RAM signal.
signal ram : memory_t;

begin

process(wclk)
begin
if(rising_edge(wclk)) then
if(we = '1') then
ram(waddr) <= data;
end if;
end if;
end process;

process(rclk)
begin
if(rising_edge(rclk)) then
q <= ram(raddr);
end if;
end process;

end rtl;


Запись в память производит отдельный автомат со своим клоком.
Есть ли возможность подключить память к процессору таким образом, чтобы объявить ее обычным const unsigned int ARRAY[2**ADDR_WIDTH - 1] и читать из нее как из обычного массива?
Моя цель - это отдельный сбор данных с АЦП в память в хардваре, и отдельная асинхронная математическая обработка этих же данных в софтваре.

Сообщение отредактировал Dootch - Aug 29 2015, 02:23
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Aug 29 2015, 03:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
В квартусе создаю Simple Dual-Port RAM (dual clock), прямо из темплейта.

как показала практика фигово он это создает, лучше явно через мегафункцию описать....

Цитата
Есть ли возможность подключить память к процессору таким образом, чтобы объявить ее обычным const unsigned int ARRAY[2**ADDR_WIDTH - 1] и читать из нее как из обычного массива?

можно. Надо 1 подключить эту память к шине через подходящий переходник (это должен быть готовый модуль).
Переходник выделит вашей памяти адресное пространство и дальше у вас 2 пути
1. это создать указатель unsigned int *MyPointer = MEM_ADDR; и обращаться в память через MyPointer[i] = 10 или *MyPointer = 10; *(MyPointer + i) = 10;
2. это создать переменную массив, и договориться с линкером чтобы он ее разместил точно в этой памяти, тогда будет точно ваш вариант const unsigned int ARRAY[2**ADDR_WIDTH - 1], как в ниосе договариваться с линкером надо читать.... но это уже нюансы.

То есть основная ваша задача это через переходник подключить память к шине и выдать ей адресное пространство.

Но по мне это надо делать со стороны НИОСА, то есть делать модуль памяти для него через встроенный IP core генератор (или как там он у квартуса называется), а уж потом к нему цеплятся периферией, может даже через еще какие то стандартные блоки...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016