Sergiysss 0 16 декабря, 2016 Опубликовано 16 декабря, 2016 · Жалоба Уважаемые пользователи форума - у меня такой вопрос (дабы посоветоваться): Дано: 1)Есть математический объект -> представляет собой 5 переменных шириной 32 бита , глубиной 160 logic [31:0] obj [160][5]; 2)Есть шина загрузки ld[63:0] шириной 64 бита. Вопрос как сделать вернее? За один шаг я могу грузить сразу 2 переменные, в двумерном массиве это выглядит так если привязаться к строкам: [0] [0] , [0] [1]; [0] [2] , [0] [3]; [0] [4] , [x] [x]; [1] [0] , [1] [1]; Такой стиль удобен с точки зрения написания функции записи. Второй вариант не привязываться к строке. [0] [0] , [0] [1]; [0] [2] , [0] [3]; [0] [4] , [1] [0]; [1] [1] , [1] [2]; Прирост к скорости загрузки становится *1/6; Однако не очень удобно оперировать такими значениями - наверно придется ручками прописывать (возможно через generate) все 400 комбинаций Третий вариант уйти от реального двумерного объекта к абстрактному одномерному и оперировать с ним. logic [31:0] obj [800] Кто как считает? Заранее спасибо и + к карме. //P.S. - синтез будет не на ПЛИС, а как starblock SoC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 16 декабря, 2016 Опубликовано 16 декабря, 2016 · Жалоба Приветствую! Уважаемые пользователи форума - у меня такой вопрос (дабы посоветоваться): Дано: 1)Есть математический объект -> представляет собой 5 переменных шириной 32 бита , глубиной 160 logic [31:0] obj [160][5]; ... //P.S. - синтез будет не на ПЛИС, а как starblock SoC. А с противоположной стороне загрузки каков предполагаемый "ландшафт" этого объекта - плоская равнина усеянная булыжниками регистров или приятная взору холмистая местность блоков памяти ? А может это будет единственный горный пик :yeah: ? Удачи! Rob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 16 декабря, 2016 Опубликовано 16 декабря, 2016 · Жалоба Уважаемые пользователи форума - у меня такой вопрос (дабы посоветоваться): Дано: 1)Есть математический объект -> представляет собой 5 переменных шириной 32 бита , глубиной 160 logic [31:0] obj [160][5]; 2)Есть шина загрузки ld[63:0] шириной 64 бита. Вопрос как сделать вернее? За один шаг я могу грузить сразу 2 переменные, в двумерном массиве это выглядит так если привязаться к строкам: [0] [0] , [0] [1]; [0] [2] , [0] [3]; [0] [4] , [x] [x]; [1] [0] , [1] [1]; Такой стиль удобен с точки зрения написания функции записи. Второй вариант не привязываться к строке. [0] [0] , [0] [1]; [0] [2] , [0] [3]; [0] [4] , [1] [0]; [1] [1] , [1] [2]; Прирост к скорости загрузки становится *1/6; Однако не очень удобно оперировать такими значениями - наверно придется ручками прописывать (возможно через generate) все 400 комбинаций Третий вариант уйти от реального двумерного объекта к абстрактному одномерному и оперировать с ним. logic [31:0] obj [800] Кто как считает? Заранее спасибо и + к карме. //P.S. - синтез будет не на ПЛИС, а как starblock SoC. двухпортовая память чем не устраивает? PS изобретаем велосипед? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 16 декабря, 2016 Опубликовано 16 декабря, 2016 · Жалоба и почему математики и программисты всегда любят структуры, с которыми невозможно работать в железе? про одновременный доступ к двумерному массиву - забудьте, это вам не процессор с линейной памятью. надо менять шаблон поведения. возьмите 32*5=160 бит (читай: любую удобную) ширину, и 2^N глубину, в виде двухпортового ОЗУ. это будут более-менее вменяемый вариант в ASIC/SoC. таких двухпортовых ОЗУ может быть несколько, 2-4-8, что может помочь, например, при квазицикличности в применяемых формулах, или прочих удобных приемах. при этом удобно вычисления разбить, и выполнять вычисления по шагам 1-2-3-4-5, таким образом сохраняя результат на каждом шаге в новой структуре (следующем ОЗУ, нужной разрядности), формируя таким образом конвейер. общее правило: формируйте ОЗУ так, чтобы непосредственно вынимаемые из него данные было удобно сразу использовать. Это правило сформулировано так, поскольку тайминги вывода сигналов из памяти - весьма неважные, и их надо либо сразу использовать, либо регистрить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiysss 0 16 декабря, 2016 Опубликовано 16 декабря, 2016 (изменено) · Жалоба Приветствую! А с противоположной стороне загрузки каков предполагаемый "ландшафт" этого объекта - плоская равнина усеянная булыжниками регистров или приятная взору холмистая местность блоков памяти ? А может это будет единственный горный пик :yeah: ? Удачи! Rob С противоположной стороны зада в виде выгрузки либо по 160 бит (5) переменных либо по 128 (4) переменные. И так по кругу - так сказать циклическая память. Скорей всего эту задачу можно решить с точки зрения памяти... Однако есть схожая задача где нужно иметь доступ сразу к 20ти ячейкам одномерного массива... что наверно будет представлять из себя регистры и много... много проводков... и почему математики и программисты всегда любят структуры, с которыми невозможно работать в железе? про одновременный доступ к двумерному массиву - забудьте, это вам не процессор с линейной памятью. надо менять шаблон поведения. возьмите 32*5=160 бит (читай: любую удобную) ширину, и 2^N глубину, в виде двухпортового ОЗУ. это будут более-менее вменяемый вариант в ASIC/SoC. таких двухпортовых ОЗУ может быть несколько, 2-4-8, что может помочь, например, при квазицикличности в применяемых формулах, или прочих удобных приемах. при этом удобно вычисления разбить, и выполнять вычисления по шагам 1-2-3-4-5, таким образом сохраняя результат на каждом шаге в новой структуре (следующем ОЗУ, нужной разрядности), формируя таким образом конвейер. общее правило: формируйте ОЗУ так, чтобы непосредственно вынимаемые из него данные было удобно сразу использовать. Это правило сформулировано так, поскольку тайминги вывода сигналов из памяти - весьма неважные, и их надо либо сразу использовать, либо регистрить. Вот так и я о том же... Я вообщем то всегда оперировал битами. И вообщем-то была у меня схожая структура (память регистрового типа). Так вот моего начальника смутила размерность разводки для 56000 бит. Вот и говорили сегодня о том что нужно применять объектный подход и оперировать объектами. Что абстрактный массив памяти не может быть верным. А вот переменная (в данном случае 32 бита) это объект реальный. И для верности схемы нужно отталкиваться от объектов. Собственно и создал тему посоветоваться. Вообщем понял что у меня провал в области ОЗУ и использования ее в проектах на verilog. Кто может посоветовать, что почитать? :( Я вообщем-то думал что память создается массивом reg, а потом синтезируется с помощью специальной программы. Изменено 16 декабря, 2016 пользователем Sergiysss Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 17 декабря, 2016 Опубликовано 17 декабря, 2016 · Жалоба Я вообщем то всегда оперировал битами. И вообщем-то была у меня схожая структура (память регистрового типа).Извините, но запомните ради всего святого: В общем, слова "вообщем" не существует. Вообще не существует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться