§ Предварительные сведения

Числа представлены в 16-битном формате, имеют фиксированную точность.
Бит    Описание
15     Знак 0-плюс 1-минус
14..12 Целое от 0 до 7
11..0  Мантисса (дробная часть)
Можно представить числа от -7,9997 до 7,9997.

§ Модуль умножения

1module mult
2(
3    input wire  [15:0] a, // Множитель
4    input wire  [15:0] b, // Множитель
5    output wire [15:0] c  // Произведение
6);
7
8wire [31:0] res     = a[14:0] * b[14:0];
9assign      c[15]   = a[15] ^ b[15];
10assign      c[14:0] = res[26:12];
11
12endmodule

§ Модуль сложения

Данный модуль складывает числа. Чтобы вычесть, необходимо обратить бит 15 для второго слагаемого b.
1module summ
2(
3    input  wire [15:0] a, // Слагаемое
4    input  wire [15:0] b, // Слагаемое
5    output reg  [15:0] c  // Сумма
6);
7
8wire [15:0] ab = a[14:0] - b[14:0];
9wire [15:0] ba = b[14:0] - a[14:0];
10
11always @* begin
12
13    case ({a[15], b[15]})
14
15        2'b01: c = ab[15] /* A<B */ ? {1'b1, ba[14:0]} : {1'b0, ab[14:0]}; // +A-B
16        2'b10: c = ba[15] /* B<A */ ? {1'b1, ab[14:0]} : {1'b0, ba[14:0]}; // -A+B
17        default: c = {a[15], a[14:0] + b[14:0]}; // +A+B | -A-B
18
19    endcase
20
21end
22
23endmodule