axalay 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Вопрос: Хочу брам двухпортовую Порт А : 1024х32 Порт В : 4096х8 Хочу на порт В на каждый байт свой WriteEnable. Одним местом чую что не получится.... Хелп. Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
per_aspera_ad_astra 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Вопрос: Хочу брам двухпортовую Порт А : 1024х32 Порт В : 4096х8 Хочу на порт В на каждый байт свой WriteEnable. Одним местом чую что не получится.... Хелп. Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь. А кто такой брам? Если имелось в виду RAMB, то можно сделать к примеру так: RAMB16_S4_S18_loop : for i in 0 to 1 generate RAMB16_S4_S18_inst : RAMB16_S4_S18 port map ( DOA => DOA(i*4 + 3 downto i*4), -- Port A 4-bit Data Output DOB => DOB(i*16 + 15 downto i*16), -- Port B 16-bit Data Output DOPB => open, -- Port B 2-bit Parity Output ADDRA => ADDRA, -- Port A 12-bit Address Input ADDRB => ADDRB, -- Port B 10-bit Address Input CLKA => CLKA, -- Port A Clock CLKB => CLKB, -- Port B Clock DIA => DIA(i*4 + 3 downto i*4), -- Port A 4-bit Data Input DIB => DIB(i*16 + 15 downto i*16), -- Port B 16-bit Data Input DIPB => "00", -- Port-B 2-bit parity Input ENA => ENA, -- Port A RAM Enable Input ENB => ENB, -- PortB RAM Enable Input SSRA => SSRA, -- Port A Synchronous Set/Reset Input SSRB => SSRB, -- Port B Synchronous Set/Reset Input WEA => WEA, -- Port A Write Enable Input WEB => WEB -- Port B Write Enable Input ); end generate; DIA и DOA теперь 8 разрядные а DIB и DOB - 32-х. Я думаю не существенно какой порт какой, поскольку они в данном случае равнозначны!? А вообще в CORE Generator есть Block Memory Generator, можно сделать им все что душа пожелает :) . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Что-то у Вас не срастается... наверное Вам нужен побайтный WE по порту A (1024x32) - если я Вас не так понял, то уточните задачу. В такой ситуации можно сделать перед RAMB16 входной мультиплексор (побайтный): либо в этот байт пишется его старое значение, либо новое (но если я не ошибаюсь, при этом надо будет сконфигурировать BRAM на "Read First" - а как это будет сочетаться с вашим поектом я не знаю). Получается на один RAMB16 два независимых мультиплексора (попробуйте, возможно MUX собранный на BUTF Вам подочдет больше, чем MUX собранный на LUT). Такое решение я применял на Virtex-E - работало, но замерно уменьшало быстродействиет (от максимально возможного). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuP 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба А вообще в CORE Generator есть Block Memory Generator, можно сделать им все что душа пожелает :) . Абсолютно с Вами согласен Вопрос: Хочу брам двухпортовую Порт А : 1024х32 Порт В : 4096х8 Хочу на порт В на каждый байт свой WriteEnable. Одним местом чую что не получится.... Хелп. Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь. Сгенеренная в CoreGenerator блочная память по ресурсам занимает 2 блока и на порту В на каждый байт имеется свой WriteEnable. Как раз то,что Вам и нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuP 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба А вообще в CORE Generator есть Block Memory Generator, можно сделать им все что душа пожелает :) . Абсолютно с Вами согласен Вопрос: Хочу брам двухпортовую Порт А : 1024х32 Порт В : 4096х8 Хочу на порт В на каждый байт свой WriteEnable. Одним местом чую что не получится.... Хелп. Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь. Сгенеренная в CoreGenerator блочная память по ресурсам занимает 2 блока и на порту В на каждый байт имеется свой WriteEnable. Как раз то,что Вам и нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба А вот если в предложенном per_aspera_ad_astra коде прикоментировать строчечку DIPB => "00", то можно выиграть от 1 до 4 LUT превращенных в генератор 0, и тем самым заметно облегчить работу PAR... XST/MAP/PAR от ISE 9.x этот фокус прекрасно понимают (пользуюсь этим с ISE 8.x). RAMB16_S4_S18_loop : for i in 0 to 1 generate RAMB16_S4_S18_inst : RAMB16_S4_S18 port map ( DOA => DOA(i*4 + 3 downto i*4), -- Port A 4-bit Data Output DOB => DOB(i*16 + 15 downto i*16), -- Port B 16-bit Data Output DOPB => open, -- Port B 2-bit Parity Output ADDRA => ADDRA, -- Port A 12-bit Address Input ADDRB => ADDRB, -- Port B 10-bit Address Input CLKA => CLKA, -- Port A Clock CLKB => CLKB, -- Port B Clock DIA => DIA(i*4 + 3 downto i*4), -- Port A 4-bit Data Input DIB => DIB(i*16 + 15 downto i*16), -- Port B 16-bit Data Input -- DIPB => "00", -- Port-B 2-bit parity Input ENA => ENA, -- Port A RAM Enable Input ENB => ENB, -- PortB RAM Enable Input SSRA => SSRA, -- Port A Synchronous Set/Reset Input SSRB => SSRB, -- Port B Synchronous Set/Reset Input WEA => WEA, -- Port A Write Enable Input WEB => WEB -- Port B Write Enable Input ); end generate; For YuP: CoreGen - это хорошо и главное быстро... но он далеко не всегда дает хорошие решения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axalay 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Что-то у Вас не срастается... наверное Вам нужен побайтный WE по порту A (1024x32) - если я Вас не так понял, то уточните задачу. В такой ситуации можно сделать перед RAMB16 входной мультиплексор (побайтный): либо в этот байт пишется его старое значение, либо новое (но если я не ошибаюсь, при этом надо будет сконфигурировать BRAM на "Read First" - а как это будет сочетаться с вашим поектом я не знаю). Получается на один RAMB16 два независимых мультиплексора (попробуйте, возможно MUX собранный на BUTF Вам подочдет больше, чем MUX собранный на LUT). Такое решение я применял на Virtex-E - работало, но замерно уменьшало быстродействиет (от максимально возможного). Ага-именно то мне и надо. а быстродействие я не могу уменьшить. Но никакие генераторы не сделали мне нужного Абсолютно с Вами согласен Сгенеренная в CoreGenerator блочная память по ресурсам занимает 2 блока и на порту В на каждый байт имеется свой WriteEnable. Как раз то,что Вам и нужно. Че то вы мой вопрос не поняли наверно. Да-мне без разницы на каком порту(они равнозначные) надо сделать следующее: 4 байта шина данных и на каждый байт свой врайтенабле. Так как такой обьем занимает 2 брама, то именно для виртекса2 про ни один из генераторов не сделал мне нужного. Для виртекса 4 все в порядке-генерит. Использую ISE версии 9.1 так как в едк 9.2 отсутствует потдержка виртекса2про. Вот такая вот засада. Решение то нашел -но это через одно место. Но все таки есть надежда что мона сделать все по людски А вообще в CORE Generator есть Block Memory Generator, можно сделать им все что душа пожелает . А вы попробуйте сгенерить то что мне надо. Мне по крайней мере не удалось в 9.1 И сразу кстати вопрос всем. У кого стоит 10-ая версия-посморите пожалуйста, есть ли в едк потдержка виртекса 2 про? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuP 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба For YuP: CoreGen - это хорошо и главное быстро... но он далеко не всегда дает хорошие решения. Пожалуй соглашусь с Вами,ведь все корки,в конечном счете разрабатывае человек и даже разработчики ядер не скрывают своих проблем(в описаниях корок есть разделы KNOWN ISSUES,которые говорят сами за себя)но бывают моменты,когда CoreGenerator может послужить и хорошую службу. Че то вы мой вопрос не поняли наверно per_aspera_ad_astra и я отвечали на поставленный Ваш вопрос. То,что Boris_TS "раскусил" Вас,говорит о том,что он обладает бОльшим опытом в данном вопросе или экстрасенсорными способностями :) На будущее ставьте вопросы корректнее.Будет проще отвечать :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Запустите FPGA Editor и поглядите внимательно в свой кристал: на один порт один WE - все, что рисует FPGA Editor - все есть и при большом желании можно использовать. А Virtex2pro - это не Virtex4 - чего в нем нет - того нет - тут уж извиняйте - никакая версия ISE не поможет. (Особо ловкие люди и в Virtex-E умудрялись использовать GCLKBUF - как буфер с OutputEnable ! (вот например сигнал Locked c DLL туда прекрасно заходит...) - хотя такого примитива нет... а в FPGA Editor все нарисованно "правильно"...) Сам пока не умею - кто может расскажите как это делать... а то много чего вкусного видно - а не дотянешься (вот например для PCI есть блочечек с dedicated routing resource - хотелось бы использовать самому, а не через покупную/воровенную IP core). Думаю по людски никак не выйдет, только через поганый MUX. Если надо увеличить МГц, поставьте за MUX (обязательно LUT'овым) триггеры, но этим Вы увеличите Latency на 1 такт - может это Вас устроит. А хороших решений боюсь нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axalay 0 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Пожалуй соглашусь с Вами,ведь все корки,в конечном счете разрабатывае человек и даже разработчики ядер не скрывают своих проблем(в описаниях корок есть разделы KNOWN ISSUES,которые говорят сами за себя)но бывают моменты,когда CoreGenerator может послужить и хорошую службу. per_aspera_ad_astra и я отвечали на поставленный Ваш вопрос. То,что Boris_TS "раскусил" Вас,говорит о том,что он обладает бОльшим опытом в данном вопросе или экстрасенсорными способностями :) На будущее ставьте вопросы корректнее.Будет проще отвечать :beer: :) Ну да...тока заметил-описька вышла...Хотел написать-на порт А хочу на каждый байт свой врайтенабле Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться