forked from Github_Repos/cvw
		
	reverted srt_standford back to original file pre modifications by Udeema
This commit is contained in:
		
							parent
							
								
									ed452aff5f
								
							
						
					
					
						commit
						ec3fa45f86
					
				| @ -14,49 +14,6 @@ | ||||
| 
 | ||||
| `include "wally-config.vh" | ||||
| 
 | ||||
| // will also be used for integer division so keep in mind when naming modules/signals
 | ||||
| 
 | ||||
| /////////////////
 | ||||
| // srt_divide //
 | ||||
| ////////////////
 | ||||
| module srt_divide(input  logic clk,  | ||||
|            input  logic req,  | ||||
|            input  logic sqrt,  // 1 to compute sqrt(a), 0 to compute a/b
 | ||||
|            input  logic [63:0] a, b, // input numbers
 | ||||
|            output logic [54:0] rp, rm, | ||||
|            output logic [10:0] expE); | ||||
| 
 | ||||
|           // output logic from Unpackers
 | ||||
|           logic        XSgnE, YSgnE, ZSgnE; | ||||
|           logic [10:0] XExpE, YExpE, ZExpE; // exponent
 | ||||
|           logic [52:0] XManE, YManE, ZManE; | ||||
|           logic XNormE; | ||||
|           logic XNaNE, YNaNE, ZNaNE; | ||||
|           logic XSNaNE, YSNaNE, ZSNaNE; | ||||
|           logic XDenormE, YDenormE, ZDenormE; // denormals
 | ||||
|           logic XZeroE, YZeroE, ZZeroE; | ||||
|           logic [10:0] BiasE; // currrently hardcoded, will probs be removed
 | ||||
|           logic XInfE, YInfE, ZInfE; | ||||
|           logic XExpMaxE; // says exponent is all ones, can ignore
 | ||||
| 
 | ||||
|            // have Unpackers
 | ||||
|            // have mantissa divider
 | ||||
|            // exponent divider
 | ||||
| 
 | ||||
|           // hopefully having the .* here works for unpacker --- nope it doesn't
 | ||||
|           unpack unpacking(a, b, 0, 1'b1, 0, XSgnE, YSgnE, ZSgnE, XExpE, YExpE, ZExpE, XManE, YManE, ZManE, XNormE,XNaNE, YNaNE, ZNaNE,XSNaNE, YSNaNE, ZSNaNE,XDenormE, YDenormE, ZDenormE,XZeroE, YZeroE, ZZeroE,BiasE,XInfE, YInfE, ZInfE,XExpMaxE); | ||||
|           srt  srt(clk, req, XManE[51:0], YManE[51:0], rp, rm); | ||||
|           exp exp(XexpE, YExpE, expE); | ||||
| endmodule | ||||
| 
 | ||||
| // exponent module
 | ||||
| // first iteration
 | ||||
| module exp(input [10:0] e1, e2, | ||||
|            output [10:0] e); // for a 64 bit number, exponent section is 11 bits
 | ||||
|   assign e = (e1 - e2) + 11'd1023; // bias is hardcoded
 | ||||
| endmodule | ||||
| 
 | ||||
| 
 | ||||
| /////////
 | ||||
| // srt //
 | ||||
| /////////
 | ||||
| @ -84,12 +41,12 @@ module srt(input  logic clk, | ||||
|   // When start is asserted, the inputs are loaded into the divider.
 | ||||
|   // Otherwise, the divisor is retained and the partial remainder
 | ||||
|   // is fed back for the next iteration.
 | ||||
|   mux2_special psmux({psa[54:0], 1'b0}, {4'b0001, a}, req, psn); | ||||
|   flop_special psflop(clk, psn, ps); | ||||
|   mux2_special pcmux({pca[54:0], 1'b0}, 56'b0, req, pcn); | ||||
|   flop_special pcflop(clk, pcn, pc); | ||||
|   mux2_special dmux(d, {4'b0001, b}, req, dn); | ||||
|   flop_special dflop(clk, dn, d); | ||||
|   mux2 psmux({psa[54:0], 1'b0}, {4'b0001, a}, req, psn); | ||||
|   flop psflop(clk, psn, ps); | ||||
|   mux2 pcmux({pca[54:0], 1'b0}, 56'b0, req, pcn); | ||||
|   flop pcflop(clk, pcn, pc); | ||||
|   mux2 dmux(d, {4'b0001, b}, req, dn); | ||||
|   flop dflop(clk, dn, d); | ||||
| 
 | ||||
|   // Quotient Selection logic
 | ||||
|   // Given partial remainder, select quotient of +1, 0, or -1 (qp, qz, pm)
 | ||||
| @ -99,7 +56,7 @@ module srt(input  logic clk, | ||||
| 
 | ||||
|   // Divisor Selection logic
 | ||||
|   inv dinv(d, d_b); | ||||
|   mux3_special divisorsel(d_b, 56'b0, d, qp, qz, qm, dsel); | ||||
|   mux3 divisorsel(d_b, 56'b0, d, qp, qz, qm, dsel); | ||||
| 
 | ||||
|   // Partial Product Generation
 | ||||
|   csa csa(ps, pc, dsel, qp, psa, pca); | ||||
| @ -108,7 +65,7 @@ endmodule | ||||
| //////////
 | ||||
| // mux2 //
 | ||||
| //////////
 | ||||
| module mux2_special(input  logic [55:0] in0, in1,  | ||||
| module mux2(input  logic [55:0] in0, in1,  | ||||
|             input  logic        sel,  | ||||
|             output logic [55:0] out); | ||||
|   | ||||
| @ -118,7 +75,7 @@ endmodule | ||||
| //////////
 | ||||
| // flop //
 | ||||
| //////////
 | ||||
| module flop_special(clk, in, out); | ||||
| module flop(clk, in, out); | ||||
|   input 	clk; | ||||
|   input  [55:0] in; | ||||
|   output [55:0] out; | ||||
| @ -204,9 +161,9 @@ module inv(input  logic [55:0] in, | ||||
| endmodule | ||||
| 
 | ||||
| //////////
 | ||||
| // mux3_special //
 | ||||
| // mux3 //
 | ||||
| //////////
 | ||||
| module mux3_special(in0, in1, in2, sel0, sel1, sel2, out); | ||||
| module mux3(in0, in1, in2, sel0, sel1, sel2, out); | ||||
|   input  [55:0] in0; | ||||
|   input  [55:0] in1; | ||||
|   input  [55:0] in2; | ||||
| @ -316,24 +273,6 @@ module testbench; | ||||
|   logic [51:0] b; | ||||
|   logic  [51:0] r; | ||||
|   logic [54:0] rp, rm;   // positive quotient digits
 | ||||
| 
 | ||||
|   //input logic  [63:0] X, Y, Z,  - numbers
 | ||||
|   //input logic         FmtE,  ---- format, 1 is for double precision, 0 is single
 | ||||
|   //input logic  [2:0]  FOpCtrlE, ---- controling operations for FPU, 1 is sqrt, 0 is divide
 | ||||
|  // all variables are commented in fpu.sv
 | ||||
| 
 | ||||
|   // output logic from Unpackers
 | ||||
|   logic        XSgnE, YSgnE, ZSgnE; | ||||
|   logic [10:0] XExpE, YExpE, ZExpE; // exponent
 | ||||
|   logic [52:0] XManE, YManE, ZManE; | ||||
|   logic XNormE; | ||||
|   logic XNaNE, YNaNE, ZNaNE; | ||||
|   logic XSNaNE, YSNaNE, ZSNaNE; | ||||
|   logic XDenormE, YDenormE, ZDenormE; // denormals
 | ||||
|   logic XZeroE, YZeroE, ZZeroE; | ||||
|   logic [10:0] BiasE; // currrently hardcoded, will probs be removed
 | ||||
|   logic XInfE, YInfE, ZInfE; | ||||
|   logic XExpMaxE; // says exponent is all ones, can ignore
 | ||||
|   | ||||
|   // Test parameters
 | ||||
|   parameter MEM_SIZE = 40000; | ||||
| @ -350,15 +289,8 @@ module testbench; | ||||
|   logic    [51:0] correctr, nextr; | ||||
|   integer testnum, errors; | ||||
| 
 | ||||
|   // Unpackers
 | ||||
|   unpacking unpack(.X({12'b100010000010,a}), .Y({12'b100010000001,b}), .Z(0), .FmtE(1'b1), .FOpCtrlE(0), .*); | ||||
| 
 | ||||
|   // Divider
 | ||||
|   srt  srt(.clk(clk), .req(req), .sqrt(1'b0), .a(XManE[51:0]), .b(YManE[51:0]), .rp(rp),.rm(rm)); | ||||
| 
 | ||||
|   //srt  srt(.clk(clk), .req(req), .sqrt(1'b0), .a(a), .b(b), .rp(rp),.rm(rm));
 | ||||
| 
 | ||||
|   // Divider + unpacker
 | ||||
|   srt  srt(clk, req, a, b, rp, rm); | ||||
| 
 | ||||
|   // Final adder converts quotient digits to 2's complement & normalizes
 | ||||
|   finaladd finaladd(rp, rm, r); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user