jenya7 0 14 февраля, 2017 Опубликовано 14 февраля, 2017 (изменено) · Жалоба Взвешиваю два способа. Первый 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; Изменено 14 февраля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 14 февраля, 2017 Опубликовано 14 февраля, 2017 · Жалоба Взвешиваю два способа. Первый 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 описания и посммотреть отчеты... Вопрос в доступе к каждому регистру, как по мне массив удобнее (можно циклы применять) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 февраля, 2017 Опубликовано 14 февраля, 2017 · Жалоба по количеству регистров одинаково (если не ошибаюсь), но проще/лучше это проверить. Создав простенькие 2 описания и посммотреть отчеты... Вопрос в доступе к каждому регистру, как по мне массив удобнее (можно циклы применять) я могу посмотреть RTL Viewer . не уверен что мне это поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба с другой стороны... у меня 600 переменных. мой case с when-ами будет выглядеть устрашающе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба с другой стороны... у меня 600 переменных. мой case с when-ами будет выглядеть устрашающе. Вы начинаете обсуждение со способа описания. И это не правильно! А на самом деле надо всегда помнить о физической реализации. Для десятка слов компилятор накрутит комбинационной логики. И Вы получите приличную задержку. Ну, может быть ее удастся уменьшить из-за конвейера. Но появится латентность... А для 600 слов компилятор гарантированно задействует блок памяти. И скорее всего там будет латентность на 1 или на 2 клока. И эту латентность Вы сейчас не учитываете, потому как исходно в синтаксисе операторов ее не предусмотрено. Все это приведет к ошибкам! А чтобы не было "устрашающе" у Альтеры есть mif файлы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 (изменено) · Жалоба Вы начинаете обсуждение со способа описания. И это не правильно! А на самом деле надо всегда помнить о физической реализации. Для десятка слов компилятор накрутит комбинационной логики. И Вы получите приличную задержку. Ну, может быть ее удастся уменьшить из-за конвейера. Но появится латентность... А для 600 слов компилятор гарантированно задействует блок памяти. И скорее всего там будет латентность на 1 или на 2 клока. И эту латентность Вы сейчас не учитываете, потому как исходно в синтаксисе операторов ее не предусмотрено. Все это приведет к ошибкам! А чтобы не было "устрашающе" у Альтеры есть mif файлы. Так какое заключение? Какой дорогой пойдем товарищи? :) MIF это инициализация памяти. у меня с этим нет проблем. Внешний хост будет инициализировать регистры. Изменено 15 февраля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Так какое заключение? Какой дорогой пойдем товарищи? :) MIF это инициализация памяти. у меня с этим нет проблем. Внешний хост будет инициализировать регистры. Начиная с конца. Если инициализация памяти идет от внешнего хоста, то это значит, что Вам нужно ОЗУ с чтением и записью. И это значит, что по исходному там может быть все, что угодно и MIF Вам не нужен. Теперь о "дороге". Сначала пишем ТЗ Из него делаем алоритм вычислений Смотрим производительность, учитываем клоки, разрядности и разрабатываем блок-схему вычислителя Подбираем для вычислителя аппаратные блоки в ПЛИС, такие как память, умножители и PLL. Смотрим на латентность этих блоков. На HDL описываем вычислитель... Симулируем RTL И так далее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Так какое заключение? Какой дорогой пойдем товарищи? :) MIF это инициализация памяти. у меня с этим нет проблем. Внешний хост будет инициализировать регистры. Начиная с конца. Если инициализация памяти идет от внешнего хоста, то это значит, что Вам нужно ОЗУ с чтением и записью. И это значит, что по исходному там может быть все, что угодно и MIF Вам не нужен. Теперь о "дороге". Сначала пишем ТЗ Из него делаем алоритм вычислений Смотрим производительность, учитываем клоки, разрядности и разрабатываем блок-схему вычислителя Подбираем для вычислителя аппаратные блоки в ПЛИС, такие как память, умножители и PLL. Смотрим на латентность этих блоков. На HDL описываем вычислитель... Симулируем RTL И так далее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Начиная с конца. Если инициализация памяти идет от внешнего хоста, то это значит, что Вам нужно ОЗУ с чтением и записью. И это значит, что по исходному там может быть все, что угодно и MIF Вам не нужен. Теперь о "дороге". Сначала пишем ТЗ Из него делаем алоритм вычислений Смотрим производительность, учитываем клоки, разрядности и разрабатываем блок-схему вычислителя Подбираем для вычислителя аппаратные блоки в ПЛИС, такие как память, умножители и PLL. Смотрим на латентность этих блоков. На HDL описываем вычислитель... Симулируем RTL И так далее... да вобщем то тут все понятно. блок регистров. читать/писать. все уже украдено написано до нас. вопрос в надежде что есть народ с опытом работы с данной задачей. учитывая что не я первый пишу/читаю регистры... хотя уже начинаешь сомневаться во всем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба да вобщем то тут все понятно. блок регистров. читать/писать. все уже украдено написано до нас. 600 регистров? Или 600 ячеек памяти? Разницу представляете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба 600 регистров? Или 600 ячеек памяти? Разницу представляете? разницу представляю плохо. поэтому обратился на форум. тут главное понять почему человек открыл тему - потому что плохо понимает разницу. то есть по большому счету это тоже надо решить - регистры или ячейки памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба разницу представляю плохо. поэтому обратился на форум. тут главное понять почему человек открыл тему - потому что плохо понимает разницу. то есть по большому счету это тоже надо решить - регистры или ячейки памяти. Извиняюсь за :bb-offtopic: Вы больше программист и с архитектурой FPGA не знакомы? Просто чтобы понять на каком уровне оказать возможную помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба разницу представляю плохо. поэтому обратился на форум. тут главное понять почему человек открыл тему - потому что плохо понимает разницу. то есть по большому счету это тоже надо решить - регистры или ячейки памяти. Тогда делаем два проекта. В одном вставляем память. В другом - регистры. И если надо пишем атрибуты, чтобы были именно регистры. Ставим выбор кристалла автоматическим, или выбираем большой кристалл, чтобы туда регистры влезли. И смотрим разницу. Особенно по интерконнектам и максимальной тактовой. Потому как для регистров будет реализован, кроме самих регистров, еще и мультиплексор 600 раз по 16 бит... Неслабый такой мультиплексор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба У вас в ПЛИС (я надеюсь это все таки ПЛИС) есть разные ресурсы регистры ЛУТы Память Математические модули И вы можете разные операции делать на одних ресурсах. К примеру можно сделать сумматор на логике сожрав ЛУТы, а можно на мат блоке. Можно хранить данные в регистрах, а можно в памяти. И в целом вы имеете возможность явного и не явного управления какие ресурсы на что у вас пойдут. Если вы сделаете массив данных с доступом за 1 такт на чтение и на запись это 99% будут регистры, потому что память обычно выдает данные на след такт. А если вы опишите массив с защелкой адреса или явно поставите блок, то будет память. Ваш первый пример отличается только записью, с точки зрения ПЛИС это одно и тоже. И скорее всего это будут регистры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 (изменено) · Жалоба Извиняюсь за :bb-offtopic: Вы больше программист и с архитектурой FPGA не знакомы? Просто чтобы понять на каком уровне оказать возможную помощь. В FPGA опыт небольшой. Писал простые проекты которые даже работали. Но я не такой гуру чтоб понять все тонкости. Опыта не хватает. Я могу посмотреть RTL Viewer и понять - вот тут тригер такой тут другой, тут мультиплекор, но опять таки глубокое понимание приходит только с практикой. У вас в ПЛИС (я надеюсь это все таки ПЛИС) есть разные ресурсы регистры ЛУТы Память Математические модули И вы можете разные операции делать на одних ресурсах. К примеру можно сделать сумматор на логике сожрав ЛУТы, а можно на мат блоке. Можно хранить данные в регистрах, а можно в памяти. И в целом вы имеете возможность явного и не явного управления какие ресурсы на что у вас пойдут. Если вы сделаете массив данных с доступом за 1 такт на чтение и на запись это 99% будут регистры, потому что память обычно выдает данные на след такт. А если вы опишите массив с защелкой адреса или явно поставите блок, то будет память. Ваш первый пример отличается только записью, с точки зрения ПЛИС это одно и тоже. И скорее всего это будут регистры. понимаю. а Вы как бы сделали в своем проекте? Мне как то один чел сказал - твоя идея должна быть такая чтоб ты любому дураку смог объяснить за 5 минут. :) Изменено 15 февраля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться