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

DUAL PORT BRAM & Virtex2Pro

Вопрос: Хочу брам двухпортовую

Порт А : 1024х32

Порт В : 4096х8

Хочу на порт В на каждый байт свой WriteEnable.

Одним местом чую что не получится.... Хелп.

Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь.

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


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

Вопрос: Хочу брам двухпортовую

Порт А : 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, можно сделать им все что душа пожелает :) .

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


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

Что-то у Вас не срастается... наверное Вам нужен побайтный WE по порту A (1024x32) - если я Вас не так понял, то уточните задачу.

 

В такой ситуации можно сделать перед RAMB16 входной мультиплексор (побайтный): либо в этот байт пишется его старое значение, либо новое (но если я не ошибаюсь, при этом надо будет сконфигурировать BRAM на "Read First" - а как это будет сочетаться с вашим поектом я не знаю). Получается на один RAMB16 два независимых мультиплексора (попробуйте, возможно MUX собранный на BUTF Вам подочдет больше, чем MUX собранный на LUT).

 

Такое решение я применял на Virtex-E - работало, но замерно уменьшало быстродействиет (от максимально возможного).

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


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

А вообще в CORE Generator есть Block Memory Generator, можно сделать им все что душа пожелает :) .

Абсолютно с Вами согласен

 

Вопрос: Хочу брам двухпортовую

Порт А : 1024х32

Порт В : 4096х8

Хочу на порт В на каждый байт свой WriteEnable.

Одним местом чую что не получится.... Хелп.

Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь.

 

Сгенеренная в CoreGenerator блочная память по ресурсам занимает 2 блока и на порту В на каждый байт имеется свой WriteEnable. Как раз то,что Вам и нужно.

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


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

А вообще в CORE Generator есть Block Memory Generator, можно сделать им все что душа пожелает :) .

Абсолютно с Вами согласен

 

Вопрос: Хочу брам двухпортовую

Порт А : 1024х32

Порт В : 4096х8

Хочу на порт В на каждый байт свой WriteEnable.

Одним местом чую что не получится.... Хелп.

Так как тут 2 брама используется. Вот если бы 4 брама - то мона было бы исхитриться. Но не могу себе позволить такую роскошь.

 

Сгенеренная в CoreGenerator блочная память по ресурсам занимает 2 блока и на порту В на каждый байт имеется свой WriteEnable. Как раз то,что Вам и нужно.

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


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

А вот если в предложенном 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 - это хорошо и главное быстро... но он далеко не всегда дает хорошие решения.

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


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

Что-то у Вас не срастается... наверное Вам нужен побайтный 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 про?

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


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

For YuP: CoreGen - это хорошо и главное быстро... но он далеко не всегда дает хорошие решения.

Пожалуй соглашусь с Вами,ведь все корки,в конечном счете разрабатывае человек и даже разработчики ядер не скрывают своих проблем(в описаниях корок есть разделы KNOWN ISSUES,которые говорят сами за себя)но бывают моменты,когда CoreGenerator может послужить и хорошую службу.

 

Че то вы мой вопрос не поняли наверно

 

per_aspera_ad_astra и я отвечали на поставленный Ваш вопрос. То,что Boris_TS "раскусил" Вас,говорит о том,что он обладает бОльшим опытом в данном вопросе или экстрасенсорными способностями :)

На будущее ставьте вопросы корректнее.Будет проще отвечать :beer:

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


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

Запустите 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 такт - может это Вас устроит. А хороших решений боюсь нет.

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


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

Пожалуй соглашусь с Вами,ведь все корки,в конечном счете разрабатывае человек и даже разработчики ядер не скрывают своих проблем(в описаниях корок есть разделы KNOWN ISSUES,которые говорят сами за себя)но бывают моменты,когда CoreGenerator может послужить и хорошую службу.

per_aspera_ad_astra и я отвечали на поставленный Ваш вопрос. То,что Boris_TS "раскусил" Вас,говорит о том,что он обладает бОльшим опытом в данном вопросе или экстрасенсорными способностями :)

На будущее ставьте вопросы корректнее.Будет проще отвечать :beer:

 

:) Ну да...тока заметил-описька вышла...Хотел написать-на порт А хочу на каждый байт свой врайтенабле

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


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

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

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

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

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

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

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

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

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

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