jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба Так не работает if (num < 38 and num < R_CNT) then end if; а так работает if (num < R_CNT) then end if; я что то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба Скобки, сэр ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 hour ago, dvladim said: Скобки, сэр ))) добавил. не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба А зачем ставить вообще внешние скобки? VHDL -- не Верилог, в нём эти скобки не нужны. И уж точно здесь скобки никак не скажутся: из-за строгой типизации and не будет выполнено не с тем, с чем надо, компилятор ругаться будет. Только вот непонятно, что значит "не работает"? Если чисто num < R_CNT работает, то зачем проверка на num < 38? И как определены эти самые num и R_CNT? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 мая, 2020 Опубликовано 12 мая, 2020 · Жалоба 1 hour ago, SII said: А зачем ставить вообще внешние скобки? VHDL -- не Верилог, в нём эти скобки не нужны. И уж точно здесь скобки никак не скажутся: из-за строгой типизации and не будет выполнено не с тем, с чем надо, компилятор ругаться будет. Только вот непонятно, что значит "не работает"? Если чисто num < R_CNT работает, то зачем проверка на num < 38? И как определены эти самые num и R_CNT? num должен быть меньше 38 и в то же время меньше R_CNT. но я посмотрел num - std_logic_vector и так сравнивать конечно нельзя (< 38). странно что квартус не ругается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nemos760 0 11 сентября, 2020 Опубликовано 11 сентября, 2020 · Жалоба On 5/12/2020 at 12:44 PM, jenya7 said: num должен быть меньше 38 и в то же время меньше R_CNT. но я посмотрел num - std_logic_vector и так сравнивать конечно нельзя (< 38). странно что квартус не ругается. Просматривал темы, стало интересно, что квартус не ругался. В модуле случайно не была подключена библиотека ieee.std_logic_signed? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 сентября, 2020 Опубликовано 11 сентября, 2020 · Жалоба У меня все работает. Вот пример кода: library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity example is port ( num : in unsigned(7 downto 0); R_CNT : in unsigned(7 downto 0); out_TDATA : out std_logic ); end entity; architecture RTL of example is begin process ( num, R_CNT ) begin if (num < 38 and num < R_CNT) then out_TDATA <= '1'; else out_TDATA <= '0'; end if; end process; end architecture; Вот тестбенч : library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity example_tb is end entity; architecture RTL of example_tb is signal num : unsigned(7 downto 0); signal R_CNT : unsigned(7 downto 0); signal out_TDATA : std_logic; begin DUT : entity work.example port map ( num => num , R_CNT => R_CNT , out_TDATA => out_TDATA ); process begin num <= to_unsigned(32,8); R_CNT <= to_unsigned(15,8); wait for 50 ns; num <= to_unsigned(32,8); R_CNT <= to_unsigned(80,8); wait for 50 ns; num <= to_unsigned(77,8); R_CNT <= to_unsigned(96,8); wait for 50 ns; num <= to_unsigned(77,8); R_CNT <= to_unsigned(37,8); wait for 50 ns; num <= to_unsigned(55,8); R_CNT <= to_unsigned(43,8); wait for 50 ns; num <= to_unsigned(38,8); R_CNT <= to_unsigned(38,8); wait for 50 ns; num <= to_unsigned(38,8); R_CNT <= to_unsigned(39,8); wait for 50 ns; num <= to_unsigned(37,8); R_CNT <= to_unsigned(38,8); wait; end process; end architecture; Вот результат работы : Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nemos760 0 15 сентября, 2020 Опубликовано 15 сентября, 2020 · Жалоба А если numeric_std заменить на std_logic_signed? Мне кажется там условие будет всегда выполняться, проверить пока не могу, а интересно. Jenya7 не привёл же весь текст модуля Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 15 сентября, 2020 Опубликовано 15 сентября, 2020 · Жалоба 2 hours ago, Nemos760 said: А если numeric_std заменить на std_logic_signed? Мне кажется там условие будет всегда выполняться, проверить пока не могу, а интересно. Jenya7 не привёл же весь текст модуля поэтому и рабротает что std_logic_signed у меня std_logic_vector. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 15 сентября, 2020 Опубликовано 15 сентября, 2020 · Жалоба А у меня все работает ровно так, как я опишу. Секрет прост - использовать только стандартные библиотеки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nemos760 0 15 сентября, 2020 Опубликовано 15 сентября, 2020 (изменено) · Жалоба Если это камень в мой огород, то я тоже использую numeric_std, но был опыт и с библиотеками signed, unsigned и arith, поэтому и вспомнил. Собственно перестал их использовать, когда похожие эффекты возникли при написании ких-фильтра. Плюс ещё и ограничение, что можно использовать только signed или только unsigned, в общем лучше стандартная, хоть и преобразования иногда нужны дополнительные Изменено 15 сентября, 2020 пользователем Nemos760 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 сентября, 2020 Опубликовано 23 сентября, 2020 (изменено) · Жалоба а если нужен std_logic_vector? Изменено 23 сентября, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wolfman 0 23 сентября, 2020 Опубликовано 23 сентября, 2020 · Жалоба Использовать преобразование типов. Вот тут пример Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться