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

 
 
> 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
Ответов
Dootch
сообщение Feb 16 2017, 07:05
Сообщение #2


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

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



Спустя 2 года опять вернулся к вопросу.

Собрал процессор. Помимо on_chip memory для данных и кода добавил еще один модуль test_onchip на 4096 байт с параметрами, приведенными на картинке.


В получившемся модуле имеется 2 Avalon MM Slave интерфейса, 2 клока и 2 резета.

Один интерфейс я подключаю к CPU, второй экспортирую.

Таким образом, собранный процессор содержит следующие порты:

test_onchip_s2_address : in std_logic_vector(11 downto 0); -- address
test_onchip_s2_chipselect : in std_logic; -- chipselect
test_onchip_s2_clken : in std_logic; -- clken
test_onchip_s2_write : in std_logic; -- write
test_onchip_s2_readdata : out std_logic_vector(7 downto 0); -- readdata
test_onchip_s2_writedata : in std_logic_vector(7 downto 0); -- writedata
test_onchip_clk2_clk : in std_logic; -- clk
test_onchip_reset2_reset : in std_logic; -- reset
test_onchip_reset2_reset_req : in std_logic; -- reset_req

Правильно ли я понимаю, если теперь какой-либо мой аппаратный модуль запишет данные по адресу от 0 до 4095 через экспортированный интерфейс, то в коде процессора я смогу к ним обращаться как к переменной?





Go to the top of the page
 
+Quote Post



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

 


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


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