Rok 0 6 апреля, 2006 Опубликовано 6 апреля, 2006 · Жалоба Захотелось мне использовать Data2Mem (Data2Bram) утилиту. Так вот там есть такая штуковина, как BMM file. Нашел там в доках по его структуре инфу, но как-то там все мрачно. Существует ли такая возможность, чтобы сгенерить этот файл автоматически, а то руками его писать замучаюсь. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rok 0 13 апреля, 2006 Опубликовано 13 апреля, 2006 · Жалоба Захотелось мне использовать Data2Mem (Data2Bram) утилиту. Так вот там есть такая штуковина, как BMM file. Нашел там в доках по его структуре инфу, но как-то там все мрачно. Существует ли такая возможность, чтобы сгенерить этот файл автоматически, а то руками его писать замучаюсь. Спасибо. Сам себе и отвечу в общем читаем datasheet data2mem.pdf А так в двух словах: Есть блоки памяти и их нужно инициализировать. Использовать атрибут LOC не обязательно, но желательно. Непосредственно запись в память осущ. след. образом: сразу заполняеся 1-й bus block, затем 2-й и т.д. по очереди. Исходным файлом данных (то, что хочем записать) является .mem или .elf. Ну и само расположение BRAM в .bmm файле зависит от того, что нужно именно нам. Спасибо за внимание B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad-man 0 6 ноября, 2006 Опубликовано 6 ноября, 2006 · Жалоба описание то я почитал :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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 6 ноября, 2006 Опубликовано 6 ноября, 2006 · Жалоба описание то я почитал :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 файл не создается на основании непосредственно исходников проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad-man 0 7 ноября, 2006 Опубликовано 7 ноября, 2006 (изменено) · Жалоба Как это и где это он создается? 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 Изменено 7 ноября, 2006 пользователем Mad-man Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 232 8 ноября, 2006 Опубликовано 8 ноября, 2006 · Жалоба Пример: http://home.mnet-online.de/al/BRAM_Bitstreams.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad-man 0 9 ноября, 2006 Опубликовано 9 ноября, 2006 · Жалоба да макс, это я уже видел :) я кажется перечитал все что есть в интернете по BMM :maniac: сделал, собирается, но в созданом BMM файле LOCи для примитивов не прописываются... не знаю пока будет ли работать, т.к. память выдает нолики повсюду (SRVAL не ноль однозначно) проинициализирована INITами, вобшем добью это скоро... :maniac: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad-man 0 9 ноября, 2006 Опубликовано 9 ноября, 2006 · Жалоба в общем заработало :a14: только это обман, что srec генерит данный в формате MEM, при обновлении битстрима data2mem просто втихую выходной файл не создает :angry2: при доработке его руками данные искажаются. у меня RAMB16_S36 с которым идет еще и 4 бита четности, возможно что то куда-то сдвигается :cranky: , разбираюсь :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться