Использование * для умножения двоичных чисел дает мне только сложение, почему? (Код здесь)

Я изучаю операции с "+", "-" и "*", сложение и вычитание работает хорошо, но умножение дает мне только сложения, ссылка на код:

http://www.edaplayground.com/x/NvT

Я проверил код, не могу понять, что происходит. Я дал достаточно места (бит) переменной результата.

Кстати, это код, предназначенный для операций с фиксированной точкой, включая дробные числа, но все вычисляется как целые числа.


person sujeto1    schedule 09.02.2016    source источник
comment
Ваши входные данные (valor_a) 16-битные, но в тестовом стенде назначаются 32-битные.   -  person Morgan    schedule 09.02.2016
comment
Спасибо, Морган. Я получил -1 в оценке. Я хочу знать, есть ли что-то неправильное в формулировке моего вопроса, чтобы знать в следующий раз, прежде чем задавать другой, чтобы соблюдать правила форума. Спасибо еще раз.   -  person sujeto1    schedule 10.02.2016
comment
Я бы не беспокоился о -1, близкие голоса - это реальный намек на то, что что-то действительно не так. В следующий раз я бы включил фрагмент кода в вопрос, чтобы он мог работать сам по себе, если EDA Playground отключится. Часто преобразование вашего фрагмента кода в минимально жизнеспособную проблему, которая показывает вашу проблему, действительно полезно. В этом случае это будет просто минимальный пример умножения с удаленным кодом сложения и вычитания.   -  person Morgan    schedule 10.02.2016


Ответы (1)


Ваш сигнал выбора имеет только 1 бит.
Затем, когда вы устанавливаете select = 2, он назначает младший бит 2 (2'b10), т.е. 0.
Вы должны изменить объявление выбора на:

input [1:0] select; // In the module  
reg   [1:0] select; // In the testbench

Чтобы избежать таких ошибок, я бы посоветовал вам использовать полную запись значений:

x'tnnn...nnn

где x — ширина сигнала, t — тип (d — десятичный, h — шестнадцатеричный, b — двоичный,...) и nnn...nnn — значение указанного типа.

Например, для десятичного значения 2 у вас будет несколько обозначений, которые будут иметь смысл в определенных ситуациях:

2'd2 //2 bits decimal
2'h2 //2 bits hexadecimal  
2'b10//2 bits binary

Для получения дополнительной информации об этих обозначениях вы можете прочитать этот файл pdf.

person Krouitch    schedule 09.02.2016
comment
Я исправил это, первые этапы обучения такие сложные, большое спасибо Krouitch. - person sujeto1; 10.02.2016
comment
С удовольствием, я знаю, насколько неприятными могут быть эти крошечные ошибки. Не стесняйтесь задавать вопросы, если вы не уверены. Небольшой побочный момент: чтобы получить правильный дизайн, на мой взгляд, почти обязательно думать об оборудовании, которое будет генерироваться вашим кодом, как о своего рода инструменте синтеза. Как только вы научитесь мыслить аппаратно, станет намного естественнее разрабатывать правильные проекты. Этот веб-сайт вполне подходит для этого, поскольку он переводит простые примеры на уровень ворот. . - person Krouitch; 10.02.2016