2015-06-28 5 views
0

Я разрабатываю код на VHDL, и мне нужно сделать операцию вычитания на векторный вектор std. Я пытался определить и использовать следующие библиотеки:VHDL: Subtract std_logic_vector

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 
use ieee.std_logic_arith.all; 

тогда я определил сигналы, как:

signal r0,r1,r2,r3,r4,r5,r6,r7: STD_LOGIC_VECTOR (19 DOWNTO 0); 

, то я хотел бы сделать следующее вычитание:

 r0 <= r0(16 downto 8) - r0(7 downto 0); 

Но это дает мне ошибка в операторе «-». Ошибка говорит:

Ошибка (10327): ошибка в VHDL euclidian_vhd_hls.vhd (84): не может определить определение оператора "" - "" - найдено 0 возможных определений

Пожалуйста, помогите мне решить эту проблему.

Большое спасибо.

ответ

0

Я нашел ответ использовать следующий синтаксис:

r0 <= std_logic_vector(unsigned(r0(16 downto 8)) - unsigned(r0(7 downto 0))); 

Я проводил к этому раствору по this Stackoverflow question

+0

Если вы имитируете, это приведет к ошибке времени выполнения при инициализации, даже если оно анализирует и разрабатывает. Выражение в правой части (длина 9) не имеет той же длины, что и цель в левой части (длина 20). IEEE Std 1076-2008, 14.7.3.4 Обновление сигнала: «Если S представляет собой составной сигнал (включая срез массива), эффективное значение S неявно преобразуется в подтип S. Преобразование подтипа проверяет, что для каждого элемента из S есть соответствующий элемент в эффективном значении и наоборот. Произошла ошибка, если эта проверка завершилась неудачей ». – user1155120

0

Я думаю, что вы логика не работает, becouse применить r0 Onn r0, то бесконечность петля. вам нужно указать его на процесс с восходящим или спадающим фронтом.

+0

Это, похоже, вообще не затрагивает вопрос (для которого ОП, похоже, все равно нашел ответ). – Eiko

Смежные вопросы