Перейти к содержанию
    

BMM файл (data2mem)

Захотелось мне использовать Data2Mem (Data2Bram) утилиту.

Так вот там есть такая штуковина, как BMM file.

Нашел там в доках по его структуре инфу, но как-то там все мрачно.

Существует ли такая возможность, чтобы сгенерить этот файл автоматически,

а то руками его писать замучаюсь.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Захотелось мне использовать Data2Mem (Data2Bram) утилиту.

Так вот там есть такая штуковина, как BMM file.

Нашел там в доках по его структуре инфу, но как-то там все мрачно.

Существует ли такая возможность, чтобы сгенерить этот файл автоматически,

а то руками его писать замучаюсь.

Спасибо.

Сам себе и отвечу :biggrin:

в общем читаем datasheet data2mem.pdf

А так в двух словах:

Есть блоки памяти и их нужно инициализировать.

Использовать атрибут LOC не обязательно, но желательно.

Непосредственно запись в память осущ. след. образом: сразу заполняеся 1-й bus block, затем 2-й и т.д. по очереди. Исходным файлом данных (то, что хочем записать) является .mem или .elf.

Ну и само расположение BRAM в .bmm файле зависит от того, что нужно именно нам.

 

Спасибо за внимание B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

описание то я почитал :cranky: только толку от него немного....

 

итого создал bmm файл

 

ADDRESS_BLOCK ram_cntlr RAMB4 [0x00000000:0x00000FFF]

BUS_BLOCK

top/ram_cntlr/ram7 [63:56]; // LOC = R3C5;

top/ram_cntlr/ram6 [55:48]; // LOC = R3C6;

top/ram_cntlr/ram5 [47:40]; // LOC = R3C7;

top/ram_cntlr/ram4 [39:32]; // LOC = R3C8;

top/ram_cntlr/ram3 [31:24]; // LOC = R4C5;

top/ram_cntlr/ram2 [23:16]; // LOC = R4C6;

top/ram_cntlr/ram1 [15:8]; // LOC = R4C7;

top/ram_cntlr/ram0 [7:0]; // LOC = R4C8;

END_BUS_BLOCK;

 

END_ADDRESS_BLOCK;

 

а дальше что?

видимо нужно создать инстансы top/ram_cntlr/ram0.... в которых используется блочная память или собственно является блочной памятью - как? :cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

описание то я почитал :cranky: только толку от него немного....

 

итого создал bmm файл

 

ADDRESS_BLOCK ram_cntlr RAMB4 [0x00000000:0x00000FFF]

BUS_BLOCK

top/ram_cntlr/ram7 [63:56]; // LOC = R3C5;

top/ram_cntlr/ram6 [55:48]; // LOC = R3C6;

top/ram_cntlr/ram5 [47:40]; // LOC = R3C7;

top/ram_cntlr/ram4 [39:32]; // LOC = R3C8;

top/ram_cntlr/ram3 [31:24]; // LOC = R4C5;

top/ram_cntlr/ram2 [23:16]; // LOC = R4C6;

top/ram_cntlr/ram1 [15:8]; // LOC = R4C7;

top/ram_cntlr/ram0 [7:0]; // LOC = R4C8;

END_BUS_BLOCK;

 

END_ADDRESS_BLOCK;

 

а дальше что?

видимо нужно создать инстансы top/ram_cntlr/ram0.... в которых используется блочная память или собственно является блочной памятью - как? :cranky:

 

.bmm файл создается обычно уже на основе просинтезированного ( или даже откомпилированного и размещенного проекта ISE). Собственно там выясняются точные иерархические имена "инстансов" блоков памяти, и эти имена заносятся в .bmm файл. При этом совсем не обязательно указывать привязку расположения блоков, достаточно только имена. Утилита автоматически создаст .bmm файл с привязкой под конкретную расположение/разводку кристалла (файл *_bd.bmm).

 

.bmm файл не создается на основании непосредственно исходников проекта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как это и где это он создается?

 

 

1. У меня есть либо модуль с кучей примитивов bram без bmm или от bmm от которых ise отплевывается. :maniac:

 

2. Либо есть отдельный bmm, но как восстановить модуль я не знаю

 

3. Либо есть модули Distributed Memory 7.1, Distributed Memory Generator 1.1, Single Port Block Memory 6.2 с неявным использованием примитивов, для них bmm не генерится.

 

 

:cranky:

 

как создать bmm для любого модуля сгенериного коркиген

например для

 

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

-- synopsys translate_off

Library XilinxCoreLib;

-- synopsys translate_on

ENTITY dist_mem_gen_v1_1 IS

port (

a: IN std_logic_VECTOR(5 downto 0);

d: IN std_logic_VECTOR(15 downto 0);

clk: IN std_logic;

we: IN std_logic;

spo: OUT std_logic_VECTOR(15 downto 0));

END dist_mem_gen_v1_1;

 

ARCHITECTURE dist_mem_gen_v1_1_a OF dist_mem_gen_v1_1 IS

-- synopsys translate_off

component wrapped_dist_mem_gen_v1_1

port (

a: IN std_logic_VECTOR(5 downto 0);

d: IN std_logic_VECTOR(15 downto 0);

clk: IN std_logic;

we: IN std_logic;

spo: OUT std_logic_VECTOR(15 downto 0));

end component;

 

-- Configuration specification

for all : wrapped_dist_mem_gen_v1_1 use entity XilinxCoreLib.dist_mem_gen_v1_1(behavioral)

generic map(

c_has_clk => 1,

c_has_qdpo_clk => 0,

c_has_qdpo_ce => 0,

c_has_d => 1,

c_has_spo => 1,

c_read_mif => 0,

c_has_qspo => 0,

c_width => 16,

c_reg_a_d_inputs => 0,

c_has_we => 1,

c_has_qdpo_rst => 0,

c_reg_dpra_input => 0,

c_qualify_we => 0,

c_sync_enable => 1,

c_depth => 64,

c_has_qspo_srst => 0,

c_has_qdpo_srst => 0,

c_has_dpra => 0,

c_qce_joined => 0,

c_mem_type => 1,

c_has_i_ce => 0,

c_has_dpo => 0,

c_mem_init_file => "no_coe_file_loaded",

c_default_data => "0",

c_has_spra => 0,

c_has_qspo_ce => 0,

c_addr_width => 6,

c_has_qdpo => 0,

c_has_qspo_rst => 0);

-- synopsys translate_on

BEGIN

-- synopsys translate_off

U0 : wrapped_dist_mem_gen_v1_1

port map (

a => a,

d => d,

clk => clk,

we => we,

spo => spo);

-- synopsys translate_on

 

END dist_mem_gen_v1_1_a;

 

 

обьясните чайнику как с наименьшим гемором создать модуль с блочной памятью (с использованием коркиген или модуля который можно расширить копипастом:) .....ммммм.....для верилога) и bmm, по которой можно будет обновлять битстрим data2mem

Изменено пользователем Mad-man

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да макс, это я уже видел :)

я кажется перечитал все что есть в интернете по BMM :maniac:

сделал, собирается, но в созданом BMM файле LOCи для примитивов не прописываются...

не знаю пока будет ли работать, т.к. память выдает нолики повсюду (SRVAL не ноль однозначно) проинициализирована INITами, вобшем добью это скоро... :maniac:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в общем заработало :a14:

 

только это обман, что srec генерит данный в формате MEM,

при обновлении битстрима data2mem просто втихую выходной файл не создает :angry2:

при доработке его руками данные искажаются. у меня RAMB16_S36 с которым идет еще и 4 бита четности, возможно что то куда-то сдвигается :cranky: , разбираюсь :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...