1 Star 0 Fork 0

voiue/FPU

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
fmul_200.v 2.32 KB
一键复制 编辑 原始数据 按行查看 历史
YutaPic 提交于 2021-01-11 00:00 . Add files via upload
`default_nettype none
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: Yuta Fukushima
//
// Create Date: 2020/10/19
// Design Name: fmul
// Module Name: fmul
// Project Name: CP
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
//////////////////////////////////////////////////////////////////////////////////
//e = 0ならばその数を0(m = 0で固定)とみなす
//e = 255ならばその数を∞(m = 0で固定)とみなす
module fmul_200(
input wire clk, rst,
input wire [31:0] x1,
input wire [31:0] x2,
output wire [31:0] y
);
wire s1 = x1[31];
wire s2 = x2[31];
wire [8-1:0] e1 = x1[30:23];
wire [8-1:0] e2 = x2[30:23];
wire [23-1:0] m1 = x1[22:0];
wire [23-1:0] m2 = x2[22:0];
reg sy;// = s1 ^ s2;
wire [9:0] eyp = e1 + e2 - 9'd127;
wire [9:0] eypi = eyp + 1 ;
reg [47:0] p2;// ;
reg [7:0] eyp_2, eypi_2;
reg underflow;// = eyp[9] || ~(|e1) || ~(|e2) ? 1 : 0;
reg ovf_f;// = (~eyp[9] && eyp[8]) || &(eyp[7:0]) || &(e1) || &(e2) ? 1 : 0;
//wire [47:0] my1 = {1'b1, m1} * {1'b1, m2};
reg [47:0] p1;
//reg [22:0] m1_2, m2_2;
//wire [47:0] p2 = {1'b1, m1_2[22:17]} * {1'b1, m2_2};
wire [47:0] my1 = p1 + {p2, 17'b0};
wire ovf = ovf_f || (my1[47] && &(eypi[7:0]));
wire [7:0] ey = underflow ? 8'b00000000 :
ovf ? 8'b11111111 :
my1[47] ? eypi_2 : eyp_2;
wire [22:0] my = (underflow || ovf) ? 23'b0 : my1[47] ? my1[46:24] : my1[45:23];
assign y = {sy, ey, my};
always @(posedge clk) begin
if (rst) begin
p1 <= 0;
//m1_2 <= 0;
//m2_2 <= 0;
ovf_f <= 0;
underflow <= 0;
eyp_2 <= 0;
eypi_2 <= 0;
sy <= 0;
p2 <= 0;
end else begin
p1 <= m1[16:0] * {1'b1, m2};
//m1_2 <= m1;
//m2_2 <= m2;
ovf_f <= (~eyp[9] && eyp[8]) || &(eyp[7:0]) || &(e1) || &(e2) ? 1 : 0;
underflow <= eyp[9] || ~(|e1) || ~(|e2) ? 1 : 0;
eyp_2 <= eyp;
eypi_2 <= eypi;
sy <= s1 ^ s2;
p2 <= {1'b1, m1[22:17]} * {1'b1, m2};
end
end
endmodule
`default_nettype wire
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/voiue/FPU.git
git@gitee.com:voiue/FPU.git
voiue
FPU
FPU
main

搜索帮助