- synchronous 8 bits multiplier with a FSM
This commit is contained in:
parent
aec22e1e7d
commit
bcd0c009c6
|
@ -0,0 +1,5 @@
|
|||
addaccu C
|
||||
multi8_model C
|
||||
srb C
|
||||
controller C
|
||||
sra C
|
|
@ -0,0 +1,349 @@
|
|||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | File : Makefile |
|
||||
# | |
|
||||
# | Author : Jacomme Ludovic |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Cells |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Binary |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
ALLIANCE_BIN=$(ALLIANCE_TOP)/bin
|
||||
|
||||
VASY = $(ALLIANCE_BIN)/vasy
|
||||
ASIMUT = $(ALLIANCE_BIN)/asimut
|
||||
BOOM = $(ALLIANCE_BIN)/boom
|
||||
BOOG = $(ALLIANCE_BIN)/boog
|
||||
LOON = $(ALLIANCE_BIN)/loon
|
||||
OCP = $(ALLIANCE_BIN)/ocp
|
||||
NERO = $(ALLIANCE_BIN)/nero
|
||||
COUGAR = $(ALLIANCE_BIN)/cougar
|
||||
LVX = $(ALLIANCE_BIN)/lvx
|
||||
DRUC = $(ALLIANCE_BIN)/druc
|
||||
S2R = $(ALLIANCE_BIN)/s2r
|
||||
|
||||
DREAL = $(ALLIANCE_BIN)/dreal
|
||||
GRAAL = $(ALLIANCE_BIN)/graal
|
||||
XSCH = $(ALLIANCE_BIN)/xsch
|
||||
XPAT = $(ALLIANCE_BIN)/xpat
|
||||
XFSM = $(ALLIANCE_BIN)/xfsm
|
||||
|
||||
TOUCH = touch
|
||||
|
||||
TARGET_LIB = $(ALLIANCE_TOP)/cells/sxlib
|
||||
RDS_TECHNO_SYMB = ../etc/techno-symb.rds
|
||||
RDS_TECHNO = ../etc/techno-035.rds
|
||||
SPI_MODEL = $(ALLIANCE_TOP)/etc/spimodel.cfg
|
||||
METAL_LEVEL = 2
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Environement |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
ENV_VASY = MBK_WORK_LIB=.; export MBK_WORK_LIB;\
|
||||
MBK_CATAL_NAME=NO_CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_BOOM = MBK_WORK_LIB=.; export MBK_WORK_LIB;\
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_BOOG = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=vst; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO; \
|
||||
MBK_TARGET_LIB=$(TARGET_LIB); export MBK_TARGET_LIB; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_LOON = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=vst; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO; \
|
||||
MBK_TARGET_LIB=$(TARGET_LIB); export MBK_TARGET_LIB; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_ASIMUT_VASY = MBK_WORK_LIB=.; export MBK_WORK_LIB;\
|
||||
MBK_CATAL_NAME=CATAL_ASIMUT_VASY; export MBK_CATAL_NAME;\
|
||||
MBK_IN_LO=vst; export MBK_IN_LO;\
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO
|
||||
|
||||
ENV_ASIMUT_SYNTH = MBK_WORK_LIB=.; export MBK_WORK_LIB;\
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME;\
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_IN_LO=vst; export MBK_IN_LO;\
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO
|
||||
|
||||
ENV_OCP = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=vst; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_NERO = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=vst; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_COUGAR_SPI = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=spi; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=spi; export MBK_OUT_LO; \
|
||||
MBK_SPI_NAMEDNODES="true"; export MBK_SPI_NAMEDNODES; \
|
||||
MBK_SPI_MODEL=$(SPI_MODEL); export MBK_SPI_MODEL; \
|
||||
RDS_TECHNO_NAME=$(RDS_TECHNO); export RDS_TECHNO_NAME; \
|
||||
RDS_IN=cif; export RDS_IN; \
|
||||
RDS_OUT=cif; export RDS_OUT; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_COUGAR = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=al; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=al; export MBK_OUT_LO; \
|
||||
RDS_TECHNO_NAME=$(RDS_TECHNO); export RDS_TECHNO_NAME; \
|
||||
RDS_IN=cif; export RDS_IN; \
|
||||
RDS_OUT=cif; export RDS_OUT; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_LVX = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
MBK_IN_LO=vst; export MBK_IN_LO; \
|
||||
MBK_OUT_LO=vst; export MBK_OUT_LO; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_DRUC = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
RDS_TECHNO_NAME=$(RDS_TECHNO_SYMB); export RDS_TECHNO_NAME; \
|
||||
MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
ENV_S2R = MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||
RDS_TECHNO_NAME=$(RDS_TECHNO); export RDS_TECHNO_NAME; \
|
||||
RDS_IN=cif; export RDS_IN; \
|
||||
RDS_OUT=cif; export RDS_OUT; \
|
||||
MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||
MBK_CATA_LIB=$(TARGET_LIB); export MBK_CATA_LIB; \
|
||||
MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME
|
||||
|
||||
|
||||
all : multi8.cif
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Vasy |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
multi8.vst addaccu.vbe controller.vbe sra.vbe srb.vbe multi8_model.vbe : multi8.vhdl addaccu.vhdl \
|
||||
controller.vhdl multi8.vhdl sra.vhdl srb.vhdl
|
||||
$(ENV_VASY); $(VASY) -a -B -o -p -I vhdl -H multi8
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Asimut |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
res_vasy_1.pat : multi8.vst addaccu.vbe sra.vbe srb.vbe \
|
||||
controller.vbe multi8_model.vbe
|
||||
$(ENV_ASIMUT_VASY); $(ASIMUT) multi8 multi8 res_vasy_1
|
||||
|
||||
res_synth_1.pat : multi8.vst addaccu.vst sra.vst srb.vst \
|
||||
controller.vst multi8_model.vst
|
||||
$(ENV_ASIMUT_SYNTH); $(ASIMUT) multi8 multi8 res_synth_1
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Boom |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
boom.done : addaccu_o.vbe sra_o.vbe srb_o.vbe controller_o.vbe \
|
||||
multi8_model_o.vbe
|
||||
@$(TOUCH) boom.done
|
||||
|
||||
addaccu_o.vbe : addaccu.vbe addaccu.boom res_vasy_1.pat
|
||||
$(ENV_BOOM); $(BOOM) -VP addaccu addaccu_o
|
||||
|
||||
sra_o.vbe : sra.vbe sra.boom res_vasy_1.pat
|
||||
$(ENV_BOOM); $(BOOM) -VP sra sra_o
|
||||
|
||||
srb_o.vbe : srb.vbe srb.boom res_vasy_1.pat
|
||||
$(ENV_BOOM); $(BOOM) -VP srb srb_o
|
||||
|
||||
controller_o.vbe : controller.vbe controller.boom res_vasy_1.pat
|
||||
$(ENV_BOOM); $(BOOM) -VP controller controller_o
|
||||
|
||||
multi8_model_o.vbe : multi8_model.vbe multi8_model.boom res_vasy_1.pat
|
||||
$(ENV_BOOM); $(BOOM) -VP multi8_model multi8_model_o
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Boog |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
boog.done : addaccu_o.vst sra_o.vst srb_o.vst controller_o.vst \
|
||||
multi8_model_o.vst
|
||||
@$(TOUCH) boog.done
|
||||
|
||||
addaccu_o.vst : addaccu_o.vbe
|
||||
$(ENV_BOOG); $(BOOG) addaccu_o
|
||||
|
||||
sra_o.vst : sra_o.vbe
|
||||
$(ENV_BOOG); $(BOOG) sra_o
|
||||
|
||||
srb_o.vst : srb_o.vbe
|
||||
$(ENV_BOOG); $(BOOG) srb_o
|
||||
|
||||
controller_o.vst : controller_o.vbe
|
||||
$(ENV_BOOG); $(BOOG) controller_o
|
||||
|
||||
multi8_model_o.vst : multi8_model_o.vbe
|
||||
$(ENV_BOOG); $(BOOG) multi8_model_o
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Loon |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
loon.done : addaccu.vst sra.vst srb.vst controller.vst \
|
||||
multi8_model.vst
|
||||
@$(TOUCH) loon.done
|
||||
|
||||
addaccu.vst : addaccu_o.vst
|
||||
$(ENV_LOON); $(LOON) addaccu_o addaccu
|
||||
|
||||
sra.vst : sra_o.vst
|
||||
$(ENV_LOON); $(LOON) sra_o sra
|
||||
|
||||
srb.vst : srb_o.vst
|
||||
$(ENV_LOON); $(LOON) srb_o srb
|
||||
|
||||
controller.vst : controller_o.vst
|
||||
$(ENV_LOON); $(LOON) controller_o controller
|
||||
|
||||
multi8_model.vst : multi8_model_o.vst
|
||||
$(ENV_LOON); $(LOON) multi8_model_o multi8_model
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | OCP |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
multi8_p.ap : res_synth_1.pat
|
||||
$(ENV_OCP); $(OCP) -v -ioc multi8 -gnuplot multi8 multi8_p
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | NERO |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
multi8.ap : multi8_p.ap multi8.vst
|
||||
$(ENV_NERO); $(NERO) -$(METAL_LEVEL) -p multi8_p multi8 multi8
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Cougar |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
multi8_e.spi : multi8.ap
|
||||
$(ENV_COUGAR_SPI); $(COUGAR) -v multi8 multi8_e
|
||||
|
||||
multi8_e.al : multi8.ap
|
||||
$(ENV_COUGAR); $(COUGAR) -v -ac multi8 multi8_e
|
||||
|
||||
multi8_et.al : multi8.ap
|
||||
$(ENV_COUGAR); $(COUGAR) -v -ac -t multi8 multi8_et
|
||||
|
||||
multi8_et.spi : multi8.ap
|
||||
$(ENV_COUGAR_SPI); $(COUGAR) -v -ac -t multi8 multi8_et
|
||||
|
||||
multi8_er.spi : multi8.cif
|
||||
$(ENV_COUGAR); $(COUGAR) -v -r -t multi8 multi8_er
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Lvx |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
lvx.done : multi8.vst multi8_e.al multi8_e.spi
|
||||
$(ENV_LVX); $(LVX) vst al multi8 multi8_e -f
|
||||
$(TOUCH) lvx.done
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Druc |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
druc.done : lvx.done multi8.ap
|
||||
$(ENV_DRUC); $(DRUC) multi8
|
||||
$(TOUCH) druc.done
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | S2R |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
multi8.cif : druc.done
|
||||
$(ENV_S2R); $(S2R) -v -t multi8
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | TOOLS |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
|
||||
graal: multi8.ap
|
||||
$(ENV_S2R); $(GRAAL) -l multi8
|
||||
|
||||
xsch: multi8.vst
|
||||
$(ENV_LOON); $(XSCH) -l multi8
|
||||
|
||||
xscht: multi8_et.al
|
||||
$(ENV_COUGAR); $(XSCH) -l multi8_et
|
||||
|
||||
xpat: res_synth_1.pat
|
||||
$(ENV_ASIMUT_SYNTH); $(XPAT) -l res_synth_1
|
||||
|
||||
dreal: multi8.cif
|
||||
$(ENV_S2R); $(DREAL) -l multi8
|
||||
|
||||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | Clean |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
realclean : clean
|
||||
|
||||
clean :
|
||||
$(RM) -f *.vst multi8_et.spi *.vbe res_*.pat *.boom *.done *.xsc *.gpl \
|
||||
*.ap *.drc *.dat *.gds blast.fin *.cif *.rep \
|
||||
*.log *.out *.raw *.al
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# /*------------------------------------------------------------\
|
||||
# | |
|
||||
# | File : README |
|
||||
# | |
|
||||
# | Author : Jacomme Ludovic |
|
||||
# | |
|
||||
# \------------------------------------------------------------*/
|
||||
|
||||
This directory contains hierarchical VHDL descriptions of a synchronous 8 bits multiplier
|
||||
(with a finite state machine and data part).
|
||||
It contains also the associated stimuli file, and configuration file for IO
|
||||
placement (used during the Place and Route step).
|
||||
|
||||
The Makefile set environement variables properly and run Alliance tools,
|
||||
following each step of the design flow from VHDL up to real layout in a
|
||||
pseudo 0.35 techno.
|
||||
|
||||
The environement variable ALLIANCE_TOP as to be set.
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
use IEEE.STD_LOGIC_arith.ALL;
|
||||
use IEEE.STD_LOGIC_unsigned.ALL;
|
||||
|
||||
|
||||
entity AddAccu is
|
||||
|
||||
port ( CLR : in Std_Logic;
|
||||
LD : in Std_Logic;
|
||||
OUTS : in Std_Logic_Vector(15 downto 0) ;
|
||||
CLK : in Std_Logic;
|
||||
|
||||
RESULT : out Std_Logic_Vector(15 downto 0) );
|
||||
|
||||
end AddAccu;
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
architecture DataFlow OF AddAccu is
|
||||
signal resultint : Std_Logic_Vector(15 downto 0) ;
|
||||
begin
|
||||
process (CLK)
|
||||
begin
|
||||
if CLK'event and CLK='1' then
|
||||
if CLR = '1' then resultint <= ( others => '0' );
|
||||
elsif LD = '1' then resultint <= resultint + OUTS;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
RESULT <= resultint;
|
||||
end DataFlow;
|
||||
----------------------------------------------------------------------
|
|
@ -0,0 +1,59 @@
|
|||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.all;
|
||||
|
||||
entity Controller is
|
||||
port (STB, CLK, LSB, Done, RST: in STD_LOGIC;
|
||||
Init, Shift, Add: out STD_LOGIC);
|
||||
end Controller;
|
||||
|
||||
---------------------------------------------------
|
||||
|
||||
architecture FSM of Controller is
|
||||
|
||||
type States is (EndS,InitS, CheckS, AddS, ShiftS);
|
||||
signal State: States ;
|
||||
begin
|
||||
|
||||
-- Drive control outputs based upon State
|
||||
|
||||
Init <= '1' when State = InitS else '0';
|
||||
Add <= '1' when State = AddS else '0';
|
||||
Shift <= '1' when State = ShiftS else '0';
|
||||
|
||||
-- Determine Next State from control inputs
|
||||
|
||||
StateMachine:
|
||||
|
||||
process (CLK)
|
||||
begin
|
||||
--compass stateMachine adj State
|
||||
if CLK'Event and CLK = '1' then
|
||||
if RST = '1' then State <= EndS;
|
||||
else
|
||||
case State is
|
||||
when InitS =>
|
||||
State <= CheckS;
|
||||
when CheckS =>
|
||||
if LSB = '1' then
|
||||
State <= AddS;
|
||||
elsif Done = '0' then
|
||||
State <= ShiftS;
|
||||
else
|
||||
State <= EndS;
|
||||
end if;
|
||||
when AddS =>
|
||||
State <= ShiftS;
|
||||
when ShiftS =>
|
||||
State <= CheckS;
|
||||
when EndS =>
|
||||
if STB = '1' then
|
||||
State <= InitS;
|
||||
end if;
|
||||
end case;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
end FSM;
|
||||
|
||||
---------------------------------------------------
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
TOP ( # IOs are ordered from left to right
|
||||
(IOPIN clk.0 );
|
||||
(IOPIN rst.0 );
|
||||
(IOPIN stb.0 );
|
||||
(IOPIN a(7).0 );
|
||||
(IOPIN a(6).0 );
|
||||
(IOPIN a(5).0 );
|
||||
(IOPIN a(4).0 );
|
||||
(IOPIN a(3).0 );
|
||||
(IOPIN a(2).0 );
|
||||
(IOPIN a(1).0 );
|
||||
(IOPIN a(0).0 );
|
||||
(IOPIN b(7).0 );
|
||||
(IOPIN b(6).0 );
|
||||
(IOPIN b(5).0 );
|
||||
(IOPIN b(4).0 );
|
||||
(IOPIN b(3).0 );
|
||||
(IOPIN b(2).0 );
|
||||
(IOPIN b(1).0 );
|
||||
(IOPIN b(0).0 );
|
||||
)
|
||||
BOTTOM ( # IOs are ordered from left to right
|
||||
(IOPIN result(15).0 );
|
||||
(IOPIN result(14).0 );
|
||||
(IOPIN result(13).0 );
|
||||
(IOPIN result(12).0 );
|
||||
(IOPIN result(11).0 );
|
||||
(IOPIN result(10).0 );
|
||||
(IOPIN result(9).0 );
|
||||
(IOPIN result(8).0 );
|
||||
(IOPIN result(7).0 );
|
||||
(IOPIN result(6).0 );
|
||||
(IOPIN result(5).0 );
|
||||
(IOPIN result(4).0 );
|
||||
(IOPIN result(3).0 );
|
||||
(IOPIN result(2).0 );
|
||||
(IOPIN result(1).0 );
|
||||
(IOPIN result(0).0 );
|
||||
(IOPIN done.0 );
|
||||
)
|
||||
IGNORE ( # IOs are ignored(not placed) by IO Placer
|
||||
)
|
|
@ -0,0 +1,79 @@
|
|||
-- input / output list :
|
||||
|
||||
in clk B;;
|
||||
in rst B;;
|
||||
in stb B;;
|
||||
in a (7 downto 0) X;;
|
||||
in b (7 downto 0) X;;
|
||||
out result (15 downto 0) X;;
|
||||
out done B;
|
||||
|
||||
begin
|
||||
|
||||
-- Pattern description :
|
||||
|
||||
-- C R S A B R D
|
||||
-- L S T E O
|
||||
-- K T B S N
|
||||
-- U E
|
||||
-- L
|
||||
-- T
|
||||
|
||||
< 0ns>: 0 1 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 1 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 1 1 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 1 1 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 1 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 1 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 0 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 1 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 1 00 00 ?**** ?*;
|
||||
<+ 10ns>: 1 0 1 00 00 ?**** ?*;
|
||||
<+ 10ns>: 1 0 1 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 1 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 1 00 00 ?**** ?*;
|
||||
<+ 10ns>: 0 0 0 02 03 ?**** ?*;
|
||||
<+ 10ns>: 0 0 0 02 03 ?**** ?*;
|
||||
<+ 10ns>: 1 0 0 02 03 ?**** ?*;
|
||||
<+ 10ns>: 1 0 0 02 03 ?**** ?*;
|
||||
<+ 10ns>: 0 0 0 02 03 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 02 03 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0000 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?**** ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0006 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?0;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?0;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0006 ?*;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 1 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?1;
|
||||
<+ 10ns>: 0 0 0 00 00 ?0006 ?1;
|
||||
|
||||
end;
|
|
@ -0,0 +1,121 @@
|
|||
-- Date of netlist generation: Dec-6-95
|
||||
----------------------------------------------------------------------
|
||||
|
||||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
|
||||
entity Multi8 is
|
||||
|
||||
|
||||
port ( A : in Std_Logic_Vector(7 downto 0) ;
|
||||
B : in Std_Logic_Vector(7 downto 0) ;
|
||||
CLK : in Std_Logic ;
|
||||
RST : in Std_Logic ;
|
||||
STB : in Std_Logic ;
|
||||
|
||||
RESULT : out Std_Logic_Vector(15 downto 0) ;
|
||||
DONE : out Std_Logic );
|
||||
|
||||
end Multi8;
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
architecture Structural OF Multi8 is
|
||||
|
||||
component Controller
|
||||
port ( STB : in Std_Logic;
|
||||
CLK : in Std_Logic;
|
||||
LSB : in Std_Logic;
|
||||
DONE : in Std_Logic;
|
||||
RST : in Std_Logic;
|
||||
|
||||
INIT : out Std_Logic;
|
||||
SHIFT : out Std_Logic;
|
||||
ADD : out Std_Logic );
|
||||
end component;
|
||||
|
||||
component Srb
|
||||
port ( SHIFT : in Std_Logic;
|
||||
LD : in Std_Logic;
|
||||
CLK : in Std_Logic;
|
||||
B : in Std_Logic_Vector(7 downto 0) ;
|
||||
|
||||
OUTS : out Std_Logic_Vector(15 downto 0) );
|
||||
end component;
|
||||
|
||||
component AddAccu
|
||||
port ( CLR : in Std_Logic;
|
||||
LD : in Std_Logic;
|
||||
OUTS : in Std_Logic_Vector(15 downto 0) ;
|
||||
CLK : in Std_Logic;
|
||||
|
||||
RESULT : out Std_Logic_Vector(15 downto 0) );
|
||||
end component;
|
||||
|
||||
component Sra
|
||||
port ( SHIFT : in Std_Logic;
|
||||
LD : in Std_Logic;
|
||||
CLK : in Std_Logic;
|
||||
RST : in Std_Logic;
|
||||
A : in Std_Logic_Vector(7 downto 0) ;
|
||||
|
||||
DONE : out Std_Logic;
|
||||
LSB : out Std_Logic );
|
||||
end component;
|
||||
|
||||
|
||||
signal DONE_local: Std_Logic;
|
||||
signal U1_LSB : Std_Logic;
|
||||
signal U3_INIT : Std_Logic;
|
||||
signal U3_SHIFT : Std_Logic;
|
||||
signal U3_ADD : Std_Logic;
|
||||
signal OUT_INT : Std_Logic_vector(15 downto 0);
|
||||
|
||||
begin
|
||||
|
||||
|
||||
U3: Controller
|
||||
port map ( STB => STB,
|
||||
CLK => CLK,
|
||||
LSB => U1_LSB,
|
||||
DONE => DONE_local,
|
||||
RST => RST,
|
||||
INIT => U3_INIT,
|
||||
SHIFT => U3_SHIFT,
|
||||
ADD => U3_ADD );
|
||||
|
||||
U2: Srb
|
||||
port map ( SHIFT => U3_SHIFT,
|
||||
LD => U3_INIT,
|
||||
CLK => CLK,
|
||||
B => B,
|
||||
OUTS => OUT_INT );
|
||||
|
||||
U5: AddAccu
|
||||
port map ( CLR => U3_INIT,
|
||||
LD => U3_ADD,
|
||||
OUTS => OUT_INT,
|
||||
CLK => CLK,
|
||||
RESULT => RESULT );
|
||||
|
||||
U1: Sra
|
||||
port map ( SHIFT => U3_SHIFT,
|
||||
LD => U3_INIT,
|
||||
RST => RST,
|
||||
CLK => CLK,
|
||||
A => A,
|
||||
DONE => DONE_local,
|
||||
LSB => U1_LSB );
|
||||
|
||||
DONE <= DONE_local;
|
||||
|
||||
end Structural;
|
||||
|
||||
configuration CFG_Multi8 of Multi8 is
|
||||
for Structural
|
||||
|
||||
end for;
|
||||
end CFG_Multi8;
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
|
@ -0,0 +1,55 @@
|
|||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
use IEEE.STD_LOGIC_arith.ALL;
|
||||
use IEEE.STD_LOGIC_unsigned.ALL;
|
||||
|
||||
entity Sra is
|
||||
|
||||
port ( Shift : in Std_Logic ;
|
||||
LD : in Std_Logic ;
|
||||
RST : in Std_Logic;
|
||||
CLK : in Std_Logic ;
|
||||
A : in Std_Logic_Vector(7 downto 0);
|
||||
|
||||
Done : out Std_Logic ;
|
||||
LSB : out Std_Logic );
|
||||
|
||||
end Sra;
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
architecture DataFlow OF Sra is
|
||||
|
||||
signal outsint : Std_Logic_Vector(7 downto 0);
|
||||
begin
|
||||
process (CLK)
|
||||
begin
|
||||
if CLK'event and CLK='1' then
|
||||
if RST ='1' then outsint <= (others => '0');
|
||||
elsif LD = '1' then outsint <= A ;
|
||||
elsif Shift= '1' then
|
||||
outsint(7 downto 0) <= '0' & outsint(7 downto 1);
|
||||
else outsint <= outsint;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process( outsint )
|
||||
variable RESULT : Std_Logic;
|
||||
begin
|
||||
RESULT := '0';
|
||||
for j in outsint'range loop
|
||||
RESULT := outsint(j) or RESULT;
|
||||
exit when RESULT = '1';
|
||||
end loop;
|
||||
RESULT := not(RESULT);
|
||||
|
||||
Done <= RESULT;
|
||||
end process;
|
||||
LSB <= outsint(0);
|
||||
|
||||
end DataFlow;
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
|
@ -0,0 +1,41 @@
|
|||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
use IEEE.STD_LOGIC_arith.ALL;
|
||||
use IEEE.STD_LOGIC_unsigned.ALL;
|
||||
|
||||
entity Srb is
|
||||
|
||||
port ( Shift : in Std_Logic ;
|
||||
LD : in Std_Logic ;
|
||||
CLK : in Std_Logic ;
|
||||
B : in Std_Logic_Vector(7 downto 0);
|
||||
|
||||
OUTS : out Std_Logic_Vector(15 downto 0));
|
||||
|
||||
end Srb;
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
architecture DataFlow OF Srb is
|
||||
signal outsint : Std_Logic_Vector(15 downto 0);
|
||||
|
||||
begin
|
||||
process (CLK)
|
||||
begin
|
||||
if CLK'event and CLK='1' then
|
||||
if LD = '1' then outsint <=
|
||||
B(7)&B(7)&B(7)&B(7)&B(7)&B(7)&B(7)&B(7)&B ;
|
||||
elsif Shift= '1' then
|
||||
outsint(15 downto 0) <= outsint(14 downto 0) & '0';
|
||||
else outsint <= outsint;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
OUTS <= outsint;
|
||||
|
||||
end DataFlow;
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
Loading…
Reference in New Issue