ОЗУ с раздельными входами и выходами

Что то я никак не могу найти доступного ОЗУ приличной емкости (не меньше 256(!) байт или полубайт) с разделенными входами и выходами. Емкость в тысячи байт/полубайт тоже годится. Желательна скорость <<50 нс. Было у меня почему то представление, что кэши старые строились на чем то похожем - но там обычные ОЗУ с совмещенными IO.

Для чего это надо - чтобы сделать "двухпортовое" ОЗУ большой емкости (а вот зачем нужно это - объяснять уж совсем долго). Представляется, что это можно сделать объеденив по входам данных два ОЗУ (и объединив адресные входы на время записи). Реальная двухпортовость не нужна - важнее размер ОЗУ и цена, а то можно было бы готовые чипы использовать - регистровые файлы (мала емкость) или двухпортовки ОЗУ (цены сильно за 100 баксов и архитектура все равно не подходящая).

Аркадий

Reply to
Arcady Schekochikhin
Loading thread data ...

Tue Jan 04 2005 05:37, Arcady Schekochikhin wrote to All:

AS> Что то я никак не могу найти доступного ОЗУ приличной емкости (не меньше AS> 256(!) байт или полубайт) с разделенными входами и выходами. Емкость в AS> тысячи байт/полубайт тоже годится. Желательна скорость <<50 нс.

AS> Для чего это надо - чтобы сделать "двухпортовое" ОЗУ большой емкости

Обычное ОЗУ, успевающее сделать _два_ цикла за 50нс + схема на логике или PLD, занимающаяся распределением этих циклов туда-сюда.

WBR, Yuriy.

Reply to
Yuriy K

По условию задачи PLD не желательны категорически. И циклов получается не 2 а 3 (2 их уже - чтение-запись). Получается ОЗУ типа 30 нс - таким управлять будет ой как хреново, а еще мультиплексоры и регистры для такой скорости... К сожалению вариант не прокатит (да он уже и рассматривался).

Reply to
Arcady Schekochikhin

Привет Arcady!

04 Jan 05 05:37, Arcady Schekochikhin писал All:

AS> Что то я никак не могу найти доступного ОЗУ приличной емкости (не

AS> Реальная двухпортовость не нужна - AS> важнее размер ОЗУ и цена, а то можно было бы готовые чипы AS> использовать AS> - регистровые файлы (мала емкость) или двухпортовки ОЗУ (цены сильно AS> за 100 баксов и архитектура все равно не подходящая).

Может устроит ПЛИС? Altera EP1K10 можно купить за $10.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Вышла корова в чисто поле, да всё его и запачкала.

Reply to
Alex Mogilnikov

AS> Что то я никак не могу найти доступного ОЗУ приличной емкости (не меньше AS> 256(!) байт или полубайт) с разделенными входами и выходами. Емкость в AS> тысячи байт/полубайт тоже годится. Желательна скорость <<50 нс. Было у меня AS> почему то представление, что кэши старые строились на чем то похожем - но AS> там обычные ОЗУ с совмещенными IO.

AS> Для чего это надо - чтобы сделать "двухпортовое" ОЗУ большой емкости (а вот AS> зачем нужно это - объяснять уж совсем долго). Представляется, что это можно AS> сделать объеденив по входам данных два ОЗУ (и объединив адресные входы на AS> время записи). Реальная двухпортовость не нужна - важнее размер ОЗУ и цена, AS> а то можно было бы готовые чипы использовать - регистровые файлы (мала AS> емкость) или двухпортовки ОЗУ (цены сильно за 100 баксов и архитектура все AS> равно не подходящая).

Варианты:

1) Обычное статическое ОЗУ + ПЛИС. Лучше синхронную память юзать. [+] Полная гибкость. [+] Приличный объем (хоть мегабайты). [-] Сложность (относительная, конечно) реализации.

2) Двухпортовая память. Делает, например Cypress.

[+] Высокая пропускная способность. [+] Приличный объем (хоть мегабайты). [+] Реализация проще, чем в 1, хотя без логики не обойтись. [-] Гибкости полной нет (если не требуется, то это не минус). [-] Требуется много ног на ввод-вывод (в случае ПЛИС, например). 3) Специализированные МС FIFO. Делают, например, Cypress, IDT. [+] Высокая пропусаная способность. [+] Объем от 2К до 8К+. Организация 8/16/32/9/18 бит. Есть двунаправленные. [+] Реализация простая. [-] Гибкости полной нет (если не требуется, то это не минус). 4) Использовать FPGA с внутренней памятью в качестве FIFO. [+] Реализация простая, все в одном кристалле. [+] Полная гибкость. [-] Небольшие (по сравнению с МС памяти) объемы.

Учитывая, что надо всего 256 байт (не килобайт), я бы остановился на последнем, 4-м варианте. Например, Циклон (Альтера) EP1C3 стОит порядка $20-25, в нем почти 60 килобит двухпортового ОЗУ на 200 МГц. Т.е. 13 блоков, каждый из которых может быть сконфигурирован как 256х16. Т.е. в сумме можно получить емкость три с лишним килослова. К тому же вся сопутствующая логика там же. Реализация очень простая. Вот пример (из рабочего проекта) FIFO 256х16 (Verilog):

// -------------------------------------------------------- module MFIFO_256x16 ( input clk, input reset,

input [15:0] datain, output [15:0] dataout,

output reg [8:0] count,

input write, input read );

reg [7:0] First; reg [7:0] Last;

DP_RAM256x16 Pool ( .data(datain), .wren(write), .wraddress(Last), .rdaddress(First), .clock(clk), .q(dataout) );

always @(posedge clk, posedge reset) begin if(reset) begin First <= 0; Last <= 0; count <= 0; end else begin if(write && read) begin Last <= Last + 1; First <= First + 1; end else if(write) begin Last <= Last + 1; count <= count + 1; end else if(read) begin First <= First + 1; count <= count - 1; end end end endmodule

// --------------------------------------------------------

Модуль памяти (DP_RAM256x16) сгенерен Квартусовской тулзой - MegaWizard Plugin Manager'ом, там все просто. Модуль FIFO синхронный, все работает по клоку. В принципе этот модуль может быть и одним в проекте (головным), если больше ничего не надо. Понятно, что функциональность можно легко расширить, введя флаги FULL и EMPTY, как это принято в стандартных реализациях. Но мне было удобнее вместо этого просто вывести наружу текущее количество элементов 'count' и внешними средствами контролировать процесс наполнения/опустошения буфера.

Можно еще дешевле решение получить, если использовать более скромный по ресурсам чип EP1K10 (Альтера, ACEX). У него всего три блока и память не такая быстрая. Но для 256 байт должно хватить с многократным запасом. Память тоже двухпортовая. Стоит такая микруха порядка $10-12.

Ну и еще плюс конфигуратор. Тоже, правда, денег стоит. Могу напутать (давно уже с этим не имел дела), но для ACEX годится флешовый конфигуратор AT17C512, стОит тоже порядка 10 зеленых. Для Циклонов есть новые EPCS1, тянет на 4-5 баксов. Может ли он грузить ACEX, не знаю, не выяснял это специально (похоже, что нет, т.к. он для схемы Active Serial, а ACEX использует Passive Serial). Более дешевый вариант можно получить при использовании дешевого МК + DataFlash. Тут, правда, реализация позамороченнее.

В общем, при указанных требования по объему FIFO я бы смотрел на последние два варианта: 3-й - максимально дешевый и простой (CY7C4201V - $10-15, зато больше ничего не надо), 4-й - тоже простой, относительно недорогой и максимально гибкий - там можно еще много чего помимо FIFO наворотить, если надо. Первые два варианта годятся, если надо большие объемы.

Reply to
Harry Zhurov

Harry,

спасибо конечно, только я никак не могу уяснить - какое отношение ФИФО имеют к ОЗУ и каким именно образом их можно использовать с произвольной адресацией? А ОЗУ кипресовские двухпортовые - они к сожалению совсем не так двухпортовы как надо (а надо как регистровые файлы - только емкость больше) да и цена их просто неприличная. Что касается ФПГА - условие задачи таково что ничто программируемое туда не годится - с ФПГА то каждый может! И вообще должны быть ДИПы! Это типа такое садо-мазо развлечение.

Но я уже понял что хочу странного и вопрос снимается совсем - попробуем зайти с другого конца.

Аркадий

Reply to
Arcady Schekochikhin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.