Как я могу преобразовать 4-битный стандартный вектор в 5-битный вектор в VHDL? - PullRequest
0 голосов
/ 02 ноября 2018

Я застрял в преобразовании моего 4-битного стандартного вектора в 5-битный. Я должен делать логические и арифметические операции с 4-битными входами. (4 бита ALU) Однако для арифметических операций у меня может быть бит выполнения, и я не знаю, как его сохранить. Вот мой код, я попытался определить временный 5-битный вектор и выполнить temp (4).

    architecture Behavioral of alusmall is
    signal temp: std_logic_vector (4 downto 0);
    begin
    --.--Here we write which operations are launched according to M and S signals:
    temp <= (A and B) when (M='0' and S="00") else
    (A or B) when (M='0' and S="01") else
    (A xor B) when (M='0' and S="10") else
    (A xnor B) when (M='0' and S="11") else
std_logic_vector(unsigned(A) + unsigned(C1)) when (M='1' and S="00") else --.--now, the arithmetic part starts (M is one).
std_logic_vector(unsigned(A) + unsigned(B) + unsigned(C1)) when (M='1' and S="01") else
std_logic_vector(unsigned(A) + unsigned(not B) + unsigned(C1)) when (M='1' and S="10") else
std_logic_vector(unsigned(not A) + unsigned(B) + unsigned(C1));

Как я могу разделить temp (4) и temp (от 3 до 0) в мультиплексоре 4-в-1?

1 Ответ

0 голосов
/ 02 ноября 2018

Добавление в VHDL не приводит к автоматическому увеличению битов. Чтобы учесть бит переноса, просто добавьте '0' к MSB операндов. (добавить бит знака для арифметики со знаком). Это означает, что вы можете просто взять полученный MSB как бит переноса.

например.

op <= ('0' & A) + ('0' & B);
carry <= op(op'high);

числовой стандарт также имеет функцию изменения размера для этого (как для подписи, так и для без знака):

op <= resize(A, op'length) + resize(B, op'length)
carry <= op(op'high);

Еще один момент - почему бы не сделать ваши входы и выходы без знака, а не SLV? тогда вам не понадобятся все преобразования типов (или вы можете использовать библиотеку numeric_std_unsigned из VHDL 2008 для арифметики с std_logic_vector).

...