18-битное умножение с фиксированной запятой с обработкой переполнения - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь реализовать множитель с фиксированной запятой для ПЛИС Xilinx. Входы a и b представляют собой 18-битные числа с фиксированной точкой в ​​Q9.9 (8-битное целое число, 9-битная дробная часть и 1-битный знак). Я хочу, чтобы результат был снова в нотации Q9.9. Поэтому мне нужно справиться с переполнением промежуточной части. Если результат целочисленного умножения больше 0xFF (d255), тогда мне нужно насытить значение до 255. Теперь я подумал о том, чтобы взять средние 17 битов из результата и назначить младшие 9 битов как дробную часть, а верхние 8 биты являются целочисленной частью. MSB результата является знаком.

Теперь после этого я проверяю, не переполнилась ли целая часть, и насыщаю ее.

Это правильный подход к умножению со знаком с фиксированной запятой? Жесткий множитель DSP48 дает мне флаг переполнения после умножения. Могу ли я использовать этот флаг для обнаружения и обработки переполнения таким же образом?

Вот что я пробовал до сих пор

module fixed_mult(
input clk,
input reset,
input [17:0] inpa,
input [17:0] inpb,
output [17:0] out
);

reg [35:0] mult_reg;
reg [17:0] mult_shift;

assign out = mult_shift;
always @(posedge clk) begin
    if(reset) begin
        mult_reg <= 0;
        mult_shift <= 0;
    end
    else begin
        if((inpa[17] == 1 && inpb[17] == 0) || (inpa[17] == 0 && inpb[17] == 1)) begin
            mult_shift[17] <= 1'b1;
        end
        else begin
            mult_shift[17] <= 1'b0;
        end

        mult_reg = inpa * inpb;
        if(mult_reg[33:18] > 255) begin
            mult_reg[33:18] <= 255;
        end
        else begin
            //mult_reg[33:18] 
        end
        mult_shift[16:0] = mult_reg >> 9;
    end
end
endmodule

Одна цель также состоит в том, чтобы сделать это параметризованным, так как, если в будущем биты для целого числа или дробной части изменятся, я должен быть в состоянии приспособиться к этому.

Любая помощь очень ценится.

Спасибо

...