ČESKÉ
VYSOKÉ
Fakulta
UČENÍ
TECHNICKÉ
elektrotechnická
Analyzátor sběrnice CAN diplomová
práce
Roman Knížek
PRAHA
2002
Souhlasím s využitím výsledků Diplomové práce Fakultou elektrotechnickou ČVUT a zároveň prohlašuji, že jsem předloženou Diplomovou práci včetně příloh vypracoval samostatně a uvedl v ní veškerou použitou literaturu.
V Praze, dne 25. 1. 2002 Roman Knížek
Děkuji Ing. Jiřímu Novákovi, PhD. za pomoc a čas věnovaný vedení mé diplomové práce a své rodině za podporu při studiu.
Controler Area Network (CAN) is serial communacation protocol, which was originally developed by the company BOSH for automobil industry. It is projected to enable to provide distributed control of systems in the real time at the speed of 1 Mbit/s with high security from error transmisson. This thesis deals with an analyzer project for the monitoring of the proces on the bus CAN at level of the link protocol according to CAN specification 2.0B. The analyzer is based on hardware support of Programmable Logic Device (PLD) and communication with controlling computer (PC) by means of perspective interface Universal Serial Bus (USB).
Controller
Area Network (CAN) je sériový komunikační protokol, který byl
původně vyvinut firmou BOSCH pro nasazení v automobilovém průmyslu. Je navržen tak, aby umožnil provádět distribuované řízení systémů v reálném čase s přenosovou rychlostí do 1 Mbit/s, s vysokým zabezpečením přenosu proti chybám. Tato Diplomová práce se zabývá návrhem analyzátoru pro monitorování dějů na sběrnici CAN na úrovni linkového protokolu podle CAN specifikace 2.0B. Analyzátor je založen na hardwarové podpoře hradlovým polem a komunikaci s řídícím počítačem (PC) pomocí perspektivního rozhraní Universal Serial Bus (USB).
OBSAH
1. Úvod
1
1.1
Motivace
2
1.2
Očekávané vlastnosti analyzátoru
2
1.3
Uspořádání kapitol
3
1.4
Konvence
3
2. Sběrnice CAN a další 2.1 Controller Area Network (CAN) 2.1.1 Základní vlastnosti 2.1.2 Fyzická vrstva 2.1.3 Linková vrstva 2.1.4 Způsoby zabezpečení a detekce chyb 2.1.5 Signalizace chyb 2.1.6 Zprávy linkového protokolu
5 6 6 6 7 7 8 8
2.2 Hradlová pole 2.2.1 Základní časové parametry 2.2.2 Architektura hradlového pole ACEX 1K
11 11 12
2.3
13
Integrované návrhové prostředí EMAX+plus II a jazyk AHDL
2.4 Rozhraní Universal Serial Bus (USB) 2.4.1 Topologie USB 2.4.2 Přenos dat 2.4.3 Napájení funkčních jednotek 2.4.4 Přenosová rychlost USB 2.4.5 Připojení funkční jednotky ke sběrnici. 3. Design analyzátoru v hradlovém poli
15 15 16 17 17 17 18
3.1 Blokové schéma 3.1.1 Výhody hierarchického přístupu 3.1.2 Dekompozice CAN analyzátoru
19 19 20
3.2 Funkce obvodů CAN analyzátoru 3.2.1 Obvod Bit Destuffing (BDE) 3.2.2 Obvod Cyclic Redundancy Check (CRC) 3.2.3 Obvod Main Timer (MTR) 3.2.4 Obvod Real Time Counter (RTC) 3.2.5 Obvod Bit Counter (BIC) 3.2.6 Obvod Bus Idle (BID) 3.2.7 Obvod Data Read Unit (DRU) 3.2.8 Obvod CAN Main Loop (CML) 3.2.9 Obvod CAN End Loop (CEL) 3.2.10 Obvod CAN Err Loop (CRL) 3.2.11 Obvod Main Counter (MCT) 3.2.12 Obvod Main Start Unit (MSU) 3.2.13 Obvod SYNC 3.2.14 Obvod Input Trigger (INT) 3.2.15 Obvod Startup Unit (SUU)
20 20 23 25 28 29 30 32 35 40 42 45 51 57 57 59
OBSAH
3.2.16 3.2.17
Obvod Output Trigger (OUT) Obvod Write To FIFO (WTF)
62 63
3.3 CAN analyzátor jako virtuální součástka 3.3.1 Schéma zapojení CAN analyzátoru 3.3.2 Realizace drátového součtu hradlovým polem 3.3.3 Popis signálů CAN analyzátoru 3.3.4 Pracovní model CAN analyzátoru
68 68 70 70 71
3.4 Periferie CAN analyzátoru 3.4.1 Obvod pro řízení paměti – DRAM driver (DRD) 3.4.2 Obvod Intercom (ITC)
72 73 80
3.5
82
Závěrečná podoba návrhu v hradlovém poli
4. Hardwarový návrh analyzátoru
83
4.1 Implementace v hradlovém poli 4.1.1 Rámcový výběr obvodu 4.1.2 Zlepšování časových parametrů návrhu 4.1.3 Návrh analyzátoru 4.1.4 Programovatelné pole ACEX EP1K50-208-1 4.1.5 Programování obvodu ACEX 1K
84 84 84 85 85 85
4.2 Obvody pro řízení a komunikaci 4.2.1 Jednočipový mikropočítač SCENIX SX52BD 4.2.2 Jednočipový mikropočítač AT89C52 4.2.3 PDIUSBD12 – zařízení rozhraní USB
86 86 87 88
4.3 Blokové uspořádání hardware analyzátoru 4.3.1 Blok zdrojů 4.3.2 Konfigurační přepínače 4.3.3 Budič sběrnice CAN 4.3.4 Blok vstupního a výstupního triggeru 4.3.5 Blok signalizace 4.3.6 SX52BD 4.3.7 AT89C52 4.3.8 Konfigurační svorkovnice 4.3.9 Blok programování obvodu ACEX 4.3.10 Blok rozhraní USB 4.3.11 Zdroje hodinového kmitočtu
88 89 90 90 90 90 91 91 91 92 92 92
4.4
92
Deska plošných spojů
5. Software
93
5.1
Ovladač zařízení USB s obvodem PDIUSBD12
94
5.2
Firmware procesoru AT89C52
94
5.3
Firmware procesoru SX52BD
96
6. Datové toky v CAN analyzátoru
97
6.1
Datový tok naměřených dat
98
6.2
Zápis do vnitřní vyrovnávací paměti CAN analyzátoru
99
OBSAH
6.3
Zápis do paměti DRAM
6.4
Přenos dat z paměti DRAM do PC
99 100
7. Závěr
101
8. Literatura
103
Příloha A
105
Příloha B
II
Příloha C
II
Příloha D
II
Příloha E
II
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
1 Kapitola
Úvod Kapitola 1 předkládá základní přehled o předmětu diplomové práce, důvody které vedly k jejímu zadání a některé souvislosti, které jejímu zadání předcházely. Jsou zde nastíněny vlastnosti, které bychom od analyzátoru sběrnice očekávali. V závěru je uvedeno rozvržení kapitol a konvence.
1. Úvod
Ú V O D
1.1 Motivace Myšlenka na konstrukci analyzátoru sběrnice CAN vznikla na Katedře měření před téměř dvěma roky. Hlavním důvodem je, že průmyslově vyráběné řadiče sběrnice CAN jsou konstruovány jako inteligentní a umožňují pouze omezenou signalizaci chybových stavů, a tedy i omezené sledování sběrnice na úrovni linkového protokolu. Přibližně ve stejné době začíná tehdejší firma Scenix Semiconductors, Inc. (dnešní Ubicom, Inc.) nabízet nový levný jednočipový mikropočítač SCENIX s architekturou s redukovanou instrukční sadou (RISC) a výkonem až 50 MIPS (miliónů instrukcí za sekundu). Byl zadán semestrální projekt, jehož cílem byla realizace analyzátoru ve formě zásuvné ISA karty pro PC, pouze na bázi výše zmíněného procesoru. Výsledkem projektu byl funkční analyzátor, který umožňoval stavovou analýzu sběrnice CAN na úrovni linkového protokolu až do přenosové rychlosti 250 kbit/s. Měření reálného času, přidělování časových značek událostem, resynchronizace a možnost sledovat bitové rychlosti nad 250 kbit/s již překračovaly možnosti použitého procesoru. Závěrem tedy bylo, že realizace analyzátoru v souladu se specifikací CAN 2.0B čistě softwarovou cestou není s použitým procesorem možná a bude nutné využít hardwarové podpory. Na základě výše uvedených poznatků bylo formulováno zadání této Diplomové práce.
1.2 Očekávané vlastnosti analyzátoru Základní filozofie analyzátoru je velmi jednoduchá a je patrná z obrázku Obr. 1. Jedná se o zařízení, které se v libovolném místě a v libovolném okamžiku (tzn. nejsou kladeny žádné požadavky na stav sběrnice před připojením analyzátoru) připojí na sběrnici CAN, monitoruje veškeré děje a předává výsledky ke zpracování do počítače typu PC. Formát předávaných dat je takový, aby bylo možno zrekonstruovat provoz na sběrnici včetně časových souvislostí. Jako komunikační kanál mezi analyzátorem a PC bylo vybráno perspektivní rozhraní Universal Serial Bus (USB), které je kompromisem mezi mobilitou celého zařízení a požadavky na přenosovou rychlost. Požadavky na vlastnosti analyzátoru lze shrnout do následujících bodů: • Schopnost připojení na sběrnici za plného provozu • Úplná implementace linkového protokolu podle CAN specifikace 2.0B [1]
2
Ú V O D
• Hodiny reálného času schopné generovat časové značky k událostem (chyby, triggery a další relevantní informace důležité pro analýzu) • Detekce všech stavových chyb a chyb synchronizace • Asynchronní vstupní trigger (vloží do naměřeného souboru dat časovou značku vnějšího trig. pulsu) • Programovatelný výstupní trigger (při naprogramované události generuje na výstupu puls – např. pro spuštění osciloskopu nebo log. analyzátoru) • Provoz v režimu reálného času (Real-Time), kdy jsou naměřená data ihned přenášena do PC a vyhodnocována • Provoz v režimu ukládání dat do vyrovnávací paměti
Zařízení 1
Zařízení 2
Zařízení 3
Zařízení n
Sběrnice CAN RZ
RZ
CAN analyzátor
USB
PC
Obr. 1: Filozofie CAN analyzátoru
1.3 Uspořádání kapitol Nejnutnější obecné informace nutné pro praktický návrh analyzátoru jsou uvedeny v kapitole 2 (sběrnice CAN, architektura hradlových polí, vývojové prostředí a sběrnice USB). Vlastním návrhem se zabývá nejrozsáhlejší kapitola 3. V následující kapitole je pak popsán hardware analyzátoru a závěrečná kapitola se věnuje programovému vybavení.
1.4 Konvence • Pokud je to možné a vhodné, názvy použitých signálů, stavů, procedur a proměnných odpovídají stejným názvům použitých ve zdrojových souborech.
3
Ú V O D
• Specifikace sběrnice CAN definuje dvě navzájem komplementární logické úrovně (kapitola 2.1.2), které nazývá dominant a recessive. Bez újmy na obecnosti zaveďme pro účely různé formy popisu a zobrazení úrovní signálů následující rovnosti: dominant = dominantní = log 0 = 0 = GND recessive = recesivní = log 1 = 1 = Vcc • Schematické značky obvodů CAN analyzátoru v kapitole 3, mají na levé straně vždy vstupní signály a výstupní signály na straně pravé. Příklad je na obrázku Obr. 1.
VSTUP 1
VÝSTUP 1
VSTUP 2
VÝSTUP 2
VSTUP 3
PRIKLAD_ OBVODU
Obr. 2: Příklad umístění vstupních a výstupních signálů ve schematické značce obvodu
4
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
2 Kapitola
Sběrnice CAN a další V kapitole 2 jsou uvedeny všechny potřebné pojmy, které je nezbytné uvést dříve, než se pustíme do vlastního návrhu CAN analyzátoru. První část je věnována sběrnici CAN, zejména vlastnímu linkovému protokolu. V další části je přiblížena architektura programovatelných logických polí. Následuje představení prostředí EMAX+plus II a jazyka AHDL, použitého pro návrh. Závěr je věnován rozhraní USB.
2. Sběrnice CAN a další
S B Ě R N I C E
C A N
A
D A L Š Í
2.1 Controller Area Network (CAN) CAN je sériový komunikační protokol, který byl původně vyvinut firmou Bosch pro nasazení v automobilovém průmyslu. Vzhledem ke svým dobrým vlastnostem, mezi které patří především spolehlivost, vysoká přenosová rychlost, snadná rozšiřitelnost a nízká cena, dochází k stále častějšímu využívání tohoto protokolu i v jiných průmyslových aplikacích. Specifikace CAN 2.0A popisuje pouze linkovou vrstvu protokolu CAN. Je ale součástí normy ISO 11898, která již fyzickou vrstvu popisuje. Aplikační vrstva je definována v několika standardech (CANopen, DeviceNet), které jsou vzájemně nekompatibilní. Později došlo k rozšíření původní specifikace – vzniká tak Specifikace CAN 2.0B, která je předmětem této Diplomové práce. 2.1.1 Základní vlastnosti CAN umožňuje distribuované řízení systémů v reálném čase s přenosovou rychlostí do 1Mbit/s a vysokým stupněm zabezpečení přenosu proti chybám. Jedná se o protokol typu multi-master, kde každý uzel sběrnice může být master a řídit tak chování jiných uzlů. Zvyšuje se tím spolehlivost (při poruše jednoho uzlu může zbytek sítě pracovat dál). Pro řízení přístupu k médiu je použita sběrnice s náhodným přístupem, která řeší kolize na základě prioritního rozhodování. Zprávy přenášející informace po sběrnici jsou uvozeny identifikátorem, který udává význam zprávy a její prioritu. Neobsahují tedy žádnou adresu cílového uzlu a jsou přijímány všemi uzly, které jsou připojeny ke sběrnici. Nejvyšší prioritu má zpráva s identifikátorem 0. V případě kolize zpráv je přednostně doručena zpráva s vyšší prioritou. Na základě identifikátoru je možné zajistit filtrování zpráv a uzel tak bude přijímat pouze ty zprávy, které se ho týkají. 2.1.2 Fyzická vrstva CAN specifikace 2.0B neklade žádné konkrétní požadavky na fyzickou vrstvu. Definuje pouze dvě vzájemně komplementární hodnoty bitů na sběrnici dominant a recessive, které představují obecné ekvivalenty logických úrovní. Hodnoty těchto úrovní nejsou určeny a záleží na konkrétní realizaci fyzické vrstvy. Pro úroveň na sběrnici platí tato pravidla: • Jestliže všechny uzly vysílají hodnotu recessive, je na sběrnici hodnota recessive. • Jestliže alespoň jeden z uzlů vysílá hodnotu dominant, je na sběrnici hodnota dominant. Více o fyzické vrstvě například v [15].
6
S B Ě R N I C E
C A N
A
D A L Š Í
2.1.3 Linková vrstva Linková vrstva protokolu je definována Specifikací CAN 2.0B a je tvořena dvěma podvrstvami: • MAC (Medium Access Control) zajišťuje přístup k fyzické vrstvě (provádí kódování dat, řízení přístupu s rozlišením priorit zpráv, vkládání bitů, detekce a hlášení chyb a potvrzování korektně přijatých zpráv). • LLC (Logical Link Control) provádí filtrování přijatých zpráv a hlášení o přetíženích. 2.1.4 Způsoby zabezpečení a detekce chyb Protokol CAN definuje několik mechanismů, které zabezpečují přenos dat po sběrnici. Tyto mechanismy jsou v činnosti současně. • Monitorování sběrnice. Vysílající uzel porovnává hodnotu právě vysílaného bitu se skutečnou úrovní na sběrnici. Jsou-li hodnoty rozdílné, vygeneruje chybovou zprávu. Neplatí to ve dvou částech vysílaného rámce. První je oblast identifikátoru (Arbitration Field), kde probíhá řízení přístupu na sběrnici. V tomto případě, detekuje-li vysílající uzel na sběrnici jinou hodnotu než vysílá (to může být pouze tehdy, vysílá-li recessive a na sběrnici je dominant), musí okamžitě přerušit vysílání – znamená to, že na sběrnici vysílá jiný uzel správu s vyšší prioritou (ta tím nebude vzhledem k vlastnostem fyzické vrstvy nijak poškozena). Druhá oblast je potvrzení přijetí zprávy (ACK bit). • CRC kód. Každá zpráva obsahuje na konci 15 bitový CRC kód, který je generován ze všech předchozích bitů zprávy. Jestliže libovolný uzel detekuje chybu CRC, je generována chybová zpráva. • Vkládání bitů (Bitstuffing). Jestliže se vysílá na sběrnici po sobě 5 bitů stejné úrovně, je vložen (navíc) bit úrovně opačné. Tento mechanismus slouží nejen k detekci chyb, ale i k synchronizaci jednotlivých uzlů. Jestliže je porušeno pravidlo vkládání bitů, je generován chybový rámec. • Formální kontrola zprávy. Kontroluje se, zda vysílaná zpráva má formát shodný se specifikací. Jestliže je na nějakém bitu detekována nesprávná hodnota, je vygenerován chybový rámec. • Potvrzení přijetí zprávy (Acknowledge) – je-li zpráva korektně přijata libovolným uzlem, je to potvrzeno změnou hodnoty jednoho bitu (ACK) zprávy. Vysílač vždy na tomto bitu vysílá recesivní úroveň a detekuje-li dominantní úroveň, je vše v pořádku. V opačném případě vysílá chybový rámec. Potvrzování přijetí zprávy je prováděno všemi uzly připojenými ke sběrnici.
7
S B Ě R N I C E
C A N
A
D A L Š Í
2.1.5 Signalizace chyb Každý uzel interně počítá množství chyb při příjmu a vysílání. Podle množství těchto chyb pak uzel může být: • Aktivní (Error Active) – může se aktivně podílet na komunikaci na sběrnici a v případě detekce libovolné chyby vysílá aktivní příznak chyby (6 dominantních bitů, které poruší pravidlo vkládání bitů a poškodí přenášenou zprávu). • Pasivní (Error Passive)- také se podílí na komunikaci, ale v případě detekce chyby vysílají pouze pasivní příznak chyby (6 recesivních bitů, které přenášenou zprávu neporuší) • Odpojené (Bus-off) – tyto uzly sběrnici nijak neovlivňují. Uzel může být přepnut do stavu Bus-off, pokud generuje příliš mnoho chyb. 2.1.6 Zprávy linkového protokolu Specifikace CAN 2.0B definuje 4 typy zpráv (rámců). Dvě jsou určeny pro datovou komunikaci (datová zpráva a žádost o data) a dvě k jejímu řízení (chybová zpráva a žádost o prodlevu v komunikaci). Datová zpráva (Data Frame) Má dvě varianty – standardní (Standard Frame) a rozšířená (Extended Frame). Podstatný rozdíl je pouze v identifikátoru, kdy pro Standard Frame má délku 11 bitů a pro Extended Frame 29 bitů. Vysílání datové zprávy může začít pouze tehdy, je-li sběrnice volná. Pak může libovolný uzel začít vysílat. Jestli získá sběrnici pro sebe záleží na prioritě identifikátoru zprávy, kterou vysílá (viz. monitorování sběrnice). Standardní datový rámec Potvrzení
Délka datové oblasti
0 - 8 bajtů dat
CRC
CRC součet 15 bitů
ACD
Datová oblast
ACK
IDE
RTR
SOF
Identifikátor zprávy 11 bitů
Řídící oblast
ERC
Řízení přístupu na sběrnici
R0
Volná sběrnice
Konec rámce
Mezera mezi rámci
Rozšířený datový rámec Řízení přístupu na sběrnici
R0
R1
Identifikátor zprávy 11 bitů
Řídící oblast
RTR
IDE
Identifikátor zprávy 11 bitů
SRR
SOF
Volná sběrnice
Datová oblast
Délka datové oblasti
Obr. 3: Standardní a rozšířený datový rámec
8
S B Ě R N I C E
C A N
A
D A L Š Í
Na obrázku Obr. 3 jsou znázorněny oba dva typy datových rámců. Rozšířený rámec je zobrazen pouze zčásti, neboť od délky datové oblasti je shodný se standardním. Význam bitů je následující: • SOF (Start Of Frame) - začátek rámce, 1 dominantní bit. • Standardní identifikátor zprávy ID11 – 11 bitů, udává význam přenášené zprávy. 1. bit je nejvýznamnější. • Rozšířený identifikátor zprávy ID18 – 18 bitů, méně významných 18 bitů (z celkem 29) identifikátoru rozšířeného rámce. • RTR/SRR (Remote Request / Substitute Remote Request) po ID11 – 1 bit. Bit následující po standardním identifikátoru má dva významy. Ve standardním rámci jej označujeme RTR a je příznakem, zda se jedná o datovou zprávu (dominantní hodnota), nebo o žádost o vyslání dat (recesivní hodnota). V rozšířeném rámci je označen jako SRR a má vždy recesivní hodnotu. Tím je zajištěno, že při vzájemné kolizi standardního a rozšířeného rámce se stejným 11 bitovým identifikátorem, získá přednost standardní rámec. Bit RTR udávající, zda se jedná o datovou zprávu nebo o žádost o data, je v rozšířeném rámci přesunut až za konec druhé části identifikátoru. • IDE (Idetifier Extended) – 1 bit, dominantní pro standardní rámec, recesivní pro rozšířený rámec. • R1, R0 – rezervované bity. Podle specifikace by měly být vysílány jako dominantní, ale při příjmu akceptovány v obou úrovních. • Délka datové oblasti (Data Field) – 4 bity, počet přenášených datových bajtů ve zprávě. Povolené hodnoty jsou 0-8. • Datová oblast (Data Field) – nejméně 0 a nejvýše 8 datových bajtů. Jsou vysílány od nejvíce významného bitu. • CRC kód – 15 bitů CRC součtu. CRC součtem je zajištěna celá oblast od SOF až po poslední datový bit. • ERC – oddělovač CRC součtu – 1 dominantní bit. • ACK – bit potvrzení, 1 bit (viz. 2.1.4). • ACD – oddělovač potvrzení ACK – 1 recesivní bit. • Konec rámce (End Of Frame) – 7 recesivních bitů. • Mezera mezi rámci (Interframe Space, IF) – slouží k oddělení zpráv, 3 recesivní bity. V případě, že uzel čeká na vyslání zprávy protože se právě vysílá jiný rámec, mů-
9
S B Ě R N I C E
C A N
A
D A L Š Í
že zahájit přístup ke sběrnici nejdříve po druhém bitu Interframe Space. Třetí IF bit tedy již může být SOF. Žádost o data (Remote Frame) Formát žádosti o data je obdobný jako formát datové zprávy. Žádost o data je signalizována recesivní úrovní příslušného bitu RTR (viz. předchozí odstavec) a chybí datová oblast. Identifikátor udává typ zprávy, jejíž zaslání je požadováno. Bit RTR v datové zprávě má dominantní úroveň. Datová zpráva se stejným identifikátorem jako žádost o data má tedy vyšší prioritu. To je výhodné v situaci, kdy jeden uzel žádá o data s nějakým identifikátorem a jiný uzel je zrovna vysílá. Chybová zpráva (Error Frame) Chybový rámec (Obr. 4) generuje libovolný uzel ihned, jakmile detekuje v přenášené zprávě nějakou chybu (chyba vkládání bitů, chyba rámce, chyba CRC). Příznak chyby může být buď pasivní nebo aktivní (viz. kapitola 2.1.5). Při generování aktivního příznaku chyby (6 dominantních bitů) je přenášená zpráva poškozena (je porušeno pravidlo vkládání bitů), a tedy i ostatní uzly začnou vysílat chybové zprávy. Výsledný chybový rámec je potom dán superpozicí všech chybových příznaků, které vysílají jednotlivé uzly. Délka této oblasti může být 6 – 12 bitů.
Chybová zpráva
Datový rámec nebo Oddělovač chyb nebo Oddělovač zprávy o přetížení
Chybový příznak
Chybový oddělovač
Mezera mezi rámci nebo zpráva o přetížení
Superpozice chybových příznaků
Obr. 4: Chybový rámec
Po vyslání svého chybového příznaku vysílá každá stanice na sběrnici recesivní bity a zároveň detekuje stav sběrnice. Jakmile najde první bit na sběrnici také recesivní, vysílá dalších 7 recesivních bitů jako chybový oddělovač. Zpráva žádosti o přetížení (Overload Frame) Tato zpráva slouží k oddálení vyslání další datové zprávy nebo žádosti o data. Tento způsob využívají zařízení, která nejsou schopna kvůli svému vytížení přijímat a zpracovávat další zprávy. Struktura zprávy je formálně stejná jako struktura chybového rámce z obrázku Obr. 4. Místo chybového příznaku máme příznak přetížení (6 dominantních bitů), místo superpozice chybových příznaků superpozici příznaků přetížení
10
S B Ě R N I C E
C A N
A
D A L Š Í
(pokud jsou generovány více uzly současně) a chybový oddělovač bude nahrazen oddělovačem zprávy o přetížení (8 recesivních bitů). Úplný popis Specifikace CAN 2.0B je v [1].
2.2 Hradlová pole Použití hradlových polí přináší celou řadu výhod. Mezi nejpodstatnější patří flexibilita (s absencí diskrétních součástek spočívá změna v návrhu pouze ve změně programu jedné součástky), výkon (integrování více obvodů do jednoho), cena (zvláště u složitých systémů) a v neposlední řadě vývojové prostředky (integrovaná návrhová prostředí zjednodušují práci při návrhu – jedno takové je popsáno v kapitole 2.3). 2.2.1 Základní časové parametry Jedním z nejdůležitějších kritérií při výběru programovatelného pole pro návrh systému jsou časové parametry. Na obrázku Obr. 5: Časové parametry programovatelných obvodů jsou shrnuty základní časové parametry důležité při praktickém návrhu. Jejich význam je uveden v tabulce Tab. 1.
Vstup tS
tH
Hodinový signál
Signály tCO
D Q
Kombinační logika
>
D Q >
Hodiny
Registrovaný výstup
tSCS tPD
Kombinační výstup
Obr. 5: Časové parametry programovatelných obvodů
Parametr
Název
Popis
tPD
Propagation delay
Zpoždění mezi vstupem a výstupem způsobené kombinační logikou.
tS
Setup time
Minimální doba ustáleného signálu na vstupu registru před příchodem hrany hodinového signálu.
tH
Hold time
Minimální doba ustáleného signálu na vstupu registru po příchodu hrany hodinového signálu.
tCO
Clock-to-output-delay
Zpoždění platné hodnoty na registrovaném výstupním pinu součástky za hranou hodinového signálu (výstup registru je přímo připojen na výstupní pin)
tSCS
System clock to clock delay
Doba šíření signálu z výstupu jednoho registru na vstup druhého registru. Převrácená hodnota určuje maximální použitelný hodinový kmitočet.
Tab. 1: Časové parametry programovatelných obvodů 11
S B Ě R N I C E
C A N
A
D A L Š Í
Obr. 6: Architektura obvodu ACEX 1K
2.2.2 Architektura hradlového pole ACEX 1K Architektura obvodu ACEX 1K je znázorněna na obrázku Obr. 6 (zdroj obrázku: [5]) . Programovatelný obvod ACEX obsahuje velké množství logických elementů (Logic Element, LE). Jejich konkrétní počet závisí na typu součástky. Logické elementy jsou uspořádány do větších logických bloků (Logic Array Block, LAB). Logické bloky jsou uspořádány do řádků a sloupců. Každý řádek obsahuje také jedno zabudované pole RAM (Embedded Array Block, EAB) o kapacitě 4096 bitů, které je možné využít k implementaci mnoha typů pamětí (RAM, ROM, FIFO atd), ale i kombinační logiky. Logické bloky a zabudovaná pole RAM jsou mezi sebou propojena soustavou propojovacích kanálů (FastTrack Interconnect). Propojovací kanály rozdělují vnitřní strukturu na řádky (Row Interconnect) a sloupce (Column Interconnect). Jednotlivé signálové cesty jsou mezi sebou propojeny multiplexy . I/O elementy (IOE) jsou umístěny na jejich koncích. Každý obsahuje programovatelný registr, pomocí kterého je možné dosáhnout krátkých výstupních časů tCO. Součástka je vybavena 6 vyhrazenými vstupy. Tyto vstupy jsou určeny pro globální signály jako CLK, RESET, ENABLE apod. V propojovací struktuře je jim vyhrazena speciální vrstva, ve které je zaručeno minimální zpoždění.
12
S B Ě R N I C E
C A N
A
D A L Š Í
Logické elementy (LE) Je to nejmenší prvek pro implementaci logické funkce. Každý logický element obsahuje tzv. LUT (Look-up Table). LUT umožňuje realizovat jakoukoliv funkci se 4 vstupy. Dále obsahuje pomocné prvky pro aritmetické a logické operace, které využívají speciální komunikační kanály mezi logickými elementy stejného logického bloku (viz. dále). Jedná se o tzv. Carry-chain, podporující implementaci vysokorychlostních čítačů a sčítaček a Cascade-chain umožňující implementaci mnohovstupých logických funkcí s minimálním zpožděním. Logické bloky (LAB) Oproti standardní architektuře typu FPGA nejsou jednotlivé logické elementy propojeny přímo, ale jsou sdruženy po osmi do logických bloků. Tím se zlepšují časové parametry a snižují potíže s přímým propojováním mnoha elementů. Logické elementy jsou v logickém bloku propojeny lokálním propojovacím polem (Local Interconnect). Logické bloky jsou propojeny pouze řádkovým kanálem. Z toho plyne, že v situaci, kdy je třeba propojit logické elementy z rozdílných řad, dochází k velkému zpoždění signálu. Více o hradlových polích ACEX v [5].
2.3
Integrované návrhové prostředí EMAX+plus II a jazyk AHDL EMAX+plus II EMAX+plus II je komplexní vývojové prostředí od firmy Altera pro návrh všech rodin programovatelných logických obvodů této firmy. Jeho nejpodstatnější vlastnosti lze shrnout do následujících bodů: • Podpora hierarchického návrhu. • Možnost návrhu designu několika metodami (jazyk AHDL, VHDL, pomocí grafického rozhraní). • Možnost funkční i časové simulace. Takto je možné provést prakticky celý návrh pouze „na papíře“ • Obsahuje tzv. Floorplan Editor, který umožňuje provádět ručně změny prostorového uspořádání návrhu v konkrétním hradlovém poli. • Součástí je i Timing Analyser, který umožňuje výpočet maximálního použitelného hodinového kmitočtu pro konkrétní návrh a konkrétní hradlové pole a výpočet zpoždění signálových cest.
13
S B Ě R N I C E
C A N
A
D A L Š Í
Jazyk AHDL Pro návrh byl zvolen jazyk AHDL. AHDL (Altera Hardware Description Language) je modulární jazyk, plně integrovaný v prostředí EMAX+ plus II. Je vhodný zejména pro návrh komplexních kombinačních funkcí a stavových automatů. Návrháři dává k dispozici množství konstrukcí potřebných pro popis chování složitých systémů. Struktura programu vytvářeného v jazyce AHDL je obdobná struktuře jiných vyšších programovacích jazyků (Pascal, C apod.). Základní rámcová struktura každého návrhu vypadá takto: include "design.inc";
-- připojení modulu nebo funkce
SubDesign name
-- název designu
( signaly : typ;
-- definice vstupů a výstupů návrhu
) Variable datovy objekt : typ; Begin
-- definice promennych -- začátek výkonné části programu
konstrukce kombinacni logiky; konstrukce sekvencni logiky; End;
-- konec výkonné části programu
Datový objekt. Jazyk AHDL nabízí celou řadu (několik desítek) datových objektů, které nazývá Primitive. Ty představují základní stavební kameny celého návrhu. Jedná se například o různé klopné obvody (DFF, DFFE, JKFF, SRFF), základní logické struktury (AND, OR, NAND…), třístavové buffery (TRI) apod. Megafunkce. Jsou velmi silným nástrojem jazyka AHDL. Do návrhu se vkládají direktivou INCLUDE a představují nový datový typ. Prakticky představují zapouzdřené komplexní logické bloky realizující definovanou funkci. Altera nabízí celou řadu funkcí, které jsou součástí instalace. Takto je možné přímo vložit do návrhu různé paměti (FIFO, RAM, ROM), složité kombinační obvody (komparátory, multiplexery, násobičky) apod. Vlastní návrh těchto obvodů zůstává pro programátora skryt a přistupuje k nim pouze pomocí jejich vstupů a výstupů. Konstrukce kombinační logiky. Prvky pro konstrukci kombinační logiky jsou obdobné jiným programovacím jazykům jedná se zejména o prosté přiřazení (proměnná = hodnota) a podmínkové konstrukce if …then … else …a case …is …when ….Jazyk také podporuje vytváření kombinační logiky pomocí pravdivostních tabulek. Konstrukce sekvenční logiky. Nejvýznamnějším nástrojem (a v návrhu analyzátoru hojně používaným) jsou stavové automaty. Struktura stavového automatu vypadá takto: 14
S B Ě R N I C E
C A N
A
D A L Š Í
case var_automatu is when stav_1 => konstrukce kombinacni logiky; when stav_2 => konstrukce kombinacni logiky; ......... when stav_n => konstrukce kombinacni logiky; end case;
Úplný popis jazyka AHDL a vývojového prostředí EMAX+plus II lze nalézt například v [2] a [10].
2.4 Rozhraní Universal Serial Bus (USB) USB je sériový komunikační protokol s přenosovou rychlostí do 12 Mb/s a s možností připojení až 127 zařízení. Jeho významnou předností je fakt, že je v současné době prakticky standardním vybavení počítačů typu PC. Jedná se o protokol typu master-slave, kdy se počítač (USB host) periodicky (1 ms) dotazuje jednotlivých USB zařízení, zda mají nějaká data k přenosu nebo zda mohou nějaká data přijmout. 2.4.1 Topologie USB USB vytváří několikaúrovňovou hvězdicovou strukturu. Středem každého hvězdicového propojení je rozdělovač (Hub) a jednotlivé propojovací segmenty. Ty mohou spojovat buď počítač (USB host), který obsahuje centrální rozdělovač s funkčními jednotkami (myš, klávesnice, modem) a rozdělovači na vyšší úrovni, nebo rozdělovač s funkčními jednotkami a rozdělovači na nižší úrovni. Celá situace je znázorněna na obrázku Obr. 7. Každé USB zařízení má svojí USB adresu a podporuje několik koncových jednotek
HOST
HUB 1
HUB 2
HUB 3
F.J.
Vrstva 1
F.J.
HUB 4
F.J.
F.J.
F.J.
F.J.
Vrstva 2
F.J.
F.J.
Obr. 7: Topologie USB
Vrstva 3
Vrstva 4
15
S B Ě R N I C E
C A N
A
D A L Š Í
(Endpoints). Endpoint s číslem 0 musí mít každé zařízení a je určené pro kontrolní přenosy (viz. dále). Prakticky to znamená, že USB zařízení může komunikovat s PC po několika nezávislých duplexních kanálech. 2.4.2 Přenos dat Pro veškerou komunikaci mezi počítačem a funkční jednotkou jsou k dispozici tři typy paketů. Výměna začíná tím, že počítač vyšle tzv. token packet, který obsahuje informace o typu a směru výměny dat, adresu USB zařízení a číslo endpointu. Velikost (ve smyslu datové kapacity) příslušného endpointu udává maximální počet dat, které je možné přenést v rámci jedné datové výměny. Potom příslušné oslovené zařízení, které má vysílat data, vyšle datový paket nebo signalizuje, že žádná data nemá k dispozici. Přijímací strana na závěr vyšle tzv. handshake packet, kterým informuje, zda přenos proběhl úspěšně. USB rozeznává 4 typy datových přenosů: • Kontrolní přenosy (Control Transfers). Tyto přenosy jsou využívány pro konfiguraci funkčních jednotek při jejich prvním připojení. Jedná se o zabezpečený přenos a data mají definovanou strukturu. Za tímto účelem je využíván endpoint 0 připojené funkční jednotky, který je pro tyto účely vyhrazen. Po připojení je počítačem (USB host) vyčten deskriptor funkční jednotky a je tak získán její úplný popis (počet endpointů, jejich velikost, typ funkční jednotky atd.). • BULK přenosy (Bulk Transfers). Tento typ přenosů je určen pro relativně velké objemy přenášených dat. Jedná se o zabezpečený přenos a data mají definovanou strukturu. Prostor věnovaný BULK přenosům je ale závislý na dalších přenosech, a není tak zaručen čas potřebný pro přenos. Velikost bulk endpointu může být 8, 16, 32 nebo 64 bajtů. • Přenosy s přerušením (Interrupt Transfers). Jsou určeny pro přenos malých objemů dat (typicky několik bajtů), které jsou periodicky vysílány (změna polohy myši). Přenos je zabezpečený, data mají definovanou strukturu a čas pro přenos je zaručený. Perioda může být v rozsahu 1 – 255 ms. Maximální velikost interrupt endpoint může být 64 bajtů • Izochronní přenosy (Isochronous Transfer). Jedná se o čistý tok dat, jejichž struktura není definována. Přenos těchto dat není zabezpečen. Maximální velikost izochronního endpointu může být 1023 bajtů. Pro kódování dat je použit kód NRZI, jedná-li se o zabezpečený přenos, je jištěn CRC součtem a vkládáním bitů.
16
S B Ě R N I C E
C A N
A
D A L Š Í
2.4.3 Napájení funkčních jednotek USB může s komunikací zajišťovat i napájení funkčních jednotek. S následujícími parametry: • Jedná-li se o výkonové připojení (High-Power-Port), může funkční jednotka odebírat proud až 500 mA (ovšem ne bezprostředně po připojení, nýbrž až poté, co proběhla její konfigurace – do té doby pro ní platí následující pravidla) • V případě běžného připojení (Low-Power-Port) může funkční jednotka odebírat maximálně 100 mA. • Dále musí platit, že zařízení napájená z USB musí podporovat režimy se sníženou spotřebou. V takovém režimu mohou odebírat ze sběrnice maximálně 0.5 mA. • Pokud zařízení tyto požadavky nesplňuje, musí být vybaveno vlastním zdrojem. 2.4.4 Přenosová rychlost USB Jsou definovány dvě verze. High Speed s přenosovou rychlostí do 12 Mbit/s a Low Speed s rychlostí do 1,5 Mbit/s. Obě verze se liší propojovacími kabely. Kabely jsou čtyřvodičové (D+, D-, +5V a GND), pro 12Mbit/s musí být vodiče zkrouceny, kabel musí být stíněný a jeho max. délka je 5 m. Pro 5 Mbit vodiče zkrouceny být nemusí, kabel nemusí být stíněný a maximální délka je 3 m. Při uvažování maximální přenosové rychlosti je třeba vzít v úvahu, že jedno připojení sdílí více periferií současně, takže reálná přenosová rychlost bude nižší. Navíc je zde ještě omezení, že žádné zařízení nesmí překročit přenosovou rychlost 6 Mbit/s. Této rychlosti lze také využít pouze tehdy, pokud součty přenosových rychlostí všech ostatních zařízení nepřesáhnou také 6Mbit/s. 2.4.5 Připojení funkční jednotky ke sběrnici. Rozhraní funkčních jednotek jsou doplněna zakončovacími odpory. Vodiče D+ (pro High Speed) a D- (pro Low Speed) jsou přivedeny přes rezistory 1,5 kΩ na napětí 3,6V. Při připojení a odpojení kabelu vzniká na příslušné svorce (podle typu zařízení) odpovídající přechodový děj, na základě kterého je identifikováno připojení nebo odpojení USB zařízení a jeho typ (z hlediska přenosové rychlosti). Více o sběrnici USB například v [8] a [14].
17
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
3 Kapitola
Design analyzátoru v hradlovém poli Tato kapitola postupně popisuje hierarchický design CAN analyzátoru v hradlovém poli a tvoří stěžejní část Diplomové práce. V úvodu je představeno orientační blokové schéma CAN analyzátoru. Jednotlivé bloky tohoto schématu jsou definovány a podrobně popsány jako samostatné dílčí obvody. Tyto obvody jsou poté propojeny a je představeno detailní schéma CAN analyzátoru v kontrastu s hrubým blokovým schématem načrtnutým v úvodu. Vzniká tak zapouzdřená fiktivní součástka, kterou nazveme CAN analyzátor. V závěru je CAN analyzátor doplněn ještě o dvě periferie - Řízení paměti DRAM a Komunikační rozhraní. Propojením těchto obvodů je návrh analyzátoru v hradlovém poli ukončen.
3. Design analyzátoru v hradlovém poli
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.1 Blokové schéma V souladu s úvodníkem k této kapitole zaveďme nejdříve konvenci, že pokud nebude výslovně uvedeno jinak, budeme termínem CAN analyzátor označovat strukturu definovanou na obrázku Obr. 8. Připomeňme také odkaz na značení logických úrovní v kapitole 1.4.
CLK MAIN COUNTER
ENABLE
BUS IDLE
REAL TIME COUNTER
BIT COUNTER
RESET
CAN MAIN LOOP STARTUP UNIT
D
MAIN START UNIT
DATA READ UNIT
WRITE TO FIFO Q
CAN END LOOP
INPUT TRIGGER
MAIN TIMER
CAN ERR LOOP OUTPUT TRIGGER
INTRIG
OUTTRIG CLK BIT DESTUFFING
SYNC INPUT
CYCLIC REDUNDANCY CHECK
CAN_BUS
Obr. 8: Blokové schéma CAN analyzátoru
3.1.1 Výhody hierarchického přístupu Dekompozice problému na jednotlivé logicky oddělené dílčí části, jejich samostatné řešení a následná syntéza do konečného jednotného celku jsou základní prvky používané při hierarchickém návrhu, což je přirozený proces pro lidské myšlení při řešení složitých problémů. Rozdělení CAN analyzátoru do jednotlivých bloků vede k přehlednosti celého návrhu. Umožňuje rovněž snadnější odhalení chybného chování a pružnější testování a simulaci. V neposlední řadě nelze opominout ani dobu potřebnou pro překlad celého designu a simulaci, která při rozsáhlejších projektech i při výkonech dnešních počítačů zabere několik minut.
19
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.1.2 Dekompozice CAN analyzátoru Na obrázku Obr. 8 je zobrazeno blokové schéma CAN analyzátoru, ve kterém jsou, zatím pouze v hrubých rysech, patrné signálové toky mezi jednotlivými obvody. Bílá šipka představuje synchronizovaný signál sběrnice CAN a šipka černá signál reprezentující odebraný vzorek bitu pro stavovou analýzu. Všechny obvody CAN analyzátoru jsou synchronizovány globálním signálem CLK nebo signály z něho odvozenými, což je nezbytná podmínka pro jejich korektní spolupráci. Kromě zmíněného vstupu CLK jsou dalšími vstupy globální signály RESET a ENABLE sloužící pro restart a povolení funkce CAN analyzátoru. Dále signál vlastní analyzované sběrnice CAN a signál vstupního triggeru INTRIG. Pro zápis do konfiguračních registrů je k dispozici osmibitový datový vstup (do obvodu STARTUP UNIT) s příslušnými řídícími signály. Výstupy představuje osmibitový datový výstup pro předávání výsledků analýzy (z obvodu WRITE TO FIFO) s příslušnými řídícími signály a signál výstupního triggeru OUTTRIG. Pohled na CAN analyzátor z hlediska jeho vstupů a výstupů představuje nejvyšší stupeň v hierarchii návrhu, postavený na nižších stupních tvořených jednotlivými obvody a jejich částmi. Na každý takový obvod budeme pohlížet jako na samostatný funkční celek a přiřadíme mu schematickou značku znázorňující jeho vývody. Tyto značky pak v závěru využijeme k sestavení detailního schématu celého CAN analyzátoru. Nyní si jednotlivé obvody popišme.
3.2 Funkce obvodů CAN analyzátoru 3.2.1 Obvod Bit Destuffing (BDE) Jeden z mechanismů zabezpečení přenosu dat na sběrnici CAN je mechanismus vkládání bitů (Bitstuffing), který zajišťuje, že na sběrnici se může vyskytnout nejvýše pět bitů po sobě jdoucích stejné logické úrovně a poté musí následovat šestý, vložený, bit úrovně opačné. Není-li šestý bit opačné úrovně než pět předchozích, jedná se o chybu bitstuffingu (viz. kapitola 2.1.4). Obvod BDE generuje na svých výstupech signály definující stav právě přijatého bitu z pohledu mechanismu vkládání bitů: zda se jedná o bit vložený nebo zda se jedná o chybu bitstuffingu a v jaké logické úrovni. Stavový automat obvodu BDE Funkce obvodu BDE je realizována stavovým automatem, jehož přechodový graf je na obrázku Obr. 9. Činnost automatu lze shrnou v následujících bodech: 20
D E S I G N
A N A L Y Z Á T O R U
BDRES start
1
V
H R A D L O V É M
P O L I
0
0 1 BD11
BD01 0
1 0
1
BD12
BD02 0
1 1
0 BD13 1
BD03 0
1
BD14
BD04
1 BD15
0
1 0
0
1
BD06
BD16
RECESSIVE_ERR
1
BD05 0
1 BDSER stop
0
0
STUFF_BIT
BDSED stop
DOMINANT_ERR
Obr. 9: Přechodový graf stavového automatu obvodu BDE
• Po restartu obvodu se automat nachází ve stavu BDRES. Je-li následující bit recesivní, automat přechází do stavu BD11 v levé větvi grafu (analogicky pro dominantní bit přejde automat do stavu BD01 v prvé části grafu). • Pro následující čtyři recesivní, resp. dominantní, bity prochází automat postupně stavy BD12 - BD15, resp. stavy BD02 - BD05. Bude-li některý z těchto čtyř bitů dominantní, resp. recesivní, přejde automat do stavu BD01 v pravé větvi grafu, resp. BD11 v levé větvi. • Obdrží-li automat ve stavu BD15, resp. BD05, recesivní, resp. dominantní, bit, přechází do stavu BDSER, resp. BDSED a signalizuje chybu vkládání bitů v recesivní, resp. dominantní, úrovni. Tyto stavy jsou konečné a automat (obvod BDE) musí být pro další činnost restartován.
21
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
• Jestliže bude bit ve stavu BD15, resp. BD05, dominantní, resp. recesivní, přechází automat do stavu BD06, resp. BD16, a signalizuje vložený bit. • Ze stavu BD06 přechází automat v případě recesivního bitu do stavu BD11, v případě dominantního do stavu BD02 (stav BD06 zde supluje stav BD01). Ze stavu BD16 pro dominantní bit přejde automat do stavu BD01 a pro recesivní do stavu BD12 (v tomto případě supluje stav BD16 stav BD11).
CLK_RUN
RESET
CAN_DATA
STUFF_BIT
RECESSIVE_ERR DOMINANT_ERR BD04
BD05
BD16
BD01
BD02
BD03
BD04
BD05
BDSED
BDSED
BDRES
Obr. 10: Příklad činnosti automatu obvodu BDE
Na obrázku Obr. 10 se automat právě nachází ve stavu BD04. Znamená to, že na sběrnici je čtvrtý dominantní bit v řadě. Protože i pátý bit je dominantní, musí být šestý vložený, opačné úrovně. Splnění této podmínky indikuje signál STUFF_BIT (stav BD16). Následuje pět dominantních bitů (stavy BD01 – BD05). Šestý bit je ale také dominantní, což znamená chybu vkládání bitů v dominantní úrovni a automat přechází do stavu BDSED, kde setrvá až do restartu obvodu. Tento stav indikuje signál DOMINANT_ERR. Popis signálů obvodu BDE Schematická značka obvodu BDE je na obrázku Obr. 11 a význam jednotlivých vývodů se zdroji signálů je uveden v tabulce Tab. 2.
STUFF_BIT
RESET ENABLE ENA2
RECESSIVE_ERR DOMINANT_ERR
CLK_RUN CAN_DATA BIT_DESTUFFING
Obr. 11: Schematická značka obvodu BDE
22
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Název vývodu
Aktivní úroveň
Zdroj signálu
Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu. Nutný pro znovuspuštění stavového automatu po detekci chyby vkládání bitů.
ENABLE
Vcc
Vnější
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENA2 Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK_RUN
Náběžná hrana
MTR
CAN_DATA
-
MCT
STUFF_BIT
Vcc
Výstup
RECESSIVE_ERR
Vcc
Výstup
DOMINANT_ERR
Vcc
Výstup
Hodiny pro stavový automat s periodou rovnou bitové rychlosti CANu. Udávají platnost vzorku sběrnice CAN_DATA pro vyhodnocení Navzorkovaný bit odebraný z CAN sběrnice v okamžiku SAMPLE_POINT (kap. 3.2.11) musí být platný před příchodem náběžné hrany CLK_RUN Signál, že právě vyhodnocený bit je bit vložený. Generuje puls o šířce rovné jedné periodě CLK_RUN Signál chyby vkládání bitů v recesivní úrovni. Šířka pulsu je daná dobou do restartu obvodu Signál chyby vkládání bitů v dominantní úrovni. Šířka pulsu je daná dobou do restartu obvodu
Tab. 2: Popis vývodů obvodu BDE
3.2.2 Obvod Cyclic Redundancy Check (CRC) Výpočet cyklického redundandního kódu patří mezi další způsoby zabezpečení přenosu dat na sběrnici CAN. Obvod CRC provádí výpočet CRC podle algoritmu uvedeném v [1]. Za tímto účelem zavádí 15-ti bitový posuvný registr CRC_RG[14..0] pro vlastní výpočet CRC a jednobitový pomocný registr CRCNXT. Registr CRC_RG[14..0] také představuje jediný výstup obvodu.
RESET
CRC[14...0]
ENABLE ENA2 CLK RUN CAN_DATA CYCLIC_REDUNDANCY_CHECK
Obr. 12: Schematická značka obvodu CRC
23
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Celý algoritmus řeší jednoduchý stavový automat. Výpočet (včetně testu na platnost navzorkovaných dat) trvá 4 TCLK (periody hodinového synchronizačního signálu). Schematická značka obvodu je na obrázku Obr. 12, algoritmus činnosti obvodu na obrázku Obr. 13 a tabulka s popisem vývodů a zdroji signálů pro obvod CRC je tabulka Tab. 3. NE
Jsou navzorkována data?
RUN RUN
ANO
CRCNXT = CAN_DATA XOR CRC_RG[14]; NE
CAN_DATA CAN_DATA CRC_RG[14..1] = CRC_RG[13..0]; CRC_RG[0] = 0;
Je rovno CRCNXT jedné? ANO CRC_RG[14..0] = CRC_RG[14..0] XOR H"4599";
CRC[14..0] CRC[14..0]
Obr. 13: Algoritmus činnosti obvodu CRC
Název vývodu
Aktivní úroveň
Zdroj signálu
Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu.
ENABLE ENA2
Vcc Vcc
Vnější MSU
Pro povolení funkce obvodu musí být aktivní i ENA2
CLK
Náběžná hrana
Vnější
RUN
Vcc
MTR
CAN_DATA
-
MCT
Hodinový synchronizační signál s periodou TCLK = 20ns Příznak platnosti vzorku CAN_DATA (spuštění výpočtu CRC pro navzorkovaný bit) Navzorkovaný bit dat z CAN sběrnice
CRC[14..0]
-
Výstup
Pro povolení funkce obvodu musí být aktivní i ENABLE
15 bitů aktuálního stavu výpočtu CRC (výstup registru CRC_RG[14..0]
Tab. 3: Popis vývodů obvodu CRC
24
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.2.3 Obvod Main Timer (MTR) Protože všechny obvody v CAN analyzátoru pracují paralelně, je třeba zajistit, že úlohy, které mají být kauzálně spojeny (i přesto, že příslušné obvody spolu nijak propojeny nejsou) budou vykonány ve správném pořadí. Typickým příkladem je posloupnost odebrání vzorku dat ze sběrnice, test na vkládání bitů (obvod BDE), výpočet CRC (obvod CRC) a stavová analýza odebraného vzorku (obvod CML). Aby nemusely být tyto obvody vzájemně propojeny a testovat svoje stavy, a zejména z důvodů přehlednějšího a pružnějšího návrhu, byl navržen obvod MTR. Funkcí obvodu MTR je generovat spouštěcí signály pro vybrané obvody CAN analyzátoru v definovaném pořadí a s definovaným zpožděním tak, aby všechny požadované operace byly vykonány ve správném sledu. Obvod MTR také zaručuje dostatečný předstih dat na vstupech obvodů před příchodem hrany hodinového pulsu – například dostatečný předstih signálu CAN_DATA před jeho vyhodnocením v obvodu BDE (kapitola 3.2.1).
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu. V případě detekce chyby vkládání bitů je nutno obvod pro obnovení činnosti restartovat.
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns.)
RUN
Vcc
MCT
Spouštěcí signál tohoto obvodu MTR. Časově je totožný s okamžikem odebrání vzorku dat CAN_DATA (puls o šířce 1 TCLK).
CAN_DATA
-
MCT
Navzorkovaný bit dat z CAN sběrnice
STUFF_BIT
Vcc
BDE
Příznak, že právě hodnocený bit je bit vložený
RECESSIVER_ERR
Vcc
BDE
Příznak, že právě hodnocený bit vyvolal chybu vkládání bitů v recesivní úrovni
DOMINANT_ERR
Vcc
BDE
Příznak, že právě hodnocený bit vyvolal chybu vkládání bitů v dominantní úrovni
RUN_BIT_ DESTUFFING_UNIT
Vcc
Výstup
Hodiny automatu obvodu BDE – spustí test na vkládání bitů
RUN_CRC_UNIT
Vcc
Výstup
Spouštěcí signál pro obvod (puls o šířce 1 TCLK)
RUN_CAN_MAIN_LOOP
Vcc
Výstup
Spouštěcí signál pro obvod CML (puls o šířce 1 TCLK)
Tab. 4: Popis vývodů obvodu MTR
25
D E S I G N
NE
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Byla navzorkována data? ANO
RUN
Generuj spouštěcí signál pro obvod BDE
Zpoždění 1Tclk Zpoždění (DFF) 1Tclk (DFF)
RUN_BIT DESTUFFING_UNIT
Zpoždění 1Tclk RECESSIVE_ERR
OR
DOMINANT_ERR
Nastala chyba vkládání bitů?
ANO
STOP čekej na restart
NE
Jedná se o vložený bit?
ANO
NE STUFF_BIT
Generuj spouštěcí signál pro obvod CRC RUN_CRC_UNIT Zpoždění 1Tclk Zpoždění (DFF) 1Tclk (DFF)
Zpoždění 4 Tclk
Generuj spouštěcí signál pro obvod CML RUN_CAN_MAIN_LOOP_UNIT Zpoždění 1Tclk Zpoždění 1Tclk
Obr. 14: Algoritmus činnosti obvodu MTR
26
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Činnost obvodu je znázorněna na obrázku Obr. 14. Prakticky jí realizuje stavový automat, který je (stejně jako všechny ostatní automaty v návrhu CAN analyzátoru) synchronizován globálním signálem CLK. Takto lze snadno realizovat zpoždění o velikosti n TCLK pouhým přechodem z jednoho stavu do n stavů dalších, ve kterých se jinak nevykonávají žádné funkce.
CLK CLK
STUFF_BIT RECESSIVE_ERR DOMINANT_ERR
Stavový automat
DFF
RUN_BIT_DESTUFFING_UNIT
CLK DFF
RUN_CRC_UNIT
CLK DFF
RUN_CAN_MAIN_LOOP
Obr. 15: Struktura obvodu MTR
Z uspořádání obvodu na obrázku Obr. 15 je patrné, že spouštěcí signály jsou synchronizovány klopným obvodem typu D (DFF), který způsobuje, že signály jsou od okamžiku generování automatem zpožděny na výstupu o 1 TCLK. Obvod začíná svou činnost čekáním na spouštěcí signál, který obdrží ve stejném okamžiku, kdy je odebrán ze sběrnice CAN vzorek bitu pro analýzu tzv. Sample Point. Od tohoto okamžiku začíná stavová analýza právě navzorkovaného bitu. Obvod MTR nejdříve vygeneruje spouštěcí signál pro obvod BDE (bude zpožděný o TCLK) a čeká další TCLK na dokončení činnosti tohoto obvodu. V případě, že obvod BDE zjistí chybu vkládání bitů, stavový automat obvodu končí svoji činnost a čeká na restart (další obvody stavové analýzy nejsou spuštěny). Detekuje-li BDE vložený bit, přechází automat do výchozího stavu a čeká na vzorek dalšího bitu. Pokud ani jedna z uvedených podmínek nenastane, znamená to, že je bit platný a MTR vygeneruje signál pro spuštění obvodu CRC (ten bude opět zpožděný o TCLK). Následující 4 TCLK čeká na dokončení výpočtu CRC. Po jeho dokončení vygeneruje řídící signál pro obvod CML, který realizuje vlastní stavovou analýzu zpráv sběrnice CAN (kapitola 3.2.8). Schematická značka obvodu je na obrázku Obr. 16 a popis vývodů a zdrojů signálů v tabulce Tab. 4.
27
D E S I G N
RESET ENABLE ENA2 CLK RUN STUFF_BIT RECESSIVE_ERR DOMINANT_ERR
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
RUN_BIT_DESTUFFING_UNIT RUN_CRC_UNIT RUN_CAN_MAIN_LOOP_UNIT
MAIN_TIMER
Obr. 16: Schematická značka obvodu MTR
3.2.4 Obvod Real Time Counter (RTC) Jednou z požadovaných vlastností analyzátoru, tak jak jsme je definovali v kapitole 1.2, je schopnost měření reálného času. Tuto funkci zastává obvod RTC, jehož struktura je na obrázku Obr. 17.
CLK 2
32x DFF
32
Komparátor
OVERLOAD
Sčítačka
1
Obr. 17: Uspořádání obvodu RTC
Prakticky ji tvoří 32 bitový volně běžící čítač (signál povolení není implementován protože absolutní hodnoty času pro nás nejsou důležité), který je vytvořen pomocí klopných obvodů typu D (DFF) a sčítačky. S každou náběžnou hranou hodinového signálu CLK je obsah čítače inkrementován (zvětšen o jedničku). Čítač čítá od 0 až do hodnoty 232 - 1, poté dojde k přetečení a čítá znovu od nuly. Po dosažení komparační hodnoty 232 vygeneruje komparátor puls o šířce 1 TCLK (signál OVERLOAD) jako příznak přetečení čítače. Signál OVERLOAD je potom využit pro zápis této události do vyrovnávací paměti CAN analyzátoru (viz. kapitola 3.2.17). Pro hodinový kmitočet fCLK = 50 MHz dostáváme dobu do přetečení čítače přibližně 85 sekund s rozlišením 20 ns.
28
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Schematická značka obvodu je na obrázku Obr. 18 a popis vývodů a zdrojů signálů v tabulce Tab. 5.
RESET
RTIME[31...0]
CLK
OVERLOAD
REAL_TIME_COUNTER
Obr. 18: Schematická značka obvodu RTC
Název vývodu Aktivní úroveň Zdroj signálu Popis RESET
Vcc
MSU, Vnější
Vynuluje čítač RTC
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
OVERLOAD
-
Výstup
Signál přetečení čítače RTC – puls o šířce 1 TCLK
RTIME[31..0]
-
Výstup
32 bitů aktuálního stavu čítače RTC
Tab. 5: Popis vývodů obvodu RTC
3.2.5 Obvod Bit Counter (BIC) Kromě časových značek, které nám ve finále umožní generovat obvod RTC popsaný v kapitole 3.2.4, bude třeba pro doplnění informace k některým zprávám přidat ještě číslo bitu, ve kterém příslušná událost nastala. Počítání bitů v jednotlivých datových rámcích od začátku SOF (jak je definuje kapitola 2.1) je úkolem obvodu BIC, jehož schematická značka je na obrázku Obr. 19. Z návrhového hlediska má obvod obdobnou strukturu jako výše popsaný obvod RTC, signály a jejich zdroje jsou zcela odlišné. Čítač je pouze osmibitový, protože nejdelší datový rámec sběrnice CAN nebude mít délku větší než 160 bitů. Obvod nemá komparátor. Hodinový vstup čítače tvoří signál odvozený od okamžiku snímání vzorku bitu ze sběrnice (Sample Point). Čítač je tedy inkrementován a bit započítán v okamžiku, kdy je vzorkován. Popis signálů a jejich zdrojů je v tabulce Tab. 6.
RESET
COUNT_OF_BITS[7...0]
ENABLE ENA2 CLK_RUN BIT_COUNTER
Obr. 19: Schematická značka obvodu BIC
29
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
MSU, Vnější
Vynuluje čítač BIC
ENABLE
Vcc
Vnější
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENA2 Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK_RUN
Náběžná hrana
Vnější
COUNT_OF_BITS[7..0] -
Hodinový signál čítače BIC odvozený od okamžiku vzorkování bitu (Sample Point) s periodou rovnou šířce jednoho bitu 8 bitů udávající binární číslo právě vyhodnocovaného bitu
Výstup
Tab. 6: Popis vývodů obvodu BIC
3.2.6 Obvod Bus Idle (BID) Podle kapitoly 1.2 nemáme na stav sběrnice před připojením analyzátoru žádné požadavky a je třeba aby byl analyzátor před začátkem analýzy schopen nalézt okamžik Bus Idle (stav, kdy je sběrnice považována za volnou, resp. kdy je v klidovém stavu). K potřebě detekovat Bus Idle může dojít i kdykoliv v průběhu analýzy v případě některých chyb, kdy není již možné dále o sběrnici předpokládat, že přenáší smysluplné informace. Vyhodnocení podmínky Bus Idle Stav Bus Idle je reprezentován recesivní logickou úrovní na sběrnici. Pojďme nyní nalézt nejmenší počet bitů recesivní úrovně, které musejí být vysílány za sebou na sběrnici aby mohla být detekována podmínka Bus Idle.
IFS
IFS
EOF
EOF
EOF
EOF
EOF
EOF
EOF
ACD
ACK
ERC
SOF
BUS IDLE
10 recesivních bitů
Obr. 20: Detekce Bus Idle
Z formátu zpráv sběrnice CAN uvedených v kapitole 2.1 plyne, že každý datový rámec (ať již standardní nebo rozšířený) končí oddělovačem ACD a koncem rámce EOF, který je tvořen sedmi recesivními bity. I v případě plně vytížené sběrnice musejí následovat ještě nejméně dva recesivní bity Interframe Space (IFS, mezirámcové mezery). V případě, že byl na sběrnici vysílán Error Frame (chybový rámec) nebo Overload Frame (rámec přetížení), jsou oba tyto rámce zakončeny oddělovačem tvořeným osmi recesivními bity (a ještě nejméně dvěma recesivními bity IFS).
30
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Ze situace znázorněné pro datový rámec na obrázku Obr. 20, je zřejmé, že minimální počet recesivních po sobě následujících bitů pro určení podmínky Bus Idle je deset. Stejné to je i v případě rámců Overload Frame a Error Frame. Stačí tedy sledovat sběrnici a pokud se na ní někde nejméně po dobu deseti bitů vyskytne recesivní úroveň (což musí, pokud na ní probíhá smysluplná komunikace), lze prohlásit, že známe její stav a začít analýzu. Struktura obvodu BID Uspořádání obvodu BID je na obrázku Obr. 21. Obvod obsahuje dva čítače s komparátory. 18 bitový čítač je určen pro definování Bit Time (doby vysílání jednoho bitu). Jeho komparační hodnotu (tedy dobu vysílání jednoho bitu) představuje vstupní signál BIT_TIME[17..0]. Po dosažení této hodnoty komparátor na dobu 1 TCLK uvolní signálem bic_ena[3..0] čítání 4 bitového čítače, který je takto inkrementován, a současně je 18 bitový čítač vynulován.
CAN_BUS Blok logiky if not CAN_BUS then res = Vcc else res = GND end if;
CLK
CLK res
BIT_TIME[17..0]
18 bitový čítač
4 bitový čítač
Komparátor
Komparátor
bic_ena[3..0]
BUS_IDLE
10
Obr. 21: Struktura obvodu BID
4 bitový čítač je určený pro počítání bitů, po jejichž dobu byla na sběrnici recesivní úroveň. Jeho komparační hodnota je 10. Po dosažení této hodnoty je splněna podmínka pro Bus Idle tak, jak byla definována výše a komparátor generuje jako příznak volné sběrnice signál BUS_IDLE. 4 bitový čítač zůstává až do restartu na hodnotě 10, je tedy neustále splněna komparační podmínka, a po celou tuto dobu je aktivní i signál BUS_IDLE.
31
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Restart čítačů realizuje blok logiky z obrázku Obr. 21. Podle uvedených podmínek dochází k restartu obou čítačů je-li na sběrnici (signál CAN_BUS) dominantní úroveň.
RESET
BUS_IDLE
CLK CAN_BUS BIT_TIME[17...0] BUS_IDLE
Obr. 22: Schematická značka obvodu BID
Prakticky to znamená, že je-li na sběrnici recesivní úroveň oba čítače čítají. Pokud se v libovolném okamžiku po libovolně krátký čas (který je ale vždy dán násobky TCLK neboť signál CAN_BUS je synchronní – kapitola 3.2.13) na sběrnici vyskytne dominantní úroveň, oba čítače jsou restartovány až do okamžiku než se na sběrnici objeví recesivní úroveň. Takto je zajištěno, že se kontroluje recesivní úroveň skutečně po celou dobu odpovídající době vysílání deseti bitů a nikoliv recesivní úroveň deseti bitů (snímaná pouze jednou v okamžiku vzorkování). Schématická značka obvodu BID je na obrázku Obr. 22 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 7.
Název vývodu
Aktivní úroveň
Zdroj signálu
Popis
RESET
Vcc
MSU, Vnější
Uvede obvod do výchozího stavu
CLK
Vcc
Vnější
CAN_BUS
-
SYNC
Hodinový synchronizační signál s periodou TCLK (20ns) Synchronizovaný signál sběrnice CAN (viz. kapitola 3.2.13)
BIT_TIME[17..0]
-
SUU
BUS_IDLE
Vcc
Výstup
Komparační hodnota přímo definující bitovou rychlost sběrnice CAN Signalizuje splnění podmínky Bus Idle
Tab. 7: Popis vývodů obvodu BID
3.2.7 Obvod Data Read Unit (DRU) V některých případech je nezbytné kromě výsledků stavové analýzy do naměřeného souboru dat přímo vložit blok dat ze sběrnice CAN. Například při zápisu datové oblasti rámce nebo při zápisu CRC součtu. Aby se touto činností nemusely zabývat obvody stavové analýzy, byl navržen obvod DRU.
32
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Funkcí obvodu DRU je na základě Sample Point (okamžik odebrání vzorku bitu ze sběrnice) shromažďovat naprogramovaný počet po sobě jdoucích bitů, kvantovat je do skupin po čtyřech bitech (viz. formát naměřených dat v příloze B) a generovat signály pro další obvody, které umožní zápis těchto dat do vnitřní vyrovnávací paměti CAN analyzátoru (WTF – kapitola 3.2.17).
CLK
COMP_WR COMP_INP[6..0]
CLK
prd_compare[6..0] Programovatelný registr (7 x DFFE)
7 bitový čítač načtených bitů
Komparátor
RUN
(7 x DFFE) prd_equal
CLK
prd_sh_res
Stavový automat DTAINP
prd_shift[4..0]
CLK
Posuvný registr (5 x DFFE)
RUN CAN_BUS
prd_shift[4..0]
DTAOUT[8..0]
Obr. 23: Struktura obvodu DRU
NE Je splněna podmínka A? ANO
Zapiš data DTAOUT[8..0]
Jsou načteny všechny bity?
ANO
prd_equal
STOP ukonči činnost a vygeneruj signál ukončení
DONE
NE
NE
prd_shift[4]
Je plný posuvný registr?
ANO
Restartuj posuvný registr prd_sh_res
Obr. 24: Algoritmus stavového automatu obvodu DRU
33
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Obvod DRU, jehož struktura je na obrázku Obr. 23, tvoří programovatelný registr prd_compare[6..0] pro zápis počtu bitů, které budou čteny. Maximální počet bitů, které může obvod DRU přečíst, je tedy 27. K zápisu slouží signál COMP_WR. Komparátor porovnává tuto cílovou hodnotu se 7 bitovým čítačem skutečně přečtených bitů. Výstupem komparátoru je signál prd_equal, který je příznakem rovnosti obou hodnot a znamená tedy, že byl načten požadovaný počet bitů. Kvantování načítaných bitů do čtveřic zajišťuje 5 bitový posuvný registr, který je po restartu signálem prd_sh_res přednastaven na binární hodnotu ´00001´. Načítané bity (CAN_DATA) jsou postupně rotovány doleva a příznak naplnění posuvného registru je signalizován přítomností hodnoty ´1´ na pozici pátého bitu (prd_shift[4]). Řízení tohoto obvodu realizuje stavový automat, jehož algoritmus je popsán na obrázku Obr. 24. Podmínku A popisuje následující fragment kódu: if (prd_shift[4] or prd_equal) and not dtainp then dtaout[3..0] = prd_shift[3..0].q; dtaout[8..4] = B"10000"; end if;
Znamená to tedy, že byla-li načtena celá čtveřice bitů nebo už jsou všechny požadované bity načteny, tak není li obsazen registr obvodu WTF (kapitola 3.2.17), který si od DRU data převezme (vstupní signál DTAINP), vygeneruje stavový automat na výstupu signály s daty DTAOUT[8..0]. Spodní čtyři bity tvoří přímo výstup posuvného registru. Horní část představuje kód přenosového protokolu CAN analyzátoru popsaný v příloze B. Výše uvedená podmínka zajišťuje, že budou zapsána z posuvného registru data i v případě, kdy požadovaný počet bitů není bezezbytku dělitelný čtyřmi. V dalších stavech je testován signál prd_equal a je-li aktivní, je funkce DRU ukončena, což je signalizováno výstupem DONE. Nejsou-li ještě všechny bity načteny, je třeba ještě zjistit zda nebyl právě vypsán zaplněný posuvný registr. Pokud ano bude restartován signálem prd_sh_res.
RESET DTAOUT[8...0] ENABLE ENA2 DONE CLK RUN DTAINP CAN_DATA COMP_WR COMP_INP[6...0] DATA_READ_UNIT
Obr. 25: Schematická značka obvodu DRU
34
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Název vývodu Aktivní úroveň Zdroj signálu Popis RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu – nutné před každým požitím
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE. Je využíván k odstartování činnosti DRU.
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
RUN
Vcc
MTR
Signál odvozený od okamžiku odebrání vzorku dat ze sběrnice. Povoluje zápis dat do posuvného registru a inkrementaci čítače bitů na náběžnou hranu CLK (je to puls o šířce 1 TCLK).
CAN_DATA
-
MCT
Navzorkovaný bit dat z CAN sběrnice
DTAINP
Vcc
WTF
Příznak, že registr vyrovnávací paměti obvodu WTF, kam jsou data z DRU zapisována, není obsazený
COMP_WR
Vcc
CML
Signál povolující zápis do registru prd_compare [6..0] pro počet načítaných bitů (zápis proběhne na náběžnou hranu CLK)
COMP_INP[6..0] -
CML
Počet bitů zapisovaných signálem COMP_WR
DTAOUT[8..0]
-
Výstup
Výstup dat z obvodu DRU pro zápis do vyrovnávací paměti obvodu WTF
DONE
Vcc
Výstup
Příznak ukončení cyklu čtení bitů
Tab. 8: Popis vývodů obvodu DRU
Schematická značka obvodu je na obrázku Obr. 25 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 8. 3.2.8 Obvod CAN Main Loop (CML) Sledování CAN streamu (vlastního toku dat na sběrnici CAN), rozlišení všech typů rámců sběrnice CAN a vyhodnocování stavových chyb (kromě chyb vkládání bitů – ty vyhodnocuje obvod MSU z kapitoly 3.2.12) mají na starosti obvody CML, CEN a CRL. Tyto tři obvody tedy dohromady implementují podstatnou část linkového protokolu podle CAN specifikace 2.0B (viz. [1 ]). CML je prvním z nich. Má na starosti sledování datových rámců od Start Of Frame (SOF, začátek rámce) až po oddělovač ERC CRC součtu. Zahrnuje tedy celou oblast, ve které je v činnosti Bitstuffing (mechanismus vkládání bitů). Více o formátu datových rámců sběrnice CAN je uvedeno v kapitole 2.1. Celý obvod je tvořen velmi rozsáhlým stavovým automatem (více než 40 stavů). Zde se v plné míře uplatnila silná podpora jazyka AHDL pro konstrukci stavových automatů. Ovšem je třeba mít také na zřeteli, že praktická implementace takto rozsáhlých automatů, v jejichž jednotlivých stavech může být i velice komplexní kombinační logika, má téměř drastický vliv na časové parametry (kapitola 2.2.1) a tedy na maximální použitel-
35
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
ný hodinový synchronizační kmitočet. O implementaci designu v konkrétním hradlovém poli pojednává kapitola 4.1. Struktura obvodu Struktura obvodu CML je znázorněna na obrázku Obr. 26. Kromě vlastního stavového automatu obsahuje dva posuvné registry a dva záchytné registry. Funkci jednotlivých registrů si nyní popíšeme.
SOFOUT DTAOUT[8..0]
crcreg[14..0]
BTTOUT[8..0] MAIN_LOOP_END MAIN_LOOP_ERR CLK
CAN_DATA
crclatch[14..0]
CRC[14..0]
dtalen[3..0]
CAN_DATA
streg[5..0]
STATE[5..0]
Stavový automat CML
RUN CAN_DATA SOFINP DTAINP BTTINP
Obr. 26: Struktura obvodu CML
Jedním z požadavků na analyzátor z kapitoly 1.2 je programovatelný výstupní trigger (viz. kapitola 3.2.14). Aby mohl reagovat na naprogramovanou událost, je v každém relevantním stavu automatu CML generován signál STATE[5..0] obsahující kód příslušného stavu, a tedy i události, které stav odpovídá. Pro potlačení hazardních stavů a z důvodů lepší odezvy je synchronizován registrem streg[5..0]. Pro CML je dále nezbytné znát délku datové oblasti. Důvody jsou dva. První je kontrola korektnosti délky (podle kapitoly 2.1.6 musí být nejméně 0 a nejvýše 8) a druhý je potřeba načtení vlastní datové oblasti rámce. Pro načtení délky datové oblasti je využit posuvný registr dtalen[3..0]. Posuvný registr crcreg[14..0] je určen pro načtení oblasti rámce obsahující 15 bitů CRC součtu, aby mohl být porovnán se součtem, který počítá obvod CRC. Těchto 15 bitů je tak vlastně načítáno dvojmo, neboť současně je načítá i obvod DRU (jsou součástí naměřených dat). Dvojité načítání je nezbytné, protože pro obvod CML je získání dat CRC součtu od obvodu DRU (vzhledem k jeho funkci zaměřené na přímý zápis dat do vyrovnávací paměti) obtížné. Aby bylo možné provést vlastní srovnání načteného a vypočítaného CRC součtu, je zaveden záchytný registr crclatch[14..0], do kterého je po načtení oblasti rámce, na kterou se podle specifikace kontrola CRC součtem vztahuje (kapitola 2.1), zachycen aktuální stav výstupu obvodu CRC.
36
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Kontrola korektnosti CRC součtu je potom snadná a spočívá pouze v porovnání hodnot registru crcreg[14..0] (obsahuje načtený CRC) a registru crclatch[14..0] (obsahuje vypočítaný CRC). Popis všech signálů je uveden v tabulce Tab. 9. Stavový automat obvodu CML Automat obvodu CML postupně sleduje CAN Stream (tok bitů na sběrnici). Jeho jednotlivé stavy (na obrázku Obr. 27 jsou znázorněny pouze ty podstatné z hlediska struktury datového rámce) odpovídají formátu datového rámce tak, jak je popsán v kapitole 2.1.6, a názvy jsou totožné s názvy použitými ve zdrojovém kódu. Představují tak „vzorový“ rámec, který je postupně v jednotlivých stavech konfrontován se skutečnými daty přijatými ze sběrnice CAN.
SOF=0
SOF SOF=1
ID11
SRR
sDTA
seDTA
SRR=0
SRR=1
IDE=0
IDE
seR0
IDE=1
eDTA
ID18
DTREAD
RTR=0 sREM
eRTR
ERREND
CR
RTR=1
DTFIELD
CR EG
CRCREAD
<>
eREM
CR CH AT CL
TEND eREMr1
CRCCMP
ERC=0 seREM
ERC=1
ERC
Obr. 27: Graf přechodů stavového automatu obvodu CML
37
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Operace prováděné v jednotlivých stavech jsou obdobné a lze je všeobecně shrnout do následujících bodů: • Čekání na okamžik vzorkování. Prakticky je testován signál RUN, udávající platnost navzorkovaných dat (viz. obvod MTR v kapitole 3.2.3). • Porovnání dat charakteristických pro daný stav s daty načtenými ze sběrnice. • Na základě porovnání z předchozího bodu a pravidel popsaných v kapitole 2.1 rozhodnout, zda pokračovat ve sledování rámce, zapsat některou ze zpráv nebo tuto část ukončit a přejít do konečného stavu obvodu CML. Pro příklad si projděme několik stavů takového automatu pokud začne sledovat datový rámec: • Na začátku se nachází ve stavu SOF. To je Start Of Frame, tedy začátek rámce. Podle specifikace je tvořen jedním dominantním bitem. Automat tento bit otestuje a je-li skutečně dominantní, zapíše do vyrovnávací paměti kód ´32´ (INFO: Byl detekován SOF) a přechází do stavu ID11. Pokud je recesivní, automat zapíše do vyrovnávací paměti kód ´57´ (ERROR: Start Of Frame), přejde do stavu ERREND, což je stav konečný, a signalizuje nadřízeným obvodů ukončení této části s chybou (signál MAIN_LOOP_ERR) • Ve stavu (a několika dalších) ID11 je naprogramován obvod DRU a čeká se, až načte a zapíše do vyrovnávací paměti všech 11 bitů standardního identifikátoru. Jediná chyba, ke které zde může dojít, je chyba vkládání bitů, ale její detekci nemá na starosti obvod CML. Po načtení ID11 je zapsán do vyrovnávací paměti kód ´33´ (INFO: Zapsán standardní identifikátor) a automat přechází do stavu SRR. • Stav SRR (Substitution Remote Request) je stav, v němž se testuje stejnojmenný bit. Je-li dominantní, právě jsme identifikovali standardní datový rámec a automat přejde do stavu sDTA, ve kterém zapíše do vyrovnávací paměti CAN analyzátoru kód ´40´ (INFO: Detekován standardní datový rámec). Bude-li SRR recesivní, automat pokračuje ve stavu IDE. Obdobným způsobem pokračuje sledování CAN streamu dále, až nakonec skončí automat buď v chybovém stavu ERREND (viz. příklad), nebo oznámí korektní ukončení této části ve stavu TEND (signál MAIN_LOOP_END). Tyto signály pak vyhodnocují nadřazené obvody, které povolí činnost dalším obvodům sledujícím CAN stream dále (viz. obvody MSU, CEL a CRL v kapitolách 3.2.12, 3.2.9 a 3.2.10). Detailní popis kódů všech zpráv a formát výstupních dat CAN analyzátoru lze nalézt v příloze B. Pro zápis zpráv do vyrovnávací paměti CAN analyzátoru (obvod WTF) slouží obvodu CML tři druhy signálů SOFOUT, DTAOUT[8..0] a BTTOUT[8..0]. První slouží vý-
38
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
hradně pro zápis zprávy SOF, druhý pro zápis zpráv bez časové značky a třetí pro zápis zpráv s časovou značkou a číslem bitu (viz. příloha B). Podrobný popis všech 45 jednotlivých stavů je uveden v zdrojových souborech, které jsou součástí doprovodného CDROMu (viz. příloha E). Schematická značka obvodu je na obrázku Obr. 28 a tabulka s popisem všech signálů a jejich zdrojů je tabulka Tab. 9.
RESET ENABLE ENA2 CLK RUN CAN_DATA SOFINP DTAINP BTTINP CRC[14...0]
SOFOUT DTAOUT[8...0] BTTOUT[8...0] MAIN_LOOP_END MAIN_LOOP_ERR STATE[5...0]
CAN_MAIN_LOOP
Obr. 28: Schematická značka obvodu CML
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
RUN
Vcc
MTR
Signál odvozený od okamžiku odebrání vzorku dat ze sběrnice. Na jeho základě je prováděna analýza a přechod mezi stavy automatu (puls o šířce 1 TCLK).
CAN_DATA
-
MCT
Navzorkovaný bit dat z CAN sběrnice
DTAINP
Vcc
WTF
Příznak, že registr DTA vyrovnávací paměti obvodu WTF, kam jsou zprávy z CML zapisovány, není obsazený
BTTINP
Vcc
WTF
Totéž pro registr BTT
SOFINP
Vcc
WTF
Obdobně pro registr BTT
CRC[14..0]
-
CRC
Aktuální stav výpočtu CRC
DTAOUT[8..0]
-
Výstup
Data pro zápis do registru DTA obvodu WTF
BTTOUT[8..0]
-
Výstup
Data pro zápis do registru BTT obvodu WTF
SOFOUT
Vcc
Výstup
Signál pro zápis zprávy SOF do registru SOF obvodu WTF
MAIN_LOOP_END Vcc
Výstup
Příznak signalizující bezchybné ukončení sledování části CAN streamu obvodem CML
MAIN_LOOP_ERR Vcc
Výstup
Příznak signalizující ukončení sledování části CAN streamu obvodem CML s chybou
STATE[5..0]
Výstup
Kód stavu (události), ve kterém se právě automat nachází (pro obvod OUT)
-
Tab. 9: Popis vývodů obvodu CML
39
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.2.9 Obvod CAN End Loop (CEL) Druhým obvodem pro sledování CAN streamu je obvod CEL. Navazuje na sledování datového rámce v místě, kde jeho sledování ukončil obvod CML z předchozí kapitoly. Oblast působení obvodu CEL tedy začíná bitem ACK a končí posledním bitem konce datového rámce EOF. Protože v této oblasti se již neuplatňují některé mechanismy (výpočet CRC, vkládání bitů a nebude třeba načítat žádná data pomocí obvodu DRU), je hardwarové provedení tohoto obvodu jednodušší než u obvodu CML. Ve srovnání s uspořádáním na obrázku Obr. 26 zde zůstává pouze jediný registr a to registr streg[5..0] signalizující momentální stav sledování CAN streamu pro obvod OUT (kapitola 3.2.16). Rovněž počet stavů automatu je výrazně menší (15). Další odlišností je zdroj signálu RUN, indikující platnost navzorkovaných dat a umožňující automatu přechod mezi jednotlivými stavy. Zatímco u obvodu CML je signál RUN (z důvodů uvedených v kapitole 3.2.3) generován z obvodu MTR, pro obvod CEL je přímo použit signál generovaný při načtení vzorku bitu ze sběrnice (viz. obvod MCT v kapitole 3.2.11), neboť zde již není nutné čekat na výše uvedené výpočty.
ACK = 0
ACK
ACK = 1
ACD = 0 ACD ACD = 1
EOF
ERREND EOF = 0
EOF = 1
TEND
Obr. 29: Graf přechodů stavového automatu obvodu CEL
Graf důležitých stavů a přechodů (z hlediska struktury datového rámce) stavového automatu obvodu CEL je uveden na obrázku Obr. 29. Pro činnosti prováděné v jednotlivých stavech, značení a vztah ke zdrojovému kódu platí totéž, co pro obvod CML. Počáteční stav je stav ACK, kde je testován stejnojmenný bit. Nedojde-li během sledování datového rámce v nějakém stavu k chybě, je dosaženo koncového stavu automatu TEND, což je indikováno signálem END_LOOP_END. V případě detekce chyby je au-
40
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
tomat ukončen ve stavu ERREND a generuje signál END_LOOP_ERR. Obdobně jako u obvodu CML slouží tyto signály nadřazeným obvodům, které umožní funkci dalším obvodům pro sledování CAN streamu (MSU a CRL v kapitolách 3.2.12 a 3.2.10). Úplný přehled všech zpráv generovaných obvodem CEL (signál BTTOUT[8..0]) je uveden v příloze B. Poznamenejme ještě ke stavu EOF, že konec rámce je podle kapitoly 2.1.6 tvořen sedmi recesivními bity. Takovýchto stavů EOF je tedy ve skutečnosti také sedm. Na obrázku Obr. 29 je uveden pro ilustraci pouze jeden. Všechny ostatní jsou obdobné. Schematická značka obvodu CEL je na obrázku Obr. 30 a tabulka s popisem signálů a jejich zdrojů je tabulka Tab. 10.
RESET ENABLE ENA2 CLK RUN CAN_DATA EOFINP BTTINP
EOFOUT BTTOUT[8...0] STATE[5...0] END_LOOP_END END_LOOP_ERR
CAN_END_LOOP
Obr. 30: Schematická značka obvodu CEL
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
RUN
Vcc
MCT
Signál generovaný v okamžiku odebrání vzorku dat ze sběrnice. Na jeho základě je prováděna analýza a přechod mezi stavy automatu (puls o šířce 1 TCLK).
CAN_DATA
-
MCT
Navzorkovaný bit dat z CAN sběrnice
BTTINP
Vcc
WTF
Příznak, že registr BTT vyrovnávací paměti obvodu WTF, kam jsou zprávy CEL zapisovány, není obsazený
EOFINP
Vcc
WTF
Obdobně pro registr EOF
BTTOUT[8..0]
-
Výstup
Data pro zápis do registru BTT obvodu WTF
EOFOUT
Vcc
Výstup
Signál pro zápis zprávy EOF do registru EOF obvodu WTF
END_LOOP_END Vcc
Výstup
Příznak signalizující bezchybné ukončení sledování část CAN streamu obvodem CEL
END_LOOP_ERR Vcc
Výstup
Příznak signalizující ukončení sledování části CAN streamu obvodem CEL s chybou
STATE[5..0]
Výstup
Kód stavu (události), ve kterém se právě automat nachází (pro obvod OUT)
-
Tab. 10: Popis vývodů obvodu CEL
41
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.2.10 Obvod CAN Err Loop (CRL) Obvod CRL je posledním obvodem pro sledování CAN streamu. Jeho funkcí je kontrola správných mezer mezi rámci (Interframe Space), sledování chybového rámce (Error Frame) a rámce přetížení (Overload Frame). Tento obvod je tedy uveden v činnost také v okamžiku chybového ukončení některého z obvodů popsaných v kapitolách 3.2.8 nebo 3.2.9 (CML a CEL). Struktura Obvodu Struktura obvodu zůstává obdobná struktuře obvodu CEL z předchozí kapitoly. Základ tvoří poměrně rozsáhlý automat (32 stavů), hardwarově je zde přidán pouze jeden čtyřbitový čítač cnt[3..0], který je určen pro počítání délky Error Frame a Overload Frame a jejich oddělovačů. Délka každého z nich může být až 12 bitů a vyhradit pro každý samostatný stav automatu by bylo neefektivní. Inkrementace čítače, pokud je povolena, probíhá společně se signálem RUN. Čítač streg[5..0] pro signalizaci stavu sledování (pro obvod OUT – kapitola 3.2.16) zůstává zachován. Stavový automat Z pohledu na obrázek Obr. 31, kde je znázorněn graf přechodů stavového automatu, je patrné, že vztahy mezi rámci Overload Frame, Error Frame a Interframe Space, a zejména potom jejich kombinace, v jaké se mohou objevit na sběrnici, mohou být poměrně komplexní. Struktura uzlů v grafu a přechodů mezi nimi je zobrazením struktury příslušných rámců a vztahů mezi nimi tak, jak jsou popsány v kapitole 2.1. Než si stavy popíšeme, připomeňme opět, že pro činnosti prováděné v jednotlivých stavech, značení a vztah ke zdrojovému kódu platí totéž, co pro obvod CEL, potažmo pak pro obvod CML. Automat začíná stavem TEF_CMP, ve kterém je testován vstupní signál EF_DIRECT. Tento signál je generován obvodem MSU (viz. kapitola 3.2.12) v případě, že některá část sledování CAN streamu, realizovaná obvody CML nebo CEL, byla ukončena s chybou. V tom případě automat přechází přímo do stavu ERRFR, kde bude testovat chybový rámec Error Frame. V případě, že je EF_DIRECT nulový, jedná se o korektní ukončení rámce a automat přechází do stavu IFSPACE, kde začíná test na mezirámcovou mezeru Interframe Space. Jsou-li následující dva bity recesivní, jsou tím splněny požadavky na minimální mezirámcovou mezeru, automat přechází do konečného stavu TEND a generuje jako příznak bezchybného ukončení signál ERR_LOOP_END. Je-li první bit Interframe Space dominantní, automat přechází do stavu OVERF a budeme testovat rámec Overload Frame. Podle kapitoly 2.1.6 jej tvoří nejméně 6 a nejvýše 12 dominantních bitů. Pro počítání bitů bude využit čítač cnt[3..0].
42
D E S I G N
ef_direct = 0
IFSPACE
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
TEF_CMP
0
OVERDEL
ef_direct = 1
OVERF
1 0 IFSPACE_1
1
OVERDEL_1
0
1
ODERR
OVERF_1 0
1 cnt[] < 6
IMERR
TEND
cnt[] < 6
OVERDEL_2
OVERF_2
cnt[] = 6 1
cnt[] = 6
OVERERR
0
1
OVERDEL_3
OVERF_3 0 cnt < 13
ERRF
OVERF_4 1
0
cnt[] = 13
ERRF_1
ERRF_2
EFND
1
ERRFERR
OVERF_5
ERREND
0 cnt[] < 5 ERRF_3
ERRDEL
cnt[] = 5 EDERR ERRF_4
1
ERRDEL_1
0
0
1 cnt[] < 6
cnt[] < 12 ERRF_5
ERRDEL_2
cnt[] = 12
ERRF_6
cnt[] = 6
ERRDEL_3
0
1
Obr. 31: Graf přechodů stavového automatu obvodu CRL
Nejdříve testujeme spodní hranici nejméně šesti dominantních bitů ve stavech OVERF_1 a OVERF_2. Bude-li některý z těchto 6 bitů recesivní, jedná se o chybu Overload Frame a automat přejde do stavu OVERERR, ve kterém bude tato skutečnost prostřednictvím signálu DTTOUT[8..0] zapsána do vyrovnávací paměti CAN analyzátoru (obvod WTF v kapitole 3.2.17). Automat dále přejde do stavu ERRF, kde začne 43
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
test chybového rámce Error Frame. Jestliže bude všech 6 bitů mezi stavy OVERF_1 a OVERF_2 dominantních, přejde automat do stavu OVERF_3 a očekává recesivní bit jako první bit oddělovače rámce Overload Frame. To musí být nejpozději 13. bit od začátku rámce Overload Frame. Není-li tato podmínka splněna, má rámec Overload Frame příliš velkou délku a automat přejde po zápisu příslušné zprávy opět do stavu ERRFR na test chybového rámce Error Frame. Pokud splněna bude a mezi stavy OVERF_3 a OVERF_4 bude včas detekován recesivní bit, jedná se o první bit oddělovače Overload Frame a automat přejde do stavu OVERDEL. Nebude-li detekován rámec Error Frame, znamená to úplnou ztrátu kontroly jednotlivých CANovských zařízení nad sběrnicí a automat po zápisu zprávy do vyrovnávací paměti přejde do konečného stavu ERREND a generuje signál ukončení s chybou ERR_LOOP_ERR. Obdobným způsobem bychom mohli procházet všechny stavy automatu.
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
RUN
Vcc
MCT
Signál generovaný v okamžiku odebrání vzorku dat ze sběrnice. Na jeho základě je prováděna analýza a přechod mezi stavy automatu (puls o šířce 1 TCLK).
CAN_DATA
-
MCT
Navzorkovaný bit dat z CAN sběrnice
DTTINP
Vcc
WTF
Příznak, že registr DTT vyrovnávací paměti obvodu WTF, kam jsou zprávy z CRL zapisovány, není obsazený
DTAINP
Vcc
WTF
Obdobně pro registr DTA
EF_DIRECT
Vcc
MSU
Příznak, že předchozí obvody pro analýzu detekovaly chybu a CRL tak bude testovat rovnou chybový rámec
DTTOUT[8..0]
-
Výstup
Data pro zápis do registru DTT obvodu WTF
DTAOUT[8..0]
-
Výstup
Signál pro zápis do registru DTA obvodu WTF
ERR_LOOP_END Vcc
Výstup
Příznak signalizující bezchybné ukončení sledování část CAN streamu obvodem CRL
ERR_LOOP_ERR Vcc
Výstup
Příznak signalizující ukončení sledování části CAN streamu obvodem CRL s chybou
STATE[5..0]
Výstup
Kód stavu (události), ve kterém se právě automat nachází (pro obvod OUT)
-
Tab. 11: Popis vývodů obvodu CRL
44
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Seznam všech zpráv generovaných obvodem CRL je uveden v příloze B. Schematická značka obvodu CRL je na obrázku Obr. 32 a tabulka s popisem signálů a jejich zdrojů je tabulka Tab. 11.
RESET ENABLE ENA2 CLK RUN CAN_DATA DTAINP DTTINP EF_DIRECT
DTAOUT[8...0] DTTOUT[8...0] STATE[5...0] ERR_LOOP_END ERR_LOOP_ERR
CAN_ERR_LOOP
Obr. 32: Schematická značka obvodu CRL
3.2.11 Obvod Main Counter (MCT) Až dosud jsme probírali všechny obvody umožňující CAN analyzátoru stavovou analýzu sběrnice CAN. Obvod MCT realizuje vše co souvisí s časováním v průběhu analýzy v CAN analyzátoru. Jeho funkce jsou následující: • Definuje čas odpovídající době vysílání jednoho bitu, tzv. Bit Time, tedy přímo bitovou rychlost sběrnice • Definuje okamžik odebrání vzorku ze sběrnice, tzv. Sample Point • Provádí odběr vzorku při dosažení času Sample Point • Volitelně detekuje chyby synchronizace sběrnice, které překročí nastavenou toleranci • Volitelně provádí resynchronizaci s nastavitelnou tolerancí Dříve než si popíšeme strukturu obvodu MCT z obrázku Obr. 35, bude třeba vysvětlit některé parametry z obrázku Obr. 33. Je zde znázorněn průběh vysílání jednoho bitu na sběrnici CAN. Doba vysílání jednoho bitu (tedy jeho šířka) je dána vstupním signálem BIT_TIME. Po dosažení okamžiku SAMPLE_TIME bude ze sběrnice odebrán vzorek bitu pro účely další analýzy. Vstupní signály LOW_SYNC a HI_SYNC (nutně ne symetrické) definují oblast ∆EW, ve které může dojít ke změně úrovně na sběrnici (označujme tento stav dále jako „hrana“). Pokud tedy přijde hrana mimo oblast ∆EW, jedná se o chybu synchronizace. Pro velikost ∆EW platí vztah (1). ∆EW = (BIT _ TIME − LOW _ SYNC ) + HI _ SYNC (1)
45
D E S I G N
A N A L Y Z Á T O R U
∆SW
∆EW
V
H R A D L O V É M
P O L I
∆EW
SAMPLE_TIME
BIT_TIME
LOW_SYNC
LOW_SYNC
HI_SYNC
HI_SYNC
Obr. 33: Resynchronizace v obvodu MCT
Oblast, kde očekáváme konstantní úroveň na sběrnice, je oblast ∆SW. V této oblasti je v čase definovaném signálem SAMPLE_TIME nastaven okamžik sejmutí vzorku dat ze sběrnice (Sample Point). Velikost ∆SW je určena vztahem (2).
∆SW = BIT _ TIME − ∆EW (2)
S ohledem na funkci obvodu je žádoucí, aby hodnota HI_SYNC byla nejméně nula a hodnota LOW_SYNC nejvýše BIT_TIME – 2. Je také přirozené, že hodnota SAMPLE_TIME je v oblasti ∆SW a nezasahuje do oblasti ∆EW. Generátor příznaku změny Tento blok z obrázku Obr. 35, kde je znázorněna struktura obvodu MCT, generuje na svém výstupu signál change, kdykoliv dojde ke změně úrovně na sběrnici CAN. Tedy z recesivní na dominantní nebo naopak. Příznak change je nezbytný pro funkci dalších částí obvodu MCT. Generátor je realizován jednoduchým stavovým automatem, jehož graf přechodů je znázorněn na obrázku Obr. 34.
CAN_BUS = 0
S2
S1
CAN_BUS = 1
CAN_BUS = 1
S3 CAN_BUS = 0
Obr. 34: Graf přechodů stavového automatu generátoru příznaku změny sběrnice v obvodu MCT
46
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
V počátečním stavu S1 je pouze zjištěn aktuální stav sběrnice, podle kterého automat přejde do stavu S2 (je-li dominantní) nebo do stavu S3 (je-li recesivní). V průběhu činnosti potom automat přechází mezi stavy S2 a S3 po každé změně úrovně na sběrnici. Během přechodu je generován signál change, který je aktivní po dobu 1 TCLK. Protože signál CAN_BUS je synchronní (viz. kapitola 3.2.13), je vyhodnocována změna úrovně na sběrnici ze dvou časových okamžiků vzdálených o 1 TCLK.
RESINP
main_counter[17..0] LOW_SYNC[17..0] main_counter[17..0] HI_SYNC[17..0]
Komparátor lpm_cmp1
AgB
Komparátor lpm_cmp2
AleB
CLK
DISABLE_SYNC_ ERROR_WRITTING
CLK
DFFE
SYNC_ERROR_OUT
sync_err
Generátor zpráv SYNC_ERROR
DFFE CLK
change
Generátor příznaku změny sběrnice
sync_err_reset CLK CAN_BUS CLK
change resync_antiglitch Blok resynchronizace
DFFE
RESYNC_ENABLE CLK
count_reset CLK
BEGIN
DFFE
synchronní reset Komparátor bit time
BIT_TIME[17..0]
Komparátor sample time
SAMPLE_TIME[17..0]
BIT_TIME_FLAG
Čítač main_counter[17..0] can_sample
CAN_DATA
bt_flg
DFFE
DFFE
SAMPLE_POINT_FLAG
sp_flg CAN_BUS
CLK
Obr. 35: Struktura obvodu MCT
Čítač main_counter
Definuje vlastní bitovou rychlost a okamžik odebrání vzorku ze sběrnice. Bez resynchronizace čítá od nuly až do hodnoty dané signálem BIT_TIME[17..0]. Po dosažení této hodnoty komparátor bit time z obrázku Obr. 35 provede synchronní (s následující hranou CLK) restart čítače, který začíná čítat znovu od nuly. Současně vygeneruje příznak BIT_TIME_FLAG. Tento slouží pouze pro ladící účely, pro funkci CAN analyzátoru není využit, a nebude tedy ani součástí výsledné schematické značky. Je-li aktivní signál count_reset, je to požadavek na resynchronizaci (viz. dále) a čítač je přednastaven na dekadickou hodnotu 1 korigující zpoždění bloku resynchronizace. Po resynchronizaci tedy čítá od jedné. 47
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Dosáhne-li čítač hodnoty SAMPLE_TIME[17..0], odebere komparátor sample time vzorek bitu ze sběrnice (registr can_bus) a vygeneruje signál SAMPLE_POINT_FLAG. Tento signál deklaruje platnost vzorku dat na výstupu CAN_DATA a je určující pro začátek analýzy odebraného bitu. Pro nastavení hodnoty BIT_TIME[17..0] platí vztah (3), kde fCLK je hodinový synchronizační kmitočet a fBD je bitová rychlost sběrnice CAN. BIT _ TIME [17..0] =
f CLK −1 f BD (3)
Blok resynchronizace
Blok resynchronizace generuje na svém výstupu signál count_reset, kdykoliv je splněna podmínka resynchronizace a současně je resynchronizace povolena vstupním signálem RESYNC_ENABLE. Využívá dva komparátory (lpm_cmp1 a lpm_cmp2), které na svých výstupech generují signály AgB a AleB. Signál AgB je aktivní, platí-li, že main_counter[17..0] > low_sync[17..0]. Pro signál AleB potom platí, že je aktivní, jeli splněna podmínka main_counter[17..0] <= hi_sync[17..0]. Funkce resynchronizace spočívá v synchronním restartu čítače main_counter (viz. výše) v okamžiku detekce hrany (signál change), pokud se tato nachází v oblasti ∆EW. Nezáleží tedy, kde v oblasti ∆EW hrana přijde, a nezáleží ani na stavu čítače. Po detekci hrany v oblasti ∆EW bude s následující náběžnou hranou signálu CLK čítač main_counter restartován signálem count_reset. Ve skutečnosti bude přednastaven na dekadickou hodnotu 1, která koriguje zpoždění v bloku resynchronizace. Takto je dosaženo efektu resynchronizace prodloužením nebo zkrácením šířky bitu (doby jeho vysílání). Ještě připomeňme, že hrana mimo oblast ∆EW nevyvolá efekt resynchronizace. Důsledkem je pouze zápis zprávy „Chyba resynchronizace“ do vyrovnávací paměti CAN analyzátoru (viz. dále – Generátor zpráv). Aby nemohlo docházet k vícenásobné resynchronizaci v případě několika zákmitů v oblasti ∆EW, je zaveden registr resync_antiglitch. Po detekci první hrany v oblasti ∆EW a následné resynchronizaci je tento registr nastaven a blokuje další resynchronizaci až do okamžiku, než hodnota čítače main_counter opustí oblast ∆EW. Tak je také zajištěno, že v každém bitu může proběhnout resynchronizace pouze jednou. Výše uvedené poznatky shrnuje výsledná podmínka resynchronizace (4), po jejímž splnění je aktivován signál count_reset.
(( AgB or AleB ) and change and (not resync _ antiglitch ) and RESYNC _ ENABLE ) = 1 (4) 48
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Znamená, že main_counter[17..0] je v oblasti ∆EW (AgB or AleB), ve které přišla hrana (change), zároveň je to hrana první (resync_antiglitch) a resynchronizace je povolena (RESYNC_ENABLE). Resynchronizace tedy může proběhnout.
CAN_BUS
MAIN_COUNTER[17..0]
9
10
0
1
2
3
4
5
6
7
8
1
2
BIT_TIME HI_SYNC
LOW_SYNC
Obr. 36: Příklad resynchronizace obvodu MCT
Na obrázku Obr. 36 je znázorněn příklad resynchronizace. Předpokládejme, že je resynchronizace povolena signálem resync_enable. Hodnota BIT_TIME je 10, hodnota HI_SYNC 1, hodnota LOW_SYNC 7 a hodnota SAMPLE_TIME není pro tento příklad podstatná. Pro hodnotu čítače 10 přichází první hrana (signál CAN_BUS). Hrana nejenže přichází správně v oblasti ∆EW, ale současně také přesně s okamžikem BIT_TIME. Je to tedy hrana přesná, k resynchronizaci nedochází a čítač začíná čítat nový BIT_TIME od nuly. Další hrana ovšem přichází předčasně, avšak stále v oblasti ∆EW. Při hodnotě čítače 8 je tedy uplatněn mechanismus resynchronizace, bit je zkrácen (naznačeno čárkovanou částí kóty BIT_TIME) a čítač začíná čítat nový BIT_TIME od jedné (poslední hodnota čítače před resynchronizací – 8 – tedy prakticky představuje nulovou hodnotu pro další BIT_TIME). V případě, že by například hrana přišla již při hodnotě čítače 6, tedy v oblasti ∆SW (tedy mimo oblast ∆EW), k resynchronizaci by nedošlo a byla by generována chyba resynchronizace. Generátor zpráv o chybách resynchronizace
Generátor chyb resynchronizace je poslední částí obvodu MCT. Nezávisle na vlastním bloku resynchronizace z předchozího odstavce provádí test na hranu v oblasti ∆SW. V případě, že je test pozitivní, generuje výstupní signál SYNC_ERROR_OUT, který slouží k zápisu zprávy „Chyba resynchronizace“ do vyrovnávací paměti CAN analyzátoru (viz. obvod WTF v kapitole 3.2.17). Generátor je realizován malým stavovým automatem – pouze dva stavy. V prvním stavu (T1) je testována podmínka (5).
49
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Podmínka znamená, že čítač main_counter[17..0] je v oblasti ∆SW ((not AgB) and (not AleB)), ve které přišla hrana (change), není obsazen registr RES obvodu WTF (RESINP) a zápis není zakázán (DISABLE_SYNC_ERROR_WRITTING). Došlo tedy k chybě resynchronizace a bude vygenerována příslušná zpráva. (not AgB ) and (not AleB ) and change and (not RESINP ) and = 1 and (not DISABLE _ SYNC _ ERROR _ WRITTING ) (5)
Je-li podmínka (5) splněna, automat přejde do stavu T2, který je konečný. Zde čeká automat na restart, který je zajištěn pomocí registru sync_err_reset z obrázku Obr. 35. K restartu dojde po splnění podmínky (6), která znamená, že hodnota čítače je v poli ∆EW. Je tak zajištěno, že bude zapisována pouze první chyba resynchronizace v rámci jednoho bitu. AgB or AleB = 1 (6)
Z podmínky (5) plyne, že v případě, kdy bude registr RES obvodu WTF obsazený, zápis bude ignorován a zpráva o chybě resynchronizace se nezapíše. K této situaci může dojít v případě, kdy oblast ∆EW bude malá (menší než 6) a dojde k chybě synchronizace těsně před a hned bezprostředně za touto oblastí. Obsah registru RES z první chyby nemohl být zatím zapsán do vyrovnávací paměti (zápis včetně časové značky trvá 6 TCLK). K odložení zápisu z registru RES do vyrovnávací paměti může také dojít v důsledku probíhajícího zápisu z jiných registrů s vyšší prioritou. Nízká priorita registru RES je nezbytná vzhledem k agresivitě této zprávy z hlediska datového toku, neboť v nejnepříznivějším případě může chyba resynchronizace nastat v každém bitu a mohlo by dojít ke ztrátě jiných informací, které jsou nepostradatelné. Poznamenejme ještě, že se jedná o teoretické situace při provozu na vysokých bitových rychlostech (1 Mbit/s), kdy by současně působilo více chybových faktorů jako výsledek stavové analýzy. Pokud by k chybě resynchronizace docházelo tak často, že by nebyl zapsán z výše uvedených důvodů každý výskyt, pravděpodobně bude tento stav mít za následek celou řadu dalších stavových chyb a analyzátor i tak poskytne dostatek informací pro analýzu. Proto se toto kompromisní řešení chyby resynchronizace jeví jako přijatelné. Více o prioritách registrů v kapitole 3.2.17. Seznam zpráv generovaných obvodem MCT je v příloze B a rozbor přenosových rychlostí v kapitole 6. Schéma zapojení obvodu MCT je na obrázku Obr. 37 a tabulka s popisem signálů a jejich zdrojů je tabulka Tab. 12.
50
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchr. signál s periodou TCLK (20ns)
BIT_TIME[17..0]
-
SUU
Signál definující bitovou rychlost
SAMPLE_TIME[17..0]
-
SUU
Signál definující okamžik odebrání vzorku dat
LOW_SYNC[17..0]
-
SUU
Spodní hranice oblasti ∆EW
HI_SYNC[17..0]
-
SUU
Horní hranice oblasti ∆EW
RESYNC_ENABLE
Vcc
SUU
Povolení funkce resynchronizace
DISABLE_SYNC_ ERROR_WRITTING
Vcc
SUU
Zákaz zápisu zpráv o chybách resynchronizace
RESINP
Vcc
WTF
Signál obsazenosti registru RES obvodu WTF
CAN_BUS
-
SYNC
Synchronizovaný signál sběrnice CAN (viz. kapitola 3.2.13)
BEGIN
Vcc
MSU
Čítač main_counter je normálně s každou periodou TCLK zvětšen o 1. Je-li BEGIN aktivní, bude zvětšen o 2. Používá se pouze bezprostředně po detekci SOF pro korekci zpoždění v obvodu MSU.
SAMPLE_POINT_FLAG Vcc
Výstup
Signál odebrání vzorku bitu ze sběrnice (puls o šířce 1 TCLK). Udává platnost CAN_DATA.
CAN_DATA
-
Výstup
Navzorkovaný bit dat ze sběrnice CAN
SYNC_ERROR_OUT
Vcc
Výstup
Signál zápisu zprávy o chybě resynchronizace do registru RES obvodu WTF
Tab. 12: Popis vývodů obvodu MCT
SAMPLE_POINT_FLAG RESET CAN_DATA ENABLE SYNC_ERROR_OUT ENA2 CLK BIT_TIME[17...0] SAMPLE_TIME[17...0] LOW_SYNC[17...0] HI_SYNC[17...0] RESYNC_ENABLE DISABLE_SYNC_ERROR_WRITTING RESINP CAN_BUS BEGIN MAIN_COUNTER
Obr. 37: Schematická značka obvodu MCT
3.2.12 Obvod Main Start Unit (MSU)
Posledním z obvodů, který není součástí rozhraní s vnějším prostředím CAN analyzátoru, je obvodu MSU. Je to obvod, který koordinuje součinnost všech ostatních obvodů, které se nějakým způsobem přímo podílejí na analýze sběrnice. Obsluhuje také chyby vkládání bitů. 51
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
CLK
RECESSIVE_ERR DOMINANT_ERR BUS_IDLE CAN_BUS MIAN_LOOP_END MAIN_LOOP_ERR END_LOOP_END END_LOOP_ERR ERR_LOOP_END ERR_LOOP_ERR DTTINP BTTINP
Stavový automat
DTTOUT[8..0] BTTOUT[8..0] EF_DIRECT RESET obodů:
DFFE
MTR_ENABLE
DFFE
MCT_ENABLE
DFFE
BDS_ENABLE
DFFE
CRC_ENABLE
DFFE
CML_ENABLE
DFFE
CEL_ENABLE
DFFE
CRL_ENABLE
DFFE
WTF_ENABLE
DFFE
INT_ENABLE
DFFE
BIC_ENABLE
streg[5..0]
STATE[5..0]
MTR, MCT, BDS, CRC, CML, CEL, CRL, WTF, INT, BIC,
Obr. 38: Struktura obvodu MSU
Struktura obvodu z obrázku Obr. 38 je tvořena stavovým automatem pro implementaci algoritmu obvodu. Kromě automatu obsahuje již několikrát popsaný registr streg[5..0], určený pro signalizaci stavu zpracování CAN streamu pro obvod OUT z kapitoly 3.2.16. Zbývajících deset registrů (klopných obvodů typu D - DFFE) je určeno pro generování signálů povolujících funkci příslušných obvodů. Připomeňme vlastnost klopných obvodů DFFE, že po restartu signálem RESET mají na výstupu úroveň GND. To má za následek, že po restartu CAN analyzátoru je funkce obvodů z obrázku Obr. 38 zakázána. Souhrnný popis všech signálů obvodu MSU je v tabulce Tab. 13. Obvod MSU zajišťuje logickou návaznost činnosti všech obvodů, které se účastní analýzy. Má tak stěžejní význam pro pochopení funkce celého CAN analyzátoru. Z těchto důvodů si podrobně popíšeme celý algoritmus jeho činnosti. Na obrázku Obr. 39 jsou znázorněny všechny stavy a možné přechody automatu obvodu MSU, který tento algoritmus realizuje. U každého stavu je symbolicky popsána činnost, kterou stav představuje. Stav S0 je počáteční stav automatu po restartu obvodu MSU. Je to stav nestabilní a s první hranou hodinového signálu CLK přejde automat do stavu S1. Tento stav má význam pouze v situaci, kdy byl celý CAN analyzátor restartován (RESET), povolen globálním signálem ENABLE, ale ještě nebyla povolena funkce obvodu MSU signálem ENA2. Analyzátor je tedy připraven k činnosti a čeká se na pokyn uživatele k zahájení 52
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
analýzy povolením funkce obvodu MSU. A protože povolovací signály mají vliv pouze na signál CLK a nikoliv na kombinační logiku, je žádoucí, aby v prvním stavu automatu nebyla žádná kombinační logika, která by mohla před zahájením analýzy ovlivňovat stav některých obvodů.
S0
S1 reset MTR, MCT, BDS, CRC, CML, CEL, CRL, WTF, RTC, INT, BIC; stop MTR, MCT, BDS, CRC, CML, CEL, CRL, BIC; start WTF, INT;
S4 if not CAN_BUS then start MTR, MCT, BDS, CRC, CML, BIC; goto S4b; else goto s4; end if;
S7 if END_LOOP_ERR then stop CEL, BIC; goto ERR2; elsif END_LOOP_END then stop CEL, BIC; goto S8; else goto s7; end if;
S4b BEGIN = Vcc; goto S5;
S8
S1b start CRL; goto S9;
Zapiš "Začátek analýzy"; goto S2; S5
S2 if BUS_IDLE then zapiš "Bus Idle"; goto S3; else goto s2; end if;
if RECESSIVE_ERR or DOMINANT_ERR then stop MTR, BDS, CRC, CML, BIC; goto ERR1; elsif MAIN_LOOP_ERR then stop MTR, BDS, CRC, CML, BIC; goto ERR2; elsif MAIN_LOOP_END then stop MTR, BDS, CRC, CML; goto S6; else goto s5; end if;
S9b zapiš "Čekání na Bus Idle"; goto S2;
S6
reset MTR, MCT, BDS, CRC, CNL, CEL, CRL, BIC; stop MTR, MCT, BDS, CRC, CML, CEL, CRL, BIC; goto S4;
if RECESSIVE_ERR then zapiš "Chyba vkládání bitů v recesivní úrovni"; end if; if DOMINANT_ERR then zapiš "Chyba vkládání bitů v dominantní úrovni"; end if; goto ERR2;
ERR2 EF_DIRECT = Vcc; start CRL; goto ERR3;
start CEL; goto S7;
S9 S3
ERR1
if ERR_LOOP_END then stop CRL, MCT; goto S3; elsif ERR_LOOP_ERR then stop CRL, MCT; goto S9b; else goto S9; end if;
ERR3 EF_DIRECT = Vcc; if ERR_LOOP_END then stop CRL, MCT; goto S3; elsif ERR_LOOP_ERR then stop CRL, MCT; goto S9b; else goto ERR3; end if;
Obr. 39: Algoritmus činnosti obvodu MSU
Stav S1. Předpokládejme tedy, že uživatel vydal pokyn k zahájení analýzy. V důsledku tedy musela být povolena funkce obvodu MSU signálem ENA2 (viz. SUU v kapitole 3.2.15) a automat přechází do stavu S1. Zde generuje lokální signály RESET pro obvody vyjmenované na obrázku Obr. 39 a povoluje funkci obvodů WTF a INT jejich lokálními povolovacími signály ENA2. Protože tyto signály jsou zpožděné vlivem použitých klopných obvodů (DFFE), bude funkce těchto obvodů povolena až s další hranou CLK a přechodem automatu do následujícího stavu S1b.
53
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Stav S1b. V tomto stavu automat pouze zapíše zprávu o začátku analýzy do vyrovnávací paměti (signálem DTTOUT[8..0]). Tato zpráva zabraňuje porušení integrity naměřených dat v případech, kdy je prováděno několik nezávislých měření, ale data jsou ukládána do společné paměti a vyhodnocována najednou. Potom tato zpráva slouží jako oddělovač dat získaných v jednotlivých měřeních. Stav S2. V tomto stavu CAN analyzátor čeká na splnění podmínky Bus Idle testováním signálu BUS_IDLE (kapitola 3.2.6). Je-li splněna, přechází do stavu S3. Stav S3. Zde je proveden reset a zákaz funkce vybraných obvodů (viz. obrázek Obr. 34). Tento stav má význam až po ukončení sledování předchozího rámce, kdy jsou příslušné obvody připravovány pro sledování rámce dalšího. Stav S4 je stav, ve kterém je prakticky zahájena analýza sběrnice. Čeká se zde na Start Of Frame (SOF, začátek rámce), který je definován jako jeden dominantní bit (kapitola 2.1.6). Je-li SOF detekován, je povolena funkce obvodu pro sledování první části CAN streamu (obvod CML) a dalších obvodů nezbytných pro analýzu, které byly popsány v předchozích kapitolách. Automat přejde do stavu S4b. Stav S4b. Povolovací signály (viz. výše) jsou vlivem klopných obvodů zpožděny o 1 TCLK. Vadí to pouze obvodu MCT, kdy by šířka prvního bitu byla o 1 TCLK větší. Proto je tato ztráta kompenzována pomocí signálu BEGIN (viz. kapitola 3.2.11). Stav S5. V činnosti je tedy obvod CML, který provádí první část sledování CAN streamu v rozsahu uvedeném v kapitole 3.2.8. Během jeho činnosti stav S5 sleduje, zda nedošlo k chybě vkládání bitů. Pokud ano, jsou zastaveny vybrané obvody a automat přechází do stavu ERR1 na její obsluhu. Stav S5 také čeká na dokončení činnosti obvodu CML. Je-li bezchybná (signál MAIN_LOOP_END), je zakázána funkce CML a obvodů, které pro další analýzu nebudou třeba. Automat přechází do stavu S6. Pokud byl CML ukončen s chybou (signál MAIN_LOOP_ERR), přejde automat do stavu ERR2. Stav S6. První část sledování CAN streamu obvodem CML byla ukončena bezchybně. Je tedy třeba povolit funkci obvodu CEL, který bude sledovat další část CAN streamu. Stav S7. Stav S7 je obdobný stavu S5. Zde však pro obvod CEL. Odpadá testování chyby vkládání bitů, neboť tento mechanismus se v oblasti působnosti obvodu CEL již neuplatňuje. V případě chybného ukončení CEL (signál END_LOOP_ERR) automat zastaví potřebné obvody a přejde do stavu ERR2 na obsluhu chyby. Je-li ukončení bezchybné (signál END_LOOP_END), přejde automat po ukončení potřebných obvodů do stavu S8. Stav S8. Byla bezchybně ukončena druhá část sledování CAN streamu CEL. Stav S8 tedy povolí funkci poslední části - obvodu CRL. Signál EF_DIRECT přitom není gene-
54
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
rován, protože zatím vše proběhlo bez chyb a budeme pokračovat testováním Interframe Space a nikoliv Error Frame (viz. kapitola 3.2.10). Stav S9. Obdoba stavu S7, ale pro obvod CRL. Byl-li ukončen bezchybně (signál ERR_LOOP_END), byl korektně analyzován celý rámec a budeme čekat na další SOF. Po zastavení příslušných obvodů pokračuje automat stavem S3. Pokud došlo k chybě (signál ERR_LOOP_ERR), pokračuje automat po zákazu funkce příslušných obvodů stavem S9b. Stav S9b. Byl-li obvod CRL ukončen s chybou, znamená to, že je sběrnice v nedefinovaném stavu a bude třeba znovu testovat podmínku Bus Idle. Automat vygeneruje zprávu „Čekání na Bus Idle“ a přechází do stavu S2. Stav ERR1. Jestliže byla ve stavu S5 detekována chyba vkládání bitů, přejde automat do toho stavu. Zde je vygenerována podle situace zpráva „Chyba vkládání bitů v dominantní úrovni“ nebo zpráva „Chyba vkládání bitů v recesivní úrovni“. Automat přechází do stavu ERR2. Stav ERR2. Do stavu ERR2 se automat dostane, došlo-li v nějaké části CAN streamu sledované obvodu CML a CEL k chybě. Zde je potom povolena funkce obvodu CRL. Signál EF_DIRECT je přitom generován a obvod CRL tak přejde rovnou na test Error Frame. Stav ERR3. Stav ERR3 má stejnou funkci jako stav S9. Pouze je zde navíc generován výše zmíněný signál EF_DIRECT.
Schematická značka obvodu MSU je na obrázku Obr. 40 a tabulka s popisem signálů a jejich zdrojů je tabuka Tab. 13. RESET ENABLE ENA2 CLK RECESSIVE_ERR DOMINANT_ERR BUS_IDLE CAN_BUS MAIN_LOOP_END MAIN_LOOP_ERR END_LOOP_END END_LOOP_ERR ERR_LOOP_END ERR_LOOP_ERR DTTINP BTTINP
DTTOUT[8...0] BTTOUT[8...0] EF_DIRECT STATE[5...0] BEGIN MTR_ENABLE MCT_ENABLE BDS_ENABLE CRC_ENABLE CML_ENABLE CEL_ENABLE CRL_ENABLE WTF_ENABLE INT_ENABLE BIC_ENABLE MTR_RESET MCT_RESET BDS_RESET CRC_RESET CML_RESET CEL_RESET CRL_RESET BID_RESET WTF_RESET RTC_RESET INT_RESET BIC_RESET
MAIN_START_UNIT
Obr. 40: Schematická značka obvodu MSU 55
D E S I G N
A N A L Y Z Á T O R U
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
V
H R A D L O V É M
MSU, Vnější
Nastaví obvod do výchozího stavu
P O L I
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
SUU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
RECESSIVE_ERR Vcc
BDE
Příznak chyby vkládání bitů v recesivní úrovni
DOMINANT_ERR
BDE
Příznak chyby vkládání bitů v dominantní úrovni
Vcc
BUS_IDLE
Vcc
BID
Příznak detekce podmínky Bus Idle
CAN_BUS
-
SYNC
Synchronizovaný signál sběrnice CAN (viz. kapitola 3.2.13)
MAIN_LOOP_END Vcc
CML
Příznak bezchybného ukončení obvodu CML
MAIN_LOOP_ERR Vcc
CML
Příznak chybového ukončení obvodu CML
END_LOOP_END
Vcc
CEL
Příznak bezchybného ukončení obvodu CEL
END_LOOP_ERR
Vcc
CEL
Příznak chybového ukončení obvodu CEL
ERR_LOOP_END
Vcc
CRL
Příznak bezchybného ukončení obvodu CRL
ERR_LOOP_ERR
Vcc
CRL
Příznak chybového ukončení obvodu CRL
DTTINP
Vcc
WTF
Signál obsazenosti registru DTT obvodu WTF
BTTINP
Vcc
WTF
Signál obsazenosti registru BTT obvodu WTF
DTTOUT[8..0]
-
Výstup
Data pro zápis do registru DTT obvodu WTF
BTTOUT[8..0]
-
Výstup
Data pro zápis do registru BTT obvodu WTF
EF_DIRECT
Vcc
Výstup
Příznak chybového ukončení obvodu CML nebo CEL pro obvod CRL
STATE[5..0]
-
Výstup
Kód stavu (události), ve kterém se právě automat nachází (pro obvod OUT)
BEGIN
Vcc
Výstup
Signál korekce zpoždění obvodu MSU
MTR_ENABLE
Vcc
Výstup
Povolení funkce obvodu MTR
MCT_ENABLE
Vcc
Výstup
Povolení funkce obvodu MCT
BDS_ENABLE
Vcc
Výstup
Povolení funkce obvodu BDS
CRC_ENABLE
Vcc
Výstup
Povolení funkce obvodu CRC
CML_ENABLE
Vcc
Výstup
Povolení funkce obvodu CML
CEL_ENABLE
Vcc
Výstup
Povolení funkce obvodu CEL
CRL_ENABLE
Vcc
Výstup
Povolení funkce obvodu CRL
WTF_ENABLE
Vcc
Výstup
Povolení funkce obvodu WTF
INT_ENABLE
Vcc
Výstup
Povolení funkce obvodu INT
BIC_ENABLE
Vcc
Výstup
Povolení funkce obvodu BIC
MTR_RESET
Vcc
Výstup
Reset obvodu MTR
MCT_RESET
Vcc
Výstup
Reset obvodu MCT
BDS_RESET
Vcc
Výstup
Reset obvodu BDS
CRC_RESET
Vcc
Výstup
Reset obvodu CRC
CML_RESET
Vcc
Výstup
Reset obvodu CML
CEL_RESET
Vcc
Výstup
Reset obvodu CEL
CRL_RESET
Vcc
Výstup
Reset obvodu CRL
BID_RESET
Vcc
Výstup
Reset obvodu BID
Tab. 13: Popis vývodů obvodu MSU
56
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Název vývodu Aktivní úroveň Zdroj signálu Popis WTF_RESET RTC_RESET INT_RESET BIC_RESET
Vcc
Výstup
Reset obvodu WTF
Vcc
Výstup
Reset obvodu RTC
Vcc
Výstup
Reset obvodu INT
Vcc
Výstup
Reset obvodu BIC
Pokračování tabulky Tab. 13: Popis vývodů obvodu MSU
3.2.13 Obvod SYNC
Aby byla zaručena korektní funkce všech obvodů CAN analyzátoru a zejména pak jejich stavových automatů, je nezbytné všechny vstupy synchronizovat s hodinovým kmitočtem CLK. „Obvod“ SYNC je určen pro synchronizaci signálu sběrnice CAN a představuje tak první obvod, který je součástí rozhraní CAN analyzátoru s okolním prostředím. Je tvořen jediným klopným obvodem typu D (DFF), na jehož vstupu je přímo signál sběrnice CAN (CAN_BUS_RxD) a výstup tvoří již synchronní signál sběrnice CAN_BUS. Vlivem této synchronizace tak vzniká nejistota 1 TCLK daná použitým synchronizačním kmitočtem. Uspořádání obvodu je na obrázku Obr. 41.
CLK DFF
CAN_BUS
CAN_BUS_RxD
Obr. 41: Uspořádání obvodu SYNC
3.2.14 Obvod Input Trigger (INT)
Obvod INT umožňuje uživateli pomocí vnějšího triggerovacího signálu vkládat do naměřeného souboru dat informaci o této události. Součástí informace je časová značka.
TRIG PULS
OBLAST NECITLIVOSTI
min 1us
min 1ms
Obr. 42: Průběh triggerovacího signálu obvodu INT
57
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Vstup INT je aktivní na úroveň GND. Aby byl obvodem INT požadavek vstupního triggeru akceptován a zápis o této události vložen do měřeného souboru dat, musí mít triggerovací puls parametry uvedené na obrázku Obr. 42. Minimální šířka triggerovacího pulsu je 1 µs. Pulsy kratší jsou brány jako rušivé a nejsou akceptovány. Po akceptování triggeru (bez ohledu zda byl již trig. puls ukončen) začíná běžet doba 1 ms, po kterou bude přijmutí dalšího triggeru zablokováno. Jestliže ani po této době nebyl triggerovací puls ukončen, obvod čeká na jeho ukončení (návrat na úroveň Vcc). Obvod INT je schopen registrovat vstupní triggery s periodou nejméně 1,001 ms.
nastavení na 0 count_ena DFFE
nastavení na 1 INT
Čítač s komparátorem count[15..0]
DFFE reg
INTINP
Stavový automat Čítač s komparátorem gcnt[7..0]
INTOUT nastavení na 1
DFFE
gcnt_ena nastavení na 0
Obr. 43: Struktura obvodu INT
Uspořádání obvodu je znázorněno na obrázku Obr. 43. Kromě malého stavového automatu (4 stavy), obsahuje dva čítače s komparátory a 3 klopné obvody typu D (DFFE). Čítač count[15..0] definuje dobu 1 ms, a čítač gcnt[7..0] je potom určen pro měření doby 1 µs z obrázku Obr. 42. Čítání každého z čítačů je povolováno výstupem z registrů gcnt_ena a count_ena, které jsou nastavovány na 1 stavovým automatem. Po uplynutí definované doby potom komparátory čítačů čítače vynulují a současně nastaví povolovací registr na 0, čímž se automaticky zastaví. Takto může automat vybraný čítač snadno spustit a jako test uplynutí požadované doby stačí vyhodnocovat výstup povolovacího registru příslušného čítače. Pro synchronizaci vstupu je z obdobných důvodů jako v kapitole 3.2.13 použit registr reg. Činnost automatu lze popsat následujícími body:
58
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
• Pokud detekuje na vstupu INT úroveň GND, spustí čítač gcnt[7..0] a čeká až uplyne doba 1 µs. Pokud se během této doby úroveň na vstupu INT změní, procedura se opakuje • Pokud puls trval alespoň 1 µs, vygeneruje signál pro zápis této události do vyrovnávací paměti CAN analyzátoru (INTOUT) a spustí čítač count[15..0]. • Čeká 1 ms a případně ještě déle, dokud nedetekuje ukončení trig. pulsu (úroveň Vcc). Pak je schopen přijmout další trig. puls. Schematická značka obvodu je na obrázku Obr. 44 a popis vývodů a zdrojů signálů je uveden v tabulce Tab. 14.
RESET ENABLE ENA2 ENA3 CLK INT INTINP
INTOUT
INPUT_TRIGGER
Obr. 44: Schematická značka obvodu INT
Název vývodu Aktivní úroveň Zdroj signálu Popis RESET
Vcc
MSU, Vnější
Nastaví obvod do výchozího stavu
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2 a ENA3
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE a ENA3
ENA3
Vcc
SUU
Pro povolení funkce obvodu musí být aktivní i ENABLE a ENA2
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
INT
GND
Vnější
Vstupní trigger
INTINP
Vcc
WTF
Signál obsazenosti registru INT obvodu WTF
INTOUT
Vcc
Výstup
Signál zápisu zprávy o události vst. triggeru do registru INT obvodu WTF
Tab. 14: Popis vývodů obvodu INT
3.2.15 Obvod Startup Unit (SUU)
Některé obvody z předchozích kapitol mají na svých vstupech signály, jejichž nastavování je nutno zprostředkovat uživateli. Jako příklad uveďme signály BIT_TIME a SAMPLE_TIME v obvodu MCT (kapitola 3.2.11). Konfiguraci celého CAN analyzátoru zajišťuje obvod SUU. Tento obvod tedy umožňuje uživateli ovládat CAN analyzátor.
59
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
CLK
CLK CLK
COM_WR
Blok řízení zápisu
CLK wr rd
COM_IN[7..0]
d[7..0]
FIFO
empty
Stavový automat
q[7..0] COM_BUSY
Blok registrů
BIT_TIME[17..0] SAMPLE_TIME[17..0] LOW_SYNC[17..0] HI_SYNC[17..0] RESYNC_ENABLE MSU_ENABLE INT_ENABLE EVENT_OUT[6..0] DISABLE_SYNC_ERROR_WRITTING RESERVED_BIT_1 RESERVED_BIT_2 RESERVED_BIT_3
full
Obr. 45: Struktura obvodu SUU
Všechny signály, které umožňuje CAN analyzátor konfigurovat, tvoří výstupy bloku registrů z obrázku Obr. 45, kde je znázorněna struktura obvodu SUU. Obvody, pro které jsou tyto signály určeny (s výjimkou signálu EVENT_OUT), již byly popsány v předchozích kapitolách. Všechny registry jsou tvořeny klopnými obvody typu D (DFFE) a zápis do nich realizuje stavový automat. Automat postupně vyčítá konfigurační data z paměti FIFO (pokud není prázdná) a podle formátu konfiguračního protokolu (viz. příloha A) provádí programování registrů, jejichž výstupy generují žádané signály. Typická doba čtení z paměti FIFO včetně konfigurace příslušného registru je 2 TCLK. Paměť FIFO má kapacitu 16 osmibitových slov a zajišťuje nezávislost funkcí obvodu SUU a vnějšího procesoru, který bude provádět konfiguraci CAN analyzátoru. Na tento procesor tak nejsou kladeny žádné zvláštní požadavky. Zápis konfiguračních dat do paměti FIFO (COM_IN[7..0]) realizuje tedy nějaký vnější procesor prostřednictvím vstupního signálu COM_WR. Ke zjištění, zda není FIFO náhodou plné, slouží příznak FULL paměti FIFO (výstupní signál COM_BUSY). Protože ale operace čtení a zápisu do paměti FIFO jsou synchronizovány hodinovým kmitočtem CAN analyzátoru (CLK), který je obecně jiný než hodinový kmitočet použitého procesoru, je nutné do cesty signálu COM_WR vložit blok řízení zápisu.
min 1 TCLK
min 2 TCLK
COM_WR
COM_IN[7..0]
Platná data
Platná data
min 2 TCLK
Obr. 46: Časování při zápisu konfigurace do obvodu SUU
60
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Blok řízení zápisu je realizován jednoduchým stavovým automatem. Automat sleduje vstupní signál COM_WR. V případě, že je tento aktivní, vygeneruje synchronně s CLK signál WR, kterým je proveden vlastní zápis do paměti FIFO. Je-li FIFO plné, zápis je ignorován. Pro uživatele je tato operace transparentní a k zápisu do paměti jsou pro něj podstatné průběhy uvedené na obrázku Obr. 46. Pro přesnost dodejme, že časové parametry dané násobky TCLK jsou odvozeny od periody signálu CLK. Schematická značka obvodu SUU je na obrázku Obr. 47 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 15.
COM_BUSY BIT_TIME[17...0] SAMPLE_TIME[17...0] LOW_SYNC[17...0] HI_SYNC[17...0] RESYNC_ENABLE MSU_ENABLE INT_ENABLE EVENT_OUT[6...0] DISABLE_SYNC_ERROR_WRITTING RESERVED_BIT_1 RESERVED_BIT_2 RESERVED_BIT_3
RESET CLK COM_IN[7...0] COM_WR
STARTUP_UNIT
Obr. 47: Schematická značka obvodu SUU
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
Vnější
Nastaví obvod do výchozího stavu
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
COM_IN[7..0]
-
Vnější
Datový vstup konfigurační paměti FIFO
COM_WR
Vcc
Vnější
Signál zápisu do konfigurační paměti FIFO
COM_BUSY
Vcc
Výstup
Příznak FULL konfigurační paměti FIFO
BIT_TIME[17..0]
-
Výstup
Viz. obvod MCT v kapitole 3.2.11
SAMPLE_TIME[17..0]
-
Výstup
Viz. obvod MCT v kapitole 3.2.11
LOW_SYNC[17..0]
-
Výstup
Viz. obvod MCT v kapitole 3.2.11
HI_SYNC[17..0]
-
Výstup
Viz. obvod MCT v kapitole 3.2.11
RESYNC_ENABLE
Vcc
Výstup
Viz. obvod MCT v kapitole 3.2.11
MSU_ENABLE
Vcc
Výstup
Povoluje funkci MSU, čímž vlastně spouští analýzu (pokud je CAN analyzátor povolen globálním ENABLE jako celek)
INT_ENABLE
Vcc
Výstup
Povoluje funkci obvodu INT
EVENT_OUT[6..0]
-
Výstup
Kód události pro výstupní trigger (příloha A)
DISABLE_SYNC_ERROR_ Vcc WRITTING
Výstup
Viz. obvod MCT v kapitole 3.2.11
RESERVED_BIT_1
-
Výstup
Reservováno
RESERVED_BIT_2
-
Výstup
Reservováno
RESERVED_BIT_3
-
Výstup
Reservováno
Tab. 15: Popis vývodů obvodu SUU
61
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.2.16 Obvod Output Trigger (OUT)
Obvod OUT umožňuje generovat CAN analyzátoru výstupní trigger (puls) v případě, že dojde k události, pro kterou je naprogramován (detekce nějaké chyby apod.). Toho je možné využít například pro osciloskop běžící v režimu pretriggeringu a následnou analýzu fyzického stavu sběrnice poté, co CAN analyzátor vygeneroval výstupní trigger. Struktura obvodu na obrázku Obr. 48 je obdobná struktuře obvodu INT z kapitoly 3.2.14. Obdobný je i systém spouštění a zastavování čítače count[15..0]. V tomto případě je určen čítač pro definování délky výstupního pulsu 5 µs. Informaci o stavu v jakém se právě sledování CAN streamu nachází a na jaké události tedy může obvod OUT reagovat, přináší signál STATE[5..0]. Protože je tvořen superpozicí z mnoha zdrojů (obvody CML, CEL, CRL, MSU) a pro potlačení hazardních stavů, je synchronizován registrem sreg[5..0]. Signál EVENT_IN[6..0] potom určuje, na jakou událost má být výstupní trigger generován. Spodních 6 bitů tohoto signálu (EVENT_IN[5..0]) automat přímo porovnává se signálem STATE[5..0]. V případě rovnosti se jedná o zvolenou událost a bude vygenerován výstupní puls. Je-li 7. bit roven jedné (EVENT_IN[6]), potom bude výstupní trigger generován nejen na událost danou jeho spodními šesti bity, ale na každou událost, jejíž kód má šestý bit roven jedné. Takový kód mají všechny chybové události. Výstupní trigger tak může být generován na jednu naprogramovanou událost danou obsahem spodních 6 bitů signálu EVENT_IN[6..0] (chybovou či nikoliv) nebo také při jakékoliv chybě. Úplný seznam všech kódů událostí na které může být generován výstupní trigger je uveden v příloze A. Schematická značka obvodu Output Trigger je na obrázku Obr. 49 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 16.
nastavení na 0 count_ena DFFE
nastavení na 1
sreg[5..0] STATE[5..0]
DFFE
EVENT_IN[6..0]
Stavový automat
Čítač s komparátorem count[15..0]
OUT
Obr. 48: Struktura obvodu OUT
62
D E S I G N
A N A L Y Z Á T O R U
RESET ENABLE ENA2 CLK STATE[5...0] EVENT_IN[6...0]
V
H R A D L O V É M
P O L I
OUT
OUTPUT_TRIGGER
Obr. 49: Schematická značka obvodu OUT
Název vývodu Aktivní úroveň Zdroj signálu Popis RESET
Vcc
Vnější
Nastaví obvod do výchozího stavu
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
Vcc
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
STATE[5..0]
-
CML, CEL, CRL, MSU
Kód stavu sledování CAN streamu
EVENT_IN[6..0] -
SUU
Kód události na kterou má být vygenerován výstupní trigger
OUT
Výstup
Výstupní trigger (puls o šířce 5 µs)
GND
Tab. 16: Popis vývodů obvodu OUT
3.2.17 Obvod Write To FIFO (WTF)
Posledním z obvodů, které budeme potřebovat pro konstrukci CAN analyzátoru, je obvod WTF. Obvody popsané v předchozích kapitolách generují na svých výstupech informace určené pro zápis do vyrovnávací paměti CAN analyzátoru. Tyto informace tak dohromady tvoří soubor naměřených dat, která může uživatel od CAN analyzátoru získat. Obvod WTF tedy sbírá data od všech obvodů, které je generují, a provádí jejich zápis do vyrovnávací paměti, jež je jeho součástí. Zároveň vytváří rozhraní s vnějším prostředím a umožňuje tak uživateli přístup k naměřeným datům. Problematika paralelního zpracování událostí
CAN analyzátor je celek, ve kterém může probíhat mnoho činností současně (připomeňme, že se jedná o hardwarové funkce a činnosti mohou probíhat skutečně paralelně – nikoliv jako obdoba multitaskingu v případě mikroprocesoru). Výsledkem těchto činností pak může být požadavek na zápis do vyrovnávací paměti z několika zdrojů současně. Vyrovnávací paměť je realizována pamětí typu FIFO a neumožňuje současný zápis několika slov najednou. Aby bylo možné zajistit zápis všech událostí, které mohou nastat současně, je každé takové události přiřazen vyrovnávací registr. Vyrovnávací registry paralelních událostí
Obvod WTF obsahuje celkem osm registrů (tvořených klopnými obvody typu D – DFFE) paralelních událostí. Registry mají různou šířku v závislosti na informacích, kte63
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
ré jsou k události přidávány. Zapsat lze pouze kód události bez časové značky, kód události s časovou značkou a kód události s časovou značkou a číslem bitu v CAN streamu, na který se událost vztahuje. Přidání dodatkových informací až v obvodu WTF snižuje nároky na množství signálů vedených z ostatních obvodů a zlepšuje tak časové parametry při implementaci v konkrétním hradlovém poli. Každý z registrů má přiřazenu určitou prioritu. Tento krok je nezbytný, protože je nutno odlišit informace, které je třeba zapsat okamžitě (např. detekce chyby vkládání bitů) a informace, jejichž zápis může být proveden později (např. zápis události o přetečení čítače reálného času). Je třeba také znevýhodnit informace, které mohou neúměrně zvyšovat datový tok, ale přitom nemají odpovídající vliv na analýzu sběrnice (viz. kapitola 3.2.11). Seznam registrů a signálů, kterými je zápis aktivován je shrnut v tabulce Tab. 17. Název registru
Počet bitů
Aktivační signál + data
Signál Priorita Popis obsazení
SOFREG
33
SOFINP + -
SOFOUT
1nejvyšší
Zápis události SOF (Start Of Frame, začátek dat. rámce). • b32 – příznak obsazení (SOFOUT) • b31-b0 – časová značka
EOFREG
33
EOFINP + -
EOFOUT
2
Zápis události EOF (End Of Frame, konec dat. rámce). • b32 – příznak obsazení (EOFOUT) • b31-b0 – časová značka
BTTREG
49
BTTINP[8] + BTTINP[7..0]
BTTOUT
3
Zápis obecné události, jejíž kód je dán signálem BTTINP[7..0]. • b48 – příznak obsazení (BTTOUT) • b47-b40 – kód události (BTTINP[7..0]) • b39-b8 – časová značka • b7-b0 – číslo bitu (obsah čítače obvodu BIC)
DTTREG
41
DTTINP[8] + DTTINP[7..0]
DTTOUT
4
Zápis obecné události, jejíž kód je dán signálem DTTINP[7..0]. • b40 – příznak obsazení (DTTOUT) • b39-b32 – kód události (DTTINP[7..0]) • b31-b0 – časová značka
DTAREG
9
DTAINP[8] + DTAINP[7..0]
DTAOUT
5
Zápis obecné události, jejíž kód je dán signálem DTAINP[7..0]. • b8 – příznak obsazení (DTAOUT) • b7-b0 – kód události (DTAINP[7..0])
OVRREG
1
OVRINP + -
OVROUT
6
Zápis události přetečení čítače RTC • b0 – příznak obsazenosti
RESREG
33
RESINP + -
RESOUT
7
Zápis události chyba resynchronizace (obvod MCT) • b32 – příznak obsazení (RESOUT) • b31-b0 – časová značka
INTREG
33
INTINP + -
INTOUT
8
Zápis události vstupní trigger (obvod INT) • b32 – příznak obsazení (INTOUT) • b31-b0 – časová značka
Tab. 17: Registry paralelních událostí obvodu WTF
64
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Aktivační signál je prakticky přiveden na vstup povolení zápisu příslušného registru (enable) a vlastní zápis potom proběhne s následující hranou CLK. Zároveň je aktivační signál přiveden na vstup nejvyššího bitu registru, jehož výstup po zápisu potom generuje signál obsazení tohoto registru. To až do té doby, než bude obsah registru zapsán do vyrovnávací paměti FIFO a vynulován – tím je také zrušen příznak obsazenosti a do registru může být zapisována další událost. Podle druhu dalších informací, které jsou do registru vkládány současně s aktivačním signálem (viz. tabulka Tab. 17 a obrázek Obr. 50), jsou na vstupy vybraných registrů přivedeny signály RTIME[31..0] (časová značka z obvodu RTC) a BIT_NR[7..0] (pořadí právě zpracovávaného bitu CAN streamu z obvodu BIC). Prioritní uspořádání registrů zaručuje obvodům, že zprávy, jejichž zápis je časově kritický, budou zapsány přednostně a obvody nebudou muset čekat na uvolnění registrů tak dlouho, aby to mohlo ovlivnit jejich funkci (například obvody pro sledování CAN streamu CML, CEL a CRL). Rozbor přenosových rychlostí je v kapitole 6.
SOFINP SOFREG[31..0]
SOFOUT RTIME[31..0] EOFINP
EOFREG[31..0]
EOFOUT RTIME[31..0] BTTINP[8..0]
hard_full BTTREG[48..0] FULL
BIT_NR[7..0] BTTOUT RTIME[31..0] DTTINP[8..0]
DTTREG[40..0]
RD Q[7..0] EMPTY
FIFO
Stavový automat
DTTOUT RTIME[31..0] DTAINP[8..0]
DTAREG[8..0]
DTAOUT RTIME[31..0] OVRINP
OVRREG
OVROUT RTIME[31..0] RESINP
RESREG[31..0]
RESOUT RTIME[31..0] INTINP
INTREG[31..0]
INTOUT RTIME[31..0]
Obr. 50: Struktura obvodu WTF
65
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Struktura obvodu
Na obrázku Obr. 50 je znázorněna struktura obvodu WTF. Tvoří ji stavový automat, záchytné registry popsané v tabulce Tab. 17 a paměť typu FIFO s šířkou slova 8 bitů. O velikosti paměti FIFO lze říci pouze to, že by z praktických důvodů neměla být menší než 512 B. Horní mez je dána vlastnostmi konkrétního hradlového pole. Je třeba si uvědomit, že datové toky mohou být značné a vše závisí na tom, zda zařízení odebírající data z CAN analyzátoru stihne dostatečně rychle tato data odebírat. Protože je v praxi sběrnice zatížená nerovnoměrně, je žádoucí aby kapacita paměti FIFO byla „co největší“ – tak, aby byla schopna vyrovnat větší zatížení s ohledem na zařízení, které z ní data odebírá. Zde má velikost 2kB. Rozbor přenosových rychlostí a datových toků je v kapitole 6. Pokud zařízení nestihne data z paměti odebírat, tato se postupně zaplní, což signalizuje příznakem FULL. Jsou-li nějaká data z paměti odebrána, příznak FULL se stane neaktivním a do paměti je zase možné zapisovat – alespoň takto funguje běžná paměť FIFO. Z pohledu analyzátoru je tato funkce nežádoucí, neboť v okamžiku, kdy je FIFO plné, jsou některá data ztracena. Tím je narušena integrita naměřeného souboru dat a nelze je bezchybně vyhodnotit. Proto je zaveden registr hard_full (DFFE), jehož výstup je nastaven v okamžiku, kdy bylo poprvé FIFO zcela zaplněno a blokuje další zápis. Tento registr může být vynulován pouze restartem celého obvodu WTF signálem RESET. Výstup registru hard_full generuje výstupní signál FULL, který informuje uživatele o této situaci. Pokud tedy dojde k situaci, že je paměť FIFO zcela zaplněna, je třeba další měření ukončit. I přesto ale zůstává k vyhodnocení celý obsah paměti FIFO, což může být pro analýzu dostatečné. Algoritmus stavového automatu je popsán v následujících bodech (detailní komentář lze nalézt ve zdrojových souborech na doprovodném CDROMu (příloha E). • Od registru s nejvyšší prioritou směrem k nejnižší postupně prováděj test na žádost o zápis dat. V okamžiku kdy narazíš na první registr, který má data pro zápis, přejdi do odpovídajícího stavu, kde bude proveden zápis dat z tohoto registru do paměti FIFO. Praktická realizace spočívá v testování nejvyšších bitů registrů konstrukcí „if bit1 then přejdi do stavu1 elsif bit2 then přejdi do stavu2 else …..“ z kapitoly 2.3. Tuto konstrukci lze implementovat v jediném stavu automatu a prioritní rozhodnutí je tak velice rychlé – 1 TCLK. • Zapiš data z registru do paměti FIFO. Pokud je registr širší než jeden byte, je zapisován postupně po osmi bitech směrem od druhého nejvyššího bitu registru (první je příznak obsazení). Zápis do paměti FIFO probíhá s každou hranou CLK.
66
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
• Vynuluj právě zapsaný registr – tím je tedy zrušen příznak obsazení signalizovaný nejvyšším bitem každého registru. Registr je připraven pro zápis další události a vrať se na začátek. Pro komunikaci s analyzátorem má uživatel k dispozici signály paměti FIFO (RD povolující čtení, datový výstup Q[7..0] a signály FULL a EMPTY odpovídající příslušným příznakům paměti FIFO). Připomeňme, že čtení je synchronizováno s hodinovým signálem CLK a s každou hranou tohoto signálu je tedy přečten jeden bajt (pokud je čtení povoleno signálem RD). V případě, že by bylo požadováno přímé čtení nějakým externím procesorem, bylo by nutné zavést obdobný obvod jako Blok řízení zápisu z kapitoly 3.2.15. V tomto případě ale předpokládáme, že zde bude figurovat ještě nějaké rozhraní navržené vně vlastního CAN analyzátoru. V mém případě to je DRAM driver z kapitoly 3.4.1. Úplný význam všech zpráv a formát datového protokolu CAN analyzátoru je uveden v příloze B. Schematická značka obvodu je na obrázku Obr. 51 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 18.
Název vývodu Aktivní úroveň Zdroj signálu
Popis
RESET
MSU, Vnější
Nastaví obvod do výchozího stavu
Vcc
ENABLE
Vcc
Vnější
Pro povolení funkce obvodu musí být aktivní i ENA2
ENA2
Vcc
MSU
Pro povolení funkce obvodu musí být aktivní i ENABLE
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
RD
Vcc
Vnější
Signál čtení pro paměť FIFO
RTIME[31..0]
-
RTC
Obsah čítače reálného času obvodu RTC
BIT_NR[7..0]
-
BIC
Číslo právě zpracovávaného bitu CAN streamu
SOFINP
Vcc
CML
Signál zápisu do registru SOFREG
EOFINP
Vcc
CEL
Signál zápisu do registru EOFREG
INTINP
Vcc
INT
Signál zápisu do registru INTREG
OVRINP
Vcc
RTC
Signál zápisu do registru OVRREG
RESINP
Vcc
MCT
Signál zápisu do registru RESREG
DTTINP[8..0]
-
CEL, CRL, MSU Signál zápisu do registru DTTREG
DTAINP[8..0]
-
CML, CEL, CRL
BTTINP[8..0]
-
CML, CEL, MSU Signál zápisu do registru BTTREG
Q[7..0]
-
Výstup
Signál zápisu do registru DTAREG
FULL
Vcc
Výstup
Datový výstup vyrovnávací paměti FIFO CAN analyzátoru Příznak plné paměti FIFO
EMPTY
Vcc
Výstup
Příznak prázdné paměti FIFO
SOFOUT
Vcc
Výstup
Signál obsazení registru SOFREG
EOFOUT
Vcc
Výstup
Signál obsazení registru EOFREG
INTOUT
Vcc
Výstup
Signál obsazení registru INTREG
OVROUT
Vcc
Výstup
Signál obsazení registru OVRREG
Tab. 18: Popis vývodů obvodu WTF 67
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Název vývodu Aktivní úroveň Zdroj signálu Popis Vcc Vcc
Výstup
Signál obsazení registru RESREG
DTTOUT
Výstup
Signál obsazení registru DTTREG
DTAOUT
Vcc
Výstup
Signál obsazení registru DTAREG
BTTOUT
Vcc
Výstup
Signál obsazení registru BTTREG
RESOUT
Pokračování tabulky Tab. 18: Popis vývodů obvodu WTF
RESET ENABLE ENA2 CLK RD RTIME[31...0] BIT_NR[7...0] SOFINP EOFINP INTINP OVRINP RESINP DTTINP[8...0] DTAINP[8...0] BTTINP[8...0]
Q[7...0] FULL EMPTY SOFOUT EOFOUT INTOUT OVROUT RESOUT DTTOUT DTAOUT BTTOUT
WRITE_TO_FIFO
Obr. 51: Schematická značka obvodu WTF
3.3 CAN analyzátor jako virtuální součástka V kapitole 3.1 na obrázku Obr. 8 jsme uvedli hrubé blokové schéma CAN analyzátoru, s orientačně vyznačenými toky signálů. Protože v předchozích kapitolách jsme si popsali všechny obvody, které blokové schéma tvoří a známe všechny signály, můžeme nyní přistoupit ke zpřesnění a předložit detailní zapojení CAN analyzátoru. 3.3.1 Schéma zapojení CAN analyzátoru
Zapojení je uvedeno na obrázku Obr. 52 a je v souladu s původním blokovým schématem uvedeným na obrázku Obr. 8. Většina signálů je propojena z důvodů přehlednosti pouze symbolicky pomocí svých návěští (názvů na vývodech). Názorně propojeny jsou pouze globální signály (ENABLE, RESET a CLK), synchronizovaný signál sběrnice CAN CAN_BUS a signál CAN_DATA reprezentující vzorek bitu odebraný ze sběrnice v okamžiku Sample Time (kapitola 3.2.11). Obvod DRU je ve finále využíván pouze obvodem CML. Aby nemusely být signály potřebné pro jeho programování zbytečně vyváděny vně obvodu CML, byl obvod DRU připojen přímo do obvodu CML. Na obrázku Obr. 52 je z názorných důvodů ponechán obvod DRU vně a signály, které využívá pouze obvod CML jsou nezapojeny.
68
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Obr. 52: Schéma zapojení vnitřních obvodů CAN analyzátoru
D E S I G N
69
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Přestože celá předchozí kapitola byla poznamenána snahou o pohled na jednotlivé obvody CAN analyzátoru, jako by se jednalo o fyzické součástky, je třeba s jejich propojením nezapomínat, že bude ve skutečnosti realizováno hradlovým polem. 3.3.2 Realizace drátového součtu hradlovým polem
Aby propojení signálů z obrázku Obr. 52 dávalo dobrý smysl, připomeňme vlastnost syntézy v hradlovém poli, která je znázorněna na obrázku Obr. 53.
1
OUT1
IN
2
3
OUT2
Obr. 53: K vysvětlení „drátového“ součtu
Jsou zde tři obvody, jejichž výstupy a vstupy mohou představovat některé signály z našich symbolických obvodů z obrázku Obr. 52. Pokud by se jednalo o přímé fyzické propojení, tak oba výstupy OUT1 a OUT2 tvoří fyzikálně zkrat. Při syntéze v hradlovém poli zde však bude vytvořen tzv. drátový součet nebo součin, v závislosti na zvolené výchozí logické úrovni obou výstupů. Pokud tato není v návrhu přímo určena, implicitně se uvažuje hodnota GND. V tom případě bude na vstupu třetího obvodu po syntéze logická hodnota OUT1 or OUT2. Více o této problematice viz. [2]. 3.3.3 Popis signálů CAN analyzátoru
V souladu se zvyklostmi z předchozích kapitol si nyní vytvořme schematickou značku CAN analyzátoru, na který tak od této chvíle budeme nahlížet pouze z hlediska jeho vstupů a výstupů. Vracíme se tak na začátek kapitoly 3.1, kdy jsme o vnitřních obvodech CAN analyzátoru ještě nevěděli nic.
RESET ENABLE CLK COM_IN[7...0] COM_WR READ INTRIG CAN_BUS_RXD
Q[7...0] FULL EMPTY COM_BUSY OUTTRIG RESERVED_BIT_1 RESERVED_BIT_2 RESERVED_BIT_3
CAN_ANALYZATOR
Obr. 54: Schematická značka CAN analyzátoru
70
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Vstupní a výstupní signály CAN analyzátoru jsou na Obr. 52 znázorněny černými šipkami s názvy příslušných signálů. Jejich shrnutí nabízí schematická značka na obrázku Obr. 54 a popis tabulka Tab. 19. Pro další souvislosti pak lze odkázat na popisy jednotlivých obvodů z kapitoly 3.2
Název vývodu Aktivní úroveň Zdroj signálu Popis RESET
Vcc
Vnější
Restart všech obvodů CAN analyzátoru
ENABLE
Vcc
Vnější
Povolení funkce obvodů v CAN analyzátoru
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
COM_IN[7..0]
-
Vnější
Datový vstup pro konfiguraci CAN analyzátoru (obvod SUU)
COM_WR
Vcc
Vnější
Signál zápisu dat na vstupu COM_IN
READ
Vcc
Vnější
Signál žádosti o čtení naměřených dat z vyrovnávací paměti FIFO obvodu WTF
INTRIG
GND
Vnější
Vstupní trigger (obvod INT)
CAN_BUS_RXD GND
Vnější
Signál sběrnice CAN
FIFOOUT[7..0]
-
Výstup
Výstup naměřených dat z vyrovnávací paměti FIFO obvodu WTF
FULL
Vcc
Výstup
Příznak naplnění paměti FIFO obvodu WTF
EMPTY
Vcc
Výstup
Příznak, že paměť FIFO obvodu WTF je prázdná
COM_BUSY
Vcc
Výstup
Příznak, že konfigurační datový vstup je obszený
OUTTRIG
GND
Výstup
Výstupní trigger (obvod OUT)
RES_BIT_1
-
Výstup
Tento bit lze nastavovat pomocí konfiguračních příkazů obvodu SUU a lze jej libovolně využít v jiných částech návrhu mimo vlastní CAN analyzátor
RES_BIT_2
-
Výstup
To samé
RES_BIT_3
-
Výstup
To samé
Tab. 19: Popis vývodů CAN analyzátoru
3.3.4 Pracovní model CAN analyzátoru
Z předchozích kapitol víme, jak pracují jednotlivé obvody v CAN analyzátoru. Jistě nebude na škodu si na závěr kapitoly 3.3 stručně popsat činnost CAN analyzátoru z pohledu uživatele. • Předpokládejme, že uživatel vydá pokyn k zahájení analýzy. Připojený procesor poté, co provedl restart CAN analyzátoru (RESET) a uvolnil globální signál ENABLE, provede jeho konfiguraci (podle protokolu uvedeném v příloze A). • Do této chvíle se ještě pořád nic neděje. Globální signál ENABLE sice povoluje funkci CAN analyzátoru, ale většina obvodů, které provádí vlastní analýzu sběrnice je vázána ještě na druhý (lokální) enable od obvodu MSU. Povolení funkce obvodu MSU potom ovlivňuje přímo uživatel prostřednictvím konfiguračních příkazů pro obvod SUU.
71
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
• Posledním krokem před spuštěním analýzy je tedy povolení funkce obvodu MSU. Po zápisu příslušného konfiguračního příkazu do obvodu SUU ji tento povolí prostřednictvím svého signálu msu_enable. V tomto okamžiku je spuštěna vlastní analýza a koordinace činnosti dalších obvodů je zcela v kompetenci algoritmu obvodu SUU a uživatel ji již nijak neovlivňuje. • Během probíhající analýzy zaplňuje CAN analyzátor měřenými daty vyrovnávací paměť FIFO v obvodu WTF a uživatel si tato data nezávisle odebírá. • Ukončení analýzy je možné dvěma způsoby. Buď na žádost uživatele (deaktivací signálu ENABLE, resp. msu_enable) nebo v případě zaplnění celé vyrovnávací paměti FIFO v obvodu WTF (signál FULL), kdy je další zápis zablokován až do restartu. V druhém případě po detekci tohoto stavu by měl uživatel deaktivovat signál ENABLE a provést úplné vyčtení paměti FIFO. • Pro opětovné spuštění analýzy je třeba postupovat od prvního bodu.
3.4 Periferie CAN analyzátoru Protože již máme zcela navržen vlastní CAN analyzátor můžeme pomalu uvažovat, jak bude vypadat konkrétní hardwarová konstrukce výsledného analyzátoru. Stejně jako jsme si v kapitole 3.1 pojmenovali CAN analyzátorem strukturu z obrázku Obr. 8, představme si nyní strukturu obecnější. Pokud nebude moci dojít k omylu, nazývejme ji prostě analyzátor nebo analyzátor sběrnice CAN- Obr. 55.
Hradlové pole
Mikroprocesor 1
DRAM driver (řízení DRAM)
CAN analyzátor
Intercom
USB
DRAM SIMM 32 MB
Mikroprocesor 2
PC
Obr. 55: Bloková struktura analyzátoru
72
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Hardware analyzátoru bude popsán až v kapitole 4. Abychom mohli zcela dokončit tu část návrhu analyzátoru, která bude implementována v hradlovém poli, popišme si již nyní blokově jeho strukturu z obrázku Obr. 55. Je patrné, že se bude jednat o multiprocesorový sytém se dvěma procesory. Jeden zajišťuje obsluhu USB zařízení a druhý provádí vlastní řízení CAN analyzátoru na základě komunikace s uživatelem (PC). Vzájemná komunikace obou procesorů je zajištěna prostřednictvím obvodu INTERCOM v hradlovém poli. Na základě rozboru datových toků z kapitoly 6, byla přidána paměť DRAM ve formě modulu SIMM 72 pinů (běžná paměť používaná v PC). Tato paměť slouží k vyrovnávání špičkových zátěží na sběrnici a tvoří rozhraní mezi vyrovnávací pamětí CAN analyzátoru (WTF) a uživatelem. Má kapacitu 32 MB. Zápis naměřených dat z obvodu WTF (kapitola 3.2.17) do paměti DRAM zajišťuje obvod pro řízení paměti – DRAM driver. Je rovněž realizován v hradlovém poli. 3.4.1 Obvod pro řízení paměti – DRAM driver (DRD) Paměťové moduly SIMM 72 pinů
Paměťové moduly SIMM 72 pinů mohou podle [3] existovat ve dvou provedeních. První jsou moduly ECC, jejichž datové slovo obsahuje jeden bit navíc pro chybovou korekci (Error Correction Bits). Druhé provedení představují moduly non ECC, které mohou být dále ještě paritní a neparitní. Paritní mají v datovém slově navíc jeden bit pro kontrolu parity (kontrolní mechanismus, kterým se testuje sudý nebo lichý počet jedniček v datovém slově). Obě verze jsou vzájemně pinově nekompatibilní a existují pro napájení 5V a 3,3V. Nás budou dále zajímat pouze non ECC neparitní SIMM moduly s napájením 5V. Dopusťme se malého prohřešku a prohlašme o nich, že to jsou „ty moduly, které byly dříve běžně používány v PC“. Mezi jejich nezanedbatelnou přednost patří zejména fakt, že v současné době se již v PC nepoužívají a jejich cena je velmi nízká. Přístupová doba těchto modulů (tRAC – doba od přivedení signálu /RAS do obdržení platných dat na výstupu) je 100, 80, 70 nebo 60 ns. Časování v obvodu DRD je zaručeno pro tRAC = 70 ns. Rozhraní pro zápis a čtení dat má šířku 32 bitů. Lze tak najednou zapsat až čtyři byte dat na jednu adresu. Konfigurace SIMM modulů
Každý SIMM modul má vyhrazeny čtyři PD (Presence Detect) piny, které slouží pro detekování kapacity paměti, její konfigurace a přístupové doby vloženého modulu podle tabulky Tab. 20. Symbol O znamená, že pin je nezapojený, symbol S značí připojení k VSS. Konfigurace je označena celkovou kapacitou paměti a její organizací. Tedy zápis 4 MB (1M X 32) znamená celkovou kapacitu 4 MB s organizací 1M (220) 32 bitových slov. 73
D E S I G N
A N A L Y Z Á T O R U
V
Konfigurace
tRAC
1 MB (256 X 32) 64 MB (16M X 32)
100 ns
S
O
S
S
80 ns
S
O
O
S
2 MB (512K X 32) 128 MB (32M X 32)
4 MB (1M X 32) 256 MB (64M X 32)
70 ns
S
O
S
O
S
O
O
O
100 ns
O
S
S
S
80 ns
O
S
O
S
70 ns
O
S
S
O
60 ns
O
S
O
O
100 ns
S
S
S
S
80 ns
S
S
O
S
70 ns
S
S
S
O
60 ns
16 MB (4M X 32) 1 GB (256M X 32)
32 MB (8M X 32) 2 GB (512M X 32)
P O L I
PD1 PD2 PD3 PD4
60 ns
8 MB (2M X 32) 100 ns 0,5 GB (128M X 32) 80 ns
H R A D L O V É M
S
S
O
O
O
O
S
S
O
O
O
S
70 ns
O
O
S
O
60 ns
O
O
O
O
100 ns
S
O
S
S
80 ns
S
O
O
S
70 ns
S
O
S
O
60 ns
S
O
O
O
100 ns
O
S
S
S
80 ns
O
S
O
S
70 ns
O
S
S
O
60 ns
O
S
O
O
Tab. 20: Detekce konfigurace SIMM modulů
Z tabulky je patrné, že pro jednoznačné určení kapacity paměti jsou piny PD1-PD4 nepostačující a je třeba provést ještě přímé testování dostupných adresových vodičů. Těch může být podle kapacity 8 – 14. Standard dále připouští celou řadu možností organizace jednotlivých DRAM čipů v modulu. Například SIMM o kapacitě 8 MB je možné realizovat pomocí 16 DRAM čipů s organizací 1M X 4 nebo také pomocí 4 čipů s organizací 1M X 16. Jednotlivé čipy takto mohou být umístěny z obou stran plošného spoje modulu nebo pouze ze strany jedné. Pro řízení paměti nabízí SIMM modul datové vodiče (DQ0-DQ31), adresové vodiče (A0-A14), signál pro zápis (/WE) a signály pro zápis řádkové a sloupcové adresy (/RAS a /CAS). Signály /CAS jsou k dispozici odděleně pro každé datové slovo zvlášť (/CAS0-/CAS3). Signály /RAS jsou také čtyři (/RAS0-/RAS3), avšak jejich využívání závisí na konkrétním uspořádání DRAM čipů v SIMM modulu (viz. předchozí odstavec).
74
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Refresh DRAM v SIMM modulech
SIMM moduly jsou tvořeny dynamickými pamětmi. Obsah dynamických pamětí je na rozdíl od pamětí statických nutné periodicky obnovovat – provádět jejich Refresh. Jinak dojde ke ztrátě dat. Prakticky je nutné pravidelně aktivovat všechny adresové vodiče signálem /RAS, čímž dojde k obnovení informace v celém řádku paměťové matrice. Pro SIMM moduly je definován tzv. 1k Refresh. Tento představuje základní dobu 16 ms, během které je nutno obnovit informaci ve všech řádcích SIMM modulu o kapacitě využívající 10 adresových vodičů – tedy 1024 adres. Analogicky pro 11 adresových vodičů dostáváme 2k Refresh (2048/32 ms), pro 12 vodičů 4k Refresh (4096/64ms) apod. Popis všech vývodů, geometrické uspořádání, konfigurace a přípustné organizace čipů v SIMM modulu je uveden v [3].
/CAS1 /CAS0 /WE A0-A11
/RAS0
/RAS2
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
A0-A11 /RAS /CAS /WE
DQ DQ DQ DQ
DQ0 DQ1 DQ2 DQ3
DQ4 DQ5 DQ6 DQ7
DQ8 DQ9 DQ10 DQ11
DQ12 DQ13 DQ14 DQ15
DQ16 DQ17 DQ18 DQ19
DQ20 DQ21 DQ22 DQ23
DQ24 DQ25 DQ26 DQ27
DQ28 DQ29 DQ30 DQ31
DQ A0-A11 DQ /RAS DQ /CAS DQ /WE
/RAS1
DQ A0-A11 DQ /RAS DQ /CAS DQ /WE DQ A0-A11 DQ /RAS DQ /CAS DQ /WE DQ A0-A11 DQ /RAS DQ /CAS DQ /WE DQ A0-A11 DQ /RAS DQ /CAS DQ /WE DQ A0-A11 DQ /RAS DQ /CAS DQ /WE DQ A0-A11 DQ /RAS DQ /CAS DQ /WE DQ A0-A11 DQ /RAS DQ /CAS DQ /WE
/RAS3
/CAS3 /CAS2
Obr. 56: Vnitřní organizace použitého SIMM modulu 32 MB
75
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Použitý SIMM modul 32 MB
Na obrázku Obr. 56 je zapojení jednotlivých čipů v použitém SIMM modulu o kapacitě 32 MB. Modul má organizaci 8M x 32 bitů. Použité DRAM čipy potom 4M x 4 bity. To dává dohromady výslednou kapacitu 32 MB. SIMM je realizován z 16-ti DRAM čipů, na každé straně modulu jich je osm – tedy 2 x 16MB. Každá strana modulu je aktivována pomocí jiných signálů /RAS. Pro přístup do levé poloviny použijeme signály /RAS0 a /RAS2. Pro přístup do pravé potom signály /RAS1 a /RAS3. SIMM má 11 adresových vodičů (A0-A10), což vyžaduje 2k Refresh.
Převodník logické adresy na fyzickou Dekodér banky
Čítače logických adres pro čtení a zápis
Výběr byte
MUX
Dekodér řádkové adresy
wrcount[24..0] rdcount[24..0]
DRAM_FULL DRAM_EMPTY
Dekodér sloupcové adresy
Generování příznaků DRAM_FULL DRAM_EMPTY
Řízení signálů /RAS
/RAS0 - /RAS3
Řízení signálů /CAS
/CAS0 - /CAS3
Blok řízení čtení
DQ0-DQ31 FIFO
/RD_BUS51
DOUT[7..0] DRAM_CACHE_EMPTY
Stavový automat
DRAM_BYPASS
DRAM_CACHE_FULL
DQ[31..0]
/WE
ADDR[11..0]
CAN_FIFO[7..0]
CAN_EMPTY
CAN_RD
Čítač refresh cyklů refreshcount[9..0]
Obr. 57: Struktura obvodu DRD
Struktura obvodu DRD
Struktura obvodu DRD je znázorněna na obrázku Obr. 57. Z pohledu uživatele je řízení paměti DRAM navrženo tak, aby se navenek chovala jako paměť FIFO o kapacitě 32 MB – označme ji jako DRAM FIFO (uživatelem míníme například procesor, který bude data z DRAM odebírat). Pro její adresování tak platí stejné principy jako pro pravou paměť FIFO. Jsou zde dva čítače, které generují logickou adresu pro zápis a čtení (wrcount[24..0] a rdcount[24..0]). Adresace je v rozsahu 0 – (225 – 1) (tedy 32MB). Podle toho, zda automat právě provádí čtení nebo zápis je jedna z těchto adres multiplexerem přivedena na vstup převodníku logické adresy na fyzickou. Ten logickou adresu rozdělí pro další bloky podle její struktury. Struktura logické adresy je následující:
76
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
• Bit 24 – výběr banky (s kterou polovinou SIMMu budeme právě operovat – viz. Obr. 56). Stavový automat provádí-li zápis nebo čtení z paměti pouze nastaví všeobecný signál žádosti o /RAS. Blok Řízení signálů /RAS na základě této žádosti a hodnoty bitu b24 potom aktivuje konkrétní signály /RAS0 a /RAS2 nebo /RAS1 a /RAS3. • Bity 23-22 – výběr byte. Převodník log./fyz. adresu tyto dva bity předává do bloku Řízení signálů /CAS. Obdobně jako se signálem /RAS i zde automat generuje pouze všeobecný signál žádosti o /CAS. Na základě této žádosti dekodér v bloku Řízení signálů /CAS aktivuje podle hodnot bitů b23 a b22 jeden ze signálů /CAS0-/CAS4. Tím je zpřístupněn jeden ze čtyř bajtů datového rozhraní SIMM modulu. • Bity 21-11 – řádková adresa (RAS adresa). • Bity 10-0 – sloupcová adresa (CAS adresa). Před každou operací čtení nebo zápisu je příslušný čítač inkrementován a operace provedena. Pokud čítače dočítají do své maximální hodnoty, začínají čítat znovu od nuly. Příznaky prázdné a plné paměti DRAM - DRAM_EMPTY a DRAM_FULL - generuje stejnojmenný blok. Pro tyto příznaky platí podmínky (7). if wrcount[24..0] == rdcount[24..0] then dram_empty = Vcc; else dram_empty = GND; end if; if wrcount[24..0] == (rdcount[24..0] – 1) then dram_full = Vcc; else dram_full = GND; end if; (7)
Jestliže je DRAM_FULL aktivní, požadavek na zápis do DRAM je ignorován. Naše DRAM FIFO má ale zatím jeden podstatný nedostatek. Pravá paměť FIFO je realizována z dvoubránové paměti, takže do ní lze současně přistupovat ze dvou míst a najednou zapisovat i číst. To s pamětí DRAM nelze. Je ale nezbytné zajistit, že uživatel (mikroprocesor), který bude data z DRAM vyčítat, nebude muset čekat v případě, že by právě probíhal zápis. Tento problém řeší malé „pravé“ FIFO, které je automaticky plněno daty z „velkého“ DRAM FIFA vždy, když není plné a v DRAM FIFU jsou nějaká data k dispozici. FIFO má kapacitu 64B. Vzhledem k tomu, že rychlost přepisu dat z DRAM FIFO do FIFO je několikanásobně větší než rychlost, s jakou může typický jednočipový mikropočítač data odebírat, simuluje tento proces plnohodnotné FIFO o kapacitě 32 MB. Rozbor datových toků a přenosových rychlostí je v kapitole 6.
77
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Protože FIFO je synchronizováno signálem CLK, byl ze stejných důvodů jako v kapitole 3.2.15 přidán Blok řízení čtení. Pro čtení z DRAM FIFO prostřednictvím FIFO jsou tedy pro uživatele důležité pouze průběhy z obrázku Obr. 58.
min 1 TCLK
min 2 TCLK
/RD_BUS51
DOUT[7..0]
Předchozí platná data
Platná data
max 2 TCLK
Obr. 58: Časování při čtení dat z obvodu DRD
Na závěr popišme algoritmus stavového automatu: V počátečním stavu je nejdříve třeba rozhodnout o další činnosti. Nejvyšší prioritu má refresh paměti. Přijde-li žádost o refresh (z čítače refreshcount[9..0]), je provedeno obnovení řádkové adresy (čítač refreshadr[10..0]) - tzv. RAS-Only-Refresh cyklus (viz. [16]). 1. Jestliže je požadavek na refresh, obsluž jej a pokračuj znovu bodem 1, jinak pokračuj bodem 2. 2. Jestliže právě není požadavek na refresh, ve vyrovnávací paměti CAN analyzátoru (obvod WTF) jsou nějaká data (not CAN_EMPTY) a DRAM FIFO není plné (not DRAM_FULL), proveď zápis dat z CAN analyzátoru do DRAM FIFO. Využívá se pouze obyčejný cyklus zápisu DRAM – tzv. Early Write (viz. [16]) a zápis je prováděn po jednom bajtu. Dál pokračuj bodem 3. 3. Jestliže je požadavek na refresh, obsluž jej a pokračuj bodem 1, jinak pokračuj bodem 4. 4. Jestliže právě není požadavek na refresh, DRAM FIFO není prázdné (not DRAM_EMPTY) a není plné FIFO (not DRAM_CACHE_FULL), přečti byte z DRAMFIFO a zapiš jej do FIFO. Využíván je pouze obyčejný cyklus čtení DRAM – tzv. Read Cycle (viz. [16]) a čtení je prováděno po jednom byte. Pokračuj bodem 1. Shrneme-li tedy funkci obvodu DRD, tak odebírá naměřená data z CAN analyzátoru a zapisuje je do paměti DRAM FIFO. Střídavě také zjišťuje, zda není výstupní FIFO prázdné. Pokud ano, tak data z DRAM FIFO zase postupně čte a zapisuje je do výstupní paměti FIFO . Fakt, že je výstupní FIFO plné znamená, že uživatel (mikroprocesor) data nestíhá odebírat a tato jsou postupně ukládána v DRAM FIFO. 78
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Popisy všech signálů pro řízení DRAM a jejich časování lze nalézt například v [16]. Schematická značka obvodu DRD je na obrázku Obr. 59 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 21.
RESET CLK /RD_BUS51 CAN_FIFO[7...0] CAN_EMPTY DRAM_BYPASS
DQ[31...0] ADDR[10...0] /WE /RAS0 - /RAS3 /CAS0 - /CAS3 CAN_RD DOUT[7...0] DRAM_EMPTY DRAM_FULL DRAM_CACHE_EMPTY DRAM_CACHE_FULL
DRAM_DRIVER
Obr. 59: Schematická značka obvodu DRD
Název vývodu
Aktivní úroveň Zdroj signálu Popis
RESET
Vcc
Vnější
Restart obvodu DRAM (ztráta všech dat)
CLK
Náběžná hrana
Vnější
Hodinový synchronizační signál s periodou TCLK (20ns)
/RD_BUS51
GND
Vnější
Signál pro čtení z vyrovnávací paměti FIFO obvodu DRD
CAN_FIFO[7..0]
-
CAN analyzátor Datový výstup CAN analyzátoru (obvod WTF)
CAN_EMPTY
Vcc
CAN analyzátor Příznak, že CAN analyzátor nemá žádná data
DRAM_BYPASS
Vcc
CAN analyzátor Přemostí paměť DRAM a posílá uživateli data přímo z CAN analyzátoru. Pouze pro diagnostické účely.
DQ[31..0]
-
Vnější/Výstup
Obousměrná datová brána pro přenos dat z/do DRAM
ADDR[10..0]
-
Výstup
Adresové vodiče DRAM
/WE
GND
Výstup
Signál pro zápis do DRAM
/RAS0 - /RAS3
GND
Výstup
Signály /RAS0 - /RAS3 DRAM
/CAS0 - /CAS3
GND
Výstup
Signály /CAS0 - /CAS3 DRAM
CAN_RD
Vcc
Výstup
Signál pro čtení dat z CAN analyzátoru (obvod WTF)
DOUT[7..0]
-
Výstup
Datový výstup z vyrovnávací paměti FIFO obvodu DRD. Zde uživatel obdrží data z DRAM.
DRAM_EMPTY
Vcc
Výstup
Příznak, že DRAM FIFO je prázdné
DRAM_FULL
Vcc
Výstup
Příznak, že DRAM FIFO je plné
DRAM_CACHE_ EMPTY
Vcc
Výstup
Příznak, že vyrovnávací FIFO obvodu DRD je prázdné (pro uživatele to znamená, že je prázdné DRAM FIFO.
DRAM_CACHE_ FULL
Vcc
Výstup
Příznak, že vyrovnávací FIFO obvodu DRD je plné. Pro uživatele to neznamená nic. Pouze může usuzovat, že nestíhá dostatečně rychle odebírat data.
Tab. 21: Popis vývodů obvodu DRD
79
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
3.4.2 Obvod Intercom (ITC)
Jak je znázorněno na obrázku Obr. 55, výsledná hardwarová podoba analyzátoru bude představovat systém s dvěma procesory. Obvod ITC pro ně vytváří komunikační rozhraní. Zároveň zajišťuje také připojení výstupu obvodu DRD na toto rozhraní.
FIFOSX_WR
Blok řízení zápisu Zachycení adresy FIFOSX_IN[7..0]
FIFO
FIFOSX_FULL
FIFO51_RD
AD[7..0] ALE
FIFOSX_EMPTY
Blok řízení čtení
Blok řízení čtení
/RD /WR DRAM[7..0]
FIFO51_EMPTY FIFO51_OUT[7..0]
FIFO51_FULL FIFO
Blok komparátorů DRAM_RDCS
Blok řízení zápisu
PROCESOR 1
CS_USB
PROCESOR 2
Obr. 60: Uspořádání obvodu ITC
V obrázku Obr. 60 je symbolicky čárkovaně naznačeno rozhraní obou procesorů. Procesor 1 ovládá přístup k rozhraní programově pomocí svých bran (portů). Procesor 2 je vybaven multiplexovanou sběrnicí a rozhraní s jeho registry pro něj představuje paměťově mapovanou periferii. Protože oba procesory mají rozdílnou architekturu, je komunikační kanál tvořen dvěma pamětmi typu FIFO o velikosti 32 B. Každý z procesorů vždy jedno FIFO využívá pro zápis zpráv a druhé FIFO mu slouží pro čtení. Paměti FIFO tak dohromady vytváří duplexní komunikační kanál mezi oběma procesory. To umožňuje procesorům pružnou komunikaci i při velmi rozdílných výkonech. Význam Bloků řízení zápisu a čtení již byl zmiňován několikrát. I s časováním signálů lze nalézt jejich popis v kapitolách 3.2.15 a 3.4.1. Procesor 2 s rozhraním komunikuje prostřednictvím signálů multiplexované sběrnice. Demultiplexování zajišťuje blok Zachycení adresy, jehož registr (LATCH) po ukončení platnosti signálu ALE obsahuje adresu registru, na který se bude vztahovat operace čtení nebo zápisu (signály /RD a /WR). Více o multiplexovaných sběrnicích např. v [7]. 80
D E S I G N
A N A L Y Z Á T O R U
V
H R A D L O V É M
P O L I
Blok komparátorů potom podle zachycené adresy vygeneruje signály CS (Chip Select), kterými aktivuje datové rozhraní příslušných adresovaných zařízení. Seznam adres dostupných zařízení je uveden v tabulce Tab. 22. Všechny adresy jsou osmibitové a dekódují se pouze horní čtyři bity (spodní čtyři se zrcadlí). Adresa Popis (dekadicky) 128
Čtení z komunikačního kanálu
64
Zápis do komunikačního kanálu
32
Adresa obvodu D12 pro obsluhu USB. Na této adrese probíhá komunikace procesoru 2 s obvodem D12 vně vlastního hradlového pole. To pouze generuje CS pro tento obvod (signál CS_USB).
16
Čtení dat z vyrovnávací paměti obvodu DRD (signálem DRAM_RDCS)
Tab. 22: Adresy dostupných zařízení v obvodu ITC
Schematická značka obvodu ITC je na obrázku Obr. 61 a tabulka s popisem vývodů a zdrojů signálů je tabulka Tab. 23.
Název vývodu
Aktivní úroveň
Zdroj signálu Popis
RESET
Vcc
Vnější
Restart obvodu ITC (ztráta všech dat).
CLK
Náběžná hrana
Vnější
Hodinový synchr. signál s periodou TCLK. (20ns)
ALE
Vcc
Procesor 2
Signál zachycení adresy multiplexované sběrnice.
/RD
GND
Procesor 2
Signál čtení multiplexované sběrnice.
/WR
GND
Procesor 2
Signál zápisu multiplexované sběrnice.
FIFOSX_IN[7...0]
-
Procesor 1
Datový vstup do komunikačního kanálu ze strany procesoru 1.
FIFOSX_WR
Vcc
Procesor 1
Zápis do komunikačního kanálu.
FIFO51_RD
Vcc
Procesor 1
Čtení z komunikačního kanálu.
DRAM[7..0]
-
DRD
Datový výstup z vyrovnávací paměti obvodu DRD.
AD[7..0]
-
Procesor2 / Výstup
Data obousměrné multiplexované sběrnice.
CS_USB
GND
Výstup
Výběr obvodu D12 (USB).
DRAM_RDCS
GND
Výstup
Signál čtení z vyrovnávací paměti obvodu DRD.
FIFOSX_EMPTY
Vcc
Výstup
Signál pro procesor 2, že v komunikačním kanálu pro něj nejsou od procesoru 1 žádné zprávy.
FIFOSX_FULL
Vcc
Výstup
Signál pro procesor1, že je komunikační kanál plný a nelze do něj zapisovat.
FIFO51_OUT[7..0] -
Výstup
Datový výstup z komunikačního kanálu na straně procesoru 1.
FIFO51_EMPTY
Vcc
Výstup
Signál pro procesor 1, že v komunikačním kanálu pro něj nejsou od procesoru 2 žádné zprávy.
FIFO51_FULL
Vcc
Výstup
Signál pro procesor 2, že je komunikační kanál plný a nelze do něj zapisovat.
Tab. 23: Popis vývodů obvodu ITC
81
D E S I G N
A N A L Y Z Á T O R U
RESET CLK ALE /RD /WR FIFOSX_IN[7...0] FIFOSX_WR FIFO51_RD DRAM[7...0]
V
H R A D L O V É M
P O L I
AD[7...0] CS_USB DRAM_RDCS FIFOSX_EMPTY FIFOSX_FULL FIFO51_OUT[7...0] FIFO51_EMPTY FIFO51_FULL
INTERCOM
Obr. 61: Schematická značka obvodu ITC
3.5 Závěrečná podoba návrhu v hradlovém poli Obvod ITC představoval poslední část v návrhu analyzátoru sběrnice, jehož funkce bude realizována v hradlovém poli. Vzájemným propojením obvodů CAN analyzátoru (kap. 3.3), obvodu DRD (kap. 3.4.1) a obvodu ITC (kap. 3.1.1) jsme se dostali na nejvyšší úroveň v hierarchii návrhu. Všechny vstupy a výstupy již jsou přímo připojeny na fyzické vstupy a výstupy hradlového pole. Výsledné schéma zapojení je na obrázku Obr. 62.
RB3 ALE P3.7 P3.6 RC RD0 RD3
COM_RESET CLK ALE /RD /WR CF_IN[7...0] FIFOSX_WR FIFO51_RD
RESET CLK ALE /RD /WR FIFOSX_IN[7...0] FIFOSX_WR FIFO51_RD DRAM[7...0]
AD[7...0] CS_USB DRAM_RDCS FIFOSX_EMPTY FIFOSX_FULL FIFO51_OUT[7...0] FIFO51_EMPTY FIFO51_FULL
AD[7...0] CS_USB
P0
FIFOSX_EMPTY FIFOSX_FULL FIFO51_OUT[7...0] FIFO51_EMPTY FIFO51_FULL
P1.1 RD2 RE RD1 P1.0
INTERCOM
RB2
DRD_RESET
RESET CLK /RD_BUS51 CAN_FIFO[7...0] CAN_EMPTY DRAM_BYPASS
DQ[31...0] ADDR[10...0] /WE /RAS0 - /RAS3 /CAS0 - /CAS3 CAN_RD DOUT[7...0] DRAM_EMPTY DRAM_FULL DRAM_CACHE_EMPTY DRAM_CACHE_FULL
DQ[31...0] ADDR[10...0] /WE /RAS0-/RAS3 /CAS0-/CAS3
DRAM_EMPTY DRAM_FULL DRAM_CACHE_EMPTY DRAM_CACHE_FULL
RD5 RD4 RB4, P1.2 P1.3
DRAM_DRIVER
RA4 RA5
RD6
CAN_RESET CAN_ENABLE
COM_WR INTRIG CAN_BUS_RXD
RESET ENABLE CLK COM_IN[7...0] COM_WR READ INTRIG CAN_BUS_RXD
FIFOOUT[7...0] FULL EMPTY COM_BUSY OUTTRIG RESERVED_BIT_1 RESERVED_BIT_2 RESERVED_BIT_3
CAN_FULL CAN_EMPTY COM_BUSY OUTTRIG
RB6 RB7 RD7
CAN_ANALYZATOR
Obr. 62: Výsledné schéma zapojení návrhu analyzátoru v hradlovém poli 82
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
4 Kapitola
Hardwarový návrh analyzátoru Kapitola
4 je věnována analyzátoru sběrnice CAN z hlediska jeho
hardwarového návrhu. První části této kapitoly je věnována implementaci návrhu CAN analyzátoru do konkrétního hradlového pole a jeho programování. Následuje charakteristika použitých mikroprocesorů a obvodu pro komunikaci s USB. Předposlední část popisuje blokové uspořádání hardware analyzátoru a závěr je věnován desce plošných spojů.
4. Hardwarový návrh analyzátoru
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
4.1 Implementace v hradlovém poli 4.1.1 Rámcový výběr obvodu
Celý návrh z kapitoly 3 je zcela obecný a není vázán na konkrétní hradlové pole. Přesto již v počátcích návrhu se ukázalo, že je třeba mít alespoň rámcovou představu o konkrétním typu hradlového pole, ve kterém bude návrh implementován. Na výběr obvodu mají vliv zejména následující vlastnosti návrhu. Prvky specifické pro danou architekturu
Pokud ve svém návrhu hodláme využívat prvky specifické pro nějakou konkrétní architekturu, je nezbytné znát předem obvod (nebo alespoň rodinu obvodů), které ji umožní implementovat. V návrhu z kapitoly 3 jsou například hojně využívány paměti FIFO. Tím je výběr obvodů zúžen na architekturu, jež obsahuje bloky EAB pro implementaci pamětí (kapitola 4.1.3). Složitost návrhu
Složitost návrhu a z toho plynoucí počet potřebných logických elementů, bloků EAB apod. Pokud zatím neexistuje návrh ani z části, může zde být rozhodnutí velmi složité a odhadnout předem nároky návrhu na logickou kapacitu obvodu není jednoduché. Vyplatí se volit pole s dostatečnou rezervou i s ohledem na budoucí úpravy v návrhu. Časové parametry návrhu
Základní časové parametry – zejména tS (setup time) a tCO (clock-to-output-time) z kapitoly 2.2.1. Mohou představovat podstatný problém z hlediska návrhu. Najít obvod, který by splňoval požadavky návrhu na velikost a architekturu zpravidla není obtížné. Obvod, který by splňoval časové parametry návrhu nemusí vůbec existovat. 4.1.2 Zlepšování časových parametrů návrhu
Časové parametry jsou ovlivňovány především dvěma způsoby. První jsou techniky používané při vlastním návrhu (příliš rozsáhlé stavové automaty, komplexní logika, velké množství logických zátěží, neregistrované výstupy apod.). Druhý způsob představují schopnosti použitého algoritmu pro implementaci návrhu do hradlového pole (tzv. fitter) – tedy jak je skutečně návrh prostorově rozmístěn v hradlovém poli. Je-li například na základě simulace zjištěno, že návrh nesplňuje časové parametry obvodu lze udělat následující: • Revidovat návrh. To znamená redukovat rozsáhlé stavové automaty, logickou zátěž jednotlivých signálů apod. • Je-li to možné a vhodné použít rychlejší hradlové pole.
84
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
• Pokud nic z výše uvedeného nepomůže, nabízí program EMAX+ plus II možnost přímo ovlivnit vnitřní prostorové rozložení návrhu v hradlovém poli. Protože výsledek fitovacího algoritmu nemusí být z tohoto pohledu příliš optimální, je možné, že se uživateli podaří najít lepší umístění časově kritických prvků. Tato činnost je ovšem poměrně komplikovaná a vyžaduje detailní znalosti vnitřní struktury konkrétního hradlového pole. 4.1.3 Návrh analyzátoru
Z prvních rozborů CAN analyzátoru bylo zřejmé, že návrh bude z hlediska časových parametrů kritický. Bude obsahovat celou řadu částí a rozsáhlých stavových automatů, které musí být synchronizovány nejméně na kmitočtu 50 MHz. Na základě těchto rozborů byl vybrán pro implementaci obvod EP1K50 z rodiny ACEX firmy ALTERA. Již při samostatném návrhu jednotlivých obvodů z kapitoly 3, bylo úzkostlivě dbáno na jejich časové parametry. Přednost tohoto přístupu se projevila tím, že i při závěrečném propojení celého návrhu (kapitola 3.5) byly splněny časové parametry obvodu EP1K50 a nemuselo se přistoupit k opatřením z předchozí kapitoly. Prakticky celý návrh analyzátoru pak vznikl pouze za pomoci simulačních prostředků programu EMAX+ plus II, které umožňují detailní časovou analýzu a kontrolu časových parametrů pro konkrétní zvolené hradlové pole. 4.1.4 Programovatelné pole ACEX EP1K50-208-1
Zvolené programovatelné pole zcela odpovídá složitosti návrhu. Jedná se o obvod, který obsahuje 2880 logických elementů uspořádaných do 360-ti logických bloků. Součástí jeho struktury je 10 bloků paměti RAM (EAB), jejichž celková kapacita je 40960 bitů. Pouzdro obsahuje 208 vývodů. Více k architektuře v kapitole 2.2.2. Programovatelné pole obsahuje celý návrh z kapitoly 3, jehož výsledná struktura je na obrázku Obr. 62, kde jsou také přímo znázorněny vstupní a výstupní signály připojené přímo na piny hradlového pole. Volba konkrétního pinu je z pohledu návrhu hradlového pole zcela libovolná a lze ji flexibilně měnit podle potřeb vnějších obvodů připojených fyzicky k hradlovému poli. Návrh CAN analyzátoru využívá 8 bloků EAB a přibližně 65% dostupných logických elementů. Je zde tedy prostor pro budoucí úpravy. Konfigurace hradlového pole je uložena v paměti typu RAM a je tedy nutné pole po každém zapnutí napájení znovu naprogramovat. 4.1.5 Programování obvodu ACEX 1K
Hardware analyzátoru umožňuje programování dvěma způsoby:
85
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
• Externí pamětí EPROM nebo EEPROM, která je vybavena speciálním rozhraním pro programování těchto obvodů. Tento způsob je vhodný pro již odladěný program. • Využitím vlastnosti ISP (programování již zapojené součástky) prostřednictvím PS rozhraní (viz. [5]). Toto je způsob využívaný v průběhu ladění návrhu nebo v případě změny konfigurace obvodu za běhu aplikace.
Vcc
Vcc
DCLK DATA0 nSTATUS CONF_DONE nCONFIG
DCLK DATA OE nCS nINIT_CONF
Konfigurační zařízení
ACEX 1K
Obr. 63: Programování obvodu ACEX
Na obrázku Obr. 63 je znázorněno zapojení programovatelného hradlového pole a jeho konfiguračního zařízení. Tímto zařízením je výše zmíněná konfigurační paměť nebo PS rozhraní (obě využívají stejné signály a ve schématu zapojení v příloze D jsou jejich konektory zapojeny paralelně). Konfigurace je inicializována signálem nCONFIG. Přenos dat probíhá sériově (DATA) a je synchronizován hodinami (DCLK), které generuje konfigurační zařízení. Dojde-li při programování k chybě, je to signalizováno úrovní log. 0 signálem nSTATUS. Je-li obvod úspěšně naprogramován, je nastaven signál CONF_DONE. Oba signály jsou obousměrné a výstupy mají otevřený kolektor. Odpory jsou nutné pro udržení v definovaném stavu.
4.2 Obvody pro řízení a komunikaci 4.2.1 Jednočipový mikropočítač SCENIX SX52BD
SX52BD je jednočipový mikropočítač s architekturou s redukovanou instrukční sadou (RISC), Harwardskou strukturou (oddělená datová a programová paměť) a hodinovým kmitočtem až 100 MHz (v návrhu je použit kmitočet 50 MHz). Výrobcem je firma Ubicom, Inc.
86
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
Obsahuje 4096 slov EEPROM paměti pro program a 262 byte RAM paměti pro všeobecné použití. Programování probíhá sériově a procesor plně podporuje programování již zapojeného obvodu (ISP). Fyzické rozhraní tvoří 40 pinů (brány PA - PE), které mohou být individuálně naprogramovány jako vstupní nebo výstupní a lze zvolit napěťové úrovně logiky TTL nebo CMOS. Vstupy na branách B, C, D a E mohou být ošetřeny Schmittovým klopným obvodem. Mezi implementované periferie patří dva 16 bitové časovače a jeden 8 bitový čítač s programovatelnou 8 bitovou předděličkou, Watchdog časovač a analogový komparátor. Omezená instrukční sada přináší cca 40 základních instrukcí assembleru. K dispozici je 8 úrovňový zásobník pro ukládání návratových adres při volání podprogramů. Všechny instrukce jsou jednocyklové s výjimkou instrukcí větvení – ty trvají cykly 3. Každý cyklus představuje jednu periodu oscilátoru. Teoreticky uváděný výkon až 100 MIPS (miliónů operací za sekundu) je tedy pravdivý pouze při zpracování souvislého bloku instrukcí. Více informací o mikroprocesorech SCENIX viz. [4]. 4.2.2 Jednočipový mikropočítač AT89C52
AT89C52 je jednočipový mikropočítač s Harwardskou strukturou s hodinovým kmitočtem do 24 MHz (použit v návrhu). Je pinově a instrukčně kompatibilní s procesorem 8051. Mikropočítač má k dispozici vnitřní paměť EEPROM pro program o kapacitě 8 kB a vnitřní RAM paměť o kapacitě 256B. Fyzické rozhraní představují 4 vstupně/výstupní brány (P0-P3), které zajišťují styk s vnějšími periferiemi. Procesor má dále vyvedeny signály pro řízení vnější programové (/PSEN) nebo datové (/RD, /WR) paměti o kapacitě až 64 kB. V tom případě brána P2 slouží pro nastavení vyššího byte adresy a na bráně P0 je multiplexován spodní byte adresy a data. Pro demultiplexování je obvod vybaven signálem ALE. Mezi implementované periferie mikropočítače patří duplexní sériový kanál (UART) a tři 16 bitové čítače/časovače. Instrukční sadu tvoří cca 140 instrukcí. Zpracování každé z nich trvá 2-3 (u instrukcí násobení a dělení 4) instrukční cykly. Každý instrukční cyklus trvá 12 period oscilátoru. Více informací o AT89C52 viz. [17] a o procesorech řady 51 viz. [6].
87
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
4.2.3 PDIUSBD12 – zařízení rozhraní USB
Obvod PDIUSBD12 od firmy Philips umožňuje komunikaci zařízení po sběrnici USB podle specifikace 1.1. Pro komunikaci s řídícím procesorem je obvod vybaven 8 bitovou obousměrnou datovou branou sloužící pro zápis a čtení dat, která budou poslána nebo přijata ze sběrnice USB. Brána umožňuje přenos dat z procesoru do obvodu PDIUSBD12 až rychlostí 2MB/s. Pro přístup do registrů slouží jediný adresový vodič A0. Obvod je vybaven vstupem pro signál ALE a umožňuje tak snadno přímou komunikaci po multiplexované sběrnici (například s procesorem řady 51). Rovněž je vybaven signály pro řízení přenosu DMA (přímý přístup do paměti). Obvod obsahuje 320B paměti typu FIFO pro ukládání přijatých a odesílaných dat z/na sběrnici USB. Je vybaven mechanismem tzv. dvojitého bufferování, který umožňuje například vysílat paket dat na sběrnici USB a současně přijímat od řídícího procesoru data pro nový paket. Na straně USB umožňuje obvod přenosy až do 1MByte/s při BULK přenosu nebo až do 1Mbit/s při izochronním přenosu. Za tímto účelem je vybaven, kromě kontrolního, ještě dvěma koncovými zařízeními (tzv. Endpointy – viz. kapitola 2.4). Endpoint 1 má velikost 8 bajtů (v jednom paketu je tedy možno přenést nejvýše 8 bajtů) a je určen spíše pro malý objem dat (řídící příkazy apod.). Endpoint 2 má velikost 64 bajtů a je určen pro přenos relativně velkých objemů dat. Připojení zařízení na sběrnici (pro rychlá USB zařízení) je detekováno na základě přechodového děje, který vznikne po připojení kabelu, kdy je signál D+ přiveden přes 1,5 kΩ odpor na napětí 3,6V (viz. kapitola 2.4.5). Obvod PDISUBD12 je vybaven technologií SoftConnect. Rezistor 1,5 kΩ je implementován na čipu a po restartu není připojen na Vcc. Jeho připojení na Vcc je možné realizovat programově zápisem do příslušného registru. To umožňuje řídícímu mikropočítači dokončit svojí konfiguraci dříve, než se rozhodne připojit k USB. Je také možné vyvolat reinicializaci USB připojení bez nutnosti rozpojovat kabel. Více informací o PDIUSBD12 viz. [18]
4.3 Blokové uspořádání hardware analyzátoru Na obrázku Obr. 64 je znázorněno blokové uspořádání hardware analyzátoru. Analyzátor byl navrhován ve formě vývojového kitu. Tzn., že jeho hardware je redundantní a byl kladen důraz na flexibilitu, možné rozšiřování a změny v návrhu. Detailní schéma zapojení lze nalézt v příloze D.
88
H A R D W A R O V Ý
Sběrnice CAN
Vstupní trigger Výstupní trigger
Konfigurační přepínače
Blok zdrojů
Galvanicky oddělený budič sběrnice CAN
SX52BD
A N A L Y Z Á T O R U
Programování obvodu ACEX
Programovatelné hradlové pole ACEX 1K DRAM SIMM 32MB
Blok vstupního a výstupního triggeru
Blok signalizace
N Á V R H
AT89C52
Konfigurační svorkovnice
Obvod rozhraní USB PDIUSBD12
Sběrnice USB
Obr. 64: Blokové uspořádání hardware analyzátoru
4.3.1 Blok zdrojů
Pokud zařízení využívají napájení přímo ze sběrnice USB, mohou ji zatížit nejvýše proudem 500 mA. V tomto případě také zařízení musí podporovat režimy se sníženou spotřebou (tzv. Suspend State) a musí být kdykoliv schopny na žádost PC (resp. řadiče USB – tzv. HUB) do režimu Suspend přejít. V režimu Suspend potom mohou sběrnici zatěžovat maximálně proudem 500 µA. CAN analyzátor tyto požadavky nesplňuje, a vyžaduje napájení z externího zdroje 7-9V / 1,5A. Z pohledu USB se tedy jedná o zařízení typu Self Powered (se samostatným napájením). Blok zdrojů je tvořen třemi stabilizátory. První je stabilizátor typu 78S05. Na jeho výstupu je základní napětí 5V potřebné pro většinu obvodů. Stabilizátor dovoluje proudové zatížení do 2A. Pro lepší odvod tepla byl vybaven chladičem. Hradlové pole ACEX vyžaduje dva druhy napájení. Pro jádro napětí 2,5V a pro napájení I/O rozhraní napětí 3,3V. Jsou použity stabilizátory TPS7333 a TPS7325 firmy Texas Instruments. Jedná se o stabilizátory z rodiny tzv. LDO (Low-Dropout) – s velmi malým poklesem stabilizovaného napětí v závislosti na odebíraném proudu. Stabilizátory jsou zapojeny do kaskády (z napětí 5V se stabilizuje napětí 3,3V a z něj napětí 2,5V).
89
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
4.3.2 Konfigurační přepínače
Představuje je 6 přepínačů DIP, které umožňují přivést na piny RA0-RA3 a RB0-RB1 procesoru SCENIX napětí, reprezentující log. 1 nebo log. 0. Tyto informace pak mohou být využity ke konfiguraci aplikace procesoru SCENIX. V současné době nejsou využity. 4.3.3 Budič sběrnice CAN
Specifikace CAN 2.0B nedefinuje fyzickou vrstvu, nicméně obvykle je využívána dvouvodičová diferenciální sběrnice (Vdiff = 0 - 2V) podle normy ISO11898. Jako budič je použit obvod 80C250 firmy Philips, který převádí signál sběrnice na napěťové úrovně logiky TTL, vhodné pro zpracování v obvodech CAN analyzátoru. Je využit pouze vstup RxD pro příjem dat ze sběrnice. Výstup TxD je přiveden přes rezistor na napětí 5V (TTL ekvivalent recesivní úrovně), aby nemohla být sběrnice analyzátorem nijak ovlivněna. Obvod je napájen z měniče DC/DC a signál RxD je od ostatních obvodů opticky oddělen obvodem 6n137. Sběrnice CAN je takto galvanicky oddělena od vlastních obvodů analyzátoru. 4.3.4 Blok vstupního a výstupního triggeru
Signály vstupního a výstupního triggeru jsou k hradlovému poli připojeny prostřednictvím obvodu 74LS24, který obsahuje 4 hradla NAND, jejichž vstupy jsou vybaveny Schmittovým klopným obvodem. Nejsou tedy kladeny žádné zvláštní nároky na strmost hran vstupního triggerovacího pulsu. 4.3.5 Blok signalizace
Blok signalizace je tvořen 6 LED diodami. Dvě jsou připojeny na piny procesoru SCENIX (piny RA6 a RA7) a 4 jsou připojeny k hradlovému poli (piny 30, 31, 36 a 37). Význam je uveden v tabulce Tab. 24.
LED
Popis
RA6
Svítí, je-li úspěšně navázána komunikace s řídící aplikací v PC
RA7
Svítí, je-li navázána komunikace mezi oběma procesory ne desce
30
Signál EMPTY z obvodu WTF
31
Signál FULL z obvodu WTF
36
Signál DRAM_FULL z obvodu DRD
37
Signál DRAM_CACHE_EMPTY z obvodu DRD
Tab. 24: Popis signalizačních LED diod analyzátoru
90
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
4.3.6 SX52BD
SX52BD je řídící procesor analyzátoru. Na základě komunikace s aplikací v PC zajišťuje konfiguraci analyzátoru, spouštění analýzy a řízení procesoru AT89C52. Umístění signálů z hradlového pole na jednotlivé vývody tohoto procesoru je popsáno v obrázku Obr. 62. Charakteristika procesoru je v kapitole 4.2.1. Procesor je programován v zapojení (ISP) prostřednictvím programátoru SX-key od firmy Parallax, pro který je na desce vyveden 4 pinový konektor. 4.3.7 AT89C52
Hlavní funkcí mikropočítače AT89C52 je obsluha obvodu PDIUSBD12, který zprostředkovává obousměrný přenos dat mezi analyzátorem a PC prostřednictvím rozhraní USB. Přenos dat je dvojí. • Řídící příkazy mezi PC a procesorem SX52BD. Ty jsou pro AT89C52 naprosto transparentní a pouze zprostředkovává jejich přenos. Pro tyto přenosy je určen Endpoint 1 obvodu PDIUSBD12 (viz. kapitola 4.2.3) • Přenos naměřených dat z paměti obvodu DRD do PC. Pokyn k této činnosti obdrží od procesoru SX52BD, který jej zase obdržel prostřednictvím řídících příkazů z PC. Vyčítání dat z paměti v obvodu DRD a jejich přenos do PC pak již provádí AT89C52 samostatně. Pro tyto přenosy je určen Endpoint 2 obvodu PDIUSBD12. Umístění signálů z hradlového pole na jednotlivé vývody tohoto procesoru je rovněž popsáno v obrázku Obr. 62. Ostatní vývody, které jsou rovněž připojeny k hradlovému poli, jsou rezervovány pro budoucí využití. Charakteristika procesoru je v kapitole 4.2.2. 4.3.8 Konfigurační svorkovnice
Konfigurační svorkovnice je určena pro ladící účely. Je tvořena třemi řadami pinů. Piny v prostřední řadě jsou připojeny na vývody hradlového pole. Piny v levé a pravé řadě jsou připojeny na Vcc a GND. Takto je možné, prostřednictvím propojek (jumperů), přivést na každý z vývodů hradlového pole v prostřední řadě tyto napěťové úrovně. Analogicky je také možné vyvést ven z hradlového pole libovolný signál. Seznam je uveden v tabulce Tab. 25.
Číslo vývodu
Popis
38,39, 40, 41, 44
Rezervováno pro budoucí využití
45
Signál sběrnice CAN_BUS_RXD
46
Synchronizovaný signál sběrnice CAN_BUS z obvodu SYNC
47
Signál BIT_TIME_FLAG z obvodu MTC
53
Signál SAMPLE_POINT_FLAG z obvodu MTC
Tab. 25: Popis pinů konfigurační svorkovnice 91
H A R D W A R O V Ý
N Á V R H
A N A L Y Z Á T O R U
4.3.9 Blok programování obvodu ACEX
Programování hradlového pole bylo popsáno v kapitole 4.1.5. Byla zvolena konfigurační paměť typu EPC2 s kapacitou 1046496 bitů. Paralelně k této paměti je přidán konektor pro kabel typu ByteBlaster, který slouží pro programování hradlového pole systémem ISP. Více o konfiguračních pamětech a kabelu ByteBlaster lze nalézt v [5]. 4.3.10 Blok rozhraní USB
Blok je tvořen obvodem PDIUSBD12 (4.2.3), který z pohledu PC představuje zařízení USB. Je připojen na multiplexovanou sběrnici procesoru AT89C52. Signál výběru obvodu (CS) je vytvořen v hradlovém poli na základě dekódování jeho adresy (kapitola 3.4.2). Výstup INT, kterým může obvod žádat o obsluhu, je připojen přímo na vstup externího přerušení procesoru AT89C52. Tím je umožněna efektivnější funkce vlastní aplikace v procesoru. 4.3.11 Zdroje hodinového kmitočtu
V zapojení je celkem 5 zdrojů hodinového kmitočtu (použité hradlové pole má dva vstupy hod. signálu, v návrhu je oscilátorem osazen pouze jeden). Byly použity programovatelné oscilátory SG8002 firmy EPSON vyznačující se vysokou stabilitou kmitočtu. Oscilátory jsou vybaveny vstupem pro povolení výstupu (OE).
4.4 Deska plošných spojů Jak již bylo řečeno v úvodu kapitoly 4.3, hardware analyzátoru je navržen ve formě vývojového kitu. Tomu odpovídá i návrh samotného plošného spoje, jehož velikost umožňuje pohodlný přístup ke všem obvodům. Plošný spoj je navržen jako dvouvrstvý. Spodní strana desky je tvořena vyplňovanou zónou, která slouží jako zem (GND). U jednotlivých obvodů jsou umístěny kondenzátory filtrující proudové špičky, které vznikají vlivem spínání součástek. U obvodu ACEX jsou blokována téměř všechna napájení, pokud to bylo z prostorových důvodů možné (20 kondenzátorů). Pro vstupní a výstupní trigger byly použity konektory BNC. Konektor USB je standardní konektor typu B. Připojení sběrnice CAN je realizováno obvyklým konektorem typu CANNON s devíti piny. Motivy desky plošných spojů jsou v příloze D.
92
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
5 Kapitola
Software V
kapitole 5 je zejména popsán firmware obou mikroprocesorů
(AT89C52 a SX52BD) použitých v návrhu.
5. Software
S O F T W A R E
5.1 Ovladač zařízení USB s obvodem PDIUSBD12 Ovladač zařízení USB včetně aplikační DLL knihovny a firmware pro řízení obvodu PDIUSBD12 byl převzat z diplomové práce R. Němce. Veškeré informace o těchto produktech jsou uvedeny v [11].
5.2 Firmware procesoru AT89C52 Firmware je složen ze dvou částí. První představují obslužné rutiny pro komunikaci s USB prostřednictvím obvodu PDIUSBD12 (viz.[11]) a druhou představuje vlastní aplikace CAN analyzátoru. Je napsán v jazyce C. Z pohledu aplikace CAN analyzátoru je obsluha USB transparentní. Pro komunikaci po této sběrnici jsou k dispozici následující dvě funkce: • WriteEndpoint( ) – zápisu bloku dat na vybraný Endpoint (viz. kapitola 2.4) • ReadEndpoint( ) – čtení bloku dat ze zvoleného EndPointu Zda byla zaslána z PC na nějaký Endpoint data, lze ověřit prostřednictvím příznaků EP1_RECEIVE_INT (pro Endpoint 1) a EP2_RECEIVE_INT (pro Endpoint 2).
Main Loop
Je aktivován REAL_TIME_TRANSFER nebo DRAM_TRANSFER?
Asynchronní zápis dat z DRAM do EP2 obvodu D12 pro přenos do PC
Byla-li přijata na EP1 z PC nějaká data, zapiš je do komunikačního kanálu pro SX52BD
Příjem a filtrace dat z komunikačního kanálu od SX52BD
Zprávy pro PC
Příkazy pro AT89C52
Asynchronní zápis do EP1obvodu D12 pro přenos do PC
Vyhodnocení příkazu
Funkce 1
Funkce 2
Funkce 3
USB Real Time Loop Funkce n
Obr. 65: Struktura firmware AT89C52 94
-
QUIT STATUS_STATE REQ_BEGIN_ANALYSIS REQ_REENTER_ANALYSIS REQ_STOP_ANALYSIS REQ_DRAM_DATA_TRANSFER REQ_STOP_DRAM_DATA_TRANSFER REQ_DISCARD_ALL_TRANSFERS REQ_ENABLE_REAL_TIME_MODE REQ_DISABLE_REAL_TIME_MODE
-
130 131 140 141 150 -
'A' 'T' 'I' 'H' 'D' 'B' 'P' 'C' 'E'
ENABLE_REAL_TIME_MODE DISABLE_REAL_TIME_MODE LETS_DRAM_DATA_TRANSFER STOP_DRAM_DATA_TRANSFER DISCARD_ALL_TRANSFER
INFO_DRAM_DATA_TRANSFERRING INFO_DRAM_DATA_TRANSFERRED INFO_DRAM_DATA_TRANSFER_STOPPED INFO_WAITING_FOR_REST_DRAM_DATA INFO_ALL_TRANSFERS_DISCARDED INFO_ANALYSIS_IN_PROGRESS INFO_ANALYSIS_STOPPED INFO_CANNOT_QUIT INFO_ANALYSIS_TERMINATED_BECAUSE_OF _CAN_FIFO_FULL
150 - INFO_ALL_TRANSFERS_DISCARDED 151 - INFO_DATA_TRANSFERRED 152 - INFO_DRAM_DATA_TRANSFER_STOPPED
'Q' 'T' 'b' 'r' 's' 'd' 'e' 'g' 't' 'f'
'C' - CONTROL_STATE
'Q'
'T'
'C'
-
-
'Q' 'T' - STATUS_STATE
QUIT ASK_ABOUT ASK_MEM_FLAGS_STATUS ASK_SCENIX_STATUS
'Q'
'T'
-- žádné zprávy --
SETUP_STATE RESET_STATE STATUS_STATE CONTROL_STATE
'a' - REPLY_ABOUT 'b' - REPLY_MEM_FLAGS_STATUS 'c' - REPLY_SCENIX_STATUS
'Q' 'a' 'b' 'c'
'S' 'R' 'T' 'C'
MAINLOOP_STATE
'Q'
'S'
y zapíše do komunikačního kanálu (Intercom) sekvenci 170, 85 pro AT89C52 y čeká na stejnou sekvenci jako echo y čeká na zprávu 'a' - ASK_ABOUT od PC y vrátí zpět zprávu 'a' + nulou zakončený identifikační řetězec - REPLY_ASK_ABOUT jako příznak zdařené komunikace s PC
Stav po připojení napájení
'R'
'T'
'Q' 'T' 'a' 'b' 'c' 'd' 'e' 'g' 'h' 'i' 'j' '1' '2' '3' '4'
-
-- žádné zprávy --
QUIT STATUS_STATE SETUP_BIT_TIME SETUP_SAMPLE_TIME SETUP_LOW_SYNC SETUP_HI_SYNC SETUP_RESYNC_ENABLE SETUP_INT_ENABLE SETUP_OUTPUT_TRIGGER_EVENT SETUP_DISABLE_SYNC_ERROR_WRITTING SETUP_RESERVED_BIT_1 (DRAM_BYPASS) SETUP_DEFAULT_CONFIG_1 SETUP_DEFAULT_CONFIG_2 SETUP_DEFAULT_CONFIG_3 SETUP_DEFAULT_CONFIG_4
'S' - SETUP_STATE
'Q'
-- žádné zprávy --
'Y' - INFO_RESET_CONFIRMED
'R' - RESET_STATE
vše
S O F T W A R E
Hlavní smyčka aplikace je znázorněna na obrázku Obr. 65. Během každého průběhu touto smyčkou je obsloužena komunikace s obvodem PDIUSBD12 (vlastní přenosy dat po USB), vzájemná komunikace PC a procesoru SX52BD a vzájemná komunikace mezi oběma procesory SX52BD a AT89C52.
95
S O F T W A R E
Analyzátor může pracovat ve dvou režimech. V režimu průběžného přenosu naměřených dat do PC (Real Time Transfer), nebo v režimu, kdy jsou naměřená data pouze ukládána do paměti analyzátoru a do PC jsou přenesena najednou až po ukončení měření (DRAM Transfer). Rozdělení Endpointů obvodu PDIUSBD12 pro přenos řídících příkazů a pro přenos naměřených dat je v kapitole 4.3.7. Seznam příkazů a komunikačního protokolu mezi oběma procesory je uveden v příloze C.
5.3 Firmware procesoru SX52BD Firmware procesoru SX52BD je napsán v Assembleru a funguje systémem stavového automatu. Přechod mezi jednotlivými stavy je řízen aplikací v PC. Každý stav je charakteristický množinou zpráv, které v daném stavu může analyzátor očekávat od PC (eventuelně od procesoru AT89C52), a naopak, je zde množina zpráv, které může analyzátor do PC (nebo procesoru AT89C52) vyslat. Pro aplikaci v PC platí, že by měla vysílat pouze takové zprávy, které může analyzátor v daném stavu akceptovat. Znamená to, že musí vést v patrnosti, v jakém stavu se automat nachází. Na obrázku Obr. 66 je tento automat znázorněn. V každém stavu je uveden nejdříve seznam zpráv, které může analyzátor od PC přijmout, pod čarou je potom uveden seznam zpráv, které může v příslušném stavu analyzátor naopak do PC vyslat. Kódy všech zpráv jsou uvedeny buď ASCII znakem nebo dekadickým číslem. Obrázek Obr. 66 také představuje komunikační model celého analyzátoru sběrnice CAN s obslužnou aplikací v PC od okamžiku připojení napájení. Úplný popis komunikačního protokolu a významu zpráv je uveden v příloze C.
96
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
6 Kapitola
Datové toky v CAN analyzátoru V kapitole 6 je proveden rozbor datových toků v různých částech analyzátoru.
6. Datové toky v CAN analyzátoru
D A T O V É
T O K Y
V
C A N
A N A L Y Z Á T O R U
6.1 Datový tok naměřených dat V případě, že na sběrnici nebude docházet k žádným chybám, bude množství naměřených dat, generovaných analyzátorem za jednotku času, úměrné bitové rychlosti sběrnice CAN a počtu přenesených datových rámců. Abychom mohli odhadnout velikost maximálních datových toků naměřených dat, budeme uvažovat dva mezní případy pro nejdelší a nejkratší možný datový rámec. Předpokládejme nejvyšší bitovou rychlost – 1 Mbit/s a plně vytíženou sběrnici. Nejdelší rámec bude pravděpodobně rozšířený datový rámec s identifikátorem 0, délkou dat 8 bajtů, kde všechny datové bajty budou nulové. Délka takového rámce bude 156 bitů (včetně bitů vložených). Potom při bitové rychlosti 1 Mbit/s dostáváme přibližně 6410 takovýchto rámců přenesených za sekundu (neuvažujeme bity Interframe Space). V případě bezchybného rámce vygeneruje analyzátor cca 40 bajtů. Tedy pro 6410 rámců dostáváme datový tok 320500 B/s. Nyní předpokládejme (teoreticky), že u každého bitu tohoto rámce bude vygenerována chyba resynchronizace (její zápis má délku 5 bajtů). V tom případě se nám datový tok na jeden rámec zvedne ze 40 na 40 + (5 * 156) bajtů – tedy 820 bajtů. Pro 6410 rámců dostaneme potom datový tok 5 MB/s. Oproti předchozímu případu více než 16 násobný. Udělejme obdobnou úvahu pro nejkratší rámec. To bude asi standardní rámec s identifikátorem 1365 a nulovou délkou dat. Délka takového rámce je i s vloženými bity pouhých 45 bitů. Při rychlosti 1 Mbit/s dostáváme přibližně 22200 těchto rámců za sekundu. Uvažujeme-li opět 40 bajtů dat na bezchybný rámec, obdržíme datový tok 888000 B/s. Pro chybu resynchronizace v každém bitu dostáváme obdobnou úvahou datový tok 5,6 MB/s. Obě maximální hodnoty jsou přibližně stejné. Z toho lze usuzovat, že maximální hodnoty datových toků nebudou podstatně závislé na délce rámce. V případě, že bychom uvažovali i současný vliv dalších chybových zpráv, dostáváme příliš mnoho kombinací a odhad je nesnadný. Přesto se pokusme nalézt nejnepříznivější možný případ. Pravděpodobně jím bude situace (nechme stranou jak moc je hypotetická), kdy na sběrnici došlo například k chybě vkládání bitů. Jako důsledek začal být vysílán Error Frame (chybový rámec). Error Frame sám ale bude chybný (například bude kratší než 6 dominantních bitů), takže bude vyslán znovu a situace se může opakovat. Budeme-li ještě uvažovat chybu resynchronizace v každém bitu, může analyzátor zapisovat až 16 bajtů v čase vysílání dvou bitů . Tedy při bitové rychlosti 1 Mbit/s přibližně 7,6 MB/s.
98
D A T O V É
6.2
T O K Y
V
C A N
A N A L Y Z Á T O R U
Zápis do vnitřní vyrovnávací paměti CAN analyzátoru Nyní je třeba zjistit, zda požadavky na datové toky z předchozí kapitoly je vůbec schopna vyrovnávací paměť CAN analyzátoru akceptovat. Zápis do vnitřní vyrovnávací paměti CAN analyzátoru (obvod WTF) je velmi rychlý. Jedná se o paměť FIFO, do které je možné zapisovat s každou hranou hodinového signálu. Pro kmitočet 50 MHz tak dostáváme teoretický datový tok 47,6 MB/s. Ve skutečnosti bude o něco nižší z důvodů rozhodování stavového automatu, který zápis řídí. Přibližně 40 MB/s. Vyrovnávací paměť analyzátoru tedy bude schopna zapsat všechny zprávy generované jednotlivými obvody analyzátoru. Je ale nutné si uvědomit, že tyto rozbory představují jakési střední hodnoty počítané za jednu sekundu. Neznamená to tedy, že nemůže dojít k situaci popsané v kapitole 3.2.11.
6.3 Zápis do paměti DRAM Paměť DRAM odebírá data z vyrovnávací paměti CAN analyzátoru. V případě, že nebude stíhat data odebírat, dojde k zaplnění vnitřní paměti CAN analyzátoru a analýza musí být přerušena. Cyklus čtení i zápisu trvá 120 ns (při hodinovém kmitočtu 50 MHz). Pokud bude probíhat pouze zápis, je možné zapsat přibližně 8 MB/s. Pokud bude ale současně uživatel data odebírat (a to dostatečně rychle), bude pravidelně střídán cyklus čtení a cyklus zápisu. Tok zapisovaných dat tedy klesne na polovinu (4 MB/s). Vzhledem k použitému procesoru (AT89C52) bude ale čtení probíhat nesrovnatelně pomaleji. Pro použitý hodinový kmitočet tohoto procesoru uvažujme maximálně 250 kB/s, které je možné přenést po jeho sběrnici (vycházíme z nejkratší programové smyčky, která může tuto operaci realizovat). Jestliže zanedbáme čas potřebný na obnovování paměti, tak po odečtení času potřebného na čtení procesorem AT89C52, dostaneme datový tok přibližně 7,6 MB/s jež je možné přepisovat z vyrovnávací paměti CAN analyzátoru. Po porovnání výsledků z kapitoly 6.1 lze tedy říci, že při obvyklém provozu bude vždy paměť DRAM schopna odebírat data z vyrovnávací paměti CAN analyzátoru. Pouze v určitých situacích může dojít k jejímu zaplnění.
99
D A T O V É
T O K Y
V
C A N
A N A L Y Z Á T O R U
6.4 Přenos dat z paměti DRAM do PC Vzhledem k neexistenci uživatelské aplikace pro PC není možné uspokojivě tento odhad provést. Firmware pro procesor AT89C52 je psán v jazyce C a vhledem k jeho komplikovanosti je obtížné určit maximální množství dat, které bude schopen z DRAM přenést. V tomto případě je třeba počkat na uživatelskou aplikaci, kdy bude možné provést příslušné testy.
100
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
7 Kapitola
Závěr V předposlední kapitole jsou stručně shrnuty výsledky této Diplomové práce.
7. Závěr
Z Á V Ě R
V této Diplomové práci byly uvedeny obecné poznatky, postup při vývoji a realizaci analyzátoru sběrnice CAN. Důraz byl kladen zejména na podrobný popis obvodů provádějících vlastní analýzu, které tvoří jádro CAN analyzátoru. Jádro CAN analyzátoru je navrženo kompletně ve struktuře hradlového pole, avšak bez vazby na konkrétní typ. Tvoří zapouzdřenou strukturu, která je schopna samostatně provádět analýzu sběrnice CAN a jejímž výstupem je přímo soubor měřených dat. Výsledná hardwarová podoba analyzátoru sběrnice CAN je tak jednou z možných aplikací této struktury. Navržený analyzátor provádí analýzu podle Specifikace CAN 2.0B. Umožňuje připojení ke sběrnici za plného provozu, ke všem událostem generuje časové značky a disponuje vstupním a výstupním triggerem. Analyzátor podporuje dva režimy činnosti – režim přenosu naměřených dat v reálném čase a režim s ukládáním dat do vyrovnávací paměti. V prvním případě jsou v průběhu měření naměřená data ihned přenášena po USB do PC k dalšímu zpracování. V případě druhém jsou ukládána do paměti analyzátoru a do PC přenesena až po ukončení měření. Pro tyto účely je analyzátor doplněn o dynamickou paměť RAM s kapacitou 32MB.
102
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
8 Kapitola
Literatura Závěrečná kapitola obsahuje seznam použité literatury.
8. Literatura
L I T E R A T U R A
[1]
CAN Specification 2.0, Bosch, Stuttgart, SRN, 1991.
[2]
MAX plus+II ver. 10.0 Help, Altera, San Jose, USA, 2000.
[3]
JEDEC Standard No. 21-C, JEDEC, 1989.
[4]
SX Family Users´s Manual, Ubicom, Mountain View, USA, 2000.
[5]
Altera Digital Library, Altera, San Jose, USA, 2000.
[6]
Skalický Petr: Mikroprocesory řady 8051, Vydavatelství technické literatury Ben, Praha, 1997.
[7]
Vedral Josef, Fischer Jan: Elektronické obvody pro měřící techniku, Vydavatelství ČVUT, Praha, 1999.
[8]
Universal Serial Bus Specification, Revision 1.1., Compaq, Intel, Microsoft, NEC, 1998.
[9]
Samuel P. Harbison, Guy L. Steele Jr.: Referenční příručka jazyka C, Science, 1996.
[10]
MAX+plus II Getting Started, Altera, San Jose, USA, 1997.
[11]
Němec Richard: Diplomová práce, ČVUT, FEL, Praha, 2002.
[12]
Vít Záhlava: OrCAD pro Windows, Grada, Praha, 1997.
[13]
Radek Olexa: Diplomová práce, ČVUT, FEL, Praha, 2000.
[14]
Vladimír Haasz, Jaroslav Roztočil, Jiří Novák: Číslicové měřící systémy, Vydavatelství ČVUT, Praha, 2000.
[15]
www.fieldbus.feld.cvut.cz
[16]
www.okisemiconductors.com
[17]
www.atmel.com
[18]
www.philips.com
104
A N A L Y Z Á T O R
S B Ě R N I C E
C A N
A Příloha
Konfigurační protokol a seznam událostí výstupního triggeru Příloha A obsahuje popis konfiguračního protokolu pro konfiguraci CAN analyzátoru (obvod SUU) a seznam událostí, na které je možno naprogramovat výstupní trigger (obvod OUT).
Příloha A
P Ř Í L O H A
Konfigurační protokol CAN analyzátoru pro obvod SUU Název konfiguračního registru obvodu SUU
Délka dat *
Kód
Popis
bit_time[17..0]
3
10h
Viz. obvod MCT. 3 bajty dat obsahují 18 bitů hodnoty bit_time. 18 bitů bude v datech rozloženo následovně: • 1. bajt = b7-b0 • 2. bajt = b15-b8 • 3. bajt = b17-b16 (horních 6 bitů je nevyužitých)
sample_time[17..0]
3
11h
Obdobně jako u sample_time.
low_sync[17..0]
3
12h
Obdobně jako u sample_time.
hi_sync[17..0]
3
13h
Obdobně jako u sample_time.
resync_enable
1
14h
Povolení resynchronizace v obvodu MCT. Bajt dat může nabývat následujících hodnot: • 1 = resynchronizace povolena • 0 = resynchronizace zakázána
msu_enable
1
15h
Povolení funkce obvodu MSU. Bajt dat může nabývat následujících hodnot: • 1 = funkce povolena • 0 = funkce zakázána
int_enable
1
16h
Povolení detekce vstupního triggeru v obvodu INT. Bajt dat může nabývat následujících hodnot: • 1 = trigger povolen • 0 = trigger zakázán
event_out[6..0]
1
17h
Kód události pro výstupní trigger obvodu OUT. Význam bitů v datech je následující: • b7 – nevyužito • b6 – je-li jedničkový, bude výstupní trigger reagovat na všechny události, jejichž kód má b5 roven jedné. • b5-b0 – kód události Seznam událostí je v následující tabulce.
disable_sync_error_writting 1
18h
Zakáže zápis o chybách resynchronizace do měřeného souboru dat. • 1 = zákaz zápisu • 0 = povolení zápisu
reserved_bit_1
1
1Eh
Jeden z vyhrazených bitů CAN analyzátoru. Je využit pro přemostění DRAM v obvodu DRD (signál dram_bypass). • 1 = DRAM přemostěna • 0 = DRAM aktivní
reserved_bit_2
1
1Fh
Nevyužito.
reserved_bit_3
1
20h
Nevyužito.
*
Počet datových bajtů, které následují za kódem (ten má vždy délku jeden bajt).
Kód událostí pro výstupní trigger Kód události Popis události 01h
Detekce bitu SOF
02h
Ukončeno čtení ID11
03h
Detekce bitu SRR
04h
Detekce bitu IDE
05h
Ukončeno čtení ID18
A
P Ř Í L O H A
A
Kód události Popis události 06h
Detekce bitu RTR v rozšířeném rámci
07h
Detekce bitu R1 v rozšířeném rámci žádosti o data
08h
Detekce bitu R1 v standardním nebo rozšířeném datovém rámci
09h
Detekce bitu R0 v standardním nebo rozšířeném datovém rámci
0Ah
Detekce bitu R0 v standardním nebo rozšířeném rámci žádosti o data
0Bh
Ukončeno čtení délky datové oblasti rámce
0Ch
Ukončeno čtení datové oblasti rámce
0Dh
Ukončeno čtení CRC
0Eh
Detekován bit ERC
0Fh
Detekován bit ACK
19h
Detekován bit ACD
10h
Detekován bit EOF
11h
Detekován 1. bit mezirámcové mezery (Interframe Space)
12h
Detekován rámec Overload Frame (následující bit bude začátek OF)
13h
Detekován 2. bit mezirámcové mezery
14h
Detekován 1. bit Overload Delimiter
15h
Detekován 8. bit Overload Delimiter
16h
Detekován 1. bit rámce Error Frame
17h
Detekován 1. bit Error Delimiter
18h
Detekován 8. bit Error Delimiter
21h
Varování - bit R1 v rozšířeném rámci žádosti o data má hodnotu nedoporučovanou ve specifikaci
22h
Varování - bit R1 v standardním nebo rozšířeném datovém rámci má hodnotu nedoporučovanou ve specifikaci
23h
Varování - bit R0 v standardním nebo rozšířeném datovém rámci má hodnotu nedoporučovanou ve specifikaci
24h
Varování - bit R0 v standardním nebo rozšířeném rámci žádosti o data má hodnotu nedoporučovanou ve specifikaci.
25h
Chyba CRC
26h
Chyba ERC
27h
Chyba ACK
28h
Chyba ACD
29h
Chyba EOF
2Ah
Chyba mezirámcové mezery (Bad Interframe Space)
2Bh
Chybná délka rámce Overload Frame (Bad Length of Overload Frame)
2Ch
Chyba Overload Delimiter
2Dh
Chyba rámce Overload Frame
2Eh
Chyba rámce Error Frame
2Fh
Chybná délka rámce Error Frame (Bad Length of Error Frame)
30h
Chyba Error Delimiter
31h
Chyba – nedetekován rámec Error Frame (Error Frame Not Detected)
32h
Chyba vkládání bitů (Stuff Error)
33h
Chyba SOF
34h
Varování – délka datové oblasti je větší než 8
3Fh
Slouží pro „vypnutí“ výstupního triggeru (tento kód nemá žádná událost)
B Příloha
Formát měřených dat V příloze B je popsán formát měřených dat CAN analyzátoru.
Příloha B
P Ř Í L O H A
B
Kód
Zdroj TYP* Název a popis zprávy
0Xh
CML, DRU
N
Obecná data. Jsou kvantována po 4 bitech. Jejich zápis probíhá tak, že jednotlivé bity, tak jak jsou čteny, jsou rotovány do leva od nejnižšího bitu b0 a jakmile tvoří čtveřici jsou zapsány do paměti FIFO. To znamená, že například standardní 11 bitový identifikátor bude tvořen dvěmi čtveřicemi b3/b0 a ještě zbytkem do jedenácti z třetí čtveřice bity b2/b0. Horní 4 bity jsou vždy nulové aby mohla být data oddělena od ostatních zpráv.
11h
CML
BT
Error CRC. Nesouhlasí načtený a vypočítaný CRC součet.
12h
CEL
BT
Error EOF. Chybně zakončený datový rámec nebo rámec žádosti o data.
14h
CML
BT
Warning R1. Hodnota R1 nesouhlasí s doporučením specifikace. Není to ale chyba.
15h
CML
BT
Warning R0. Hodnota R0 nesouhlasí s doporučením specifikace. Není to ale chyba.
16h
CML
BT
Error ERC. Nesouhlasí bit ERC.
17h
CEL
BT
Error ACK. Nesouhlasí bit ACK.
18h
CEL
BT
Error ACD. Nesouhlasí bit ACD.
19h
MSU
BT
Error Stuff Recessive. Chyba vkládání bitů v úrovni recessive.
1Ah
MSU
BT
Error Stuff Dominant. Chyba vkládání bitů v úrovni dominant.
1Bh
CRL
T
Error Delimiter Error. Chyba oddělovače chyb.
1Ch
CRL
T
Error Overload Frame. Chyba Overload Frame (méně než 6 dominantních bitů).
31h
CRL
T
Error Interframe Space. Chybná mezera mezi rámci.
32h
CRL
T
Error Error Frame. Chybný rámec Error Frame (méně než 6 dominantních bitů).
33h
CRL
T
Bad Length of Overload Frame. Chybná délka rámce Overload (více než 12 dominantních bitů).
34h
CRL
T
Error Overload Delimiter. Chyba oddělovače Overload Frame.
35h
CRL
T
Bad Length of Error Frame. Chybná délka rámce Error Frame (více než 12 dominantních bitů)
36h
CRL
T
Not Detect Error Frame. Nebyl detekován rámec Error Frame.
1Dh
MCT
T
Sync Error. Chyba resynchronizace.
38h
CML
BT
Warning Bad Length of Data Length Code. Počet bajtů datové oblasti je větší než 8. V analýze se pokračuje dál a předpokládá se datová oblast o délce 8 bajtů.
39h
CML
BT
Error SOF. Chyba bitu SOF.
1Fh
MSU
T
Begin Analysis. Oznámení začátku analýzy. Slouží k oddělení jednotlivých souborů naměřených dat.
20h
CML
T
Info SOF. Oznámení o detekci bitu Start Of Frame.
21h
CML
N
Info ID11. Oznámení o zápisu ID11. Předchozí obecná data obsahují 11 bitů identifikátoru standardního rámce.
22h
CML
N
Info ID18. Oznámení o zápisu ID18. Předchozí obecná data obsahují 18 bitů identifikátoru rozšířeného rámce.
23h
CEL
T
Info EOF. Oznámení o korektním ukončení zápisu kompletního rámce.
24h
CML
N
Info Length. Oznámení o zápisu délky Data Field. Předchozí obecná data obsahují 4 bity, které nesou informaci o počtu bajtů dat obsažených v Data Frame nebo požadovaných v rámci Remote Request Frame.
25h
CML
N
Info Data. Oznámení o zápisu Data Field. Předchozí obecná data obsahují datovou oblast Data Frame.
26h
CML
N
Info CRC. Oznámení o zápisu CRC součtu. Předchozí obecná data obsahují 15 bitů CRC součtu.
28h
CML
N
Info STD Data Frame. Byl detekován standardní datový rámec.
29h
CML
N
Info EXT Data Frame. Byl detekován rozšířený datový rámec.
2Ah
CML
N
Info STD Remote Request Frame. Byl detekován standardní rámec žádosti o data.
2Bh
CML
N
Info EXT Remote Request Frame. Byl detekován rozšířený rámec žádosti o data.
2Ch
CRL
N
Info Error Frame. Byl detekován rámec Error Frame.
2Dh
CRL
N
Info Overload Frame. Byl detekován rámec Overload Frame.
2Eh
MSU
T
Info Waiting for Bus Idle. Oznámení o čekání na Bus Idle - probíhá zotavení po chybě.
P Ř Í L O H A
B
Kód
Zdroj TYP* Název a popis zprávy
2Fh
MSU
T
Info Bus Idle. Oznámení o detekci Bus Idle – úspěšné zotavení po chybě.
13h
RTC
N
Info Timer Overload. Zpráva o přetečení čítače hodin reálného času RTC.
1Eh
INT
T
Info Input Trigger. Byl generován vstupní trigger.
10h
CML
N
Info Calculated CRC. Předchozí obecná data obsahují 15 bitů CAN analyzátorem vypočítaného CRC součtu.
TYP*
Popis
N
Celková délka je 1 bajt – pouze kód zprávy
T
Celková délka je 5 bajtů s následujícím významem: • B1 = kód zprávy • B2-B5 = časová značka (obsah čítače RTC od nejvyššího bajtu)
BT
Celková délka je 6 bajtů s následujícím významem: • B1 = kód zprávy • B2-B5 = časová značka (obsah čítače RTC od nejvyššího bajtu) • B6 = číslo bitu v CAN streamu od SOF (včetně vložených bitů)
C Příloha
Komunikační protokol uživatelské aplikace v PC a CAN analyzátoru Příloha C popisuje komunikační protokol mezi uživatelskou aplikací v PC a CAN analyzátorem (viz. Obr. 66). V první části jsou uvedeny zprávy, které si může vyměňovat PC s řídícím procesorem CAN analyzátoru SX52BD, a v části druhé, jsou pro úplnost uvedeny zprávy pro lokální komunikaci mezi oběma procesory (SX52BD a AT89C52). Kódy zpráv jsou uvedeny podle situace ASCII kódem nebo dekadicky.
Příloha C
P Ř Í L O H A
C
Kód(1) Směr(2) Název a popis MAINLOOP_STATE – klidový stav analyzátoru ‘S’
SX
SETUP_STATE. Analyzátor přejde do stavu SETUP.
‘R’
SX
RESET_STATE. Analyzátor přejde do stavu RESET.
‘T
SX
STATUS_STATE. Analyzátor přejde do stavu STATUS.
‘C
SX
CONTROL_STATE. Analyzátor přejde od stavu CONTROL.
CONTROL_STATE – řízení analyzátoru ‘Q’
SX
QUIT. Návrat do stavu MAINLOOP.
‘T’
SX
STATUS_STATE. Přejde do stavu STATUS.
‘b’
SX
REQ_BEGIN_ANALYSIS. Žádost o spuštění analýzy. Před spuštěním je proveden kompletní reset CAN analyzátoru, včetně obvodu DRD. Tím jsou všechna data z předchozích měření, která mohla být uložena v DRAM, ztracena.
‘r’
SX
REQ_REENTER_ANALYSIS. Žádost o opětovné spuštění analýzy. V tomto případě není prováděn reset obvodu DRD, takže případná data z předchozích měření zůstávají v DRAM zachována a nová k nim budou připojena.
‘s’
SX
REQ_STOP_ANALYSIS. Žádost o zastavení analýzy. Je zastaven vlastní proces analýzy, nicméně ještě může chvíli probíhat přepis naměřených dat z vnitřní vyrovnávací paměti CAN analyzátoru do paměti DRAM. PC aplikace by tedy měla počkat cca 300 µs, kdy již jistě bude přepis dokončen, a nebo může testovat stav pamětí žádostí ASK_MEM_FLAGS_STATUS.
‘d’
SX
REQ_DRAM_DATA_TRANSFER. Žádost o přenos naměřených dat z paměti DRAM do PC v případě, že analyzátor nepracuje v režimu Real Time a byla ukončena analýza. Data budou přenášena přes Endpoint 2 obvodu PDIUSBD12.
‘e’
SX
REQ_STOP_DRAM_DATA_TRANSFER. Žádost o ukončení (pozastavení) přenosu naměřených dat z DRAM do PC.
‘g’
SX
REQ_DISCARD_ALL_TRANSFERS. Žádost o ukončení veškerých typů datových přenosů z DRAM do PC v případě nepředvídatelné události. Nutnou podmínkou je, že nesmí probíhat analýza. Na tuto žádost přestane analyzátor ihned data přenášet. Zbylá data v DRAM zůstávají zachována. Ta část dat, která byla právě připravována k přenosu do PC (max. 64B) budou ztracena.
‘t’
SX
REQ_ENABLE_REAL_TIME_MODE. Přepnutí do režimu Real Time (v tomto režimu jsou naměřená data ihned odesílána do PC). Přepnutí do tohoto režimu je možné pouze v klidovém stavu (neprobíhá analýza a nejsou přenášena data z DRAM do PC). Po spuštění analýzy budou naměřená data ihned přenášena do PC.
‘f’
SX
REQ_DISABLE_REAL_TIME. Zrušení režimu Real Time. Možné opět pouze v klidovém stavu. Po spuštění analýzy budou naměřená data ukládána do paměti DRAM. Po ukončení režimu Real Time čeká analyzátor na zápis zbytku dat z DRAM do PC (viz. ‘H’). Jsou-li všechna data odeslána, vygeneruje zprávu ‘T’.
‘A’
PC
INFO_DRAM_DATA_TRANSFERING. Potvrzení žádosti ‘d’.
‘T’
PC
INFO_DRAM_DATA_TRANSFERRED. Oznámení o ukončení přenosu dat z DRAM do PC (DRAM je prázdná). Na stav pamětí je také možno se kdykoliv dotázat žádostí ASK_MEM_FLAGS_STATUS.
‘I’
PC
INFO_DRAM_DATA_TRANSFER_STOPPED. Potvrzení žádosti ‘e’.
‘H’
PC
INFO_WAITING_FOR_REST_DRAM_DATA. Tato zpráva je generována v okamžiku zákazu režimu Real Time příkazem ‘f‘. V případě režimu Real Time se může stát, že PC nebude stíhat všechna data odebírat. To znamená, že ta se budou v DRAM pomalu hromadit, a po žádosti o ukončení Real Time režimu zde ještě nějaká zbudou. V tom okamžiku analyzátor očekává, že se je PC bude i nadále odebírat. Pokud o ně PC již nemá zájem, musí zrušit všechny přenosy příkazem ‘g’.
‘D’
PC
INFO_ALL_TRANSFERS_DISCARDED. Potvrzení žádosti ‘g’.
‘B’
PC
INFO_ANALYSIS_IN_PROGRESS. Potvrzení žádosti ‘b’ nebo ‘e’.
‘P’
PC
INFO_ANALYSIS_STOPPED. Potvrzení žádosti ‘s’.
‘C’
PC
INFO_CANNOT_QUIT. Tato zpráva je generována v případě, kdy uživatelská aplikace PC vyslala příkaz ‘Q’ k návratu z tohoto stavu, ale nejsou řádně ukončeny všechny činnosti. Aby bylo možné stav CONTROL opustit, nesmí být spuštěna analýza, nesmí být zapnut režim Real Time, nesmí probíhat žádný přenos dat a nesmí se čekat na dokončení přenosu dat.
P Ř Í L O H A
C
Kód(1) Směr(2) Název a popis ‘E’
PC
INFO_ANALYSIS_TERMINATED_BECAUSE_OF_CAN_FIFO_FULL. Tato zpráva je vygenerována v případě, že došlo k zaplnění vnitřní vyrovnávací paměti CAN analyzátoru o kapacitě 2kB. Znamená to, že na sběrnici došlo k tak vzácné chybové situaci, že množství generovaných zpráv není schopen obvod DRD zapisovat do DRAM. V tom případě musí být analýza zastavena, protože ztrátou některých dat by byla narušena integrita celého naměřeného souboru, a tento by nebylo možné vyhodnotit. Nicméně, uživateli zůstává k dispozici kromě obsahu paměti DRAM i celý obsah vnitřní paměti analyzátoru. To je dostatek dat, aby bylo možné příčinu této situace vyhodnotit. V tomto případě se doporučuje uživateli, aby vyčetl celý zbytek dat a spuštění nové analýzy provedl pouze příkazem ‘r‘.
STATUS_STATE – informace o stavu ‘Q‘
SX
QUIT. Návrat do stavu, z kterého byl stav STATUS volán. Platí, že je-li tento stav volán z jiného stavu než ze stavu MAINLOOP, musí být tento stav průchozí. Například, aplikace je ve stavu CONTROL a chce se dotázat na stav pamětí. V tom případě vyšle najednou sekvenci ‘T’, ‘a’, ‘Q’, čímž se vrátí ihned zpět do stavu CONTROL.
‘a‘
SX
ASK_ABOUT. Žádost o identifikační řetězec. Analyzátor odpoví zprávou ‘a’.
‘b’
SX
ASK_MEM_FLAGS_STATUS. Dotaz na stav pamětí analyzátoru. Analyzátor vrátí zprávu ‘b’.
‘c’
SX
ASK_SCENIX_STATUS. Dotaz na stav analyzátoru. Analyzátor odpoví zprávou ‘c’.
‘a’
PC
REPLY_ABOUT. Analyzátor vyšle kód ‘a’ + nulou zakončený řetězec ASCII znaků nedefinované délky. Řetěze obsahuje informaci o verzi analyzátoru.
‘b’
PC
REPLY_MEM_FLAGS_STATUS. Analyzátor vyšle kód ‘b’ + jeden bajt dat s následujícím významem: • b7-b5 nastaveny na nulu • b4 = CACHE_DRAM_EMPTY • b3 = CAN_FULL • b2 = CAN_EMPTY • b1 = DRAM_FULL • b0 = DRAM_EMPTY Význam signálů viz. kapitola 3.5.
‘c’
PC
REPLY_SCENIX_STATUS. Analyzátor vyšle kód ‘c’ + dva bajty dat. Je-li příslušný bit nastaven, je to příznak příslušného stavu nebo činnosti. 1. bajt: • b7-b4 nastaveny na nulu • b3 = MAINLOOP_STATE (analyzátor je ve stavu MAINLOOP) • b2 = CONTROL_STATE (analyzátor je ve stavu CONTROL) • b1 = STATUS_STATE (analyzátor je ve stavu STATUS) • b0 = SETUP_STATE (analyzátor je ve stavu SETUP) 2. bajt: • b7-b4 nastaveny na nulu • b3 = WAITING_FOR_REST_DRAM_DATA (čeká se na ukončení režimu Real Time) • b2 = DRAM_DATA_TRANSFER_IN_PROGRESS (právě probíhá přenos dat z DRAM do PC) • b1 = REAL_TIME_MODE_ON (analyzátor je v režimu Real Time) • b0 = ANALYSIS_IN_PROGRESS (právě probíhá analýza)
RESET_STATE – restart analyzátoru ‘Y’
SX
RESET_CONFIRMED. Po přepnutí do stavu RESET musí následovat ihned kód ‘Y’ jako potvrzení. Potom proběhne reset CAN analyzátoru (ve smyslu obrázku Obr. 8) a reset obvodu DRD, čímž budou všechna data v DRAM ztracena. Automat se vrátí zpět do stavu MAINLOOP. Do tohoto stavu se také vrátí v případě, že neobdrží potvrzení ‘Y’.
SETUP_STATE – konfigurace analyzátoru ‘Q’
SX
QUIT. Návrat do stavu MAINLOOP.
‘T’
SX
STATUS_STATE. Přejde do stavu STATUS.
‘a’
SX
SETUP_BIT_TIME. Následují 3 bajty dat BIT_TIME s významem uvedeným v příloze A.
‘b’
SX
SETUP_SAMPLE_TIME. Následují 3 bajty dat SAMPLE_TIME s významem uvedeným v příloze A.
‘c’
SX
SETUP_LOW_SYNC. Následují 3 bajty dat LOW_SYNC s významem uvedeným v příloze A.
‘d’
SX
SETUP_HI_SYNC. Následují 3 bajty dat HI_SYNC s významem uvedeným v příloze A.
P Ř Í L O H A
C
Kód(1) Směr(2) Název a popis ‘e’
SX
SETUP_SETUP_RESYNC_ENABLE. Následuje bajt dat RESYNC_ENABLE s významem uvedeným v příloze A.
‘g‘
SX
SETUP_INT_ENABLE. Následuje bajt dat INT_ENABLE s významem uvedeným v příloze A.
‘h‘
SX
SETUP_OUTPUT_TRIGGER_EVENT. Následuje bajt dat EVENT_OUT s významem uvedeným v příloze A.
‘i’
SX
SETUP_DISABLE_SYNC_ERROR_WRITING. Následuje bajt dat DISABLE_SYNC_ERROR_WRITING s významem uvedeným v příloze A.
‘j’
SX
SETUP_RESERVED_BIT_1. Následuje bajt dat RESERVED_BIT_1 s významem uvedeným v příloze A.
‘1’
SX
SETUP_DEFAULT_CONFIG_1. Pouze pro ladící účely (viz. zdrojové soubory).
‘2’
SX
SETUP_DEFAULT_CONFIG_2. Pouze pro ladící účely (viz. zdrojové soubory).
‘3’
SX
SETUP_DEFAULT_CONFIG_3. Pouze pro ladící účely (viz. zdrojové soubory).
‘4’
SX
SETUP_DEFAULT_CONFIG_4. Pouze pro ladící účely (viz. zdrojové soubory).
Kód(1) Směr(2) Název a popis 130
SXto52
ENABLE_REAL_TIME_MODE. Na základě žádosti PC přepne procesor AT89C52 do režimu Real Time.
131
SXto52
DISABLE_REAL_TIME_MODE. Na základě žádosti PC zakáže v procesoru AT89C52 režim Real Time.
140
SXto52
LETS_DRAM_DATA_TRANSFER. Na základě žádosti PC povolí procesoru AT89C52 přenos dat z DRAM do PC.
141
SXto52
STOP_DRAM_DATA_TRANSFER. Na základě žádosti PC ukončí přenos dat procesorem AT89C52.
150
SXto52
DISCARD_ALL_TRANSFERS. Na základě žádosti PC ukončí všechny přenosy.
150
52toSX
INFO_ALL_TRANSFERS_DISCARDED. AT89C52 oznamuje SX52BD, že ukončil násilně všechny přenosy.
151
52toSX
INFO_DATA_TRANSFERRED. AT89C52 oznamuje SX52BD, že ukončil požadovaný přenos dat z DRAM do PC.
152
52toSX
INFO_DRAM_DATA_TRANSFER_STOPPED. AT89C52 oznamuje SX52BD, že na jeho žádost zastavil přenos dat z DRAM do PC.
(1) Kód příkazu je vždy jednobajtový. Kód zpráv zasílaných řídícím procesorem SX52BD do PC má vždy bit b7 nulový. Zprávy, které mají bit b7 jedničkový, jsou lokální zprávy určené pouze pro řízení procesoru AT89C52. Aby mohl procesor SX52BD rozlišit zdroj zpráv, které dostává (zda jsou od PC nebo od procesoru AT89C52), musí řídící aplikace zajistit, že kód zprávy a její data budou vyslány po USB v rámci jednoho paketu. (2) SX značí zprávy od PC určené pro SX52BD, PC značí zprávy od SX52BD určené pro PC, SXto52 jsou lokální zprávy od SX52BD určené pro řízení AT89C52 a 52toSX jsou lokální zprávy od AT89C52 pro SX52BD.
D Příloha
Schéma zapojení a motivy plošných spojů V příloze D je vloženo úplné schéma zapojení hardware analyzátoru včetně motivů plošných spojů.
Příloha D
P Ř Í L O H A
D
P Ř Í L O H A
D
E Příloha
Doprovodný CD-ROM V příloze E je uveden obsah doprovodného CDROMu
Příloha E
P Ř Í L O H A
Obsah CDROM je uspořádán do následujících adresářů: \ALTERA\Beta Top Design\ – zdrojový soubor tzv. TopDesignu celého návrhu (Obr. 62) \ALTERA\Bit Counter\ – zdrojový soubor obvodu BIC \ALTERA\Bit Destuffing\ – zdrojový soubor obvodu BDE \ALTERA\Bus Idle\ – zdrojový soubor obvodu BID \ALTERA\CAN End Loop\ – zdrojový soubor obvodu CEL \ALTERA\CAN Err Loop\ – zdrojový soubor obvodu CRL \ALTERA\CAN Main Loop\ – zdrojový soubor obvodu CML \ALTERA\CAN Top Design\ – zdroj TopDesignu CAN analyzátoru (Obr. 52) \ALTERA\Cyclic Redundancy Check\ – zdrojový soubor obvodu CRC \ALTERA\Data Read Unit\ – zdrojový soubor obvodu DRU \ALTERA\DRAM driver\ – zdrojový soubor obvodu DRD \ALTERA\Input Trigger\ – zdrojový soubor obvodu INT \ALTERA\InterCom\ – zdrojový soubor obvodu ITC \ALTERA\Main Counter\ – zdrojový soubor obvodu MCT \ALTERA\Main Start Unit\ – zdrojový soubor obvodu MSU \ALTERA\Main Timer\ – zdrojový soubor obvodu MTR \ALTERA\Output Trigger\ – zdrojový soubor obvodu OUT \ALTERA\Real Time Counter\ – zdrojový soubor obvodu RTC \ALTERA\Startup Unit\ – zdrojový soubor obvodu SUU \ALTERA\Write To FIFO\ – zdrojový soubor obvodu WTF \AT89C52\ - zdrojové soubory FW pro processor AT89C52 (kap. 5.2) \DRIVER\ - obsahuje podadresáře a soubory USB driveru – kompletně převzato z [11] \ORCADWIN\ - schema zapojení a návrh desky plošných spojů (OrCAD pro Windows 9) \SX52BD\ - zdrojové soubory FW pro processor SX52BD (kap. 5.3)
E