§ Модуль одной стадии делителя
Это — одна стадия деления, то есть, получение следующего бита.- q - делимое и результат от предыдущей стадии
- b - делитель
- r - остаток от предыдущей стадии
- ro - новый остаток
- qo - результат на следующую стадию
- q - то, что надо поделить (делимое)
- r - остаток равен 0
qo
вдвигается в 0-й бит.На последней стадии:
- qo - результат деления
- ro - остаток от деления
1// Одна стадия деления */ 2module divmod 3#(parameter WIDTH = 32) 4( 5 input wire [(WIDTH-1):0] q, // Делимое 6 input wire [(WIDTH-1):0] b, // Делитель 7 input wire [(WIDTH-1):0] r, // Остаток 8 // ---- 9 output wire [(WIDTH-1):0] ro, // Остаток 10 output wire [(WIDTH-1):0] qo // Ответ 11); 12 13/*_____ _____ 14 | r | q | a - исходное делимое 15 +-----+-----+ b - делитель 16 | b | qo | r - входящий остаток 17 +-----+-----+ 18 | ro | 19 +----*/ 20 21// Сдвиг на один влево и вычитание 22wire [(WIDTH-1):0] next = {r[(WIDTH-2):0], q[WIDTH-1]}; 23wire [ WIDTH :0] subt = next - b; 24 25// Мультиплексор, который определяет новый остаток 26assign ro = subt[WIDTH] ? next : subt[(WIDTH-1):0]; 27 28// Сдвиг делимого влево и заполнение битом результата 29assign qo = {q[(WIDTH-2):0], ~subt[WIDTH]}; 30 31endmodule