Tutorial pour les outils de synthese
This commit is contained in:
parent
8ce80b4c06
commit
83e8889ade
|
@ -0,0 +1,190 @@
|
||||||
|
############################
|
||||||
|
# makefile parameters
|
||||||
|
############################
|
||||||
|
SHELL = /bin/sh
|
||||||
|
|
||||||
|
circuit = digicode
|
||||||
|
CELLS_LIB = $(ALLIANCE_TOP)/cells/sxlib
|
||||||
|
AUTO_PATH = .
|
||||||
|
|
||||||
|
SYF_EXE = $(ALLIANCE_TOP)/bin/syf
|
||||||
|
# BOP_EXE = $(ALLIANCE_TOP)/bin/bop
|
||||||
|
BOP_EXE = $(HOME)/labo/Solaris/bin/bop
|
||||||
|
|
||||||
|
# NEALLIANCE_TOPTIM_EXE = $(ALLIANCE_TOP)/bin/glop
|
||||||
|
NEALLIANCE_TOPTIM_EXE = $(HOME)/labo/Solaris/bin/glop
|
||||||
|
|
||||||
|
# SCMAP_EXE = $(ALLIANCE_TOP)/bin/scmap
|
||||||
|
SCMAP_EXE = $(HOME)/labo/Solaris/bin/scmap
|
||||||
|
SCR_EXE = $(ALLIANCE_TOP)/bin/scr
|
||||||
|
LYNX_EXE = $(ALLIANCE_TOP)/bin/lynx
|
||||||
|
PROOF_EXE = $(ALLIANCE_TOP)/bin/proof
|
||||||
|
YAGLE_EXE = $(ALLIANCE_TOP)/bin/yagle
|
||||||
|
|
||||||
|
SYF = MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
$(SYF_EXE)
|
||||||
|
|
||||||
|
OPTIM = MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
$(BOP_EXE) -o
|
||||||
|
|
||||||
|
MAPSC = MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
MBK_TARGET_LIB=$(CELLS_LIB); export MBK_TARGET_LIB;\
|
||||||
|
MBK_IN_LO=vst; export MBK_IN_LO;\
|
||||||
|
MBK_OUT_LO=vst; export MBK_OUT_LO;\
|
||||||
|
$(SCMAP_EXE)
|
||||||
|
|
||||||
|
NEALLIANCE_TOPTIM = MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME;\
|
||||||
|
MBK_CATA_LIB=$(CELLS_LIB); export MBK_CATA_LIB;\
|
||||||
|
MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
MBK_VDD=vdd; export MBK_VDD;\
|
||||||
|
MBK_VSS=vss; export MBK_VSS;\
|
||||||
|
MBK_IN_LO=vst; export MBK_IN_LO;\
|
||||||
|
MBK_OUT_LO=vst; export MBK_OUT_LO;\
|
||||||
|
$(NEALLIANCE_TOPTIM_EXE) -g
|
||||||
|
|
||||||
|
TIMING = MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME;\
|
||||||
|
MBK_CATA_LIB=$(CELLS_LIB); export MBK_CATA_LIB;\
|
||||||
|
MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
MBK_VDD=vdd; export MBK_VDD;\
|
||||||
|
MBK_VSS=vss; export MBK_VSS;\
|
||||||
|
MBK_IN_LO=vst; export MBK_IN_LO;\
|
||||||
|
$(NEALLIANCE_TOPTIM_EXE) -t
|
||||||
|
|
||||||
|
SCR = MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME;\
|
||||||
|
MBK_CATA_LIB=$(CELLS_LIB); export MBK_CATA_LIB;\
|
||||||
|
MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
MBK_IN_LO=vst; export MBK_IN_LO;\
|
||||||
|
MBK_IN_PH=ap; export MBK_IN_PH;\
|
||||||
|
MBK_OUT_PH=ap; export MBK_OUT_PH;\
|
||||||
|
$(SCR_EXE) -p -r -i 1000
|
||||||
|
|
||||||
|
LYNX = MBK_CATAL_NAME=CATAL; export MBK_CATAL_NAME;\
|
||||||
|
MBK_CATA_LIB=$(CELLS_LIB); export MBK_CATA_LIB;\
|
||||||
|
MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
MBK_IN_PH=ap; export MBK_IN_PH;\
|
||||||
|
MBK_OUT_LO=al; export MBK_OUT_LO;\
|
||||||
|
$(LYNX_EXE) -f
|
||||||
|
|
||||||
|
YAGLE = MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
MBK_CATA_LIB=$(CELLS_LIB); export MBK_CATA_LIB;\
|
||||||
|
MBK_IN_LO=al; export MBK_IN_LO;\
|
||||||
|
$(YAGLE_EXE) -v -i
|
||||||
|
|
||||||
|
PROOF = MBK_WORK_LIB=$(AUTO_PATH); export MBK_WORK_LIB;\
|
||||||
|
$(PROOF_EXE) -d
|
||||||
|
|
||||||
|
.SILENT:
|
||||||
|
|
||||||
|
all : $(circuit)rg0sct.vbe $(circuit)sg0sct.vbe $(circuit)sg3sct.vbe proof_all results
|
||||||
|
|
||||||
|
clean :
|
||||||
|
-@rm -f $(AUTO_PATH)/*.cod
|
||||||
|
-@rm -f $(AUTO_PATH)/*.vbe
|
||||||
|
-@rm -f $(AUTO_PATH)/*.al
|
||||||
|
-@rm -f $(AUTO_PATH)/*.vst
|
||||||
|
-@rm -f $(AUTO_PATH)/*.rep
|
||||||
|
-@rm -f $(AUTO_PATH)/*.ap
|
||||||
|
-@rm -f $(AUTO_PATH)/results
|
||||||
|
-@rm -f proof_all
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# State encoding by SYF
|
||||||
|
################################################################################
|
||||||
|
$(circuit)s.vbe : $(circuit).fsm
|
||||||
|
$(SYF) -E -o $(circuit) $(circuit)s
|
||||||
|
$(circuit)r.vbe : $(circuit).fsm
|
||||||
|
$(SYF) -E -r $(circuit) $(circuit)r
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Delay and Area global Optimisation by LOGIC
|
||||||
|
################################################################################
|
||||||
|
$(circuit)sg0.vbe : $(circuit)s.vbe area.lax
|
||||||
|
$(OPTIM) $(circuit)s $(circuit)sg0 area
|
||||||
|
$(circuit)rg0.vbe : $(circuit)r.vbe area.lax
|
||||||
|
$(OPTIM) $(circuit)r $(circuit)rg0 area
|
||||||
|
$(circuit)sg3.vbe : $(circuit)s.vbe delay.lax
|
||||||
|
$(OPTIM) $(circuit)s $(circuit)sg3 delay
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Mapping by LOGIC
|
||||||
|
################################################################################
|
||||||
|
$(circuit)sg0sc.vst : $(circuit)sg0.vbe
|
||||||
|
$(MAPSC) $(circuit)sg0 $(circuit)sg0sc area
|
||||||
|
$(circuit)rg0sc.vst : $(circuit)rg0.vbe
|
||||||
|
$(MAPSC) $(circuit)rg0 $(circuit)rg0sc area
|
||||||
|
$(circuit)sg3sc.vst : $(circuit)sg3.vbe
|
||||||
|
$(MAPSC) $(circuit)sg3 $(circuit)sg3sc delay
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Delay Optimisation by NEALLIANCE_TOPTIM
|
||||||
|
################################################################################
|
||||||
|
$(circuit)sg0scg.vst : $(circuit)sg0sc.vst neto.lax
|
||||||
|
$(NEALLIANCE_TOPTIM) $(circuit)sg0sc $(circuit)sg0scg neto
|
||||||
|
$(circuit)rg0scg.vst : $(circuit)rg0sc.vst neto.lax
|
||||||
|
$(NEALLIANCE_TOPTIM) $(circuit)rg0sc $(circuit)rg0scg neto
|
||||||
|
$(circuit)sg3scg.vst : $(circuit)sg3sc.vst neto.lax
|
||||||
|
$(NEALLIANCE_TOPTIM) $(circuit)sg3sc $(circuit)sg3scg neto
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Placement and Routage by SCR
|
||||||
|
################################################################################
|
||||||
|
$(circuit)sg0scg.ap : $(circuit)sg0scg.vst
|
||||||
|
$(SCR) $(circuit)sg0scg
|
||||||
|
$(circuit)rg0scg.ap : $(circuit)rg0scg.vst
|
||||||
|
$(SCR) $(circuit)rg0scg
|
||||||
|
$(circuit)sg3scg.ap : $(circuit)sg3scg.vst
|
||||||
|
$(SCR) $(circuit)sg3scg
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Area and Delay Results
|
||||||
|
################################################################################
|
||||||
|
results : $(circuit)sg0scg.ap $(circuit)sg3scg.ap $(circuit)rg0scg.ap
|
||||||
|
echo "Simulated annealing encoding and standard cell mapping with area optimisation :" > results
|
||||||
|
echo -n " Area : " >> results
|
||||||
|
grep "^A" $(circuit)rg0scg.ap >> results
|
||||||
|
$(TIMING) $(circuit)rg0scg toto | grep path | grep -v Min >> results
|
||||||
|
echo "Vertical encoding and standard cell mapping with area optimisation :" >>results
|
||||||
|
echo -n " Area : " >> results
|
||||||
|
grep "^A" $(circuit)sg0scg.ap >> results
|
||||||
|
$(TIMING) $(circuit)sg0scg toto | grep path | grep -v Min >> results
|
||||||
|
echo "Vertical encoding and standard cell mapping with delay optimisation :" >>results
|
||||||
|
echo -n " Area : " >> results
|
||||||
|
grep "^A" $(circuit)sg3scg.ap >> results
|
||||||
|
$(TIMING) $(circuit)sg3scg toto | grep path | grep -v Min >> results
|
||||||
|
cat results
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Netlist Extraction by LYNX
|
||||||
|
################################################################################
|
||||||
|
$(circuit)sg0sct.al : $(circuit)sg0scg.ap
|
||||||
|
$(LYNX) $(circuit)sg0scg $(circuit)sg0sct
|
||||||
|
$(circuit)rg0sct.al : $(circuit)rg0scg.ap
|
||||||
|
$(LYNX) $(circuit)rg0scg $(circuit)rg0sct
|
||||||
|
$(circuit)sg3sct.al : $(circuit)sg3scg.ap
|
||||||
|
$(LYNX) $(circuit)sg3scg $(circuit)sg3sct
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Functional Abstraction by YAGLE
|
||||||
|
################################################################################
|
||||||
|
$(circuit)sg0sct.vbe : $(circuit)sg0sct.al
|
||||||
|
$(YAGLE) $(circuit)sg0sct
|
||||||
|
sed -e "s/_dff_s//g" $(circuit)sg0sct.vbe > toto
|
||||||
|
mv toto $(circuit)sg0sct.vbe
|
||||||
|
$(circuit)rg0sct.vbe : $(circuit)rg0sct.al
|
||||||
|
$(YAGLE) $(circuit)rg0sct
|
||||||
|
sed -e "s/_dff_s//g" $(circuit)rg0sct.vbe > toto
|
||||||
|
mv toto $(circuit)rg0sct.vbe
|
||||||
|
$(circuit)sg3sct.vbe : $(circuit)sg3sct.al
|
||||||
|
$(YAGLE) $(circuit)sg3sct
|
||||||
|
sed -e "s/_dff_s//g" $(circuit)sg3sct.vbe > toto
|
||||||
|
mv toto $(circuit)sg3sct.vbe
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Formal Proof by PROOF
|
||||||
|
################################################################################
|
||||||
|
proof_all :
|
||||||
|
$(PROOF) $(circuit)sg0sct $(circuit)s
|
||||||
|
$(PROOF) $(circuit)rg0sct $(circuit)r
|
||||||
|
$(PROOF) $(circuit)sg3sct $(circuit)s
|
||||||
|
touch proof_all
|
|
@ -0,0 +1,10 @@
|
||||||
|
## Mode
|
||||||
|
#M{0}
|
||||||
|
## Level
|
||||||
|
#L{5}
|
||||||
|
## Number Transistor N
|
||||||
|
#N{4}
|
||||||
|
## Number Transistor P
|
||||||
|
#P{4}
|
||||||
|
## Fanout factor
|
||||||
|
#T{1000}
|
|
@ -0,0 +1,10 @@
|
||||||
|
## Mode
|
||||||
|
#M{3}
|
||||||
|
## Level
|
||||||
|
#L{5}
|
||||||
|
## Number Transistor N
|
||||||
|
#N{4}
|
||||||
|
## Number Transistor P
|
||||||
|
#P{4}
|
||||||
|
## Fanout factor
|
||||||
|
#T{1000}
|
|
@ -0,0 +1,135 @@
|
||||||
|
entity digicode is
|
||||||
|
port (
|
||||||
|
ck, reset, day, O:in bit;
|
||||||
|
i:in bit_vector (3 downto 0);
|
||||||
|
door, warn:out bit;
|
||||||
|
vdd, vss:in bit
|
||||||
|
);
|
||||||
|
end digicode;
|
||||||
|
|
||||||
|
architecture MOORE of digicode is
|
||||||
|
type ETAT_TYPE is (S0, S1, S2, S3, S_WAIT, S_OPEN, S_WARN);
|
||||||
|
signal NEXT_STATE, CURRENT_STATE:ETAT_TYPE;
|
||||||
|
|
||||||
|
-- pragma CURRENT_STATE CURRENT_STATE
|
||||||
|
-- pragma NEXT_STATE NEXT_STATE
|
||||||
|
-- pragma CLOCK ck
|
||||||
|
|
||||||
|
constant CODE0 : bit_vector (3 downto 0):= X"5";
|
||||||
|
constant CODE1 : bit_vector (3 downto 0):= X"3";
|
||||||
|
constant CODE2 : bit_vector (3 downto 0):= X"C";
|
||||||
|
constant CODE3 : bit_vector (3 downto 0):= X"1";
|
||||||
|
constant CODE4 : BIT_vector (3 downto 0):= X"7";
|
||||||
|
|
||||||
|
begin
|
||||||
|
process (CURRENT_STATE, i, reset, day, O)
|
||||||
|
begin
|
||||||
|
if (reset = '1')
|
||||||
|
then NEXT_STATE <= S_WAIT;
|
||||||
|
door <= '0';
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
case CURRENT_STATE is
|
||||||
|
when S_WAIT =>
|
||||||
|
if (O = '1')
|
||||||
|
then if (day = '1')
|
||||||
|
then NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
else
|
||||||
|
NEXT_STATE <= S_WAIT;
|
||||||
|
door <= '0';
|
||||||
|
end if;
|
||||||
|
warn <='0';
|
||||||
|
else if (i = CODE0)
|
||||||
|
then NEXT_STATE <= S0;
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
NEXT_STATE <= S_WARN;
|
||||||
|
warn <= '1';
|
||||||
|
end if;
|
||||||
|
door <='0';
|
||||||
|
end if;
|
||||||
|
when S0 =>
|
||||||
|
if ((day = '1') and (O = '1'))
|
||||||
|
then NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
if (i = CODE1)
|
||||||
|
then NEXT_STATE <= S1;
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
NEXT_STATE <= S_WARN;
|
||||||
|
warn <= '1';
|
||||||
|
end if;
|
||||||
|
door <='0';
|
||||||
|
end if;
|
||||||
|
when S1 =>
|
||||||
|
if ((day = '1') and (O = '1'))
|
||||||
|
then NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
if (i = CODE2)
|
||||||
|
then NEXT_STATE <= S2;
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
NEXT_STATE <= S_WARN;
|
||||||
|
warn <= '1';
|
||||||
|
end if;
|
||||||
|
door <='0';
|
||||||
|
end if;
|
||||||
|
when S2 =>
|
||||||
|
if ((day = '1') and (O = '1'))
|
||||||
|
then NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
if (i = CODE3)
|
||||||
|
then NEXT_STATE <= S3;
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
NEXT_STATE <= S_WARN;
|
||||||
|
warn <= '1';
|
||||||
|
end if;
|
||||||
|
door <='0';
|
||||||
|
end if;
|
||||||
|
when S3 =>
|
||||||
|
if ((day = '1') and (O = '1'))
|
||||||
|
then NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
if (i = CODE4)
|
||||||
|
then NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
warn <= '0';
|
||||||
|
else
|
||||||
|
NEXT_STATE <= S_WARN;
|
||||||
|
door <= '0';
|
||||||
|
warn <= '1';
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
when S_WARN =>
|
||||||
|
NEXT_STATE <= S_WARN;
|
||||||
|
door <='0';
|
||||||
|
warn <= '1';
|
||||||
|
|
||||||
|
when S_OPEN =>
|
||||||
|
NEXT_STATE <= S_OPEN;
|
||||||
|
door <= '1';
|
||||||
|
warn <= '0';
|
||||||
|
|
||||||
|
when others =>
|
||||||
|
assert ('1')
|
||||||
|
report "illegal state";
|
||||||
|
end case;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
process (ck)
|
||||||
|
begin
|
||||||
|
if (ck = '1' and not ck 'stable)
|
||||||
|
then CURRENT_STATE <= NEXT_STATE;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
end MOORE;
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Encoding figure "digicoder"
|
||||||
|
-r 3
|
||||||
|
s_warn 6
|
||||||
|
s_open 5
|
||||||
|
s_wait 0
|
||||||
|
s3 4
|
||||||
|
s2 2
|
||||||
|
s1 3
|
||||||
|
s0 7
|
|
@ -0,0 +1,9 @@
|
||||||
|
rename
|
||||||
|
current_state_6.sff_m : current_state(6);
|
||||||
|
current_state_5.sff_m : current_state(5);
|
||||||
|
current_state_4.sff_m : current_state(4);
|
||||||
|
current_state_3.sff_m : current_state(3);
|
||||||
|
current_state_2.sff_m : current_state(2);
|
||||||
|
current_state_1.sff_m : current_state(1);
|
||||||
|
current_state_0.sff_m : current_state(0);
|
||||||
|
end
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Encoding figure "digicodes"
|
||||||
|
-o 7
|
||||||
|
s_warn 0 1
|
||||||
|
s_open 1 2
|
||||||
|
s_wait 2 4
|
||||||
|
s3 3 8
|
||||||
|
s2 4 10
|
||||||
|
s1 5 20
|
||||||
|
s0 6 40
|
|
@ -0,0 +1,9 @@
|
||||||
|
rename
|
||||||
|
current_state_6.sff_m : current_state(6);
|
||||||
|
current_state_5.sff_m : current_state(5);
|
||||||
|
current_state_4.sff_m : current_state(4);
|
||||||
|
current_state_3.sff_m : current_state(3);
|
||||||
|
current_state_2.sff_m : current_state(2);
|
||||||
|
current_state_1.sff_m : current_state(1);
|
||||||
|
current_state_0.sff_m : current_state(0);
|
||||||
|
end
|
|
@ -0,0 +1,9 @@
|
||||||
|
rename
|
||||||
|
current_state_6.sff_m : current_state(6);
|
||||||
|
current_state_5.sff_m : current_state(5);
|
||||||
|
current_state_4.sff_m : current_state(4);
|
||||||
|
current_state_3.sff_m : current_state(3);
|
||||||
|
current_state_2.sff_m : current_state(2);
|
||||||
|
current_state_1.sff_m : current_state(1);
|
||||||
|
current_state_0.sff_m : current_state(0);
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
## Mode
|
||||||
|
#M{2}
|
||||||
|
## Level
|
||||||
|
#L{2}
|
||||||
|
## Number Transistor N
|
||||||
|
#N{4}
|
||||||
|
## Number Transistor P
|
||||||
|
#P{4}
|
||||||
|
## Fanout factor
|
||||||
|
#T{1000}
|
||||||
|
##Outputs capacitance
|
||||||
|
#C{
|
||||||
|
porte:1000;
|
||||||
|
alarme:1000;
|
||||||
|
}
|
Loading…
Reference in New Issue