Перейти к содержанию
    

Поиск часто встречающихся элементов в массиве VHDL

Приветствую!

27 minutes ago, Maverick_ said:

" ... Since there are n values from 1 to n-1 with one duplicate ...." :unknw:

37 minutes ago, ЕвгенийЗлыднев said:

Все понял про что вы :-) Про количество входных сигналов .

Ох ... :gamer3:

37 minutes ago, ЕвгенийЗлыднев said:

Но он все равно не работает

На сколько могу судить по картинке вы не на симе проверяете, а сразу в железе? :shok: 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, RobFPGA сказал:

Приветствую!

" ... Since there are n values from 1 to n-1 with one duplicate ...." :unknw:

Ох ... :gamer3:

На сколько могу судить по картинке вы не на симе проверяете, а сразу в железе? :shok: 

Удачи! Rob.

В симуляторе проверяю. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

1 minute ago, ЕвгенийЗлыднев said:

В симуляторе проверяю.

Тогда странно что i,j меняются не по клоку - что за сим такой ? 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, RobFPGA сказал:

Приветствую!

Тогда странно что i,j меняются не по клоку - что за сим такой ? 

Удачи! Rob.

Меняются по клоку. Модел сим это. Сделал так чтобы i менялось по нормально, но чет все равно не работает. Число нормально не защелкивается из temp в nomer. 

21323.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

4 minutes ago, ЕвгенийЗлыднев said:

Меняются по клоку. Модел сим это. Сделал так чтобы i менялось по нормально

Не жадничайте выводить на wave все важные сигнала. Сделайте i, j, cal, donev видимыми - проще будет понимать что и как. 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил второй проход по массиву. Вроде норм работает.

 

histogram_max_tb.vhd

histogram_max.vhd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доделал свою версию, добавил коменты. 

-----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). Все остальное почти так и осталось. Работает вроде нормально. Доделаю второй проход, но за одну или две операции. Чтобы быстрее было все это. Спасибо всем кто помогал. Все остальные варианты тоже рассмотрю и постараюсь реализовать/проверить. Ну и сравню со своим кодом по месту. 

частые, все единицы.JPG

отчет компиляции по элементам.JPG

снимок работы частых элеменетов, норм версия.JPG

частые единицы в начале.JPG

chastye_elementy.vwf

chastye_elementy.vhd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...