Un petit tutorial (enfin un makefile) pour les outils de conso
This commit is contained in:
parent
585f37d55d
commit
86990f5948
|
@ -0,0 +1,266 @@
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Tool : Paper |
|
||||||
|
# | |
|
||||||
|
# | File : Makefile |
|
||||||
|
# | |
|
||||||
|
# | Author : Jacomme Ludovic |
|
||||||
|
# | and Fred the king |
|
||||||
|
# | |
|
||||||
|
# | Date : 01.01.96 |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Variables |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
OPTION = o
|
||||||
|
FORMAT = fsm
|
||||||
|
FILE = digi
|
||||||
|
|
||||||
|
FILE_NAME = $(FILE)_$(OPTION)
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Power Consumption |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CLOCK = clock
|
||||||
|
FREQUENCY = 40
|
||||||
|
CLOCK_WAVE = "01"
|
||||||
|
PATTERN_STEP = 12500ps
|
||||||
|
PATTERN_PICO = 25000
|
||||||
|
SWING = 3.3
|
||||||
|
CAPA_OUT = 100
|
||||||
|
|
||||||
|
# CLOCK = clock
|
||||||
|
# FREQUENCY = 20
|
||||||
|
# CLOCK_WAVE = "01"
|
||||||
|
# PATTERN_STEP = 25ns
|
||||||
|
# PATTERN_PICO = 50000
|
||||||
|
# SWING = 3.3
|
||||||
|
# CAPA_OUT = 100
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Alliance Tools |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
SYF = $(ALLIANCE_TOP)/bin/syf -VC
|
||||||
|
ASIMUT = $(ALLIANCE_TOP)/bin/asimut
|
||||||
|
LVX = $(ALLIANCE_TOP)/bin/lvx
|
||||||
|
SCR = $(ALLIANCE_TOP)/bin/scr
|
||||||
|
BOOM = $(ALLIANCE_TOP)/bin/boom
|
||||||
|
BOOG = $(ALLIANCE_TOP)/bin/boog
|
||||||
|
LOON = $(ALLIANCE_TOP)/bin/loon
|
||||||
|
LYNX = $(ALLIANCE_TOP)/bin/lynx
|
||||||
|
TAS = $(ALLIANCE_TOP)/bin/tas
|
||||||
|
YAGLE = $(ALLIANCE_TOP)/bin/yagle
|
||||||
|
|
||||||
|
POCPAG = $(ALLIANCE_TOP)/bin/pocpag
|
||||||
|
DTX2DLY = $(ALLIANCE_TOP)/bin/dtx2dly
|
||||||
|
SICC = $(ALLIANCE_TOP)/bin/sicc
|
||||||
|
EPOC = $(ALLIANCE_TOP)/bin/epoc
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Unix Command |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
RM = rm
|
||||||
|
MV = mv
|
||||||
|
CP = cp
|
||||||
|
CUT = cut
|
||||||
|
GREP = grep
|
||||||
|
TOUCH = touch
|
||||||
|
GZIP = gzip
|
||||||
|
TAIL = tail
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Cells libraries |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
CELLS = $(ALLIANCE_TOP)/cells
|
||||||
|
CELLS_SCR = $(ALLIANCE_CELLS)/sxlib
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Techno |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
TAS_TECHNO = $(ALLIANCE_TOP)/etc/prol05.elp
|
||||||
|
RDS_TECHNO = $(ALLIANCE_TOP)/etc/prol05.rds
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Environement Variables |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
ENV_VST = MBK_IN_LO=vst; export MBK_IN_LO; \
|
||||||
|
MBK_OUT_LO=vst; export MBK_OUT_LO; \
|
||||||
|
MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||||
|
MBK_CATA_LIB=$(CELLS_SCR); export MBK_CATA_LIB
|
||||||
|
ENV_AL = MBK_IN_LO=al; export MBK_IN_LO; \
|
||||||
|
MBK_OUT_LO=al; export MBK_OUT_LO; \
|
||||||
|
MBK_WORK_LIB=.; export MBK_WORK_LIB; \
|
||||||
|
MBK_CATA_LIB=$(CELLS_SCR); export MBK_CATA_LIB
|
||||||
|
ENV_AP = MBK_IN_PH=ap; export MBK_IN_PH; \
|
||||||
|
MBK_OUT_PH=ap; export MBK_OUT_PH; \
|
||||||
|
MBK_WORK_LIB=.; export MBK_WORK_LIB
|
||||||
|
ENV_VH = VH_BEHSFX=vbe; export VH_BEHSFX; \
|
||||||
|
VH_MAXERR="10"; export VH_MAXERR; \
|
||||||
|
VH_PATSFX=pat; export VH_PATSFX
|
||||||
|
ENV_SL = MBK_TARGET_LIB=$(CELLS_SCR);export MBK_TARGET_LIB; \
|
||||||
|
MBK_VDD=vdd; export MBK_VDD; \
|
||||||
|
MBK_VSS=vss; export MBK_VSS
|
||||||
|
ENV_FSM = FSM_IN=$(FORMAT); export FSM_IN
|
||||||
|
|
||||||
|
ENV_RDS = RDS_TECHNO_NAME=$(RDS_TECHNO); export RDS_TECHNO_NAME
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | All |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
all : $(FILE_NAME).pow
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Synthesis |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME).vbe : $(FILE).$(FORMAT)
|
||||||
|
$(ENV_FSM); $(SYF) -$(OPTION) $(FILE) $(FILE_NAME)
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Optimization |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME)_o.vbe : $(FILE_NAME).vbe
|
||||||
|
$(ENV_SL); $(BOOM) -V $(FILE_NAME) $(FILE_NAME)_o
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Mapping |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME).vst : $(FILE_NAME)_o.vbe
|
||||||
|
$(ENV_SL); $(ENV_VST); $(BOOG) $(FILE_NAME)_o $(FILE_NAME)
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Netoptim |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME)_o.vst : $(FILE_NAME).vst
|
||||||
|
$(ENV_SL); $(ENV_VST); $(LOON) $(FILE_NAME) $(FILE_NAME)_o
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Route |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME).ap : $(FILE_NAME)_o.vst
|
||||||
|
$(ENV_VST); $(ENV_AP); $(SCR) -p -r $(FILE_NAME)_o -o $(FILE_NAME)
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Extract |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME)_t.al : $(FILE_NAME).ap
|
||||||
|
$(ENV_AL); $(ENV_AP); $(ENV_RDS); $(LYNX) -v -t -ac $(FILE_NAME) $(FILE_NAME)_t
|
||||||
|
|
||||||
|
$(FILE_NAME).al : $(FILE_NAME).ap
|
||||||
|
$(ENV_AL); $(ENV_AP); $(ENV_RDS); $(LYNX) -v -ac $(FILE_NAME)
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | NetCompare |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME).lvx : $(FILE_NAME).al $(FILE_NAME).vst
|
||||||
|
$(ENV_AL); $(LVX) vst al $(FILE_NAME)_o $(FILE_NAME)
|
||||||
|
$(TOUCH) $(FILE_NAME).lvx
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Timing |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME).dtx : $(FILE_NAME)_t.al $(FILE_NAME).lvx
|
||||||
|
ELP_TECHNO_NAME=$(TAS_TECHNO); export ELP_TECHNO_NAME;\
|
||||||
|
$(ENV_AL); $(TAS) -t -tec=$(TAS_TECHNO) $(FILE_NAME)_t
|
||||||
|
$(MV) $(FILE_NAME)_t.dtx $(FILE_NAME).dtx
|
||||||
|
|
||||||
|
$(FILE_NAME)_yagh.vbe $(FILE_NAME)_t_yagh.al : $(FILE_NAME)_t.al
|
||||||
|
ELP_TECHNO_NAME=$(TAS_TECHNO); export ELP_TECHNO_NAME;\
|
||||||
|
$(ENV_AL); $(YAGLE) -v -nc -h -ffs -t -d -elp $(FILE_NAME)_t $(FILE_NAME)_yagh
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Conso |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
$(FILE_NAME).sta : $(FILE_NAME).pat $(FILE_NAME).lvx $(FILE_NAME)_yagh.vbe
|
||||||
|
$(ENV_AL); $(ASIMUT) -b -stat $(PATTERN_PICO) \
|
||||||
|
$(FILE_NAME) $(FILE_NAME)_yagh \
|
||||||
|
$(FILE_NAME) $(FILE_NAME)_res
|
||||||
|
|
||||||
|
$(FILE_NAME).pat : $(FILE_NAME)_yagh.vbe
|
||||||
|
$(POCPAG) -clk ck $(CLOCK_WAVE) -dly $(PATTERN_STEP) -b -nbr 1000 \
|
||||||
|
$(FILE_NAME) default $(FILE_NAME)
|
||||||
|
|
||||||
|
$(FILE_NAME).dly : $(FILE_NAME).dtx
|
||||||
|
$(DTX2DLY) $(FILE_NAME)
|
||||||
|
|
||||||
|
$(FILE_NAME).nrj : $(FILE_NAME).dly $(FILE_NAME)_t_yagh.al
|
||||||
|
$(ENV_AL); $(SICC) $(SWING) $(CAPA_OUT) $(FILE_NAME)_t_yagh $(FILE_NAME)
|
||||||
|
|
||||||
|
$(FILE_NAME).pow : $(FILE_NAME).sta $(FILE_NAME).nrj $(FILE_NAME)_yagh.vbe
|
||||||
|
$(ENV_AL); $(EPOC) $(FILE_NAME)_yagh $(FILE_NAME) $(FILE_NAME) $(FILE_NAME) $(FREQUENCY)
|
||||||
|
|
||||||
|
# /*------------------------------------------------------------\
|
||||||
|
# | |
|
||||||
|
# | Clean up |
|
||||||
|
# | |
|
||||||
|
# \------------------------------------------------------------*/
|
||||||
|
|
||||||
|
clean :
|
||||||
|
@$(RM) -f $(FILE_NAME)*.vbe \
|
||||||
|
$(FILE_NAME)*.vst \
|
||||||
|
$(FILE_NAME)*.xsc \
|
||||||
|
$(FILE_NAME)*.ap \
|
||||||
|
$(FILE_NAME)*.al \
|
||||||
|
$(FILE_NAME)*.lvx \
|
||||||
|
$(FILE_NAME)*.cns \
|
||||||
|
$(FILE_NAME)*.dtx \
|
||||||
|
$(FILE_NAME)*.ttx \
|
||||||
|
$(FILE_NAME)*.dly \
|
||||||
|
$(FILE_NAME)*.sta \
|
||||||
|
$(FILE_NAME)*.nrj \
|
||||||
|
$(FILE_NAME)*.pat \
|
||||||
|
$(FILE_NAME)*.rep \
|
||||||
|
$(FILE_NAME)*.stb \
|
||||||
|
$(FILE_NAME)*.pow \
|
||||||
|
CATAL
|
|
@ -0,0 +1,7 @@
|
||||||
|
default density = 2500.00;
|
||||||
|
default p('1') = 0.25;
|
||||||
|
|
||||||
|
|
||||||
|
in vdd : p('1') = 1.0;
|
||||||
|
in vss : p('1') = 0.0;
|
||||||
|
in reset : p('1') = 0.10;
|
|
@ -0,0 +1,217 @@
|
||||||
|
ENTITY circuit is
|
||||||
|
|
||||||
|
PORT
|
||||||
|
(
|
||||||
|
ck : in BIT;
|
||||||
|
jour : in BIT;
|
||||||
|
reset : in BIT;
|
||||||
|
vdd : in BIT;
|
||||||
|
vss : in BIT;
|
||||||
|
i : in BIT_VECTOR(3 DOWNTO 0);
|
||||||
|
porte : out BIT;
|
||||||
|
alarm : out BIT;
|
||||||
|
ep_0 : out BIT;
|
||||||
|
ep_1 : out BIT;
|
||||||
|
ep_2 : out BIT;
|
||||||
|
ep_3 : out BIT;
|
||||||
|
ep_4 : out BIT;
|
||||||
|
ep_5 : out BIT;
|
||||||
|
ep_a : out BIT
|
||||||
|
);
|
||||||
|
END circuit;
|
||||||
|
|
||||||
|
|
||||||
|
ARCHITECTURE MOORE OF circuit is
|
||||||
|
|
||||||
|
TYPE ETAT_TYPE IS (E0, E1, E2, E3, E4, E5, EA);
|
||||||
|
|
||||||
|
SIGNAL EF, CS : ETAT_TYPE;
|
||||||
|
|
||||||
|
CONSTANT digit0 : BIT_VECTOR (3 DOWNTO 0) := B"1111" ; -- O
|
||||||
|
|
||||||
|
CONSTANT digit1 : BIT_VECTOR (3 DOWNTO 0) := B"0101" ; -- 5
|
||||||
|
CONSTANT digit2 : BIT_VECTOR (3 DOWNTO 0) := B"0011" ; -- 3
|
||||||
|
CONSTANT digit3 : BIT_VECTOR (3 DOWNTO 0) := B"1100" ; -- A
|
||||||
|
CONSTANT digit4 : BIT_VECTOR (3 DOWNTO 0) := B"0001" ; -- 1
|
||||||
|
CONSTANT digit5 : BIT_VECTOR (3 DOWNTO 0) := B"0111" ; -- 7
|
||||||
|
|
||||||
|
--PRAGMA CURRENT_STATE CS
|
||||||
|
--PRAGMA NEXT_STATE EF
|
||||||
|
--PRAGMA CLOCK ck
|
||||||
|
--PRAGMA FIRST_STATE E0
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
PROCESS ( CS, i)
|
||||||
|
BEGIN
|
||||||
|
IF ( reset = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E0;
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '1';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '0';
|
||||||
|
ELSE
|
||||||
|
CASE CS is
|
||||||
|
WHEN E0 =>
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '1';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '0';
|
||||||
|
IF ( i = digit0 )
|
||||||
|
THEN
|
||||||
|
IF ( jour = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E5;
|
||||||
|
ELSE
|
||||||
|
EF <= EA;
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
IF ( i = digit1 )
|
||||||
|
THEN
|
||||||
|
EF <= E1;
|
||||||
|
ELSE
|
||||||
|
IF ( jour = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E0;
|
||||||
|
ELSE
|
||||||
|
EF <= EA;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
WHEN E1 =>
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '0';
|
||||||
|
ep_1 <= '1';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '0';
|
||||||
|
IF ( i = digit2 )
|
||||||
|
THEN
|
||||||
|
EF <= E2;
|
||||||
|
ELSE
|
||||||
|
IF ( jour = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E0;
|
||||||
|
ELSE
|
||||||
|
EF <= EA;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
WHEN E2 =>
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '0';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '1';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '0';
|
||||||
|
IF ( i = digit3 )
|
||||||
|
THEN
|
||||||
|
EF <= E3;
|
||||||
|
ELSE
|
||||||
|
IF ( jour = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E0;
|
||||||
|
ELSE
|
||||||
|
EF <= EA;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
WHEN E3 =>
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '0';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '1';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '0';
|
||||||
|
IF ( i = digit4 )
|
||||||
|
THEN
|
||||||
|
EF <= E4;
|
||||||
|
ELSE
|
||||||
|
IF ( jour = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E0;
|
||||||
|
ELSE
|
||||||
|
EF <= EA;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
WHEN E4 =>
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '0';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '1';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '0';
|
||||||
|
IF ( i = digit5 )
|
||||||
|
THEN
|
||||||
|
EF <= E5;
|
||||||
|
ELSE
|
||||||
|
IF ( jour = '1' )
|
||||||
|
THEN
|
||||||
|
EF <= E0;
|
||||||
|
ELSE
|
||||||
|
EF <= EA;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
WHEN E5 =>
|
||||||
|
porte <= '1';
|
||||||
|
alarm <= '0';
|
||||||
|
ep_0 <= '0';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '1';
|
||||||
|
ep_a <= '0';
|
||||||
|
EF <= E5;
|
||||||
|
|
||||||
|
WHEN EA =>
|
||||||
|
porte <= '0';
|
||||||
|
alarm <= '1';
|
||||||
|
ep_0 <= '0';
|
||||||
|
ep_1 <= '0';
|
||||||
|
ep_2 <= '0';
|
||||||
|
ep_3 <= '0';
|
||||||
|
ep_4 <= '0';
|
||||||
|
ep_5 <= '0';
|
||||||
|
ep_a <= '1';
|
||||||
|
EF <= EA;
|
||||||
|
|
||||||
|
END CASE;
|
||||||
|
END IF;
|
||||||
|
END PROCESS;
|
||||||
|
|
||||||
|
PROCESS( ck )
|
||||||
|
BEGIN
|
||||||
|
IF ( ck = '1' AND NOT ck'STABLE )
|
||||||
|
THEN
|
||||||
|
CS <= EF;
|
||||||
|
END IF;
|
||||||
|
END PROCESS;
|
||||||
|
|
||||||
|
END MOORE;
|
Loading…
Reference in New Issue