|
In-System Memory Content Editor, Как быть с 2-х портовыми RAM или ROM... |
|
|
|
Nov 20 2015, 08:33
|
Знающий
   
Группа: Свой
Сообщений: 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-х портовой памятью?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Nov 20 2015, 09:43
|

Лентяй
     
Группа: Свой
Сообщений: 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.
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Nov 20 2015, 10:25
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(Stewart Little @ Nov 20 2015, 12:43)  Никак, увы. Спасибо, понял. Получается, что будет нужен свой загрузчик памяти, типа внутрисистемного программатора как в микроконтроллерах.
|
|
|
|
|
Nov 20 2015, 11:42
|
Знающий
   
Группа: Свой
Сообщений: 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, то это бы упростило задачу...
|
|
|
|
|
Nov 20 2015, 13:41
|

Лентяй
     
Группа: Свой
Сообщений: 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).
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Nov 20 2015, 15:34
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(Serhiy_UA @ Nov 20 2015, 11:33)  1. А как быть, если оба порта памяти в проекте уже заняты, а хотелось бы иметь ISMCE? Как-то раз мне такое потребовалось. Сделал вторую однопортовую память, подключил к ней этот ISMCE, завёл на неё те сигналы которые заводил на один из портов двухпортовой, таким образом пишет одновременно в обе, а смотрим мы в однопортовую. Не всегда это применимо, но всё же.
|
|
|
|
|
Nov 20 2015, 18:46
|
Знающий
   
Группа: Свой
Сообщений: 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-х и более портовая, если использовать Вашу систему команд... Пока испробую то, что предложено. Порт загрузки пока отложу на последнюю очередь, вариантов уже много...
|
|
|
|
|
Nov 20 2015, 21:21
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(Serhiy_UA @ Nov 20 2015, 21:46)  А загрузки тогда надо делать по очереди, сначала в одну память, а потом в другую, хотя это в общем и не долго... Да нет же, одними и теми же сигналами сразу в обе.
|
|
|
|
|
Nov 21 2015, 12:13
|
Местный
  
Группа: Свой
Сообщений: 249
Регистрация: 3-04-11
Из: .
Пользователь №: 64 084

|
Если второй порт в ISMCE нужен только для загрузки, то может имеет смысл поставить мультиплексор по входу и по выходу?
При работе с ISMCE по сигналу debug переключать второй порт на ISMCE. Если кого заинтересует примерный код.
dualport_mod_ram.zip ( 1.75 килобайт )
Кол-во скачиваний: 34
|
|
|
|
|
Nov 21 2015, 21:04
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(jks @ Nov 21 2015, 16:13)  Если второй порт в ISMCE нужен только для загрузки, то может имеет смысл поставить мультиплексор по входу и по выходу? При работе с ISMCE по сигналу debug переключать второй порт на ISMCE. Предложение интересное, но уточните, как формируется ismce component, мне пока не удалось это сделать. Где-то же он должен быть, или там какая-то многоходовка...
|
|
|
|
|
Nov 22 2015, 16:13
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 23 2015, 07:20
|
Знающий
   
Группа: Свой
Сообщений: 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).
|
|
|
|
|
Nov 23 2015, 07:32
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|