умножение в многоцикловой записи данных с нуля - PullRequest
0 голосов
/ 31 октября 2010

Я хотел знать, как процессор выполняет умножение в многоцикловом тракте данных с самого начала, т. Е. Из чтения инструкций -> декодирование инструкций -> чтения файлов регистров и т. Д.

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

Можете ли вы также рассказать о делении?

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

Другая хорошая ссылка - это ядро ​​микропроцессора OpenFire с открытым исходным кодом, вариант / аналог MicroBlaze (который основан на DLX) здесь:

http://opencores.org/websvn,listing?repname=openfire_core&path=%2Fopenfire_core%2Ftrunk%2Fopenfire_top_syn%2Fhdl%2Fverilog%2F#path_openfire_core_trunk_openfire_top_syn_hdl_verilog_

Часть пути к данным для блока ALU и умножителя находится в файле openfire_primitives.v.

Руководство по каналу данных DLX с хорошим объяснением конвейера киосков и пузырей равно

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/hazards.html

И есть информация о многоцикловых операциях (DLX)

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/multicycle.html

Таким образом, операция, которая может оставаться в конвейере (нужно больше тиков), будет вставлять в конвейер киоски (или пузырьки). Вы можете думать об этом как об остановке всех этапов конвейера, кроме EX, которые выполняют длинную операцию в течение нескольких операций.

Еще одно подразделение Mul / Div с открытым исходным кодом Verilog находится здесь: http://opencores.org/websvn,filedetails?repname=openrisc&path=%2Fopenrisc%2Ftrunk%2For1200%2Frtl%2Fverilog%2For1200_mult_mac.v

1 голос
/ 10 ноября 2010

Для простого умножения процессора будет на фазе EX конвейера ЦП. Поэтому извлекайте инструкции, декодируйте их, запрашивайте входные операнды в RegisterFile, выполняйте фактическое умножение на ALU.

Зависит от варианта ALU, умножение может занять 1 цикл ЦП или более (с сохранением частичных сумм в каждом цикле ЦП, то это будет на этапах EX0, EX1, EX2 и т. Д. Конвейера ЦП). Медленные ALU могут быть переданы по конвейеру, так что это даст результат первой операции за N тиков и запустит различные операции каждый M

Различные аппаратные варианты множителей вы можете получить на странице http://www.aoki.ecei.tohoku.ac.jp/arith/mg/algorithm.html

...