jenya7 0 Posted May 12, 2020 · Report post Так не работает if (num < 38 and num < R_CNT) then end if; а так работает if (num < R_CNT) then end if; я что то не понимаю? Quote Ответить с цитированием Share this post Link to post Share on other sites
dvladim 0 Posted May 12, 2020 · Report post Скобки, сэр ))) Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 12, 2020 · Report post 1 hour ago, dvladim said: Скобки, сэр ))) добавил. не помогло. Quote Ответить с цитированием Share this post Link to post Share on other sites
SII 0 Posted May 12, 2020 · Report post А зачем ставить вообще внешние скобки? VHDL -- не Верилог, в нём эти скобки не нужны. И уж точно здесь скобки никак не скажутся: из-за строгой типизации and не будет выполнено не с тем, с чем надо, компилятор ругаться будет. Только вот непонятно, что значит "не работает"? Если чисто num < R_CNT работает, то зачем проверка на num < 38? И как определены эти самые num и R_CNT? Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted May 12, 2020 · Report post 1 hour ago, SII said: А зачем ставить вообще внешние скобки? VHDL -- не Верилог, в нём эти скобки не нужны. И уж точно здесь скобки никак не скажутся: из-за строгой типизации and не будет выполнено не с тем, с чем надо, компилятор ругаться будет. Только вот непонятно, что значит "не работает"? Если чисто num < R_CNT работает, то зачем проверка на num < 38? И как определены эти самые num и R_CNT? num должен быть меньше 38 и в то же время меньше R_CNT. но я посмотрел num - std_logic_vector и так сравнивать конечно нельзя (< 38). странно что квартус не ругается. Quote Ответить с цитированием Share this post Link to post Share on other sites
Nemos760 0 Posted September 11, 2020 · Report post On 5/12/2020 at 12:44 PM, jenya7 said: num должен быть меньше 38 и в то же время меньше R_CNT. но я посмотрел num - std_logic_vector и так сравнивать конечно нельзя (< 38). странно что квартус не ругается. Просматривал темы, стало интересно, что квартус не ругался. В модуле случайно не была подключена библиотека ieee.std_logic_signed? Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted September 11, 2020 · Report post У меня все работает. Вот пример кода: 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; Вот результат работы : Quote Ответить с цитированием Share this post Link to post Share on other sites
Nemos760 0 Posted September 15, 2020 · Report post А если numeric_std заменить на std_logic_signed? Мне кажется там условие будет всегда выполняться, проверить пока не могу, а интересно. Jenya7 не привёл же весь текст модуля Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted September 15, 2020 · Report post 2 hours ago, Nemos760 said: А если numeric_std заменить на std_logic_signed? Мне кажется там условие будет всегда выполняться, проверить пока не могу, а интересно. Jenya7 не привёл же весь текст модуля поэтому и рабротает что std_logic_signed у меня std_logic_vector. Quote Ответить с цитированием Share this post Link to post Share on other sites
Flip-fl0p 0 Posted September 15, 2020 · Report post А у меня все работает ровно так, как я опишу. Секрет прост - использовать только стандартные библиотеки. Quote Ответить с цитированием Share this post Link to post Share on other sites
Nemos760 0 Posted September 15, 2020 (edited) · Report post Если это камень в мой огород, то я тоже использую numeric_std, но был опыт и с библиотеками signed, unsigned и arith, поэтому и вспомнил. Собственно перестал их использовать, когда похожие эффекты возникли при написании ких-фильтра. Плюс ещё и ограничение, что можно использовать только signed или только unsigned, в общем лучше стандартная, хоть и преобразования иногда нужны дополнительные Edited September 15, 2020 by Nemos760 Quote Ответить с цитированием Share this post Link to post Share on other sites
jenya7 0 Posted September 23, 2020 (edited) · Report post а если нужен std_logic_vector? Edited September 23, 2020 by jenya7 Quote Ответить с цитированием Share this post Link to post Share on other sites
wolfman 0 Posted September 23, 2020 · Report post Использовать преобразование типов. Вот тут пример Quote Ответить с цитированием Share this post Link to post Share on other sites