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

 
 
> In-System Memory Content Editor, Как быть с 2-х портовыми RAM или ROM...
Serhiy_UA
сообщение Nov 20 2015, 08:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



В qts_qii53012.pdf на стр.2 и 3 говорится, что In-System Memory Content Editor только для 1-но портовой памяти, а когда внедряется ISMCE, то вводится/открывается второй порт этой памяти, но уже под нужды ISMCE.
Вопросы такие:
1. А как быть, если оба порта памяти в проекте уже заняты, а хотелось бы иметь ISMCE?
2. Попутный вопрос, в оболочке для NiosII, при сменах/загрузках программ, как бы работает ISMCE. Получается, что там 2-х портовую память для программ не применяют?
3. Или есть обходные решения для функции ISMCE с 2-х портовой памятью?
Прикрепленные файлы
Прикрепленный файл  qts_qii53012.pdf ( 309.02 килобайт ) Кол-во скачиваний: 5
 
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 16)
Stewart Little
сообщение Nov 20 2015, 09:43
Сообщение #2


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Serhiy_UA @ Nov 20 2015, 11:33) *
1. А как быть, если оба порта памяти в проекте уже заняты, а хотелось бы иметь ISMCE?

Никак, увы.
Для того, чтобы подключится к блоку памяти, ISMCE нужен свободный порт.

Цитата(Serhiy_UA @ Nov 20 2015, 11:33) *
2. Попутный вопрос, в оболочке для NiosII, при сменах/загрузках программ, как бы работает ISMCE.

Насколько я помню, нет.
Содержимое памяти меняет авалоновский мастер, через тот же самый порт, каким блок памяти подключен к авалону.
И в настройках модуля ОЗУ есть специальная галка разрешить/запретить использовать второй порт - как раз для ISMCE.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Nov 20 2015, 10:25
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(Stewart Little @ Nov 20 2015, 12:43) *
Никак, увы.

Спасибо, понял.
Получается, что будет нужен свой загрузчик памяти, типа внутрисистемного программатора как в микроконтроллерах.
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Nov 20 2015, 10:59
Сообщение #4


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Serhiy_UA @ Nov 20 2015, 13:25) *
Получается, что будет нужен свой загрузчик памяти, типа внутрисистемного программатора как в микроконтроллерах.

Посмотрите в сторону System Console и JTAG to Avalon Master Bridge.

А какая вообще задача стоит?


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Nov 20 2015, 11:42
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(Stewart Little @ Nov 20 2015, 13:59) *
Посмотрите в сторону System Console и JTAG to Avalon Master Bridge.

А какая вообще задача стоит?

Avalon здесь уже не применить.
Задача учебно-прикладная, это создать свой малый 8-разрядный софт процессор и свою программную среду для него. Я уже здесь писал о нем, это miniByte-2, а теперь уже есть и работающий miniByte-3. Сейчас отладка его программ: через mif-файл и перекомпиляцию проекта с получением в итоге sof-файла. Так как память программ в нем 2-х портовая, то иначе чем через полную перекомпиляцию, эту программу в память пока не загрузить. In-System Memory Content Editor позволил бы это делать без перекомпиляции, но у него оказались ограничения...
Если бы знать как модифицировать sof-файл в части загрузки ROM/RAM, то это бы упростило задачу...
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Nov 20 2015, 13:41
Сообщение #6


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(Serhiy_UA @ Nov 20 2015, 14:42) *
... то иначе чем через полную перекомпиляцию, эту программу в память пока не загрузить. ...
Если бы знать как модифицировать sof-файл в части загрузки ROM/RAM, то это бы упростило задачу...

Полная перекомпиляция для этого не нужна. Для того, чтобы в sof'е блок памяти был проинициализирован новым mif'ом, достаточно в квартусе запускать только Assimbler.
Ну и для удобства, ИМХО, это было бы правильно делать в консольном режиме.
К примеру, если Ваша утилита формирует новый mif, то напишите bat-файл, в котором вслед за ней будет запускаться quartus_asm (см. http://wl.altera.com/literature/manual/TclScriptRefMnl.pdf, раздел Command-line Executables).


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
Jackov
сообщение Nov 20 2015, 15:34
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Serhiy_UA @ Nov 20 2015, 11:33) *
1. А как быть, если оба порта памяти в проекте уже заняты, а хотелось бы иметь ISMCE?

Как-то раз мне такое потребовалось.
Сделал вторую однопортовую память, подключил к ней этот ISMCE, завёл на неё те сигналы которые заводил на один из портов двухпортовой, таким образом пишет одновременно в обе, а смотрим мы в однопортовую.
Не всегда это применимо, но всё же.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 20 2015, 16:31
Сообщение #8


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Stewart Little @ Nov 20 2015, 20:41) *
Полная перекомпиляция для этого не нужна. Для того, чтобы в sof'е блок памяти был проинициализирован новым mif'ом, достаточно в квартусе запускать только Assimbler.

или режим smart-compilation поставить. будет тоже самое.


--------------------
Go to the top of the page
 
+Quote Post
Leka
сообщение Nov 20 2015, 17:28
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Serhiy_UA @ Nov 20 2015, 14:42) *
Задача учебно-прикладная, это создать свой малый 8-разрядный софт процессор и свою программную среду для него...

Советую переделать тогда, тк в исследованиях важна быстрая компиляция-загрузка-запуск, через uart это доли секунды. Еще вроде планировали многоядерную систему попробовать... Делайте сразу порт загрузки, в таких задачах это требование № 1.

Сообщение отредактировал Leka - Nov 20 2015, 17:29
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Nov 20 2015, 18:46
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(Jackov @ Nov 20 2015, 19:34) *
Как-то раз мне такое потребовалось.
Сделал вторую однопортовую память, подключил к ней этот ISMCE, завёл на неё те сигналы которые заводил на один из портов двухпортовой, таким образом пишет одновременно в обе, а смотрим мы в однопортовую.
Не всегда это применимо, но всё же.

Идея интересная. Только как я понял читая qts_qii53012.pdf, подключение ISMCE ко 2-му порту идет автоматически и как бы нам недоступно. А загрузки тогда надо делать по очереди, сначала в одну память, а потом в другую, хотя это в общем и не долго...
Просто получается, что таким методом, дублируя память, можно как бы увеличивать число портов доступа к ROM в произвольное число раз, т.е. пока хватает памяти в ПЛИС...

к Stewart Little и des00
Спасибо за подсказки, не знал о таких возможностях. Попробую разобраться...

к Leka
От 2-х портовой ROM отказываться не хотелось бы, в ней весь смысл. Здесь ведь еще напрашивается как бы и 3-х и более портовая, если использовать Вашу систему команд... Пока испробую то, что предложено. Порт загрузки пока отложу на последнюю очередь, вариантов уже много...
Go to the top of the page
 
+Quote Post
Leka
сообщение Nov 20 2015, 20:36
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Serhiy_UA @ Nov 20 2015, 21:46) *
От 2-х портовой ROM отказываться не хотелось бы

И не надо, у ROM порты записи получаются свободными (иначе это не ROM, а RAM), через них и загружать программу. Надо только в блоке программного счетчика предусмотреть принудительный сброс и инкремент, и по сигналу извне последовательно заполнять память.

Сообщение отредактировал Leka - Nov 20 2015, 20:38
Go to the top of the page
 
+Quote Post
Jackov
сообщение Nov 20 2015, 21:21
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Serhiy_UA @ Nov 20 2015, 21:46) *
А загрузки тогда надо делать по очереди, сначала в одну память, а потом в другую, хотя это в общем и не долго...

Да нет же, одними и теми же сигналами сразу в обе.
Прикрепленное изображение

Go to the top of the page
 
+Quote Post
jks
сообщение Nov 21 2015, 12:13
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084



Если второй порт в ISMCE нужен только для загрузки, то может имеет смысл поставить мультиплексор по входу и по выходу?

Прикрепленное изображение


При работе с ISMCE по сигналу debug переключать второй порт на ISMCE.



Если кого заинтересует примерный код.
Прикрепленный файл  dualport_mod_ram.zip ( 1.75 килобайт ) Кол-во скачиваний: 34
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Nov 21 2015, 21:04
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(jks @ Nov 21 2015, 16:13) *
Если второй порт в ISMCE нужен только для загрузки, то может имеет смысл поставить мультиплексор по входу и по выходу?
При работе с ISMCE по сигналу debug переключать второй порт на ISMCE.

Предложение интересное, но уточните, как формируется ismce component, мне пока не удалось это сделать. Где-то же он должен быть, или там какая-то многоходовка...

Go to the top of the page
 
+Quote Post
jks
сообщение Nov 22 2015, 16:13
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084



Цитата(Serhiy_UA @ Nov 22 2015, 00:04) *
Предложение интересное, но уточните, как формируется ismce component, мне пока не удалось это сделать. Где-то же он должен быть, или там какая-то многоходовка...

Компоненты блочной памяти в Quartus являются параметризованными мегафункциями.Генерация кода происходит через механизм CLEARBOX.
Если задан параметр ENABLE_RUNTIME_MOD=YES, то CLEARBOX создает обертку (wrapper) для компонента памяти и в нем дополнительно к компоненту altsyncram(ram_block) добавляет компонент sld_mod_ram_rom, который реализует функцию редактирования памяти в системе (ISMCE).
Есть два варианта.
1. Запустить clearbox с нужными параметрами и отредактировать полученный файл обертки.
Вывести наружу нужные порты и добавить необходимый функционал.
2. Написать свой модуль и добавить в него компонент sld_mod_ram_rom и нужный функционал.

Обертка создается вызовом clearbox с параметрами.
clearbox <mf_name> -f param_file_txt
mf_name - имя мегафункции или модуля clearbox (cbx_***)
param_file_txt - текстовый файл с параметрами для генерации
UPD: исправил ошибку в примере вызова clearbox.

param_file_txt:
CODE
CBX_FILE=sp_mod_ram.vhd
CBX_HDL_LANGUAGE=VHDL
CBX_SINGLE_OUTPUT_FILE=ON
CBX_STRUCTURAL_NETLIST=OFF
INSTANCE_NAME="ram"
OPERATION_MODE=SINGLE_PORT
ENABLE_RUNTIME_MOD=YES
DEVICE_FAMILY="Cyclone III"
WIDTH_A=8 WIDTHAD_A=8 USE_WYS=ON
address_a clock0 data_a q_a rden_a wren_a

Clearbox создает обертку на VHDL со следующим содержимым:
Но можно создать также на Verilog.
CODE
--synthesis_resources = M9K 1 sld_mod_ram_rom 1
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY sp_mod_ram IS
PORT
(
address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
clock0 : IN STD_LOGIC := '1';
data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0) := (OTHERS => '1');
q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
rden_a : IN STD_LOGIC := '1';
wren_a : IN STD_LOGIC := '0'
);
END sp_mod_ram;

ARCHITECTURE RTL OF sp_mod_ram IS

ATTRIBUTE synthesis_clearbox : natural;
ATTRIBUTE synthesis_clearbox OF RTL : ARCHITECTURE IS 1;
SIGNAL wire_altsyncram1_q_a : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL wire_altsyncram1_q_b : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL wire_mgl_prim2_address : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL wire_mgl_prim2_data_write : STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL wire_mgl_prim2_enable_write : STD_LOGIC;
SIGNAL wire_mgl_prim2_tck_usr : STD_LOGIC;
COMPONENT sp_mod_ram_altsyncram_fuj1
PORT
(
address_a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
address_b : IN STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '1');
clock0 : IN STD_LOGIC := '1';
clock1 : IN STD_LOGIC := '1';
data_a : IN STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '1');
data_b : IN STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '1');
q_a : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
q_b : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
rden_a : IN STD_LOGIC := '1';
wren_a : IN STD_LOGIC := '0';
wren_b : IN STD_LOGIC := '0'
);
END COMPONENT;
COMPONENT sld_mod_ram_rom
GENERIC
(
CVALUE : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
IS_DATA_IN_RAM : NATURAL;
IS_READABLE : NATURAL;
NODE_NAME : NATURAL;
NUMWORDS : NATURAL;
SHIFT_COUNT_BITS : NATURAL;
WIDTH_WORD : NATURAL;
WIDTHAD : NATURAL
);
PORT
(
address : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
data_read : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
data_write : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
enable_write : OUT STD_LOGIC;
tck_usr : OUT STD_LOGIC
);
END COMPONENT;
BEGIN

q_a <= wire_altsyncram1_q_a;
altsyncram1 : sp_mod_ram_altsyncram_fuj1
PORT MAP (
address_a => address_a,
address_b => wire_mgl_prim2_address,
clock0 => clock0,
clock1 => wire_mgl_prim2_tck_usr,
data_a => data_a,
data_b => wire_mgl_prim2_data_write,
q_a => wire_altsyncram1_q_a,
q_b => wire_altsyncram1_q_b,
rden_a => rden_a,
wren_a => wren_a,
wren_b => wire_mgl_prim2_enable_write
);
mgl_prim2 : sld_mod_ram_rom
GENERIC MAP (
CVALUE => "00000000",
IS_DATA_IN_RAM => 1,
IS_READABLE => 1,
NODE_NAME => 1918987520,
NUMWORDS => 256,
SHIFT_COUNT_BITS => 4,
WIDTH_WORD => 8,
WIDTHAD => 8
)
PORT MAP (
address => wire_mgl_prim2_address,
data_read => wire_altsyncram1_q_b,
data_write => wire_mgl_prim2_data_write,
enable_write => wire_mgl_prim2_enable_write,
tck_usr => wire_mgl_prim2_tck_usr
);

END RTL; --sp_mod_ram
--VALID FILE




Сообщение отредактировал jks - Nov 23 2015, 10:25
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Nov 23 2015, 07:20
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(jks @ Nov 22 2015, 19:13) *
Обертка создается вызовом clearbox с параметрами.
clearbox -f param_file_txt

jks, большое спасибо за ценную информацию! О таких возможностях QII не знал...
Запустил в командной строке clearbox -f param_file_txt (Ваш пример), но он выдает сообщение "Invalid argument Ignored param_file_txt.txt. Generator does not support current set of parameters".
У меня в QII 8.1, может из-за этого. Где узнать, что же он поддерживает и какие там должны быть параметры для компонента sld_mod_ram_rom...
Работаю на verilog и Stratix II (EP2S60F672C3).
Go to the top of the page
 
+Quote Post
jks
сообщение Nov 23 2015, 07:32
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084



Цитата(Serhiy_UA @ Nov 23 2015, 11:20) *
jks, большое спасибо за ценную информацию! О таких возможностях QII не знал...
Запустил в командной строке clearbox -f param_file_txt (Ваш пример), но он выдает сообщение "Invalid argument Ignored param_file_txt.txt. Generator does not support current set of parameters".
У меня в QII 8.1, может из-за этого. Где узнать, что же он поддерживает и какие там должны быть параметры для компонента sld_mod_ram_rom...
Работаю на verilog и Stratix II (EP2S60F672C3).


clearbox <mf_name> -f param_file_txt
mf_name - имя мегафункции или модуля clearbox (cbx_***)
UPD: исправил ошибку в примере вызова clearbox.

param_file_txt - это текстовый файл в котором указываются параметры и порты для генерации.
вызов clearbox без параметров выдаст справку по аргументам.
clearbox <megafunction_name> -extended_help выведет список всех параметров и портов для мегафункции.

Сообщение отредактировал jks - Nov 23 2015, 10:26
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 11:15
Рейтинг@Mail.ru


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