andrew_b 14 23 января, 2018 Опубликовано 23 января, 2018 · Жалоба Но столкнулся с проблемой, что меняя индексы строки т.е проводя записи в memory(0, 0) , memory(0, 1) memory(0, 2) итд. у меня данные пишутся только по адресу memory(0, 0).Код покажите. Ну и второй вопрос. А каким образом можно аналогичный массив создать (чтобы можно было обращаться к данным по адресу строки и столбца) в неситезируемом подмножестве VHDL, для минимизации вычислительных ресурсов. От массива никуда не уйти всё равно. Для минимизации ресурсов используйте переменную, а не сигнал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 23 января, 2018 Опубликовано 23 января, 2018 · Жалоба Вроде разобрался в проблеме ! Проблемой оказалась то, что у меня адрес из типа std_logic_vector конвертировался в тип integer. Но в векторе адреса у меня присутствовали безразличные значения. И при конвертации в integer из -за этих безразличных значений integer всегда оставался нулем. Например: Есть шина адреса addr : in std_logic_vector(3 downto 0) В моей модели памяти данная шина мультиплексированная (модель SDRAМ потому-что) Поэтому адрес фактически у меня передавался за 2 этапа. В первом этапе у меня декодировался адрес строки. Потом декодировался адрес столбца. row_addr <= to_integer(unsigned(A)); -- к примеру адрес строки b"1111" т.е 15 col_addr <= to_integer(unsigned(A)); -- А в случае столбца адрес выглядел так: b"--11" т.е 3. Т.е первые 2 бита безразличны. Из-за безразличных значений адрес столбца всё время декодировался как 0... Буду теперь внимательнее быть :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба Господа, а можете объяснить в чем особый смысл применения типа record в VHDL ? Ну да, удобно когда вместо кучи выходных\входных портов - применяется готовый тип. Но за это мы платим ухудшением читаемости кода. Во всяком случае мне такой код понимать сложнее. Более того разрядность векторов такого типа не всегда можно настраивать параметрами. Нпример если я в пакете обьявлю такой тип, то в пакет я не могу передать параметры с модуля верхнего уровня (во всяком случае Quartus 13.1 не поддерживает эту фичу VHDL 2008) Читал статью http://www.gaisler.com/doc/vhdl2proc.pdf и др. Но как-то не впечатлило... Если не сложно поделитесь пожалуйста примерами, когда применение типа record оправдано и позволяет упростить код и улучшит его читаемость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 4 апреля, 2018 Опубликовано 4 апреля, 2018 · Жалоба Господа, столкнулся с некоторым неудобством при работе с "безразличными" значениями. В VHDL есть так называемые безразличные значения, которые дают подсказку синтезатору, что нам все-равно какое значение у сигнала, что позволяет более корректно описать поведение схемы, и дает больше свободы для синтезатора, например: ... constant dont_care : std_logic_vector(31 downto 0) := (others => '-'); signal a : std_logic; signal b : std_logic_vector(31 downto 0); signal c : natural range 0 to 511; ... a <= '-'; -- Присваиваем сигналу а безразличное значение. b <= (others => '-'); -- Присваиваем вектору b безразличное значение. c <= to_integer(unsigned(dont_care)); -- Присваиваем числу c безразличное значение. ... Но неудобство возникает, когда есть сигнал типа integer/natural. Т.к для того, чтобы ему присвоить безразличное значение приходится объявлять константу, содержащую безразличное значение. И через преобразования типов присваивать эту константу. Жить конечно можно. Но не очень удобно. А по-другому никак не присвоить такое значение для типа integer. Во всяком случае у меня не получается... Как можно по-другому присвоить безразличное значение для integer ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться