[VHDL] floating point adder 부동소수점 가산기 전체 소스코드 (IEEE754)
*영*
다운로드
장바구니
소개글
Floating_Point_Adderinput, output, component 정의
각 단계(stage1~stage7)를 순차적으로 실행
stage_1 : Compare_Exponent
두 수의 지수를 비교 후 부호 비트, 지수 부분, 분수 부분을 결정하는 함수
두 입력 값의 지수 부분을 비교한다.
지수 부분이 큰 수를 out_1에 저장하고, 지수 부분이 작은 수를 out_2에 저장한다.
최상위 1bit는 sign, 23~30bit는 exponent, 0~22bit는 mantissa로 분리한다.
stage_2 : Compute_Shift
작은 지수가 큰 지수와 같은 값을 갖게 될 때까지 shift해 주는 함수
큰 지수(in_Exp_1)에서 작은 지수(in_Exp_2)를 뺀 결과를 저장(Exp_Sub)한다.
두 지수의 차이만큼 오른쪽 시프트를 하기 위해서 Shift 변수에 저장한다.
stage_3 : Shift_Man
유효숫자 계산할 때 맨 앞자리에 Bit_Man_1을 계산해서 추가한다. 선행하는 1은 유효자리에 숨겨져 있기
때문에 0이 아닌 이상에는 Bit_Man_1은 1이 될 것이다.
지수가 작았던 수는 stage_2에서 shift를 계산했던 만큼 오른쪽으로 시프트하여 결과 값을 저장 한다.
FUNCTION or_reduce(arg : SIGNED) RETURN STD_LOGIC;
Result subtype: STD_LOGIC.
Result: : Result of or'ing all of the bits of the vector.
stage_4 : Compare_Man
두 수의 부호비트가 같을 경우와 다를 경우로 나뉜다.
두 수의 부호비트가 다를 경우 유효숫자가 큰 수를 out_Man_1에 저장한다.
결과 값의 exponent는 처음 기준이 되었던 in_Exp_1으로 설정한다.
stage_5 : AddSub_Man
overflow가 생길 경우를 대비해서 1bit를 확장하여 최상위 비트에 0을 추가한다.
stage_4에서 조사한 두 부호비트의 상황에 맞춰 같은 부호이면 두 유효숫자를 더하고, 다른 부호이면
두 유효숫자의 차를 계산한다.
stage_6 : Normal_1
두 유효숫자의 연산 결과를 분석하는 함수
연산 결과에 따라 지수 조정을 해야 한다. overflow가 생긴 경우, 지수 조정이 필요 없는 경우,
지수 조정이 필요한 경우, 결과 값이 0인 경우로 나뉜다.
어느 비트에서 처음으로 1이 발생했는지에 따라 구분된다.
stage_7 : Normal_2
유효자리를 정규화 하는 함수
만약 carry가 발생했다면 exponent에 1을 더해준다.
최종 결과 값을 저장한다.
컴파일 실행환경
쿼터스 4.2 이상압축파일 내 파일목록
AddSub_Man.vhd
add_sub_1qh.tdf
add_sub_2qh.tdf
add_sub_5sh.tdf
add_sub_hoh.tdf
add_sub_ioh.tdf
add_sub_kth.tdf
cmp_state.ini
Compare_Exponent.vhd
Compare_Man.vhd
Compute_Shift.vhd
Floating_Point_Adder.(0).cnf.cdb
Floating_Point_Adder.(0).cnf.hdb
Floating_Point_Adder.(1).cnf.cdb
Floating_Point_Adder.(1).cnf.hdb
Floating_Point_Adder.(2).cnf.cdb
Floating_Point_Adder.(2).cnf.hdb
Floating_Point_Adder.(3).cnf.cdb
Floating_Point_Adder.(3).cnf.hdb
Floating_Point_Adder.(4).cnf.cdb
Floating_Point_Adder.(4).cnf.hdb
Floating_Point_Adder.(5).cnf.cdb
Floating_Point_Adder.(5).cnf.hdb
Floating_Point_Adder.(6).cnf.cdb
Floating_Point_Adder.(6).cnf.hdb
Floating_Point_Adder.(7).cnf.cdb
Floating_Point_Adder.(7).cnf.hdb
Floating_Point_Adder.asm.qmsg
Floating_Point_Adder.asm.rpt
Floating_Point_Adder.cmp.cdb
Floating_Point_Adder.cmp.ddb
Floating_Point_Adder.cmp.hdb
Floating_Point_Adder.cmp.rdb
Floating_Point_Adder.cmp.tdb
Floating_Point_Adder.cmp0.ddb
Floating_Point_Adder.db_info
Floating_Point_Adder.done
Floating_Point_Adder.eco.cdb
Floating_Point_Adder.eds_overflow
Floating_Point_Adder.fit.eqn
Floating_Point_Adder.fit.qmsg
Floating_Point_Adder.fit.rpt
Floating_Point_Adder.fit.summary
Floating_Point_Adder.flow.rpt
Floating_Point_Adder.fnsim.cdb
Floating_Point_Adder.fnsim.hdb
Floating_Point_Adder.hier_info
Floating_Point_Adder.hif
Floating_Point_Adder.icc
Floating_Point_Adder.map.cdb
Floating_Point_Adder.map.eqn
Floating_Point_Adder.map.hdb
Floating_Point_Adder.map.qmsg
Floating_Point_Adder.map.rpt
Floating_Point_Adder.map.summary
Floating_Point_Adder.pin
Floating_Point_Adder.pof
Floating_Point_Adder.pre_map.cdb
Floating_Point_Adder.pre_map.hdb
Floating_Point_Adder.psp
Floating_Point_Adder.qpf
Floating_Point_Adder.qsf
Floating_Point_Adder.qws
Floating_Point_Adder.rtlv.hdb
Floating_Point_Adder.rtlv_sg.cdb
Floating_Point_Adder.rtlv_sg_swap.cdb
Floating_Point_Adder.sgdiff.cdb
Floating_Point_Adder.sgdiff.hdb
Floating_Point_Adder.signalprobe.cdb
Floating_Point_Adder.sim.hdb
Floating_Point_Adder.sim.qmsg
Floating_Point_Adder.sim.rdb
Floating_Point_Adder.sim.rpt
Floating_Point_Adder.sim.vwf
Floating_Point_Adder.sld_design_entry.sci
Floating_Point_Adder.sld_design_entry_dsc.sci
Floating_Point_Adder.sof
Floating_Point_Adder.syn_hier_info
Floating_Point_Adder.tan.qmsg
Floating_Point_Adder.tan.rpt
Floating_Point_Adder.tan.summary
Floating_Point_Adder.vhd
Floating_Point_Adder.vwf
Floating_Point_Adder_cmp.qrpt
Floating_Point_Adder_sim.qrpt
Normal_1.vhd
Normal_2.vhd
Shift_Man.vhd
db/add_sub_5bi.tdf
db/add_sub_6bi.tdf
db/add_sub_8gi.tdf
db/add_sub_lci.tdf
db/add_sub_mci.tdf
db/add_sub_pei.tdf
db/Floating_Point_Adder.(0).cnf.cdb
db/Floating_Point_Adder.(0).cnf.hdb
db/Floating_Point_Adder.(1).cnf.cdb
db/Floating_Point_Adder.(1).cnf.hdb
db/Floating_Point_Adder.(2).cnf.cdb
db/Floating_Point_Adder.(2).cnf.hdb
db/Floating_Point_Adder.(3).cnf.cdb
db/Floating_Point_Adder.(3).cnf.hdb
db/Floating_Point_Adder.(4).cnf.cdb
db/Floating_Point_Adder.(4).cnf.hdb
db/Floating_Point_Adder.(5).cnf.cdb
db/Floating_Point_Adder.(5).cnf.hdb
db/Floating_Point_Adder.(6).cnf.cdb
db/Floating_Point_Adder.(6).cnf.hdb
db/Floating_Point_Adder.(7).cnf.cdb
db/Floating_Point_Adder.(7).cnf.hdb
db/Floating_Point_Adder.asm.qmsg
db/Floating_Point_Adder.cmp.cdb
db/Floating_Point_Adder.cmp.ddb
db/Floating_Point_Adder.cmp.hdb
db/Floating_Point_Adder.cmp.rdb
db/Floating_Point_Adder.cmp.tdb
db/Floating_Point_Adder.cmp0.ddb
db/Floating_Point_Adder.db_info
db/Floating_Point_Adder.eco.cdb
db/Floating_Point_Adder.eds_overflow
db/Floating_Point_Adder.fit.qmsg
db/Floating_Point_Adder.fnsim.cdb
db/Floating_Point_Adder.fnsim.hdb
db/Floating_Point_Adder.hier_info
db/Floating_Point_Adder.hif
db/Floating_Point_Adder.icc
db/Floating_Point_Adder.map.cdb
db/Floating_Point_Adder.map.hdb
db/Floating_Point_Adder.map.qmsg
db/Floating_Point_Adder.pre_map.cdb
db/Floating_Point_Adder.pre_map.hdb
db/Floating_Point_Adder.psp
db/Floating_Point_Adder.rtlv.hdb
db/Floating_Point_Adder.rtlv_sg.cdb
db/Floating_Point_Adder.rtlv_sg_swap.cdb
db/Floating_Point_Adder.sgdiff.cdb
db/Floating_Point_Adder.sgdiff.hdb
db/Floating_Point_Adder.signalprobe.cdb
db/Floating_Point_Adder.sim.hdb
db/Floating_Point_Adder.sim.qmsg
db/Floating_Point_Adder.sim.rdb
db/Floating_Point_Adder.sld_design_entry.sci
db/Floating_Point_Adder.sld_design_entry_dsc.sci
db/Floating_Point_Adder.syn_hier_info
db/Floating_Point_Adder.tan.qmsg
db/Floating_Point_Adder_cmp.qrpt
db/Floating_Point_Adder_sim.qrpt
add_sub_1qh.tdf
add_sub_2qh.tdf
add_sub_5sh.tdf
add_sub_hoh.tdf
add_sub_ioh.tdf
add_sub_kth.tdf
cmp_state.ini
Compare_Exponent.vhd
Compare_Man.vhd
Compute_Shift.vhd
Floating_Point_Adder.(0).cnf.cdb
Floating_Point_Adder.(0).cnf.hdb
Floating_Point_Adder.(1).cnf.cdb
Floating_Point_Adder.(1).cnf.hdb
Floating_Point_Adder.(2).cnf.cdb
Floating_Point_Adder.(2).cnf.hdb
Floating_Point_Adder.(3).cnf.cdb
Floating_Point_Adder.(3).cnf.hdb
Floating_Point_Adder.(4).cnf.cdb
Floating_Point_Adder.(4).cnf.hdb
Floating_Point_Adder.(5).cnf.cdb
Floating_Point_Adder.(5).cnf.hdb
Floating_Point_Adder.(6).cnf.cdb
Floating_Point_Adder.(6).cnf.hdb
Floating_Point_Adder.(7).cnf.cdb
Floating_Point_Adder.(7).cnf.hdb
Floating_Point_Adder.asm.qmsg
Floating_Point_Adder.asm.rpt
Floating_Point_Adder.cmp.cdb
Floating_Point_Adder.cmp.ddb
Floating_Point_Adder.cmp.hdb
Floating_Point_Adder.cmp.rdb
Floating_Point_Adder.cmp.tdb
Floating_Point_Adder.cmp0.ddb
Floating_Point_Adder.db_info
Floating_Point_Adder.done
Floating_Point_Adder.eco.cdb
Floating_Point_Adder.eds_overflow
Floating_Point_Adder.fit.eqn
Floating_Point_Adder.fit.qmsg
Floating_Point_Adder.fit.rpt
Floating_Point_Adder.fit.summary
Floating_Point_Adder.flow.rpt
Floating_Point_Adder.fnsim.cdb
Floating_Point_Adder.fnsim.hdb
Floating_Point_Adder.hier_info
Floating_Point_Adder.hif
Floating_Point_Adder.icc
Floating_Point_Adder.map.cdb
Floating_Point_Adder.map.eqn
Floating_Point_Adder.map.hdb
Floating_Point_Adder.map.qmsg
Floating_Point_Adder.map.rpt
Floating_Point_Adder.map.summary
Floating_Point_Adder.pin
Floating_Point_Adder.pof
Floating_Point_Adder.pre_map.cdb
Floating_Point_Adder.pre_map.hdb
Floating_Point_Adder.psp
Floating_Point_Adder.qpf
Floating_Point_Adder.qsf
Floating_Point_Adder.qws
Floating_Point_Adder.rtlv.hdb
Floating_Point_Adder.rtlv_sg.cdb
Floating_Point_Adder.rtlv_sg_swap.cdb
Floating_Point_Adder.sgdiff.cdb
Floating_Point_Adder.sgdiff.hdb
Floating_Point_Adder.signalprobe.cdb
Floating_Point_Adder.sim.hdb
Floating_Point_Adder.sim.qmsg
Floating_Point_Adder.sim.rdb
Floating_Point_Adder.sim.rpt
Floating_Point_Adder.sim.vwf
Floating_Point_Adder.sld_design_entry.sci
Floating_Point_Adder.sld_design_entry_dsc.sci
Floating_Point_Adder.sof
Floating_Point_Adder.syn_hier_info
Floating_Point_Adder.tan.qmsg
Floating_Point_Adder.tan.rpt
Floating_Point_Adder.tan.summary
Floating_Point_Adder.vhd
Floating_Point_Adder.vwf
Floating_Point_Adder_cmp.qrpt
Floating_Point_Adder_sim.qrpt
Normal_1.vhd
Normal_2.vhd
Shift_Man.vhd
db/add_sub_5bi.tdf
db/add_sub_6bi.tdf
db/add_sub_8gi.tdf
db/add_sub_lci.tdf
db/add_sub_mci.tdf
db/add_sub_pei.tdf
db/Floating_Point_Adder.(0).cnf.cdb
db/Floating_Point_Adder.(0).cnf.hdb
db/Floating_Point_Adder.(1).cnf.cdb
db/Floating_Point_Adder.(1).cnf.hdb
db/Floating_Point_Adder.(2).cnf.cdb
db/Floating_Point_Adder.(2).cnf.hdb
db/Floating_Point_Adder.(3).cnf.cdb
db/Floating_Point_Adder.(3).cnf.hdb
db/Floating_Point_Adder.(4).cnf.cdb
db/Floating_Point_Adder.(4).cnf.hdb
db/Floating_Point_Adder.(5).cnf.cdb
db/Floating_Point_Adder.(5).cnf.hdb
db/Floating_Point_Adder.(6).cnf.cdb
db/Floating_Point_Adder.(6).cnf.hdb
db/Floating_Point_Adder.(7).cnf.cdb
db/Floating_Point_Adder.(7).cnf.hdb
db/Floating_Point_Adder.asm.qmsg
db/Floating_Point_Adder.cmp.cdb
db/Floating_Point_Adder.cmp.ddb
db/Floating_Point_Adder.cmp.hdb
db/Floating_Point_Adder.cmp.rdb
db/Floating_Point_Adder.cmp.tdb
db/Floating_Point_Adder.cmp0.ddb
db/Floating_Point_Adder.db_info
db/Floating_Point_Adder.eco.cdb
db/Floating_Point_Adder.eds_overflow
db/Floating_Point_Adder.fit.qmsg
db/Floating_Point_Adder.fnsim.cdb
db/Floating_Point_Adder.fnsim.hdb
db/Floating_Point_Adder.hier_info
db/Floating_Point_Adder.hif
db/Floating_Point_Adder.icc
db/Floating_Point_Adder.map.cdb
db/Floating_Point_Adder.map.hdb
db/Floating_Point_Adder.map.qmsg
db/Floating_Point_Adder.pre_map.cdb
db/Floating_Point_Adder.pre_map.hdb
db/Floating_Point_Adder.psp
db/Floating_Point_Adder.rtlv.hdb
db/Floating_Point_Adder.rtlv_sg.cdb
db/Floating_Point_Adder.rtlv_sg_swap.cdb
db/Floating_Point_Adder.sgdiff.cdb
db/Floating_Point_Adder.sgdiff.hdb
db/Floating_Point_Adder.signalprobe.cdb
db/Floating_Point_Adder.sim.hdb
db/Floating_Point_Adder.sim.qmsg
db/Floating_Point_Adder.sim.rdb
db/Floating_Point_Adder.sld_design_entry.sci
db/Floating_Point_Adder.sld_design_entry_dsc.sci
db/Floating_Point_Adder.syn_hier_info
db/Floating_Point_Adder.tan.qmsg
db/Floating_Point_Adder_cmp.qrpt
db/Floating_Point_Adder_sim.qrpt