From 5f6ae65aa127f012593968b15249e940460546f6 Mon Sep 17 00:00:00 2001 From: Frederic Petrot Date: Tue, 27 Jul 2004 20:47:17 +0000 Subject: [PATCH] Adding yet an other design example, in French since I'm feeling lazy on this translation. --- .../alliance-examples/tuner/README | 12 + .../alliance-examples/tuner/build_tuner | 153 ++++++ .../alliance-examples/tuner/circuit.c | 46 ++ .../alliance-examples/tuner/core.c | 50 ++ .../alliance-examples/tuner/fake05.dreal | 23 + .../alliance-examples/tuner/fake05.rds | 261 +++++++++ .../alliance-examples/tuner/padreal.cif | 501 ++++++++++++++++++ .../alliance-examples/tuner/padreal.gds | Bin 0 -> 37234 bytes .../alliance-examples/tuner/tuner-fr.pdf | Bin 0 -> 125238 bytes .../alliance-examples/tuner/tuner.ioc | 33 ++ .../alliance-examples/tuner/tuner.rin | 4 + .../alliance-examples/tuner/tuner.vbe | 286 ++++++++++ .../alliance-examples/tuner/tuner_io.c | 33 ++ 13 files changed, 1402 insertions(+) create mode 100644 alliance/src/documentation/alliance-examples/tuner/README create mode 100755 alliance/src/documentation/alliance-examples/tuner/build_tuner create mode 100644 alliance/src/documentation/alliance-examples/tuner/circuit.c create mode 100644 alliance/src/documentation/alliance-examples/tuner/core.c create mode 100644 alliance/src/documentation/alliance-examples/tuner/fake05.dreal create mode 100644 alliance/src/documentation/alliance-examples/tuner/fake05.rds create mode 100644 alliance/src/documentation/alliance-examples/tuner/padreal.cif create mode 100644 alliance/src/documentation/alliance-examples/tuner/padreal.gds create mode 100644 alliance/src/documentation/alliance-examples/tuner/tuner-fr.pdf create mode 100644 alliance/src/documentation/alliance-examples/tuner/tuner.ioc create mode 100644 alliance/src/documentation/alliance-examples/tuner/tuner.rin create mode 100644 alliance/src/documentation/alliance-examples/tuner/tuner.vbe create mode 100644 alliance/src/documentation/alliance-examples/tuner/tuner_io.c diff --git a/alliance/src/documentation/alliance-examples/tuner/README b/alliance/src/documentation/alliance-examples/tuner/README new file mode 100644 index 00000000..ec5ccc2c --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/README @@ -0,0 +1,12 @@ +This directory contains a small design example done using Alliance. +It is in French, but that's life. +The example starts from a behavior and ends up in a layout in a smooth +(too smooth to be honest) manner. +All files in this directory are GPLed, even if not marked as such, and +all have been authored by me, which is not so bad (I've even seen worse) + +A complete run is done using ./build_tuner, but I would advise to +copy/paste from this file to understand what's going on. + +Have fun, +Frédéric Pétrot, Tue Jul 27 22:32:17 CEST 2004 diff --git a/alliance/src/documentation/alliance-examples/tuner/build_tuner b/alliance/src/documentation/alliance-examples/tuner/build_tuner new file mode 100755 index 00000000..b9d0aa62 --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/build_tuner @@ -0,0 +1,153 @@ +####################################### +#Author: Frédéric Pétrot +#Unlike most of the work I've done in Alliance, this very example +#is bilingual +#It was done for educational purpose at the well +#known École Polytechnique, and therefore written in French +#I rapidly translated the content to english in case it could +#be useful to someone +########################################################### + +#Construit le projet complet +#Building the entire project. + +export MBK_IN_LO=vst +export MBK_OUT_LO=vst +export MBK_CATA_LIB=$ALLIANCE_TOP/cells/sxlib:$ALLIANCE_TOP/cells/padlib +export RDS_TECHNO_NAME=$ALLIANCE_TOP/etc/cmos.rds + +#Utilisez cet artefact pour commenter une partie du source +#Use this artifact to comment out part of this code, since +#I didn't want to use a Makefile for simplicity +#You ought to in real projects, however :) +if [ "x" = "y" ] ; then +echo -n "" +fi + +#Simulation du comportement +#Simulate the behavior with simple patterns +genpat core +asimut -b tuner core result > /dev/null + +#Optimisation combinatoire +#Multilevel boolean optimization +boom -V -s tuner tuner_o + +#Vérification que le comportement optimisé est +#identique au comportement initial +#Check by simulation that the initial behaviour is identical to the +#optimized one +asimut -b tuner_o core result > /dev/null + +#Vérification formelle de l'équivalence de deux comportements +#Formal verification of the équivalence of two sets of boolean +#equations and registers +proof tuner_o tuner + +#Projection structurelle sur la bibliotheque standard +#Mapping of the behavior on the standard cell library +export MBK_TARGET_LIB=$ALLIANCE_TOP/cells/sxlib +boog -m 0 tuner_o tuner_x + +#Adaptation de la puissance des portes à leur charge +#Gate sizing to adapt the fanout +loon -x 0 -m 0 tuner_x tuner_o + +#Vous pouvez lancer xsch pour voir l'allure de l'ensemble de portes +#Ce n'est pas très utile, mais ca rassure ! +#You may lauch xsch to see the way your netlist looks +#Not really usefully but sometime pretty. +xsch -l tuner_o + +#Vérification que l'interconnexion de portes logiques est +#identique au comportement initial +#Check by simulation that the gate netlist bahaves as the +#initial behaviour +asimut -zd tuner_o core result > /dev/null + +#Reconstruit un comportement à partir des feuilles de la netlist +#Build a behavior by inserting the gate behavior into the netlist +flatbeh tuner_o tuner_f + +#Vérification formelle de l'équivalence de deux comportements +#Formal verification of the équivalence of two sets of boolean +#equations +proof tuner_f tuner + +#Placement des cellules avec position des connecteurs imposée +#Cell placement with forced I/O pin positions +ocp -v -mdl 10 -ring -ioc tuner tuner_o tuner_p + +#Routage des cellules avec 3 niveaux de metal +#Route the block with 3 levels of metal +nero -V -3 -p tuner_p tuner_o tuner_o + +#Visualisation du circuit après placement/routage des cellules +#Look at the circuit after place and route +graal -l tuner_o + +#Vérification que les règles de dessins symboliques n'ont pas +#été violées par le routeur +#Design rule checking to make sure the router did follow them +druc tuner_o + +#Extraction de l'interconnexion de portes à partir des fils +#tirés par le routeur +#Extract the gate netlist after routing +cougar -f tuner_o tuner_x + +#Vérification que les 2 interconnexions de portes sont isomorphes +#Check that the extracted graph is isomorphic to the initial one +lvx vst vst tuner_o tuner_x + +#Ajout logique des plots d'entrées/sortie +#Adding the I/O pads +genlib tuner_io.c + +#Génération des vecteurs de tests pour le circuit complet +#Produces (very few) test vectors for the whole circuit +genpat circuit + +#Verification du circuit complet avec plots +#Check that inserting the pads was done correctly +asimut -zd tuner circuit result > /dev/null + +#Routage du core et des plots +#Core to pad routing +ring tuner circuit + +#Visualisation du circuit après routage du core et des plots +#Look a the circuit +graal -l circuit + +#Vérification que les règles de dessins symboliques n'ont pas +#été violées par le routeur +#Design rule checking to make sure the router didn't fool up with +#layers +druc circuit + +#Verification du travail de ring +#Extraction de la netlist plots/core +#Check was ring has done +#Extract the core to pad routing +cougar circuit + +#Isomorphisme des graphes résultant +#Check for netlist isomorphism +lvx vst vst tuner circuit + +#Transformation vers la pseudo-technologie +#Nous utilisons une pseudo technologie 0.5 micron +#Adapt the symbolic layout to the target technology +#We use a fake 0.5 micron technology +export RDS_IN=cif +export RDS_OUT=cif +export RDS_TECHNO_NAME=fake05.rds +export DREAL_TECHNO_NAME=fake05.dreal +s2r -v circuit + +#Visualisation du resultat +#And give it a look +dreal -l circuit + +#Now, check the layout with your foundry DRC, ... diff --git a/alliance/src/documentation/alliance-examples/tuner/circuit.c b/alliance/src/documentation/alliance-examples/tuner/circuit.c new file mode 100644 index 00000000..a9da96cb --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/circuit.c @@ -0,0 +1,46 @@ +#include +#include + +#define ARRAY_SIZE(x) (sizeof(x)/sizeof(*x)) + +int main(void) +{ +int i, j, samples[] = {190, 191, 192, 193, 379, 380, 381, 382}; +char s[1024]; + + DEF_GENPAT("circuit"); + + /* interface */ + DECLAR("ck", ":1", "B", IN, "", ""); + DECLAR("d", ":1", "B", IN, "", ""); + DECLAR("o", ":1", "B", OUT, "0 to 22", ""); + DECLAR("vddi", ":2", "B", IN, "", ""); + DECLAR("vssi", ":2", "B", IN, "", ""); + DECLAR("vdde", ":2", "B", IN, "", ""); + DECLAR("vsse", ":2", "B", IN, "", ""); + + LABEL("tuner"); + SETTUNIT("ns"); + AFFECT("0", "ck", "0b0"); + AFFECT("0", "d", "0b0"); + AFFECT("0", "vddi", "0b1"); + AFFECT("0", "vssi", "0b0"); + AFFECT("0", "vdde", "0b1"); + AFFECT("0", "vsse", "0b0"); + + for (j = 0; j < ARRAY_SIZE(samples); j++) { + int n = 0; + AFFECT("+10", "ck", "0b1"); n++; + AFFECT("+10", "d", "0b1"); + AFFECT("+0", "ck", "0b0"); + AFFECT("+10", "ck", "0b1"); n++; + AFFECT("+10", "d", "0b0"); + AFFECT("+0", "ck", "0b0"); + + for (i = 0; i < samples[j] - n; i++) { + AFFECT("+10", "ck", "0b1"); + AFFECT("+10", "ck", "0b0"); + } + } + SAV_GENPAT(); +} diff --git a/alliance/src/documentation/alliance-examples/tuner/core.c b/alliance/src/documentation/alliance-examples/tuner/core.c new file mode 100644 index 00000000..ce6e056b --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/core.c @@ -0,0 +1,50 @@ +#include +#include + +#define ARRAY_SIZE(x) (sizeof(x)/sizeof(*x)) + +int main(void) +{ +int i, j, samples[] = {190, 191, 192, 193, 379, 380, 381, 382}; +char s[1024]; + + DEF_GENPAT("core"); + + /* interface */ + DECLAR("ck", ":1", "B", IN, "", ""); + DECLAR("d", ":1", "B", IN, "", ""); + DECLAR("o", ":1", "B", OUT, "0 to 22", ""); + DECLAR("vdd", ":2", "B", IN, "", ""); + DECLAR("vss", ":2", "B", IN, "", ""); +#if 0 + DECLAR("tuner.start", ":2", "B", SIGNAL, "", ""); + DECLAR("tuner.incr_reg", ":2", "X", REGISTER, "14 downto 0", ""); + DECLAR("tuner.test_out", ":2", "B", SIGNAL, "14", ""); + DECLAR("tuner.norm_reg", ":2", "X", REGISTER, "14 downto 0", ""); + DECLAR("tuner.subs_out", ":2", "X", SIGNAL, "8 downto 0", ""); + DECLAR("tuner.deco_reg", ":2", "X", REGISTER, "7 downto 0", ""); +#endif + + LABEL("tuner"); + SETTUNIT("ns"); + AFFECT("0", "ck", "0b0"); + AFFECT("0", "d", "0b0"); + AFFECT("0", "vdd", "0b1"); + AFFECT("0", "vss", "0b0"); + + for (j = 0; j < ARRAY_SIZE(samples); j++) { + int n = 0; + AFFECT("+10", "ck", "0b1"); n++; + AFFECT("+10", "d", "0b1"); + AFFECT("+0", "ck", "0b0"); + AFFECT("+10", "ck", "0b1"); n++; + AFFECT("+10", "d", "0b0"); + AFFECT("+0", "ck", "0b0"); + + for (i = 0; i < samples[j] - n; i++) { + AFFECT("+10", "ck", "0b1"); + AFFECT("+10", "ck", "0b0"); + } + } + SAV_GENPAT(); +} diff --git a/alliance/src/documentation/alliance-examples/tuner/fake05.dreal b/alliance/src/documentation/alliance-examples/tuner/fake05.dreal new file mode 100644 index 00000000..0d2f79f2 --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/fake05.dreal @@ -0,0 +1,23 @@ +DEFINE DREAL_LOWER_GRID_STEP 10 +DEFINE DREAL_LOWER_FIGURE_STEP 0.1 +DEFINE DREAL_LOWER_INSTANCE_STEP 0.1 +DEFINE DREAL_LOWER_CONNECTOR_STEP 0.5 +DEFINE DREAL_LOWER_SEGMENT_STEP 0.7 +DEFINE DREAL_LOWER_REFERENCE_STEP 1.0 +DEFINE DREAL_CURSOR_COLOR_NAME Gray +DEFINE DREAL_CURSOR_SIZE 10 +TABLE DREAL_RDS_LAYER_NAME + RDS_NWELL NTUB tan Black + RDS_PWELL IMPF coral Black + RDS_POLY POL1 red Black + RDS_CONT CONT dark_violet Black + RDS_ALU1 MET1 royal_blue Black + RDS_VIA1 VIA1 deep_sky_blue Black + RDS_ALU2 MET2 cyan Black + RDS_VIA2 VIA2 deep_pink Black + RDS_ALU3 MET3 light_pink Black + RDS_ACTIV DIFF brown Black + RDS_NIMP NPLS forest_green Black + RDS_PIMP PPLS goldenrod Black + RDS_CPAS PADL gray Black +END diff --git a/alliance/src/documentation/alliance-examples/tuner/fake05.rds b/alliance/src/documentation/alliance-examples/tuner/fake05.rds new file mode 100644 index 00000000..8e40a606 --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/fake05.rds @@ -0,0 +1,261 @@ +#Fake 0.5 micron, twin tub technomogy + +DEFINE PHYSICAL_GRID 0.050 + +DEFINE LAMBDA 0.500 + +TABLE MBK_TO_RDS_SEGMENT + + NWELL RDS_NWELL VW 1.550 3.100 0.000 ALL\ + RDS_PWELL VW 1.550 3.100 0.000 ALL + NDIF RDS_NDIF VW 0.250 0.000 0.000 EXT\ + RDS_ACTIV VW 0.250 0.000 0.000 DRC\ + RDS_NIMP VW 0.650 0.800 0.000 DRC + PDIF RDS_PDIF VW 0.250 0.000 0.000 EXT\ + RDS_ACTIV VW 0.250 0.000 0.000 DRC\ + RDS_PIMP VW 0.650 0.800 0.000 DRC\ + RDS_PWELL VW 2.050 3.600 0.000 DRC\ + RDS_NWELL VW 2.050 3.600 0.000 DRC + NTIE RDS_NTIE VW 0.250 0.000 0.000 EXT\ + RDS_ACTIV VW 0.250 0.000 0.000 DRC\ + RDS_NIMP VW 0.650 0.800 0.000 DRC\ + RDS_NWELL VW 2.050 3.600 0.000 DRC\ + RDS_PWELL VW 2.050 3.600 0.000 DRC + PTIE RDS_PTIE VW 0.250 0.000 0.000 EXT\ + RDS_ACTIV VW 0.250 0.000 0.000 DRC\ + RDS_PIMP VW 0.650 0.800 0.000 DRC + NTRANS RDS_NDIF LCW -0.750 0.950 0.050 EXT\ + RDS_NDIF RCW -0.750 0.950 0.050 EXT\ + RDS_POLY VW 0.000 0.100 0.000 ALL\ + RDS_ACTIV VW -0.600 2.000 0.000 DRC\ + RDS_NIMP VW -0.350 2.800 0.000 DRC + PTRANS RDS_PDIF LCW -0.750 0.950 0.050 EXT\ + RDS_PDIF RCW -0.750 0.950 0.050 EXT\ + RDS_POLY VW 0.000 0.100 0.000 ALL\ + RDS_ACTIV VW -0.750 2.000 0.000 DRC\ + RDS_PIMP VW -0.350 2.800 0.000 DRC\ + RDS_NWELL VW 1.050 5.600 0.000 DRC\ + RDS_PWELL VW 1.050 5.600 0.000 DRC + POLY RDS_POLY VW 0.300 0.100 0.000 ALL + CALU1 RDS_ALU1 VW 0.450 0.400 0.000 ALL + ALU1 RDS_ALU1 VW 0.450 0.400 0.000 ALL + CALU2 RDS_ALU2 VW 0.500 0.000 0.000 ALL + ALU2 RDS_ALU2 VW 0.500 0.000 0.000 ALL + ALU3 RDS_ALU3 VW 0.600 0.200 0.000 ALL + CALU3 RDS_ALU3 VW 0.600 0.200 0.000 ALL +END +TABLE MBK_TO_RDS_CONNECTOR + POLY RDS_POLY 0.300 0.100 + ALU1 RDS_ALU1 0.450 0.400 + ALU2 RDS_ALU2 0.500 0.000 + ALU3 RDS_ALU3 0.600 0.200 +END +TABLE MBK_TO_RDS_REFERENCE + REF_REF RDS_REF 0.900 + REF_CON RDS_REF 0.900 +END +TABLE MBK_TO_RDS_VIA + CONT_BODY_N \ + RDS_ALU1 1.400 ALL\ + RDS_CONT 0.600 ALL\ + RDS_ACTIV 1.500 DRC\ + RDS_NIMP 2.300 DRC\ + RDS_NWELL 5.100 DRC\ + RDS_PWELL 5.100 DRC\ + RDS_NDIF 1.500 EXT + CONT_BODY_P \ + RDS_ALU1 1.400 ALL\ + RDS_CONT 0.600 ALL\ + RDS_ACTIV 1.500 DRC\ + RDS_PIMP 2.300 DRC\ + RDS_PDIF 1.500 EXT + CONT_DIF_N \ + RDS_ALU1 1.400 ALL\ + RDS_CONT 0.600 ALL\ + RDS_ACTIV 1.500 DRC\ + RDS_NIMP 2.300 DRC\ + RDS_NDIF 1.500 EXT + CONT_DIF_P \ + RDS_ALU1 1.400 ALL\ + RDS_CONT 0.600 ALL\ + RDS_ACTIV 1.500 DRC\ + RDS_PIMP 2.300 DRC\ + RDS_PWELL 5.100 DRC\ + RDS_NWELL 5.100 DRC\ + RDS_PDIF 1.500 EXT + CONT_POLY \ + RDS_ALU1 1.400 ALL\ + RDS_CONT 0.600 ALL\ + RDS_POLY 1.600 ALL + CONT_VIA \ + RDS_ALU1 1.500 ALL\ + RDS_VIA1 0.700 ALL\ + RDS_ALU2 1.500 ALL + CONT_VIA2 \ + RDS_ALU2 1.500 ALL\ + RDS_VIA2 0.700 ALL\ + RDS_ALU3 1.500 ALL + C_X_N \ + RDS_POLY 0.600 ALL\ + RDS_ACTIV 2.500 DRC\ + RDS_NIMP 3.300 DRC\ + RDS_NDIF 2.500 EXT + C_X_P \ + RDS_POLY 0.600 ALL\ + RDS_ACTIV 2.500 DRC\ + RDS_PIMP 3.300 DRC\ + RDS_PWELL 6.100 DRC\ + RDS_NWELL 6.100 DRC\ + RDS_PDIF 2.500 EXT +END + +TABLE MBK_TO_RDS_BIGVIA_HOLE +CONT_VIA RDS_VIA1 1 4 ALL +CONT_VIA2 RDS_VIA2 1 4 ALL +CONT_VIA3 RDS_VIA3 1 4 ALL +CONT_VIA5 RDS_VIA3 1 9 ALL +CONT_VIA6 RDS_VIA3 1 9 ALL +END + +TABLE MBK_TO_RDS_BIGVIA_METAL +CONT_VIA RDS_ALU1 0.0 0.5 ALL RDS_ALU2 0.0 0.5 ALL +CONT_VIA2 RDS_ALU2 0.0 0.5 ALL RDS_ALU3 0.0 0.5 ALL +CONT_VIA3 RDS_ALU3 0.0 0.5 ALL RDS_ALU4 0.0 0.5 ALL +CONT_VIA4 RDS_ALU4 0.0 0.5 ALL RDS_ALU5 0.0 0.5 ALL +CONT_VIA5 RDS_ALU5 0.0 0.5 ALL RDS_ALU6 0.0 0.5 ALL +END + +TABLE MBK_TO_RDS_TURNVIA +CONT_TURN1 RDS_ALU1 0 ALL +CONT_TURN2 RDS_ALU2 0 ALL +CONT_TURN3 RDS_ALU3 0 ALL +CONT_TURN4 RDS_ALU4 0 ALL +CONT_TURN5 RDS_ALU5 0 ALL +CONT_TURN6 RDS_ALU6 0 ALL +END + +TABLE CIF_LAYER + RDS_NWELL NTUB + RDS_PWELL FIMP + RDS_POLY POLY1 + RDS_CONT CONT + RDS_ALU1 MET1 + RDS_VIA1 VIA + RDS_ALU2 MET2 + RDS_ACTIV DIFF + RDS_NIMP NPLUS + RDS_PIMP PPLUS + RDS_CPAS PAD + RDS_ALU3 MET3 + RDS_VIA2 VIA2 +END +TABLE GDS_LAYER + RDS_NWELL 5 + RDS_PWELL 8 + RDS_POLY 20 + RDS_CONT 34 + RDS_ALU1 35 + RDS_VIA1 36 + RDS_ALU2 37 + RDS_ACTIV 10 + RDS_NIMP 23 + RDS_PIMP 24 + RDS_CPAS 40 + RDS_ALU3 39 + RDS_VIA2 38 +END +TABLE S2R_OVERSIZE_DENOTCH + RDS_NWELL 2.400 + RDS_PWELL 2.400 + RDS_POLY 0.350 + RDS_ALU1 0.350 + RDS_ALU2 0.350 + RDS_ACTIV 0.550 + RDS_NIMP 0.450 + RDS_PIMP 0.450 + RDS_ALU3 0.450 +END +TABLE S2R_BLOC_RING_WIDTH + RDS_NWELL 4.800 + RDS_PWELL 4.800 + RDS_POLY 0.800 + RDS_ALU1 0.800 + RDS_ALU2 0.800 + RDS_ACTIV 1.200 + RDS_NIMP 0.900 + RDS_PIMP 0.900 + RDS_ALU3 1.000 +END +TABLE S2R_MINIMUM_LAYER_WIDTH + RDS_NWELL 3.000 + RDS_PWELL 3.000 + RDS_POLY 0.600 + RDS_ALU1 0.900 + RDS_ALU2 1.000 + RDS_ACTIV 1.000 + RDS_NIMP 0.900 + RDS_PIMP 0.900 + RDS_ALU3 1.200 +END +TABLE S2R_POST_TREAT + RDS_NWELL TREAT NULL + RDS_PWELL TREAT NULL + RDS_POLY TREAT NULL + RDS_CONT NOTREAT NULL + RDS_ALU1 TREAT NULL + RDS_VIA1 NOTREAT NULL + RDS_ALU2 TREAT NULL + RDS_ACTIV TREAT NULL + RDS_NIMP TREAT RDS_PIMP + RDS_PIMP TREAT RDS_NIMP + RDS_ABOX NOTREAT NULL + RDS_VIA2 NOTREAT NULL + RDS_ALU3 TREAT NULL +END +TABLE LYNX_TRANSISTOR +NTRANS NTRANS C_X_N RDS_POLY RDS_NDIF RDS_ACTIV RDS_PWELL +PTRANS PTRANS C_X_P RDS_POLY RDS_PDIF RDS_ACTIV RDS_NWELL +END +TABLE LYNX_DIFFUSION +RDS_NDIF RDS_ACTIV 1 RDS_NIMP 1 RDS_NWELL 0 +RDS_PDIF RDS_ACTIV 1 RDS_PIMP 1 RDS_NWELL 1 +RDS_NTIE RDS_ACTIV 1 RDS_NIMP 1 RDS_NWELL 1 +RDS_PTIE RDS_ACTIV 1 RDS_PIMP 1 RDS_NWELL 0 +END +TABLE LYNX_RESISTOR + RDS_POLY 0 + RDS_ALU1 0 + RDS_ALU2 0 + RDS_ALU3 0 + RDS_ALU3 0 + RDS_ALU4 0 + RDS_CONT 0 + RDS_VIA1 0 + RDS_VIA2 0 + RDS_VIA3 0 +END +TABLE LYNX_GRAPH + RDS_NDIF RDS_CONT RDS_NDIF + RDS_PDIF RDS_CONT RDS_PDIF + RDS_NTIE RDS_CONT RDS_NTIE + RDS_PTIE RDS_CONT RDS_PTIE + RDS_POLY RDS_CONT RDS_POLY + RDS_CONT RDS_PDIF RDS_NDIF RDS_POLY RDS_ALU1 RDS_CONT + RDS_ALU1 RDS_CONT RDS_VIA1 RDS_ALU1 RDS_REF + RDS_REF RDS_CONT RDS_VIA1 RDS_ALU1 RDS_REF + RDS_VIA1 RDS_ALU1 RDS_ALU2 RDS_VIA1 + RDS_ALU2 RDS_VIA1 RDS_VIA2 RDS_ALU2 + RDS_VIA2 RDS_ALU2 RDS_ALU3 RDS_VIA2 + RDS_ALU3 RDS_VIA2 RDS_ALU3 +END +TABLE LYNX_CAPA + RDS_POLY 9.9e-05 4.8e-05 + RDS_ALU1 4.1e-05 5.1e-05 + RDS_ALU2 2.4e-05 4.6e-05 + RDS_ALU3 2.4e-05 4.6e-05 +END + +TABLE LYNX_BULK_IMPLICIT +# NWELL EXPLICIT +# PWELL IMPLICIT +END diff --git a/alliance/src/documentation/alliance-examples/tuner/padreal.cif b/alliance/src/documentation/alliance-examples/tuner/padreal.cif new file mode 100644 index 00000000..6bd30020 --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/padreal.cif @@ -0,0 +1,501 @@ +(rds to CIF driver cvs version $Revision: 1.1 $ +technology fake05.rds +Tue Jul 27 18:03:47 2004 +padreal +fred); + +DS1 5 2; +9 padreal; +LMET1; +B2994 3120 1693 2700; +B2994 4704 1693 1908; +LVIA; +B40 40 488 1200; +B40 40 288 1200; +B40 40 888 1200; +B40 40 688 1200; +B40 40 1288 1200; +B40 40 1088 1200; +B40 40 1688 1200; +B40 40 1488 1200; +B40 40 2088 1200; +B40 40 1888 1200; +B40 40 2488 1200; +B40 40 2288 1200; +B40 40 2888 1200; +B40 40 2688 1200; +B40 40 3088 1200; +B40 40 488 1600; +B40 40 488 1400; +B40 40 288 1600; +B40 40 288 1400; +B40 40 888 1600; +B40 40 888 1400; +B40 40 688 1600; +B40 40 688 1400; +B40 40 1288 1600; +B40 40 1288 1400; +B40 40 1088 1600; +B40 40 1088 1400; +B40 40 1688 1600; +B40 40 1688 1400; +B40 40 1488 1600; +B40 40 1488 1400; +B40 40 2088 1600; +B40 40 2088 1400; +B40 40 1888 1600; +B40 40 1888 1400; +B40 40 2488 1600; +B40 40 2488 1400; +B40 40 2288 1600; +B40 40 2288 1400; +B40 40 2888 1600; +B40 40 2888 1400; +B40 40 2688 1600; +B40 40 2688 1400; +B40 40 3088 1600; +B40 40 3088 1400; +B40 40 488 2000; +B40 40 488 1800; +B40 40 288 2000; +B40 40 288 1800; +B40 40 888 2000; +B40 40 888 1800; +B40 40 688 2000; +B40 40 688 1800; +B40 40 1288 2000; +B40 40 1288 1800; +B40 40 1088 2000; +B40 40 1088 1800; +B40 40 1688 2000; +B40 40 1688 1800; +B40 40 1488 2000; +B40 40 1488 1800; +B40 40 2088 2000; +B40 40 2088 1800; +B40 40 1888 2000; +B40 40 1888 1800; +B40 40 2488 2000; +B40 40 2488 1800; +B40 40 2288 2000; +B40 40 2288 1800; +B40 40 2888 2000; +B40 40 2888 1800; +B40 40 2688 2000; +B40 40 2688 1800; +B40 40 3088 2000; +B40 40 3088 1800; +B40 40 488 2400; +B40 40 488 2200; +B40 40 288 2400; +B40 40 288 2200; +B40 40 888 2400; +B40 40 888 2200; +B40 40 688 2400; +B40 40 688 2200; +B40 40 1288 2400; +B40 40 1288 2200; +B40 40 1088 2400; +B40 40 1088 2200; +B40 40 1688 2400; +B40 40 1688 2200; +B40 40 1488 2400; +B40 40 1488 2200; +B40 40 2088 2400; +B40 40 2088 2200; +B40 40 1888 2400; +B40 40 1888 2200; +B40 40 2488 2400; +B40 40 2488 2200; +B40 40 2288 2400; +B40 40 2288 2200; +B40 40 2888 2400; +B40 40 2888 2200; +B40 40 2688 2400; +B40 40 2688 2200; +B40 40 3088 2400; +B40 40 3088 2200; +B40 40 488 2800; +B40 40 488 2600; +B40 40 288 2800; +B40 40 288 2600; +B40 40 888 2800; +B40 40 888 2600; +B40 40 688 2800; +B40 40 688 2600; +B40 40 1288 2800; +B40 40 1288 2600; +B40 40 1088 2800; +B40 40 1088 2600; +B40 40 1688 2800; +B40 40 1688 2600; +B40 40 1488 2800; +B40 40 1488 2600; +B40 40 2088 2800; +B40 40 2088 2600; +B40 40 1888 2800; +B40 40 1888 2600; +B40 40 2488 2800; +B40 40 2488 2600; +B40 40 2288 2800; +B40 40 2288 2600; +B40 40 2888 2800; +B40 40 2888 2600; +B40 40 2688 2800; +B40 40 2688 2600; +B40 40 3088 2800; +B40 40 3088 2600; +B40 40 488 3200; +B40 40 488 3000; +B40 40 288 3200; +B40 40 288 3000; +B40 40 888 3200; +B40 40 888 3000; +B40 40 688 3200; +B40 40 688 3000; +B40 40 1288 3200; +B40 40 1288 3000; +B40 40 1088 3200; +B40 40 1088 3000; +B40 40 1688 3200; +B40 40 1688 3000; +B40 40 1488 3200; +B40 40 1488 3000; +B40 40 2088 3200; +B40 40 2088 3000; +B40 40 1888 3200; +B40 40 1888 3000; +B40 40 2488 3200; +B40 40 2488 3000; +B40 40 2288 3200; +B40 40 2288 3000; +B40 40 2888 3200; +B40 40 2888 3000; +B40 40 2688 3200; +B40 40 2688 3000; +B40 40 3088 3200; +B40 40 3088 3000; +B40 40 488 3600; +B40 40 488 3400; +B40 40 288 3600; +B40 40 288 3400; +B40 40 888 3600; +B40 40 888 3400; +B40 40 688 3600; +B40 40 688 3400; +B40 40 1288 3600; +B40 40 1288 3400; +B40 40 1088 3600; +B40 40 1088 3400; +B40 40 1688 3600; +B40 40 1688 3400; +B40 40 1488 3600; +B40 40 1488 3400; +B40 40 2088 3600; +B40 40 2088 3400; +B40 40 1888 3600; +B40 40 1888 3400; +B40 40 2488 3600; +B40 40 2488 3400; +B40 40 2288 3600; +B40 40 2288 3400; +B40 40 2888 3600; +B40 40 2888 3400; +B40 40 2688 3600; +B40 40 2688 3400; +B40 40 3088 3600; +B40 40 3088 3400; +B40 40 488 4000; +B40 40 488 3800; +B40 40 288 4000; +B40 40 288 3800; +B40 40 888 4000; +B40 40 888 3800; +B40 40 688 4000; +B40 40 688 3800; +B40 40 1288 4000; +B40 40 1288 3800; +B40 40 1088 4000; +B40 40 1088 3800; +B40 40 1688 4000; +B40 40 1688 3800; +B40 40 1488 4000; +B40 40 1488 3800; +B40 40 2088 4000; +B40 40 2088 3800; +B40 40 1888 4000; +B40 40 1888 3800; +B40 40 2488 4000; +B40 40 2488 3800; +B40 40 2288 4000; +B40 40 2288 3800; +B40 40 2888 4000; +B40 40 2888 3800; +B40 40 2688 4000; +B40 40 2688 3800; +B40 40 3088 4000; +B40 40 3088 3800; +B40 40 488 4200; +B40 40 288 4200; +B40 40 888 4200; +B40 40 688 4200; +B40 40 1288 4200; +B40 40 1088 4200; +B40 40 1688 4200; +B40 40 1488 4200; +B40 40 2088 4200; +B40 40 1888 4200; +B40 40 2488 4200; +B40 40 2288 4200; +B40 40 2888 4200; +B40 40 2688 4200; +B40 40 3088 4200; +LMET2; +B2994 3120 1693 2700; +LVIA2; +B40 40 488 1200; +B40 40 288 1200; +B40 40 888 1200; +B40 40 688 1200; +B40 40 1288 1200; +B40 40 1088 1200; +B40 40 1688 1200; +B40 40 1488 1200; +B40 40 2088 1200; +B40 40 1888 1200; +B40 40 2488 1200; +B40 40 2288 1200; +B40 40 2888 1200; +B40 40 2688 1200; +B40 40 3088 1200; +B40 40 488 1600; +B40 40 488 1400; +B40 40 288 1600; +B40 40 288 1400; +B40 40 888 1600; +B40 40 888 1400; +B40 40 688 1600; +B40 40 688 1400; +B40 40 1288 1600; +B40 40 1288 1400; +B40 40 1088 1600; +B40 40 1088 1400; +B40 40 1688 1600; +B40 40 1688 1400; +B40 40 1488 1600; +B40 40 1488 1400; +B40 40 2088 1600; +B40 40 2088 1400; +B40 40 1888 1600; +B40 40 1888 1400; +B40 40 2488 1600; +B40 40 2488 1400; +B40 40 2288 1600; +B40 40 2288 1400; +B40 40 2888 1600; +B40 40 2888 1400; +B40 40 2688 1600; +B40 40 2688 1400; +B40 40 3088 1600; +B40 40 3088 1400; +B40 40 488 2000; +B40 40 488 1800; +B40 40 288 2000; +B40 40 288 1800; +B40 40 888 2000; +B40 40 888 1800; +B40 40 688 2000; +B40 40 688 1800; +B40 40 1288 2000; +B40 40 1288 1800; +B40 40 1088 2000; +B40 40 1088 1800; +B40 40 1688 2000; +B40 40 1688 1800; +B40 40 1488 2000; +B40 40 1488 1800; +B40 40 2088 2000; +B40 40 2088 1800; +B40 40 1888 2000; +B40 40 1888 1800; +B40 40 2488 2000; +B40 40 2488 1800; +B40 40 2288 2000; +B40 40 2288 1800; +B40 40 2888 2000; +B40 40 2888 1800; +B40 40 2688 2000; +B40 40 2688 1800; +B40 40 3088 2000; +B40 40 3088 1800; +B40 40 488 2400; +B40 40 488 2200; +B40 40 288 2400; +B40 40 288 2200; +B40 40 888 2400; +B40 40 888 2200; +B40 40 688 2400; +B40 40 688 2200; +B40 40 1288 2400; +B40 40 1288 2200; +B40 40 1088 2400; +B40 40 1088 2200; +B40 40 1688 2400; +B40 40 1688 2200; +B40 40 1488 2400; +B40 40 1488 2200; +B40 40 2088 2400; +B40 40 2088 2200; +B40 40 1888 2400; +B40 40 1888 2200; +B40 40 2488 2400; +B40 40 2488 2200; +B40 40 2288 2400; +B40 40 2288 2200; +B40 40 2888 2400; +B40 40 2888 2200; +B40 40 2688 2400; +B40 40 2688 2200; +B40 40 3088 2400; +B40 40 3088 2200; +B40 40 488 2800; +B40 40 488 2600; +B40 40 288 2800; +B40 40 288 2600; +B40 40 888 2800; +B40 40 888 2600; +B40 40 688 2800; +B40 40 688 2600; +B40 40 1288 2800; +B40 40 1288 2600; +B40 40 1088 2800; +B40 40 1088 2600; +B40 40 1688 2800; +B40 40 1688 2600; +B40 40 1488 2800; +B40 40 1488 2600; +B40 40 2088 2800; +B40 40 2088 2600; +B40 40 1888 2800; +B40 40 1888 2600; +B40 40 2488 2800; +B40 40 2488 2600; +B40 40 2288 2800; +B40 40 2288 2600; +B40 40 2888 2800; +B40 40 2888 2600; +B40 40 2688 2800; +B40 40 2688 2600; +B40 40 3088 2800; +B40 40 3088 2600; +B40 40 488 3200; +B40 40 488 3000; +B40 40 288 3200; +B40 40 288 3000; +B40 40 888 3200; +B40 40 888 3000; +B40 40 688 3200; +B40 40 688 3000; +B40 40 1288 3200; +B40 40 1288 3000; +B40 40 1088 3200; +B40 40 1088 3000; +B40 40 1688 3200; +B40 40 1688 3000; +B40 40 1488 3200; +B40 40 1488 3000; +B40 40 2088 3200; +B40 40 2088 3000; +B40 40 1888 3200; +B40 40 1888 3000; +B40 40 2488 3200; +B40 40 2488 3000; +B40 40 2288 3200; +B40 40 2288 3000; +B40 40 2888 3200; +B40 40 2888 3000; +B40 40 2688 3200; +B40 40 2688 3000; +B40 40 3088 3200; +B40 40 3088 3000; +B40 40 488 3600; +B40 40 488 3400; +B40 40 288 3600; +B40 40 288 3400; +B40 40 888 3600; +B40 40 888 3400; +B40 40 688 3600; +B40 40 688 3400; +B40 40 1288 3600; +B40 40 1288 3400; +B40 40 1088 3600; +B40 40 1088 3400; +B40 40 1688 3600; +B40 40 1688 3400; +B40 40 1488 3600; +B40 40 1488 3400; +B40 40 2088 3600; +B40 40 2088 3400; +B40 40 1888 3600; +B40 40 1888 3400; +B40 40 2488 3600; +B40 40 2488 3400; +B40 40 2288 3600; +B40 40 2288 3400; +B40 40 2888 3600; +B40 40 2888 3400; +B40 40 2688 3600; +B40 40 2688 3400; +B40 40 3088 3600; +B40 40 3088 3400; +B40 40 488 4000; +B40 40 488 3800; +B40 40 288 4000; +B40 40 288 3800; +B40 40 888 4000; +B40 40 888 3800; +B40 40 688 4000; +B40 40 688 3800; +B40 40 1288 4000; +B40 40 1288 3800; +B40 40 1088 4000; +B40 40 1088 3800; +B40 40 1688 4000; +B40 40 1688 3800; +B40 40 1488 4000; +B40 40 1488 3800; +B40 40 2088 4000; +B40 40 2088 3800; +B40 40 1888 4000; +B40 40 1888 3800; +B40 40 2488 4000; +B40 40 2488 3800; +B40 40 2288 4000; +B40 40 2288 3800; +B40 40 2888 4000; +B40 40 2888 3800; +B40 40 2688 4000; +B40 40 2688 3800; +B40 40 3088 4000; +B40 40 3088 3800; +B40 40 488 4200; +B40 40 288 4200; +B40 40 888 4200; +B40 40 688 4200; +B40 40 1288 4200; +B40 40 1088 4200; +B40 40 1688 4200; +B40 40 1488 4200; +B40 40 2088 4200; +B40 40 1888 4200; +B40 40 2488 4200; +B40 40 2288 4200; +B40 40 2888 4200; +B40 40 2688 4200; +B40 40 3088 4200; +LMET3; +B2994 3120 1693 2700; +DF; + +C1; +E diff --git a/alliance/src/documentation/alliance-examples/tuner/padreal.gds b/alliance/src/documentation/alliance-examples/tuner/padreal.gds new file mode 100644 index 0000000000000000000000000000000000000000..71127020827619f55c56157636c2e3d3c9152ae5 GIT binary patch literal 37234 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 literal 0 HcmV?d00001 diff --git a/alliance/src/documentation/alliance-examples/tuner/tuner-fr.pdf b/alliance/src/documentation/alliance-examples/tuner/tuner-fr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..281b411813e6912241e3b145a8926a1322763321 GIT binary patch literal 125238 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 hpzqr0q literal 0 HcmV?d00001 diff --git a/alliance/src/documentation/alliance-examples/tuner/tuner.ioc b/alliance/src/documentation/alliance-examples/tuner/tuner.ioc new file mode 100644 index 00000000..bbcf2cf1 --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/tuner.ioc @@ -0,0 +1,33 @@ +TOP ( + (IOPIN ck.0 ); + (IOPIN d.0 ); + (IOPIN o(0).0 ); + (IOPIN o(1).0 ); + (IOPIN o(2).0 ); +) +RIGHT ( + (IOPIN o(9).0 ); + (IOPIN o(8).0 ); + (IOPIN o(7).0 ); + (IOPIN o(6).0 ); + (IOPIN o(5).0 ); + (IOPIN o(4).0 ); + (IOPIN o(3).0 ); +) +BOTTOM( + (IOPIN o(14).0 ); + (IOPIN o(13).0 ); + (IOPIN o(12).0 ); + (IOPIN o(11).0 ); + (IOPIN o(10).0 ); +) +LEFT ( + (IOPIN o(15).0 ); + (IOPIN o(16).0 ); + (IOPIN o(17).0 ); + (IOPIN o(18).0 ); + (IOPIN o(19).0 ); + (IOPIN o(20).0 ); + (IOPIN o(21).0 ); + (IOPIN o(22).0 ); +) diff --git a/alliance/src/documentation/alliance-examples/tuner/tuner.rin b/alliance/src/documentation/alliance-examples/tuner/tuner.rin new file mode 100644 index 00000000..444e2bcc --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/tuner.rin @@ -0,0 +1,4 @@ +north(pck pd po0 po1 pvdde pvsse po2) +east (po9 po8 po7 po6 po5 po4 po3) +south(po14 po13 po12 pvssi pvddi po11 po10) +west (po15 po16 po17 po18 po19 po20 po21 po22) diff --git a/alliance/src/documentation/alliance-examples/tuner/tuner.vbe b/alliance/src/documentation/alliance-examples/tuner/tuner.vbe new file mode 100644 index 00000000..c12cb705 --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/tuner.vbe @@ -0,0 +1,286 @@ +-- Instrument tuner +-- Frequency of operation is 819200 Hz, obtained by dividing a +-- 3276000 Hz quartz by four +-- Author: Frédéric Pétrot +entity tuner is + port ( + ck : in bit; + d : in bit; + o : out bit_vector(0 to 22); + vdd : in bit; + vss : in bit + ); +end tuner; + +architecture dataflow of tuner is +signal start : bit; +-- input handling +signal d_reg : reg_bit register; -- previous value of input + +-- incrementer related things +signal incr_out : bit_vector (14 downto 0); -- incrementer's result +signal incr_cry : bit_vector (15 downto 0); -- incrementer's carry +signal incr_reg : reg_vector (14 downto 0) register; -- incrementer register + +-- normalizer related things +-- reg must be at most 381 and cannot be less than 190 (hopefully) +constant c382 : bit_vector(14 downto 0) := "000_0001_0111_1110"; +-- we must substract 190 from the shifted result +constant c191 : bit_vector (8 downto 0) := "0_1011_1111"; +signal test_out : bit_vector (14 downto 0); +signal test_cry : bit_vector (15 downto 0); +signal norm_out : bit_vector (14 downto 0); +signal norm_reg : reg_vector (14 downto 0) register; +signal subs_out : bit_vector (8 downto 0); +signal subs_cry : bit_vector (9 downto 0); +signal deco_reg : reg_vector (7 downto 0) register; + +begin + + input : block (ck = '1' and not ck'STABLE) + begin + d_reg <= guarded d; + end block; + + start <= (not d_reg) and d; + + -- compute the result out of the incrementer + -- maximum value is 30582 for an very flat A (26.8 Hz) + -- incr_out <= incr_reg + 1 + incr_out <= incr_reg xor incr_cry(14 downto 0); + incr_cry (0) <= '1'; + incr_cry (15 downto 1) <= (incr_reg and incr_cry (14 downto 0)); + + incr : block (ck = '1' and not ck'stable) + begin + incr_reg <= guarded incr_out when start = '0' else B"000000000000000"; + end block; + + -- normalize the incrementer output: shift until it reaches the + -- [17D, BE] range values, and then subtract BE to fit between 0 and + -- whatever + -- test_out <= norm_reg - c382 = norm_reg + not c382 + 1 + test_out <= norm_reg xor not(c382) xor test_cry(14 downto 0); + test_cry (0) <= '1'; + test_cry (15 downto 1) <= (norm_reg and test_cry (14 downto 0)) or + (not(c382) and test_cry (14 downto 0)) or + (norm_reg and not(c382) ) ; + + -- loop until norm reg is less than 17E, keep its value otherwise + -- norm_out <= norm_reg >> 2 if (norm_reg - c382) > 0 + -- norm_reg otherwise + norm_out <= '0' & norm_reg(14 downto 1) when test_out(14) = '0' + else norm_reg; + + -- load norm_reg with incr_out when start is true + norm : block (ck = '1' and not ck'stable) + begin + norm_reg <= guarded norm_out when start = '0' else incr_out; + end block; + + subs_out <= norm_reg(8 downto 0) xor not(c191) xor subs_cry(8 downto 0); + subs_cry (0) <= '1'; + subs_cry (9 downto 1) <= (norm_reg(8 downto 0) and subs_cry (8 downto 0)) or + (not(c191) and subs_cry (8 downto 0)) or + (norm_reg(8 downto 0) and not(c191)); + + + deco : block (ck = '1' and not ck'stable) + begin + deco_reg <= guarded subs_out(7 downto 0) when test_out(14) = '1' else deco_reg; + end block; + + with deco_reg select + o <= B"1000_0_0000_0111101_0011111" when B"10111110", -- 381 réb 380 (freq: 2161.258631) + B"1000_0_0000_0111101_0011111" when B"10111101", -- 380 réb 380 (freq: 2161.258631) + B"0100_0_0000_0111101_0011111" when B"10111100", -- 379 réb 377 (freq: 2175.174260) + B"0100_0_0000_0111101_0011111" when B"10111011", -- 378 réb 377 (freq: 2175.174260) + B"0100_0_0000_0111101_0011111" when B"10111010", -- 377 réb 377 (freq: 2175.174260) + B"0010_0_0000_0111101_0011111" when B"10111001", -- 376 réb 375 (freq: 2189.179488) + B"0010_0_0000_0111101_0011111" when B"10111000", -- 375 réb 375 (freq: 2189.179488) + B"0001_0_0000_0111101_0011111" when B"10110111", -- 374 réb 373 (freq: 2203.274890) + B"0001_0_0000_0111101_0011111" when B"10110110", -- 373 réb 373 (freq: 2203.274890) + B"0001_0_0000_0111101_0011111" when B"10110101", -- 372 réb 370 (freq: 2217.461048) + B"0001_0_0000_0111101_0011111" when B"10110100", -- 371 réb 370 (freq: 2217.461048) + B"0000_1_0000_0111101_0011111" when B"10110011", -- 370 réb 370 (freq: 2217.461048) + B"0000_0_1000_0111101_0011111" when B"10110010", -- 369 réb 368 (freq: 2231.738546) + B"0000_0_1000_0111101_0011111" when B"10110001", -- 368 réb 368 (freq: 2231.738546) + B"0000_0_0100_0111101_0011111" when B"10110000", -- 367 réb 365 (freq: 2246.107972) + B"0000_0_0100_0111101_0011111" when B"10101111", -- 366 réb 365 (freq: 2246.107972) + B"0000_0_0100_0111101_0011111" when B"10101110", -- 365 réb 365 (freq: 2246.107972) + B"0000_0_0010_0111101_0011111" when B"10101101", -- 364 réb 363 (freq: 2260.569918) + B"0000_0_0010_0111101_0011111" when B"10101100", -- 363 réb 363 (freq: 2260.569918) + B"0000_0_0001_0111101_0011111" when B"10101011", -- 362 réb 361 (freq: 2275.124980) + B"0000_0_0001_0111101_0011111" when B"10101010", -- 361 réb 361 (freq: 2275.124980) + B"1000_0_0000_0111101_0000000" when B"10101001", -- 360 ré 358 (freq: 2289.773757) + B"1000_0_0000_0111101_0000000" when B"10101000", -- 359 ré 358 (freq: 2289.773757) + B"1000_0_0000_0111101_0000000" when B"10100111", -- 358 ré 358 (freq: 2289.773757) + B"0100_0_0000_0111101_0000000" when B"10100110", -- 357 ré 356 (freq: 2304.516853) + B"0100_0_0000_0111101_0000000" when B"10100101", -- 356 ré 356 (freq: 2304.516853) + B"0010_0_0000_0111101_0000000" when B"10100100", -- 355 ré 354 (freq: 2319.354874) + B"0010_0_0000_0111101_0000000" when B"10100011", -- 354 ré 354 (freq: 2319.354874) + B"0001_0_0000_0111101_0000000" when B"10100010", -- 353 ré 352 (freq: 2334.288433) + B"0001_0_0000_0111101_0000000" when B"10100001", -- 352 ré 352 (freq: 2334.288433) + B"0001_0_0000_0111101_0000000" when B"10100000", -- 351 ré 349 (freq: 2349.318144) + B"0001_0_0000_0111101_0000000" when B"10011111", -- 350 ré 349 (freq: 2349.318144) + B"0000_1_0000_0111101_0000000" when B"10011110", -- 349 ré 349 (freq: 2349.318144) + B"0000_0_1000_0111101_0000000" when B"10011101", -- 348 ré 347 (freq: 2364.444626) + B"0000_0_1000_0111101_0000000" when B"10011100", -- 347 ré 347 (freq: 2364.444626) + B"0000_0_0100_0111101_0000000" when B"10011011", -- 346 ré 345 (freq: 2379.668502) + B"0000_0_0100_0111101_0000000" when B"10011010", -- 345 ré 345 (freq: 2379.668502) + B"0000_0_0010_0111101_0000000" when B"10011001", -- 344 ré 343 (freq: 2394.990401) + B"0000_0_0010_0111101_0000000" when B"10011000", -- 343 ré 343 (freq: 2394.990401) + B"0000_0_0001_0111101_0000000" when B"10010111", -- 342 ré 341 (freq: 2410.410951) + B"0000_0_0001_0111101_0000000" when B"10010110", -- 341 ré 341 (freq: 2410.410951) + B"1000_0_0000_1001111_0011111" when B"10010101", -- 340 mib 338 (freq: 2425.930790) + B"1000_0_0000_1001111_0011111" when B"10010100", -- 339 mib 338 (freq: 2425.930790) + B"1000_0_0000_1001111_0011111" when B"10010011", -- 338 mib 338 (freq: 2425.930790) + B"0100_0_0000_1001111_0011111" when B"10010010", -- 337 mib 336 (freq: 2441.550556) + B"0100_0_0000_1001111_0011111" when B"10010001", -- 336 mib 336 (freq: 2441.550556) + B"0010_0_0000_1001111_0011111" when B"10010000", -- 335 mib 334 (freq: 2457.270892) + B"0010_0_0000_1001111_0011111" when B"10001111", -- 334 mib 334 (freq: 2457.270892) + B"0001_0_0000_1001111_0011111" when B"10001110", -- 333 mib 332 (freq: 2473.092446) + B"0001_0_0000_1001111_0011111" when B"10001101", -- 332 mib 332 (freq: 2473.092446) + B"0001_0_0000_1001111_0011111" when B"10001100", -- 331 mib 330 (freq: 2489.015870) + B"0000_1_0000_1001111_0011111" when B"10001011", -- 330 mib 330 (freq: 2489.015870) + B"0000_0_1000_1001111_0011111" when B"10001010", -- 329 mib 328 (freq: 2505.041820) + B"0000_0_1000_1001111_0011111" when B"10001001", -- 328 mib 328 (freq: 2505.041820) + B"0000_0_0100_1001111_0011111" when B"10001000", -- 327 mib 326 (freq: 2521.170955) + B"0000_0_0100_1001111_0011111" when B"10000111", -- 326 mib 326 (freq: 2521.170955) + B"0000_0_0010_1001111_0011111" when B"10000110", -- 325 mib 324 (freq: 2537.403941) + B"0000_0_0010_1001111_0011111" when B"10000101", -- 324 mib 324 (freq: 2537.403941) + B"0000_0_0001_1001111_0011111" when B"10000100", -- 323 mib 321 (freq: 2553.741445) + B"0000_0_0001_1001111_0011111" when B"10000011", -- 322 mib 321 (freq: 2553.741445) + B"0000_0_0001_1001111_0011111" when B"10000010", -- 321 mib 321 (freq: 2553.741445) + B"1000_0_0000_1001111_0000000" when B"10000001", -- 320 mi 319 (freq: 2570.184141) + B"1000_0_0000_1001111_0000000" when B"10000000", -- 319 mi 319 (freq: 2570.184141) + B"0100_0_0000_1001111_0000000" when B"01111111", -- 318 mi 317 (freq: 2586.732707) + B"0100_0_0000_1001111_0000000" when B"01111110", -- 317 mi 317 (freq: 2586.732707) + B"0010_0_0000_1001111_0000000" when B"01111101", -- 316 mi 315 (freq: 2603.387823) + B"0010_0_0000_1001111_0000000" when B"01111100", -- 315 mi 315 (freq: 2603.387823) + B"0001_0_0000_1001111_0000000" when B"01111011", -- 314 mi 313 (freq: 2620.150175) + B"0001_0_0000_1001111_0000000" when B"01111010", -- 313 mi 313 (freq: 2620.150175) + B"0001_0_0000_1001111_0000000" when B"01111001", -- 312 mi 311 (freq: 2637.020456) + B"0000_1_0000_1001111_0000000" when B"01111000", -- 311 mi 311 (freq: 2637.020456) + B"0000_0_1000_1001111_0000000" when B"01110111", -- 310 mi 309 (freq: 2653.999358) + B"0000_0_1000_1001111_0000000" when B"01110110", -- 309 mi 309 (freq: 2653.999358) + B"0000_0_0100_1001111_0000000" when B"01110101", -- 308 mi 307 (freq: 2671.087581) + B"0000_0_0100_1001111_0000000" when B"01110100", -- 307 mi 307 (freq: 2671.087581) + B"0000_0_0010_1001111_0000000" when B"01110011", -- 306 mi 305 (freq: 2688.285831) + B"0000_0_0010_1001111_0000000" when B"01110010", -- 305 mi 305 (freq: 2688.285831) + B"0000_0_0001_1001111_0000000" when B"01110001", -- 304 mi 303 (freq: 2705.594814) + B"0000_0_0001_1001111_0000000" when B"01110000", -- 303 mi 303 (freq: 2705.594814) + B"1000_0_0000_1000111_0000000" when B"01101111", -- 302 fa 302 (freq: 2723.015243) + B"0100_0_0000_1000111_0000000" when B"01101110", -- 301 fa 300 (freq: 2740.547838) + B"0100_0_0000_1000111_0000000" when B"01101101", -- 300 fa 300 (freq: 2740.547838) + B"0010_0_0000_1000111_0000000" when B"01101100", -- 299 fa 298 (freq: 2758.193318) + B"0010_0_0000_1000111_0000000" when B"01101011", -- 298 fa 298 (freq: 2758.193318) + B"0001_0_0000_1000111_0000000" when B"01101010", -- 297 fa 296 (freq: 2775.952413) + B"0001_0_0000_1000111_0000000" when B"01101001", -- 296 fa 296 (freq: 2775.952413) + B"0001_0_0000_1000111_0000000" when B"01101000", -- 295 fa 294 (freq: 2793.825852) + B"0000_1_0000_1000111_0000000" when B"01100111", -- 294 fa 294 (freq: 2793.825852) + B"0000_0_1000_1000111_0000000" when B"01100110", -- 293 fa 292 (freq: 2811.814372) + B"0000_0_1000_1000111_0000000" when B"01100101", -- 292 fa 292 (freq: 2811.814372) + B"0000_0_0100_1000111_0000000" when B"01100100", -- 291 fa 290 (freq: 2829.918714) + B"0000_0_0100_1000111_0000000" when B"01100011", -- 290 fa 290 (freq: 2829.918714) + B"0000_0_0010_1000111_0000000" when B"01100010", -- 289 fa 288 (freq: 2848.139625) + B"0000_0_0010_1000111_0000000" when B"01100001", -- 288 fa 288 (freq: 2848.139625) + B"0000_0_0001_1000111_0000000" when B"01100000", -- 287 fa 286 (freq: 2866.477853) + B"0000_0_0001_1000111_0000000" when B"01011111", -- 286 fa 286 (freq: 2866.477853) + B"1000_0_0000_1111011_0011111" when B"01011110", -- 285 solb 285 (freq: 2884.934156) + B"0100_0_0000_1111011_0011111" when B"01011101", -- 284 solb 283 (freq: 2903.509292) + B"0100_0_0000_1111011_0011111" when B"01011100", -- 283 solb 283 (freq: 2903.509292) + B"0010_0_0000_1111011_0011111" when B"01011011", -- 282 solb 281 (freq: 2922.204028) + B"0010_0_0000_1111011_0011111" when B"01011010", -- 281 solb 281 (freq: 2922.204028) + B"0001_0_0000_1111011_0011111" when B"01011001", -- 280 solb 279 (freq: 2941.019133) + B"0001_0_0000_1111011_0011111" when B"01011000", -- 279 solb 279 (freq: 2941.019133) + B"0001_0_0000_1111011_0011111" when B"01010111", -- 278 solb 277 (freq: 2959.955382) + B"0000_0_0000_1111011_0011111" when B"01010110", -- 277 solb 277 (freq: 2959.955382) + B"0000_0_1000_1111011_0011111" when B"01010101", -- 276 solb 276 (freq: 2979.013555) + B"0000_0_0100_1111011_0011111" when B"01010100", -- 275 solb 274 (freq: 2998.194438) + B"0000_0_0100_1111011_0011111" when B"01010011", -- 274 solb 274 (freq: 2998.194438) + B"0000_0_0010_1111011_0011111" when B"01010010", -- 273 solb 272 (freq: 3017.498820) + B"0000_0_0010_1111011_0011111" when B"01010001", -- 272 solb 272 (freq: 3017.498820) + B"0000_0_0001_1111011_0011111" when B"01010000", -- 271 solb 270 (freq: 3036.927496) + B"0000_0_0001_1111011_0011111" when B"01001111", -- 270 solb 270 (freq: 3036.927496) + B"1000_0_0000_1111011_0000000" when B"01001110", -- 269 sol 269 (freq: 3056.481268) + B"0100_0_0000_1111011_0000000" when B"01001101", -- 268 sol 267 (freq: 3076.160939) + B"0100_0_0000_1111011_0000000" when B"01001100", -- 267 sol 267 (freq: 3076.160939) + B"0010_0_0000_1111011_0000000" when B"01001011", -- 266 sol 265 (freq: 3095.967322) + B"0010_0_0000_1111011_0000000" when B"01001010", -- 265 sol 265 (freq: 3095.967322) + B"0001_0_0000_1111011_0000000" when B"01001001", -- 264 sol 264 (freq: 3115.901231) + B"0001_0_0000_1111011_0000000" when B"01001000", -- 263 sol 262 (freq: 3135.963488) + B"0000_1_0000_1111011_0000000" when B"01000111", -- 262 sol 262 (freq: 3135.963488) + B"0000_0_1000_1111011_0000000" when B"01000110", -- 261 sol 260 (freq: 3156.154919) + B"0000_0_1000_1111011_0000000" when B"01000101", -- 260 sol 260 (freq: 3156.154919) + B"0000_0_0100_1111011_0000000" when B"01000100", -- 259 sol 259 (freq: 3176.476357) + B"0000_0_0010_1111011_0000000" when B"01000011", -- 258 sol 257 (freq: 3196.928637) + B"0000_0_0010_1111011_0000000" when B"01000010", -- 257 sol 257 (freq: 3196.928637) + B"0000_0_0001_1111011_0000000" when B"01000001", -- 256 sol 255 (freq: 3217.512603) + B"0000_0_0001_1111011_0000000" when B"01000000", -- 255 sol 255 (freq: 3217.512603) + B"1000_0_0000_1110111_0011111" when B"00111111", -- 254 lab 254 (freq: 3238.229102) + B"0100_0_0000_1110111_0011111" when B"00111110", -- 253 lab 252 (freq: 3259.078988) + B"0100_0_0000_1110111_0011111" when B"00111101", -- 252 lab 252 (freq: 3259.078988) + B"0010_0_0000_1110111_0011111" when B"00111100", -- 251 lab 250 (freq: 3280.063119) + B"0010_0_0000_1110111_0011111" when B"00111011", -- 250 lab 250 (freq: 3280.063119) + B"0001_0_0000_1110111_0011111" when B"00111010", -- 249 lab 249 (freq: 3301.182360) + B"0001_0_0000_1110111_0011111" when B"00111001", -- 248 lab 247 (freq: 3322.437581) + B"0000_1_0000_1110111_0011111" when B"00111000", -- 247 lab 247 (freq: 3322.437581) + B"0000_0_1000_1110111_0011111" when B"00110111", -- 246 lab 246 (freq: 3343.829657) + B"0000_0_0100_1110111_0011111" when B"00110110", -- 245 lab 244 (freq: 3365.359470) + B"0000_0_0100_1110111_0011111" when B"00110101", -- 244 lab 244 (freq: 3365.359470) + B"0000_0_0010_1110111_0011111" when B"00110100", -- 243 lab 243 (freq: 3387.027906) + B"0000_0_0001_1110111_0011111" when B"00110011", -- 242 lab 241 (freq: 3408.835858) + B"0000_0_0001_1110111_0011111" when B"00110010", -- 241 lab 241 (freq: 3408.835858) + B"1000_0_0000_1110111_0000000" when B"00110001", -- 240 la 239 (freq: 3430.784224) + B"1000_0_0000_1110111_0000000" when B"00110000", -- 239 la 239 (freq: 3430.784224) + B"0100_0_0000_1110111_0000000" when B"00101111", -- 238 la 238 (freq: 3452.873909) + B"0010_0_0000_1110111_0000000" when B"00101110", -- 237 la 236 (freq: 3475.105822) + B"0010_0_0000_1110111_0000000" when B"00101101", -- 236 la 236 (freq: 3475.105822) + B"0001_0_0000_1110111_0000000" when B"00101100", -- 235 la 235 (freq: 3497.480878) + B"0001_0_0000_1110111_0000000" when B"00101011", -- 234 la 233 (freq: 3520.000000) + B"0000_1_0000_1110111_0000000" when B"00101010", -- 233 la 233 (freq: 3520.000000) + B"0000_0_1000_1110111_0000000" when B"00101001", -- 232 la 232 (freq: 3542.664116) + B"0000_0_0100_1110111_0000000" when B"00101000", -- 231 la 230 (freq: 3565.474158) + B"0000_0_0100_1110111_0000000" when B"00100111", -- 230 la 230 (freq: 3565.474158) + B"0000_0_0010_1110111_0000000" when B"00100110", -- 229 la 229 (freq: 3588.431066) + B"0000_0_0001_1110111_0000000" when B"00100101", -- 228 la 227 (freq: 3611.535786) + B"0000_0_0001_1110111_0000000" when B"00100100", -- 227 la 227 (freq: 3611.535786) + B"1000_0_0000_0011111_0011111" when B"00100011", -- 226 sib 226 (freq: 3634.789270) + B"0100_0_0000_0011111_0011111" when B"00100010", -- 225 sib 225 (freq: 3658.192476) + B"0010_0_0000_0011111_0011111" when B"00100001", -- 224 sib 223 (freq: 3681.746367) + B"0010_0_0000_0011111_0011111" when B"00100000", -- 223 sib 223 (freq: 3681.746367) + B"0001_0_0000_0011111_0011111" when B"00011111", -- 222 sib 222 (freq: 3705.451914) + B"0001_0_0000_0011111_0011111" when B"00011110", -- 221 sib 220 (freq: 3729.310092) + B"0000_1_0000_0011111_0011111" when B"00011101", -- 220 sib 220 (freq: 3729.310092) + B"0000_0_1000_0011111_0011111" when B"00011100", -- 219 sib 219 (freq: 3753.321886) + B"0000_0_0100_0011111_0011111" when B"00011011", -- 218 sib 217 (freq: 3777.488284) + B"0000_0_0100_0011111_0011111" when B"00011010", -- 217 sib 217 (freq: 3777.488284) + B"0000_0_0010_0011111_0011111" when B"00011001", -- 216 sib 216 (freq: 3801.810281) + B"0000_0_0001_0011111_0011111" when B"00011000", -- 215 sib 215 (freq: 3826.288880) + B"1000_0_0000_0011111_0000000" when B"00010111", -- 214 si 213 (freq: 3850.925088) + B"1000_0_0000_0011111_0000000" when B"00010110", -- 213 si 213 (freq: 3850.925088) + B"0100_0_0000_0011111_0000000" when B"00010101", -- 212 si 212 (freq: 3875.719920) + B"0010_0_0000_0011111_0000000" when B"00010100", -- 211 si 211 (freq: 3900.674399) + B"0001_0_0000_0011111_0000000" when B"00010011", -- 210 si 209 (freq: 3925.789550) + B"0001_0_0000_0011111_0000000" when B"00010010", -- 209 si 209 (freq: 3925.789550) + B"0000_1_0000_0011111_0000000" when B"00010001", -- 208 si 208 (freq: 3951.066410) + B"0000_0_1000_0011111_0000000" when B"00010000", -- 207 si 207 (freq: 3976.506020) + B"0000_0_0100_0011111_0000000" when B"00001111", -- 206 si 205 (freq: 4002.109426) + B"0000_0_0100_0011111_0000000" when B"00001110", -- 205 si 205 (freq: 4002.109426) + B"0000_0_0010_0011111_0000000" when B"00001101", -- 204 si 204 (freq: 4027.877685) + B"0000_0_0001_0011111_0000000" when B"00001100", -- 203 si 203 (freq: 4053.811856) + B"1000_0_0000_1001110_0000000" when B"00001011", -- 202 do 201 (freq: 4079.913010) + B"1000_0_0000_1001110_0000000" when B"00001010", -- 201 do 201 (freq: 4079.913010) + B"0100_0_0000_1001110_0000000" when B"00001001", -- 200 do 200 (freq: 4106.182220) + B"0010_0_0000_1001110_0000000" when B"00001000", -- 199 do 199 (freq: 4132.620568) + B"0001_0_0000_1001110_0000000" when B"00000111", -- 198 do 198 (freq: 4159.229145) + B"0001_0_0000_1001110_0000000" when B"00000110", -- 197 do 196 (freq: 4186.009045) + B"0000_1_0000_1001110_0000000" when B"00000101", -- 196 do 196 (freq: 4186.009045) + B"0000_0_1000_1001110_0000000" when B"00000100", -- 195 do 195 (freq: 4212.961372) + B"0000_0_0100_1001110_0000000" when B"00000011", -- 194 do 194 (freq: 4240.087237) + B"0000_0_0010_1001110_0000000" when B"00000010", -- 193 do 193 (freq: 4267.387756) + B"0000_0_0001_1001110_0000000" when B"00000001", -- 192 do 191 (freq: 4294.864053) + B"0000_0_0001_1001110_0000000" when B"00000000", -- 191 do 191 (freq: 4294.864053) + B"0000_0_0000_1111111_1111111" when others; +end; diff --git a/alliance/src/documentation/alliance-examples/tuner/tuner_io.c b/alliance/src/documentation/alliance-examples/tuner/tuner_io.c new file mode 100644 index 00000000..c9b2fcfd --- /dev/null +++ b/alliance/src/documentation/alliance-examples/tuner/tuner_io.c @@ -0,0 +1,33 @@ +#include + +int main(void) +{ + int i; + + GENLIB_DEF_LOFIG("tuner"); + GENLIB_LOCON("ck", IN, "ck"); + GENLIB_LOCON("d", IN, "d"); + GENLIB_LOCON("o[0:22]", OUT, "o[0:22]"); + GENLIB_LOCON("vdde", IN, "vdde"); + GENLIB_LOCON("vddi", IN, "vddi"); + GENLIB_LOCON("vsse", IN, "vsse"); + GENLIB_LOCON("vssi", IN, "vssi"); + GENLIB_LOINS("tuner_o", "core", "ckc", "di", "oi[0:22]", "vddi", "vssi", 0); + GENLIB_LOINS("pck_sp", "pck", "ck", "cki", "vdde", "vddi", "vsse", "vssi", 0); + GENLIB_LOINS("pi_sp", "pd", "d", "di", "cki", "vdde", "vddi", "vsse", "vssi", 0); + /* outputs */ + for (i = 0; i < 23; i++) + GENLIB_LOINS("po_sp", GENLIB_NAME("po%d", i), + GENLIB_ELM("oi", i), + GENLIB_ELM("o", i), + "cki", "vdde", "vddi", "vsse", "vssi", 0); + /* Power supplies for the buffers */ + GENLIB_LOINS("pvddeck_sp", "pvdde", "ckc", "cki", "vdde", "vddi", "vsse", "vssi", 0); + GENLIB_LOINS("pvsseck_sp", "pvsse", "ckc", "cki", "vdde", "vddi", "vsse", "vssi", 0); + /* Power supplies for the core */ + GENLIB_LOINS("pvddick_sp", "pvddi", "ckc", "cki", "vdde", "vddi", "vsse", "vssi", 0); + GENLIB_LOINS("pvssick_sp", "pvssi", "ckc", "cki", "vdde", "vddi", "vsse", "vssi", 0); + + GENLIB_SAVE_LOFIG(); + exit(0); +}