§ Предварительные сведения
Числа представлены в 16-битном формате, имеют фиксированную точность.Бит Описание 15 Знак 0-плюс 1-минус 14..12 Целое от 0 до 7 11..0 Мантисса (дробная часть)Можно представить числа от -7,9997 до 7,9997.
§ Модуль умножения
module mult ( input wire [15:0] a, // Множитель input wire [15:0] b, // Множитель output wire [15:0] c // Произведение ); wire [31:0] res = a[14:0] * b[14:0]; assign c[15] = a[15] ^ b[15]; assign c[14:0] = res[26:12]; endmodule
§ Модуль сложения
Данный модуль складывает числа. Чтобы вычесть, необходимо обратить бит 15 для второго слагаемого b.module summ ( input wire [15:0] a, // Слагаемое input wire [15:0] b, // Слагаемое output reg [15:0] c // Сумма ); wire [15:0] ab = a[14:0] - b[14:0]; wire [15:0] ba = b[14:0] - a[14:0]; always @* begin case ({a[15], b[15]}) 2'b01: c = ab[15] /* A<B */ ? {1'b1, ba[14:0]} : {1'b0, ab[14:0]}; // +A-B 2'b10: c = ba[15] /* B<A */ ? {1'b1, ab[14:0]} : {1'b0, ba[14:0]}; // -A+B default: c = {a[15], a[14:0] + b[14:0]}; // +A+B | -A-B endcase end endmodule
20 дек, 2020
© 2007-2023 Слабая вещь болела