Liczniki z zastosowaniem FPGA i µc Fizyka Medyczna, studia II stopnia, Dozymetria i elektronika w medycynie 1
Zliczanie impulsów Źródło impulsów Kondycjonowanie Licznik Wyświetlacz Układ czasowy 2
Liczniki Rodzaje implementacji: Układy średniej skali integracji MSI Mikrokontroler Układ FPGA 3
Przerzutnik D Q n+1 = D CLK D Q n Q n+1 0 x 0 kasowanie 1 x 1 ustawianie n+1 oznacza nstępny stan wyjścia Q tzn. po narastającym zboczu zegara 4
Przerzutnik J-K CLK J K Q n Q n+1 0 0 x Q n trzymanie 0 1 x 0 kasowanie 1 0 x 1 ustawianie 1 1 x Q n zamiana x x x Q n JK Q 0 1 00 0 1 01 0 0 11 1 0 10 1 1 Q n+1 = JQ n + K Q n 5
Przerzutnik T T CLK T Q n Q n+1 0 x Q n trzymanie 1 x Q n zamiana x x Q n T Q 0 1 0 0 1 1 1 0 Alternatywa wykluczająca Q n+1 = Q n T + Q n T = Q n T 6
Licznik asynchroniczny 1 clk T D1 clk D1 D2 00 01 10 11 00 1 T 1 T clk D1 D2 LSB MSB 7
Licznik asynchroniczny T T T T 8
Licznik synchroniczny 1 clk T D1 clk D1 D2 00 01 10 11 00 1 T T clk D1 D2 9
Licznik synchroniczny T T T T 10
Licznik - MSI Polaryzacja diod a Polaryzacja diod a f g b f g b e d c e d c g f e d c b a g f e d c b a 74x47 BCD -> 7seg 74x47 BCD -> 7seg Q A Q B Q C Q D Q A Q B Q C Q D Binary -> BCD Q A Q B Q C Q D 74x163 11
Licznik w µc Podłącz wyjście przetwornika do wejścia wychwytującego CAP2.1 układu czasowego LPC_TIM2 +3.3V U/f 3 P0.5 NXP LPC 1768 (ARM Cortex M3) Wyświetlacz graficzny Land Tiger 12
GPIO Wyświetlacz graficzny Mikrokontroler Mikrokontroler LPC 1768 DAC I2S PWM WDT ADC UART Rdzeń ARM Cortex M3 SPI CAN Ethernet DMA Impulsy wejściowe TIMER USB I2C RTC DAC Digital Analog Converter GPIO ADC Analog Digital Converter DMA UART Universal Asynchronous Receiver-Transmitter PWM CAN Controller Area Network WDT SPI Serial Peripheral Interface USB I2C Inter-Integrated Circuit I2S RTC Real Time Clock Ethernet General-Purpose Input/Output Direct Memory Access Pulse Width Modulation WatchDog Timer Universal Serial Bus Inter-IC Sound 13
Układ czasowy TIMER Cztery identyczne układy czasowe Timer/Counters. Każdy posiada dwa wejścia wychwytujące Capture oraz dwa wyjścia sygnalizacji zgodności Match. Liczniki 32-bitowe z programowalnym 32-bitowym układem wstępnego skalowania (prescaler). Dwa tryby pracy: licznik Counter lub układ czasowy Timer. Dwa kanały wychwytujące na każdy układ czasowy, tak aby możliwe było pobranie bieżącej wartości układ czasowego kiedy na wejściu wychwytującym zachodzi zmiana stanu. Cztery 32-bitowe rejestry porównujące (match registers), które umożliwiają: Ciągłą pracę układ czasowy z generacją przerwania w chwili osiągnięcia zgodności (match) zawartości układu z rejestrem porównującym, Zatrzymanie (Stop) układu czasowego w chwili osiągnięcia zgodności z(bez) generacją(i) przerwania Kasowanie (Reset) układu czasowego w chwili osiągnięcia zgodności z(bez) generacją(i) przerwania Cztery zewnętrzne wyjścia odpowiadające rejestrom porównującym o następujących akcjach gdy licznik główny osiągnie wartość przechowywaną w rejestrze porównawczym: Ustaw nisko Ustaw wysoko TIMER0 Zmień stan na przeciwny Przerwanie Nie zmieniaj stanu. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIMER1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 Impulsy wejściowe CAP2.1 TIMER2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 TIMER3 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 14
Licznik w µc TIMER0 pracuje w trybie układu czasowego wyznaczającego czas otwarcia bramki TIMER2 pracuje w trybie licznika zliczającego zbocza narastające impulsów przychodzących na wejście CAP2.1 int main (void) { uint32_t TimerInterval; SystemInit(); SystemCoreClockUpdate(); TimerInterval = SystemCoreClock; //1s lcdinit(); init_counter2_ch1(); init_timer(0, TimerInterval); while (1) { } } void TIMER0_IRQHandler (void) { int k; int del = 127; uint32_t val; LPC_TIM0->TCR = 0x0000; //stop timer LPC_TIM2->TCR = 0x0000; //stop counter LPC_TIM0->IR = 1; //clear interrupt flag val = LPC_TIM2->TC; //take current value //clear display for (k=0; k < 7; k++) printf("%c",del); //set white colour and posinion for first digit colour = LCDWhite; posx = 76; //display current value printf("%d", val); LPC_TIM2->TCR = 0x0002; //reset counter LPC_TIM2->TCR = 0x0001; //start counter LPC_TIM0->TCR = 0x0001; //start timer //set black colour and position for first digit posx = 76; colour = LCDBlack; return; } 15
LPC 1768 impulsy GND 16
Licznik - FPGA Podłącz wyjście przetwornika do wejścia licznika BCD z wyświetlaczem LCD przygotowanym na płycie FPGA. +3.3V U/f 3 V14 FPGA LCD Spartan 3AN starter kit Implementacja licznika 17
Matrycowy moduł LCD E RW RS BF Wyświetlacz LCD CG RAM DD RAM DB[7:0] Licznik Adresu Rejestr Danych BF Busy Flag znacznik zajętości magistrali Rejestr Komendy typ HD44780 18
Licznik - FPGA clk rst FPGA E RW RS DB [7:0] Sterowanie LCD 4 4 4 Licznik BCD 4 in Detektor zbocza narastającego Licznik Modulo 10 Licznik Modulo 10 Licznik Modulo 10 Licznik Modulo 10
Blok wejściowowyjściowy (I/O Block IOB) Pionowy kanał łączeniowy (Vertical Routing Channel) Konfigurowalny blok logiczny (Configurable Logic Block CLB) Element kluczujący (Switch Box - SB) Element łączący (Connection Box - CB) Poziomy kanał łączeniowy (Horizontal Routing Channel) Siatkowe FPGA składa się z matrycy konfigurowalnych bloków logiki (Configurable Logic Blocks - CLBs), z których każdy składa się z klastra podstawowych Elektroniczna Aparatura elementów Dozymetryczna, logicznych (Basic Logic Elements -BLEs)., które 20 składają się z pamięci podręcznej (Look-Up Table) iwfiis, przerzutnika AGH (Flip-Flop).
Architektura FPGA Siatkowe FPGA składa się z matrycy konfigurowalnych bloków logiki (Configurable Logic Blocks - CLBs), z których każdy składa się z klastra podstawowych elementów logicznych (Basic Logic Elements -BLEs), które składają się z pamięci podręcznej (Look-Up Table) i przerzutnika (Flip-Flop). Elementy kluczujące (Switch boxes - SB) łączą poziome i pionowe ścieżki sieci połączeniowej. Elementy łączące (Connection Boxes CB) łączą bloki logiczne CLB i bloki wejścia-wyjścia IOB z sąsiadującymi ścieżkami sieci połączeniowej. Sieć połączeniowa FPGA zajmuje 80-90% powierzchni układu. Powierzchnia logiki zajmuje 10-20%. Elastyczność FPGA zależy głównie od jego programowalnej sieci połączeniowej. Dlatego mówi się też o architekturze wyspowej wyspy logiki w morzu zasobów połączeniowych. 21
Switch Box Switch Box Connection Box Switch Box Switch Box Zasoby połączeniowe wokół jednego bloku CLB z segmentami śćieżek długości 1 22
Spartan-3AN System Gates Equivalent Logic Cells CLBs Slices Maksymalna liczba linii I/O XC3S700AN 700k 13248 1472 5888 372 V14 GND Źródło impulsów 23
Liczba CLB: n CLB = 1 472 szt. Jeden CLB składa się z czterech SLICE-ów: Liczba SLICE: n SLICE = n CLB 4 = 5 888 szt. XC3S700AN Jeden SLICE składa się z dwóch komórek logicznych LC: Liczba LC: n LC = n SLICE 2 = 11 776 szt. Równoważna komórka logiczna ELC jest obliczana ze współczynnikiem 1,125: Liczba ELC: n ELC = 1,125 n LC = 13 248 szt. Liczba bramek systemowych wynika ze skomplikowanych przeliczeń poszczególnych elementów układu na dwuwejściowe bramki NAND i ma charakter raczej marketingowy. Spartan-3AN System Gates Equivalent Logic Cells CLBs Slices Maksymalna liczba linii I/O XC3S700AN 700k 13248 1472 5888 372 24
Licznik - FPGA Model licznika modulo 10 napisany w języku Verilog `timescale 1ns / 1ps ///////////// module cnt_modulo10 (input clk, rst, en, output reg [3:0] dig_out); always @(posedge clk, posedge rst) if(rst) dig_out <= 4'b0000; else if(en) if(dig_out == 4'b1001) dig_out <= 4'b0000; else dig_out <= dig_out + 4'b0001; endmodule 25
Model RTL w HDL Synteza logiczna Przebieg konfiguracji Mapowanie technologii Klastrowanie Rozmieszczanie Wyznaczania tras połączeń Generacja strumienia bitowego strumień bitowy 26
Automatyczna synteza licznika BCD Narzędzie: Synplify 27