Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Языки описания аппаратуры (VHDL и др.)

Вот что получилось.

Отправлено zlyh 05 декабря 2006 г. 12:52
В ответ на: Инициализирую ROM отправлено zlyh 01 декабря 2006 г. 11:37


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity ROM is
generic(DataWidth_g : in positive := 32;
AdrWidth_g : in positive := 10;
-- InitArr_g это и есть тот параметр (одномерный массив
-- бит) через который я передаю сюда начальное значение
InitArr_g : in unsigned
);
port (
ADR : in unsigned(AdrWidth_g-1 downto 0);
DO : out unsigned(DataWidth_g-1 downto 0)
);
end entity ROM;

architecture ROM_arch of ROM is

subtype datwidth_t is unsigned(DataWidth_g-1 downto 0);
constant romdepth_c : positive := 2**AdrWidth_g;
type rom_t is array (romdepth_c-1 downto 0) of datwidth_t;

-- преобразует одномерный массив во что надо
function ArrInit
(InitArr : in unsigned)
return rom_t is
variable ROM : rom_t := (others => (others => '0'));
constant InitArrLen_c : positive := InitArr'LENGTH;
variable k : integer := 0;
begin
for i in rom_t'RANGE loop
for j in datwidth_t'RANGE loop
k := i * datwidth_t'LENGTH + j;
ROM(i)(j) := InitArr(k);
end loop;
end loop;
return ROM;
end function ArrInit;

-- декларация константы
constant ROMinit_c : rom_t := ArrInit(InitArr_g);
-- собственно инициализация
signal ROM : rom_t;

begin
DO <= ROM(TO_INTEGER(ADR));
end architecture ROM_arch;

Что хорошо. Избежал дополнительных внешних деклараций (в своём package). Всё стандартно.
Ну и будет функция преобразования "человеческого" ROM-а в одномерный массив.
Наверно можно было и классический 2-х мерный массив сюда...
Синтезировать не пробовал.


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа

Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 3 в два раза:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru