|
|
  |
Dual-port & Two-porm RAM, реализация с [b]НЕЗАВИСИМЫМ[/b] тактированием чтения/записи |
|
|
|
Feb 5 2012, 09:56
|
Участник

Группа: Свой
Сообщений: 42
Регистрация: 7-06-07
Из: Россия, Орел
Пользователь №: 28 281

|
Цитата(des00 @ Feb 5 2012, 13:37)  ЗЫ. А чем отличаются Dual Port RAM от Two Port Ram ? В dual-port есть два независимых канала чтения/записа (чтенеи и записть может быть независимой, т.е. одновременной), а в two-port канал один и независимы только чтение и запись.
|
|
|
|
|
Feb 5 2012, 10:30
|
Участник

Группа: Свой
Сообщений: 42
Регистрация: 7-06-07
Из: Россия, Орел
Пользователь №: 28 281

|
Цитата(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
|
|
|
|
|
Feb 5 2012, 18:51
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(RXgade @ Feb 5 2012, 12:33)  Необходима информация по реализации Dual-port и Two-porm RAM с НЕЗАВИСИМЫМИ тактовыми сигналами для чтения и записи данных (именно независимыми!!!) по всем канала.
Кто может дайте ссылки на статьи/книги где описаны ньюянсы реализации или реализации на HDL (бозотносительно технологии ПЛИС). спс Посмотрите описание (даташит) Cyclone 2 от Altera, рисунок 8-13 - структурная схема такой памяти. Там присутствует Write Pulse Generator. То есть видимо сама память состоит из триггеров - защёлок, на входы разрешения после дешифрирования подаются по ИЛИ импульсы записи двух портов. Причём Write Pulse Generator включает в себя устройство асинхронной задержки, то самое делать которое своими силами производители ПЛИС вовсю не рекомендуют. На HDL его трудно записать.
|
|
|
|
|
Feb 5 2012, 21:51
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(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 не то?
|
|
|
|
|
Feb 6 2012, 02:58
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(barabek @ Feb 6 2012, 01:51)  А с каким производителем работаете? У альтеры в хэндбуке на квартус есть такой пример : В первом сообщении темы было "безотносительно технологии ПЛИС". То есть видимо на любой. Хочется код, для которого не важно какая ПЛИС.
|
|
|
|
|
Feb 6 2012, 05:45
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(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) будет зависить целиком и полностью от умности синтезатора.
--------------------
|
|
|
|
|
Feb 6 2012, 06:56
|
Участник

Группа: Свой
Сообщений: 42
Регистрация: 7-06-07
Из: Россия, Орел
Пользователь №: 28 281

|
Цитата(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) будет зависить целиком и полностью от умности синтезатора. да.
|
|
|
|
|
Feb 6 2012, 10:33
|
Участник

Группа: Свой
Сообщений: 42
Регистрация: 7-06-07
Из: Россия, Орел
Пользователь №: 28 281

|
Цитата(DmitryR @ Feb 6 2012, 12:59)  Видите ли, проблема в том, что inferred code работает (может работать) в железе не совсем так, как он описан. Поэтому вы не смотрите, какие проблемы могут теоретически возникнуть в HDL-описании памяти, смотрите на то, как быдет работать блок, в который этот код превратится. Почитав описания некоторых реализаий Dual-port Ram-ов пришел к выводу (поправте меня если не прав): 100% защиту от нарушения целостности данных при одновременном и независимом доступе по одному адресу на запись/запись или чтение/запись обеспечить невозможно. Все равно есть отраничения взаимное изменение сигналов тактирования. ...а раз так, то появились некоторые соображения по реализации на "защелках". Если что получится то сразу отпишусь.
|
|
|
|
|
Feb 6 2012, 10:46
|

Гуру
     
Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553

|
Цитата 100% защиту от нарушения целостности данных при одновременном и независимом доступе по одному адресу на запись/запись или чтение/запись обеспечить невозможно. Эту процедуру можно возложить на отдельный блок, тормозящий процесс чтения на время записи и наоборот(Mutex), с соответствующими издержками. Цитата а раз так, то появились некоторые соображения по реализации на "защелках". Cохранение в элементе памяти случайно изменяющейся величины в случайный момент времени приведет к случайному результату
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|