Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Dual-port & Two-porm RAM
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
RXgade
Необходима информация по реализации Dual-port и Two-porm RAM с НЕЗАВИСИМЫМИ тактовыми сигналами для чтения и записи данных (именно независимыми!!!) по всем канала.

Кто может дайте ссылки на статьи/книги где описаны ньюянсы реализации или реализации на HDL (бозотносительно технологии ПЛИС). спс
des00
Цитата(RXgade @ Feb 5 2012, 03:33) *
Необходима информация по реализации Dual-port и Two-porm RAM с НЕЗАВИСИМЫМИ тактовыми сигналами для чтения и записи данных (именно независимыми!!!) по всем канала.

Кто может дайте ссылки на статьи/книги где описаны ньюянсы реализации или реализации на HDL (бозотносительно технологии ПЛИС). спс

Любой хендбук на синтезатор раздел Coding Style %)

ЗЫ. А чем отличаются Dual Port RAM от Two Port Ram ?
RXgade
Цитата(des00 @ Feb 5 2012, 13:37) *
ЗЫ. А чем отличаются Dual Port RAM от Two Port Ram ?


В dual-port есть два независимых канала чтения/записа (чтенеи и записть может быть независимой, т.е. одновременной), а в two-port канал один и независимы только чтение и запись.
des00
Цитата(RXgade @ Feb 5 2012, 04:56) *
В dual-port есть два независимых канала чтения/записа (чтенеи и записть может быть независимой, т.е. одновременной), а в two-port канал один и независимы только чтение и запись.

11 лет в этой области работаю, не знал такого %)
RXgade
Цитата(des00 @ Feb 5 2012, 13:37) *
Любой хендбук на синтезатор раздел Coding Style %)


Там приведены примеры с одним тактовым сигналом чтения/ записи.. а меня интересует реализация с независимыми

Цитата(des00 @ Feb 5 2012, 14:01) *
11 лет в этой области работаю, не знал такого %)


Я не уверен что это "стандартная" классификация, просто в некорых технических документах встрачал такое разделение.

http://wiki.answers.com/Q/What_is_the_diff...d_dual_port_ram
SFx
Цитата(des00 @ Feb 5 2012, 13:37) *
ЗЫ. А чем отличаются Dual Port RAM от Two Port Ram ?

Экстрасенсы подсказывают, топикстартер имеет ввиду True Dual Port Ram
maksimp
Цитата(RXgade @ Feb 5 2012, 12:33) *
Необходима информация по реализации Dual-port и Two-porm RAM с НЕЗАВИСИМЫМИ тактовыми сигналами для чтения и записи данных (именно независимыми!!!) по всем канала.

Кто может дайте ссылки на статьи/книги где описаны ньюянсы реализации или реализации на HDL (бозотносительно технологии ПЛИС). спс


Посмотрите описание (даташит) Cyclone 2 от Altera, рисунок 8-13 - структурная схема такой памяти. Там присутствует Write Pulse Generator. То есть видимо сама память состоит из триггеров - защёлок, на входы разрешения после дешифрирования подаются по ИЛИ импульсы записи двух портов.
Причём Write Pulse Generator включает в себя устройство асинхронной задержки, то самое делать которое своими силами производители ПЛИС вовсю не рекомендуют. На HDL его трудно записать.
barabek
Цитата(RXgade @ Feb 5 2012, 20:30) *
Там приведены примеры с одним тактовым сигналом чтения/ записи.. а меня интересует реализация с независимыми

А с каким производителем работаете? У альтеры в хэндбуке на квартус есть такой пример :

Код
Example 11–15. Verilog HDL Simple Dual-Port, Dual-Clock Synchronous RAM


module dual_clock_ram(
output reg [7:0] q,
input [7:0] d,
input [6:0] write_address, read_address,
input we, clk1, clk2
);
reg [6:0] read_address_reg;
reg [7:0] mem [127:0];
always @ (posedge clk1)
begin
if (we)
mem[write_address] <= d;
end
always @ (posedge clk2) begin
q <= mem[read_address_reg];
read_address_reg <= read_address;
end
endmodule

не то?
maksimp
Цитата(barabek @ Feb 6 2012, 01:51) *
А с каким производителем работаете? У альтеры в хэндбуке на квартус есть такой пример :

В первом сообщении темы было "безотносительно технологии ПЛИС". То есть видимо на любой. Хочется код, для которого не важно какая ПЛИС.
des00
Цитата(maksimp @ Feb 5 2012, 21:58) *
В первом сообщении темы было "безотносительно технологии ПЛИС". То есть видимо на любой. Хочется код, для которого не важно какая ПЛИС.

Вопрос стоит некорректно. Код из примера Example 11–15. Verilog HDL Simple Dual-Port, Dual-Clock Synchronous RAM. будер работать безотносительно технологии ПЛИС в любом симуляторе, но то как он будет синтезирован в целевую ПЛИС отдается на откуп синтезатору. И если синтезатор, посчитает что описание не попадает под его критерии по которым он инферит память, то он сделает как умеет.

В свое время, для моделирования я делал DWC двухпортовую память, работало отлично, но в симуляторе. Попытки объяснить синтезатору что нужно вставить RAMB16 блок, вместо кучи логики успехом не увенчались. То же самое и про опцию byte_enable.

Поэтому, безотносительно технологии ПЛИс это будет классический
Код
always_ff @(posedge pipa_clk) begin
  pipa_rdat <= ram[pipa_addr];
  if (pipa_we)
    ram[pipa_addr] <= pipa_wdat;
end

always_ff @(posedge popa_clk) begin
  popa_rdat <= ram[popa_addr];
  if (popa_we)
    ram[popa_addr] <= popa_wdat;
end

но во что это синтезируется и каким свойством будет обладать (Read First, Write First, Don't care) будет зависить целиком и полностью от умности синтезатора.
RXgade
Цитата(maksimp @ Feb 5 2012, 22:51) *
Посмотрите описание (даташит) Cyclone 2 от Altera, рисунок 8-13 - структурная схема такой памяти. Там присутствует Write Pulse Generator. То есть видимо сама память состоит из триггеров - защёлок, на входы разрешения после дешифрирования подаются по ИЛИ импульсы записи двух портов.
Причём Write Pulse Generator включает в себя устройство асинхронной задержки, то самое делать которое своими силами производители ПЛИС вовсю не рекомендуют. На HDL его трудно записать.


Посмотрю. спс.

Цитата(barabek @ Feb 6 2012, 01:51) *
А с каким производителем работаете? У альтеры в хэндбуке на квартус есть такой пример :

Код
Example 11–15. Verilog HDL Simple Dual-Port, Dual-Clock Synchronous RAM

не то?


Работаю с ACTEL.

В этом примере очевидна проблема с потерей целостности данных...Если активные фронты клоков на запись и чтение близки по времени (при одинаковых адресах записи и чтения) то может произойти искажение считываемых данных (в идеале хочется чтобы было считано либо старое значение либо новое... но никак не искаженное).

Цитата(maksimp @ Feb 6 2012, 06:58) *
В первом сообщении темы было "безотносительно технологии ПЛИС". То есть видимо на любой. Хочется код, для которого не важно какая ПЛИС.


Тут даже вопрос не в том, что на "любой" а в том что: "можноли написать синтезируемых HDL код для такой памяти не использую стандартные блоки памяти зависящие от технологии ПЛИС." При этом HDL-код для конктетной ПЛИС не обязан совпадать с кодом для другой.

Цитата(des00 @ Feb 6 2012, 09:45) *
Вопрос стоит некорректно. Код из примера Example 11–15. Verilog HDL Simple Dual-Port, Dual-Clock Synchronous RAM. будер работать безотносительно технологии ПЛИС в любом симуляторе, но то как он будет синтезирован в целевую ПЛИС отдается на откуп синтезатору. И если синтезатор, посчитает что описание не попадает под его критерии по которым он инферит память, то он сделает как умеет.

В свое время, для моделирования я делал DWC двухпортовую память, работало отлично, но в симуляторе. Попытки объяснить синтезатору что нужно вставить RAMB16 блок, вместо кучи логики успехом не увенчались. То же самое и про опцию byte_enable.

Поэтому, безотносительно технологии ПЛИс это будет классический
Код
always_ff @(posedge pipa_clk) begin
...
end

но во что это синтезируется и каким свойством будет обладать (Read First, Write First, Don't care) будет зависить целиком и полностью от умности синтезатора.


да.
DmitryR
Цитата(RXgade @ Feb 6 2012, 09:56) *
В этом примере очевидна проблема с потерей целостности данных...

Видите ли, проблема в том, что inferred code работает (может работать) в железе не совсем так, как он описан. Поэтому вы не смотрите, какие проблемы могут теоретически возникнуть в HDL-описании памяти, смотрите на то, как быдет работать блок, в который этот код превратится.
RXgade
Цитата(DmitryR @ Feb 6 2012, 12:59) *
Видите ли, проблема в том, что inferred code работает (может работать) в железе не совсем так, как он описан. Поэтому вы не смотрите, какие проблемы могут теоретически возникнуть в HDL-описании памяти, смотрите на то, как быдет работать блок, в который этот код превратится.


Почитав описания некоторых реализаий Dual-port Ram-ов пришел к выводу (поправте меня если не прав): 100% защиту от нарушения целостности данных при одновременном и независимом доступе по одному адресу на запись/запись или чтение/запись обеспечить невозможно. Все равно есть отраничения взаимное изменение сигналов тактирования.

...а раз так, то появились некоторые соображения по реализации на "защелках". Если что получится то сразу отпишусь. smile3046.gif
des00
Цитата(RXgade @ Feb 6 2012, 04:33) *
...а раз так, то появились некоторые соображения по реализации на "защелках". Если что получится то сразу отпишусь. smile3046.gif

безумству храбрых поем мы песню %)
vetal
Цитата
100% защиту от нарушения целостности данных при одновременном и независимом доступе по одному адресу на запись/запись или чтение/запись обеспечить невозможно.

Эту процедуру можно возложить на отдельный блок, тормозящий процесс чтения на время записи и наоборот(Mutex), с соответствующими издержками.
Цитата
а раз так, то появились некоторые соображения по реализации на "защелках".

Cохранение в элементе памяти случайно изменяющейся величины в случайный момент времени приведет к случайному результату sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.