maksya 0 25 декабря, 2004 Опубликовано 25 декабря, 2004 · Жалоба Вопрос следующий: Необходимо реализовать блок дешифратора (преобразователя) m-разрядного кода в n-разрядный. Опираясь на собственный опыт могу предположить что сделать это можно двумя путями: 1. С помощью ПЗУ с размером 2^m строк по n бит каждая 2. Используя логическую схему (ЛС). Использование внешней микросхемы памяти я пока как вариант не рассматриваю. Если рассматривать второй способ, то возможности VHDL дают два варианта описания ЛС. Первый - задаем двумерный массив констант (типа таблицы прошивки памяти), а в блоке говорим найти содержимое строки (выход дешифратора) по адресу в массиве (вход дешифратора). Таким стилем например заданы таблицы истинности для логических операций в библиотеке (по-моему) std_logic_1164 TYPE ROM is array(0 to 7) of std_logic_vector(3 downto 0); constant table: ROM := (('1', '0', '0', '1'), ('0', '1', '0', '1'), ... ('1', '1', '0', '0')); ... process(input) begin ... output <= table(to_integer(input)); ... end process; ... Второй способ - использовать case , т.е. как то так case input is when "000" => output <= "1001"; -- по адресу '000' лежит строка '1001' when "001" => output <= "0101"; ... when "111" => output <= "1100"; end case; Кстати сказать, синтезатор оба варианта понимает как описание одного и того же устройства (т.е. различия по временным параметрам и по занимаемой площади отсутствуют). Проблема в том что входной код дешифратора имеет разрядность 10. Т.е. для описания блока надо набрать как минимум 1024 строки. Кроме того что это ОЧЕНЬ долго, это еще и выглядеть будет убого. Есть ли возможность используя только ресурсы ПЛИСины создать нечто вроде ПЗУ? Я читал что на некоторых кристаллах есть Hard'овые блоки RAM, но при отключении питания (насколько я понимаю) вся информация потеряется. Если есть какие-либо соображения на этот счет, просьба откликнуться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexf 0 25 декабря, 2004 Опубликовано 25 декабря, 2004 · Жалоба Было бы неплохо указать на каком чипе планируется делать изделие. Если предположить что на относительно современном FPGA, то видимо лучше всего подходит Block RAM. Скажем на новых (очень дешевых) Spartan-3 такие блоки по 16 килобит. На чuть более старых - 4 кбит. Память заливается одновременно с конфигурацией FPGA, а содержимое можно описывать как на уровне HDL так и constraints. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 27 декабря, 2004 Опубликовано 27 декабря, 2004 · Жалоба то, что в любом случае описания синтезатор синтезирует логическую функцию - правда внутри [абстрактного кристалла] нет ROM - поэтому синтезируется какая-либо логика BTW: внутри ПЛИС все логические функции реализуются в виде табличек (типа ROM) - так называемых LUT (look-up table) тут есть два подхода - 1) попытаться самостоятельно привести табличную функцию к простому выражению 2) доверить эту оптимизацию синтезатору - как правило они с этим хорошо справляются. можно взять синтезатор для ASIC-ов или symplify, так как синтезаторы ПЛИС могут не заморачиваться с оптимизацией логики (все равно нужно поставить столько LUT сколько требуется входов) при этом генерить описание HDL можно программкой (автоматицки) в случае использования ПЛИС с RAM - вся конфигурация ПЛИС является загружаемой, то есть с точки зрения автомата в ПЛИС - разницы между ROM и RAM нет (я вообще-то набираю бонусы, чтобы стать "своим", но надеюсь мой ответ в тему :) ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 2 января, 2005 Опубликовано 2 января, 2005 · Жалоба В классическом определении RAM(ОЗУ) - память предназначенная для хранения оперативных данных. ОЗУ, как правило, не обладают энергоНЕзависимостью. Т.е. BlockRAM, расположенные на кристалле ето нечто вроде Флэш-памяти (перепрограммируемая ROM)? Есть какая-либо информация по поводу использования BlockRAM? Как с ней работать? Или об этом надо читать в описании кристалла? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 2 января, 2005 Опубликовано 2 января, 2005 · Жалоба В классическом определении RAM(ОЗУ) - память предназначенная для хранения оперативных данных. ОЗУ, как правило, не обладают энергоНЕзависимостью. Т.е. BlockRAM, расположенные на кристалле ето нечто вроде Флэш-памяти (перепрограммируемая ROM)? Есть какая-либо информация по поводу использования BlockRAM? Как с ней работать? Или об этом надо читать в описании кристалла? <{POST_SNAPBACK}> В ПЛИС есть возможность инициализировать содержимое ОЗУ во время конфигурации. Если в такое ОЗУ потом ничего не писать - получается ПЗУ :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 2 января, 2005 Опубликовано 2 января, 2005 · Жалоба На одной 16 кбит BlockRAM можно сделать ПЗУ 1024х16, т.е 10 на 16 линий. Описать проще так: type ROM_type is array (1023 downto 0) of integer range 0 to 65535; signal ROM: ROM_type := (10, 220, 2565 ...........); А потом integer можно конвертировать в std_logic_vector. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 2 января, 2005 Опубликовано 2 января, 2005 · Жалоба На одной 16 кбит BlockRAM можно сделать ПЗУ 1024х16, т.е 10 на 16 линий. Описать проще так: type ROM_type is array (1023 downto 0) of integer range 0 to 65535; signal ROM: ROM_type := (10, 220, 2565 ...........); А потом integer можно конвертировать в std_logic_vector. <{POST_SNAPBACK}> Мне интересно как задействовать BlockRAM... Текст на VHDL приведет к использованию логических ячеек ПЛИС, а не BlockRAM. Или я не прав? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k2i 0 2 января, 2005 Опубликовано 2 января, 2005 · Жалоба Это зависит от используемого синтезатора. Synplify, например, сам поставит BlockRAM. Для полной уверенности можно поставить атрибут "использовать BlockRAM" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vincent Vega 0 4 января, 2005 Опубликовано 4 января, 2005 · Жалоба <{POST_SNAPBACK}> Мне интересно как задействовать BlockRAM... Текст на VHDL приведет к использованию логических ячеек ПЛИС, а не BlockRAM.<{POST_SNAPBACK}> я думаю, что начинать надо всё же с простого (тем, кто советовал взять синтезатор для ASIC) Возьмите, например Alter'овский Cyclone. У его внутренней памяти даже есть специальный режим работы - эмуляция ROM (всё подробно описано в Cyclone Device Handbook) Чтобы задействовать эту самую блочную память - используйте Quartus'овский MegaWizard Plugin Manager - он предоставляет графический интерфейс для создания нужной конфигурации памяти (т.е. требуется сделать всего несколько щелчков мышью). Далее вставляете описание полученного компонента в свой проект и наслаждаетесь жизнью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 4 января, 2005 Опубликовано 4 января, 2005 · Жалоба Всем спасибо за информацию. Буду дальше разгребать эту науку... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться