2016-12-16 3 views
0

У меня есть два входных векторовЛучший способ описать в Verilog

wire [4:0] pow; 
wire [12:0] number; 

и один выходной вектор

wire [43:0] result; 

В результате,

result = number * (2^pow) 

в программировании, это будет эквивалентно изменение numberpow раз есть. Какая может быть самая быстрая и наименее затратная схема для этой задачи и как ее описать в Verilog?

Редактировать: Я хочу подчеркнуть, что вопрос заключается не только в том, как поставить то, что мне нужно, в Verilog, но и объяснить, что происходит в синтезе. Если вы пишете result = number << pow;, так как @ dave_59 советует вызывать выделение тысяч проводов и логических элементов, я бы, вероятно, рассмотрел синхронный последовательный сдвиг.

Edit1: Что мне нужно, может быть реализован сдвиговый объяснил here, но не детализирует, сколько ресурсов он будет принимать в дополнение ко второму размеру data_in.

+1

Я не знаю о Verilog, но повышение числа до мощности не эквивалентно смещению числа влево. – user4034932

+0

OMG Извините, сделанный ошибка, я отредактировал вопрос – Anonymous

ответ

1

Используйте сдвиг влево

result = number << pow; 
+1

Является ли это немедленной операцией (поскольку часы не задействованы) и в какую схему она синтезируется? – Anonymous

+0

Участие часов может зависеть от вашего фактического оборудования. И в любом случае для переключения часов понадобится. –

0

Я закончил выполнение клона сдвига с использованием векторной части выборки на, шинный размер 31 бит и сдвига часть 9 битов добавляют 83 логических элементов и 86 комбинационные функции. Я думаю, что это сопоставимо с условным оператором.

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