URL
https://opencores.org/ocsvn/encore/encore/trunk
Subversion Repositories encore
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 7 to Rev 8
- ↔ Reverse comparison
Rev 7 → Rev 8
/encore/trunk/fpmult/fpmult.qsf
38,7 → 38,7
|
set_global_assignment -name FAMILY "Cyclone II" |
set_global_assignment -name DEVICE EP2C20F484C7 |
set_global_assignment -name TOP_LEVEL_ENTITY fpmult |
set_global_assignment -name TOP_LEVEL_ENTITY fpmult_stage_pre |
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 10.0 |
set_global_assignment -name PROJECT_CREATION_TIME_DATE "18:02:41 JANUARY 28, 2011" |
set_global_assignment -name LAST_QUARTUS_VERSION 10.1 |
50,11 → 50,7
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 |
set_global_assignment -name USE_CONFIGURATION_DEVICE ON |
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" |
set_global_assignment -name VHDL_FILE src/fpmult_stage0_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage0.vhdl |
set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "AS INPUT TRI-STATED" |
set_global_assignment -name VHDL_FILE src/fpmult.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_comp.vhdl |
set_global_assignment -name ENABLE_SIGNALTAP OFF |
set_global_assignment -name USE_SIGNALTAP_FILE src/SignalTap.stp |
set_location_assignment PIN_A13 -to GPIO_0[0] |
338,17 → 334,25
set_location_assignment PIN_AB15 -to FL_CE_N |
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" |
set_global_assignment -name MISC_FILE "D:/Work/VHDL/fpmult/fpmult.dpf" |
set_global_assignment -name VHDL_FILE src/fpmult_stage23_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage23.vhdl |
set_global_assignment -name VHDL_FILE src/fp_generic.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stageN.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stageN_comp.vhdl |
set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "D:/Work/VHDL/encore/fpmult/sim" -section_id eda_simulation |
set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)" |
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation |
set_global_assignment -name MISC_FILE "D:/Work/VHDL/encore/fpmult/fpmult.dpf" |
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top |
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top |
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top |
set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region" |
set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region" |
set_global_assignment -name SDC_FILE fpmult.sdc |
set_global_assignment -name VHDL_FILE src/fpmult_stage0_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage0.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage23_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage23.vhdl |
set_global_assignment -name VHDL_FILE src/fp_generic.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stageN.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stageN_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage_pre_comp.vhdl |
set_global_assignment -name VHDL_FILE src/fpmult_stage_pre.vhdl |
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top |
/encore/trunk/fpmult/fpmult.sdc
1,108 → 1,44
## Generated SDC file "fpmult.sdc" |
#************************************************************ |
# THIS IS A WIZARD-GENERATED FILE. |
# |
# Version 10.1 Build 153 11/29/2010 SJ Web Edition |
# |
#************************************************************ |
|
## Copyright (C) 1991-2010 Altera Corporation |
## Your use of Altera Corporation's design tools, logic functions |
## and other software and tools, and its AMPP partner logic |
## functions, and any output files from any of the foregoing |
## (including device programming or simulation files), and any |
## associated documentation or information are expressly subject |
## to the terms and conditions of the Altera Program License |
## Subscription Agreement, Altera MegaCore Function License |
## Agreement, or other applicable license agreement, including, |
## without limitation, that your use is for the sole purpose of |
## programming logic devices manufactured by Altera and sold by |
## Altera or its authorized distributors. Please refer to the |
## applicable agreement for further details. |
# Copyright (C) 1991-2010 Altera Corporation |
# Your use of Altera Corporation's design tools, logic functions |
# and other software and tools, and its AMPP partner logic |
# functions, and any output files from any of the foregoing |
# (including device programming or simulation files), and any |
# associated documentation or information are expressly subject |
# to the terms and conditions of the Altera Program License |
# Subscription Agreement, Altera MegaCore Function License |
# Agreement, or other applicable license agreement, including, |
# without limitation, that your use is for the sole purpose of |
# programming logic devices manufactured by Altera and sold by |
# Altera or its authorized distributors. Please refer to the |
# applicable agreement for further details. |
|
|
## VENDOR "Altera" |
## PROGRAM "Quartus II" |
## VERSION "Version 10.1 Build 153 11/29/2010 SJ Web Edition" |
|
## DATE "Sun Jan 30 18:51:15 2011" |
# Clock constraints |
|
## |
## DEVICE "EP2C20F484C7" |
## |
create_clock -name "clk" -period 50.000ns [get_ports {clk}] -waveform {0.000 25.000} |
|
|
#************************************************************** |
# Time Information |
#************************************************************** |
# Automatically constrain PLL and other generated clocks |
derive_pll_clocks -create_base_clocks |
|
set_time_format -unit ns -decimal_places 3 |
# Automatically calculate clock uncertainty to jitter and other effects. |
#derive_clock_uncertainty |
# Not supported for family Cyclone II |
|
# tsu/th constraints |
|
# tco constraints |
|
#************************************************************** |
# Create Clock |
#************************************************************** |
set_output_delay -clock "clk" -max 40ns [get_ports {q.a q.b}] |
|
create_clock -name {altera_reserved_tck} -period 20.000 -waveform { 0.000 10.000 } [get_ports { altera_reserved_tck }] |
|
# tpd constraints |
|
#************************************************************** |
# Create Generated Clock |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Clock Latency |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Clock Uncertainty |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Input Delay |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Output Delay |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Clock Groups |
#************************************************************** |
|
set_clock_groups -asynchronous -group [get_clocks {altera_reserved_tck}] |
|
|
#************************************************************** |
# Set False Path |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Multicycle Path |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Maximum Delay |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Minimum Delay |
#************************************************************** |
|
|
|
#************************************************************** |
# Set Input Transition |
#************************************************************** |
|
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage23/twoproc.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage23/twoproc.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage23/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage23/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/_vhdl.prw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/body.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/body.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/body.prw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/_vhdl.psm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fp_generic/body.psm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_comp/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_comp/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stagen_comp/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stagen_comp/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/test_fpmult/testbench.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/test_fpmult/testbench.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/test_fpmult/testbench.prw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/test_fpmult/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/test_fpmult/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/test_fpmult/testbench.psm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult/structural.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult/structural.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult/structural.prw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult/structural.psm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0_comp/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0_comp/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stagen/twoproc.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stagen/twoproc.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stagen/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stagen/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/_info
6,13 → 6,13
Pfp_generic |
Z1 DPx4 ieee 11 numeric_std 0 22 =NSdli^?T5OD8;4F<blj<3 |
Z2 DPx4 ieee 14 std_logic_1164 0 22 GH1=`jDDBJ=`LM;:Ak`kf2 |
Z3 w1298622665 |
Z3 w1298807985 |
Z4 dD:\Work\VHDL\encore\fpmult\simulation\modelsim |
Z5 8D:/Work/VHDL/encore/fpmult/src/fp_generic.vhdl |
Z6 FD:/Work/VHDL/encore/fpmult/src/fp_generic.vhdl |
l0 |
L5 |
VIZ87?]:eGi;[Of;KI853a1 |
V9^S90T?Q`8T4KAa9WVb_R2 |
Z7 OV;C;6.6c;45 |
32 |
b1 |
20,14 → 20,14
Z9 Mx1 4 ieee 11 numeric_std |
Z10 o-work work -O0 |
Z11 tExplicit 1 |
!s100 6E[>iDgXF0f5^P;EniR?N1 |
!s100 2Jgaee4O<H_OEO1]hc4Rj3 |
Bbody |
DBx4 work 10 fp_generic 0 22 IZ87?]:eGi;[Of;KI853a1 |
DBx4 work 10 fp_generic 0 22 9^S90T?Q`8T4KAa9WVb_R2 |
R1 |
R2 |
l0 |
L34 |
VN2`Ro=8if51_l3iC^e:Xn3 |
L36 |
V`VZJ46>U6IdOMPlbCZ5283 |
R7 |
32 |
R8 |
35,54 → 35,57
R10 |
R11 |
nbody |
!s100 DT]ngZP]JkUIl6I=JQLe61 |
!s100 3JFahPFcnKd0j]hL5:g<n0 |
Efpmult |
Z12 w1298620573 |
Z12 w1298721716 |
Z13 DPx4 work 19 fpmult_stage23_comp 0 22 l>OeUL5UY5P7oNm;Lak>a0 |
Z14 DPx4 work 18 fpmult_stagen_comp 0 22 XEeJY3OH<`T5HG0=TD@in1 |
Z15 DPx4 work 18 fpmult_stage0_comp 0 22 ?R^WWoo?6<Z:1Qn:WB^il2 |
Z16 DPx4 work 21 fpmult_stage_pre_comp 0 22 B^0>3HSBKU9LzPi00>FW11 |
R1 |
Z16 DPx4 work 10 fp_generic 0 22 IZ87?]:eGi;[Of;KI853a1 |
Z17 DPx4 work 11 fpmult_comp 0 22 FZj;T54B?36HIEUM3YbeM1 |
Z17 DPx4 work 10 fp_generic 0 22 9^S90T?Q`8T4KAa9WVb_R2 |
Z18 DPx4 work 11 fpmult_comp 0 22 FZj;T54B?36HIEUM3YbeM1 |
R2 |
R4 |
Z18 8D:/Work/VHDL/encore/fpmult/src/fpmult.vhdl |
Z19 FD:/Work/VHDL/encore/fpmult/src/fpmult.vhdl |
Z19 8D:/Work/VHDL/encore/fpmult/src/fpmult.vhdl |
Z20 FD:/Work/VHDL/encore/fpmult/src/fpmult.vhdl |
l0 |
L8 |
V9kGPb=cG;QOTLXm9`=HF>0 |
L9 |
VKVn]JNPU7=Rf1[Cz0T5gd3 |
R7 |
32 |
R10 |
R11 |
!s100 []?gj@:ze2=MCVb_4Ek=A1 |
!s100 `6UeC>^_IRzEoczK3mB973 |
Astructural |
R13 |
R14 |
R15 |
R16 |
R1 |
R16 |
R17 |
R18 |
R2 |
DEx4 work 6 fpmult 0 22 9kGPb=cG;QOTLXm9`=HF>0 |
l25 |
L16 |
VHJzeXV=CECP^_oC][E@272 |
DEx4 work 6 fpmult 0 22 KVn]JNPU7=Rf1[Cz0T5gd3 |
l28 |
L17 |
Vlob56>kC184;=Gm2X<feK1 |
R7 |
32 |
Mx7 4 ieee 14 std_logic_1164 |
Mx6 4 work 11 fpmult_comp |
Mx5 4 work 10 fp_generic |
Z20 Mx4 4 ieee 11 numeric_std |
Mx8 4 ieee 14 std_logic_1164 |
Mx7 4 work 11 fpmult_comp |
Mx6 4 work 10 fp_generic |
Z21 Mx5 4 ieee 11 numeric_std |
Mx4 4 work 21 fpmult_stage_pre_comp |
Mx3 4 work 18 fpmult_stage0_comp |
Mx2 4 work 18 fpmult_stagen_comp |
Mx1 4 work 19 fpmult_stage23_comp |
R10 |
R11 |
!s100 4PYzmBe=?N>dzWzalW?EE2 |
!s100 S8Yc=]Khz62z^8D1NoGRT1 |
Pfpmult_comp |
R1 |
R16 |
R17 |
R2 |
w1298502618 |
R4 |
93,22 → 96,22
VFZj;T54B?36HIEUM3YbeM1 |
R7 |
32 |
Z21 Mx3 4 ieee 14 std_logic_1164 |
Z22 Mx2 4 work 10 fp_generic |
Z22 Mx3 4 ieee 14 std_logic_1164 |
Z23 Mx2 4 work 10 fp_generic |
R9 |
R10 |
R11 |
!s100 8^Jf^Q8ob[?`R2T:GheOT2 |
Efpmult_stage0 |
Z23 w1298199207 |
Z24 w1298721914 |
R14 |
R15 |
R16 |
R17 |
R1 |
R2 |
R4 |
Z24 8D:/Work/VHDL/encore/fpmult/src/fpmult_stage0.vhdl |
Z25 FD:/Work/VHDL/encore/fpmult/src/fpmult_stage0.vhdl |
Z25 8D:/Work/VHDL/encore/fpmult/src/fpmult_stage0.vhdl |
Z26 FD:/Work/VHDL/encore/fpmult/src/fpmult_stage0.vhdl |
l0 |
L7 |
VL2dEWf?GHUPVQDR901Fd_1 |
120,26 → 123,26
Atwoproc |
R14 |
R15 |
R16 |
R17 |
R1 |
R2 |
DEx4 work 13 fpmult_stage0 0 22 L2dEWf?GHUPVQDR901Fd_1 |
l25 |
L15 |
VC_E;h>YkM6FMKnA:LT6nf3 |
Ve7V<;o6B4c?>d1@GZO^[01 |
R7 |
32 |
Z26 Mx5 4 ieee 14 std_logic_1164 |
R20 |
Z27 Mx3 4 work 10 fp_generic |
Mx2 4 work 18 fpmult_stage0_comp |
Z28 Mx1 4 work 18 fpmult_stagen_comp |
Z27 Mx5 4 ieee 14 std_logic_1164 |
Z28 Mx4 4 ieee 11 numeric_std |
Z29 Mx3 4 work 10 fp_generic |
Z30 Mx2 4 work 18 fpmult_stage0_comp |
Z31 Mx1 4 work 18 fpmult_stagen_comp |
R10 |
R11 |
!s100 KW5[86nlFNQg394Lh2=Y21 |
!s100 >VaD`=lKTd[@WDMh05R4Y1 |
Pfpmult_stage0_comp |
R14 |
R16 |
R17 |
R1 |
R2 |
w1298622844 |
151,23 → 154,23
V?R^WWoo?6<Z:1Qn:WB^il2 |
R7 |
32 |
Z29 Mx4 4 ieee 14 std_logic_1164 |
Z30 Mx3 4 ieee 11 numeric_std |
R22 |
R28 |
Z32 Mx4 4 ieee 14 std_logic_1164 |
Z33 Mx3 4 ieee 11 numeric_std |
R23 |
R31 |
R10 |
R11 |
!s100 ]Jhe1]kYb68zRohSLL[SX2 |
Efpmult_stage23 |
Z31 w1298114894 |
Z34 w1298114894 |
R14 |
R13 |
R16 |
R17 |
R1 |
R2 |
R4 |
Z32 8D:/Work/VHDL/encore/fpmult/src/fpmult_stage23.vhdl |
Z33 FD:/Work/VHDL/encore/fpmult/src/fpmult_stage23.vhdl |
Z35 8D:/Work/VHDL/encore/fpmult/src/fpmult_stage23.vhdl |
Z36 FD:/Work/VHDL/encore/fpmult/src/fpmult_stage23.vhdl |
l0 |
L7 |
V31UgWknMFU?z9^k0X7Vfz0 |
179,7 → 182,7
Atwoproc |
R14 |
R13 |
R16 |
R17 |
R1 |
R2 |
DEx4 work 14 fpmult_stage23 0 22 31UgWknMFU?z9^k0X7Vfz0 |
188,17 → 191,17
VF:e19Y6WO`o6<TUC3QRSh3 |
R7 |
32 |
R26 |
R20 |
R27 |
R28 |
R29 |
Mx2 4 work 19 fpmult_stage23_comp |
R28 |
R31 |
R10 |
R11 |
!s100 RIDXClPf=Q<=5YLKoLG<h2 |
Pfpmult_stage23_comp |
R14 |
R16 |
R17 |
R1 |
R2 |
w1298622862 |
210,22 → 213,86
Vl>OeUL5UY5P7oNm;Lak>a0 |
R7 |
32 |
R32 |
R33 |
R23 |
R31 |
R10 |
R11 |
!s100 85_ZfHLd;b4QSZeob;kmm0 |
Efpmult_stage_pre |
Z37 w1298802793 |
R14 |
R15 |
R16 |
R17 |
R1 |
R2 |
R4 |
Z38 8D:/Work/VHDL/encore/fpmult/src/fpmult_stage_pre.vhdl |
Z39 FD:/Work/VHDL/encore/fpmult/src/fpmult_stage_pre.vhdl |
l0 |
L7 |
VAJRYGQPL9nHZgXzcn`;RE0 |
R7 |
32 |
R10 |
R11 |
!s100 J<ARdoZSR<TK3J65LzXPH2 |
Atwoproc |
R14 |
R15 |
R16 |
R17 |
R1 |
R2 |
DEx4 work 16 fpmult_stage_pre 0 22 AJRYGQPL9nHZgXzcn`;RE0 |
l21 |
L15 |
V2I:EY7n@fE@PU3WNz2fSG3 |
R7 |
32 |
Mx6 4 ieee 14 std_logic_1164 |
R21 |
Mx4 4 work 10 fp_generic |
Mx3 4 work 21 fpmult_stage_pre_comp |
R30 |
R31 |
R10 |
R11 |
!s100 GE;Y;:c26a`ON`1YWL]d=2 |
Pfpmult_stage_pre_comp |
R14 |
R15 |
R17 |
R1 |
R2 |
w1298721018 |
R4 |
8D:/Work/VHDL/encore/fpmult/src/fpmult_stage_pre_comp.vhdl |
FD:/Work/VHDL/encore/fpmult/src/fpmult_stage_pre_comp.vhdl |
l0 |
L7 |
VB^0>3HSBKU9LzPi00>FW11 |
R7 |
32 |
R27 |
R28 |
R29 |
R30 |
R22 |
R28 |
R31 |
R10 |
R11 |
!s100 85_ZfHLd;b4QSZeob;kmm0 |
!s100 @=kLJR?zzQX6_D7mAI;IJ2 |
Efpmult_stagen |
Z34 w1298116579 |
Z40 w1298116579 |
R14 |
R16 |
R17 |
R1 |
R2 |
R4 |
Z35 8D:/Work/VHDL/encore/fpmult/src/fpmult_stageN.vhdl |
Z36 FD:/Work/VHDL/encore/fpmult/src/fpmult_stageN.vhdl |
Z41 8D:/Work/VHDL/encore/fpmult/src/fpmult_stageN.vhdl |
Z42 FD:/Work/VHDL/encore/fpmult/src/fpmult_stageN.vhdl |
l0 |
L7 |
V0>mbz2jf_`ZdK_?nJb7dz2 |
236,7 → 303,7
!s100 g7;zFEZEAMHIMN9V6eC[]2 |
Atwoproc |
R14 |
R16 |
R17 |
R1 |
R2 |
DEx4 work 13 fpmult_stagen 0 22 0>mbz2jf_`ZdK_?nJb7dz2 |
245,15 → 312,15
VLihPPOY0@A4YAeZn5>^jX3 |
R7 |
32 |
R29 |
R30 |
R22 |
R28 |
R32 |
R33 |
R23 |
R31 |
R10 |
R11 |
!s100 [`h:MEoJ=eCjF:7giPjih1 |
Pfpmult_stagen_comp |
R16 |
R17 |
R1 |
R2 |
w1298622905 |
265,21 → 332,21
VXEeJY3OH<`T5HG0=TD@in1 |
R7 |
32 |
R21 |
Z37 Mx2 4 ieee 11 numeric_std |
R22 |
Z43 Mx2 4 ieee 11 numeric_std |
Mx1 4 work 10 fp_generic |
R10 |
R11 |
!s100 3RgfO?mR^8D^8?0PEJ`RX3 |
Etest_fpmult |
Z38 w1298502644 |
Z44 w1298825279 |
R18 |
R1 |
R17 |
R1 |
R16 |
R2 |
R4 |
Z39 8D:/Work/VHDL/encore/fpmult/src/test_fpmult.vhdl |
Z40 FD:/Work/VHDL/encore/fpmult/src/test_fpmult.vhdl |
Z45 8D:/Work/VHDL/encore/fpmult/src/test_fpmult.vhdl |
Z46 FD:/Work/VHDL/encore/fpmult/src/test_fpmult.vhdl |
l0 |
L6 |
VQ7G_fPm1DPBAWY:afUiVV3 |
289,20 → 356,20
R10 |
R11 |
Atestbench |
R18 |
R1 |
R17 |
R1 |
R16 |
R2 |
Z41 DEx4 work 11 test_fpmult 0 22 Q7G_fPm1DPBAWY:afUiVV3 |
l13 |
Z47 DEx4 work 11 test_fpmult 0 22 Q7G_fPm1DPBAWY:afUiVV3 |
l406 |
L9 |
Z42 Vk_6azP<I9N:9[Dd_?@Jg@2 |
Z43 !s100 CST5S81[UFGE>6gd0HOdG2 |
V69aEY]@WQbN[CWYV5RP_V1 |
!s100 ;?7K7YE7fh:Em]9BNnKFQ2 |
R7 |
32 |
R32 |
R29 |
R27 |
R37 |
Z44 Mx1 4 work 11 fpmult_comp |
R43 |
Z48 Mx1 4 work 11 fpmult_comp |
R10 |
R11 |
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0/twoproc.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0/twoproc.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0/twoproc.prw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage0/twoproc.psm
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage23_comp/_primary.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/work/fpmult_stage23_comp/_primary.dbs
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/simulation/modelsim/vsim.wlf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/encore/trunk/fpmult/src/fp_generic.vhdl
28,6 → 28,8
function fp_is_nan(fp:fp_type) return boolean; |
function fp_is_signalling(fp:fp_type) return boolean; |
function fp_is_quiet(fp:fp_type) return boolean; |
function fp_is_positive(fp:fp_type) return boolean; |
function fp_is_negative(fp:fp_type) return boolean; |
|
end package; |
|
68,32 → 70,42
|
function fp_is_zero(fp:fp_type) return boolean is |
begin |
return (fp_exp(fp)=0) and (fp_mantissa(fp)=0); |
return (fp_exp(fp)=0) and (fp_mantissa(fp)(fp_mantissa_type'high-1 downto 0)=0); |
end function fp_is_zero; |
|
function fp_is_subnormal(fp:fp_type) return boolean is |
begin |
return (fp_exp(fp)=0) and (fp_mantissa(fp)/=0); |
return (fp_exp(fp)=0) and (fp_mantissa(fp)(fp_mantissa_type'high-1 downto 0)/=0); |
end function fp_is_subnormal; |
|
function fp_is_infinite(fp:fp_type) return boolean is |
begin |
return (fp_exp_is_max(fp_exp(fp))) and (fp_mantissa(fp)=0); |
return (fp_exp_is_max(fp_exp(fp))) and (fp_mantissa(fp)(fp_mantissa_type'high-1 downto 0)=0); |
end function fp_is_infinite; |
|
function fp_is_nan(fp:fp_type) return boolean is |
begin |
return (fp_exp_is_max(fp_exp(fp))) and (fp_mantissa(fp)/=0); |
return (fp_exp_is_max(fp_exp(fp))) and (fp_mantissa(fp)(fp_mantissa_type'high-1 downto 0)/=0); |
end function fp_is_nan; |
|
function fp_is_signalling(fp:fp_type) return boolean is |
begin |
return fp_is_nan(fp) and fp_mantissa(fp)(22)='0'; |
return fp_is_nan(fp) and fp_mantissa(fp)(fp_mantissa_type'high-1)='0'; |
end function fp_is_signalling; |
|
function fp_is_quiet(fp:fp_type) return boolean is |
begin |
return fp_is_nan(fp) and fp_mantissa(fp)(22)='1'; |
return fp_is_nan(fp) and fp_mantissa(fp)(fp_mantissa_type'high-1)='1'; |
end function fp_is_quiet; |
|
function fp_is_positive(fp:fp_type) return boolean is |
begin |
return (fp_sign(fp)='0'); |
end function fp_is_positive; |
|
function fp_is_negative(fp:fp_type) return boolean is |
begin |
return (fp_sign(fp)='1'); |
end function fp_is_negative; |
|
end package body fp_generic; |
/encore/trunk/fpmult/src/test_fpmult.vhdl
7,9 → 7,402
end; |
|
architecture testbench of test_fpmult is |
type test_condition_type is record |
a:fp_type; |
b:fp_type; |
p:fp_type; |
msg:string(1 to 43); |
end record; |
|
type test_condition_array_type is array(positive range <>) of test_condition_type; |
|
signal clk:std_logic:='0'; |
signal d:fpmult_in_type; |
signal q:fpmult_out_type; |
|
constant number_of_stages:integer:=25; |
constant clock_period:time:=20 ns; |
constant pipeline_delay:time:=number_of_stages*clock_period; |
|
constant plus_zero:fp_type:=x"00000000"; |
constant minus_zero:fp_type:=x"80000000"; |
|
constant plus_normal:fp_type:=x"3FB76CE1"; |
constant minus_normal:fp_type:=x"BFB76CE1"; |
|
constant plus_normal_squared:fp_type:=x"40036CD8"; |
constant minus_normal_squared:fp_type:=x"C0036CD8"; |
|
constant plus_subnormal:fp_type:=x"00051D75"; |
constant minus_subnormal:fp_type:=x"80051D75"; |
|
constant plus_infinite:fp_type:=x"7F800000"; |
constant minus_infinite:fp_type:=x"FF800000"; |
|
constant plus_qnan:fp_type:=x"7FC00000"; |
constant minus_qnan:fp_type:=x"FFC00000"; |
|
constant plus_snan:fp_type:=x"7FBFFFFF"; |
constant minus_snan:fp_type:=x"FFBFFFFF"; |
|
constant multiplier_testset:test_condition_array_type:= |
( |
---------------------------------------------------------------------------- |
-- zero * zero |
---------------------------------------------------------------------------- |
( plus_zero, plus_zero, plus_zero, "+0 * +0 != +0 " ), |
( plus_zero, minus_zero, minus_zero, "+0 * -0 != -0 " ), |
( minus_zero, plus_zero, minus_zero, "-0 * +0 != -0 " ), |
( minus_zero, minus_zero, plus_zero, "-0 * -0 != +0 " ), |
|
---------------------------------------------------------------------------- |
-- zero * normal |
---------------------------------------------------------------------------- |
( plus_zero, plus_normal, plus_zero, "+0 * +normal != +0 " ), |
( plus_zero, minus_normal, minus_zero, "+0 * -normal != -0 " ), |
( minus_zero, plus_normal, minus_zero, "-0 * +normal != -0 " ), |
( minus_zero, minus_normal, plus_zero, "-0 * -normal != +0 " ), |
|
---------------------------------------------------------------------------- |
-- normal * zero |
---------------------------------------------------------------------------- |
( plus_normal, plus_zero, plus_zero, "+normal * +0 != +0 " ), |
( plus_normal, minus_zero, minus_zero, "+normal * -0 != -0 " ), |
( minus_normal, plus_zero, minus_zero, "-normal * +0 != -0 " ), |
( minus_normal, minus_zero, plus_zero, "-normal * -0 != +0 " ), |
|
---------------------------------------------------------------------------- |
-- zero * subnormal |
---------------------------------------------------------------------------- |
( plus_zero, plus_subnormal, plus_zero, "+0 * +subnormal != +0 " ), |
( plus_zero, minus_subnormal, minus_zero, "+0 * -subnormal != -0 " ), |
( minus_zero, plus_subnormal, minus_zero, "-0 * +subnormal != -0 " ), |
( minus_zero, minus_subnormal, plus_zero, "-0 * -subnormal != +0 " ), |
|
---------------------------------------------------------------------------- |
-- subnormal * zero |
---------------------------------------------------------------------------- |
( plus_subnormal, plus_zero, plus_zero, "+subnormal * +0 != +0 " ), |
( plus_subnormal, minus_zero, minus_zero, "+subnormal * -0 != -0 " ), |
( minus_subnormal, plus_zero, minus_zero, "-subnormal * +0 != -0 " ), |
( minus_subnormal, minus_zero, plus_zero, "-subnormal * -0 != +0 " ), |
|
---------------------------------------------------------------------------- |
-- zero * infinite |
---------------------------------------------------------------------------- |
( plus_zero, plus_infinite, plus_qnan, "+0 * +infinite != +qnan " ), |
( plus_zero, minus_infinite, minus_qnan, "+0 * -infinite != -qnan " ), |
( minus_zero, plus_infinite, minus_qnan, "-0 * +infinite != -qnan " ), |
( minus_zero, minus_infinite, plus_qnan, "-0 * -infinite != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- infinite * zero |
---------------------------------------------------------------------------- |
( plus_infinite, plus_zero, plus_qnan, "+infinite * +0 != +qnan " ), |
( plus_infinite, minus_zero, minus_qnan, "+infinite * -0 != -qnan " ), |
( minus_infinite, plus_zero, minus_qnan, "-infinite * +0 != -qnan " ), |
( minus_infinite, minus_zero, plus_qnan, "-infinite * -0 != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- zero * qnan |
---------------------------------------------------------------------------- |
( plus_zero, plus_qnan, plus_qnan, "+0 * +qnan != +qnan " ), |
( plus_zero, minus_qnan, minus_qnan, "+0 * -qnan != -qnan " ), |
( minus_zero, plus_qnan, minus_qnan, "-0 * +qnan != -qnan " ), |
( minus_zero, minus_qnan, plus_qnan, "-0 * -qnan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- qnan * zero |
---------------------------------------------------------------------------- |
( plus_qnan, plus_zero, plus_qnan, "+qnan * +0 != +qnan " ), |
( plus_qnan, minus_zero, minus_qnan, "+qnan * -0 != -qnan " ), |
( minus_qnan, plus_zero, minus_qnan, "-qnan * +0 != -qnan " ), |
( minus_qnan, minus_zero, plus_qnan, "-qnan * -0 != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- zero * snan |
---------------------------------------------------------------------------- |
( plus_zero, plus_snan, plus_qnan, "+0 * +snan != +qnan " ), |
( plus_zero, minus_snan, minus_qnan, "+0 * -snan != -qnan " ), |
( minus_zero, plus_snan, minus_qnan, "-0 * +snan != -qnan " ), |
( minus_zero, minus_snan, plus_qnan, "-0 * -snan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- snan * zero |
---------------------------------------------------------------------------- |
( plus_snan, plus_zero, plus_qnan, "+snan * +0 != +qnan " ), |
( plus_snan, minus_zero, minus_qnan, "+snan * -0 != -qnan " ), |
( minus_snan, plus_zero, minus_qnan, "-snan * +0 != -qnan " ), |
( minus_snan, minus_zero, plus_qnan, "-snan * -0 != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- normal * normal |
---------------------------------------------------------------------------- |
( plus_normal, plus_normal, plus_normal_squared, "+normal * +normal != +normal " ), |
( plus_normal, minus_normal, minus_normal_squared, "+normal * -normal != -normal " ), |
( minus_normal, plus_normal, minus_normal_squared, "-normal * +normal != -normal " ), |
( minus_normal, minus_normal, plus_normal_squared, "-normal * -normal != +normal " ), |
|
---------------------------------------------------------------------------- |
-- normal * subnormal |
---------------------------------------------------------------------------- |
( plus_normal, plus_subnormal, plus_zero, "+normal * +subnormal != +0 " ), |
( plus_normal, minus_subnormal, minus_zero, "+normal * -subnormal != -0 " ), |
( minus_normal, plus_subnormal, minus_zero, "-normal * +subnormal != -0 " ), |
( minus_normal, minus_subnormal, plus_zero, "-normal * -subnormal != +0 " ), |
|
---------------------------------------------------------------------------- |
-- subnormal * normal |
---------------------------------------------------------------------------- |
( plus_subnormal, plus_normal, plus_zero, "+subnormal * +normal != +0 " ), |
( plus_subnormal, minus_normal, minus_zero, "+subnormal * -normal != -0 " ), |
( minus_subnormal, plus_normal, minus_zero, "-subnormal * +normal != -0 " ), |
( minus_subnormal, minus_normal, plus_zero, "-subnormal * -normal != +0 " ), |
|
---------------------------------------------------------------------------- |
-- normal * infinite |
---------------------------------------------------------------------------- |
( plus_normal, plus_infinite, plus_infinite, "+normal * +infinite != +infinite " ), |
( plus_normal, minus_infinite, minus_infinite, "+normal * -infinite != -infinite " ), |
( minus_normal, plus_infinite, minus_infinite, "-normal * +infinite != -infinite " ), |
( minus_normal, minus_infinite, plus_infinite, "-normal * -infinite != +infinite " ), |
|
---------------------------------------------------------------------------- |
-- infinite * normal |
---------------------------------------------------------------------------- |
( plus_infinite, plus_normal, plus_infinite, "+infinite * +normal != +infinite " ), |
( plus_infinite, minus_normal, minus_infinite, "+infinite * -normal != -infinite " ), |
( minus_infinite, plus_normal, minus_infinite, "-infinite * +normal != -infinite " ), |
( minus_infinite, minus_normal, plus_infinite, "-infinite * -normal != +infinite " ), |
|
---------------------------------------------------------------------------- |
-- normal * qnan |
---------------------------------------------------------------------------- |
( plus_normal, plus_qnan, plus_qnan, "+normal * +qnan != +qnan " ), |
( plus_normal, minus_qnan, minus_qnan, "+normal * -qnan != -qnan " ), |
( minus_normal, plus_qnan, minus_qnan, "-normal * +qnan != -qnan " ), |
( minus_normal, minus_qnan, plus_qnan, "-normal * -qnan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- qnan * normal |
---------------------------------------------------------------------------- |
( plus_qnan, plus_normal, plus_qnan, "+qnan * +normal != +qnan " ), |
( plus_qnan, minus_normal, minus_qnan, "+qnan * -normal != -qnan " ), |
( minus_qnan, plus_normal, minus_qnan, "-qnan * +normal != -qnan " ), |
( minus_qnan, minus_normal, plus_qnan, "-qnan * -normal != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- normal * snan |
---------------------------------------------------------------------------- |
( plus_normal, plus_snan, plus_qnan, "+normal * +snan != +qnan " ), |
( plus_normal, minus_snan, minus_qnan, "+normal * -snan != -qnan " ), |
( minus_normal, plus_snan, minus_qnan, "-normal * +snan != -qnan " ), |
( minus_normal, minus_snan, plus_qnan, "-normal * -snan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- snan * normal |
---------------------------------------------------------------------------- |
( plus_snan, plus_normal, plus_qnan, "+snan * +normal != +qnan " ), |
( plus_snan, minus_normal, minus_qnan, "+snan * -normal != -qnan " ), |
( minus_snan, plus_normal, minus_qnan, "-snan * +normal != -qnan " ), |
( minus_snan, minus_normal, plus_qnan, "-snan * -normal != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- subnormal * subnormal |
---------------------------------------------------------------------------- |
( plus_subnormal, plus_subnormal, plus_zero, "+subnormal * +subnormal != +0 " ), |
( plus_subnormal, minus_subnormal, minus_zero, "+subnormal * -subnormal != -0 " ), |
( minus_subnormal, plus_subnormal, minus_zero, "-subnormal * +subnormal != -0 " ), |
( minus_subnormal, minus_subnormal, plus_zero, "-subnormal * -subnormal != +0 " ), |
|
---------------------------------------------------------------------------- |
-- subnormal * infinite |
---------------------------------------------------------------------------- |
( plus_subnormal, plus_infinite, plus_qnan, "+subnormal * +infinite != +qnan " ), |
( plus_subnormal, minus_infinite, minus_qnan, "+subnormal * -infinite != -qnan " ), |
( minus_subnormal, plus_infinite, minus_qnan, "-subnormal * +infinite != -qnan " ), |
( minus_subnormal, minus_infinite, plus_qnan, "-subnormal * -infinite != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- infinite * subnormal |
---------------------------------------------------------------------------- |
( plus_infinite, plus_subnormal, plus_qnan, "+infinite * +subnormal != +qnan " ), |
( plus_infinite, minus_subnormal, minus_qnan, "+infinite * -subnormal != -qnan " ), |
( minus_infinite, plus_subnormal, minus_qnan, "-infinite * +subnormal != -qnan " ), |
( minus_infinite, minus_subnormal, plus_qnan, "-infinite * -subnormal != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- subnormal * qnan |
---------------------------------------------------------------------------- |
( plus_subnormal, plus_qnan, plus_qnan, "+subnormal * +qnan != +qnan " ), |
( plus_subnormal, minus_qnan, minus_qnan, "+subnormal * -qnan != -qnan " ), |
( minus_subnormal, plus_qnan, minus_qnan, "-subnormal * +qnan != -qnan " ), |
( minus_subnormal, minus_qnan, plus_qnan, "-subnormal * -qnan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- qnan * subnormal |
---------------------------------------------------------------------------- |
( plus_qnan, plus_subnormal, plus_qnan, "+qnan * +subnormal != +qnan " ), |
( plus_qnan, minus_subnormal, minus_qnan, "+qnan * -subnormal != -qnan " ), |
( minus_qnan, plus_subnormal, minus_qnan, "-qnan * +subnormal != -qnan " ), |
( minus_qnan, minus_subnormal, plus_qnan, "-qnan * -subnormal != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- subnormal * snan |
---------------------------------------------------------------------------- |
( plus_subnormal, plus_snan, plus_qnan, "+subnormal * +snan != +qnan " ), |
( plus_subnormal, minus_snan, minus_qnan, "+subnormal * -snan != -qnan " ), |
( minus_subnormal, plus_snan, minus_qnan, "-subnormal * +snan != -qnan " ), |
( minus_subnormal, minus_snan, plus_qnan, "-subnormal * -snan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- snan * subnormal |
---------------------------------------------------------------------------- |
( plus_snan, plus_subnormal, plus_qnan, "+snan * +subnormal != +qnan " ), |
( plus_snan, minus_subnormal, minus_qnan, "+snan * -subnormal != -qnan " ), |
( minus_snan, plus_subnormal, minus_qnan, "-snan * +subnormal != -qnan " ), |
( minus_snan, minus_subnormal, plus_qnan, "-snan * -subnormal != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- infinite * infinite |
---------------------------------------------------------------------------- |
( plus_infinite, plus_infinite, plus_infinite, "+infinite * +infinite != +infinite " ), |
( plus_infinite, minus_infinite, minus_infinite, "+infinite * -infinite != -infinite " ), |
( minus_infinite, plus_infinite, minus_infinite, "-infinite * +infinite != -infinite " ), |
( minus_infinite, minus_infinite, plus_infinite, "-infinite * -infinite != +infinite " ), |
|
---------------------------------------------------------------------------- |
-- infinite * qnan |
---------------------------------------------------------------------------- |
( plus_infinite, plus_qnan, plus_qnan, "+infinite * +qnan != +qnan " ), |
( plus_infinite, minus_qnan, minus_qnan, "+infinite * -qnan != -qnan " ), |
( minus_infinite, plus_qnan, minus_qnan, "-infinite * +qnan != -qnan " ), |
( minus_infinite, minus_qnan, plus_qnan, "-infinite * -qnan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- qnan * infinite |
---------------------------------------------------------------------------- |
( plus_qnan, plus_infinite, plus_qnan, "+qnan * +infinite != +qnan " ), |
( plus_qnan, minus_infinite, minus_qnan, "+qnan * -infinite != -qnan " ), |
( minus_qnan, plus_infinite, minus_qnan, "-qnan * +infinite != -qnan " ), |
( minus_qnan, minus_infinite, plus_qnan, "-qnan * -infinite != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- infinite * snan |
---------------------------------------------------------------------------- |
( plus_infinite, plus_snan, plus_qnan, "+infinite * +snan != +qnan " ), |
( plus_infinite, minus_snan, minus_qnan, "+infinite * -snan != -qnan " ), |
( minus_infinite, plus_snan, minus_qnan, "-infinite * +snan != -qnan " ), |
( minus_infinite, minus_snan, plus_qnan, "-infinite * -snan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- snan * infinite |
---------------------------------------------------------------------------- |
( plus_snan, plus_infinite, plus_qnan, "+snan * +infinite != +qnan " ), |
( plus_snan, minus_infinite, minus_qnan, "+snan * -infinite != -qnan " ), |
( minus_snan, plus_infinite, minus_qnan, "-snan * +infinite != -qnan " ), |
( minus_snan, minus_infinite, plus_qnan, "-snan * -infinite != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- qnan * qnan |
---------------------------------------------------------------------------- |
( plus_qnan, plus_qnan, plus_qnan, "+qnan * +qnan != +qnan " ), |
( plus_qnan, minus_qnan, minus_qnan, "+qnan * -qnan != -qnan " ), |
( minus_qnan, plus_qnan, minus_qnan, "-qnan * +qnan != -qnan " ), |
( minus_qnan, minus_qnan, plus_qnan, "-qnan * -qnan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- qnan * snan |
---------------------------------------------------------------------------- |
( plus_qnan, plus_snan, plus_qnan, "+qnan * +snan != +qnan " ), |
( plus_qnan, minus_snan, minus_qnan, "+qnan * -snan != -qnan " ), |
( minus_qnan, plus_snan, minus_qnan, "-qnan * +snan != -qnan " ), |
( minus_qnan, minus_snan, plus_qnan, "-qnan * -snan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- snan * qnan |
---------------------------------------------------------------------------- |
( plus_snan, plus_qnan, plus_qnan, "+snan * +qnan != +qnan " ), |
( plus_snan, minus_qnan, minus_qnan, "+snan * -qnan != -qnan " ), |
( minus_snan, plus_qnan, minus_qnan, "-snan * +qnan != -qnan " ), |
( minus_snan, minus_qnan, plus_qnan, "-snan * -qnan != +qnan " ), |
|
---------------------------------------------------------------------------- |
-- snan * snan |
---------------------------------------------------------------------------- |
( plus_snan, plus_snan, plus_qnan, "+snan * +snan != +qnan " ), |
( plus_snan, minus_snan, minus_qnan, "+snan * -snan != -qnan " ), |
( minus_snan, plus_snan, minus_qnan, "-snan * +snan != -qnan " ), |
( minus_snan, minus_snan, plus_qnan, "-snan * -snan != +qnan " ) |
); |
|
constant pipeline_testset:test_condition_array_type:= |
( |
( x"2923be84", x"e16cd6ae", x"cb177cf2", " 3.63585e-14 * -2.73056e+20 != -9.92792e+06" ), |
( x"529049f1", x"f1bbe9eb", x"ff800000", " 3.09858e+11 * -1.86101e+30 != -infinite" ), |
( x"b3a6db3c", x"870c3e99", x"000016da", "-7.76986e-08 * -1.05508e-34 != +subnormal" ), |
( x"245e0d1c", x"06b747de", x"00000000", " 4.81497e-17 * 6.89425e-35 != +zero" ), |
( x"b3124dc8", x"43bb8ba6", x"b7565d40", "-3.40640e-08 * 3.75091e+02 != -1.27771e-05" ), |
( x"1f035a7d", x"0938251f", x"00000000", " 2.78152e-20 * 2.21656e-33 != +zero" ), |
( x"5dd4cbfc", x"96f5453b", x"b54be0c4", " 1.91670e+18 * -3.96256e-25 != -7.59505e-07" ), |
( x"130d890a", x"1cdbae32", x"00000000", " 1.78643e-27 * 1.45372e-21 != +zero" ), |
( x"209a50ee", x"407836fd", x"21959f8c", " 2.61422e-19 * 3.87836e+00 != 1.01389e-18" ), |
( x"124932f6", x"9e7d49dc", x"80000000", " 6.34872e-28 * -1.34090e-20 != -zero" ), |
( x"ad4f14f2", x"444066d0", x"b21ba2e0", "-1.17712e-11 * 7.69606e+02 != -9.05922e-09" ), |
( x"6bc430b7", x"323ba122", x"5e8fcb12", " 4.74359e+26 * 1.09215e-08 != 5.18070e+18" ), |
( x"f622919d", x"e18b1fda", x"7f800000", "-8.24322e+32 * -3.20799e+20 != +infinite" ), |
( x"b0ca9902", x"b9729d49", x"2ac0011d", "-1.47409e-09 * -2.31375e-04 != 3.41068e-13" ), |
( x"2c807ec5", x"99d5e980", x"86d6bd5b", " 3.65205e-12 * -2.21180e-23 != -8.07761e-35" ), |
( x"b2eac9cc", x"53bf67d6", x"c72f8bcb", "-2.73330e-08 * 1.64416e+12 != -4.49398e+04" ), |
( x"bf14d67e", x"2ddc8e66", x"ad803b1f", "-5.81398e-01 * 2.50743e-11 != -1.45782e-11" ), |
( x"83ef5749", x"61ff698f", x"a66ecaa2", "-1.40672e-36 * 5.88941e+20 != -8.28475e-16" ), |
( x"61cdd11e", x"9d9c1672", x"bffafaf4", " 4.74581e+20 * -4.13161e-21 != -1.96078e+00" ), |
( x"72e61df0", x"844f4a77", x"b7ba5525", " 9.11587e+30 * -2.43669e-36 != -2.22126e-05" ), |
( x"02d7e839", x"2c53cbc9", x"00000000", " 3.17247e-37 * 3.00980e-12 != +zero" ), |
( x"121e3374", x"9e0cf4d5", x"80000000", " 4.99194e-28 * -7.46217e-21 != -zero" ), |
( x"d49fd4a4", x"597e35cf", x"ee9eb693", "-5.49174e+12 * 4.47211e+15 != -2.45597e+28" ), |
( x"3222f4cc", x"cfd3902d", x"c286ab8a", " 9.48530e-09 * -7.09888e+09 != -6.73350e+01" ), |
( x"48d38f75", x"e6d91d2a", x"f0336cb4", " 4.33276e+05 * -5.12646e+23 != -2.22117e+29" ), |
( x"e5c0f72b", x"78818744", x"ff800000", "-1.13907e+23 * 2.10172e+34 != -infinite" ), |
( x"0e5f5000", x"d4618dbe", x"a344c0f5", " 2.75254e-30 * -3.87498e+12 != -1.06660e-17" ), |
( x"7b051507", x"3b33821f", x"76baa2b1", " 6.91002e+35 * 2.73908e-03 != 1.89271e+33" ), |
( x"187092da", x"6454ceb1", x"3d47fbd9", " 3.10934e-24 * 1.57024e+22 != 4.88242e-02" ), |
( x"853e6915", x"f8466a04", x"3e139421", "-8.95306e-36 * -1.60973e+34 != 1.44120e-01" ), |
( x"96730ed9", x"162f6768", x"80000000", "-1.96341e-25 * 1.41690e-25 != -zero" ), |
( x"d4f74a4a", x"d0576876", x"65d0144c", "-8.49683e+12 * -1.44558e+10 != 1.22828e+23" ), |
( x"fa16bb11", x"adae2488", x"684d1150", "-1.95660e+35 * -1.97977e-11 != 3.87362e+24" ), |
( x"79fe52db", x"2543e53c", x"5fc29cd9", " 1.65065e+35 * 1.69912e-16 != 2.80466e+19" ), |
( x"f445d3d8", x"28ce0bf5", x"dd9f39b5", "-6.26940e+31 * 2.28758e-14 != -1.43418e+18" ), |
( x"c560593d", x"97278a59", x"1d12d375", "-3.58958e+03 * -5.41352e-25 != 1.94323e-21" ), |
( x"762dd0c2", x"c9cd68d4", x"ff800000", " 8.81349e+32 * -1.68271e+06 != -infinite" ), |
( x"496a7925", x"08614014", x"124e4f2a", " 9.60402e+05 * 6.77838e-34 != 6.50997e-28" ), |
( x"b13b6aa5", x"1128c18c", x"82f7175c", "-2.72727e-09 * 1.33125e-28 != -3.63068e-37" ), |
( x"d6a90b87", x"978c2ff1", x"2eb923ec", "-9.29335e+13 * -9.05939e-25 != 8.41921e-11" ), |
( x"151d9a95", x"c19be1c0", x"973fef27", " 3.18278e-26 * -1.94852e+01 != -6.20173e-25" ), |
( x"7ee9a89a", x"a786c2b5", x"e6f5ffef", " 1.55293e+38 * -3.74036e-15 != -5.80850e+23" ), |
( x"54bf9ae7", x"d923d155", x"ee75389c", " 6.58350e+12 * -2.88191e+15 != -1.89731e+28" ), |
( x"903828d1", x"d96ca166", x"2a2a39bc", "-3.63190e-29 * -4.16285e+15 != 1.51191e-13" ), |
( x"5e4ee130", x"9cfed971", x"bbcdf326", " 3.72681e+18 * -1.68645e-21 != -6.28509e-03" ), |
( x"9fe2a5e2", x"0c9bb447", x"80000000", "-9.59892e-20 * 2.39900e-31 != -zero" ), |
( x"65382a46", x"89a98279", x"af73e389", " 5.43560e+22 * -4.08080e-33 != -2.21816e-10" ), |
( x"7a7678c2", x"63b126df", x"7f800000", " 3.19939e+35 * 6.53575e+21 != +infinite" ), |
( x"da296d3e", x"62e09612", x"fd94a2e8", "-1.19223e+16 * 2.07144e+21 != -2.46965e+37" ), |
( x"34bf39a6", x"3f895ef1", x"34cd398a", " 3.56185e-07 * 1.07321e+00 != 3.82261e-07" ), |
( x"6d0ee36c", x"28a11e20", x"5633dbaf", " 2.76386e+27 * 1.78877e-14 != 4.94390e+13" ), |
( x"1dcbc203", x"3f410784", x"1d99a340", " 5.39343e-21 * 7.54021e-01 != 4.06676e-21" ), |
( x"0f140565", x"1b2861c9", x"00000000", " 7.29800e-30 * 1.39282e-22 != +zero" ), |
( x"c5e72c8e", x"463608dc", x"cca461ad", "-7.39757e+03 * 1.16502e+04 != -8.61833e+07" ), |
( x"f3a88dfe", x"bef2eb71", x"731ff13f", "-2.67086e+31 * -4.74453e-01 != 1.26719e+31" ), |
( x"ffa0d03b", x"75068c7e", x"ffe0d03b", " -qnan * 1.70561e+32 != -snan" ), |
( x"8778734d", x"d0be82be", x"18b8e476", "-1.86913e-34 * -2.55699e+10 != 4.77936e-24" ), |
( x"dbc24641", x"2b8cfa30", x"c7d5f891", "-1.09367e+17 * 1.00170e-12 != -1.09553e+05" ), |
( x"7f70f0a7", x"54863295", x"7f800000", " 3.20264e+38 * 4.61099e+12 != +infinite" ), |
( x"aa5b6813", x"0be6fcf5", x"8000000c", "-1.94872e-13 * 8.89734e-32 != -subnormal" ), |
( x"cabe7d9f", x"898a411b", x"14cdc053", "-6.24200e+06 * -3.32835e-33 != 2.07756e-26" ), |
( x"fdb84f68", x"f6727b14", x"7f800000", "-3.06238e+37 * -1.22952e+33 != +infinite" ), |
( x"99cdd30d", x"f0443ab4", x"4a9dc4c8", "-2.12817e-23 * -2.42920e+29 != 5.16976e+06" ), |
( x"a6665333", x"0bcba110", x"80000000", "-7.99100e-16 * 7.84351e-32 != -zero" ) |
); |
begin |
|
dut:fpmult port map(clk,d,q); |
16,14 → 409,205
|
clock:process |
begin |
wait for 10 ns; clk <= not clk; |
wait for (clock_period/2); |
clk<=not clk; |
end process clock; |
|
stimulus:process |
variable test_condition:test_condition_type; |
begin |
d.a<="00111111110110010100011101010101"; -- 0x3FD94755 -> 1.69748938 |
d.b<="00111111101101110110110011100001"; -- 0x3FB76CE1 -> 1.43301022 |
wait; |
----------------------------------------------------------------------------- |
-- Check qualifying functions and constants |
----------------------------------------------------------------------------- |
assert not fp_is_normal(plus_zero) report "Bad +0" severity error; |
assert fp_is_zero(plus_zero) report "Bad +0" severity error; |
assert not fp_is_subnormal(plus_zero) report "Bad +0" severity error; |
assert not fp_is_infinite(plus_zero) report "Bad +0" severity error; |
assert not fp_is_nan(plus_zero) report "Bad +0" severity error; |
assert not fp_is_signalling(plus_zero) report "Bad +0" severity error; |
assert not fp_is_quiet(plus_zero) report "Bad +0" severity error; |
assert fp_is_positive(plus_zero) report "Bad +0" severity error; |
assert not fp_is_negative(plus_zero) report "Bad +0" severity error; |
|
assert not fp_is_normal(minus_zero) report "Bad -0" severity error; |
assert fp_is_zero(minus_zero) report "Bad -0" severity error; |
assert not fp_is_subnormal(minus_zero) report "Bad -0" severity error; |
assert not fp_is_infinite(minus_zero) report "Bad -0" severity error; |
assert not fp_is_nan(minus_zero) report "Bad -0" severity error; |
assert not fp_is_signalling(minus_zero) report "Bad -0" severity error; |
assert not fp_is_quiet(minus_zero) report "Bad -0" severity error; |
assert not fp_is_positive(minus_zero) report "Bad -0" severity error; |
assert fp_is_negative(minus_zero) report "Bad -0" severity error; |
|
assert fp_is_normal(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_zero(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_subnormal(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_infinite(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_nan(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_signalling(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_quiet(plus_normal) report "Bad +normal" severity error; |
assert fp_is_positive(plus_normal) report "Bad +normal" severity error; |
assert not fp_is_negative(plus_normal) report "Bad +normal" severity error; |
|
assert fp_is_normal(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_zero(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_subnormal(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_infinite(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_nan(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_signalling(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_quiet(minus_normal) report "Bad -normal" severity error; |
assert not fp_is_positive(minus_normal) report "Bad -normal" severity error; |
assert fp_is_negative(minus_normal) report "Bad -normal" severity error; |
|
assert fp_is_normal(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_zero(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_subnormal(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_infinite(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_nan(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_signalling(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_quiet(plus_normal_squared) report "Bad +normal^2" severity error; |
assert fp_is_positive(plus_normal_squared) report "Bad +normal^2" severity error; |
assert not fp_is_negative(plus_normal_squared) report "Bad +normal^2" severity error; |
|
assert fp_is_normal(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_zero(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_subnormal(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_infinite(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_nan(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_signalling(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_quiet(minus_normal_squared) report "Bad -normal^2" severity error; |
assert not fp_is_positive(minus_normal_squared) report "Bad -normal^2" severity error; |
assert fp_is_negative(minus_normal_squared) report "Bad -normal^2" severity error; |
|
assert not fp_is_normal(plus_subnormal) report "Bad +subnormal" severity error; |
assert not fp_is_zero(plus_subnormal) report "Bad +subnormal" severity error; |
assert fp_is_subnormal(plus_subnormal) report "Bad +subnormal" severity error; |
assert not fp_is_infinite(plus_subnormal) report "Bad +subnormal" severity error; |
assert not fp_is_nan(plus_subnormal) report "Bad +subnormal" severity error; |
assert not fp_is_signalling(plus_subnormal) report "Bad +subnormal" severity error; |
assert not fp_is_quiet(plus_subnormal) report "Bad +subnormal" severity error; |
assert fp_is_positive(plus_subnormal) report "Bad +subnormal" severity error; |
assert not fp_is_negative(plus_subnormal) report "Bad +subnormal" severity error; |
|
assert not fp_is_normal(minus_subnormal) report "Bad -subnormal" severity error; |
assert not fp_is_zero(minus_subnormal) report "Bad -subnormal" severity error; |
assert fp_is_subnormal(minus_subnormal) report "Bad -subnormal" severity error; |
assert not fp_is_infinite(minus_subnormal) report "Bad -subnormal" severity error; |
assert not fp_is_nan(minus_subnormal) report "Bad -subnormal" severity error; |
assert not fp_is_signalling(minus_subnormal) report "Bad -subnormal" severity error; |
assert not fp_is_quiet(minus_subnormal) report "Bad -subnormal" severity error; |
assert not fp_is_positive(minus_subnormal) report "Bad -subnormal" severity error; |
assert fp_is_negative(minus_subnormal) report "Bad -subnormal" severity error; |
|
assert not fp_is_normal(plus_infinite) report "Bad +infinite" severity error; |
assert not fp_is_zero(plus_infinite) report "Bad +infinite" severity error; |
assert not fp_is_subnormal(plus_infinite) report "Bad +infinite" severity error; |
assert fp_is_infinite(plus_infinite) report "Bad +infinite" severity error; |
assert not fp_is_nan(plus_infinite) report "Bad +infinite" severity error; |
assert not fp_is_signalling(plus_infinite) report "Bad +infinite" severity error; |
assert not fp_is_quiet(plus_infinite) report "Bad +infinite" severity error; |
assert fp_is_positive(plus_infinite) report "Bad +infinite" severity error; |
assert not fp_is_negative(plus_infinite) report "Bad +infinite" severity error; |
|
assert not fp_is_normal(minus_infinite) report "Bad -infinite" severity error; |
assert not fp_is_zero(minus_infinite) report "Bad -infinite" severity error; |
assert not fp_is_subnormal(minus_infinite) report "Bad -infinite" severity error; |
assert fp_is_infinite(minus_infinite) report "Bad -infinite" severity error; |
assert not fp_is_nan(minus_infinite) report "Bad -infinite" severity error; |
assert not fp_is_signalling(minus_infinite) report "Bad -infinite" severity error; |
assert not fp_is_quiet(minus_infinite) report "Bad -infinite" severity error; |
assert not fp_is_positive(minus_infinite) report "Bad -infinite" severity error; |
assert fp_is_negative(minus_infinite) report "Bad -infinite" severity error; |
|
assert not fp_is_normal(plus_qnan) report "Bad +qnan" severity error; |
assert not fp_is_zero(plus_qnan) report "Bad +qnan" severity error; |
assert not fp_is_subnormal(plus_qnan) report "Bad +qnan" severity error; |
assert not fp_is_infinite(plus_qnan) report "Bad +qnan" severity error; |
assert fp_is_nan(plus_qnan) report "Bad +qnan" severity error; |
assert not fp_is_signalling(plus_qnan) report "Bad +qnan" severity error; |
assert fp_is_quiet(plus_qnan) report "Bad +qnan" severity error; |
assert fp_is_positive(plus_qnan) report "Bad +qnan" severity error; |
assert not fp_is_negative(plus_qnan) report "Bad +qnan" severity error; |
|
assert not fp_is_normal(minus_qnan) report "Bad -qnan" severity error; |
assert not fp_is_zero(minus_qnan) report "Bad -qnan" severity error; |
assert not fp_is_subnormal(minus_qnan) report "Bad -qnan" severity error; |
assert not fp_is_infinite(minus_qnan) report "Bad -qnan" severity error; |
assert fp_is_nan(minus_qnan) report "Bad -qnan" severity error; |
assert not fp_is_signalling(minus_qnan) report "Bad -qnan" severity error; |
assert fp_is_quiet(minus_qnan) report "Bad -qnan" severity error; |
assert not fp_is_positive(minus_qnan) report "Bad -qnan" severity error; |
assert fp_is_negative(minus_qnan) report "Bad -qnan" severity error; |
|
assert not fp_is_normal(plus_snan) report "Bad +snan" severity error; |
assert not fp_is_zero(plus_snan) report "Bad +snan" severity error; |
assert not fp_is_subnormal(plus_snan) report "Bad +snan" severity error; |
assert not fp_is_infinite(plus_snan) report "Bad +snan" severity error; |
assert fp_is_nan(plus_snan) report "Bad +snan" severity error; |
assert fp_is_signalling(plus_snan) report "Bad +snan" severity error; |
assert not fp_is_quiet(plus_snan) report "Bad +snan" severity error; |
assert fp_is_positive(plus_snan) report "Bad +snan" severity error; |
assert not fp_is_negative(plus_snan) report "Bad +snan" severity error; |
|
assert not fp_is_normal(minus_snan) report "Bad -snan" severity error; |
assert not fp_is_zero(minus_snan) report "Bad -snan" severity error; |
assert not fp_is_subnormal(minus_snan) report "Bad -snan" severity error; |
assert not fp_is_infinite(minus_snan) report "Bad -snan" severity error; |
assert fp_is_nan(minus_snan) report "Bad -snan" severity error; |
assert fp_is_signalling(minus_snan) report "Bad -snan" severity error; |
assert not fp_is_quiet(minus_snan) report "Bad -snan" severity error; |
assert not fp_is_positive(minus_snan) report "Bad -snan" severity error; |
assert fp_is_negative(minus_snan) report "Bad -snan" severity error; |
|
----------------------------------------------------------------------------- |
-- Check multiplier |
----------------------------------------------------------------------------- |
for i in multiplier_testset'range loop |
test_condition:=multiplier_testset(i); |
d.a<=test_condition.a; |
d.b<=test_condition.b; |
wait for pipeline_delay; |
assert q.p = test_condition.p report test_condition.msg severity error; |
end loop; |
|
----------------------------------------------------------------------------- |
-- Check pipeline |
----------------------------------------------------------------------------- |
for i in pipeline_testset'range loop |
test_condition:=pipeline_testset(i); |
d.a<=test_condition.a; |
d.b<=test_condition.b; |
wait for clock_period; |
if i>=number_of_stages then |
assert q.p = pipeline_testset(i-number_of_stages+1).p report pipeline_testset(i-number_of_stages+1).msg severity error; |
end if; |
end loop; |
|
d.a<="0"&"01111111"&"10110010100011101010101"; -- 0x3FD94755 -> +1.69748938083648681640625E0 |
d.b<="0"&"01111111"&"01101110110110011100001"; -- 0x3FB76CE1 -> +1.43301022052764892578125E0 |
-- 0 01111111 100110111010111001100110110100101000110110110101 |
-- 0 10000000 100110111010111001100110110100101000110110110101 |
-- 0 10000000 00110111010111001100111 0x401bae67 -> +2.4325196743011474609375E0 |
-- |-----||--||-----||--||--||--||--||--| |
wait for 20 ns; |
|
d.a<="1"&"10000000"&"10010010000111111011011"; -- 0xC0490FDB -> -3.1415927410125732421875E0 |
d.b<="0"&"10000010"&"00001011110001011101010"; -- 0x4105E2EA -> +8.3678989410400390625E0 |
-- 1 10000011 011010010010011101110100100011101101010000101110 |
-- 1 10000011 11010010010011101110100100011101101010000101110 |
-- 1 10000011 10100100100111011101001 0xC1D24EE9 -> -2.62885303497314453125E1 |
-- |-----||--||-----||--||--||--||--||--| |
wait for 20 ns; |
|
d.a<="1"&"10000101"&"01110011100001000111010"; -- 0xC2B9C23A -> -9.28793487548828125E1 |
d.b<="1"&"10000111"&"11010001001111000001110"; -- 0xC3E89E0E -> -4.6523480224609375E2 |
-- 0 10001101 101010001100101010110100100110000110101100101100 |
-- 0 10001110 101010001100101010110100100110000110101100101100 |
-- 0 10001110 01010001100101010110101 0x4728CAB5 -> +4.321070703125E4 |
-- |-----||--||-----||--||--||--||--||--| |
wait for 20 ns; |
|
wait for 1 us; |
end process stimulus; |
|
end testbench; |
/encore/trunk/fpmult/src/fpmult.vhdl
1,6 → 1,7
library ieee; |
use ieee.std_logic_1164.all; |
use work.fpmult_comp.all; |
use work.fpmult_stage_pre_comp.all; |
use work.fpmult_stage0_comp.all; |
use work.fpmult_stageN_comp.all; |
use work.fpmult_stage23_comp.all; |
14,6 → 15,8
end; |
|
architecture structural of fpmult is |
signal fpmult_stage_pre_in:fpmult_stage_pre_in_type; |
signal fpmult_stage_pre_out:fpmult_stage_pre_out_type; |
signal fpmult_stage0_in:fpmult_stage0_in_type; |
signal fpmult_stage0_out:fpmult_stage0_out_type; |
signal fpmult_stage23_in:fpmult_stage23_in_type; |
23,8 → 26,13
signal fpmult_stageN_in_array:fpmult_stageN_in_array_type; |
signal fpmult_stageN_out_array:fpmult_stageN_out_array_type; |
begin |
fpmult_stage0_in.a<=d.a; |
fpmult_stage0_in.b<=d.b; |
fpmult_stage_pre_in.a<=d.a; |
fpmult_stage_pre_in.b<=d.b; |
|
stage_pre:fpmult_stage_pre port map(clk,fpmult_stage_pre_in,fpmult_stage_pre_out); |
|
fpmult_stage0_in.a<=fpmult_stage_pre_out.a; |
fpmult_stage0_in.b<=fpmult_stage_pre_out.b; |
|
stage0:fpmult_stage0 port map(clk,fpmult_stage0_in,fpmult_stage0_out); |
|
/encore/trunk/fpmult/src/fpmult_stage0.vhdl
1,97 → 1,62
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
use work.fp_generic.all; |
use work.fpmult_stage0_comp.all; |
|
entity fpmult_stage0 is |
port( |
clk:in std_logic; |
d:in fpmult_stage0_in_type; |
q:out fpmult_stage0_out_type |
); |
end; |
|
architecture twoproc of fpmult_stage0 is |
type reg_type is record |
a:fp_type; |
b:fp_type; |
|
p_sign:fp_sign_type; |
p_exp:fp_exp_type; |
p_mantissa:fp_long_mantissa_type; |
end record; |
signal r,rin:reg_type; |
begin |
comb:process(d,r) |
variable v:reg_type; |
variable a_is_normal,b_is_normal:boolean; |
variable a_is_subnormal,b_is_subnormal:boolean; |
variable a_is_zero,b_is_zero:boolean; |
variable a_is_infinite,b_is_infinite:boolean; |
variable a_is_nan,b_is_nan:boolean; |
variable is_normal:boolean; |
variable is_zero:boolean; |
variable is_infinite:boolean; |
variable is_nan:boolean; |
begin |
-- sample register outputs |
v:=r; |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
use work.fp_generic.all; |
use work.fpmult_stage0_comp.all; |
|
entity fpmult_stage0 is |
port( |
clk:in std_logic; |
d:in fpmult_stage0_in_type; |
q:out fpmult_stage0_out_type |
); |
end; |
|
architecture twoproc of fpmult_stage0 is |
type reg_type is record |
a:fp_type; |
b:fp_type; |
|
p_sign:fp_sign_type; |
p_exp:fp_exp_type; |
p_mantissa:fp_long_mantissa_type; |
end record; |
signal r,rin:reg_type; |
begin |
comb:process(d,r) |
variable v:reg_type; |
begin |
-- sample register outputs |
v:=r; |
|
-- overload |
v.a:=d.a; |
v.b:=d.b; |
|
a_is_normal:=fp_is_normal(v.a); |
b_is_normal:=fp_is_normal(v.b); |
a_is_subnormal:=fp_is_subnormal(v.a); |
b_is_subnormal:=fp_is_subnormal(v.b); |
a_is_zero:=fp_is_zero(v.a); |
b_is_zero:=fp_is_zero(v.b); |
a_is_infinite:=fp_is_infinite(v.a); |
b_is_infinite:=fp_is_infinite(v.b); |
a_is_nan:=fp_is_nan(v.a); |
b_is_nan:=fp_is_nan(v.b); |
|
if a_is_normal or b_is_normal then |
if a_is_normal and b_is_normal then |
is_normal:=true; |
end if; |
if a_is_zero or b_is_zero then |
is_zero:=true; |
end if; |
if a_is_infinite or b_is_infinite then |
is_infinite:=true; |
end if; |
if a_is_nan or b_is_nan then |
is_nan:=true; |
end if; |
end if; |
|
v.p_sign:=fp_sign(d.a) xor fp_sign(d.b); |
v.p_exp:=fp_exp(d.a) + fp_exp(d.b) - 127; |
if fp_mantissa(d.b)(0)='1' then |
v.p_mantissa:=resize(fp_mantissa(d.a),48); |
else |
v.p_mantissa:=(others=>'0'); |
end if; |
|
-- drive register inputs |
rin<=v; |
|
-- drive outputs |
q.a<=r.a; |
q.b<=r.b; |
|
q.p_sign<=r.p_sign; |
q.p_exp<=r.p_exp; |
q.p_mantissa<=r.p_mantissa; |
end process; |
|
seq:process(clk,rin) |
begin |
if rising_edge(clk) then |
r<=rin; |
end if; |
end process; |
v.a:=d.a; |
v.b:=d.b; |
|
v.p_sign:=fp_sign(d.a) xor fp_sign(d.b); |
v.p_exp:=fp_exp(d.a) + fp_exp(d.b) - 127; |
if fp_mantissa(d.b)(0)='1' then |
v.p_mantissa:=resize(fp_mantissa(d.a),48); |
else |
v.p_mantissa:=(others=>'0'); |
end if; |
|
-- drive register inputs |
rin<=v; |
|
-- drive outputs |
q.a<=r.a; |
q.b<=r.b; |
|
q.p_sign<=r.p_sign; |
q.p_exp<=r.p_exp; |
q.p_mantissa<=r.p_mantissa; |
end process; |
|
seq:process(clk,rin) |
begin |
if rising_edge(clk) then |
r<=rin; |
end if; |
end process; |
end; |