RobFPGA 27 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба Приветствую! 27 minutes ago, Maverick_ said: http://aperiodic.net/phil/archives/Geekery/find-duplicate-elements.html " ... Since there are n values from 1 to n-1 with one duplicate ...." 37 minutes ago, ЕвгенийЗлыднев said: Все понял про что вы :-) Про количество входных сигналов . Ох ... 37 minutes ago, ЕвгенийЗлыднев said: Но он все равно не работает На сколько могу судить по картинке вы не на симе проверяете, а сразу в железе? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ЕвгенийЗлыднев 0 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба 14 минут назад, RobFPGA сказал: Приветствую! " ... Since there are n values from 1 to n-1 with one duplicate ...." Ох ... На сколько могу судить по картинке вы не на симе проверяете, а сразу в железе? Удачи! Rob. В симуляторе проверяю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба Приветствую! 1 minute ago, ЕвгенийЗлыднев said: В симуляторе проверяю. Тогда странно что i,j меняются не по клоку - что за сим такой ? Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ЕвгенийЗлыднев 0 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба 3 минуты назад, RobFPGA сказал: Приветствую! Тогда странно что i,j меняются не по клоку - что за сим такой ? Удачи! Rob. Меняются по клоку. Модел сим это. Сделал так чтобы i менялось по нормально, но чет все равно не работает. Число нормально не защелкивается из temp в nomer. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 12 сентября, 2019 Опубликовано 12 сентября, 2019 · Жалоба Приветствую! 4 minutes ago, ЕвгенийЗлыднев said: Меняются по клоку. Модел сим это. Сделал так чтобы i менялось по нормально Не жадничайте выводить на wave все важные сигнала. Сделайте i, j, cal, donev видимыми - проще будет понимать что и как. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Skryppy 0 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба Добавил второй проход по массиву. Вроде норм работает. histogram_max_tb.vhd histogram_max.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ЕвгенийЗлыднев 0 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба Доделал свою версию, добавил коменты. -----Author: Zlydnev E.N. -----function: chastye elementy -- Revision history -- Version 1.0 : -- Date: 13/09/2019 -- Comments : Original ---- library IEEE;-- vklychaem biblioteki use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.numeric_std.all; entity chastye_elementy is -- vhodnie/vyhodnye signals port( clk : in std_logic; GO : in std_logic; clr : in std_logic; ------------------------------------------------ ------------------------------------------------ ------------------------------------------------ nomer : out std_logic_vector(7 downto 0);--vyhodnoe chislo ibn1 : in std_logic_vector(7 downto 0);-- chisla vhodnie. ibn2 : in std_logic_vector(7 downto 0);-- ibn3 : in std_logic_vector(7 downto 0);-- -//- ibn4 : in std_logic_vector(7 downto 0);-- -//- ibn5 : in std_logic_vector(7 downto 0);-- -//- ibn6 : in std_logic_vector(7 downto 0);-- -//- ibn7 : in std_logic_vector(7 downto 0);-- -//- ibn8 : in std_logic_vector(7 downto 0);-- -//- ibn9 : in std_logic_vector(7 downto 0); ibn10 : in std_logic_vector(7 downto 0);-- -//- ibn11 : in std_logic_vector(7 downto 0);-- ibn12 : in std_logic_vector(7 downto 0);-- ibn13 : in std_logic_vector(7 downto 0);-- ibn14 : in std_logic_vector(7 downto 0);-- ibn15 : in std_logic_vector(7 downto 0);-- ibn16 : in std_logic_vector(7 downto 0);-- ibn17 : in std_logic_vector(7 downto 0);-- ibn18 : in std_logic_vector(7 downto 0);-- ibn19 : in std_logic_vector(7 downto 0);-- ibn20 : in std_logic_vector(7 downto 0);-- ibn21 : in std_logic_vector(7 downto 0);-- ibn22 : in std_logic_vector(7 downto 0);-- ibn23 : in std_logic_vector(7 downto 0);-- ibn24 : in std_logic_vector(7 downto 0);-- ibn25 : in std_logic_vector(7 downto 0);-- ------------------------------------------ done : out std_logic --kogda vse sdelal ipmuls edinica ); end chastye_elementy; architecture rtl of chastye_elementy is type reg is array (25 downto 1) of std_logic_vector(7 downto 0);--type danyx dlya xraneniya nomerov signal ibn :reg := (others => (others =>'0')); signal i : integer range 0 to 25;-- kolichestvo nomerov = 25 signal j : integer range -25 to 25;-- j peremenaya dlya podcheta elementov sovpavhiz signal temp_nomer : std_logic_vector(7 downto 0);-- promezytochnoe xranenie nomera begin G3: process(clr,clk) variable calk,donev: std_logic;-- peremeniy dlya vychesleniy begin if clr = '1' then -- acinxronyi sbros regictrov ibn <= (others => (others =>'0')); nomer <= (others =>'0'); temp_nomer <= (others =>'0'); i <= 0; calk := '0'; donev := '0'; elsif rising_edge(clk) then -- nachalo raboty donev := '0'; -- done = 0 tak kak rabota idet if go = '1' then -- go = 1 zhachit nahinaem raboty ibn(1) <= ibn1; ibn(2) <= ibn2; ibn(3) <= ibn3; ibn(4)<=ibn4 ;ibn(5)<= ibn5 ; ibn(6) <= ibn6;--vhodnyy infu po registram ibn(7) <= ibn7; ibn(8) <= ibn8; ibn(9) <= ibn9; ibn(10)<= ibn10; ibn(11)<=ibn11 ; ibn(12)<=ibn12 ;--vhodnyy infu po registram ibn(13) <= ibn13; ibn(14)<= ibn14; ibn(15)<= ibn15; ibn(16)<= ibn16; ibn(17)<= ibn17 ; ibn(18) <= ibn18;--vhodnyy infu po registram ibn(19) <= ibn19; ibn(20)<= ibn20; ibn(21) <= ibn21; ibn(22)<=ibn22 ; ibn(23) <= ibn23; ibn(24) <= ibn24;ibn(25)<=ibn25 ;--vhodnyy infu po registram i <= 0;--obnylyaem i j <= 0;--obnylyaem j calk := '1';-- calk = 1 kogda idet vychislenie elsif calk = '1' then -- calk = 1 kogda idet vychislenie if i=25 then -- i=25 znachit konec agoritma nomer <= temp_nomer; -- vydaem okonchatelnyy rezyltat donev := '1'; -- danev = 1 kogda konec alhoritma calk := '0'; -- vychislenie zakonchilosb elsif j = 0 then -- temp_nomer <= ibn(i);-- ecli j=0, to zapisivaem tekyzhiy nomer v temp i<= i + 1; -- inkerement j,i j<= j + 1; else if temp_nomer = ibn(i) then -- esli kandidat = nomery to inkerement j,i i<= i + 1; -- j<= j + 1; else -- esli net to ymenshaem j. I v lybom slychae inkrement i<=i + 1; j<= j - 1; end if; end if; end if; end if; done <= donev;--done = 1 kogda konec alhoritma end process; end rtl; Основная проблема была в неправильном обнулении всех значений в начале алгоритма. И не правильном расположении if else в синхроном блоке(после rising edge). Все остальное почти так и осталось. Работает вроде нормально. Доделаю второй проход, но за одну или две операции. Чтобы быстрее было все это. Спасибо всем кто помогал. Все остальные варианты тоже рассмотрю и постараюсь реализовать/проверить. Ну и сравню со своим кодом по месту. chastye_elementy.vwf chastye_elementy.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться