Kostochkin 0 6 мая, 2019 Опубликовано 6 мая, 2019 (изменено) · Жалоба Здравствуйте. Может глупый вопрос, но я никак не могу разобраться. Стоит задача сложить 9 std_logic_vector(31 downto 0) в один цикл. Максимальна возможная сумма - 35 бит. Если перевести все в integer, то максимальная сумма превысит диапазон integer. Тогда как сложить 9 std_logic_vector(31 downto 0) в один цикл? Благодарю. Изменено 6 мая, 2019 пользователем Kostochkin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба А если перевести в unsigned? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 час назад, Kostochkin сказал: Стоит задача сложить 9 std_logic_vector(31 downto 0) в один цикл. Есть у меня с давних пор "чуйка" на то, что если задается примерно такой вопрос о нестандартном действии, то надо не искать решение для именно этого вопроса, а постараться понять как можно что-то сделать по-другому, чтобы именно такого действия - "сложить 9 std_logic_vector(31 downto 0) в один цикл" не нужно было делать. Потому как при таком сложении без конвейеров Вы подсадите весь проект на более низкую частоту... Ну либо, если компилятор захочет сделать цепи параллельного переноса, то это сожрет прорву логики и интерконнектов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 3 часа назад, Kostochkin сказал: Стоит задача сложить 9 std_logic_vector(31 downto 0) в один цикл. Если это беззнаковые числа, то можно использовать carry save adder. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 5 minutes ago, andrew_b said: Если это беззнаковые числа, то можно использовать carry save adder. а почему со знаковыми нельзя? и, по моему, это имело смысл если делать конвеер и т.д. а для современного синтезатора, без времянки, что дерево CSA, что просто написать а1+а2+...+а9 - без разницы. вопрос, по-моему, про старшие биты, которые не влазят в представление/математику - то есть про конструкцию языка. мой ответ такой :) использовать верилог и в нем logic [34:0] sum; можно даже signed добавить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kostochkin 0 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 3 minutes ago, yes said: а почему со знаковыми нельзя? и, по моему, это имело смысл если делать конвеер и т.д. а для современного синтезатора, без времянки, что дерево CSA, что просто написать а1+а2+...+а9 - без разницы. вопрос, по-моему, про старшие биты, которые не влазят в представление/математику - то есть про конструкцию языка. мой ответ такой :) использовать верилог и в нем logic [34:0] sum; можно даже signed добавить Благодарю, попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 минуту назад, yes сказал: а почему со знаковыми нельзя? Может, и можно, не пробовал. А про беззнаковые знаю точно. 2 минуты назад, yes сказал: а для современного синтезатора, без времянки, что дерево CSA, что просто написать а1+а2+...+а9 - без разницы. В дереве CSA нет переносов. Точнее, есть, но только в одном последнем сумматоре. 3 минуты назад, yes сказал: вопрос, по-моему, про старшие биты, которые не влазят в представление/математику - то есть про конструкцию языка. Целые тут ни при чём. Пакет numeric_std поддерживает суммирование векторов с любой разрядностью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 4 hours ago, andrew_b said: В дереве CSA нет переносов. Точнее, есть, но только в одном последнем сумматоре. я знаю. хотел сказать, что если делать в один такт, то наверно, результат будет одинаковый - описано в языке дерево CSA или просто стоит + и реализация отдана на усмотрение синтезатору (то есть длина логического пути переноса будет такая же). если ставить регистровую станцию после каждой суммы (ну или нескольких ступеней) с сохранением переноса, то может и будет выигрыш, но это конвеер, и все-равно что-то с последним переносом (парой слагаемых) делать - например засунуть в DSP блок (это я фантазирую, не применял CSA в ПЛИС) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 4 hours ago, andrew_b said: Пакет numeric_std поддерживает суммирование векторов с любой разрядностью. я вот так сразу не напишу (а если без интернета, то пришлось бы либо свою операцию/либу писать либо в исходниках рыться) что-то типа resize и т.п. наверно нужно не люблю я этот vhdl Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба https://ece.gmu.edu/coursewebpages/ECE/ECE448/S09/resources/vhdlsources.en.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 10 часов назад, petrov сказал: https://ece.gmu.edu/coursewebpages/ECE/ECE448/S09/resources/vhdlsources.en.htm Тут в картинках https://www.cnblogs.com/shangdawei/archive/2011/01/26/1945829.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 1 минуту назад, Dimidrol сказал: в картинках Картинки для тех, кто читать не умеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться