From 36edcc438bbb444668ccb2ee005b7b5cf2a2f205 Mon Sep 17 00:00:00 2001 From: Walter Fetter Lages Date: Sun, 20 May 2018 00:00:10 -0300 Subject: [PATCH] Initial commit. aic-1.0.0 based on TINI. --- .gitignore | 311 +++++++ BrakeTest/BrakeTest.java | 50 ++ BrakeTest/Makefile | 19 + EncoderTest/EncoderTest.java | 65 ++ EncoderTest/Makefile | 19 + INSTALL | 4 + IndexTest/IndexTest.java | 46 ++ IndexTest/Makefile | 19 + JointTest/JointTest.java | 55 ++ JointTest/Makefile | 19 + MotorReset/Makefile | 19 + MotorReset/MotorReset.java | 56 ++ MotorTest/Makefile | 19 + MotorTest/MotorTest.java | 58 ++ README | 3 + StrobeTest/Makefile | 18 + StrobeTest/StrobeTest.java | 48 ++ doc/Makefile | 49 ++ doc/aic.bib | 44 + doc/aic.tex | 159 ++++ doc/aic_comp_cut.png | Bin 0 -> 18218 bytes doc/aic_solder_cut.png | Bin 0 -> 17899 bytes doc/aic_wirewrap.png | Bin 0 -> 18070 bytes doc/aicpcb.pdf | Bin 0 -> 85429 bytes doc/aicpower.sch | 612 ++++++++++++++ doc/aictini.sch | 760 +++++++++++++++++ doc/attribs | 3 + lib/AIC.java | 38 + lib/Brake.java | 34 + lib/Encoder.java | 53 ++ lib/Index.java | 24 + lib/Makefile | 39 + lib/Motor.java | 49 ++ lib/PWM.java | 121 +++ pld/decoder.EQN | 55 ++ pld/decoder.MAP | 31 + pld/decoder.hst | 65 ++ pld/decoder.jdc | 237 ++++++ pld/decoder.jed | 150 ++++ pld/decoder.pds | 273 +++++++ pld/decoder.pin | 22 + pld/decoder.psf | 76 ++ pld/decoder.trf | 92 +++ pld/decoder.wdh | 92 +++ pld/decoder.wdt | 92 +++ pld/decoder.xpt | 172 ++++ pld/decoder1.hst | 65 ++ pld/decoder1.jdc | 236 ++++++ pld/decoder1.jed | 150 ++++ pld/decoder1.pds | 266 ++++++ pld/decoder1.trf | 86 ++ pld/decoder1.xpt | 172 ++++ pld/palasm2.tre | 1852 ++++++++++++++++++++++++++++++++++++++++++ 53 files changed, 6997 insertions(+) create mode 100644 .gitignore create mode 100644 BrakeTest/BrakeTest.java create mode 100644 BrakeTest/Makefile create mode 100644 EncoderTest/EncoderTest.java create mode 100644 EncoderTest/Makefile create mode 100644 INSTALL create mode 100644 IndexTest/IndexTest.java create mode 100644 IndexTest/Makefile create mode 100644 JointTest/JointTest.java create mode 100644 JointTest/Makefile create mode 100644 MotorReset/Makefile create mode 100644 MotorReset/MotorReset.java create mode 100644 MotorTest/Makefile create mode 100644 MotorTest/MotorTest.java create mode 100644 README create mode 100644 StrobeTest/Makefile create mode 100644 StrobeTest/StrobeTest.java create mode 100644 doc/Makefile create mode 100644 doc/aic.bib create mode 100644 doc/aic.tex create mode 100644 doc/aic_comp_cut.png create mode 100644 doc/aic_solder_cut.png create mode 100644 doc/aic_wirewrap.png create mode 100644 doc/aicpcb.pdf create mode 100644 doc/aicpower.sch create mode 100644 doc/aictini.sch create mode 100644 doc/attribs create mode 100644 lib/AIC.java create mode 100644 lib/Brake.java create mode 100644 lib/Encoder.java create mode 100644 lib/Index.java create mode 100644 lib/Makefile create mode 100644 lib/Motor.java create mode 100644 lib/PWM.java create mode 100644 pld/decoder.EQN create mode 100644 pld/decoder.MAP create mode 100644 pld/decoder.hst create mode 100644 pld/decoder.jdc create mode 100644 pld/decoder.jed create mode 100644 pld/decoder.pds create mode 100644 pld/decoder.pin create mode 100644 pld/decoder.psf create mode 100644 pld/decoder.trf create mode 100644 pld/decoder.wdh create mode 100644 pld/decoder.wdt create mode 100644 pld/decoder.xpt create mode 100644 pld/decoder1.hst create mode 100644 pld/decoder1.jdc create mode 100644 pld/decoder1.jed create mode 100644 pld/decoder1.pds create mode 100644 pld/decoder1.trf create mode 100644 pld/decoder1.xpt create mode 100644 pld/palasm2.tre diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c77d130 --- /dev/null +++ b/.gitignore @@ -0,0 +1,311 @@ +# Project specific +# TINI executable +*.tini + +# Text editor +# Backup files +*.~ +*.bak + +# C++ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +# Java +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +#TeX +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# makeidx +*.idx +*.ilg +*.ind +*.ist + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# easy-todo +*.lod + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +# generated if using elsarticle.cls +*.spl diff --git a/BrakeTest/BrakeTest.java b/BrakeTest/BrakeTest.java new file mode 100644 index 0000000..a978e82 --- /dev/null +++ b/BrakeTest/BrakeTest.java @@ -0,0 +1,50 @@ +import br.ufrgs.eletro.AIC.*; +import com.dalsemi.system.*; +import java.io.*; +import java.lang.Math.*; + +class BrakeTest +{ + static final int BASE=0x800000; + static final int ST=1000; + + static AIC aic; + + private static void delay(int ms) + { + long time=TINIOS.uptimeMillis(); + while(TINIOS.uptimeMillis() < time+ms); + } + + public static void main(String[] args) throws IOException + { + int i; + boolean run=true; + + System.out.println("AIC Brake Test Program"); + System.out.println("Copyright (C) Walter Fetter Lages, 2002.\n"); + + try + { + aic=new AIC(BASE,24.0,20e3,2000); + + aic.on(); + + while(run) + { + aic.brake.release(); + System.out.println("Brake released"); + delay(ST); + aic.brake.apply(); + System.out.println("Brake applied"); + delay(ST); + } + aic.off(); + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + + } +} diff --git a/BrakeTest/Makefile b/BrakeTest/Makefile new file mode 100644 index 0000000..7442771 --- /dev/null +++ b/BrakeTest/Makefile @@ -0,0 +1,19 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar:../lib/AIC.jar +APIDBPATH=-d /opt/tini/bin/tini.db +LIBPATH=-path ../lib/AIC.jar +JAVAFLAGS=-O -target 1.1 + +all: BrakeTest.tini + +BrakeTest.class: BrakeTest.java + javac ${JAVAFLAGS} ${CLASSPATH} BrakeTest.java + +BrakeTest.tini: BrakeTest.class + java ${CLASSPATH} TINIConvertor -f BrakeTest.class ${APIDBPATH} -o BrakeTest.tini ${LIBPATH} + +clean: + rm -f *.bak *~ BrakeTest.class + +distclean: clean + rm -f BrakeTest.tini + diff --git a/EncoderTest/EncoderTest.java b/EncoderTest/EncoderTest.java new file mode 100644 index 0000000..07797f3 --- /dev/null +++ b/EncoderTest/EncoderTest.java @@ -0,0 +1,65 @@ +import br.ufrgs.eletro.AIC.*; +import com.dalsemi.system.*; +import java.io.*; +import java.lang.Math.*; + +class EncoderTest +{ + static final int BASE=0x800000; + static final int ST=1500; + + static AIC aic; + + private static void delay(int ms) + { + long time=TINIOS.uptimeMillis(); + while(TINIOS.uptimeMillis() < time+ms); + } + + static void iter(int i) throws IllegalAddressException + { + aic.motor.set(10); + System.out.print("Motor Voltage: " + i); + + int count=aic.encoder.read(); + aic.encoder.clear(); + System.out.print("\tEncocer count: " + count); + System.out.println("\tMotor speed: " + (2*java.lang.Math.PI*count/aic.encoder.PULSES/ST*1000)); + delay(ST); + } + + public static void main(String[] args) throws IOException + { + int i; + boolean run=true; + + System.out.println("AIC Encoder Test Program"); + System.out.println("Copyright (C) Walter Fetter Lages, 2002.\n"); + + try + { + aic=new AIC(BASE,24.0,20e3,2000); + + aic.on(); + + aic.brake.release(); + + for(i=0;(i <= 24) && run;i++) iter(i); + + while(run) + { + + for(i=-24;(i <= 24) && run;i++) iter(i); + for(i=24;(i >= -24) && run;i--) iter(i); + } + + aic.off(); + + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + + } +} diff --git a/EncoderTest/Makefile b/EncoderTest/Makefile new file mode 100644 index 0000000..8dd350b --- /dev/null +++ b/EncoderTest/Makefile @@ -0,0 +1,19 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar:../lib/AIC.jar +APIDBPATH=-d /opt/tini/bin/tini.db +LIBPATH=-path ../lib/AIC.jar +JAVAFLAGS=-O -target 1.1 + +all: EncoderTest.tini + +EncoderTest.class: EncoderTest.java + javac ${JAVAFLAGS} ${CLASSPATH} EncoderTest.java + +EncoderTest.tini: EncoderTest.class + java ${CLASSPATH} TINIConvertor -f EncoderTest.class ${APIDBPATH} -o EncoderTest.tini ${LIBPATH} + +clean: + rm -f *.bak *~ EncoderTest.class + +distclean: clean + rm -f EncoderTest.tini + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..6837ea9 --- /dev/null +++ b/INSTALL @@ -0,0 +1,4 @@ +Instalar o software da AIC: + +: descompactar no +diretorio do usuario: diff --git a/IndexTest/IndexTest.java b/IndexTest/IndexTest.java new file mode 100644 index 0000000..828fb2c --- /dev/null +++ b/IndexTest/IndexTest.java @@ -0,0 +1,46 @@ +import br.ufrgs.eletro.AIC.*; +import com.dalsemi.system.*; +import java.io.*; +import java.lang.Math.*; + +class IndexTest +{ + static final int BASE=0x800000; + static final int ST=500; + + static AIC aic; + + private static void delay(int ms) + { + long time=TINIOS.uptimeMillis(); + while(TINIOS.uptimeMillis() < time+ms); + } + + public static void main(String[] args) throws IOException + { + int i; + boolean run=true; + + System.out.println("AIC Index Test Program"); + System.out.println("Copyright (C) Walter Fetter Lages, 2002.\n"); + + try + { + aic=new AIC(BASE,24.0,20e3,2000); + + aic.on(); + + while(run) + { + System.out.println("Index=" + aic.index.read()); + delay(ST); + } + aic.off(); + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + + } +} diff --git a/IndexTest/Makefile b/IndexTest/Makefile new file mode 100644 index 0000000..0cdab09 --- /dev/null +++ b/IndexTest/Makefile @@ -0,0 +1,19 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar:../lib/AIC.jar +APIDBPATH=-d /opt/tini/bin/tini.db +LIBPATH=-path ../lib/AIC.jar +JAVAFLAGS=-O -target 1.1 + +all: IndexTest.tini + +IndexTest.class: IndexTest.java + javac ${JAVAFLAGS} ${CLASSPATH} IndexTest.java + +IndexTest.tini: IndexTest.class + java ${CLASSPATH} TINIConvertor -f IndexTest.class ${APIDBPATH} -o IndexTest.tini ${LIBPATH} + +clean: + rm -f *.bak *~ IndexTest.class + +distclean: clean + rm -f IndexTest.tini + diff --git a/JointTest/JointTest.java b/JointTest/JointTest.java new file mode 100644 index 0000000..68a828e --- /dev/null +++ b/JointTest/JointTest.java @@ -0,0 +1,55 @@ +import br.ufrgs.eletro.AIC.*; +import com.dalsemi.system.*; +import java.io.*; +import java.lang.Math.*; + +class JointTest +{ + static final int BASE=0x800000; + + static AIC aic; + + private static void delay(int ms) + { + long time=TINIOS.uptimeMillis(); + while(TINIOS.uptimeMillis() < time+ms); + } + + static void iter(double v,int ms) throws IllegalAddressException + { + aic.motor.set(v); + System.out.print("Motor Voltage: " + v); + System.out.println("\tIndex: " + aic.index.read()); + + delay(ms); + } + + public static void main(String[] args) throws IOException + { + int i; + + System.out.println("AIC Joint Test Program"); + System.out.println("Copyright (C) Walter Fetter Lages, 2002.\n"); + + try + { + aic=new AIC(BASE,24.0,20e3,2000); + + aic.on(); + + aic.brake.release(); + + while(!aic.index.read()) + { + iter(5,1000); + iter(-5,1000); + } + aic.off(); + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + + } +} diff --git a/JointTest/Makefile b/JointTest/Makefile new file mode 100644 index 0000000..2ec6ab2 --- /dev/null +++ b/JointTest/Makefile @@ -0,0 +1,19 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar:../lib/AIC.jar +APIDBPATH=-d /opt/tini/bin/tini.db +LIBPATH=-path ../lib/AIC.jar +JAVAFLAGS=-O -target 1.1 + +all: JointTest.tini + +JointTest.class: JointTest.java + javac ${JAVAFLAGS} ${CLASSPATH} JointTest.java + +JointTest.tini: JointTest.class + java ${CLASSPATH} TINIConvertor -f JointTest.class ${APIDBPATH} -o JointTest.tini ${LIBPATH} + +clean: + rm -f *.bak *~ JointTest.class + +distclean: clean + rm -f JointTest.tini + diff --git a/MotorReset/Makefile b/MotorReset/Makefile new file mode 100644 index 0000000..4846e30 --- /dev/null +++ b/MotorReset/Makefile @@ -0,0 +1,19 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar:../lib/AIC.jar +APIDBPATH=-d /opt/tini/bin/tini.db +LIBPATH=-path ../lib/AIC.jar +JAVAFLAGS=-O -target 1.1 + +all: MotorReset.tini + +MotorReset.class: MotorReset.java + javac ${JAVAFLAGS} ${CLASSPATH} MotorReset.java + +MotorReset.tini: MotorReset.class + java ${CLASSPATH} TINIConvertor -f MotorReset.class ${APIDBPATH} -o MotorReset.tini ${LIBPATH} + +clean: + rm -f *.bak *~ MotorReset.class + +distclean: clean + rm -f MotorReset.tini + diff --git a/MotorReset/MotorReset.java b/MotorReset/MotorReset.java new file mode 100644 index 0000000..dddf45c --- /dev/null +++ b/MotorReset/MotorReset.java @@ -0,0 +1,56 @@ +import br.ufrgs.eletro.AIC.*; +import com.dalsemi.system.*; +import java.io.*; +import java.lang.Math.*; + +class MotorReset +{ + static final int BASE=0x800000; + + static AIC aic; + + private static void delay(int ms) + { + long time=TINIOS.uptimeMillis(); + while(TINIOS.uptimeMillis() < time+ms); + } + + static void iter(double v,int ms) throws IllegalAddressException + { + aic.motor.set(v); + System.out.print("Motor Voltage: " + v); + System.out.println("\tIndex: " + aic.index.read()); + + delay(ms); + } + + public static void main(String[] args) throws IOException + { + + System.out.println("AIC Joint Test Program"); + System.out.println("Copyright (C) Walter Fetter Lages, 2002.\n"); + + try + { + aic=new AIC(BASE,24.0,20e3,2000); + + aic.on(); + + aic.brake.release(); + + double v=0; + + while(!aic.index.read()) + { + if(v < 24.0) v++; + iter(v,1000); + } + aic.off(); + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + + } +} diff --git a/MotorTest/Makefile b/MotorTest/Makefile new file mode 100644 index 0000000..8e55ca4 --- /dev/null +++ b/MotorTest/Makefile @@ -0,0 +1,19 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar:../lib/AIC.jar +APIDBPATH=-d /opt/tini/bin/tini.db +LIBPATH=-path ../lib/AIC.jar +JAVAFLAGS=-O -target 1.1 + +all: MotorTest.tini + +MotorTest.class: MotorTest.java + javac ${JAVAFLAGS} ${CLASSPATH} MotorTest.java + +MotorTest.tini: MotorTest.class + java ${CLASSPATH} TINIConvertor -f MotorTest.class ${APIDBPATH} -o MotorTest.tini ${LIBPATH} + +clean: + rm -f *.bak *~ MotorTest.class + +distclean: clean + rm -f MotorTest.tini + diff --git a/MotorTest/MotorTest.java b/MotorTest/MotorTest.java new file mode 100644 index 0000000..09a5bf2 --- /dev/null +++ b/MotorTest/MotorTest.java @@ -0,0 +1,58 @@ +import br.ufrgs.eletro.AIC.*; +import com.dalsemi.system.*; +import java.io.*; +import java.lang.Math.*; + +class MotorTest +{ + static final int BASE=0x800000; + static final int ST=100; + + static AIC aic; + + private static void delay(int ms) + { + long time=TINIOS.uptimeMillis(); + while(TINIOS.uptimeMillis() < time+ms); + } + + static void iter(int i) throws IllegalAddressException + { + aic.motor.set(i); + System.out.println("Motor Voltage: " + i); + + delay(ST); + } + + public static void main(String[] args) throws IOException + { + int i; + boolean run=true; + + System.out.println("AIC Motor Test Program"); + System.out.println("Copyright (C) Walter Fetter Lages, 2002.\n"); + + try + { + aic=new AIC(BASE,24.0,20e3,2000); + + aic.on(); + + aic.brake.release(); + + for(i=0;(i <= 24) && run;i++) iter(i); + + while(run) + { + for(i=24;(i >= -24) && run;i--) iter(i); + for(i=-24;(i <= 24) && run;i++) iter(i); + } + aic.off(); + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + + } +} diff --git a/README b/README new file mode 100644 index 0000000..9b1dc6b --- /dev/null +++ b/README @@ -0,0 +1,3 @@ + Actuator Interface Card + +aic-1.*.* based on TINI diff --git a/StrobeTest/Makefile b/StrobeTest/Makefile new file mode 100644 index 0000000..13f0708 --- /dev/null +++ b/StrobeTest/Makefile @@ -0,0 +1,18 @@ +CLASSPATH=-classpath /opt/tini/bin/tini.jar:/opt/tini/bin/tiniclasses.jar +APIDBPATH=-d /opt/tini/bin/tini.db +JAVAFLAGS=-O -target 1.1 + +all: StrobeTest.tini + +StrobeTest.class: StrobeTest.java + javac ${JAVAFLAGS} ${CLASSPATH} StrobeTest.java + +StrobeTest.tini: StrobeTest.class + java ${CLASSPATH} TINIConvertor -f StrobeTest.class ${APIDBPATH} -o StrobeTest.tini + +clean: + rm -f *.bak *~ StrobeTest.class + +distclean: clean + rm -f StrobeTest.tini + diff --git a/StrobeTest/StrobeTest.java b/StrobeTest/StrobeTest.java new file mode 100644 index 0000000..982b76b --- /dev/null +++ b/StrobeTest/StrobeTest.java @@ -0,0 +1,48 @@ +import com.dalsemi.system.DataPort; +import com.dalsemi.system.IllegalAddressException; + +class StrobeTest +{ + static final int BASE = 0x800000; + static final int PWM = BASE+0x80000; + static final int ENCODER = BASE+0x90000; + static final int CONTROL = BASE+0xa0000; + + public static void main(String[] args) + { + DataPort pwm = new DataPort(PWM); + DataPort encoder = new DataPort(ENCODER); + DataPort control = new DataPort(CONTROL); + + pwm.setFIFOMode(true); + encoder.setFIFOMode(true); + control.setFIFOMode(true); + + pwm.setStretchCycles(DataPort.STRETCH10); + encoder.setStretchCycles(DataPort.STRETCH10); + control.setStretchCycles(DataPort.STRETCH10); + + try + { + int data=0; + + for(;;) + { + + pwm.write(data); + encoder.write(data); + control.write(data); + data=~data; + + pwm.read(); + encoder.read(); + control.read(); + + } + } + catch (IllegalAddressException iae) + { + iae.printStackTrace(); + } + } +} diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..22960e8 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,49 @@ +SCHEMS=aictini.sch aicpower.sch + +all: doc pcb bom + +doc: aic.ps aic.pdf + +aic.ps: aic.dvi + dvips aic + +aic.pdf: aic.dvi + dvipdf aic + +aic.dvi: aic.tex aic.aux aic.bbl + latex aic + latex aic + +aic.aux: aic.tex + latex aic + +aic.bbl: aic.bib + bibtex aic + +pcb: aic.net #aic.pcb + +aic.net: $(SCHEMS) + gnetlist -g PCB -o aic.net $(SCHEMS) + +#aic.pcb: $(SCHEMS) +# gnetlist -g PCBboard -o aic.pcb $(SCHEMS) + +bom: aic.bom aic.bpp aic.xrf + +aic.bom: $(SCHEMS) attribs + gnetlist -g bom -o aic.bom $(SCHEMS) + +aic.bpp: aic.bom + bompp.sh aic.bom > aic.bpp + +aic.xrf: aic.bom + bom_xref.sh aic.bom > aic.xrf + +clean: + rm -f *.aux *.log *~ *.bak *.bbl *.blg *.old + +distclean: clean + rm -f aic.ps aic.pdf aic.dvi aic.net aic.bom aic.bpp aic.xrf + +update: $(SCHEMS) + gschupdate $(SCHEMS) diff --git a/doc/aic.bib b/doc/aic.bib new file mode 100644 index 0000000..43b2949 --- /dev/null +++ b/doc/aic.bib @@ -0,0 +1,44 @@ +@misc{ftpfs, +title="{FTP} File System", +note="http://ftpfs.sourceforge.net", +key="FTP File System"} + +@misc{javasdk, +title="{Java 2 SDK}, Standard Edition", +note="http://java.sun.com/j2se/1.4", +key="Java 2 {SDK}, Standard Edition"} + +@misc{javax.comm, +title="{Java} extension for Communication ({Java} communications {API})", +note="http://java.sun.com/products/javacomm", +key="Java extension for Communication ({Java} communications {API})"} + +@misc{sdcc, +title="{SDCC} - a Freeware, retargettable, optimizing {ANSI-C} compiler", +note="http://sdcc.sourceforge.net", +key="SDCC"} + +@misc{slush, +title="{Slush}", +note="docs/Slush.txt in ftp://ftp.dalsemi.com/pub/tini/tini1\underline{~}10.tgz", +key="Slush"} + +@misc{rxtx, +title="{RXTX}", +note="http://www.rxtx.org", +key="{RXTX}"} + +@misc{tinisdk, +title="{TINI} Runtime Environment", +note="ftp://ftp.dalsemi.com/pub/tini/tini1 \underline{~} 10.tgz", +key="{TINI} Runtime Environment"} + +@book{tinispec, +title="The {TINI} Specification and Developers Guide", +author="Don Loomis", +publisher="Addison-Wesley", +address="Boston, MA", +month="Jun", +year="2001", +note="http://www.ibutton.org/TINI/tinispec.pdf"} + diff --git a/doc/aic.tex b/doc/aic.tex new file mode 100644 index 0000000..f01a179 --- /dev/null +++ b/doc/aic.tex @@ -0,0 +1,159 @@ +\documentclass[a4paper,12pt,brazil]{article} +\usepackage{babel} +\usepackage{epsf} +\usepackage{float} + +\newcommand{\postscript}[2] +{\setlength{\epsfxsize}{#2\hsize} +\centerline{\epsfbox{#1}}} + +\renewcommand \thesection{\Roman{section}} + +\newtheorem{lemma}{Lema} +\newtheorem{proof}{Prova} + +\title{ +{\large Universidade Federal do Rio Grande do Sul\\ +Escola de Engenharia\\ +Departamento de Engenharia El\'etrica}\\ +Actuator Interface Card} + +\author{Prof. Walter Fetter Lages} + +\begin{document} + +\maketitle + + +\bibliographystyle{abbrv} + +\section{Introdu\c{c}\~ao} + + +\section{Mapa de Endere\c{c}os} + +O espa\c{c}o de endere\c{c}amento da AIC \'e ocupado por dois conjuntos de +dispositivos: os dispositivos existentes na pr\'opria TINI e os dispositivos +externos. + +\subsection{Dispositivos da TINI} + +O mapa de endere\c{c}os da TINI \'e mostrado na tabela \ref{tab:addmap}. +Note-se que o software da TINI apresenta para o usu\'ario uma mem\'oria +linear\cite{tinispec}. Os endere\c{c}os habilitados atrav\'es de $\overline{\mbox{PCE0}}$, +$\overline{\mbox{PCE1}}$, $\overline{\mbox{PCE2}}$ e +$\overline{\mbox{PCE3}}$ s\~ao acessados no firmware da TINI atrav\'es das +faixas 800000H-8FFFFFH, 900000H-9FFFFFH, A00000H-AFFFFFH e +B00000H-BFFFFFH, respectivamente. + +\begin{table}[H] +\caption{Mapa de Endere\c{c}os da TINI RevD} +\label{tab:addmap} +\begin{center} +\begin{tabular}{ccccc} +\hline \hline +Endere\c{c}o & STROBE & Nome & Dispositivo & Refer\^encia\\ +\hline +000000H - 0FFFFFH & $\overline{\mbox{RCE0}}$ & 512Kx8 FLASH & Flash Memory & U2\\ +100000H - 1FFFFFH & $\overline{\mbox{CE1}}$ & 512Kx8 SRAM & SRAM & U4\\ +200000H - 2FFFFFH & $\overline{\mbox{CE2}}$ & 512Kx8 SRAM & SRAM & U5\\ +300000H - 307FFFH & $\overline{\mbox{CE3}}$ & Ethernet Interface & SMC91C94/96 & U3\\ +308000H - 309FFFH & $\overline{\mbox{CE3}}$ \\ +310000H & $\overline{\mbox{CE3}}$ & Real Time Clock & DS1315 & U7\\ +310001H - 3FFFFFH & $\overline{\mbox{CE3}}$ \\ +000000H - 0FFFFFH & $\overline{\mbox{PCE0}}$\\ +100000H - 1FFFFFH & $\overline{\mbox{PCE1}}$ \\ +200000H - 2FFFFFH & $\overline{\mbox{PCE2}}$ \\ +300000H - 3FFFFFH & $\overline{\mbox{PCE3}}$ \\ +\hline +\end{tabular} +\end{center} +\end{table} + +\subsection{Dispositivos Externos} + +Os dispositivos externos podem ser mapeados, atrav\'es de jumper, em +qualquer dos espa\c{c}os de endere\c{c}amento selecionados por +$\overline{\mbox{PCE0}}$-$\overline{\mbox{PCE3}}$. A tabela \ref{tab:extmap} +mostra o mapeamento de endere\c{c}os dentro da faixa selecionada pelo +jumper. + +\begin{table}[H] +\caption{Mapa de Endere\c{c}os de Dispositivos Externos} +\label{tab:extmap} +\begin{center} +\begin{tabular}{cccc} +\hline \hline +Endere\c{c}o & Nome & Dispositivo & Refer\^encia\\ +\hline +X80000H - X80003H & PWM & 8254 & U6\\ +X80004H - X8FFFFH & Alias PWM & 8254 & U6\\ +X90000H & Encoder & HCTL-2016 & U7\\ +X90001H - X9FFFFH & Alias Encoder & HCTL-2016 & U7\\ +XA0000H & Controle & 22V10 & U8\\ +XA0001H - XAFFFFH & Alias Controler & 22V10 & U8\\ +\hline +\end{tabular} +\end{center} +\end{table} + +\subsection{Registrador de Controle} + +Este registrador (endere\c{c}o XA0000H) \'e implementado em um 22V10 e os +seus bits est\~ao descritos na tabela \ref{tab:ctrlreg}. + +\begin{table}[H] +\caption{Registrador de Controle} +\label{tab:ctrlreg} +\begin{center} +\begin{tabular}{ccl} +\hline \hline +Bit & Opera\c{c}\~ao & Descri\c{c}\~ao\\ +\hline +D0 & R & \'{\i}ndice\\ +\hline +D1D0 & W\\ +00 & & Desabilita PWM\\ +01 & & Habilita PWM\\ +10 & & Ativa freio\\ +11 & & Libera freio\\ +\hline +\end{tabular} +\end{center} +\end{table} + +\section{Actuator Interface Case} + +O gabinete de montagem da AIC possui os conectores de interface RS232, CAN e +Ethernet no painel frontal e o conector de conex\~ao ao atuador no painel +traseiro. A pinagem deste conector \'e detalhada na tabela +\ref{tab:backpinout}. + +\begin{table}[H] +\caption{Pinagem do Conector Traseiro} +\label{tab:backpinout} +\begin{center} +\begin{tabular}{cl} +\hline \hline +Pino & Sinal\\ +\hline +1 & GND Encoder\\ +2 & CHA\\ +3 & +5V\\ +4 & CHB\\ +5 & GND \'Indice\\ +6 & \'Indice\\ +7 & +24V \'Indice\\ +8 & GND\\ +9 & +24V\\ +10 & Freio\\ +11 & Motor +\\ +12 & Motor -\\ +\hline +\end{tabular} +\end{center} +\end{table} + +\bibliography{aic} + +\end{document} diff --git a/doc/aic_comp_cut.png b/doc/aic_comp_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..31fc6328e01be3575d1d47eb7efc8a2fd3c84d40 GIT binary patch literal 18218 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

q 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 T_XIwM1*EC=ShY;~*_;0dz-K^2 literal 0 HcmV?d00001 diff --git a/doc/aic_wirewrap.png b/doc/aic_wirewrap.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf5d8888d80ae619cadfd6af0b76697855e8c9b GIT binary patch literal 18070 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 literal 0 HcmV?d00001 diff --git a/doc/aicpcb.pdf b/doc/aicpcb.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8fdcb54f11d9f88f5c4a350847c795f6adea1e07 GIT binary patch literal 85429 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ØhQw8+HP(q8WH? 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 8)); + + control.write(0x40 | ONE_SHOT_BIN); + timer1.write((byte) (max_count/2)); + timer1.write((byte)((max_count/2) >> 8)); + } + + public double getFreq() + { + return REF_FREQ/max_count; + } + + private void init(int base,double freq) throws IllegalAddressException + { + timer0=new DataPort(base+PWM+0); + timer0.setFIFOMode(true); + timer0.setStretchCycles(DataPort.STRETCH10); + + timer1=new DataPort(base+PWM+1); + timer1.setFIFOMode(true); + timer1.setStretchCycles(DataPort.STRETCH10); + + control=new DataPort(base+PWM+3); + control.setFIFOMode(true); + control.setStretchCycles(DataPort.STRETCH10); + + latch=new DataPort(base+LATCH); + latch.setFIFOMode(true); + latch.setStretchCycles(DataPort.STRETCH10); + + + control.write(RATE_BIN); + + timer0.write((byte) MAX_COUNT); + timer0.write((byte)(MAX_COUNT >> 8)); + + control.write(0x40 | ONE_SHOT_BIN); + timer1.write((byte)(max_count/2)); + timer1.write((byte)((max_count/2) >> 8)); + + setFreq(freq); + } + + public PWM(int base,double freq) throws IllegalAddressException + { + init(base,freq); + } + + public PWM(int base) throws IllegalAddressException + { + init(base,SW_FREQ); + } + + public void finalize() throws IllegalAddressException + { + timer1.write((byte)(max_count/2)); + timer1.write((byte)((max_count/2) >> 8)); + } + + + public int setDuty(double dutycicle) throws IllegalAddressException + { + if(dutycicle < 0.0) dutycicle=0.0; + if(dutycicle > 1.0) dutycicle=1.0; + int count=(int)(max_count*(1.0-dutycicle)); + if(count < MIN_COUNT) count=MIN_COUNT; + if(count > max_count-MIN_COUNT) count=max_count-MIN_COUNT; + timer1.write((byte)count); + timer1.write((byte)(count >> 8)); + return count; + } + + public void on() throws IllegalAddressException + { + latch.write((byte)PWMENABLE); + } + + public void off() throws IllegalAddressException + { + latch.write((byte)PWMDISABLE); + } +} diff --git a/pld/decoder.EQN b/pld/decoder.EQN new file mode 100644 index 0000000..a5dc4c4 --- /dev/null +++ b/pld/decoder.EQN @@ -0,0 +1,55 @@ +Groupings +0:0:8; +1:0:10; +2:0:12; +3:0:14; +4:0:16; +5:0:16; +6:0:14; +7:0:12; +8:0:10; +9:0:8; +10:0:1; +11:0:1; +12:0:1; +13:0:1; +14:0:1; +15:0:1; +16:0:1; +17:0:1; +18:0:1; +19:0:1; +20:0:1; +21:0:1; +Declarations +CLK,dir:input; +A19,dir:input; +A18,dir:input; +A17,dir:input; +A16,dir:input; +!WR,dir:input; +!RD,dir:input; +D1,dir:input; +REFPOS,dir:input; +STROBE,dir:input; +PWM,dir:input; +TRINT,dir:input; +DRVB,dir:input; +DRVA,dir:input; +EXTINT,dir:input; +BRAKE,dir:input; +PWMEN,dir:input; +D0,dir:input; +!EWR,dir:input; +!ERD,dir:input; +!CSPWM,dir:input; +CSLATCH,dir:input; +AR,dir:input; +SP,dir:input; +AR,dir:output,group:20; +SP,dir:output,group:21; +EXTINT,dir:output,group:7; +Equations +AR =0; +SP =0; +EXTINT=!TRINT; diff --git a/pld/decoder.MAP b/pld/decoder.MAP new file mode 100644 index 0000000..16fb244 --- /dev/null +++ b/pld/decoder.MAP @@ -0,0 +1,31 @@ +"Place Version: 2.8.2 +*********************** +* DIP FORMAT ONLY * +*********************** +Actuator Interface Card Decoder +Part Number = PEEL22CV10 + +PinNode 1 = CLK +PinNode 2 = A19 +PinNode 3 = A18 +PinNode 4 = A17 +PinNode 5 = A16 +PinNode 6 = !WR +PinNode 7 = !RD +PinNode 8 = D1 +PinNode 9 = REFPOS +PinNode 10 = STROBE +PinNode 11 = PWM +PinNode 13 = TRINT +PinNode 14 = DRVB +PinNode 15 = DRVA +PinNode 16 = EXTINT +PinNode 17 = BRAKE +PinNode 18 = PWMEN +PinNode 19 = D0 +PinNode 20 = !EWR +PinNode 21 = !ERD +PinNode 22 = !CSPWM +PinNode 23 = CSLATCH +PinNode 25 = AR +PinNode 26 = SP diff --git a/pld/decoder.hst b/pld/decoder.hst new file mode 100644 index 0000000..b3f6c83 --- /dev/null +++ b/pld/decoder.hst @@ -0,0 +1,65 @@ +PALASM4 PLDSIM - MARKET RELEASE 1.5 (7-10-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + +PALASM SIMULATION HISTORY LISTING + +Title : DECODER.PDS Author : Walter Fetter Lag +Pattern : A Company : UFRGS +Revision : 1.0 Date : 10/10/02 + +PAL22V10 +Page : 1 + gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + CLOCK LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + A[19] LLLLLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLH + A[18] LLLLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHL + A[17] LLLLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHL + A[16] LLLLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHL +/WR LLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLL +/RD LLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLHHHHHHHHH + D1 LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + REFPOS LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHHHHHHHHHHHHHHH +/STROBE LLLHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + PWM LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + GND LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + TRINT LHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + DRVB LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + DRVA LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +/EXTINT HLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/BRAKE HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + PWMEN LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + D0 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZHZZZZZZZZZZZZZZ +/EWR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/ERD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHH +/CSPWM HHHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHL +/CSLATCH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + VCC HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + +PAL22V10 +Page : 2 + ggggggggggggc gc gc gc pggpgg + CLOCK LLLLLLLLLLLLHHLLHHLLHHLLHHLLLLLLL + A[19] HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + A[18] LLLHHHHHLLLLLLLLLLLLLLLLLLLLLLLLL + A[17] LHHLLHHHHHHHHHHHHHHHHHHHHHHHHHHHH + A[16] HLHLHLHHLLLLLLLLLLLLLLLLLLLLLLLLL +/WR LLLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHH +/RD HHHHHHHHLLHHHHHHHHHHHHHHHHHHHHHHH + D1 LLLLLLLLLLLHHHHLLLLLLLLLLLLLLLLLL + REFPOS HHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLL +/STROBE LLLLLLLHLLHHHHHHHHHHHHHHHHHHHHHHH + PWM LLLLLLLLLLLLLLLLLLLLLLLLLLLLLHHLH + GND LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + TRINT LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + DRVB LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLH + DRVA LLLLLLLLLLLLLXXXXXXXXHHHHLLLLLLHL +/EXTINT HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/BRAKE HHHHHHHHHHHHHLLLLHHHHHHHHHHHHHHHH + PWMEN LLLLLLLLLLLLLXXXXXXXXHHHHLLLLLHHH + D0 ZZZZZZZZHLZZZZZZZZZHHHHLLLLLLLLLL +/EWR LHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/ERD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/CSPWM HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/CSLATCH HLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + VCC HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + diff --git a/pld/decoder.jdc b/pld/decoder.jdc new file mode 100644 index 0000000..2640c47 --- /dev/null +++ b/pld/decoder.jdc @@ -0,0 +1,237 @@ + +PALASM4 PAL ASSEMBLER - MARKET RELEASE 1.5a (8-20-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + + +TITLE :DECODER.PDS AUTHOR :Walter Fetter Lages +PATTERN :A COMPANY:UFRGS +REVISION:1.0 DATE :10/10/02 + + +PAL22V10 +DECODER* +QV0085* +QP24* +QF5828* +G0*F0* +L0000 00000000000000000000000000000000000000000000* +L0044 11111111111111111111111111111111111111111111* +L0088 11110111101101111011101111111111111110111111* +L0132 00000000000000000000000000000000000000000000* +L0176 00000000000000000000000000000000000000000000* +L0220 00000000000000000000000000000000000000000000* +L0264 00000000000000000000000000000000000000000000* +L0308 00000000000000000000000000000000000000000000* +L0352 00000000000000000000000000000000000000000000* +L0396 00000000000000000000000000000000000000000000* +L0440 11111111111111111111111111111111111111111111* +L0484 11110111101110111011111111111111111110111111* +L0528 00000000000000000000000000000000000000000000* +L0572 00000000000000000000000000000000000000000000* +L0616 00000000000000000000000000000000000000000000* +L0660 00000000000000000000000000000000000000000000* +L0704 00000000000000000000000000000000000000000000* +L0748 00000000000000000000000000000000000000000000* +L0792 00000000000000000000000000000000000000000000* +L0836 00000000000000000000000000000000000000000000* +L0880 00000000000000000000000000000000000000000000* +L0924 11111111111111111111111111111111111111111111* +L0968 11110111101110110111111110111111111110111111* +L1012 00000000000000000000000000000000000000000000* +L1056 00000000000000000000000000000000000000000000* +L1100 00000000000000000000000000000000000000000000* +L1144 00000000000000000000000000000000000000000000* +L1188 00000000000000000000000000000000000000000000* +L1232 00000000000000000000000000000000000000000000* +L1276 00000000000000000000000000000000000000000000* +L1320 00000000000000000000000000000000000000000000* +L1364 00000000000000000000000000000000000000000000* +L1408 00000000000000000000000000000000000000000000* +L1452 00000000000000000000000000000000000000000000* +L1496 11111111111111111111111111111111111111111111* +L1540 11110111101110110111101111111111111110111111* +L1584 00000000000000000000000000000000000000000000* +L1628 00000000000000000000000000000000000000000000* +L1672 00000000000000000000000000000000000000000000* +L1716 00000000000000000000000000000000000000000000* +L1760 00000000000000000000000000000000000000000000* +L1804 00000000000000000000000000000000000000000000* +L1848 00000000000000000000000000000000000000000000* +L1892 00000000000000000000000000000000000000000000* +L1936 00000000000000000000000000000000000000000000* +L1980 00000000000000000000000000000000000000000000* +L2024 00000000000000000000000000000000000000000000* +L2068 00000000000000000000000000000000000000000000* +L2112 00000000000000000000000000000000000000000000* +L2156 11110111101101111011111110111111111110111111* +L2200 11111111111111111111111111111111011111111111* +L2244 00000000000000000000000000000000000000000000* +L2288 00000000000000000000000000000000000000000000* +L2332 00000000000000000000000000000000000000000000* +L2376 00000000000000000000000000000000000000000000* +L2420 00000000000000000000000000000000000000000000* +L2464 00000000000000000000000000000000000000000000* +L2508 00000000000000000000000000000000000000000000* +L2552 00000000000000000000000000000000000000000000* +L2596 00000000000000000000000000000000000000000000* +L2640 00000000000000000000000000000000000000000000* +L2684 00000000000000000000000000000000000000000000* +L2728 00000000000000000000000000000000000000000000* +L2772 00000000000000000000000000000000000000000000* +L2816 00000000000000000000000000000000000000000000* +L2860 00000000000000000000000000000000000000000000* +L2904 11111111111111111111111111111111111111111111* +L2948 11111111111111111101111111111111111111111111* +L2992 00000000000000000000000000000000000000000000* +L3036 00000000000000000000000000000000000000000000* +L3080 00000000000000000000000000000000000000000000* +L3124 00000000000000000000000000000000000000000000* +L3168 00000000000000000000000000000000000000000000* +L3212 00000000000000000000000000000000000000000000* +L3256 00000000000000000000000000000000000000000000* +L3300 00000000000000000000000000000000000000000000* +L3344 00000000000000000000000000000000000000000000* +L3388 00000000000000000000000000000000000000000000* +L3432 00000000000000000000000000000000000000000000* +L3476 00000000000000000000000000000000000000000000* +L3520 00000000000000000000000000000000000000000000* +L3564 00000000000000000000000000000000000000000000* +L3608 00000000000000000000000000000000000000000000* +L3652 11111111111111111111111111111111111111111111* +L3696 11111111111111111111111111110111111111111111* +L3740 00000000000000000000000000000000000000000000* +L3784 00000000000000000000000000000000000000000000* +L3828 00000000000000000000000000000000000000000000* +L3872 00000000000000000000000000000000000000000000* +L3916 00000000000000000000000000000000000000000000* +L3960 00000000000000000000000000000000000000000000* +L4004 00000000000000000000000000000000000000000000* +L4048 00000000000000000000000000000000000000000000* +L4092 00000000000000000000000000000000000000000000* +L4136 00000000000000000000000000000000000000000000* +L4180 00000000000000000000000000000000000000000000* +L4224 00000000000000000000000000000000000000000000* +L4268 00000000000000000000000000000000000000000000* +L4312 11111111111111111111111111111111111111111111* +L4356 11111111111111111111111111111111111111111101* +L4400 00000000000000000000000000000000000000000000* +L4444 00000000000000000000000000000000000000000000* +L4488 00000000000000000000000000000000000000000000* +L4532 00000000000000000000000000000000000000000000* +L4576 00000000000000000000000000000000000000000000* +L4620 00000000000000000000000000000000000000000000* +L4664 00000000000000000000000000000000000000000000* +L4708 00000000000000000000000000000000000000000000* +L4752 00000000000000000000000000000000000000000000* +L4796 00000000000000000000000000000000000000000000* +L4840 00000000000000000000000000000000000000000000* +L4884 11111111111111111111111111111111111111111111* +L4928 11111111111111111111111011111111111111111011* +L4972 00000000000000000000000000000000000000000000* +L5016 00000000000000000000000000000000000000000000* +L5060 00000000000000000000000000000000000000000000* +L5104 00000000000000000000000000000000000000000000* +L5148 00000000000000000000000000000000000000000000* +L5192 00000000000000000000000000000000000000000000* +L5236 00000000000000000000000000000000000000000000* +L5280 00000000000000000000000000000000000000000000* +L5324 00000000000000000000000000000000000000000000* +L5368 11111111111111111111111111111111111111111111* +L5412 11111111111111111111111011111111111111110111* +L5456 00000000000000000000000000000000000000000000* +L5500 00000000000000000000000000000000000000000000* +L5544 00000000000000000000000000000000000000000000* +L5588 00000000000000000000000000000000000000000000* +L5632 00000000000000000000000000000000000000000000* +L5676 00000000000000000000000000000000000000000000* +L5720 00000000000000000000000000000000000000000000* +L5764 00000000000000000000000000000000000000000000* +L5808 01010101111000011111* +X0* +V0001 0XXXXXXXXXXNXLLHHLZHHHHN* +V0002 0XXXXXXXXXXN1LLLHLZHHHHN* +V0003 0XXXXXXXXXXN0LLHHLZHHHHN* +V0004 0000011XX1XN0LLHHLZHHHHN* +V0005 0000111XX1XN0LLHHLZHHHHN* +V0006 0001011XX1XN0LLHHLZHHHHN* +V0007 0001111XX1XN0LLHHLZHHHHN* +V0008 0010011XX1XN0LLHHLZHHHHN* +V0009 0010111XX1XN0LLHHLZHHHHN* +V0010 0011011XX1XN0LLHHLZHHHHN* +V0011 0011111XX1XN0LLHHLZHHHHN* +V0012 0100011XX1XN0LLHHLZHHHHN* +V0013 0100111XX1XN0LLHHLZHHHHN* +V0014 0101011XX1XN0LLHHLZHHHHN* +V0015 0101111XX1XN0LLHHLZHHHHN* +V0016 0110011XX1XN0LLHHLZHHHHN* +V0017 0110111XX1XN0LLHHLZHHHHN* +V0018 0111011XX1XN0LLHHLZHHHHN* +V0019 0111111XX1XN0LLHHLZHHHHN* +V0020 0000011XX0XN0LLHHLZHHHHN* +V0021 0000111XX0XN0LLHHLZHHHHN* +V0022 0001011XX0XN0LLHHLZHHHHN* +V0023 0001111XX0XN0LLHHLZHHHHN* +V0024 0010011XX0XN0LLHHLZHHHHN* +V0025 0010111XX0XN0LLHHLZHHHHN* +V0026 0011011XX0XN0LLHHLZHHHHN* +V0027 0011111XX0XN0LLHHLZHHHHN* +V0028 0100011XX0XN0LLHHLZHHLHN* +V0029 0100111XX0XN0LLHHLZHHHHN* +V0030 0101011XX0XN0LLHHLZHHHHN* +V0031 0101111XX0XN0LLHHLZHHHHN* +V0032 0110011XX0XN0LLHHLZHHHHN* +V0033 0110111XX0XN0LLHHLZHHHHN* +V0034 0111011XX0XN0LLHHLZHHHHN* +V0035 0111111XX0XN0LLHHLZHHHHN* +V0036 0000010XX0XN0LLHHLZHHHHN* +V0037 0000110XX0XN0LLHHLZHHHHN* +V0038 0001010XX0XN0LLHHLZHHHHN* +V0039 0001110XX0XN0LLHHLZHHHHN* +V0040 0010010XX0XN0LLHHLZHHHHN* +V0041 0010110XX0XN0LLHHLZHHHHN* +V0042 0011010XX0XN0LLHHLZHHHHN* +V0043 0011110XX0XN0LLHHLZHHHHN* +V0044 0100010XX0XN0LLHHLZHHLHN* +V0045 0100110XX0XN0LLHHLZHLHHN* +V0046 0101010X10XN0LLHHLHHHHHN* +V0047 0101110X10XN0LLHHLZHHHHN* +V0048 0110010X10XN0LLHHLZHHHHN* +V0049 0110110X10XN0LLHHLZHHHHN* +V0050 0111010X10XN0LLHHLZHHHHN* +V0051 0111110X10XN0LLHHLZHHHHN* +V0052 0000001X10XN0LLHHLZHHHHN* +V0053 0000101X10XN0LLHHLZHHHHN* +V0054 0001001X10XN0LLHHLZHHHHN* +V0055 0001101X10XN0LLHHLZHHHHN* +V0056 0010001X10XN0LLHHLZHHHHN* +V0057 0010101X10XN0LLHHLZHHHHN* +V0058 0011001X10XN0LLHHLZHHHHN* +V0059 0011101X10XN0LLHHLZHHHHN* +V0060 0100001X10XN0LLHHLZHHLHN* +V0061 0100101X10XN0LLHHLZLHHHN* +V0062 0101001X10XN0LLHHLZHHHLN* +V0063 0101101X10XN0LLHHLZHHHHN* +V0064 0110001X10XN0LLHHLZHHHHN* +V0065 0110101X10XN0LLHHLZHHHHN* +V0066 0111001X10XN0LLHHLZHHHHN* +V0067 0111101X10XN0LLHHLZHHHHN* +V0068 0111111X11XN0LLHHLZHHHHN* +V0069 0101010X10XN0LLHHLHHHHHN* +V0070 0101010X00XN0LLHHLLHHHHN* +V0071 0101011X01XN0LLHHLZHHHHN* +V0072 0101011101XN0LLHHLZHHHHN* +V0073 C101011101XN0LXHLXZHHHHN* +V0074 0101011001XN0LXHLXZHHHHN* +V0075 C101011001XN0LXHHXZHHHHN* +V0076 0101011001XN0LXHHX1HHHHN* +V0077 C101011001XN0LHHHH1HHHHN* +V0078 0101011001XN0LHHHH0HHHHN* +V0079 C101011001XN0LLHHL0HHHHN* +V0080 P1010110010N0XXXX10XXXXN* +V0081 01010110010N0LLHHL0HHHHN* +V0082 01010110011N0LLHHL0HHHHN* +V0083 P1010110011N0XXXX00XXXXN* +V0084 01010110010N0LHHHH0HHHHN* +V0085 01010110011N0HLHHH0HHHHN* +C6C0E* +A8AD diff --git a/pld/decoder.jed b/pld/decoder.jed new file mode 100644 index 0000000..50b49a4 --- /dev/null +++ b/pld/decoder.jed @@ -0,0 +1,150 @@ + +PALASM4 PAL ASSEMBLER - MARKET RELEASE 1.5a (8-20-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + + +TITLE :DECODER.PDS AUTHOR :Walter Fetter Lages +PATTERN :A COMPANY:UFRGS +REVISION:1.0 DATE :10/10/02 + + +PAL22V10 +DECODER* +QP24* +QF5828* +G0*F0* +L0000 00000000000000000000000000000000000000000000* +L0044 11111111111111111111111111111111111111111111* +L0088 11110111101101111011101111111111111110111111* +L0132 00000000000000000000000000000000000000000000* +L0176 00000000000000000000000000000000000000000000* +L0220 00000000000000000000000000000000000000000000* +L0264 00000000000000000000000000000000000000000000* +L0308 00000000000000000000000000000000000000000000* +L0352 00000000000000000000000000000000000000000000* +L0396 00000000000000000000000000000000000000000000* +L0440 11111111111111111111111111111111111111111111* +L0484 11110111101110111011111111111111111110111111* +L0528 00000000000000000000000000000000000000000000* +L0572 00000000000000000000000000000000000000000000* +L0616 00000000000000000000000000000000000000000000* +L0660 00000000000000000000000000000000000000000000* +L0704 00000000000000000000000000000000000000000000* +L0748 00000000000000000000000000000000000000000000* +L0792 00000000000000000000000000000000000000000000* +L0836 00000000000000000000000000000000000000000000* +L0880 00000000000000000000000000000000000000000000* +L0924 11111111111111111111111111111111111111111111* +L0968 11110111101110110111111110111111111110111111* +L1012 00000000000000000000000000000000000000000000* +L1056 00000000000000000000000000000000000000000000* +L1100 00000000000000000000000000000000000000000000* +L1144 00000000000000000000000000000000000000000000* +L1188 00000000000000000000000000000000000000000000* +L1232 00000000000000000000000000000000000000000000* +L1276 00000000000000000000000000000000000000000000* +L1320 00000000000000000000000000000000000000000000* +L1364 00000000000000000000000000000000000000000000* +L1408 00000000000000000000000000000000000000000000* +L1452 00000000000000000000000000000000000000000000* +L1496 11111111111111111111111111111111111111111111* +L1540 11110111101110110111101111111111111110111111* +L1584 00000000000000000000000000000000000000000000* +L1628 00000000000000000000000000000000000000000000* +L1672 00000000000000000000000000000000000000000000* +L1716 00000000000000000000000000000000000000000000* +L1760 00000000000000000000000000000000000000000000* +L1804 00000000000000000000000000000000000000000000* +L1848 00000000000000000000000000000000000000000000* +L1892 00000000000000000000000000000000000000000000* +L1936 00000000000000000000000000000000000000000000* +L1980 00000000000000000000000000000000000000000000* +L2024 00000000000000000000000000000000000000000000* +L2068 00000000000000000000000000000000000000000000* +L2112 00000000000000000000000000000000000000000000* +L2156 11110111101101111011111110111111111110111111* +L2200 11111111111111111111111111111111011111111111* +L2244 00000000000000000000000000000000000000000000* +L2288 00000000000000000000000000000000000000000000* +L2332 00000000000000000000000000000000000000000000* +L2376 00000000000000000000000000000000000000000000* +L2420 00000000000000000000000000000000000000000000* +L2464 00000000000000000000000000000000000000000000* +L2508 00000000000000000000000000000000000000000000* +L2552 00000000000000000000000000000000000000000000* +L2596 00000000000000000000000000000000000000000000* +L2640 00000000000000000000000000000000000000000000* +L2684 00000000000000000000000000000000000000000000* +L2728 00000000000000000000000000000000000000000000* +L2772 00000000000000000000000000000000000000000000* +L2816 00000000000000000000000000000000000000000000* +L2860 00000000000000000000000000000000000000000000* +L2904 11111111111111111111111111111111111111111111* +L2948 11111111111111111101111111111111111111111111* +L2992 00000000000000000000000000000000000000000000* +L3036 00000000000000000000000000000000000000000000* +L3080 00000000000000000000000000000000000000000000* +L3124 00000000000000000000000000000000000000000000* +L3168 00000000000000000000000000000000000000000000* +L3212 00000000000000000000000000000000000000000000* +L3256 00000000000000000000000000000000000000000000* +L3300 00000000000000000000000000000000000000000000* +L3344 00000000000000000000000000000000000000000000* +L3388 00000000000000000000000000000000000000000000* +L3432 00000000000000000000000000000000000000000000* +L3476 00000000000000000000000000000000000000000000* +L3520 00000000000000000000000000000000000000000000* +L3564 00000000000000000000000000000000000000000000* +L3608 00000000000000000000000000000000000000000000* +L3652 11111111111111111111111111111111111111111111* +L3696 11111111111111111111111111110111111111111111* +L3740 00000000000000000000000000000000000000000000* +L3784 00000000000000000000000000000000000000000000* +L3828 00000000000000000000000000000000000000000000* +L3872 00000000000000000000000000000000000000000000* +L3916 00000000000000000000000000000000000000000000* +L3960 00000000000000000000000000000000000000000000* +L4004 00000000000000000000000000000000000000000000* +L4048 00000000000000000000000000000000000000000000* +L4092 00000000000000000000000000000000000000000000* +L4136 00000000000000000000000000000000000000000000* +L4180 00000000000000000000000000000000000000000000* +L4224 00000000000000000000000000000000000000000000* +L4268 00000000000000000000000000000000000000000000* +L4312 11111111111111111111111111111111111111111111* +L4356 11111111111111111111111111111111111111111101* +L4400 00000000000000000000000000000000000000000000* +L4444 00000000000000000000000000000000000000000000* +L4488 00000000000000000000000000000000000000000000* +L4532 00000000000000000000000000000000000000000000* +L4576 00000000000000000000000000000000000000000000* +L4620 00000000000000000000000000000000000000000000* +L4664 00000000000000000000000000000000000000000000* +L4708 00000000000000000000000000000000000000000000* +L4752 00000000000000000000000000000000000000000000* +L4796 00000000000000000000000000000000000000000000* +L4840 00000000000000000000000000000000000000000000* +L4884 11111111111111111111111111111111111111111111* +L4928 11111111111111111111111011111111111111111011* +L4972 00000000000000000000000000000000000000000000* +L5016 00000000000000000000000000000000000000000000* +L5060 00000000000000000000000000000000000000000000* +L5104 00000000000000000000000000000000000000000000* +L5148 00000000000000000000000000000000000000000000* +L5192 00000000000000000000000000000000000000000000* +L5236 00000000000000000000000000000000000000000000* +L5280 00000000000000000000000000000000000000000000* +L5324 00000000000000000000000000000000000000000000* +L5368 11111111111111111111111111111111111111111111* +L5412 11111111111111111111111011111111111111110111* +L5456 00000000000000000000000000000000000000000000* +L5500 00000000000000000000000000000000000000000000* +L5544 00000000000000000000000000000000000000000000* +L5588 00000000000000000000000000000000000000000000* +L5632 00000000000000000000000000000000000000000000* +L5676 00000000000000000000000000000000000000000000* +L5720 00000000000000000000000000000000000000000000* +L5764 00000000000000000000000000000000000000000000* +L5808 01010101111000011111* +C6C0E* +17B8 diff --git a/pld/decoder.pds b/pld/decoder.pds new file mode 100644 index 0000000..341c554 --- /dev/null +++ b/pld/decoder.pds @@ -0,0 +1,273 @@ + +;PALASM Design Description + +;---------------------------------- Declaration Segment ------------ +TITLE DECODER.PDS +PATTERN A +REVISION 1.0 +AUTHOR Walter Fetter Lages +COMPANY UFRGS +DATE 10/10/02 + +CHIP DECODER PAL22V10 + +;---------------------------------- PIN Declarations --------------- +PIN 1 CLOCK ; INPUT +PIN 2..5 A[19..16] ; INPUT +PIN 6 /WR ; INPUT +PIN 7 /RD ; INPUT +PIN 8 D1 ; INPUT +PIN 9 REFPOS ; INPUT +PIN 10 /STROBE ; INPUT +PIN 11 PWM ; INPUT +PIN 12 GND +PIN 13 TRINT ; INPUT +PIN 14 DRVB COMBINATORIAL ; OUTPUT +PIN 15 DRVA COMBINATORIAL ; OUTPUT +PIN 16 /EXTINT COMBINATORIAL ; OUTPUT +PIN 17 /BRAKE REGISTERED ; OUTPUT +PIN 18 PWMEN REGISTERED ; OUTPUT +PIN 19 D0 COMBINATORIAL ; I/O +PIN 20 /EWR COMBINATORIAL ; OUTPUT +PIN 21 /ERD COMBINATORIAL ; OUTPUT +PIN 22 /CSPWM COMBINATORIAL ; OUTPUT +PIN 23 /CSLATCH COMBINATORIAL ; OUTPUT +PIN 24 VCC + + +;----------------------------------- Boolean Equation Segment ------ +EQUATIONS + +EXTINT = TRINT + +CSPWM= STROBE * A[19] * /A[18] * /A[17] * /A[16] +ERD= STROBE * RD * A[19] * /A[18] * /A[17] * A[16] +EWR= STROBE * WR * A[19] * /A[18] * /A[17] * A[16] +CSLATCH= STROBE * WR * A[19] * /A[18] * A[17] * /A[16] + +D0.TRST= STROBE * RD * A[19] * /A[18] * A[17] * /A[16] +D0=REFPOS +PWMEN=D0 + +BRAKE=D1 + +DRVA=PWMEN * /PWM +DRVB=PWMEN * PWM + +;----------------------------------- State Segment ----------------- +STATE + +CLKF = CLOCK + +;----------------------------------- Simulation Segment ------------ +SIMULATION + +SETF /CLOCK + +; TRINT/EXTINT tests + +TRACE_ON TRINT EXTINT +SETF TRINT +CHECK EXTINT +SETF /TRINT +CHECK /EXTINT +TRACE_OFF + +; Address decoding tests + +TRACE_ON A[19..16] /STROBE /RD /WR /CSPWM /ERD /EWR /CSLATCH D0 + +SETF /A[19] /A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 + +SETF /A[19] /A[18] /A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] STROBE /RD /WR +CHECK CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 + +SETF /A[19] /A[18] /A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] STROBE RD /WR ; CSPWM active +CHECK CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] A[16] STROBE RD /WR ; ERD active +CHECK /CSPWM ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] /A[16] STROBE RD /WR REFPOS ; DO driving output +CHECK /CSPWM /ERD /EWR /CSLATCH D0 +SETF A[19] /A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 + +SETF /A[19] /A[18] /A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] STROBE /RD WR +CHECK CSPWM /ERD /EWR /CSLATCH ^D0 ; CSPWM active +SETF A[19] /A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD EWR /CSLATCH ^D0 ; EWR active +SETF A[19] /A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR CSLATCH ^D0 ; CSLATCH active +SETF A[19] /A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /STROBE /RD /WR + +TRACE_OFF + +; REFPOS tests + +TRACE_ON A[19..16] /STROBE /RD /WR /CSPWM /ERD /EWR /CSLATCH D0 REFPOS + +SETF A[19] /A[18] A[17] /A[16] STROBE RD /WR REFPOS +CHECK /CSPWM /ERD /EWR /CSLATCH D0 +SETF A[19] /A[18] A[17] /A[16] STROBE RD /WR /REFPOS +CHECK /CSPWM /ERD /EWR /CSLATCH /D0 +SETF /STROBE /RD /WR + +TRACE_OFF + +; BRAKE/D1 tests + +TRACE_ON CLOCK D1 BRAKE + +SETF D1 +CLOCKF CLOCK +CHECK BRAKE +SETF /D1 +CLOCKF CLOCK +CHECK /BRAKE + +TRACE_OFF + +; PWMEN/D0 tests + +TRACE_ON CLOCK D0 PWMEN + +SETF D0 +CLOCKF CLOCK +CHECK PWMEN +SETF /D0 +CLOCKF CLOCK +CHECK /PWMEN + +TRACE_OFF + +; DRVA/DRVB/PWM tests + +TRACE_ON PWMEN PWM DRVA DRVB + +PRELOAD /PWMEN +SETF /PWM +CHECK /DRVA /DRVB +SETF PWM +CHECK /DRVA /DRVB + +PRELOAD PWMEN +SETF /PWM +CHECK DRVA /DRVB +SETF PWM +CHECK /DRVA DRVB + +TRACE_OFF + +;------------------------------------------------------------------- + + diff --git a/pld/decoder.pin b/pld/decoder.pin new file mode 100644 index 0000000..c7b6c37 --- /dev/null +++ b/pld/decoder.pin @@ -0,0 +1,22 @@ +TITLE: DECODER.PDS +PATTERN: A +REVISION: 1.0 +AUTHOR: Walter Fetter Lages +COMPANY: UFRGS +DATE: 10/10/02 +MACRO: DECODER + PAL22V10 + ÉÍÍÍÍÉ»ÍÍÍÍ» + CLOCK É͹ 1 ȼ 24 ÌÍ» VCC + A[19] É͹ 2 23 ÌÍ» /CSLATCH COM + A[18] É͹ 3 22 ÌÍ» /CSPWM COM + A[17] É͹ 4 21 ÌÍ» /ERD COM + A[16] É͹ 5 20 ÌÍ» /EWR COM + /WR É͹ 6 19 ÌÍ» D0 COM + /RD É͹ 7 18 ÌÍ» PWMEN REG + D1 É͹ 8 17 ÌÍ» /BRAKE REG + REFPOS É͹ 9 16 ÌÍ» /EXTINT COM + /STROBE É͹ 10 15 ÌÍ» DRVA COM + PWM É͹ 11 14 ÌÍ» DRVB COM + GND É͹ 12 13 ÌÍ» TRINT + ÈÍÍÍÍÍÍÍÍÍͼ diff --git a/pld/decoder.psf b/pld/decoder.psf new file mode 100644 index 0000000..0e355e8 --- /dev/null +++ b/pld/decoder.psf @@ -0,0 +1,76 @@ +TITLE 'Actuator Interface Card Decoder ' +DESIGNER 'Walter Fetter Lages ' +DATE 'October, 11 2002 ' + +Description + This is the decoder for the Actuator Interface Card. It' main purpose is to decode the addresses + from TINI and generate the control signals for the chips connected to TINI bus (8254 and HCTL-2016). + However it is also used for other purposes: + 1) generate the driving signals to the mosfet motor driver (maps PWM to DRVA and DRVB) + 2) invert the interrupt request from 8254 (maps TRINT to EXTINT) + 3) generate the driving signal to the mosfet breake driver (latched output contoled by D0) + 4) read the reference position sensor (REFPOS is tri-stated and output to D0) +End_Desc; + +PEEL22CV10A + +CLK pin 1 +A19 Pin 2 +A18 Pin 3 +A17 Pin 4 +A16 Pin 5 +/WR Pin 6 +/RD Pin 7 +D1 Pin 8 +REFPOS Pin 9 +STROBE Pin 10 +PWM Pin 11 +TRINT Pin 13 + + +"I/O CONFIGURATION DECLARATION +"IOC (PIN_NO 'PIN_NAME' POLARITY OUTPUT_TYPE FEEDBACK_TYPE ) + IOC ( 14 'DRVB' Pos OutCom Feed_Pin ) + IOC ( 15 'DRVA' Pos OutCom Feed_Pin ) + IOC ( 16 'EXTINT' Pos OutCom Feed_Pin ) + IOC ( 17 'BRAKE' Pos Reg Feed_Reg ) + IOC ( 18 'PWMEN' Pos OutReg Feed_Reg ) + IOC ( 19 'D0' Pos Com Feed_Pin ) + IOC ( 20 '/EWR' Pos OutCom Feed_Pin ) + IOC ( 21 '/ERD' Pos OutCom Feed_Pin ) + IOC ( 22 '/CSPWM' Pos OutCom Feed_Pin ) + IOC ( 23 'CSLATCH' Pos OutCom Feed_Pin ) + +AR NODE 25 "Global Asynchronous Reset +SP NODE 26 "Global Synchronous Preset + +DEFINE + + +EQUATIONS + +AR = 0; + +SP = 0; + +"All Equations must end with semicolons. +"Internal or External output names appended with extensions: +" 1) .COM for Combinatorial Output +" 2) .D for D-type Registered Output +" 3) .OE for Output Enable Control + +EXTINT=!TRINT + + + + + + + + + + + + + + diff --git a/pld/decoder.trf b/pld/decoder.trf new file mode 100644 index 0000000..c41f247 --- /dev/null +++ b/pld/decoder.trf @@ -0,0 +1,92 @@ +PALASM4 PLDSIM - MARKET RELEASE 1.5 (7-10-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + +PALASM SIMULATION SELECTIVE TRACE LISTING + +Title : DECODER.PDS Author : Walter Fetter Lag +Pattern : A Company : UFRGS +Revision : 1.0 Date : 10/10/02 + +PAL22V10 +Page : 1 + + gg + TRINT HL + EXTINT HL + +PAL22V10 +Page : 2 + + gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + A[19] LLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHHHH + A[18] LLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLL + A[17] LLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHH + A[16] LHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLH +/STROBE HHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +/RD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLHHHHHHHHHHHH +/WR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLL +/CSPWM HHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLHHH +/ERD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHHHH +/EWR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHH +/CSLATCH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLH + D0 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZHZZZZZZZZZZZZZZZZZ + +PAL22V10 +Page : 3 + ggggg + A[19] HHHHH + A[18] HHHHH + A[17] LLHHH + A[16] LHLHH +/STROBE LLLLH +/RD HHHHH +/WR LLLLH +/CSPWM HHHHH +/ERD HHHHH +/EWR HHHHH +/CSLATCH HHHHH + D0 ZZZZZ + +PAL22V10 +Page : 4 + + ggg + A[19] HHH + A[18] LLL + A[17] HHH + A[16] LLL +/STROBE LLH +/RD LLH +/WR HHH +/CSPWM HHH +/ERD HHH +/EWR HHH +/CSLATCH HHH + D0 HLZ + REFPOS HLL + +PAL22V10 +Page : 5 + + gc gc + CLOCK LHHLLHHL + D1 HHHHLLLL + BRAKE LLHHHHLL + +PAL22V10 +Page : 6 + + gc gc + CLOCK LHHLLHHL + D0 HHHHLLLL + PWMEN XXHHHHLL + +PAL22V10 +Page : 7 + + pggpgg + PWMEN LLLHHH + PWM LLHHLH + DRVA LLLLHL + DRVB LLLLLH + diff --git a/pld/decoder.wdh b/pld/decoder.wdh new file mode 100644 index 0000000..829eaa7 --- /dev/null +++ b/pld/decoder.wdh @@ -0,0 +1,92 @@ + gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + CLOCK ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + A[19] ¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄ + ÀÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ + A[18] ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ Ú + ÀÄÄÄÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ + A[17] ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ + ÀÄÄÄÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ À + A[16] ¿ Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿ + ÀÄÄÄÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀ +/WR ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄ +/RD ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄ + ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + D1 ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + REFPOS ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ +/STROBE ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + ÀÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + PWM ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + TRINT ¿Ú¿ + ÀÙÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + DRVB ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + DRVA ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +/EXTINT Ú¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + ÙÀÙ +/BRAKE ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + Ù + PWMEN ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + D0 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZÚZZZZZZZZZZZZZZ + Ù +/EWR ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + Ù +/ERD ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + Ù ÀÙ +/CSPWM ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ + Ù ÀÙ ÀÙ À +/CSLATCH ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + Ù + +ggggggggc gc gc gc pggpgg + ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ +ÄÄÄÄÄÄÄÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÄÄÄÄÄ +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +ÄÙ +Ú¿ÚÄ¿ +ÙÀÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +ÄÄÄÙ +ÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + ÀÄÙ + ÚÄÄÄ¿ +ÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +ÄÄÄÄÄ¿ + ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + Ú¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +ÄÄÄÙÀÄÙ + ÚÄ¿Ú +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÙ + +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + Ú +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + ÚÄÄÄ¿ Ú¿ +ÄÄÄÄÄÄÄÄÄXXXXXXXXÙ ÀÄÄÄÄÄÙÀ +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +ÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + ÀÄÄÄÙ + ÚÄÄÄ¿ ÚÄÄ +ÄÄÄÄÄÄÄÄÄXXXXXXXXÙ ÀÄÄÄÄÙ +ZZZZÄ¿ ÚÄÄÄ¿ + ÀZZZZZZZZZÙ ÀÄÄÄÄÄÄÄÄÄ +¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +ÀÙ +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + +ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ +Ù +Ä¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ + ÀÙ + diff --git a/pld/decoder.wdt b/pld/decoder.wdt new file mode 100644 index 0000000..048269d --- /dev/null +++ b/pld/decoder.wdt @@ -0,0 +1,92 @@ + gg#gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + TRINT Ú¿# + ÙÀ# Z + EXTINT Ú¿# Ú + ÙÀ# Ù + A[19] #¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄ#Ä + #ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ # + A[18] #¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ ÚÄÄÄ¿ #Ú + #ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄÙ ÀÄÄÄ#Ù + A[17] #¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ#Ä + #ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ # + A[16] #¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú¿Ú#¿ + #ÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙÀÙ#À +/STROBE #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ # + #Ù ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ#Ä +/RD #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄ#¿ + #Ù ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ #À +/WR #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ #Ú + #Ù ÀÄÄÄÄÄÄÄÄÄÄÄ#Ù +/CSPWM #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ#Ä + #Ù ÀÙ ÀÙ # +/ERD #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ#Ä + #Ù ÀÙ # +/EWR #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ#Ä + #Ù # +/CSLATCH #ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ#Ä + #Ù # + D0 #ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZÚZZZZZZZZZZZZZ#Ä + # Ù # + REFPOS #Ú + #Ù + CLOCK + + D1 + + BRAKE + + PWMEN + + PWM + + DRVA + + DRVB + + +ggg#ggg#gc gc #gc gc #pggpgg + # # # # +ZZZ# # # # +ÄÄÄ# # # # + # # # # +ÄÄ# # # + # # # +ÄÄ# # # + # # # +ÄÄ# # # + # # # + # # # +ÄÄ# # # + Ú# # # +ÄÙ# # # + Ú# # # +ÄÙ# # # +ÄÄ# # # + # # # +ÄÄ# # # + # # # +ÄÄ# # # + # # # +ÄÄ# # # + # # # +ÄÄ# # # + # # # +¿ # #ÚÄÄÄ¿ # +ÀZ# #Ù ÀÄÄÄ# +¿ # # # +ÀÄ# # # + #¿ÚÄ¿ ÚÄ¿# ÚÄ¿ ÚÄ¿# + #ÀÙ ÀÄÙ À#ÄÙ ÀÄÙ À# + #ÚÄÄÄ¿ # # + #Ù ÀÄÄÄ# # + #¿ ÚÄÄÄ¿ # # + #ÀÄÙ ÀÄ# # + #XXÚÄÄÄ¿ # ÚÄÄ + # Ù ÀÄ#ÄÄÄÙ + #¿ ÚÄ¿Ú + #ÀÄÙ ÀÙ + #¿ Ú¿ + #ÀÄÄÄÙÀ + #¿ Ú + #ÀÄÄÄÄÙ + diff --git a/pld/decoder.xpt b/pld/decoder.xpt new file mode 100644 index 0000000..be6aba2 --- /dev/null +++ b/pld/decoder.xpt @@ -0,0 +1,172 @@ + +PALASM4 PAL ASSEMBLER - MARKET RELEASE 1.5a (8-20-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + + +TITLE :DECODER.PDS AUTHOR :Walter Fetter Lages +PATTERN :A COMPANY:UFRGS +REVISION:1.0 DATE :10/10/02 + +PAL22V10 +DECODER + + 11 1111 1111 2222 2222 2233 3333 3333 4444 + 0123 4567 8901 2345 6789 0123 4567 8901 2345 6789 0123 + +0 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +1 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +2 ---- X--- -X-- X--- -X-- -X-- ---- ---- ---- -X-- ---- +3 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +4 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +5 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +6 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +7 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +8 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +9 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +10 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +11 ---- X--- -X-- -X-- -X-- ---- ---- ---- ---- -X-- ---- +12 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +13 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +14 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +15 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +16 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +17 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +18 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +19 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +20 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +21 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +22 ---- X--- -X-- -X-- X--- ---- -X-- ---- ---- -X-- ---- +23 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +24 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +25 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +26 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +27 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +28 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +29 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +30 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +31 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +32 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +33 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +34 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +35 ---- X--- -X-- -X-- X--- -X-- ---- ---- ---- -X-- ---- +36 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +37 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +38 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +39 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +40 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +41 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +42 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +43 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +44 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +45 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +46 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +47 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +48 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +49 ---- X--- -X-- X--- -X-- ---- -X-- ---- ---- -X-- ---- +50 ---- ---- ---- ---- ---- ---- ---- ---- X--- ---- ---- +51 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +52 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +53 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +54 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +55 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +56 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +57 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +58 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +59 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +60 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +61 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +62 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +63 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +64 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +65 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +66 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +67 ---- ---- ---- ---- --X- ---- ---- ---- ---- ---- ---- +68 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +69 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +70 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +71 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +72 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +73 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +74 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +75 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +76 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +77 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +78 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +79 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +80 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +81 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +82 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +83 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +84 ---- ---- ---- ---- ---- ---- ---- X--- ---- ---- ---- +85 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +86 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +87 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +88 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +89 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +90 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +91 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +92 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +93 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +94 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +95 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +96 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +97 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +98 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +99 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --X- +100 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +101 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +102 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +103 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +104 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +105 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +106 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +107 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +108 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +109 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +110 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +111 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +112 ---- ---- ---- ---- ---- ---X ---- ---- ---- ---- -X-- +113 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +114 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +115 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +116 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +117 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +118 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +119 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +120 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +121 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +122 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +123 ---- ---- ---- ---- ---- ---X ---- ---- ---- ---- X--- +124 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +125 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +126 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +127 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +128 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +129 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +130 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +131 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + + SUMMARY + ------- + + OUTPUT PINS: 1111112222 + 4567890123 + POLARITY FUSES: --XX--XXXX + + OUTPUT PINS: 1111112222 + 4567890123 + REG BYPASS FUSES: ---XX----- + + TOTAL FUSES BLOWN = 855 + diff --git a/pld/decoder1.hst b/pld/decoder1.hst new file mode 100644 index 0000000..c320c1f --- /dev/null +++ b/pld/decoder1.hst @@ -0,0 +1,65 @@ +PALASM4 PLDSIM - MARKET RELEASE 1.5 (7-10-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + +PALASM SIMULATION HISTORY LISTING + +Title : DECODER.PDS Author : Walter Fetter Lag +Pattern : A Company : UFRGS +Revision : 1.0 Date : 10/10/02 + +PAL22V10 +Page : 1 + gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + CLOCK LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + A[19] LLLLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHH + A[18] LLLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLL + A[17] LLLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLL + A[16] LLLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLH +/WR LLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLL +/RD LLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLHHHHHHHHHH + D1 LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + REFPOS LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHHHHHHHHHHHHHHHH +/STROBE LLHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + PWM LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + GND LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + TRINT HLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + DRVB LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + DRVA LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +/EXTINT LHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/BRAKE HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + PWMEN LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + D0 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZHZZZZZZZZZZZZZZZ +/EWR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHL +/ERD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHH +/CSPWM HHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLH +/CSLATCH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + VCC HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + +PAL22V10 +Page : 2 + gggggggggggc gc gc gc gc ggc g + CLOCK LLLLLLLLLLLHHLLHHLLHHLLHHLLHHLLLHHLL + A[19] HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + A[18] LLHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + A[17] HHLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + A[16] LHLHLHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +/WR LLLLLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/RD HHHHHHHLLHHHHHHHHHHHHHHHHHHHHHHHHHHH + D1 LLLLLLLLLLHHHHHHHHLLLLLLLLLLLLLLLLLL + REFPOS HHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLL +/STROBE LLLLLLHLLHHHHHHHHHHHHHHHHHHHHHHHHHHH + PWM LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHLLLLH + GND LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + TRINT LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL + DRVB LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLH + DRVA LLLLLLLLLLLLLLLLLLLLHHHHLLLLLLLLLHHL +/EXTINT HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/BRAKE HHHHHHHHHHHHLLLLHHHHHHHHHHHHHHHHHHHH + PWMEN LLLLLLLLLLLLLLLLLLLLHHHHLLLLLLLLLHHH + D0 ZZZZZZZHLZHHHHLLLLHHHHLLLLLLLLLHHHHH +/EWR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/ERD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/CSPWM HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH +/CSLATCH LHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + VCC HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + diff --git a/pld/decoder1.jdc b/pld/decoder1.jdc new file mode 100644 index 0000000..e8fbc03 --- /dev/null +++ b/pld/decoder1.jdc @@ -0,0 +1,236 @@ + +PALASM4 PAL ASSEMBLER - MARKET RELEASE 1.5a (8-20-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + + +TITLE :DECODER.PDS AUTHOR :Walter Fetter Lages +PATTERN :A COMPANY:UFRGS +REVISION:1.0 DATE :10/10/02 + + +PAL22V10 +DECODER* +QV0084* +QP24* +QF5828* +G0*F0* +L0000 00000000000000000000000000000000000000000000* +L0044 11111111111111111111111111111111111111111111* +L0088 11110111101101111011101111111111111110111111* +L0132 00000000000000000000000000000000000000000000* +L0176 00000000000000000000000000000000000000000000* +L0220 00000000000000000000000000000000000000000000* +L0264 00000000000000000000000000000000000000000000* +L0308 00000000000000000000000000000000000000000000* +L0352 00000000000000000000000000000000000000000000* +L0396 00000000000000000000000000000000000000000000* +L0440 11111111111111111111111111111111111111111111* +L0484 11110111101110111011111111111111111110111111* +L0528 00000000000000000000000000000000000000000000* +L0572 00000000000000000000000000000000000000000000* +L0616 00000000000000000000000000000000000000000000* +L0660 00000000000000000000000000000000000000000000* +L0704 00000000000000000000000000000000000000000000* +L0748 00000000000000000000000000000000000000000000* +L0792 00000000000000000000000000000000000000000000* +L0836 00000000000000000000000000000000000000000000* +L0880 00000000000000000000000000000000000000000000* +L0924 11111111111111111111111111111111111111111111* +L0968 11110111101110110111111110111111111110111111* +L1012 00000000000000000000000000000000000000000000* +L1056 00000000000000000000000000000000000000000000* +L1100 00000000000000000000000000000000000000000000* +L1144 00000000000000000000000000000000000000000000* +L1188 00000000000000000000000000000000000000000000* +L1232 00000000000000000000000000000000000000000000* +L1276 00000000000000000000000000000000000000000000* +L1320 00000000000000000000000000000000000000000000* +L1364 00000000000000000000000000000000000000000000* +L1408 00000000000000000000000000000000000000000000* +L1452 00000000000000000000000000000000000000000000* +L1496 11111111111111111111111111111111111111111111* +L1540 11110111101110110111101111111111111110111111* +L1584 00000000000000000000000000000000000000000000* +L1628 00000000000000000000000000000000000000000000* +L1672 00000000000000000000000000000000000000000000* +L1716 00000000000000000000000000000000000000000000* +L1760 00000000000000000000000000000000000000000000* +L1804 00000000000000000000000000000000000000000000* +L1848 00000000000000000000000000000000000000000000* +L1892 00000000000000000000000000000000000000000000* +L1936 00000000000000000000000000000000000000000000* +L1980 00000000000000000000000000000000000000000000* +L2024 00000000000000000000000000000000000000000000* +L2068 00000000000000000000000000000000000000000000* +L2112 00000000000000000000000000000000000000000000* +L2156 11110111101101111011111110111111111110111111* +L2200 11111111111111111111111111111111011111111111* +L2244 00000000000000000000000000000000000000000000* +L2288 00000000000000000000000000000000000000000000* +L2332 00000000000000000000000000000000000000000000* +L2376 00000000000000000000000000000000000000000000* +L2420 00000000000000000000000000000000000000000000* +L2464 00000000000000000000000000000000000000000000* +L2508 00000000000000000000000000000000000000000000* +L2552 00000000000000000000000000000000000000000000* +L2596 00000000000000000000000000000000000000000000* +L2640 00000000000000000000000000000000000000000000* +L2684 00000000000000000000000000000000000000000000* +L2728 00000000000000000000000000000000000000000000* +L2772 00000000000000000000000000000000000000000000* +L2816 00000000000000000000000000000000000000000000* +L2860 00000000000000000000000000000000000000000000* +L2904 11111111111111111111111111111111111111111111* +L2948 11111111111111111101111111111011111111111111* +L2992 11111111111111111111111011110111111111111111* +L3036 00000000000000000000000000000000000000000000* +L3080 00000000000000000000000000000000000000000000* +L3124 00000000000000000000000000000000000000000000* +L3168 00000000000000000000000000000000000000000000* +L3212 00000000000000000000000000000000000000000000* +L3256 00000000000000000000000000000000000000000000* +L3300 00000000000000000000000000000000000000000000* +L3344 00000000000000000000000000000000000000000000* +L3388 00000000000000000000000000000000000000000000* +L3432 00000000000000000000000000000000000000000000* +L3476 00000000000000000000000000000000000000000000* +L3520 00000000000000000000000000000000000000000000* +L3564 00000000000000000000000000000000000000000000* +L3608 00000000000000000000000000000000000000000000* +L3652 11111111111111111111111111111111111111111111* +L3696 11111111111111111101111111110111111111111111* +L3740 11111111111111111111111111101011111111111111* +L3784 00000000000000000000000000000000000000000000* +L3828 00000000000000000000000000000000000000000000* +L3872 00000000000000000000000000000000000000000000* +L3916 00000000000000000000000000000000000000000000* +L3960 00000000000000000000000000000000000000000000* +L4004 00000000000000000000000000000000000000000000* +L4048 00000000000000000000000000000000000000000000* +L4092 00000000000000000000000000000000000000000000* +L4136 00000000000000000000000000000000000000000000* +L4180 00000000000000000000000000000000000000000000* +L4224 00000000000000000000000000000000000000000000* +L4268 00000000000000000000000000000000000000000000* +L4312 11111111111111111111111111111111111111111111* +L4356 11111111111111111111111111111111111111111101* +L4400 00000000000000000000000000000000000000000000* +L4444 00000000000000000000000000000000000000000000* +L4488 00000000000000000000000000000000000000000000* +L4532 00000000000000000000000000000000000000000000* +L4576 00000000000000000000000000000000000000000000* +L4620 00000000000000000000000000000000000000000000* +L4664 00000000000000000000000000000000000000000000* +L4708 00000000000000000000000000000000000000000000* +L4752 00000000000000000000000000000000000000000000* +L4796 00000000000000000000000000000000000000000000* +L4840 00000000000000000000000000000000000000000000* +L4884 11111111111111111111111111111111111111111111* +L4928 11111111111111111111111011111111111111111011* +L4972 00000000000000000000000000000000000000000000* +L5016 00000000000000000000000000000000000000000000* +L5060 00000000000000000000000000000000000000000000* +L5104 00000000000000000000000000000000000000000000* +L5148 00000000000000000000000000000000000000000000* +L5192 00000000000000000000000000000000000000000000* +L5236 00000000000000000000000000000000000000000000* +L5280 00000000000000000000000000000000000000000000* +L5324 00000000000000000000000000000000000000000000* +L5368 11111111111111111111111111111111111111111111* +L5412 11111111111111111111111011111111111111110111* +L5456 00000000000000000000000000000000000000000000* +L5500 00000000000000000000000000000000000000000000* +L5544 00000000000000000000000000000000000000000000* +L5588 00000000000000000000000000000000000000000000* +L5632 00000000000000000000000000000000000000000000* +L5676 00000000000000000000000000000000000000000000* +L5720 00000000000000000000000000000000000000000000* +L5764 00000000000000000000000000000000000000000000* +L5808 01010101111000011111* +X0* +V0001 XXXXXXXXXXXN1LLLHLZHHHHN* +V0002 XXXXXXXXXXXN0LLHHLZHHHHN* +V0003 X000011XX1XN0LLHHLZHHHHN* +V0004 X000111XX1XN0LLHHLZHHHHN* +V0005 X001011XX1XN0LLHHLZHHHHN* +V0006 X001111XX1XN0LLHHLZHHHHN* +V0007 X010011XX1XN0LLHHLZHHHHN* +V0008 X010111XX1XN0LLHHLZHHHHN* +V0009 X011011XX1XN0LLHHLZHHHHN* +V0010 X011111XX1XN0LLHHLZHHHHN* +V0011 X100011XX1XN0LLHHLZHHHHN* +V0012 X100111XX1XN0LLHHLZHHHHN* +V0013 X101011XX1XN0LLHHLZHHHHN* +V0014 X101111XX1XN0LLHHLZHHHHN* +V0015 X110011XX1XN0LLHHLZHHHHN* +V0016 X110111XX1XN0LLHHLZHHHHN* +V0017 X111011XX1XN0LLHHLZHHHHN* +V0018 X111111XX1XN0LLHHLZHHHHN* +V0019 X000011XX0XN0LLHHLZHHHHN* +V0020 X000111XX0XN0LLHHLZHHHHN* +V0021 X001011XX0XN0LLHHLZHHHHN* +V0022 X001111XX0XN0LLHHLZHHHHN* +V0023 X010011XX0XN0LLHHLZHHHHN* +V0024 X010111XX0XN0LLHHLZHHHHN* +V0025 X011011XX0XN0LLHHLZHHHHN* +V0026 X011111XX0XN0LLHHLZHHHHN* +V0027 X100011XX0XN0LLHHLZHHLHN* +V0028 X100111XX0XN0LLHHLZHHHHN* +V0029 X101011XX0XN0LLHHLZHHHHN* +V0030 X101111XX0XN0LLHHLZHHHHN* +V0031 X110011XX0XN0LLHHLZHHHHN* +V0032 X110111XX0XN0LLHHLZHHHHN* +V0033 X111011XX0XN0LLHHLZHHHHN* +V0034 X111111XX0XN0LLHHLZHHHHN* +V0035 X000010XX0XN0LLHHLZHHHHN* +V0036 X000110XX0XN0LLHHLZHHHHN* +V0037 X001010XX0XN0LLHHLZHHHHN* +V0038 X001110XX0XN0LLHHLZHHHHN* +V0039 X010010XX0XN0LLHHLZHHHHN* +V0040 X010110XX0XN0LLHHLZHHHHN* +V0041 X011010XX0XN0LLHHLZHHHHN* +V0042 X011110XX0XN0LLHHLZHHHHN* +V0043 X100010XX0XN0LLHHLZHHLHN* +V0044 X100110XX0XN0LLHHLZHLHHN* +V0045 X101010X10XN0LLHHLHHHHHN* +V0046 X101110X10XN0LLHHLZHHHHN* +V0047 X110010X10XN0LLHHLZHHHHN* +V0048 X110110X10XN0LLHHLZHHHHN* +V0049 X111010X10XN0LLHHLZHHHHN* +V0050 X111110X10XN0LLHHLZHHHHN* +V0051 X000001X10XN0LLHHLZHHHHN* +V0052 X000101X10XN0LLHHLZHHHHN* +V0053 X001001X10XN0LLHHLZHHHHN* +V0054 X001101X10XN0LLHHLZHHHHN* +V0055 X010001X10XN0LLHHLZHHHHN* +V0056 X010101X10XN0LLHHLZHHHHN* +V0057 X011001X10XN0LLHHLZHHHHN* +V0058 X011101X10XN0LLHHLZHHHHN* +V0059 X100001X10XN0LLHHLZHHLHN* +V0060 X100101X10XN0LLHHLZLHHHN* +V0061 X101001X10XN0LLHHLZHHHLN* +V0062 X101101X10XN0LLHHLZHHHHN* +V0063 X110001X10XN0LLHHLZHHHHN* +V0064 X110101X10XN0LLHHLZHHHHN* +V0065 X111001X10XN0LLHHLZHHHHN* +V0066 X111101X10XN0LLHHLZHHHHN* +V0067 X111111X11XN0LLHHLZHHHHN* +V0068 X101010X10XN0LLHHLHHHHHN* +V0069 X101010X00XN0LLHHLLHHHHN* +V0070 X101011X01XN0LLHHLZHHHHN* +V0071 X101011101XN0LLHHL1HHHHN* +V0072 C101011101XN0LLHLL1HHHHN* +V0073 0101011101XN0LLHLL0HHHHN* +V0074 C101011101XN0LLHHL0HHHHN* +V0075 01010110010N0LLHHL1HHHHN* +V0076 C1010110010N0LHHHH1HHHHN* +V0077 01010110010N0LHHHH0HHHHN* +V0078 C1010110010N0LLHHL0HHHHN* +V0079 01010110010N0LLHHL0HHHHN* +V0080 C1010110010N0LLHHL0HHHHN* +V0081 01010110011N0LLHHL0HHHHN* +V0082 01010110010N0LLHHL1HHHHN* +V0083 C1010110010N0LHHHH1HHHHN* +V0084 01010110011N0HLHHH1HHHHN* +C75EB* +A8A0 diff --git a/pld/decoder1.jed b/pld/decoder1.jed new file mode 100644 index 0000000..1c92526 --- /dev/null +++ b/pld/decoder1.jed @@ -0,0 +1,150 @@ + +PALASM4 PAL ASSEMBLER - MARKET RELEASE 1.5a (8-20-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + + +TITLE :DECODER.PDS AUTHOR :Walter Fetter Lages +PATTERN :A COMPANY:UFRGS +REVISION:1.0 DATE :10/10/02 + + +PAL22V10 +DECODER* +QP24* +QF5828* +G0*F0* +L0000 00000000000000000000000000000000000000000000* +L0044 11111111111111111111111111111111111111111111* +L0088 11110111101101111011101111111111111110111111* +L0132 00000000000000000000000000000000000000000000* +L0176 00000000000000000000000000000000000000000000* +L0220 00000000000000000000000000000000000000000000* +L0264 00000000000000000000000000000000000000000000* +L0308 00000000000000000000000000000000000000000000* +L0352 00000000000000000000000000000000000000000000* +L0396 00000000000000000000000000000000000000000000* +L0440 11111111111111111111111111111111111111111111* +L0484 11110111101110111011111111111111111110111111* +L0528 00000000000000000000000000000000000000000000* +L0572 00000000000000000000000000000000000000000000* +L0616 00000000000000000000000000000000000000000000* +L0660 00000000000000000000000000000000000000000000* +L0704 00000000000000000000000000000000000000000000* +L0748 00000000000000000000000000000000000000000000* +L0792 00000000000000000000000000000000000000000000* +L0836 00000000000000000000000000000000000000000000* +L0880 00000000000000000000000000000000000000000000* +L0924 11111111111111111111111111111111111111111111* +L0968 11110111101110110111111110111111111110111111* +L1012 00000000000000000000000000000000000000000000* +L1056 00000000000000000000000000000000000000000000* +L1100 00000000000000000000000000000000000000000000* +L1144 00000000000000000000000000000000000000000000* +L1188 00000000000000000000000000000000000000000000* +L1232 00000000000000000000000000000000000000000000* +L1276 00000000000000000000000000000000000000000000* +L1320 00000000000000000000000000000000000000000000* +L1364 00000000000000000000000000000000000000000000* +L1408 00000000000000000000000000000000000000000000* +L1452 00000000000000000000000000000000000000000000* +L1496 11111111111111111111111111111111111111111111* +L1540 11110111101110110111101111111111111110111111* +L1584 00000000000000000000000000000000000000000000* +L1628 00000000000000000000000000000000000000000000* +L1672 00000000000000000000000000000000000000000000* +L1716 00000000000000000000000000000000000000000000* +L1760 00000000000000000000000000000000000000000000* +L1804 00000000000000000000000000000000000000000000* +L1848 00000000000000000000000000000000000000000000* +L1892 00000000000000000000000000000000000000000000* +L1936 00000000000000000000000000000000000000000000* +L1980 00000000000000000000000000000000000000000000* +L2024 00000000000000000000000000000000000000000000* +L2068 00000000000000000000000000000000000000000000* +L2112 00000000000000000000000000000000000000000000* +L2156 11110111101101111011111110111111111110111111* +L2200 11111111111111111111111111111111011111111111* +L2244 00000000000000000000000000000000000000000000* +L2288 00000000000000000000000000000000000000000000* +L2332 00000000000000000000000000000000000000000000* +L2376 00000000000000000000000000000000000000000000* +L2420 00000000000000000000000000000000000000000000* +L2464 00000000000000000000000000000000000000000000* +L2508 00000000000000000000000000000000000000000000* +L2552 00000000000000000000000000000000000000000000* +L2596 00000000000000000000000000000000000000000000* +L2640 00000000000000000000000000000000000000000000* +L2684 00000000000000000000000000000000000000000000* +L2728 00000000000000000000000000000000000000000000* +L2772 00000000000000000000000000000000000000000000* +L2816 00000000000000000000000000000000000000000000* +L2860 00000000000000000000000000000000000000000000* +L2904 11111111111111111111111111111111111111111111* +L2948 11111111111111111101111111111011111111111111* +L2992 11111111111111111111111011110111111111111111* +L3036 00000000000000000000000000000000000000000000* +L3080 00000000000000000000000000000000000000000000* +L3124 00000000000000000000000000000000000000000000* +L3168 00000000000000000000000000000000000000000000* +L3212 00000000000000000000000000000000000000000000* +L3256 00000000000000000000000000000000000000000000* +L3300 00000000000000000000000000000000000000000000* +L3344 00000000000000000000000000000000000000000000* +L3388 00000000000000000000000000000000000000000000* +L3432 00000000000000000000000000000000000000000000* +L3476 00000000000000000000000000000000000000000000* +L3520 00000000000000000000000000000000000000000000* +L3564 00000000000000000000000000000000000000000000* +L3608 00000000000000000000000000000000000000000000* +L3652 11111111111111111111111111111111111111111111* +L3696 11111111111111111101111111110111111111111111* +L3740 11111111111111111111111111101011111111111111* +L3784 00000000000000000000000000000000000000000000* +L3828 00000000000000000000000000000000000000000000* +L3872 00000000000000000000000000000000000000000000* +L3916 00000000000000000000000000000000000000000000* +L3960 00000000000000000000000000000000000000000000* +L4004 00000000000000000000000000000000000000000000* +L4048 00000000000000000000000000000000000000000000* +L4092 00000000000000000000000000000000000000000000* +L4136 00000000000000000000000000000000000000000000* +L4180 00000000000000000000000000000000000000000000* +L4224 00000000000000000000000000000000000000000000* +L4268 00000000000000000000000000000000000000000000* +L4312 11111111111111111111111111111111111111111111* +L4356 11111111111111111111111111111111111111111101* +L4400 00000000000000000000000000000000000000000000* +L4444 00000000000000000000000000000000000000000000* +L4488 00000000000000000000000000000000000000000000* +L4532 00000000000000000000000000000000000000000000* +L4576 00000000000000000000000000000000000000000000* +L4620 00000000000000000000000000000000000000000000* +L4664 00000000000000000000000000000000000000000000* +L4708 00000000000000000000000000000000000000000000* +L4752 00000000000000000000000000000000000000000000* +L4796 00000000000000000000000000000000000000000000* +L4840 00000000000000000000000000000000000000000000* +L4884 11111111111111111111111111111111111111111111* +L4928 11111111111111111111111011111111111111111011* +L4972 00000000000000000000000000000000000000000000* +L5016 00000000000000000000000000000000000000000000* +L5060 00000000000000000000000000000000000000000000* +L5104 00000000000000000000000000000000000000000000* +L5148 00000000000000000000000000000000000000000000* +L5192 00000000000000000000000000000000000000000000* +L5236 00000000000000000000000000000000000000000000* +L5280 00000000000000000000000000000000000000000000* +L5324 00000000000000000000000000000000000000000000* +L5368 11111111111111111111111111111111111111111111* +L5412 11111111111111111111111011111111111111110111* +L5456 00000000000000000000000000000000000000000000* +L5500 00000000000000000000000000000000000000000000* +L5544 00000000000000000000000000000000000000000000* +L5588 00000000000000000000000000000000000000000000* +L5632 00000000000000000000000000000000000000000000* +L5676 00000000000000000000000000000000000000000000* +L5720 00000000000000000000000000000000000000000000* +L5764 00000000000000000000000000000000000000000000* +L5808 01010101111000011111* +C75EB* +180F diff --git a/pld/decoder1.pds b/pld/decoder1.pds new file mode 100644 index 0000000..0a1596a --- /dev/null +++ b/pld/decoder1.pds @@ -0,0 +1,266 @@ + +;PALASM Design Description + +;---------------------------------- Declaration Segment ------------ +TITLE DECODER.PDS +PATTERN A +REVISION 1.0 +AUTHOR Walter Fetter Lages +COMPANY UFRGS +DATE 10/10/02 + +CHIP DECODER PAL22V10 + +;---------------------------------- PIN Declarations --------------- +PIN 1 CLOCK ; INPUT +PIN 2..5 A[19..16] ; INPUT +PIN 6 /WR ; INPUT +PIN 7 /RD ; INPUT +PIN 8 D1 ; INPUT +PIN 9 REFPOS ; INPUT +PIN 10 /STROBE ; INPUT +PIN 11 PWM ; INPUT +PIN 12 GND +PIN 13 TRINT ; INPUT +PIN 14 DRVB COMBINATORIAL ; OUTPUT +PIN 15 DRVA COMBINATORIAL ; OUTPUT +PIN 16 /EXTINT COMBINATORIAL ; OUTPUT +PIN 17 /BRAKE REGISTERED ; OUTPUT +PIN 18 PWMEN REGISTERED ; OUTPUT +PIN 19 D0 COMBINATORIAL ; I/O +PIN 20 /EWR COMBINATORIAL ; OUTPUT +PIN 21 /ERD COMBINATORIAL ; OUTPUT +PIN 22 /CSPWM COMBINATORIAL ; OUTPUT +PIN 23 /CSLATCH COMBINATORIAL ; OUTPUT +PIN 24 VCC + + +;----------------------------------- Boolean Equation Segment ------ +EQUATIONS + +EXTINT = TRINT + +CSPWM= STROBE * A[19] * /A[18] * /A[17] * /A[16] +ERD= STROBE * RD * A[19] * /A[18] * /A[17] * A[16] +EWR= STROBE * WR * A[19] * /A[18] * /A[17] * A[16] +CSLATCH= STROBE * WR * A[19] * /A[18] * A[17] * /A[16] + +D0.TRST= STROBE * RD * A[19] * /A[18] * A[17] * /A[16] +D0=REFPOS + +PWMEN=D0 * /D1 + PWMEN * D1 + +BRAKE=D0 * D1 + BRAKE * /D1 + +DRVA=PWMEN * /PWM +DRVB=PWMEN * PWM + +;----------------------------------- State Segment ----------------- +STATE + +CLKF = CLOCK + +;----------------------------------- Simulation Segment ------------ +SIMULATION + +; TRINT/EXTINT tests + +TRACE_ON TRINT EXTINT +SETF TRINT +CHECK EXTINT +SETF /TRINT +CHECK /EXTINT +TRACE_OFF + +; Address decoding tests + +TRACE_ON A[19..16] /STROBE /RD /WR /CSPWM /ERD /EWR /CSLATCH D0 + +SETF /A[19] /A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] /STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 + +SETF /A[19] /A[18] /A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] STROBE /RD /WR +CHECK CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] STROBE /RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 + +SETF /A[19] /A[18] /A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] STROBE RD /WR ; CSPWM active +CHECK CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] A[16] STROBE RD /WR ; ERD active +CHECK /CSPWM ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] A[17] /A[16] STROBE RD /WR REFPOS ; DO driving output +CHECK /CSPWM /ERD /EWR /CSLATCH D0 +SETF A[19] /A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] STROBE RD /WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 + +SETF /A[19] /A[18] /A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] /A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /A[19] A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] /A[18] /A[17] /A[16] STROBE /RD WR +CHECK CSPWM /ERD /EWR /CSLATCH ^D0 ; CSPWM active +SETF A[19] /A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD EWR /CSLATCH ^D0 ; EWR active +SETF A[19] /A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR CSLATCH ^D0 ; CSLATCH active +SETF A[19] /A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] /A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] /A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF A[19] A[18] A[17] A[16] STROBE /RD WR +CHECK /CSPWM /ERD /EWR /CSLATCH ^D0 +SETF /STROBE /RD /WR + +TRACE_OFF + +; REFPOS tests + +TRACE_ON A[19..16] /STROBE /RD /WR /CSPWM /ERD /EWR /CSLATCH D0 REFPOS + +SETF A[19] /A[18] A[17] /A[16] STROBE RD /WR REFPOS +CHECK /CSPWM /ERD /EWR /CSLATCH D0 +SETF A[19] /A[18] A[17] /A[16] STROBE RD /WR /REFPOS +CHECK /CSPWM /ERD /EWR /CSLATCH /D0 +SETF /STROBE /RD /WR + +TRACE_OFF + +; BRAKE PWMEN tests + +TRACE_ON CLOCK D0 D1 BRAKE PWMEN + +SETF D0 D1 +CLOCKF CLOCK +CHECK BRAKE /PWMEN +SETF /D0 D1 +CLOCKF CLOCK +CHECK /BRAKE /PWMEN + +SETF D0 /D1 /PWM +CLOCKF CLOCK +CHECK /BRAKE PWMEN DRVA /DRVB +SETF /D0 /D1 /PWM +CLOCKF CLOCK +CHECK /BRAKE /PWMEN /DRVA /DRVB + +TRACE_OFF + +; DRVA/DRVB/PWM tests + +TRACE_ON PWMEN PWM DRVA DRVB + +SETF /PWM /D1 /D0 +CLOCKF CLOCK +CHECK /DRVA /DRVB /PWMEN +SETF PWM +CHECK /DRVA /DRVB /PWMEN + +SETF /PWM /D1 D0 +CLOCKF CLOCK +CHECK DRVA /DRVB PWMEN +SETF PWM +CHECK /DRVA DRVB PWMEN + +TRACE_OFF + +;------------------------------------------------------------------- + + diff --git a/pld/decoder1.trf b/pld/decoder1.trf new file mode 100644 index 0000000..ef8c3cb --- /dev/null +++ b/pld/decoder1.trf @@ -0,0 +1,86 @@ +PALASM4 PLDSIM - MARKET RELEASE 1.5 (7-10-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + +PALASM SIMULATION SELECTIVE TRACE LISTING + +Title : DECODER.PDS Author : Walter Fetter Lag +Pattern : A Company : UFRGS +Revision : 1.0 Date : 10/10/02 + +PAL22V10 +Page : 1 + + gg + TRINT HL + EXTINT HL + +PAL22V10 +Page : 2 + + gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg + A[19] LLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHHHHHHHHLLLLLLLLHHHH + A[18] LLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLLHHHHLLLL + A[17] LLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHHLLHH + A[16] LHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLHLH +/STROBE HHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +/RD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLLHHHHHHHHHHHH +/WR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLLLLLLLLLLLL +/CSPWM HHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHLHHH +/ERD HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHHHHHHHHHHHHHHHHHH +/EWR HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLHH +/CSLATCH HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHLH + D0 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZHZZZZZZZZZZZZZZZZZ + +PAL22V10 +Page : 3 + ggggg + A[19] HHHHH + A[18] HHHHH + A[17] LLHHH + A[16] LHLHH +/STROBE LLLLH +/RD HHHHH +/WR LLLLH +/CSPWM HHHHH +/ERD HHHHH +/EWR HHHHH +/CSLATCH HHHHH + D0 ZZZZZ + +PAL22V10 +Page : 4 + + ggg + A[19] HHH + A[18] LLL + A[17] HHH + A[16] LLL +/STROBE LLH +/RD LLH +/WR HHH +/CSPWM HHH +/ERD HHH +/EWR HHH +/CSLATCH HHH + D0 HLZ + REFPOS HLL + +PAL22V10 +Page : 5 + + gc gc gc gc + CLOCK LHHLLHHLLHHLLHHL + D0 HHHHLLLLHHHHLLLL + D1 HHHHHHHHLLLLLLLL + BRAKE LLHHHHLLLLLLLLLL + PWMEN LLLLLLLLLLHHHHLL + +PAL22V10 +Page : 6 + + gc ggc g + PWMEN LLLLLLLHHH + PWM LLLLHLLLLH + DRVA LLLLLLLHHL + DRVB LLLLLLLLLH + diff --git a/pld/decoder1.xpt b/pld/decoder1.xpt new file mode 100644 index 0000000..a75776d --- /dev/null +++ b/pld/decoder1.xpt @@ -0,0 +1,172 @@ + +PALASM4 PAL ASSEMBLER - MARKET RELEASE 1.5a (8-20-92) + (C) - COPYRIGHT ADVANCED MICRO DEVICES INC., 1992 + + +TITLE :DECODER.PDS AUTHOR :Walter Fetter Lages +PATTERN :A COMPANY:UFRGS +REVISION:1.0 DATE :10/10/02 + +PAL22V10 +DECODER + + 11 1111 1111 2222 2222 2233 3333 3333 4444 + 0123 4567 8901 2345 6789 0123 4567 8901 2345 6789 0123 + +0 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +1 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +2 ---- X--- -X-- X--- -X-- -X-- ---- ---- ---- -X-- ---- +3 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +4 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +5 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +6 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +7 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +8 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +9 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +10 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +11 ---- X--- -X-- -X-- -X-- ---- ---- ---- ---- -X-- ---- +12 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +13 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +14 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +15 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +16 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +17 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +18 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +19 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +20 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +21 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +22 ---- X--- -X-- -X-- X--- ---- -X-- ---- ---- -X-- ---- +23 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +24 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +25 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +26 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +27 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +28 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +29 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +30 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +31 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +32 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +33 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +34 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +35 ---- X--- -X-- -X-- X--- -X-- ---- ---- ---- -X-- ---- +36 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +37 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +38 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +39 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +40 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +41 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +42 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +43 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +44 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +45 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +46 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +47 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +48 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +49 ---- X--- -X-- X--- -X-- ---- -X-- ---- ---- -X-- ---- +50 ---- ---- ---- ---- ---- ---- ---- ---- X--- ---- ---- +51 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +52 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +53 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +54 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +55 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +56 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +57 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +58 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +59 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +60 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +61 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +62 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +63 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +64 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +65 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +66 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +67 ---- ---- ---- ---- --X- ---- ---- -X-- ---- ---- ---- +68 ---- ---- ---- ---- ---- ---X ---- X--- ---- ---- ---- +69 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +70 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +71 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +72 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +73 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +74 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +75 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +76 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +77 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +78 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +79 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +80 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +81 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +82 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +83 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +84 ---- ---- ---- ---- --X- ---- ---- X--- ---- ---- ---- +85 ---- ---- ---- ---- ---- ---- ---X -X-- ---- ---- ---- +86 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +87 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +88 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +89 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +90 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +91 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +92 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +93 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +94 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +95 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +96 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +97 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +98 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +99 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --X- +100 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +101 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +102 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +103 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +104 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +105 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +106 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +107 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +108 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +109 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +110 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +111 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +112 ---- ---- ---- ---- ---- ---X ---- ---- ---- ---- -X-- +113 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +114 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +115 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +116 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +117 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +118 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +119 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +120 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +121 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +122 ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +123 ---- ---- ---- ---- ---- ---X ---- ---- ---- ---- X--- +124 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +125 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +126 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +127 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +128 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +129 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX +130 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + +131 XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX + + SUMMARY + ------- + + OUTPUT PINS: 1111112222 + 4567890123 + POLARITY FUSES: --XX--XXXX + + OUTPUT PINS: 1111112222 + 4567890123 + REG BYPASS FUSES: ---XX----- + + TOTAL FUSES BLOWN = 937 + diff --git a/pld/palasm2.tre b/pld/palasm2.tre new file mode 100644 index 0000000..a9c4cb9 --- /dev/null +++ b/pld/palasm2.tre @@ -0,0 +1,1852 @@ +decoder1.pds ZNNNNN +1 223 +1 85 DECODER.PDS +1 86 A +1 87 1.0 +1 88 Walter Fetter Lages +1 89 UFRGS +1 90 10/10/02 +-2 -2 +1 60 +2 1 DECODER +2 166 24 +2 1 CLOCK +2 1 A[19] +2 1 A[18] +2 1 A[17] +2 1 A[16] +2 18 +3 1 WR +2 18 +3 1 RD +2 1 D1 +2 1 REFPOS +2 18 +3 1 STROBE +2 1 PWM +2 75 +2 1 TRINT +2 1 DRVB +3 24 +2 1 DRVA +3 24 +2 18 +3 1 EXTINT +4 24 +2 18 +3 1 BRAKE +4 10 +2 1 PWMEN +3 10 +2 1 D0 +3 24 +2 18 +3 1 EWR +4 24 +2 18 +3 1 ERD +4 24 +2 18 +3 1 CSPWM +4 24 +2 18 +3 1 CSLATCH +4 24 +2 74 +2 73 +-3 -3 +3 65 +3 24 +4 1 CSLATCH +4 17 +5 1 STROBE +5 17 +6 1 WR +6 17 +7 1 A[19] +7 17 +8 18 +9 1 A[18] +8 17 +9 1 A[17] +9 18 +10 1 A[16] +3 24 +4 1 CSPWM +4 17 +5 1 STROBE +5 17 +6 1 A[19] +6 17 +7 18 +8 1 A[18] +7 17 +8 18 +9 1 A[17] +8 18 +9 1 A[16] +3 24 +4 1 ERD +4 17 +5 1 STROBE +5 17 +6 1 RD +6 17 +7 1 A[19] +7 17 +8 18 +9 1 A[18] +8 17 +9 18 +10 1 A[17] +9 1 A[16] +3 24 +4 1 EWR +4 17 +5 1 STROBE +5 17 +6 1 WR +6 17 +7 1 A[19] +7 17 +8 18 +9 1 A[18] +8 17 +9 18 +10 1 A[17] +9 1 A[16] +3 24 +4 1 D0 +4 1 REFPOS +3 24 +4 53 +5 1 D0 +4 17 +5 1 STROBE +5 17 +6 1 RD +6 17 +7 1 A[19] +7 17 +8 18 +9 1 A[18] +8 17 +9 1 A[17] +9 18 +10 1 A[16] +3 10 +4 1 PWMEN +4 16 +5 17 +6 1 D0 +6 18 +7 1 D1 +5 17 +6 1 D1 +6 1 PWMEN +3 10 +4 1 BRAKE +4 16 +5 17 +6 1 D0 +6 1 D1 +5 17 +6 18 +7 1 D1 +6 1 BRAKE +3 24 +4 1 EXTINT +4 1 TRINT +3 24 +4 1 DRVA +4 17 +5 1 PWMEN +5 18 +6 1 PWM +3 24 +4 1 DRVB +4 17 +5 1 PWMEN +5 1 PWM +-5 -5 +4 71 +4 45 +5 1 TRINT +5 1 EXTINT +4 48 +5 1 TRINT +4 47 +5 1 EXTINT +4 48 +5 18 +6 1 TRINT +4 47 +5 18 +6 1 EXTINT +4 46 +4 45 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +5 1 REFPOS +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 18 +6 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 1 STROBE +5 18 +6 1 RD +5 1 WR +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 351 +6 1 D0 +4 48 +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 46 +4 45 +5 1 A[19] +5 1 A[18] +5 1 A[17] +5 1 A[16] +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 1 D0 +5 1 REFPOS +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +5 1 REFPOS +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 1 D0 +4 48 +5 1 A[19] +5 18 +6 1 A[18] +5 1 A[17] +5 18 +6 1 A[16] +5 1 STROBE +5 1 RD +5 18 +6 1 WR +5 18 +6 1 REFPOS +4 47 +5 18 +6 1 CSPWM +5 18 +6 1 ERD +5 18 +6 1 EWR +5 18 +6 1 CSLATCH +5 18 +6 1 D0 +4 48 +5 18 +6 1 STROBE +5 18 +6 1 RD +5 18 +6 1 WR +4 46 +4 45 +5 1 CLOCK +5 1 D0 +5 1 D1 +5 1 BRAKE +5 1 PWMEN +4 48 +5 1 D0 +5 1 D1 +4 42 +5 1 CLOCK +4 47 +5 1 BRAKE +5 18 +6 1 PWMEN +4 48 +5 18 +6 1 D0 +5 1 D1 +4 42 +5 1 CLOCK +4 47 +5 18 +6 1 BRAKE +5 18 +6 1 PWMEN +4 48 +5 1 D0 +5 18 +6 1 D1 +5 18 +6 1 PWM +4 42 +5 1 CLOCK +4 47 +5 18 +6 1 BRAKE +5 1 PWMEN +5 1 DRVA +5 18 +6 1 DRVB +4 48 +5 18 +6 1 D0 +5 18 +6 1 D1 +5 18 +6 1 PWM +4 42 +5 1 CLOCK +4 47 +5 18 +6 1 BRAKE +5 18 +6 1 PWMEN +5 18 +6 1 DRVA +5 18 +6 1 DRVB +4 46 +4 45 +5 1 PWMEN +5 1 PWM +5 1 DRVA +5 1 DRVB +4 48 +5 18 +6 1 PWM +5 18 +6 1 D1 +5 18 +6 1 D0 +4 42 +5 1 CLOCK +4 47 +5 18 +6 1 DRVA +5 18 +6 1 DRVB +5 18 +6 1 PWMEN +4 48 +5 1 PWM +4 47 +5 18 +6 1 DRVA +5 18 +6 1 DRVB +5 18 +6 1 PWMEN +4 48 +5 18 +6 1 PWM +5 18 +6 1 D1 +5 1 D0 +4 42 +5 1 CLOCK +4 47 +5 1 DRVA +5 18 +6 1 DRVB +5 1 PWMEN +4 48 +5 1 PWM +4 47 +5 18 +6 1 DRVA +5 1 DRVB +5 1 PWMEN +4 46 +-6 -6 +-9 -9 -- 2.12.0