Strob 0 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба Интересно, синтезатор поймет, что это сумматор и задействует соответствующие аппаратные ресурсы или все на лутах и обычных интерсоннектах разведет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба Цитата library ieee; use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; library UNISIM; use UNISIM.Vcomponents.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.numeric_std.all; use ieee.std_logic_misc.all; Что это? Зачем всё это? Оставьте первые две строки, остальное вам тут не нужно. unisim -- это библиотека симуляциооных моделе xilinx. Зачем она вам тут, если у вас никаких примитивов не используется? На будущее: используйте только numeric_std для математики. std_logic_arith и std_logic_unsigned забудьте. Используйте тег code, иначе читать невозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksey_Serov 0 8 декабря, 2020 Опубликовано 8 декабря, 2020 (изменено) · Жалоба 3 часа назад, Strob сказал: Интересно, синтезатор поймет, что это сумматор и задействует соответствующие аппаратные ресурсы или все на лутах и обычных интерсоннектах разведет? То есть есть разница в конечном результате что получится? Я представлял ПЛИС как массив одинаковых логических элементов, вентилейв отличие от CPLD в которых какие-то навороченные блоки. То есть для ПЛИС все-таки есть разница как описывать? Там, выходит, тоже какие-то готовые особо скоростные сумматоры наряду с вентилями? Я представлял ПЛИС как нечто что описано в этой лекции, ключи и диоды и разводка только всего там больше Изменено 8 декабря, 2020 пользователем Aleksey_Serov Правка текста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба Понимаю что не хочется, но вот тут есть ссылка на документы с описанием разных ресурсов что есть в SPARTAN6 (для примера) https://www.xilinx.com/support/documentation/data_sheets/ds160.pdf на последней странице. а тут https://www.xilinx.com/support/documentation/user_guides/ug384.pdf документация на CLB (Configurable Logic Block). У остальных вендоров ПЛИС тоже есть документация и свои особенности! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 4 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба 25 minutes ago, Aleksey_Serov said: Я представлял ПЛИС как массив одинаковых логических элементов, вентилейв отличие от CPLD в которых какие-то навороченные блоки Это выло в самом начале - PLA, PAL, GAL... (https://t-way.ru/articles/programmable-logic-device) 26 minutes ago, Aleksey_Serov said: Там, выходит, тоже какие-то готовые особо скоростные сумматоры наряду с вентилями? В состав FPGA входят блоки DSP. можно использовать их возможности, если нужно. 28 minutes ago, Aleksey_Serov said: для ПЛИС все-таки есть разница как описывать? Если описывать "в лоб" (как тут без ускоренного переноса) и запретить оптимизацию написанного кода - то получите медленно функционирующее устройство, функционируюшее строго как указано. Но можно отдать процесс синтеза на откуп компилятору (описав устройство более "человеческим" стилем) - синтезатор в соответствии с заложенными в нем алгоритмами и возможностями конкретной микросхемы выберет способ создания нужного устройства из "кирпичиков", содержащихся в этой микросхеме. При этом в настройках компилятора тоже можно указать - к чему он должен стремиться (например - к максимальному быстродействию, или - к экономии ресурсов). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksey_Serov 0 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба То есть если хотя бы в CORDIC я заменю свои кондовые сумматоры на entity где происходит: 1 преобразование векторов в integer 2 сложение/вычитание 3 преобразование в векторы (Я пока так себе представляю более совершенный вариант) то уже будет лучше? или надо все более глубоко менять, отказавшись и от векторов (векторы мне понравились тем что берешь старший бит и используешь его как "ключ", определяющий сложение или вычитание делать в следующей итерации) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба 59 minutes ago, Aleksey_Serov said: То есть если хотя бы в CORDIC я заменю свои кондовые сумматоры на entity где происходит: 1 преобразование векторов в integer 2 сложение/вычитание 3 преобразование в векторы Вектора разные бывают. Для библиотеки numeric_std, вектора signed и unsigned могут использоваться в арифметических операциях. Поэтому в integer ничего преобразовывать не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksey_Serov 0 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба Вот в каком виде я написал CORDIC, в нем все сигналы (линии между блоками) std_logic_vector или просто std_logic, Если я переделываю сумматоры оставляю сигналы как есть и убираю лишние библиотеки, то все становится как надо, я правильно понимаю?, только я думал что вектор бывает только std_logic_vector, про unsigned_vector я ничего не читал, точнее и не знал. Вообще цели проекта две 1 сделать приемник с преобразованием вниз и АЦП 24 бит на частоте в несколько десятков кГц 2 Сделать передатчик КВ диапазона ЧМ, АМ, SSB с прямым синтезом (ЦАП к антенне) А в будущем желательно сделать CORDIC для приемника с АЦП к антенне, это уже совсем круто, там, как я понимаю разрядность надо оптимизировать (убавить) и быстродействие, про что разговор и ведется сделать как положено в соответствии с максимальным использованием ресурсов ПЛИС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба Aleksey_Serov про unsigned_vector я ничего не читал http://www.pldworld.com/_hdl/4/_ref/dz.ee.ethz.ch/vhdl_packages.htm Прям на месте можно преобразовывать типы, никаких доп. ресурсов это не требует. Можно сделать сумматор-вычитатель одной операцией "+" и манипуляциями с битами векторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 8 декабря, 2020 Опубликовано 8 декабря, 2020 · Жалоба 1 час назад, Aleksey_Serov сказал: Вот в каком виде я написал CORDIC, в нем все сигналы (линии между блоками) std_logic_vector или просто std_logic, Если я переделываю сумматоры оставляю сигналы как есть и убираю лишние библиотеки, то все становится как надо, я правильно понимаю?, только я думал что вектор бывает только std_logic_vector, про unsigned_vector я ничего не читал, точнее и не знал. Вообще цели проекта две 1 сделать приемник с преобразованием вниз и АЦП 24 бит на частоте в несколько десятков кГц 2 Сделать передатчик КВ диапазона ЧМ, АМ, SSB с прямым синтезом (ЦАП к антенне) А в будущем желательно сделать CORDIC для приемника с АЦП к антенне, это уже совсем круто, там, как я понимаю разрядность надо оптимизировать (убавить) и быстродействие, про что разговор и ведется сделать как положено в соответствии с максимальным использованием ресурсов ПЛИС В стандартных библиотеках VHDL нет unsigned_vector, есть unsigned. Если собираетесь дальше писать на VHDL - настоятельно рекомендую разобраться со всеми типами и подтипами в VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 декабря, 2020 Опубликовано 9 декабря, 2020 · Жалоба 19 hours ago, Aleksey_Serov said: Вобщем сделал вычислительную часть, считает синус (Ну и косинус) правильно, все это сделал особым "стилем "(по выражению как написано в книге бибило) стиль в том что сумматоры побитно расписаны и все сигналы - битовые векторы, может это и не совсем правильно - запись громоздкая но судя по той же книге "и чего такого", ни одной записи вроде a+b, только хардкорная логика, может быть переделаю в "другой стиль", осталось только модуль генерации фазы написать сложно у вас, за мишурой теряются детали алгоритма. По сути все ядро кордика, в развернутом виде (loop unrolling), это always_ff @(posedge iclk) begin if (iclk_ena) begin if (ival) begin dat_x <= (idat_x_resize ^ {cDAT_W{sign_x}}) + sign_x; // dat_x <= sign_x ? -dat_x : dat_x; dat_y <= (idat_y_resize ^ {cDAT_W{sign_x}}) + sign_x; // dat_y <= sign_x ? -dat_y : dat_y; if (sign_x) z_rad <= sign_y ? cPI_RAD_MINUS : cPI_RAD_PLUS; else z_rad <= '0; if (sign_x) z_deg <= sign_y ? cPI_DEG_MINUS : cPI_DEG_PLUS; else z_deg <= '0; end end end generate genvar i; for (i = 0; i < pN; i++) begin : step_gen assign delta [i] = (i == 0) ? dat_y[cDAT_W-1] : dat_y_reg[i-1][cDAT_W-1]; assign dat_x_reg_shift [i] = (i == 0) ? dat_x >>> i : dat_x_reg[i-1] >>> i; assign dat_y_reg_shift [i] = (i == 0) ? dat_y >>> i : dat_y_reg[i-1] >>> i; always_ff @(posedge iclk) begin if (iclk_ena) begin if (val[i]) begin if (i == 0) begin if (delta[i]) begin dat_x_reg[i] <= dat_x - dat_y_reg_shift[i] ; dat_y_reg[i] <= dat_y + dat_x_reg_shift[i] ; z_rad_reg[i] <= z_rad - cALPHA_RAD [i] ; z_deg_reg[i] <= z_deg - cALPHA_DEG [i] ; end else begin dat_x_reg[i] <= dat_x + dat_y_reg_shift[i] ; dat_y_reg[i] <= dat_y - dat_x_reg_shift[i] ; z_rad_reg[i] <= z_rad + cALPHA_RAD [i] ; z_deg_reg[i] <= z_deg + cALPHA_DEG [i] ; end end else begin if (delta[i]) begin dat_x_reg[i] <= dat_x_reg[i-1] - dat_y_reg_shift[i]; dat_y_reg[i] <= dat_y_reg[i-1] + dat_x_reg_shift[i]; z_rad_reg[i] <= z_rad_reg[i-1] - cALPHA_RAD [i]; z_deg_reg[i] <= z_deg_reg[i-1] - cALPHA_DEG [i]; end else begin dat_x_reg[i] <= dat_x_reg[i-1] + dat_y_reg_shift[i]; dat_y_reg[i] <= dat_y_reg[i-1] - dat_x_reg_shift[i]; z_rad_reg[i] <= z_rad_reg[i-1] + cALPHA_RAD [i]; z_deg_reg[i] <= z_deg_reg[i-1] + cALPHA_DEG [i]; end end end end end end endgenerate Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksey_Serov 0 9 декабря, 2020 Опубликовано 9 декабря, 2020 · Жалоба А еще в Xilinx ISE есть графический редактор Schematic. В нем есть смысл чего-то делать, соединять модули, или лучше его не трогать (а то только хуже будет), а все описывать. Я поначалу в нем блоки сумматоров делал из логических элементов, мне так понятнее было, теперь понятно что стиль колхозный, но даже если имеются написанные модули, тоже наверно не стоит создавать символы и в нем соединять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 9 декабря, 2020 Опубликовано 9 декабря, 2020 · Жалоба 11 часов назад, Flip-fl0p сказал: Если собираетесь дальше писать на VHDL - настоятельно рекомендую разобраться со всеми типами и подтипами в VHDL. Писал не раз и ещё раз повторю: изучение языка состоит из двух частей: 1) изучение самого языка, его синтаксиса и семантики и 2) изучение стандартных библиотек (если они есть). В VHDL такие библиотеки есть, и они много чего позволяют делать. Не надо изобретать велосипеды, да ещё с некруглыми колёсами. Только что, Aleksey_Serov сказал: А еще в Xilinx ISE есть графический редактор Schematic. В нем есть смысл чего-то делать, соединять модули, или лучше его не трогать (а то только хуже будет), а все описывать. Про схематик забудьте сразу. Только язык. Схемный ввод умер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 декабря, 2020 Опубликовано 9 декабря, 2020 · Жалоба 4 minutes ago, andrew_b said: Про схематик забудьте сразу. Только язык. Схемный ввод умер. Схематик соглашусь, да, умер, но не схемный ввод. Много в BD делается быстрее и проще чем кодом, особенно если собирать систему из готовых компонентов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 9 декабря, 2020 Опубликовано 9 декабря, 2020 · Жалоба 1 минуту назад, des00 сказал: Много в BD делается быстрее и проще чем кодом, особенно если собирать систему из готовых компонентов. С этим я согласен. Если рисование BD тоже называть схемным вводом, то тоже согласен. Но всё-таки IP и примитивы несколько разные сущности. Я по схемным вводом подразумевал именно "рисование" проекта из примитивов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться