HierarchyFilesModulesSignalsTasksFunctionsHelp
/****************************************************************
 ---------------------------------------------------------------
     Copyright 1999 Sun Microsystems, Inc., 901 San Antonio
     Road, Palo Alto, CA 94303, U.S.A.  All Rights Reserved.
     The contents of this file are subject to the current
     version of the Sun Community Source License, picoJava-II
     Core ("the License").  You may not use this file except
     in compliance with the License.  You may obtain a copy
     of the License by searching for "Sun Community Source
     License" on the World Wide Web at http://www.sun.com.
     See the License for the rights, obligations, and
     limitations governing use of the contents of this file.

     Sun, Sun Microsystems, the Sun logo, and all Sun-based
     trademarks and logos, Java, picoJava, and all Java-based
     trademarks and logos are trademarks or registered trademarks 
     of Sun Microsystems, Inc. in the United States and other
     countries.
 ----------------------------------------------------------------
******************************************************************/




// synopsis translate_off
//`timescale 1ns/1ns
`timescale 1ns/10ps
`include "fpu.h"
// synopsis translate_on

module fpu(
     		fpain,    	// 32-bit A bus input.
     		fpbin,    	// 32-bit B bus input.
     		fpop,     	// Java Fp opcode (connected to first byte in IBUFF).
     		fpbusyn,  	// Signal asserted after valid operation begins
     		fpkill,   	// Input kills the operation returns to idle state.
     		fpout,    	// 32-bit output bus, Direct Drive.
     		clk,
     		so,
		sin,
		sm,
     		reset_l,
		powerdown, // used here to power down fpu roms
		test_mode,	// test signal for roms
     		fphold,     	// Signal to hold the data input/output on IU stalls.
     		fpop_valid); 	// Input indicating valid FPOP byte (connected to first
				// byte valid in IBUFF).

//  Top level FPU module.

  input [31:0]  fpain, fpbin;
  input  [7:0]  fpop;
  input         fpkill, fphold, reset_l, test_mode, powerdown;
  input         clk, sin,sm, fpop_valid;

  output [31:0] fpout;       // Direct Drive output,  No output tri-state needed.
  output        fpbusyn;     // Output signal for controlling FPU interface.
  output        so;

//  wire  [41:0]  mword;      // Microcode word.
  wire  [31:0]  a1, a0, b1, b0, a1inc, a0inc, rsout, lsout, multout;
  wire  [10:0]  aexpout;
  wire   [5:0]  priout;
  wire   [4:0]  saout;
  wire   [3:0]  expfunc, exconfunc, incfunc, multfunc, nx_multfunc_rom0, nx_multfunc_rom1, nx_incfunc_rom0, nx_incfunc_rom1, nx_expfunc_rom0, nx_expfunc_rom1;
  wire   [2:0]  incinfunc, asignfunc, a2func, a1func, a0func, safunc, prifunc, rsfunc, nx_rsfunc_rom0, nx_rsfunc_rom1,nx_prifunc_rom0,nx_prifunc_rom1;
  wire   [2:0]  cyc0_type; 
  wire   [7:0]  fpu_state;
  wire   [1:0]  mconfunc, romsel;
  wire          dprec, nx_dprec, eadd, rsovf, movf, amsb, incovf, morethree, le, expsame;
  wire		ae_small, fmulovf, rs32, rsge64, manzero, morethree_taken, absign;
  wire          altb, incin, a2, rsneg, rs2zero, lsround, stin, asign;
  wire          nx_cyc0_rdy, cyc0_rdy, cyc1_rdy, rsovfi, bsignin, qin, erop, qmsb;
wire	[1:0]	nx_mconfunc_rom0, nx_mconfunc_rom1;
wire	[3:0]	nx_exconfunc_rom0, nx_exconfunc_rom1 ;    // EXCON func.
wire   [31:0] r0out, r1out;
 
wire fpuhold= fphold & !fpkill;

  exponent exp(		.aexpin(fpain[30:20]),
			.bexpin(fpbin[30:20]),
			.dprec(dprec),
			.nx_dprec(nx_dprec),
			.nx_mconfunc_rom0(nx_mconfunc_rom0),
			.nx_mconfunc_rom1(nx_mconfunc_rom1),
			.nx_exconfunc_rom0(nx_exconfunc_rom0),
			.nx_exconfunc_rom1(nx_exconfunc_rom1),
              		.cyc0_type(cyc0_type),
			.cyc0_rdy(cyc0_rdy),
			.expfunc(expfunc),
			.nx_expfunc_rom0(nx_expfunc_rom0),
			.nx_expfunc_rom1(nx_expfunc_rom1),
			.romsel(romsel),
			.safunc(safunc),
              		.eadd(eadd),
			.rsovf(rsovf),
			.movf(movf),
			.amsb(amsb),
			.incovf(incovf),
              		.priout(priout),
			.morethree(morethree),
			.le(le),
			.expsame(expsame),
              		.ae_small(ae_small),
			.rs32(rs32),
			.rsge64(rsge64),
			.aexpout(aexpout),
			.saout(saout),
              		.clk(clk),
			.reset_l(reset_l),
              		.sm(),
			.sin(),
			.so(),
              		.fmulovf(fmulovf),
			.fpuhold(fpuhold),
			.erop(erop)
			);


  incmod inc(		.a1(a1),
			.a0(a0),
			.b1(b1),
			.b0(b0),
			.incfunc(incfunc),
			.stin(stin),
			.eadd(eadd),
            		.amsb(amsb),
			.altb(altb),
			.incovf(incovf),
			.a1inc(a1inc),
			.a0inc(a0inc),
            		.incin(incin),
			.rsovf(rsovf),
			.dprec(dprec),
			.qin(qin),
			.qmsb(qmsb),
            		.clk(clk),
			.reset_l(reset_l),
              		.sm(),
			.sin(),
			.so(),
			.nx_incfunc_rom1(nx_incfunc_rom1),
			.nx_incfunc_rom0(nx_incfunc_rom0),
			.fpuhold(fpuhold),
			.romsel(romsel)
			);


  rsadd rsa(		.saout(saout),
		//	.a2(a2),
		//	.a1(a1),
			.a0(a0),
			.rsfunc(rsfunc),
		//	.nx_rsfunc_rom0(nx_rsfunc_rom0),
		//	.nx_rsfunc_rom1(nx_rsfunc_rom1),
		//	.romsel(romsel),
			.r1out(r1out),
			.r0out(r0out),
			.reset_l(reset_l),
			.eadd(eadd),
           		.rsout(rsout),
			.rsovfi(rsovfi),
			.rsneg(rsneg),
			.rs2zero(rs2zero),
			.lsround(lsround),
           		.b0(b0),
			.b1(b1),
			.clk(clk),
		 	.sm(),
			.sin(),
			.so(),
			.incin(incin),
           		.stin(stin),
			.rs32(rs32),
			.incinfunc(incinfunc),
			.rsovf(rsovf),
			.fpuhold(fpuhold),
			.erop(erop)
			);


  prils prif(		.a1(a1),
			.a0(a0),
			.prifunc(prifunc),
			.nx_prifunc_rom0(nx_prifunc_rom0),
			.nx_prifunc_rom1(nx_prifunc_rom1),
			.romsel(romsel),
			.clk(clk),
			.reset_l(reset_l),
			.mconfunc(mconfunc),
			.lsround(lsround),
           		.incinfunc(incinfunc),
			.stin(stin),
			.lsout(lsout),
			.saout(saout),
           		.priout(priout),
			.fpuhold(fpuhold),
			.multout(multout),
		 	.sm(),
			.sin(),
			.so()	
			);

  code_seq cs(		.rsovfi(rsovfi),
			.rsneg(rsneg),
			.amsb(amsb),
			.incovf(incovf),
			.rs2zero(rs2zero),
              		.rs32(rs32),
			.rsge64(rsge64),
			.eadd(eadd),
			.le(le),
              		.manzero(manzero),
			.powerdown(powerdown),
			.morethree(morethree),
			.morethree_taken(morethree_taken),
              		.absign(absign),
			.fmulovf(fmulovf),
			.nx_opcode(fpop),
			.reset_l(reset_l),
			.fpkill(fpkill),
              		.cyc0_rdy(cyc0_rdy),
              		.nx_cyc0_rdy(nx_cyc0_rdy),
			.cyc1_rdy(cyc1_rdy),
			.cyc0_type(cyc0_type),
			.dprec(dprec),
              		.mword({multfunc, incinfunc, asignfunc, a2func, a1func, a0func, mconfunc, expfunc, safunc, exconfunc, incfunc, prifunc, rsfunc}),
			.fpuhold(fpuhold),
			.fpu_state(fpu_state),
			.clk(clk),
              		.sm(),
			.sin(),
			.so(),
			.fpbusyn(fpbusyn),
			.top_fpbin(fpbin[31]),
              		.bsignin(bsignin),
			.nx_fpop_valid(fpop_valid),
			.qin(qin),
			.qmsb(qmsb),
              		.erop(erop),
			.nx_multfunc_rom1(nx_multfunc_rom1),
			.nx_multfunc_rom0(nx_multfunc_rom0),
			.nx_incfunc_rom1(nx_incfunc_rom1),
			.nx_incfunc_rom0(nx_incfunc_rom0),
			.nx_rsfunc_rom0(nx_rsfunc_rom0),
			.nx_rsfunc_rom1(nx_rsfunc_rom1),
			.nx_expfunc_rom0(nx_expfunc_rom0),
			.nx_expfunc_rom1(nx_expfunc_rom1),
			.nx_prifunc_rom0(nx_prifunc_rom0),
			.nx_prifunc_rom1(nx_prifunc_rom1),
			.nx_dprec(nx_dprec),
			.nx_mconfunc_rom0(nx_mconfunc_rom0),
			.nx_mconfunc_rom1(nx_mconfunc_rom1),
			.nx_exconfunc_rom0(nx_exconfunc_rom0),
			.nx_exconfunc_rom1(nx_exconfunc_rom1),
			.romsel(romsel),
			.test_mode(test_mode)
			);


  nxsign nxs(		.asignfunc(asignfunc),
			.ae_small(ae_small),
			.expsame(expsame),
			.altb(altb),
              		.morethree_taken(morethree_taken),
			.eadd(eadd),
			.absign(absign),
			.asign(asign),
              		.clk(clk),
			.reset_l(reset_l),
			.sm(),
			.sin(),
			.so(),
			.asignin(fpain[31]),
              		.bsignin(bsignin),
			.fpuhold(fpuhold),
			.cyc0_rdy(cyc0_rdy)
			);

  mantissa man(		.a0func(a0func),
			.a1func(a1func),
			.a2func(a2func),
			.nx_rsfunc_rom0(nx_rsfunc_rom0),  // for r0md generation
			.nx_rsfunc_rom1(nx_rsfunc_rom1),  // for r0md generation
			.romsel(romsel),
			.r1out(r1out),			  // send to rsadd
			.r0out(r0out),			  // send to rsadd
			.rsout(rsout),
              		.lsout(lsout),
			.a0inc(a0inc),
			.a1inc(a1inc),
			.ae_small(ae_small),
              		.eadd(eadd),
			.morethree_taken(morethree_taken),
			.expsame(expsame),
              		.altb(altb),
			.a2(a2),
			.a1(a1),
			.a0(a0),
			.b1(b1),
			.b0(b0),
			.fpout(fpout),
              		.aexpout(aexpout),
			.fpu_state(fpu_state),
			.asign(asign),
			.sm(),
			.sin(),
			.so(),
			.clk(clk),
			.reset_l(reset_l),
			.fpain(fpain),
			.fpbin(fpbin),
              		.cyc0_rdy(cyc0_rdy),
			.cyc1_rdy(cyc1_rdy),
			.cyc0_type(cyc0_type),
              		.amsb(amsb),
			.manzero(manzero),
			.fpuhold(fpuhold),
			.mconfunc(mconfunc)
			);

  multmod mult1(	.multout(multout),
			.nx_multfunc_rom1(nx_multfunc_rom1),
			.nx_multfunc_rom0(nx_multfunc_rom0),
			.romsel(romsel),
              		.nx_cyc0_rdy(nx_cyc0_rdy),
			.movf(movf),
                	.ma1(a1),
			.ma0(a0[31:11]),
			.mb1(b1),
			.mb0(b0[31:11]),
			.so(),
			.sm(),
			.sin(),
                	.clk(clk),
			.fpuhold(fpuhold),
			.reset_l(reset_l)
			);


mj_spare i1_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i2_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i3_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i4_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i5_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i6_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i7_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i8_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i9_spare (	.reset_l(reset_l),
			.clk(clk)
			);

mj_spare i10_spare (	.reset_l(reset_l),
			.clk(clk)
			);
endmodule







             

HierarchyFilesModulesSignalsTasksFunctionsHelp

This page: Created:Wed Mar 24 09:44:55 1999
From: /import/jet-pj2-sim/rahim/picoJava-II/design/fpu/rtl/f_fpu.v

Verilog converted to html by v2html 5.0 (written by Costas Calamvokis).Help