jenya7 0 8 февраля, 2017 Опубликовано 8 февраля, 2017 · Жалоба Конечно есть. Прием широко известный и называется "присвоение значения по умолчанию". Переменной в самом начале процесса присваиваете некое удобное вам по каким-то причинам "значение по умолчанию" (например, самое распространенное присвоение в логике процесса), а в нижеследующих case'ах / if'ах присвоение этой переменной будет только для случаев "девиации" от умолчального значения. можно попробовать. спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 8 февраля, 2017 Опубликовано 8 февраля, 2017 · Жалоба можно попробовать. спасибо. Лучше это все же делать в секции when others => ... Так будет нагляднее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
starley 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Лучше это все же делать в секции when others => ... Так будет нагляднее. В секции when others значения по умолчанию в том смысле, в каком это нужно TC, не присвоить - он ведь просто не хочет постоянно задавать значение, которое одинаково для многих секций when, а у when others => другая семантика. Для наглядности лучше просто отдельный case сделать для этой переменной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба Это legacy crap, не используйте это для математики. Используйте только его. Для представления чисел используйте типы signed и unsigned и функции to_integer, to_signed, to_unsigned. Переменные можно использовать только внутри process. Все равно не получается. entity REG_FILE is port ( REG_ADDR_IN : in std_logic_vector(15 downto 0); -- какой то код ); end REG_FILE; architecture behavior of REG_FILE is -- какой то код signal mailbox_idx : integer := 0; process(REG_CLK) begin -- какой то код mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); end process; end behavior; результат mailbox_idx <= to_integer(REG_ADDR_IN); Error (10405): VHDL error at reg_file.vhd(75): can't determine type of object at or near identifier "to_integer" -- found 0 possible types или так mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); Error (10476): VHDL error at reg_file.vhd(75): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type Error (10346): VHDL error at reg_file.vhd(75): formal port or parameter "SIZE" must have actual or default value Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2017 Опубликовано 20 февраля, 2017 (изменено) · Жалоба Все равно не получается. entity REG_FILE is port ( REG_ADDR_IN : in std_logic_vector(15 downto 0); -- какой то код ); end REG_FILE; architecture behavior of REG_FILE is -- какой то код signal mailbox_idx : integer := 0; process(REG_CLK) begin -- какой то код mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); end process; end behavior; результат mailbox_idx <= to_integer(REG_ADDR_IN); Error (10405): VHDL error at reg_file.vhd(75): can't determine type of object at or near identifier "to_integer" -- found 0 possible types или так mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); Error (10476): VHDL error at reg_file.vhd(75): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type Error (10346): VHDL error at reg_file.vhd(75): formal port or parameter "SIZE" must have actual or default value mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); Функция to_unsigned обычно применяется для конвертирования INTEGER ---> UNSIGNED. Обязательно необходимо указывать количество разрядов. т.е to_unsigned(,length) Вот тут отличная картинка по преобразованиям типов при работе с библиотекой numeric_std: https://www.doulos.com/knowhow/vhdl_designe...de/numeric_std/ Изменено 20 февраля, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); mailbox_idx <= to_integer(unsigned(REG_ADDR_IN)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба mailbox_idx <= to_integer(to_unsigned(REG_ADDR_IN)); Функция to_unsigned обычно применяется для конвертирования INTEGER ---> UNSIGNED. Обязательно необходимо указывать количество разрядов. т.е to_unsigned(,length) Вот тут отличная картинка по преобразованиям типов при работе с библиотекой numeric_std: https://www.doulos.com/knowhow/vhdl_designe...de/numeric_std/ делал и так mailbox_idx <= to_integer(TO_unsigned(REG_ADDR_IN,16)); все равно ругается. Error (10476): VHDL error at reg_file.vhd(78): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type mailbox_idx <= to_integer(unsigned(REG_ADDR_IN)); ругается. Error (10621): VHDL Use Clause error at reg_file.vhd(78): more than one Use Clause imports a declaration of simple name "unsigned" -- none of the declarations are directly visible Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2017 Опубликовано 20 февраля, 2017 (изменено) · Жалоба делал и так mailbox_idx <= to_integer(TO_unsigned(REG_ADDR_IN,16)); все равно ругается. Error (10476): VHDL error at reg_file.vhd(78): type of identifier "REG_ADDR_IN" does not agree with its usage as "natural" type ругается. Error (10621): VHDL Use Clause error at reg_file.vhd(78): more than one Use Clause imports a declaration of simple name "unsigned" -- none of the declarations are directly visible А не затруднит ли Вас выложить полный текст модуля, на который ругается Quartus. То, что Вы выложили не содержит REG_ADDR_IN Изменено 20 февраля, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба А не затруднит ли Вас выложить полный текст модуля, на который ругается Quartus. То, что Вы выложили не содержит REG_ADDR_IN вот полный файл. REG_ADDR_IN находиться и поиском и подсветкой. reg_file.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба вот полный файл. REG_ADDR_IN находиться и поиском и подсветкой. Я уже устал повторять: не используйте эти пакеты вместе: use ieee.numeric_std.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; если вы не понимаете, что вы делаете. Более того, use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; не используйте вообще никогда. Точка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2017 Опубликовано 20 февраля, 2017 (изменено) · Жалоба вот полный файл. REG_ADDR_IN находиться и поиском и подсветкой. 1. use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; Не используйте эти библиотеки. 2. STD_LOGIC_VECTOR каждый разряд может принять 9 значений. И когда применяете CASE надо полностью все состояния описать when others => Я поправил, вроде компилируется, но правильность я не проверяю. Не умею с Record работать, не было необходимости. :crying: 3. Уверены, что вообще Record нужен ? 4. А нужен ли асинхронный сброс ? Допустим, сброс вы синхронизировали и REG_DATA_OUT сброситься. А на остальные триггеры этот сигнал будет работать как ENABLE. Это точно то, что вам надо ? ONE_DFF.vhd Изменено 20 февраля, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 (изменено) · Жалоба 1. use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; Не используйте эти библиотеки. 2. STD_LOGIC_VECTOR каждый разряд может принять 9 значений. И когда применяете CASE надо полностью все состояния описать when others => Я поправил, вроде компилируется, но правильность я не проверяю. Не умею с Record работать, не было необходимости. :crying: 3. Уверены, что вообще Record нужен ? 4. А нужен ли асинхронный сброс ? Допустим, сброс вы синхронизировали и REG_DATA_OUT сброситься. А на остальные триггеры этот сигнал будет работать как ENABLE. Это точно то, что вам надо ? спасибо. я их не использую. просто искал проблему, пробовал все подряд. оказалось это и есть проблема use ieee.std_logic_arith.all;. а что вместо рекорд? память? насчет рисета я еще не уверен. это только заготовка. Изменено 20 февраля, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба спасибо. я их не использую. просто искал проблему, пробовал все подряд. оказалось это и есть проблема use ieee.std_logic_arith.all;. а что вместо рекорд? память? насчет рисета я еще не уверен. это только заготовка. А какая задача стоит ? По тексту схемы у меня появилось примерное понимание что необходимо сделать. Но лучше услышать это от Вас. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба А какая задача стоит ? По тексту схемы у меня появилось примерное понимание что необходимо сделать. Но лучше услышать это от Вас. есть 32 пакета по 17 байт. надо в них писать/читать. мне показалоь рекорд удобней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 февраля, 2017 Опубликовано 20 февраля, 2017 · Жалоба есть 32 пакета по 17 байт. надо в них писать/читать. мне показалоь рекорд удобней. А не проще ли использовать классическую блочную память, которая есть почти во всех FPGA ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться