Перейти к содержанию
    

Вопрос по VHDL

Вопрос следующий:

Необходимо реализовать блок дешифратора (преобразователя) 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, но при отключении питания (насколько я понимаю) вся информация потеряется.

 

Если есть какие-либо соображения на этот счет, просьба откликнуться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было бы неплохо указать на каком чипе планируется делать изделие.

 

Если предположить что на относительно современном FPGA, то видимо лучше всего подходит Block RAM. Скажем на новых (очень дешевых) Spartan-3 такие блоки по 16 килобит. На чuть более старых - 4 кбит.

Память заливается одновременно с конфигурацией FPGA, а содержимое можно описывать как на уровне HDL так и constraints.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то, что в любом случае описания синтезатор синтезирует логическую функцию - правда

внутри [абстрактного кристалла] нет ROM - поэтому синтезируется какая-либо логика

BTW: внутри ПЛИС все логические функции реализуются в виде табличек (типа ROM) - так называемых LUT (look-up table)

 

тут есть два подхода -

1) попытаться самостоятельно привести табличную функцию к простому выражению

2) доверить эту оптимизацию синтезатору - как правило они с этим хорошо справляются. можно взять синтезатор для ASIC-ов или symplify, так как синтезаторы ПЛИС могут не заморачиваться с оптимизацией логики (все равно нужно поставить столько LUT сколько требуется входов)

при этом генерить описание HDL можно программкой (автоматицки)

 

в случае использования ПЛИС с RAM - вся конфигурация ПЛИС является загружаемой, то есть с точки зрения автомата в ПЛИС - разницы между ROM и RAM нет

 

(я вообще-то набираю бонусы, чтобы стать "своим", но надеюсь мой ответ в тему :) )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В классическом определении RAM(ОЗУ) - память предназначенная для хранения оперативных данных. ОЗУ, как правило, не обладают энергоНЕзависимостью.

 

Т.е. BlockRAM, расположенные на кристалле ето нечто вроде Флэш-памяти (перепрограммируемая ROM)?

 

Есть какая-либо информация по поводу использования BlockRAM? Как с ней работать?

Или об этом надо читать в описании кристалла?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В классическом определении RAM(ОЗУ) - память предназначенная для хранения оперативных данных. ОЗУ, как правило, не обладают энергоНЕзависимостью.

 

Т.е. BlockRAM, расположенные на кристалле ето нечто вроде Флэш-памяти (перепрограммируемая ROM)?

 

Есть какая-либо информация по поводу использования BlockRAM? Как с ней работать?

Или об этом надо читать в описании кристалла?

 

В ПЛИС есть возможность инициализировать содержимое ОЗУ

во время конфигурации. Если в такое ОЗУ потом ничего не писать -

получается ПЗУ :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На одной 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На одной 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.

 

Мне интересно как задействовать BlockRAM...

Текст на VHDL приведет к использованию логических ячеек ПЛИС, а не BlockRAM.

 

Или я не прав?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это зависит от используемого синтезатора.

Synplify, например, сам поставит BlockRAM.

Для полной уверенности можно поставить атрибут

"использовать BlockRAM"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты




Мне интересно как задействовать BlockRAM...
Текст на VHDL приведет к использованию логических ячеек ПЛИС, а не BlockRAM.




я думаю, что начинать надо всё же с простого (тем, кто советовал взять синтезатор для ASIC)

Возьмите, например Alter'овский Cyclone.
У его внутренней памяти даже есть специальный режим работы - эмуляция ROM (всё подробно описано в Cyclone Device Handbook)
Чтобы задействовать эту самую блочную память - используйте Quartus'овский MegaWizard Plugin Manager - он предоставляет графический интерфейс для создания нужной конфигурации памяти (т.е. требуется сделать всего несколько щелчков мышью). Далее вставляете описание полученного компонента в свой проект и наслаждаетесь жизнью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...