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

Взвешиваю два способа.

Первый

case (address) is
    when X"00500" => byte0 <= data;
    when X"00501" => byte1 <= data;
    when X"00502" => byte2 <= data;
   -- и так далее
end case;

Второй

type big_data is array (0 to 1024) of std_logic_vector(7 downto 0);
signal bytes : big_data;

bytes(address) <= data;

Какой лучше по скорости и какой менее прожорливый?

 

Первый гибче как мне кажется. Во первых переменные более описательные.

Во вторых я не привязан к одному типу данных. Я могу написать так (учитывая что data 16 бит)

case (address) is
    when X"00500" => byte <= data;
    when X"00501" => bit <= data(0);
    when X"00502" => word <= data;
   -- и так далее
end case;

Изменено пользователем Jenya7

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


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

Взвешиваю два способа.

Первый

case (address) is
    when X"00500" => byte0 <= data;
    when X"00501" => byte1 <= data;
    when X"00502" => byte2 <= data;
   -- и так далее
end case;

Второй

type big_data is array (0 to 1024) of std_logic_vector(7 downto 0);
signal bytes : big_data;

bytes(address) <= data;

Какой лучше по скорости и какой менее прожорливый?

 

Первый гибче как мне кажется. Во первых переменные более описательные.

Во вторых я не привязан к одному типу данных. Я могу написать так (учитывая что data 16 бит)

case (address) is
    when X"00500" => byte <= data;
    when X"00501" => bit <= data(0);
    when X"00502" => word <= data;
   -- и так далее
end case;

по количеству регистров одинаково (если не ошибаюсь), но проще/лучше это проверить. Создав простенькие 2 описания и посммотреть отчеты...

Вопрос в доступе к каждому регистру, как по мне массив удобнее (можно циклы применять)

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


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

по количеству регистров одинаково (если не ошибаюсь), но проще/лучше это проверить. Создав простенькие 2 описания и посммотреть отчеты...

Вопрос в доступе к каждому регистру, как по мне массив удобнее (можно циклы применять)

я могу посмотреть RTL Viewer . не уверен что мне это поможет.

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


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

с другой стороны... у меня 600 переменных. мой case с when-ами будет выглядеть устрашающе.

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


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

с другой стороны... у меня 600 переменных. мой case с when-ами будет выглядеть устрашающе.

Вы начинаете обсуждение со способа описания. И это не правильно!

А на самом деле надо всегда помнить о физической реализации. Для десятка слов компилятор накрутит комбинационной логики. И Вы получите приличную задержку. Ну, может быть ее удастся уменьшить из-за конвейера. Но появится латентность...

А для 600 слов компилятор гарантированно задействует блок памяти. И скорее всего там будет латентность на 1 или на 2 клока. И эту латентность Вы сейчас не учитываете, потому как исходно в синтаксисе операторов ее не предусмотрено. Все это приведет к ошибкам!

А чтобы не было "устрашающе" у Альтеры есть mif файлы.

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


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

Вы начинаете обсуждение со способа описания. И это не правильно!

А на самом деле надо всегда помнить о физической реализации. Для десятка слов компилятор накрутит комбинационной логики. И Вы получите приличную задержку. Ну, может быть ее удастся уменьшить из-за конвейера. Но появится латентность...

А для 600 слов компилятор гарантированно задействует блок памяти. И скорее всего там будет латентность на 1 или на 2 клока. И эту латентность Вы сейчас не учитываете, потому как исходно в синтаксисе операторов ее не предусмотрено. Все это приведет к ошибкам!

А чтобы не было "устрашающе" у Альтеры есть mif файлы.

Так какое заключение? Какой дорогой пойдем товарищи? :)

 

MIF это инициализация памяти. у меня с этим нет проблем. Внешний хост будет инициализировать регистры.

Изменено пользователем Jenya7

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


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

Так какое заключение? Какой дорогой пойдем товарищи? :)

 

MIF это инициализация памяти. у меня с этим нет проблем. Внешний хост будет инициализировать регистры.

Начиная с конца. Если инициализация памяти идет от внешнего хоста, то это значит, что Вам нужно ОЗУ с чтением и записью. И это значит, что по исходному там может быть все, что угодно и MIF Вам не нужен.

Теперь о "дороге".

Сначала пишем ТЗ

Из него делаем алоритм вычислений

Смотрим производительность, учитываем клоки, разрядности и разрабатываем блок-схему вычислителя

Подбираем для вычислителя аппаратные блоки в ПЛИС, такие как память, умножители и PLL. Смотрим на латентность этих блоков.

На HDL описываем вычислитель...

Симулируем RTL

 

И так далее...

 

 

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


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

Так какое заключение? Какой дорогой пойдем товарищи? :)

 

MIF это инициализация памяти. у меня с этим нет проблем. Внешний хост будет инициализировать регистры.

Начиная с конца. Если инициализация памяти идет от внешнего хоста, то это значит, что Вам нужно ОЗУ с чтением и записью. И это значит, что по исходному там может быть все, что угодно и MIF Вам не нужен.

Теперь о "дороге".

Сначала пишем ТЗ

Из него делаем алоритм вычислений

Смотрим производительность, учитываем клоки, разрядности и разрабатываем блок-схему вычислителя

Подбираем для вычислителя аппаратные блоки в ПЛИС, такие как память, умножители и PLL. Смотрим на латентность этих блоков.

На HDL описываем вычислитель...

Симулируем RTL

 

И так далее...

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


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

Начиная с конца. Если инициализация памяти идет от внешнего хоста, то это значит, что Вам нужно ОЗУ с чтением и записью. И это значит, что по исходному там может быть все, что угодно и MIF Вам не нужен.

Теперь о "дороге".

Сначала пишем ТЗ

Из него делаем алоритм вычислений

Смотрим производительность, учитываем клоки, разрядности и разрабатываем блок-схему вычислителя

Подбираем для вычислителя аппаратные блоки в ПЛИС, такие как память, умножители и PLL. Смотрим на латентность этих блоков.

На HDL описываем вычислитель...

Симулируем RTL

 

И так далее...

да вобщем то тут все понятно. блок регистров. читать/писать. все уже украдено написано до нас.

вопрос в надежде что есть народ с опытом работы с данной задачей. учитывая что не я первый пишу/читаю регистры... хотя уже начинаешь сомневаться во всем.

 

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


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

да вобщем то тут все понятно. блок регистров. читать/писать. все уже украдено написано до нас.

600 регистров? Или 600 ячеек памяти? Разницу представляете?

 

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


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

600 регистров? Или 600 ячеек памяти? Разницу представляете?

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

то есть по большому счету это тоже надо решить - регистры или ячейки памяти.

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


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

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

то есть по большому счету это тоже надо решить - регистры или ячейки памяти.

Извиняюсь за :bb-offtopic: Вы больше программист и с архитектурой FPGA не знакомы? Просто чтобы понять на каком уровне оказать возможную помощь.

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


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

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

то есть по большому счету это тоже надо решить - регистры или ячейки памяти.

Тогда делаем два проекта.

В одном вставляем память.

В другом - регистры. И если надо пишем атрибуты, чтобы были именно регистры.

Ставим выбор кристалла автоматическим, или выбираем большой кристалл, чтобы туда регистры влезли.

И смотрим разницу. Особенно по интерконнектам и максимальной тактовой. Потому как для регистров будет реализован, кроме самих регистров, еще и мультиплексор 600 раз по 16 бит... Неслабый такой мультиплексор.

 

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


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

У вас в ПЛИС (я надеюсь это все таки ПЛИС) есть разные ресурсы

регистры

ЛУТы

Память

Математические модули

 

И вы можете разные операции делать на одних ресурсах. К примеру можно сделать сумматор на логике сожрав ЛУТы, а можно на мат блоке. Можно хранить данные в регистрах, а можно в памяти. И в целом вы имеете возможность явного и не явного управления какие ресурсы на что у вас пойдут.

Если вы сделаете массив данных с доступом за 1 такт на чтение и на запись это 99% будут регистры, потому что память обычно выдает данные на след такт. А если вы опишите массив с защелкой адреса или явно поставите блок, то будет память.

 

Ваш первый пример отличается только записью, с точки зрения ПЛИС это одно и тоже. И скорее всего это будут регистры.

 

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


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

Извиняюсь за :bb-offtopic: Вы больше программист и с архитектурой FPGA не знакомы? Просто чтобы понять на каком уровне оказать возможную помощь.

В FPGA опыт небольшой. Писал простые проекты которые даже работали. Но я не такой гуру чтоб понять все тонкости. Опыта не хватает.

Я могу посмотреть RTL Viewer и понять - вот тут тригер такой тут другой, тут мультиплекор, но опять таки глубокое понимание приходит только с практикой.

 

У вас в ПЛИС (я надеюсь это все таки ПЛИС) есть разные ресурсы

регистры

ЛУТы

Память

Математические модули

 

И вы можете разные операции делать на одних ресурсах. К примеру можно сделать сумматор на логике сожрав ЛУТы, а можно на мат блоке. Можно хранить данные в регистрах, а можно в памяти. И в целом вы имеете возможность явного и не явного управления какие ресурсы на что у вас пойдут.

Если вы сделаете массив данных с доступом за 1 такт на чтение и на запись это 99% будут регистры, потому что память обычно выдает данные на след такт. А если вы опишите массив с защелкой адреса или явно поставите блок, то будет память.

 

Ваш первый пример отличается только записью, с точки зрения ПЛИС это одно и тоже. И скорее всего это будут регистры.

понимаю. а Вы как бы сделали в своем проекте?

 

 

 

Мне как то один чел сказал - твоя идея должна быть такая чтоб ты любому дураку смог объяснить за 5 минут. :)

Изменено пользователем Jenya7

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


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

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

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

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

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

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

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

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

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

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