OpenCores
URL https://opencores.org/ocsvn/ft816float/ft816float/trunk

Subversion Repositories ft816float

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /ft816float/trunk
    from Rev 69 to Rev 70
    Reverse comparison

Rev 69 → Rev 70

/rtl/verilog2/BCDAdd8NClk.sv
61,16 → 61,14
//---------------
// 199999999 <- second row result
 
module BCDAdd8NClk(clk, ld, a, b, o, ci, co, done);
module BCDAdd8NClk(clk, a, b, o, ci, co);
parameter N=33;
input clk;
input ld;
input [N*8-1:0] a;
input [N*8-1:0] b;
output reg [N*8-1:0] o;
input ci;
output reg co;
output reg done;
 
reg [N-1:0] c [0:2];
wire [N*8-1:0] o1 [0:2];
81,6 → 79,9
generate begin : gBCDadd
for (g = 0; g < N; g = g + 1) begin
for (k = 0; k < 3; k = k + 1) begin
initial begin
c[k][g] <= 'b0;
end
BCDAdd u1 (
.ci(k==0 && g==0 ? ci : 1'b0),
.a(k==0 ? a[g*8+7:g*8] : o2[k-1][g*8+7:g*8]),
97,9 → 98,8
always_ff @(posedge clk)
begin
o <= o1[2];
co <= c[2][N-1];
co <= c[2][N-1]|c[1][N-1]|c[0][N-1];
end
end
endgenerate
endmodule
 
/rtl/verilog2/BCDMath.sv
126,34 → 126,7
endgenerate
 
endmodule
/*
module BCDAdd8NClk(clk, a, b, o, ci, co);
parameter N=33;
input clk;
input [N*8-1:0] a;
input [N*8-1:0] b;
output [N*8-1:0] o;
input ci;
output co;
 
reg [N:0] c;
wire [N:0] d;
assign c[0] = ci;
assign co = c[N];
 
genvar g;
generate begin : gBCDadd
for (g = 0; g < N; g = g + 1) begin
BCDAdd u1 (c[g],a[g*8+7:g*8],b[g*8+7:g*8],o[g*8+7:g*8],d[g+1]);
 
always_ff @(posedge clk)
c[g+1] <= d[g+1];
end
end
endgenerate
endmodule
*/
 
module BCDSub(ci,a,b,o,c);
input ci; // carry input
input [7:0] a;
220,35 → 193,8
endgenerate
 
endmodule
 
/*
module BCDSub8NClk(clk, a, b, o, ci, co);
parameter N=33;
input clk;
input [N*8-1:0] a;
input [N*8-1:0] b;
output [N*8-1:0] o;
input ci;
output co;
 
reg [N:0] c;
wire [N:0] d;
assign c[0] = ci;
assign co = c[N];
 
genvar g;
generate begin : gBCDsub
for (g = 0; g < N; g = g + 1) begin
BCDSub u1 (c[g],a[g*8+7:g*8],b[g*8+7:g*8],o[g*8+7:g*8],d[g+1]);
 
always_ff @(posedge clk)
c[g+1] <= d[g+1];
end
end
endgenerate
endmodule
*/
 
module BCDAddAdjust(i,o,c);
input [4:0] i;
output [3:0] o;
/rtl/verilog2/BCDSub8NClk.sv
61,16 → 61,14
//---------------
// 199999999 <- second row result
 
module BCDSub8NClk(clk, ld, a, b, o, ci, co, done);
module BCDSub8NClk(clk, a, b, o, ci, co);
parameter N=33;
input clk;
input ld;
input [N*8-1:0] a;
input [N*8-1:0] b;
output reg [N*8-1:0] o;
input ci;
output reg co;
output reg done;
 
reg [N-1:0] c [0:2];
wire [N*8-1:0] o1 [0:2];
81,6 → 79,9
generate begin : gBCDadd
for (g = 0; g < N; g = g + 1) begin
for (k = 0; k < 3; k = k + 1) begin
initial begin
c[k][g] <= 'b0;
end
BCDSub u1 (
.ci(k==0 && g==0 ? ci : 1'b0),
.a(k==0 ? a[g*8+7:g*8] : o2[k-1][g*8+7:g*8]),
97,7 → 98,7
always_ff @(posedge clk)
begin
o <= o1[2];
co <= c[2][N-1];
co <= c[2][N-1]|c[1][N-1]|c[0][N-1];
end
end
endgenerate
/rtl/verilog2/DFPAddsub128.sv
119,7 → 119,6
reg xa_gt_xb2;
reg [N*4-1:0] siga2, sigb2;
reg sigeq, siga_gt_sigb;
reg xa_gt_xb2;
reg expeq;
reg sxo2;
 
/rtl/verilog2/DFPMultiply128.sv
112,7 → 112,6
 
wire under, over;
wire [15:0] sum_ex = au.exp + bu.exp - bias;
reg [15:0] sum_ex;
reg sx0;
wire done1;
assign under = &sum_ex[15:14];
/rtl/verilog2/DFPRound128.sv
1,6 → 1,6
// ============================================================================
// __
// \\__/ o\ (C) 2006-2021 Robert Finch, Waterloo
// \\__/ o\ (C) 2006-2022 Robert Finch, Waterloo
// \ __ / All rights reserved.
// \/_// robfinch<remove>@finitron.ca
// ||
/rtl/verilog2/dfdiv.v
59,7 → 59,7
 
reg [3:0] cnt; // iteration count
reg [7:0] dcnt; // digit count
reg [9:0] clkcnt;
reg [15:0] clkcnt;
reg [5:0] digcnt;
reg [FPWID*2-1:0] qi = 0;
reg [FPWID+4-1:0] ri = 0;
72,17 → 72,19
(* retiming_forward = 1 *)
wire co1;
 
BCDSub8NClk #(.N((N+1)/2)) ubcds1
generate begin : gSub
BCDSub8NClk #(.N((N+2)/2)) ubcds1
(
.clk(clk),
.a(ri),
.b({4'd0,bi}),
.a(~N[0] ? {ri,4'h0} : ri),
.b(~N[0] ? {4'd0,bi,4'h0} : {4'd0,bi}),
.o(dif),
.ci(1'b0),
.co(co)
);
end
endgenerate
 
 
always @(posedge clk)
begin
case(st)
91,7 → 93,7
digcnt <= digcnt - 1'd1;
if (digcnt=='d0) begin
clkcnt <= clkcnt + 1'd1;
digcnt <= 6'd3;
digcnt <= 6'd4;
if (co) begin
ri <= {ri,qi[FPWID*2-1:FPWID*2-4]};
qi <= {qi[FPWID*2-5:0],cnt};
132,8 → 134,9
end
end
end
else begin
ri <= dif;
else
begin
ri <= N[0] ? dif : dif[FPWID+4-1:4];
cnt <= cnt + 1'd1;
end
end
151,8 → 154,8
if (ld) begin
clkcnt <= 10'd0;
cnt <= 4'd0;
digcnt <= 6'd3;
dcnt <= (FPWID*2)/4;
digcnt <= 6'd4;
dcnt <= $ceil((FPWID*2)/4);
qi <= {a,{FPWID{1'd0}}};
ri <= {FPWID{1'd0}};
bi <= b;
169,16 → 172,16
 
reg clk;
reg ld;
reg [107:0] a, b;
wire [215:0] q;
wire [107:0] r;
reg [135:0] a, b;
wire [271:0] q;
wire [135:0] r;
wire [7:0] lzcnt;
 
initial begin
clk = 1'b0;
ld = 1'b0;
a = 108'h099_00000000_00000000_00000000;
b = 108'h560_00000000_00000000_00000000;
a = 136'h10_00000000_00000000_00000000_00000000;
b = 136'h20_00000000_00000000_00000000_00000000;
#20 ld = 1'b1;
#40 ld = 1'b0;
end
185,7 → 188,7
 
always #5 clk = ~clk;
 
dfdiv #(.N(27)) u1 (
dfdiv #(.N(34)) u1 (
.clk(clk),
.ld(ld),
.a(a),

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.