PULSER SETUP1: 12 pulser eller flat. PULSER SETUP2: Sinusvåg. 2,5 microsekunder, 0-100 mV. 20220905 ======== Pulser (SETUP1) och polarity=0 (omvänd) ------------------------------ Program: chiptester-pulser-polarity0.sh plotchippedsub.cpp plotchippedsub.exe Filer: event1: visar ett event. g0: gain0 lägsta gain s0: shaper0 längsta shaping p0: polarity0 s1.: jämna kanaler pulsade s2.: udda kanalar pulsade s3.: jämna och udda kanaler pulsade peaktype0: ingen top funnen peaktype1: samplar på toppen peaktype2: sampler ömse sidor om toppen ped0: pedestaler för peaktype0 ped1: pedestaler för peaktype1 ped2: pedestaler för peaktype2 Pedestaler beräknas från sample 5 till 14 innan den förväntade toppen. Denna pedestal subtraheras från toppen med: value=pedestal-adcvärde csvfiler innehåller summering av data och felkoder. kan läsas in av libreoffice, excel eller dylikt. saltro0-mcm0-c7-pedsub-event1-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-peaktype0-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-peaktype1-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-peaktype2-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-ped0-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-ped1-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-ped2-g0-s0-p0-s1.pdf saltro0-mcm0-c7-pedsub-event1-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-peaktype0-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-peaktype1-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-peaktype2-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-ped0-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-ped1-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-ped2-g0-s0-p0-s2.pdf saltro0-mcm0-c7-pedsub-event1-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-peaktype0-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-peaktype1-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-peaktype2-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-ped0-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-ped1-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-ped2-g0-s0-p0-s3.pdf saltro0-mcm0-c7-pedsub-g0-s0-p0-s1.csv saltro0-mcm0-c7-pedsub-g0-s0-p0-s2.csv saltro0-mcm0-c7-pedsub-g0-s0-p0-s3.csv Difference even odd channels Pulser och polarity=1 (standard) -------------------------------- Program: chiptester-pulser-gains.sh plotchippedsub.cpp plotchippedsub.exe Filer: event2: visar ett event. g0: gain0 12 mV/fC g1: gain1 19 mV/fC g2: gain2 15 mV/fc g3: gain3 27 mV/fC s0: shaper0 längsta shaping 120ns s1: shaper1 90 ns (ej kört) s3: shaper3 60 ns (ej kört) s7: shaper7 30 ns (ej kört) p1: polarity1 s1.: jämna kanaler pulsade s2.: udda kanalar pulsade s3.: jämna och udda kanaler pulsade peaktype0: ingen top funnen peaktype1: samplar på toppen peaktype2: sampler ömse sidor om toppen ped0: pedestaler för peaktype0 ped1: pedestaler för peaktype1 ped2: pedestaler för peaktype2 Pedestaler beräknas från sample 5 till 14 innan den förväntade toppen. Denna pedestal subtraheras från toppen med: value=adcvärde-pedestal csvfiler innehåller summering av data och felkoder. kan läsas in av libreoffice, excel eller dylikt. saltro0-mcm0-c7-pedsub-event2-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype0-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype1-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype2-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped0-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped1-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped2-g0-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-event2-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype0-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype1-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype2-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped0-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped1-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped2-g1-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-event2-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype0-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype1-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype2-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped0-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped1-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped2-g2-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-event2-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype0-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype1-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-peaktype2-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped0-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped1-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-ped2-g3-s0-p1-s3.pdf saltro0-mcm0-c7-pedsub-g0-s0-p1-s3.csv saltro0-mcm0-c7-pedsub-g1-s0-p1-s3.csv saltro0-mcm0-c7-pedsub-g2-s0-p1-s3.csv saltro0-mcm0-c7-pedsub-g3-s0-p1-s3.csv Source 1 saltro0-mcm0-c7-pedsub-event2-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype0-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype1-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype2-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped0-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped1-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped2-g0-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-event2-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype0-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype1-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype2-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped0-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped1-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped2-g1-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-event2-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype0-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype1-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype2-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped0-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped1-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped2-g2-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-event2-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype0-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype1-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-peaktype2-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped0-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped1-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-ped2-g3-s0-p1-s1.pdf saltro0-mcm0-c7-pedsub-g0-s0-p1-s1.csv saltro0-mcm0-c7-pedsub-g1-s0-p1-s1.csv saltro0-mcm0-c7-pedsub-g2-s0-p1-s1.csv saltro0-mcm0-c7-pedsub-g3-s0-p1-s1.csv Source 2 saltro0-mcm0-c7-pedsub-event2-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype0-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype1-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype2-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped0-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped1-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped2-g0-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-event2-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype0-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype1-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype2-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped0-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped1-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped2-g1-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-event2-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype0-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype1-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype2-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped0-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped1-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped2-g2-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-event2-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype0-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype1-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-peaktype2-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped0-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped1-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-ped2-g3-s0-p1-s2.pdf saltro0-mcm0-c7-pedsub-g0-s0-p1-s2.csv saltro0-mcm0-c7-pedsub-g1-s0-p1-s2.csv saltro0-mcm0-c7-pedsub-g2-s0-p1-s2.csv saltro0-mcm0-c7-pedsub-g3-s0-p1-s2.csv Pedestalkörningar ----------------- Program: chiptester-pedestals.sh plotchipped.cpp plotchipped.exe Filer: event3: visar ett event. g0: gain0 12 mV/fC g1: gain1 19 mV/fC g2: gain2 15 mV/fc g3: gain3 27 mV/fC s0: shaper0 längsta shaping p1: polarity1 csvfiler innehåller summering av data och felkoder. kan läsas in av libreoffice, excel eller dylikt. Inga pulser. saltro0-mcm0-c7-pedestal-event3-g0-s0-p1.pdf saltro0-mcm0-c7-pedestal-event3-g1-s0-p1.pdf saltro0-mcm0-c7-pedestal-event3-g2-s0-p1.pdf saltro0-mcm0-c7-pedestal-event3-g3-s0-p1.pdf saltro0-mcm0-c7-pedestal-g0-s0-p1.pdf saltro0-mcm0-c7-pedestal-g1-s0-p1.pdf saltro0-mcm0-c7-pedestal-g2-s0-p1.pdf saltro0-mcm0-c7-pedestal-g3-s0-p1.pdf saltro0-mcm0-c7-pedestal-g0-s0-p1.csv saltro0-mcm0-c7-pedestal-g1-s0-p1.csv saltro0-mcm0-c7-pedestal-g2-s0-p1.csv saltro0-mcm0-c7-pedestal-g3-s0-p1.csv noisy odd channels 20220906 ======== Bit tester med sinusvåg från pulsgeneratorn. (SETUP 2) Program: chiptester-bits.sh plotchipbits.cpp Filer: event4: visar ett event. events: är alla events adderade, frånsett adcvärden=1023. Man förväntar sig en flat fördelning med en slumpvariation mellan pulser och trigger(?). Syns en struktur. g3: gain3 27 mV/fC s0: shaper0 längsta shaping p1: polarity1 s3.: jämna och udda kanaler pulsade csvfiler innehåller summering av data och felkoder. kan läsas in av libreoffice, excel eller dylikt. Filen innehåller inget än så länge. saltro0-mcm0-c7-bits-event4-g3-s0-p1-s3.pdf saltro0-mcm0-c7-bits-events-g3-s0-p1-s3.pdf saltro0-mcm0-c7-bits-adcvalues-g3-s0-p1-s3.pdf saltro0-mcm0-c7-bits-g3-s0-p1-s3.pdf saltro0-mcm0-c7-bits-g3-s0-p1-s3.csv KVAR ==== olika shaper register test andra bitmönster i pedestalminnet? felgränser annat ?? Jonas kommenterat om tester -------------------------- Jag har tittat lite noggrannare på hur man skulle gå tillväga för att testa de digitala delarna av ett Saltro-chip. Sammanfattning: 1A: Om det är OK att köra tusentals events för att testa minnena (det kanske bara tar några sekunder?) är ett fullständigt MATS-test av pedestalminnet att föredra. 1B: Om det är för mycket kan man med ett tiotal event testa t.ex. mönstren 0x55/0xAA, 0x33/0xCC, 0x66/0x99, LFSR och dess inverser för att hitta en del fel. 2: All kontrollregister bör testas genom att skriva/läsa olika värden i dem. I de fall det är möjligt bör man även testa att varje bit i registret har avsedd funktion. 3: Det mesta av datavägen går att testa fullständigt med väl valda indatasekvenser för varje enhet. Det kan dock vara svårt att komma fram till rätt testdata. 4: Stora delar av logiken går inte att testa fullständigt. Här är en längre förklaring: ====================== Ett par designval på protoMCM gör att det är väldigt svårt (om inte omöjligt) att göra ett fullständigt test med rimlig täckningsgrad. Misstaget på protoMCM är att ni har kopplat i princip alla Saltrons testpinnar till jord. Det gör att man inte kan använda de inbyggda testresurserna som faktiskt finns i kretsen. (Scankedjan, Separation av analoga och digitala delar, mm) Med tillgång till scankedjan hade man kunnat göra ett fullständigt test av alla minnen och alla digitala delar. Nu kommer man inte åt någon isolerad enhet, och kan framför allt inte adressera minnena på sånt sätt att de är fullt testbara. De flesta minnestest kräver att man kan adressera i både uppåtgående och nedåtgående sekvens för både läsningar och skrivningar och det är såvitt jag kan se inte möjligt med varken pedestal- eller buffertminnet. Jag tror att pedestalminnet går att testa lite bättre än buffertminnet, men det är ganska mycket arbete som krävs. Det enda icke-triviala test som jag tror är möjligt för pedestalminnet är det som brukar kallas MATS, som är ett marching 1s and 0s test. MATS går till i princip så här: 0: Välj ett datamönster x, t.ex 0x55.. 1: Fyll minnet med x i alla positioner 2: Läs och verifiera x från adress 0, Skriv sedan x’ (inversen) på adress 0. 3: Upprepa 2 för alla adresser. 4: Läs till sist den sista x’ från högsta adressen, Vill man vara mer noggrann bör man som extra steg 5+6 skriva tillbaka x i alla positioner fast omvänd ordning från högsta adress till lägsta. Eftersom man inte kan läsa pedestalminnet direkt måste man trigga ett event för varje läsning, så det innebär ettusen events för att göra steg 2+3, samt ytterligare lika många för att göra steg 5+6. För att minska tiden kan man ändra antalet sampel per event under tiden man gör testet. Man behöver i varje steg inte läsa fler minnespositioner än upp till den position man nyss skrev till. Det halverar mängden data som behöver läsas, men kräver skrivning av fler register för varje steg i algoritmen, så det är svårt att räkna ut i förväg hur mycket tid man sparar. Detta enkla test har ganska stora brister. Det hittar ”stuck-at” fel och vissa fel i adress- avkodningen, men kan missa ”stuck-open”-fel, och det hittar inga ”transition”-fel eller kopplingsfel (När flera intilliggande bitar påverkar en bit). Med steg 5+6 hittar man dubbelt så många adresseringsfel som med bara 2+3. Om man har tid kan man köra om testet två gånger till för x=0x33.. samt 0x66.. för att eventuellt hitta några kopplingsfel mellan bitar inuti ett dataord. Det finns betydligt bättre tester som inte har särskilt mycket längre testtid, men de kräver att man kan göra även utläsning i vilken adressekvens man vill, och det är ju inte möjligt. Jämfört med det enklare MATS-testet ovan måste man antagligen inst fördubbla testtiden för ett mer heltäckande test. Alternativet till dessa tusentals events för att testa pedestalminnet är att bara fylla minnet med t.ex. 0x55../0xAA.. på jämna respektive udda adresser och läsa ut ett event, för att sen invertera testmönstret och läsa ett nytt event. Problemet är att man nästan inte hittar något adresseringsfel alls. Lägger man till ytterligare sekvenser med data 0x33../0xCC.. samt 0x66…/0xCC.. ökar man feltäckningen något genom att hitta en del kopplingsfel, men fortfarande väldigt få addresseringsfel. Ett par events med ett LFSR-mönster och dess invers kan hitta vissa addresseringsfel, men feltäckningen är inte särskilt god och är dessutom svår att analysera. Buffertminnet är betydligt svårare att testa ordentligt eftersom man inte alls kan bestämma ordningen på varken läsningar eller skrivningar, och inte heller läsa ut en del av en buffert som man inte har skrivit till (för att konstatera att den är oförändrad). Det bästa man kan göra är väl att konstatera att det inte finns stuck-at-fel ifall ovanstående test för pedestalminnet fungerar. Men man bör kanske köra minst fyra fulla events för varje testmönster (t.ex 0x55/0xAA) för att testa alla delbuffrarna. Det man kan testa ganska enkelt är alla styr- och kontrollregister. Man bör åtminstone skriva och läsa tillbaka olika datamönster och deras inverser i kretsens samtliga styrregister för att se att registren i sig själv inte har stuck-at-problem. Man bör helst också testa att varje bit har avsedd funktion, även om det i de flesta fall kommer att vara svårt. Vad gäller resten av logiken är den betydligt svårare att testa när man inte har direkt tillgång till varje enhets in- och utsignaler. Speciellt gäller det de första få stegen efter ADCerna eftersom man inte har ett bra sätt att få dit känd indata. Det kan ju t.ex vara fel i en carrykedja i IIR-filtret. Det är oerhört svårt att hitta när man inte kan isolera ett blocks alla ingångar och läsa utsignalen direkt. Det som följer efter ”first baseline correction” (Digital shaper, zero suppression, mm) bör gå att testa ganska grundligt genom att använda pedestalminnet som känd indata. (Det gäller även vissa delar av ”first baseline correction”-blocket självt) Men det räcker inte att köra några events med ett par olika inställningar utan man måste nog fokusera på en enhet åt gången och tänka efter hur den ska testas. Man skulle kunna tänka sig att de som designade kretsen en gång i tiden har tillgång till indatasekvenser som kan testa alla ingående delar i datavägen. De skulle kunna vara till hjälp. Jag vet inte om de finns dokumenterade någonstans? Bussar och kommunikation med FPGAn kan väl anses vara fullt testade om man får förväntade resultat av ovanstående tester.