jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 (изменено) · Жалоба Возникла необходимость сортировать полученные значения. Поскреб по сусекам и получилось вот что. library ieee; use ieee.std_logic_1164.all; package array_type is type sort_array is array (0 to 5) of std_logic_vector(17 downto 0); end package; library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use work.array_type.all; entity SORT is generic ( NBIT : integer := 18 --LENTH : integer := 6 ); port ( CLK : in std_logic; RST : in std_logic; START : in std_logic; LENTH : in std_logic_vector(7 downto 0); READY : out std_logic; IN_ARRAY : in sort_array; OUT_ARRAY : out sort_array; MID : out std_logic_vector(NBIT-1 downto 0) ); end SORT; architecture rtl of SORT is type SortStateType is (ST_IDLE, ST_SORT); signal SortState : SortStateType := ST_IDLE; signal temp_buff : std_logic_vector(NBIT-1 downto 0); signal start1 : std_logic; signal start2 : std_logic; signal start3 : std_logic; signal var_in_array : sort_array; --signal var_out_array : sort_array; begin OUT_ARRAY <= var_in_array; process(CLK) begin if (rising_edge(CLK)) then case SortState is when ST_IDLE => if (START = '1') then READY <= '0'; var_in_array <= IN_ARRAY; SortState <= ST_SORT; end if; when ST_SORT => for j in sort_array'LEFT to sort_array'RIGHT - 1 loop for i in sort_array'LEFT to sort_array'RIGHT - 1 - j loop if unsigned(var_in_array(i)) > unsigned(var_in_array(i + 1)) then temp_buff <= var_in_array(i); var_in_array(i) <= var_in_array(i + 1); var_in_array(i + 1) <= temp_buff; end if; end loop; end loop; READY <= '1'; SortState <= ST_IDLE; end case; end if; end process; end rtl; Есть подозрение что READY <= '1'; выставиться на первой итерации. Это так? Изменено 6 апреля, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба Пора бы уже научиться пользоваться симулятором. Ответ на Ваш вопрос находится за 1 минуту симуляции. Вы уже не первый день работаете с ПЛИС. Почему Вы ещё не освоили базовые навыки работы с симулятором ? Странно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 1 hour ago, Flip-fl0p said: Пора бы уже научиться пользоваться симулятором. Ответ на Ваш вопрос находится за 1 минуту симуляции. Вы уже не первый день работаете с ПЛИС. Почему Вы ещё не освоили базовые навыки работы с симулятором ? Странно... вопрос как раз возник после симуляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 2 минуты назад, jenya7 сказал: вопрос как раз возник после симуляции. Вам что симуляция показала ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 1 hour ago, Flip-fl0p said: Вам что симуляция показала ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 39 минут назад, jenya7 сказал: Есть подозрение что READY <= '1'; выставиться на первой итерации. Это так? А где у вс тут итерации? Тут всё выполняется за один такт. Страшно даже представить, как это синтезтруется. И таки да. Когда вы перешли в состояние ST_SORT, выставляется READY. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 (изменено) · Жалоба 1 hour ago, andrew_b said: А где у вс тут итерации? Тут всё выполняется за один такт. Страшно даже представить, как это синтезтруется. И таки да. Когда вы перешли в состояние ST_SORT, выставляется READY. а как мне перейти в другой стейт? по какому условию? типа какой то счетчик и когда он равен (i * (j-1) ) ? Изменено 6 апреля, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 5 минут назад, jenya7 сказал: Мне кажется Вы немного лукавите. Это очень похоже не на симуляцию, а на логический анализатор signal tap. Поправьте меня если я ошибаюсь. Вы пишите when ST_SORT => for j in sort_array'LEFT to sort_array'RIGHT - 1 loop for i in sort_array'LEFT to sort_array'RIGHT - 1 - j loop if unsigned(var_in_array(i)) > unsigned(var_in_array(i + 1)) then temp_buff <= var_in_array(i); var_in_array(i) <= var_in_array(i + 1); var_in_array(i + 1) <= temp_buff; end if; end loop; end loop; READY <= '1'; В состоянии ST_SORT выставить сигнал READY = 1. Ну и построить некую комбинационную схему (ужасающую комбинационную схему...) а Цитата как мне перейти в другой стейт? по какому условию? типа какой то счетчик и когlа он равен (i * (j-1) ) ? Что значит перейти в другое состояние. У Вашего автомата их всего 2 ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 (изменено) · Жалоба 1 hour ago, Flip-fl0p said: Мне кажется Вы немного лукавите. Это очень похоже не на симуляцию, а на логический анализатор signal tap. Поправьте меня если я ошибаюсь. Вы пишите when ST_SORT => for j in sort_array'LEFT to sort_array'RIGHT - 1 loop for i in sort_array'LEFT to sort_array'RIGHT - 1 - j loop if unsigned(var_in_array(i)) > unsigned(var_in_array(i + 1)) then temp_buff <= var_in_array(i); var_in_array(i) <= var_in_array(i + 1); var_in_array(i + 1) <= temp_buff; end if; end loop; end loop; READY <= '1'; В состоянии ST_SORT выставить сигнал READY = 1. Ну и построить некую комбинационную схему (ужасающую комбинационную схему...) а Что значит перейти в другое состояние. У Вашего автомата их всего 2 ! да. но мне придется остаться в ST_SORT чтоб отработать два for - loop а потом перейти в стейт где я выставлю READY. возможно моя версия ужасна. может есть лучший алгоритм сортировки? Изменено 6 апреля, 2020 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 4 минуты назад, jenya7 сказал: да. но мне придется остаться в ST_SORT чтоб отработать два for - loop а потом перейти в стейт где я выставлю READY. Сначала разберитесь с тем, во что синтезируется ваша схема. А потом думайте на счет сигнала готовности. Вы глубоко заблуждаетесь если думаете, что сортировка выполняется по шагам. Вы пытаетесь выполнить за такт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 1 hour ago, Flip-fl0p said: Сначала разберитесь с тем, во что синтезируется ваша схема. А потом думайте на счет сигнала готовности. Вы глубоко заблуждаетесь если думаете, что сортировка выполняется по шагам. Вы пытаетесь выполнить за такт. да я уже разобрался. поэтому и спрашиваю по какому условию перейти в следующий стейт, назовем его ST_READY. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 4 минуты назад, jenya7 сказал: да я уже разобрался. поэтому и спрашиваю по какому условию перейти в следующий стейт, назовем его ST_READY. Переходите тогда, когда закончатся все переходные процессы в Вашей комбинационной схеме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vt313 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 12 минут назад, jenya7 сказал: да я уже разобрался. поэтому и спрашиваю по какому условию перейти в следующий стейт, назовем его ST_READY. В VHDL цикл for это не количество тактов, это количество оборудования. На вскидку, тяжело сказать, что будет делать такая схема. А сигнал READY, да установится сразу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 1 hour ago, Flip-fl0p said: Переходите тогда, когда закончатся все переходные процессы в Вашей комбинационной схеме. а когда они закончаться? (i * j-1) тактов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 13 минут назад, jenya7 сказал: а когда они закончаться? (i * j-1) тактов? Откуда я могу это знать ? Запустите временной анализатор и посмотрите. Вы вообще читали, что Вам люди пишут. Вы пытались понять, что Вам люди пишут ? Вы вообще имеете хоть малейшее представление во что синтезируется Ваш код на HDL ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться