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

 
 
> 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
 
Start new topic
Ответов
jks
сообщение Nov 21 2015, 12:13
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 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

Сообщений в этой теме


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

 


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


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