Я хотел бы реализовать набросок count min с минимальным обновлением и доступом раз.
По сути, входная выборка хэшируется несколькими хеш-функциями (d)
, и каждая из них увеличивает счетчик в сегменте, в который попадает. При запросе выборки счетчики всех сегментов, соответствующих выборке, сравниваются, и в результате возвращается значение наименьшего счетчика.
Я пытаюсь найти минимальное значение счетчиков за log_2(d)
времени с помощью следующего кода:
entity main is
Port ( rst : in STD_LOGIC;
a_val : out STD_LOGIC_VECTOR(63 downto 0);
b_val : out STD_LOGIC_VECTOR(63 downto 0);
output : out STD_LOGIC_VECTOR(63 downto 0);
. .
. .
. .
CM_read_ready : out STD_LOGIC;
clk : in STD_LOGIC);
end main;
architecture Behavioral of main is
impure function min( LB, UB: in integer; sample: in STD_LOGIC_VECTOR(long_length downto 0)) return STD_LOGIC_VECTOR is
variable left : STD_LOGIC_VECTOR(long_length downto 0) := (others=>'0');
variable right : STD_LOGIC_VECTOR(long_length downto 0) := (others=>'0');
begin
if (LB < UB)
then
left := min(LB, ((LB + UB) / 2) - 1, sample);
right := min(((LB + UB) / 2) - 1, UB, sample);
if (to_integer(unsigned(left)) < to_integer(unsigned(right)))
then
return left;
else
return right;
end if;
elsif (LB = UB)
then
-- return the counter's value so that it can be compared further up in the stack.
return CM(LB, (to_integer(unsigned(hasha(LB)))*to_integer(unsigned(sample))
+ to_integer(unsigned(hashb(LB)))) mod width);
end if;
end min;
begin
CM_hashes_read_log_time: process (clk, rst)
begin
if (to_integer(unsigned(instruction)) = 2)
then
output <= min(0, depth - 1, sample);
end if;
end if;
end process;
end Behavioral;
Когда я запускаю приведенный выше код, я получаю следующие ошибки:
Симулятор неожиданно завершил работу. Подробности смотрите в журнале моделирования (xsim.log).
[USF-XSim-62] Шаг компиляции завершился неудачно с ошибкой(ами). Пожалуйста, проверьте вывод консоли Tcl или файл '/home/...sim/sim_1/behav/xsim/xvhdl.log' для получения дополнительной информации.
[USF-XSim-62] Шаг «усложнения» не выполнен с ошибкой(ами). Пожалуйста, проверьте вывод консоли Tcl или файл '/home/...sim/sim_1/synth/func/xsim/elaborate.log' для получения дополнительной информации.
Мне не удалось найти ни одного файла с именем xsim.log
, а xvhdl.log
был пуст, но elaborate.log
содержал некоторый контент:
Vivado Simulator 2018.2
Copyright 1986-1999, 2001-2018 Xilinx, Inc. All Rights Reserved.
Running: /opt/Xilinx/Vivado/2018.2/bin/unwrapped/lnx64.o/xelab -wto c199c4c74e8c44ef826c0ba56222b7cf --incr --debug typical --relax --mt 8 -L xil_defaultlib -L secureip --snapshot main_tb_behav xil_defaultlib.main_tb -log elaborate.log
Using 8 slave threads.
Starting static elaboration
Completed static elaboration
INFO: [XSIM 43-4323] No Change in HDL. Linking previously generated obj files to create kernel
Удаление следующей строки устраняет вышеуказанные ошибки:
output <= min(0, depth - 1, sample);
Мои вопросы:
- Почему я не могу смоделировать этот код?
- Будет ли этот код синтезируемым после того, как он заработает?
- Есть ли лучший (и/или более быстрый) способ получить минимум всех соответствующих хеш-баг?
sample
иdepth
не существуют как сигнал/переменная в коде, поэтому их нельзя передать в функцию min. У процесса есть часы и сброс в списке чувствительности, но они не используются в процессе (так что это НЕ синхронный процесс),long_length
не существует.hasha
иhashb
не существуют. Пожалуйста, предоставьте MCVE - person Tricky   schedule 22.08.2019min
не всегда возвращает значение — нет предложенияelse
для обработки случаяLB > UB
. Почти наверняка поэтому код не скомпилируется. Проблема, которая также является проблемой: ваша функцияmin
не должна бытьimpure
. См. этот справочник, в котором описываются различия между чистыми и нечистыми функциями в VHDL: vhdlwhiz.com/function - person Mr. Snrub   schedule 22.08.2019min
, у вас все равно будут проблемы. Я ожидаю, что ваш код будет скомпилирован в этот момент, но он все равно не будет работать так, как вы ожидали (ваш процессCM_hashes_read_log_time
не будет иметь желаемого временного поведения) из-за других проблем в коде. - person Mr. Snrub   schedule 22.08.2019