Выбор байта из умножения байтов на байты в VHDL - PullRequest
0 голосов
/ 07 мая 2019

Я пишу очень очень простой процессор на VHDL, который работает с 8-битным потоком.Я хочу включить инструкцию умножения в мой ALU, но умножить только те числа, которые меньше 15, поскольку умножение двух 8-битных чисел приведет к 16-битному числу.Так, например, если бы я хотел умножить 4 и 7, у меня было бы 0000 0100 x 0000 0111, и результат был бы 00011000.

Поэтому я написал следующее:

result <= std_logic_vector(unsigned(x)*unsigned(y));

Но так как я работаю в 8-битной системе, мой сигнал результата представляет собой 8-битный стандартный логический вектор, и ISE выдает мне сообщение об ошибке, когда я пытаюсь выполнить это назначение.Так как я просто хочу 8 младших значащих битов числа, я попытался

result <= std_logic_vector(unsigned(x)*unsigned(y))(7 downto 0);

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

Есть ли способ выбрать младшие значащие биты умножения без необходимости создания отдельного сигнала?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 мая 2019

После некоторых поисков я пришел к выводу, что ответ на вопрос "Есть ли способ выбрать наименее значимые биты умножения без необходимости создавать отдельный сигнал?" нет , так как я не могу индексировать функцию, подобную std_logic_vector.

Это необходимо сделать, создав промежуточный сигнал, например

mult <= std_logic_vector(usigned(x) * unsigned (y));

А потом

result <= mult(7 downto 0);
...