Каков наилучший способ умножения с фиксированной/плавающей запятой?

В общем, есть два метода, как я знаю, что такое умножение с фиксированной/плавающей запятой. Я инженер по оборудованию, такой как Verilog.

1. Односторонний Verilog - умножение с плавающей запятой

2. Другой способ: сдвинуть влево «‹‹», затем сдвинуть вправо «>>»

Я думаю, что выше способы, результаты которых одинаковы. Но я не уверен, поэтому я спрашиваю здесь, что я хочу знать, какой способ использовать и исправить?

Обновление1.

I think there are some way what multiplication in verilog.

1. способ один.

What if I want to multipicate with 3.82 *2.581.
Then we can make integer above fractional numbers like this.
3.98*8  = 31.84.
What if we want only integer result then we could like this way to calculate .
3.98<<7 =3.98 * 2^7  = almost 509.
Then we can get 509 * 8 = 4072
Then we can 31 at 4072>>7.

2. способ второй. 3.98 = почти 'b11_111110101... Здесь мы можем выбрать глубину костюма для вычисления умножения. 8 = 'b1000 11_11111010 * 1000 = (4 int), (0 frac) * (2 int), (8 frac) 11 1111101000 = 8144 Тогда мы получим 8144*2^-8 = 31,8125

обновление 2

Меня смущает умножение между , как я могу применить фиксированную дробь к целое число и Verilog — умножение с плавающей запятой

Какой способ лучше?


person bural    schedule 17.12.2015    source источник
comment
Я не уверен, что вы спрашиваете. Вы спрашиваете, как сделать дробное число и ищете фиксированную точку против плавающей запятой или как выполнить умножение с фиксированной точкой. ваша ссылка 1 просто описывает, как интерпретировать результат *, << then>> Я думаю, что обсуждается реализация множителя, а не интерпретация данных с фиксированной точкой.   -  person Morgan    schedule 17.12.2015
comment
@Морган. Я спрашиваю о том, какой метод умножения лучше между первым и вторым. Я думаю, что все вышеперечисленное касается умножения в фиксированной точке. Я пропал?   -  person bural    schedule 18.12.2015
comment
Лучше как? Простота реализации, обслуживания, более быстрая или низкая мощность. Добавление смены можно разделить на несколько циклов, поэтому скорость передачи данных по сравнению с тактовой частотой также следует учитывать.   -  person Morgan    schedule 18.12.2015
comment
@ Морган, но я думаю. Даже сдвиг и добавление могут быть разделены на несколько циклов, но я думаю, что это лучше, чем в отношении простоты и обслуживания, не так ли? Когда-то производительность дизайнерского программного обеспечения была очень хорошей, в настоящее время он просто используется непосредственно в verilog.   -  person bural    schedule 18.12.2015
comment
Что может быть проще одной строчки кода. Мул = а*б; и это позволяет инструментам оптимизировать синхронизацию проще, чем конкретная реализация.   -  person Morgan    schedule 18.12.2015
comment
@Morgan Кстати, если бы мы рассчитывали умножение с плавающей запятой, то должны ли мы были бы рассчитывать, как если бы это была фиксированная точка?   -  person bural    schedule 18.12.2015
comment
Извините, я не уверен, что следовал этому, но * не может быть синтезирован для операций с плавающей запятой только для целой или фиксированной точки.   -  person Morgan    schedule 18.12.2015


Ответы (1)


Лучший способ выполнить арифметику с фиксированной точкой — использовать библиотеку с фиксированной точкой, которая (надеюсь) была тщательно написана и отлажена. Вы используете Verilog, поэтому просто найдите в Google «библиотека с фиксированной точкой Verilog». Вы найдете это

http://opencores.org/project,verilog_fixed_point_math_library

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

person Graham Asher    schedule 17.12.2015