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

Jan 04, 2005 5 Replies

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



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



Аркадий


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

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

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

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

WBR, Yuriy.

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

Привет Arcady!

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

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

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

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

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

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 наворотить, если надо. Первые два варианта годятся, если надо большие объемы.

Harry,

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

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

Аркадий

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required