МИРОВАЯ ЭЛЕКТРОНИКА
В. Б. Стешенко
С Е Р И Я
ПЛИС фирмы ALTERA: элементная база, система проектирования и языки описания аппаратуры
3е издание, стереотипное
Москва Издательский дом «ДодэкаXXI» 2007
—1—
УДК 621.3.049.77 ББК 32.84402 C79
C79
Стешенко В.Б. ПЛИС фирмы Altera: элементная база, система проектирова ния и языки описания аппаратуры. — М.: Издательский дом «ДодэкаXXI», 2007. — 576 с. ISBN 9785941201129 В книге рассмотрены вопросы практического применения ПЛИС фирмы «Altera» при разработке цифровых устройств. Приведены крат кие сведения об особенностях архитектуры и временных параметрах устройств. Рассмотрены САПР MAX+PLUS II и Quartus, языки описания аппаратуры AHDL, VHDL, VERILOG HDL. Приводятся примеры описания цифровых устройств на языках высокого уровня, а также примеры реа лизации некоторых алгоритмов. Приведены сведения о современных интерфейсах передачи данных, даны рекомендации по разработке пе чатных плат. Цель книги — помочь начинающему разработчику в выборе эле ментной базы и дать представление о технологии проектирования уст ройств на ПЛИС.
УДК 621.3.049.77 ББК 32.84402
ISBN 9785941201129
© Стешенко В.Б., текст © Издательский дом «ДодэкаXXI», 2002 ® Серия «Мировая электроника»
Все права защищены. Никакая часть этого издания не может быть воспроизведена в любой форме или любыми средствами, электронными или механическими, включая фотографирова ние, ксерокопирование или иные средства копирования или сохранения информации, без письменного разрешения издательства.
ÏÐ Å Ä È Ñ Ë Î Â È Å
Ïðîãðàììèðóåìûå ëîãè÷åñêèå èíòåãðàëüíûå ñõåìû (ÏËÈÑ) óäîáíàÿ â îñâîåíèè è ïðèìåíåíèè ýëåìåíòíàÿ áàçà, àëüòåðíàòèâû êîòîðîé çà÷àñòóþ íå íàéòè. Ñòðóêòóðíî êíèãà ðàçáèòà íà ñåìü ãëàâ è òðè ïðèëîæåíèÿ.  ãëàâå 1 äàåòñÿ îáçîð ïåðñïåêòèâíûõ ñåìåéñòâ ÏËÈÑ ôèðìû «Altera» è êðàòêèå ñâåäåíèÿ îá îñîáåííîñòÿõ èõ àðõèòåêòóðû è âðåìåííûõ ïàðàìåòðàõ óñòðîéñòâ.  ãëàâå 2 ðàññìîòðåíà ÑÀÏÐ MAX+PLUS II. Ãëàâà 3 ïîñâÿùåíà ÿçûêó îïèñàíèÿ àïïàðàòóðû AHDL. ßçûê îïèñàíèÿ àïïàðàòóðû VHDL ðàññìîòðåí â ãëàâå 4, à àïïàðàòóðû VERILOG HDL â ãëàâå 5.  ãëàâå 6 ïðèâîäÿòñÿ ïðèìåðû îïèñàíèÿ öèôðîâûõ óñòðîéñòâ íà ÿçûêàõ âûñîêîãî óðîâíÿ.  ãëàâå 7 ïðèâåäåíû ïðèìåðû ðåàëèçàöèè íåêîòîðûõ àëãîðèòìîâ.  ïðèëîæåíèè 1 ðàññìîòðåíû îñîáåííîñòè ÑÀÏÐ Quartus.  ïðèëîæåíèè 2 ñîâðåìåííûå èíòåðôåéñû ïåðåäà÷è äàííûõ.  ïðèëîæåíèè 3 äàíû ðåêîìåíäàöèè ïî ðàçðàáîòêå ïå÷àòíûõ ïëàò. Ñëåäóåò çàìåòèòü, ÷òî êíèãà íè â êîåé ìåðå íå ïîäìåíÿåò ñîáîé ôèðìåííóþ äîêóìåíòàöèþ, áåç êîòîðîé ïðîåêòèðîâàíèå óñòðîéñòâ ïðîñòî íåâîçìîæíî. Åå öåëü ïîìî÷ü íà÷èíàþùåìó ðàçðàáîò÷èêó â âûáîðå ýëåìåíòíîé áàçû è äàòü ïðåäñòàâëåíèå î òåõíîëîãèè ïðîåêòèðîâàíèÿ óñòðîéñòâ íà ÏËÈÑ. Àâòîð âûðàæàåò îãðîìíóþ áëàãîäàðíîñòü ôèðìå «Ãàììà» è ëè÷íî åå äèðåêòîðó Ì.À. Kóçíå÷åíêîâó çà îñóùåñòâëåíèå èçäàíèÿ. Àâòîð òàêæå áëàãîäàðèò ñîòðóäíèêîâ ôèðìû «Ãàììà» Ñ.Í. Øèïóëèíà, È.Ã. Àëåêñååâà, À.À. Kóëàêîâà è çàì. äèðåêòîðà öåíòðà «Ëîãè÷åñêèå ñèñòåìû» Â.Þ. Õðàïîâà çà ïðåäîñòàâëåííîå ïðîãðàììíîå îáåñïå÷åíèå è èíôîðìàöèþ.
3
Ïðåäèñëîâèå Àâòîð áëàãîäàðèò ðåäàêòîðîâ Èçäàòåëüñêîãî äîìà «Äîäýêà-XXI» çà ÷óòêîå è âíèìàòåëüíîå îòíîøåíèå ê ðóêîïèñè. Îãðîìíûé âêëàä â ðàáîòó íàä êíèãîé âíåñëè ê.ò.í. äîöåíò Ä.À. Ãóáàíîâ, àñïèðàíò Þ.Ì. Ñåäÿêèí, ñòóäåíòû À.Â. Ñàìîõèí, Ã.Â. Øèøêèí, èíæåíåðû Í.Í. Àíèùåíêî, À.Â. Åâñòèôååâ, Ð.Á. Ãàâðèëîâ è äð., êîòîðûì àâòîð âûðàæàåò èñêðåííþþ áëàãîäàðíîñòü.  æóðíàëå Chip News (Íîâîñòè î ìèêðîñõåìàõ) áûë îïóáëèêîâàí öèêë ñòàòåé «Øêîëà ðàçðàáîòêè àïïàðàòóðû öèôðîâîé îáðàáîòêè ñèãíàëîâ íà ÏËÈÑ», ñòàâøèõ îñíîâîé êíèãè. Àâòîð ïðèçíàòåëåí ãëàâíîìó ðåäàêòîðó æóðíàëà À.Ã. Áèëåíêî è íàó÷íîìó ðåäàêòîðó À.À. Îñèïîâó çà ïîëåçíûå äèñêóññèè, ñïîñîáñòâîâàâøèå ïîÿâëåíèþ êíèãè. Íàêîíåö, ðàáîòà íàä êíèãîé áûëà áû â ïðèíöèïå íåâîçìîæíà áåç ïîääåðæêè è òåðïåíèÿ ñåìüè. Àâòîð íàäååòñÿ, ÷òî êíèãà íàéäåò ïîíèìàíèå ó ÷èòàòåëÿ, è áóäåò ïðèçíàòåëåí çà âñå îòêëèêè, êîòîðûå ìîæíî ïðèñûëàòü ïî àäðåñó: 107005, Ìîñêâà, 2-ÿ Áàóìàíñêàÿ óëèöà, ä. 5. Kàôåäðà ÑÌ-5 «Àâòîíîìíûå èíôîðìàöèîííûå è óïðàâëÿþùèå ñèñòåìû» ÌÃÒÓ èì. Í.Ý. Áàóìàíà. E-mail:
[email protected] 4
Ñ ÎÄ Å Ð Æ À Í È Å
ÂÂÅÄÅÍÈÅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 ÃËÀÂÀ 1. ÝËÅÌÅÍÒÍÀß ÁÀÇÀ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.1. Ñåìåéñòâî MAX3000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.2. Ñåìåéñòâî FLEX6000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.3. Ñåìåéñòâî MAX7000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 1.4. Ñåìåéñòâî FLEX8000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 1.5. Ñåìåéñòâî MAX9000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 1.6. Ñåìåéñòâî FLEX10K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 1.7. Ñåìåéñòâî APEX20K . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 1.8. Ñåìåéñòâî Mercury . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 1.9. Ñåìåéñòâî ACEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 1.10. Kîíôèãóðàöèîííûå ÏÇÓ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 1.11. Ïðîãðàììèðîâàíèå è ðåêîíôèãóðèðîâàíèå â ñèñòåìå . . . . . . . . . 110 ÃËÀÂÀ 2. ÑÈÑÒÅÌÀ ÏÐÎÅÊÒÈÐÎÂÀÍÈß MAX+PLUS II . . . . . . 115 2.1. 2.2. 2.3. 2.4. 2.5.
Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Ïðîöåäóðà ðàçðàáîòêè ïðîåêòà . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Ðåäàêòîðû MAX PLUS II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Ïðîöåññ êîìïèëÿöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Âåðèôèêàöèÿ ïðîåêòà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
ÃËÀÂÀ 3. ßÇÛÊ ÎÏÈÑÀÍÈß ÀÏÏÀÐÀÒÓÐÛ AHDL . . . . . . . . . . 167 3.1. Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 3.2. Èñïîëüçîâàíèå ÷èñåë è êîíñòàíò â ÿçûêå AHDL . . . . . . . . . . . . . 171 3.2.1. Èñïîëüçîâàíèå ÷èñåë . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 3.2.2. Èñïîëüçîâàíèå êîíñòàíò . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 3.3. Kîìáèíàöèîííàÿ ëîãèêà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
5
Ñîäåðæàíèå
3.4.
3.5.
3.6.
3.7.
3.8.
3.3.1. Ðåàëèçàöèÿ áóëåâûõ âûðàæåíèé è óðàâíåíèé . . . . . . . . . . 172 3.3.2. Îáúÿâëåíèå NODE (óçåë) . . . . . . . . . . . . . . . . . . . . . . . . . . 173 3.3.3. Îïðåäåëåíèå ãðóïï . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 3.3.4. Ðåàëèçàöèÿ óñëîâíîé ëîãèêè . . . . . . . . . . . . . . . . . . . . . . . 174 3.3.5. Îïèñàíèå äåøèôðàòîðîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 3.3.6. Èñïîëüçîâàíèå äëÿ ïåðåìåííûõ çíà÷åíèé ïî óìîë÷àíèþ . . . 180 3.3.7. Ðåàëèçàöèÿ ëîãèêè ñ àêòèâíûì íèçêèì óðîâíåì . . . . . . . . 182 3.3.8. Ðåàëèçàöèÿ äâóíàïðàâëåííûõ âûâîäîâ . . . . . . . . . . . . . . . . 183 Ïîñëåäîâàòåëüíîñòíàÿ ëîãèêà . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 3.4.1. Îáúÿâëåíèå ðåãèñòðîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 3.4.2. Îáúÿâëåíèå ðåãèñòðîâûõ âûõîäîâ . . . . . . . . . . . . . . . . . . . 186 3.4.3. Ñîçäàíèå ñ÷åò÷èêîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Öèôðîâûå àâòîìàòû ñ ïàìÿòüþ (state mashine) . . . . . . . . . . . . . . . 187 3.5.1. Ðåàëèçàöèÿ öèôðîâûõ àâòîìàòîâ (state machine) . . . . . . . . 188 3.5.2. Óñòàíîâêà ñèãíàëîâ Clock, Reset è Enable . . . . . . . . . . . . . 189 3.5.3. Çàäàíèå âûõîäíûõ çíà÷åíèé äëÿ ñîñòîÿíèé . . . . . . . . . . . . 189 3.5.4. Çàäàíèå ïåðåõîäîâ ìåæäó ñîñòîÿíèÿìè . . . . . . . . . . . . . . . 190 3.5.5. Ïðèñâîåíèå áèòîâ è çíà÷åíèé â öèôðîâîì àâòîìàòå . . . . . 190 3.5.6. Öèôðîâûå àâòîìàòû ñ ñèíõðîííûìè âûõîäàìè . . . . . . . . . 191 3.5.7. Öèôðîâûå àâòîìàòû ñ àñèíõðîííûìè âûõîäàìè . . . . . . . . 193 3.5.8. Âîññòàíîâëåíèå ïîñëå íåïðàâèëüíûõ ñîñòîÿíèé . . . . . . . . 194 Ðåàëèçàöèÿ èåðàðõè÷åñêîãî ïðîåêòà . . . . . . . . . . . . . . . . . . . . . . . 196 3.6.1. Èñïîëüçîâàíèå ìàêðîôóíêöèé ñèñòåìû MAX+PLUS II ôèðìû «Altera» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 3.6.2. Ñîçäàíèå è ïðèìåíåíèå ïîëüçîâàòåëüñêèõ ìàêðîôóíêöèé . . 199 3.6.3. Îïðåäåëåíèå ïîëüçîâàòåëüñêîé ìàêðîôóíêöèè . . . . . . . . . 199 3.6.4. Èìïîðò è ýêñïîðò öèôðîâûõ àâòîìàòîâ (state machine) . . . 201 Óïðàâëåíèå ñèíòåçîì . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 3.7.1. Ðåàëèçàöèÿ ïðèìèòèâîâ LCELL è SOFT . . . . . . . . . . . . . . 203 3.7.2. Çíà÷åíèÿ êîíñòàíò ïî óìîë÷àíèþ . . . . . . . . . . . . . . . . . . . . 205 3.7.3. Ïðèñâîåíèå áèòîâ è çíà÷åíèé â öèôðîâîì ôîðìàòå . . . . . 205 Ýëåìåíòû ÿçûêà AHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 3.8.1. Çàðåçåðâèðîâàííûå êëþ÷åâûå ñëîâà . . . . . . . . . . . . . . . . . . 205 3.8.2. Ñèìâîëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 3.8.3. Èìåíà â êàâû÷êàõ è áåç êàâû÷åê . . . . . . . . . . . . . . . . . . . . 208 3.8.4. Ãðóïïû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 3.8.5. ×èñëà â ÿçûêå AHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 3.8.6. Áóëåâû âûðàæåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 3.8.7. Ëîãè÷åñêèå îïåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 3.8.8. Âûðàæåíèÿ ñ îïåðàòîðîì NOT . . . . . . . . . . . . . . . . . . . . . . 213
6
Ñîäåðæàíèå 3.8.9. Âûðàæåíèÿ ñ îïåðàòîðàìè AND, NAND, OR, XOR, & XNOR . . . . . . . . . . . . . . . . . . . 213 3.8.10.Àðèôìåòè÷åñêèå îïåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . 214 3.8.11. Kîìïàðàòîðû (îïåðàòîðû ñðàâíåíèÿ) . . . . . . . . . . . . . . . . . 215 3.8.12.Ïðèîðèòåòû â áóëåâûõ óðàâíåíèÿõ . . . . . . . . . . . . . . . . . . 216 3.8.13.Ïðèìèòèâû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 3.8.14.Ïîðòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 3.9. Ñèíòàêñèñ ÿçûêà AHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 3.9.1. Ëåêñè÷åñêèå ýëåìåíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 3.9.2. Îñíîâíûå êîíñòðóêöèè ÿçûêà AHDL . . . . . . . . . . . . . . . . . 230 3.9.3. Ñèíòàêñèñ îáúÿâëåíèÿ íàçâàíèÿ . . . . . . . . . . . . . . . . . . . . . 233 3.9.4. Ñèíòàêñèñ îïåðàòîðà âêëþ÷åíèÿ . . . . . . . . . . . . . . . . . . . . 233 3.9.5. Ñèíòàêñèñ çàäàíèÿ êîíñòàíòû . . . . . . . . . . . . . . . . . . . . . . . 233 3.9.6. Ñèíòàêñèñ ïðîòîòèïà ôóíêöèè . . . . . . . . . . . . . . . . . . . . . . 233 3.9.7. Ñèíòàêñèñ îïåðàòîðà âàðèàíòîâ . . . . . . . . . . . . . . . . . . . . . 234 3.9.8. Ñèíòàêñèñ ñåêöèè ïîäïðîåêòà Subdesign . . . . . . . . . . . . . . 236 3.9.9. Ñèíòàêñèñ ñåêöèè ïåðåìåííûõ . . . . . . . . . . . . . . . . . . . . . . 236 3.9.10.Ñèíòàêñèñ îáúÿâëåíèÿ öèôðîâîãî àâòîìàòà . . . . . . . . . . . . 237 3.9.11. Ñèíòàêñèñ îáúÿâëåíèÿ ïñåâäîíèìà öèôðîâîãî àâòîìàòà . . . 237 3.9.12.Ñèíòàêñèñ ëîãè÷åñêîé ñåêöèè . . . . . . . . . . . . . . . . . . . . . . 238 3.9.13.Ñèíòàêñèñ áóëåâûõ óðàâíåíèé . . . . . . . . . . . . . . . . . . . . . . 238 3.9.14.Ñèíòàêñèñ áóëåâûõ óðàâíåíèé óïðàâëåíèÿ . . . . . . . . . . . . 238 3.9.15.Ñèíòàêñèñ îïåðàòîðà CASE . . . . . . . . . . . . . . . . . . . . . . . . 238 3.9.16.Îáúÿâëåíèå ïî óìîë÷àíèþ . . . . . . . . . . . . . . . . . . . . . . . . . .238 3.9.17.Ñèíòàêñèñ óñëîâíîãî îïåðàòîðà IF . . . . . . . . . . . . . . . . . . . 239 3.9.18.Ñèíòàêñèñ âñòðîåííûõ (in-line) ññûëîê íà ìàêðîôóíêöèþ èëè ïðèìèòèâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 3.9.19.Ñèíòàêñèñ îáúÿâëåíèÿ òàáëèöû èñòèííîñòè . . . . . . . . . . . 239 3.9.20.Ñèíòàêñèñ ïîðòà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 3.9.21.Ñèíòàêñèñ ãðóïïû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 3.9.22.Ñèíòàêñè÷åñêèå ãðóïïû è ñïèñêè . . . . . . . . . . . . . . . . . . . . 241 ÃËÀÂÀ 4. ßÇÛÊ ÎÏÈÑÀÍÈß ÀÏÏÀÐÀÒÓÐÛ VHDL . . . . . . . . . . 243 4.1. Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 4.2. Àëôàâèò ÿçûêà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 4.2.1. Kîììåíòàðèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 4.2.2. ×èñëà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 4.2.3. Ñèìâîëû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 4.2.4. Ñòðîêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 4.3. Òèïû äàííûõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
7
Ñîäåðæàíèå 4.3.1. Ïðîñòûå òèïû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 4.3.2. Ñëîæíûå òèïû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 4.3.3. Îïèñàíèå ïðîñòûõ òèïîâ . . . . . . . . . . . . . . . . . . . . . . . . . . 250 4.4. Îïåðàòîðû VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 4.4.1. Îñíîâû ñèíòàêñèñà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 4.4.2. Îáúåêòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 4.4.3. Àòðèáóòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 4.4.4. Kîìïîíåíòû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 4.4.5. Âûðàæåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 4.4.6. Îïåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 4.5. Èíòåðôåéñ è òåëî îáúåêòà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 4.5.1. Îïèñàíèå ïðîñòîãî îáúåêòà . . . . . . . . . . . . . . . . . . . . . . . . 270 4.5.2. Îáúÿâëåíèå îáúåêòà ïðîåêòà F . . . . . . . . . . . . . . . . . . . . . . 270 4.5.3. Ïîâåäåí÷åñêîå îïèñàíèå àðõèòåêòóðû . . . . . . . . . . . . . . . . 270 4.5.4. Ïîòîêîâàÿ ôîðìà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 4.5.5. Ñòðóêòóðíîå îïèñàíèå àðõèòåêòóðû . . . . . . . . . . . . . . . . . . 273 4.6. Îïèñàíèå êîíôèãóðàöèè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 4.7. Âåêòîðíûå ñèãíàëû è ðåãóëÿðíûå ñòðóêòóðû . . . . . . . . . . . . . . . . 275 4.8. Çàäåðæêè ñèãíàëîâ è ïàðàìåòðû íàñòðîéêè . . . . . . . . . . . . . . . . . 277 4.9. Àòðèáóòû ñèãíàëîâ è êîíòðîëü çàïðåùåííûõ ñèòóàöèé . . . . . . . . 279 4.10. Àëôàâèò ìîäåëèðîâàíèÿ è ïàêåòû . . . . . . . . . . . . . . . . . . . . . . . . . 280 4.11. Îïèñàíèå ìîíòàæíîãî «ÈËÈ» è îáùåé øèíû . . . . . . . . . . . . . . . 283 4.12. Ñèíòåçèðóåìîå ïîäìíîæåñòâî VHDL . . . . . . . . . . . . . . . . . . . . . . 285 4.12.1.Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 4.12.2.Ïåðåîïðåäåëåííûå òèïû (Redefined types) . . . . . . . . . . . . 286 4.12.3.Ìåòîäèêà âåðèôèêàöèè ñèíòåçèðóåìîãî îïèñàíèÿ (Verification methodology) . . . . . . . . . . . . . . . . . . . . . . . . . . 286 4.12.4.Ìîäåëèðîâàíèå ýëåìåíòîâ àïïàðàòóðû (Modeling hardware elements) . . . . . . . . . . . . . . . . . . . . . . . 288 4.12.5.Äèðåêòèâû êîìïèëÿòîðà (ïñåâäîêîììåíòàðèè, Pragmas) . . . 295 4.12.6.Ñèíòàêñèñ ñèíòåçèðóåìîãî ïîäìíîæåñòâà VHDL . . . . . . . 297 4.13. Kðàòêîå îïèñàíèå ñèíòàêèñà ñèíòåçèðóåìîãî ïîäìíîæåñòâà VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 ÃËÀÂÀ 5. ßÇÛÊ ÎÏÈÑÀÍÈß ÀÏÏÀÐÀÒÓÐÛ VERILOG HDL . . . 363 5.1. Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 5.2. Îïåðàòîðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 5.3. ×èñëà â Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 5.3.1. Öåëûå ÷èñëà (Integers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 5.3.2. Íåîïðåäåëåííîå è âûñîêîèìïåäàíñíîå ñîñòîÿíèÿ (x and z values) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
8
Ñîäåðæàíèå 5.3.3. Îòðèöàòåëüíûå ÷èñëà (Negative numbers) . . . . . . . . . . . . . 366 5.3.4. Ïîä÷åðêèâàíèå (Underscore) . . . . . . . . . . . . . . . . . . . . . . . . 366 5.3.5. Äåéñòâèòåëüíûå ÷èñëà (Real) . . . . . . . . . . . . . . . . . . . . . . . 366 5.3.6. Ñòðîêè (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 5.4. Öåïè â Verilog (Nets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 5.5. Ðåãèñòðû (Registers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 5.6. Âåêòîðû (Vectors) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 5.7. Ìàññèâû (Arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 5.8. Ðåãèñòðîâûå ôàéëû (Memories) . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 5.9. Ýëåìåíòû ñ òðåòüèì ñîñòîÿíèåì (Tri-state) . . . . . . . . . . . . . . . . . . 370 5.10. Àðèôìåòè÷åñêèå îïåðàòîðû (Arithmetic operators) . . . . . . . . . . . . 372 5.11. Ëîãè÷åñêèå îïåðàòîðû (Logical operators) . . . . . . . . . . . . . . . . . . . 373 5.12. Îïåðàòîðû îòíîøåíèÿ (Relational operators) . . . . . . . . . . . . . . . . . 374 5.13. Îïåðàòîðû ýêâèâàëåíòíîñòè (Equality) . . . . . . . . . . . . . . . . . . . . . 374 5.14. Ïîðàçðÿäíûå îïåðàòîðû (Bitwise operators) . . . . . . . . . . . . . . . . . 375 5.15. Îïåðàòîðû ïðèâåäåíèÿ (Reduction operator) . . . . . . . . . . . . . . . . . 376 5.16. Îïåðàòîðû ñäâèãà (Shift operator) . . . . . . . . . . . . . . . . . . . . . . . . . 377 5.17. Kîíêàòåíàöèÿ (îáúåäèíåíèå, Concatenation) . . . . . . . . . . . . . . . . . 377 5.18. Ïîâòîðåíèå (Replication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 5.19. Ñèñòåìíûå äèðåêòèâû (System tasks) . . . . . . . . . . . . . . . . . . . . . . 378 5.19.1.Äèðåêòèâû âûâîäà ðåçóëüòàòîâ ìîäåëèðîâàíèÿ (Writing to standard output) . . . . . . . . . . . . . . . . . . . . . . . . . . 379 5.19.2. Kîíòðîëü ïðîöåññà ìîäåëèðîâàíèÿ (Monitoring a simulation) . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 5.19.3. Îêîí÷àíèå ìîäåëèðîâàíèÿ (Ending a simulation) . . . . . . . 382 5.20. Ïðîåêòèðîâàíèå êîìáèíàöèîííûõ ñõåì, ïðèìåð ïðîåêòèðîâàíèÿ ìóëüòèïëåêñîðà 4 â 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 5.20.1.Ðåàëèçàöèÿ íà óðîâíå ëîãè÷åñêèõ âåíòèëåé (Gate level implementation) . . . . . . . . . . . . . . . . . . . . . . . . . 382 5.20.2.Ðåàëèçàöèÿ ìóëüòèïëåêñîðà ñ ïîìîùüþ ëîãè÷åñêèõ îïåðàòîðîâ (Logic statement Implementation) . . . . . . . . . . . 384 5.20.3.Ðåàëèçàöèÿ ñ ïîìîùüþ îïåðàòîðà âûáîðà (CASE statement implementation ) . . . . . . . . . . . . . . . . . . . . 385 5.20.4.Ðåàëèçàöèÿ ñ èñïîëüçîâàíèåì óñëîâíîãî îïåðàòîðà (Conditional operator Implementation) . . . . . . . . . . . . . . . . . 387 5.20.5.Òåñòîâûé ìîäóëü (The stimulus module) . . . . . . . . . . . . . . . 387 5.21. Ìîäóëè ïðîåêòà (Design blocks modules) . . . . . . . . . . . . . . . . . . . 390 5.21.1.Òåñòèðîâàíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 5.22. Ïîðòû (Ports) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 5.23. Ïðàâèëà ñîåäèíåíèÿ (Connection rules) . . . . . . . . . . . . . . . . . . . . . 394
9
Ñîäåðæàíèå 5.23.1.Âõîäû (inputs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 5.23.2.Âûõîäû (outputs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 5.23.3.Äâóíàïðàâëåííûå âûâîäû (inouts) . . . . . . . . . . . . . . . . . . . 394 5.23.4.Ñîîòâåòñòâèå ïîðòîâ (Port matching) . . . . . . . . . . . . . . . . . 394 5.23.5.Ïðèñîåäèíåíèå ïîðòîâ (Connecting ports) . . . . . . . . . . . . . 394 5.24. Áàçîâûå áëîêè (Basic blocks) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 5.24.1.Èíèöèàëèçàöèÿ (Initial block) . . . . . . . . . . . . . . . . . . . . . . . 395 5.24.2.Kîíñòðóêöèÿ Always (Always block) . . . . . . . . . . . . . . . . . . 395 5.25. Ïðèìåð ïðîåêòèðîâàíèÿ ïîñëåäîâàòåëüíîñòíîãî óñòðîéñòâà: äâîè÷íûé ñ÷åò÷èê . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 5.25.1.Ïîâåäåí÷åñêàÿ ìîäåëü ñ÷åò÷èêà (Behavioural model) . . . . . 400 5.26. Âðåìåííîé êîíòðîëü (Timing Control) . . . . . . . . . . . . . . . . . . . . . . 402 5.26.1.Çàäåðæêè (delay) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 5.26.2.Ñîáûòèéíûé êîíòðîëü (event-based control) . . . . . . . . . . . . 403 5.27. Çàùåëêèâàíèå (triggers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 5.28. Ñïèñîê ñèãíàëîâ âîçáóæäåíèÿ (sensitivity list) . . . . . . . . . . . . . . . 404 5.29. Çàäåðæêà ðàñïðîñòðàíåíèÿ â âåíòèëå (Gate delays) . . . . . . . . . . . 404 5.30. Îïåðàòîðû âåòâëåíèÿ (Branch statements) . . . . . . . . . . . . . . . . . . . 404 5.30.1.Îïåðàòîð IF ( IF statement) . . . . . . . . . . . . . . . . . . . . . . . . . 404 5.30.2.Îïåðàòîð âûáîðà (CASE statement) . . . . . . . . . . . . . . . . . . 406 5.30.3.Îïåðàòîð âåòâëåíèÿ (Conditional operator) . . . . . . . . . . . . . 406 5.31. Öèêëû (Looping constructs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 5.31.1.Öèêë WHILE (WHILE LOOP) . . . . . . . . . . . . . . . . . . . . . . . 407 5.31.2.Öèêë FOR (FOR LOOP) . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 5.31.3.Öèêë REPEAT (REPEAT LOOP) . . . . . . . . . . . . . . . . . . . . . .408 5.31.4.Âå÷íûé öèêë (FOREVER LOOP) . . . . . . . . . . . . . . . . . . . . 409 5.32. Ôàéëû â Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 5.32.1.Îòêðûòèå ôàéëà (Opening a file) . . . . . . . . . . . . . . . . . . . . . 409 5.32.2.Çàïèñü â ôàéë (Writing to a file) . . . . . . . . . . . . . . . . . . . . . 410 5.32.3.Çàêðûòèå ôàéëà (Closing a file) . . . . . . . . . . . . . . . . . . . . . . 410 5.32.4.Èíèöèàëèçàöèÿ ðåãèñòðîâûõ ôàéëîâ (ïàìÿòè) (Initialising memories) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 5.33. Çàäàíèå âåêòîðîâ âõîäíûõ ñèãíàëîâ äëÿ ìîäåëèðîâàíèÿ (Verilog input vectors) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 5.34. Ñïèñîê îïåðàòîðîâ Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 5.35. Ïðèîðèòåò îïåðàòîðîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 5.36. Këþ÷åâûå ñëîâà (keywords) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 5.37. Äèðåêòèâû êîìïèëÿòîðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 5.38. Òèïû öåïåé (Net types) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
10
Ñîäåðæàíèå ÃËÀÂÀ 6. ÏÐÈÌÅÐÛ ÏÐÎÅÊÒÈÐÎÂÀÍÈß ÖÈÔÐÎÂÛÕ ÓÑÒÐÎÉÑÒÂ Ñ ÈÑÏÎËÜÇÎÂÀÍÈÅÌ ßÇÛÊΠÎÏÈÑÀÍÈß ÀÏÏÀÐÀÒÓÐÛ VHDL È VERILOG . . . . 4 1 7 6.1. Îáùèå ñâåäåíèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 6.2. Òðèããåðû è ðåãèñòðû . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 6.2.1. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì (Rising Edge Flipflop) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 6.2.2. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì, ñ àñèíõðîííûì ñáðîñîì (Rising Edge Flipflop with Asynchronous Reset) . . . 420 6.2.3. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì, ñ àñèíõðîííîé ïðåäóñòàíîâêîé (Rising Edge Flipflop with Asynchronous Preset) . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 6.2.4. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì, ñ àñèíõðîííûì ñáðîñîì è ïðåäóñòàíîâêîé (Rising Edge Flepflop with Asynchronous Reset and Preset) . . . . . . . . . . . . . . . . . . . 422 6.2.5. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì, ñ ñèíõðîííûì ñáðîñîì (Rising Edge Flipflop with Synchronous Reset) . . . . 424 6.2.6. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì, ñ ñèíõðîííîé ïðåäóñòàíîâêîé (Rising Edge Flipflop with Synchronous Preset) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 6.2.7. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì, ñ àñèíõðîííûì ñáðîñîì è ðàçðåøåíèåì òàêòîâîãî ñèãíàëà (Rising Edge Flipflop with Asynchronous Reset and Clock Enable) . . . . . . . 426 6.2.8. Çàùåëêà ñ ðàçðåøåíèåì âûõîäà (D-Latch with Data and Enable) . . . . . . . . . . . . . . . . . . . . . . 427 6.2.9. Çàùåëêà ñ âõîäîì äàííûõ ñ ðàçðåøåíèåì (D-Latch with Gated Asynchronous Data) . . . . . . . . . . . . . . . 428 6.2.10. Çàùåëêà ñ âõîäîì ðàçðåøåíèÿ (D-Latch with Gated enable) . . 429 6.2.11. Çàùåëêà ñ àñèíõðîííûì ñáðîñîì (D-Latch with Asynchronous Reset) . . . . . . . . . . . . . . . . . . . 430 6.3. Ïîñòðîåíèå óñòðîéñòâ ïîòîêîâîé îáðàáîòêè äàííûõ (Datapath logic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 6.4. Ñ÷åò÷èêè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 6.5. Àðèôìåòè÷åñêèå óñòðîéñòâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 6.6. Kîíå÷íûå àâòîìàòû (Finite state machine) . . . . . . . . . . . . . . . . . . . 449 6.7. Ýëåìåíòû ââîäà-âûâîäà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 6.8. Ïàðàìåòðèçàöèÿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 6.9. Ñïåöèôèêà ïðîåêòèðîâàíèÿ óñòðîéñòâ ñ ó÷åòîì àðõèòåêòóðíûõ îñîáåííîñòåé ÏËÈÑ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 6.10. Ñîâìåñòíîå èñïîëüçîâàíèå ðåñóðñîâ . . . . . . . . . . . . . . . . . . . . . . 468
11
Ñîäåðæàíèå 6.11. Äóáëèðîâàíèå ðåãèñòðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 6.12. Ñîçäàíèå îïèñàíèé ñ ó÷åòîì îñîáåííîñòåé àðõèòåêòóðû ÏËÈÑ (Technology Specific Coding Techniques) . . . . . . . . . . . . . . . . . . . . 476 ÃËÀÂÀ 7. ÏÐÈÌÅÐÛ ÐÅÀËÈÇÀÖÈÈ ÀËÃÎÐÈÒÌΠÖÎÑ ÍÀ ÏËÈÑ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 7.1. Ðåàëèçàöèÿ öèôðîâûõ ôèëüòðîâ íà ÏËÈÑ ñåìåéñòâà FLEX ôèðìû «Altera» . . . . . . . . . . . . . . . . . . . . . . . . . . 485 7.2. Ðåàëèçàöèÿ öèôðîâûõ ïîëèíîìèàëüíûõ ôèëüòðîâ . . . . . . . . . . . . 491 7.3. Àëãîðèòìû ôóíêöèîíèðîâàíèÿ è ñòðóêòóðíûå ñõåìû äåìîäóëÿòîðîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 7.4. Ðåàëèçàöèÿ ãåíåðàòîðà ÏÑÏ íà ÏËÈÑ . . . . . . . . . . . . . . . . . . . . . 500 7.5. Ïðèìåðû îïèñàíèÿ öèôðîâûõ ñõåì íà VHDL . . . . . . . . . . . . . . . 506 7.6. Ðåàëèçàöèÿ íåéðîíà íà AHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 7.7. Ïîñòðîåíèå áûñòðîäåéñòâóþùèõ ïåðåìíîæèòåëåé . . . . . . . . . . . 529 Ïðèëîæåíèå 1.Ñèñòåìà ïðîåêòèðîâàíèÿ Quartus . . . . . . . . . . . . . . . . . 535 Ïðèëîæåíèå 2.Èíòåðôåéñû ïåðåäà÷è äàííûõ è ñîïðÿæåíèå óñòðîéñòâ . . . . . . . . . . . . . . . . . . . . . . . . 537 Ïðèëîæåíèå 3.Ïðàêòè÷åñêèå ðåêîìåíäàöèè ïî ðàçðàáîòêå ïå÷àòíûõ ïëàò . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 Ëèòåðàòóðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
12
ÂÂÅÄÅÍÈÅ
Èäåÿ íàïèñàíèÿ ýòîé êíèãè íàçðåâàëà â òå÷åíèå ïîñëåäíèõ äâóõ-òðåõ ëåò, êîãäà äëÿ ìíîãèõ ðàçðàáîò÷èêîâ àïïàðàòóðû öåíòðàëüíîé îïåðàòèâíîé ñèñòåìû (ÖÎÑ) ñòàëî ÿñíî, ÷òî ïðîãðàììèðóåìûå ëîãè÷åñêèå èíòåãðàëüíûå ñõåìû (ÏËÈÑ) óäîáíàÿ â îñâîåíèè è ïðèìåíåíèè ýëåìåíòíàÿ áàçà, àëüòåðíàòèâû êîòîðîé çà÷àñòóþ íå íàéòè. Ïîñëåäíèå ãîäû õàðàêòåðèçóþòñÿ ðåçêèì ðîñòîì ïëîòíîñòè óïàêîâêè ýëåìåíòîâ íà êðèñòàëëå, ìíîãèå âåäóùèå ïðîèçâîäèòåëè ëèáî íà÷àëè ñåðèéíîå ïðîèçâîäñòâî, ëèáî àíîíñèðîâàëè ÏËÈÑ ñ ýêâèâàëåíòíîé åìêîñòüþ áîëåå 1 ìèëëèîíà ëîãè÷åñêèõ âåíòèëåé. Öåíû íà ÏËÈÑ (ê ñîæàëåíèþ, òîëüêî ëèøü â äîëëàðîâîì ýêâèâàëåíòå) íåóêëîííî ïàäàþò. Òàê, åùå ãîä-ïîëòîðà íàçàä ÏËÈÑ ëîãè÷åñêîé åìêîñòüþ 100000 âåíòèëåé ñòîèëà â Ìîñêâå â çàâèñèìîñòè îò ïðîèçâîäèòåëÿ, ïðèåìêè, áûñòðîäåéñòâèÿ îò 1500 äî 3000 ó.å., ñåé÷àñ òàêàÿ ìèêðîñõåìà ñòîèò îò 100 äî 350 ó.å., ò.å. öåíû óïàëè ïðàêòè÷åñêè íà ïîðÿäîê, è ýòà òåíäåíöèÿ óñòîé÷èâà. ×òî êàñàåòñÿ ÏËÈÑ åìêîñòüþ 10000...30000 ëîãè÷åñêèõ âåíòèëåé, òî ïîÿâèëèñü ìèêðîñõåìû ñòîèìîñòüþ ìåíåå 10 ó.å. Òàêàÿ ñèòóàöèÿ íà ðûíêå âûçâàëà âîëíó âîïðîñîâ, ñâÿçàííûõ ñ ïîäãîòîâêîé ñïåöèàëèñòîâ, ñïîñîáíûõ ïðîâîäèòü ðàçðàáîòêó àïïàðàòóðû öèôðîâîé îáðàáîòêè ñèãíàëîâ íà ÏËÈÑ, âëàäåþùèõ îñíîâíûìè ìåòîäàìè ïðîåêòèðîâàíèÿ, îðèåíòèðóþùèõñÿ â ñîâðåìåííîé ýëåìåíòíîé áàçå è ïðîãðàììíîì îáåñïå÷åíèè. Èäÿ íàâñòðå÷ó ìíîãî÷èñëåííûì ïîæåëàíèÿì ïðåäïðèÿòèé, çàèíòåðåñîâàííûõ â ïîäãîòîâêå ìîëîäûõ ñïåöèàëèñòîâ, âëàäåþùèõ ñîâðåìåííûìè òåõíîëîãèÿìè, íà êàôåäðå ÑÌ-5 «Àâòîíîìíûå èíôîðìàöèîííûå è óïðàâëÿþùèå ñèñòåìû» ÌÃÒÓ èì. Í.Ý. Áàóìàíà â ïðîãðàììó ÷åòûðåõñåìåñòðîâîãî êóðñà «Ñõåìîòåõíè÷åñêîå ïðîåêòèðîâàíèå ìèêðîýëåêòðîííûõ óñòðîéñòâ» âêëþ÷åí ñåìåñòðîâûé ðàçäåë «Ïðîåêòèðîâàíèå àïïàðàòóðû îáðàáîòêè ñèãíàëîâ íà ÏËÈÑ», íà îñíîâå ëåêöèîííûõ è ñåìèíàðñêèõ ìàòåðèàëîâ êîòîðîãî è âûõîäèò ýòîò öèêë ñòàòåé.
13
Ïðèâåäåì èçâåñòíóþ êëàññèôèêàöèþ ÏËÈÑ [1, 2, 3] ïî ñòðóêòóðíîìó ïðèçíàêó, òàê êàê îíà äàåò íàèáîëåå ïîëíîå ïðåäñòàâëåíèå î êëàññå çàäà÷, ïðèãîäíûõ äëÿ ðåøåíèÿ íà òîé èëè èíîé ÏËÈÑ. Ñëåäóåò çàìåòèòü, ÷òî îáùåïðèíÿòîé îöåíêîé ëîãè÷åñêîé åìêîñòè ÏËÈÑ ÿâëÿåòñÿ ÷èñëî ýêâèâàëåíòíûõ âåíòèëåé, îïðåäåëÿåìîå êàê ñðåäíåå ÷èñëî âåíòèëåé «2È-ÍÅ», íåîáõîäèìûõ äëÿ ðåàëèçàöèè ýêâèâàëåíòíîãî ïðîåêòà íà ÏËÈÑ è áàçîâîì ìàòðè÷íîì êðèñòàëëå (ÁÌK). Ïîíÿòíî, ÷òî ýòà îöåíêà âåñüìà óñëîâíà, ïîñêîëüêó ÏËÈÑ íå ñîäåðæàò âåíòèëåé «2È-ÍÅ» â ÷èñòîì âèäå, îäíàêî äëÿ ïðîâåäåíèÿ ñðàâíèòåëüíîãî àíàëèçà ðàçëè÷íûõ àðõèòåêòóð îíà âïîëíå ïðèãîäíà. Îñíîâíûìè êðèòåðèÿìè òàêîé êëàññèôèêàöèè ÿâëÿþòñÿ íàëè÷èå, âèä è ñïîñîáû êîììóòàöèè ýëåìåíòîâ ëîãè÷åñêèõ ìàòðèö. Ïî ýòîìó ïðèçíàêó ìîæíî âûäåëèòü ñëåäóþùèå êëàññû ÏËÈÑ. Ïðîãðàììèðóåìûå ëîãè÷åñêèå ìàòðèöû íàèáîëåå òðàäèöèîííûé òèï ÏËÈÑ, èìåþùèé ïðîãðàììèðóåìûå ìàòðèöû «È» è «ÈËÈ».  çàðóáåæíîé ëèòåðàòóðå ñîîòâåòñòâóþùèìè ýòîìó êëàññó àááðåâèàòóðàìè ÿâëÿþòñÿ FPLA (Field Programmable Logic Array) è FPLS (Field Programmable Logic Sequensers). Ïðèìåðàìè òàêèõ ÏËÈÑ ìîãóò ñëóæèòü îòå÷åñòâåííûå ñõåìû K556PT1, PT2, PT21. Íåäîñòàòîê òàêîé àðõèòåêòóðû ñëàáîå èñïîëüçîâàíèå ðåñóðñîâ ïðîãðàììèðóåìîé ìàòðèöû «ÈËÈ», ïîýòîìó äàëüíåéøåå ðàçâèòèå ïîëó÷èëè ìèêðîñõåìû, ïîñòðîåííûå ïî àðõèòåêòóðå ïðîãðàììèðóåìîé ìàòðè÷íîé ëîãèêè (ÏÌË Programmable Array Logic, PAL) ýòî ÏËÈÑ, èìåþùèå ïðîãðàììèðóåìóþ ìàòðèöó «È» è ôèêñèðîâàííóþ ìàòðèöó «ÈËÈ». K ýòîìó êëàññó îòíîñèòñÿ áîëüøèíñòâî ñîâðåìåííûõ ÏËÈÑ íåáîëüøîé ñòåïåíè èíòåãðàöèè.  êà÷åñòâå ïðèìåðîâ ìîæíî ïðèâåñòè îòå÷åñòâåííûå èíòåãðàëüíûå ñõåìû (ÈÑ) KÌ1556ÕÏ4, ÕÏ6, ÕÏ8, ÕË8, ðàííèå ðàçðàáîòêè (ñåðåäèíàêîíåö 80-õ ãîäîâ) ÏËÈÑ ôèðì «Intel», «Altera», «AMD», «Lattice» è äð. Ðàçíîâèäíîñòüþ êëàññà ÏÌË ÿâëÿþòñÿ ÏËÈÑ, èìåþùèå òîëüêî îäíó (ïðîãðàììèðóåìóþ) ìàòðèöó «È», íàïðèìåð ñõåìà 85C508 ôèðìû «Intel». Ñëåäóþùèé òðàäèöèîííûé òèï ÏËÈÑ ïðîãðàììèðóåìàÿ ìàêðîëîãèêà. Îíà ñîäåðæèò åäèíñòâåííóþ ïðîãðàììèðóåìóþ ìàòðèöó «È-ÍÅ» èëè «ÈËÈ-ÍÅ», íî çà ñ÷åò ìíîãî÷èñëåííûõ èíâåðñíûõ îáðàòíûõ ñâÿçåé ñïîñîáíà ôîðìèðîâàòü ñëîæíûå ëîãè÷åñêèå ôóíêöèè. K ýòîìó êëàññó îòíîñÿòñÿ, íàïðèìåð, ÏËÈÑ PLHS501 è PLHS502 ôèðìû «Signetics», èìåþùèå ìàòðèöó «È-ÍÅ», à òàêæå ñõåìà XL78C800 ôèðìû «Exel», îñíîâàííàÿ íà ìàòðèöå «ÈËÈ-ÍÅ». Âûøåïåðå÷èñëåííûå àðõèòåêòóðû ÏËÈÑ ñîäåðæàò íåáîëüøîå ÷èñëî ÿ÷ååê, ê íàñòîÿùåìó âðåìåíè ìîðàëüíî óñòàðåëè è ïðèìåíÿþòñÿ äëÿ ðåà-
14
Ââåäåíèå ëèçàöèè îòíîñèòåëüíî ïðîñòûõ óñòðîéñòâ, äëÿ êîòîðûõ íå ñóùåñòâóåò ãîòîâûõ ÈÑ ñðåäíåé ñòåïåíè èíòåãðàöèè. Åñòåñòâåííî, äëÿ ðåàëèçàöèè àëãîðèòìîâ ÖÎÑ îíè íå ïðèãîäíû. ÈÑ ÏÌË (Programmable Logic Device, PLD) èìåþò àðõèòåêòóðó, âåñüìà óäîáíóþ äëÿ ðåàëèçàöèè öèôðîâûõ àâòîìàòîâ. Ðàçâèòèå ýòîé àðõèòåêòóðû ïðîãðàììèðóåìûå êîììóòèðóåìûå ìàòðè÷íûå áëîêè (ÏKÌÁ) ýòî ÏËÈÑ, ñîäåðæàùèå íåñêîëüêî ìàòðè÷íûõ ëîãè÷åñêèõ áëîêîâ (ÌËÁ), îáúåäèíåííûõ êîììóòàöèîííîé ìàòðèöåé. Kàæäûé ÌËÁ ïðåäñòàâëÿåò ñîáîé ñòðóêòóðó òèïà ÏÌË, ò.å. ïðîãðàììèðóåìóþ ìàòðèöó «È», ôèêñèðîâàííóþ ìàòðèöó «ÈËÈ» è ìàêðîÿ÷åéêè. ÏËÈÑ òèïà ÏKÌÁ, êàê ïðàâèëî, èìåþò âûñîêóþ ñòåïåíü èíòåãðàöèè (äî 10000 ýêâèâàëåíòíûõ âåíòèëåé, äî 256 ìàêðîÿ÷ååê). K ýòîìó êëàññó îòíîñÿòñÿ ÏËÈÑ ñåìåéñòâà MAX5000 è MAX7000 ôèðìû «Altera», ñõåìû XC7000 è XC9500 ôèðìû «Xilinx», à òàêæå áîëüøîå ÷èñëî ìèêðîñõåì äðóãèõ ïðîèçâîäèòåëåé (ôèðìû «Atmel», «Vantis», «Lucent» è äð.).  çàðóáåæíîé ëèòåðàòóðå îíè ïîëó÷èëè íàçâàíèå Complex Programmable Logic Devices (CPLD). Äðóãîé òèï àðõèòåêòóðû ÏËÈÑ ïðîãðàììèðóåìûå âåíòèëüíûå ìàòðèöû (ÏÂÌ), ñîñòîÿùèå èç ëîãè÷åñêèõ áëîêîâ (ËÁ) è êîììóòèðóþùèõ ñâÿçåé ïðîãðàììèðóåìûõ ìàòðèö ñîåäèíåíèé. Ëîãè÷åñêèå áëîêè òàêèõ ÏËÈÑ ñîñòîÿò èç îäíîãî èëè íåñêîëüêèõ îòíîñèòåëüíî ïðîñòûõ ëîãè÷åñêèõ ýëåìåíòîâ, â èõ îñíîâå ëåæèò òàáëèöà ïåðåêîäèðîâêè (ÒÏ Look-up table, LUT), ïðîãðàììèðóåìûé ìóëüòèïëåêñîð, D-òðèããåð, à òàêæå öåïè óïðàâëåíèÿ. Òàêèõ ïðîñòûõ ýëåìåíòîâ ìîæåò áûòü äîñòàòî÷íî áîëüøîå êîëè÷åñòâî, ó ñîâðåìåííûõ ÏËÈÑ åìêîñòüþ äî 1 ìèëëèîíà âåíòèëåé ÷èñëî ëîãè÷åñêèõ ýëåìåíòîâ äîñòèãàåò íåñêîëüêèõ äåñÿòêîâ òûñÿ÷. Çà ñ÷åò òàêîãî áîëüøîãî ÷èñëà ëîãè÷åñêèõ ýëåìåíòîâ îíè ñîäåðæàò çíà÷èòåëüíîå ÷èñëî òðèããåðîâ, òàêæå íåêîòîðûå ñåìåéñòâà ÏËÈÑ èìåþò âñòðîåííûå ðåêîíôèãóðèðóåìûå ìîäóëè ïàìÿòè (ÐÌÏ Embedded Array Block, EAB), ÷òî äåëàåò ÏËÈÑ äàííîé àðõèòåêòóðû âåñüìà óäîáíûì ñðåäñòâîì ðåàëèçàöèè àëãîðèòìîâ öèôðîâîé îáðàáîòêè ñèãíàëîâ, îñíîâíûìè îïåðàöèÿìè â êîòîðûõ ÿâëÿþòñÿ ïåðåìíîæåíèå, óìíîæåíèå íà êîíñòàíòó, ñóììèðîâàíèå è çàäåðæêà ñèãíàëà. Âìåñòå ñ òåì âîçìîæíîñòè êîìáèíàöèîííîé ÷àñòè òàêèõ ÏËÈÑ îãðàíè÷åíû, ïîýòîìó ñîâìåñòíî ñ ÏÂÌ ïðèìåíÿþò ÏKÌÁ (CPLD) äëÿ ðåàëèçàöèè óïðàâëÿþùèõ è èíòåðôåéñíûõ ñõåì.  çàðóáåæíîé ëèòåðàòóðå òàêèå ÏËÈÑ ïîëó÷èëè íàçâàíèå Field Programmable Gate Array (FPGA). K FPGA (ÏÂÌ) êëàññó îòíîñÿòñÿ ÏËÈÑ XC2000, XC3000, XC4000, Spartan, Virtex ôèðìû «Xilinx», ACT1, ACT2 ôèðìû
15
Ââåäåíèå «Actel», à òàêæå ñåìåéñòâà FLEX8000 ôèðìû «Altera», íåêîòîðûå ÏËÈÑ ôèðì «Atmel» è «Vantis». Ìíîæåñòâî êîíôèãóðèðóåìûõ ëîãè÷åñêèõ áëîêîâ (Configurable Logic Blocks, CLBs) îáúåäèíÿþòñÿ ñ ïîìîùüþ ìàòðèöû ñîåäèíåíèé. Õàðàêòåðíûìè äëÿ FPGA àðõèòåêòóð ÿâëÿþòñÿ ýëåìåíòû ââîäà-âûâîäà (Input/Output Blocks, IOBs), ïîçâîëÿþùèå ðåàëèçîâàòü äâóíàïðàâëåííûé ââîä/âûâîä, òðåòüå ñîñòîÿíèå è ò.ï. Îñîáåííîñòüþ ñîâðåìåííûõ ÏËÈÑ ÿâëÿåòñÿ âîçìîæíîñòü òåñòèðîâàíèÿ óçëîâ ñ ïîìîùüþ ïîðòà JTAG (B-scan), à òàêæå íàëè÷èå âíóòðåííåãî ãåíåðàòîðà (Osc) è ñõåì óïðàâëåíèÿ ïîñëåäîâàòåëüíîé êîíôèãóðàöèåé. Ôèðìà «Altera» ïîøëà ïî ïóòè ðàçâèòèÿ FPGA-àðõèòåêòóð è ïðåäëîæèëà â ñåìåéñòâå FLEX10K òàê íàçûâàåìóþ äâóõóðîâíåâóþ àðõèòåêòóðó ìàòðèöû ñîåäèíåíèé. Ëîãè÷åñêèå ýëåìåíòû (ËÝ) îáúåäèíÿþòñÿ â ãðóïïû ëîãè÷åñêèå áëîêè (ËÁ). Âíóòðè ëîãè÷åñêèõ áëîêîâ ËÝ ñîåäèíÿþòñÿ ïîñðåäñòâîì ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöû ñîåäèíåíèé, ïîçâîëÿþùåé ñîåäèíÿòü ëþáîé ËÝ ñ ëþáûì äðóãèì. Ëîãè÷åñêèå áëîêè ñâÿçàíû ìåæäó ñîáîé è ñ ýëåìåíòàìè ââîäà-âûâîäà ïîñðåäñòâîì ãëîáàëüíîé ïðîãðàììèðóåìîé ìàòðèöû ñîåäèíåíèé (ÃÏÌÑ). Ëîêàëüíàÿ è ãëîáàëüíàÿ ìàòðèöû ñîåäèíåíèé èìåþò íåïðåðûâíóþ ñòðóêòóðó äëÿ êàæäîãî ñîåäèíåíèÿ âûäåëÿåòñÿ íåïðåðûâíûé êàíàë. Äàëüíåéøåå ðàçâèòèå àðõèòåêòóð èäåò ïî ïóòè ñîçäàíèÿ êîìáèíèðîâàííûõ àðõèòåêòóð, ñî÷åòàþùèõ óäîáñòâî ðåàëèçàöèè àëãîðèòìîâ ÖÎÑ íà áàçå òàáëèö ïåðåêîäèðîâîê è ðåêîíôèãóðèðóåìûõ ìîäóëåé ïàìÿòè, õàðàêòåðíûõ äëÿ FPGA-ñòðóêòóð è ìíîãîóðîâíåâûõ ÏËÈÑ ñ óäîáñòâîì ðåàëèçàöèè öèôðîâûõ àâòîìàòîâ íà CPLD-àðõèòåêòóðàõ. Òàê, ÏËÈÑ APEX20K ôèðìû «Altera» ñîäåðæàò â ñåáå ëîãè÷åñêèå ýëåìåíòû âñåõ ïåðå÷èñëåííûõ òèïîâ, ÷òî ïîçâîëÿåò ïðèìåíÿòü ÏËÈÑ êàê îñíîâíóþ ýëåìåíòíóþ áàçó äëÿ «ñèñòåì íà êðèñòàëëå» (System-On-Chip, SOC).  îñíîâå èäåè SOC ëåæèò èíòåãðàöèÿ âñåé ýëåêòðîííîé ñèñòåìû â îäíîì êðèñòàëëå (íàïðèìåð, â ñëó÷àå ïåðñîíàëüíîãî êîìïüþòåðà (ÏK) òàêîé ÷èï îáúåäèíÿåò ïðîöåññîð, ïàìÿòü, è ò.ä.). Kîìïîíåíòû ýòèõ ñèñòåì ðàçðàáàòûâàþòñÿ îòäåëüíî è õðàíÿòñÿ â âèäå ôàéëîâ ïàðàìåòðèçèðóåìûõ ìîäóëåé. Îêîí÷àòåëüíàÿ ñòðóêòóðà SOC-ìèêðîñõåìû âûïîëíÿåòñÿ íà áàçå ýòèõ «âèðòóàëüíûõ êîìïîíåíòîâ» ñ ïîìîùüþ ïðîãðàìì ñèñòåì àâòîìàòèçàöèè ïðîåêòèðîâàíèÿ (ÑÀÏÐ) ýëåêòðîííûõ óñòðîéñòâ EDA (Electronic Design Automation). Áëàãîäàðÿ ñòàíäàðòèçàöèè â îäíî öåëîå ìîæíî îáúåäèíÿòü «âèðòóàëüíûå êîìïîíåíòû» îò ðàçíûõ ðàçðàáîò÷èêîâ.
16
Ââåäåíèå Kàê èçâåñòíî, ïðè âûáîðå ýëåìåíòíîé áàçû ñèñòåì îáðàáîòêè ñèãíàëîâ îáû÷íî ðóêîâîäñòâóþòñÿ ñëåäóþùèìè êðèòåðèÿìè îòáîðà: áûñòðîäåéñòâèå; ëîãè÷åñêàÿ åìêîñòü, äîñòàòî÷íàÿ äëÿ ðåàëèçàöèè àëãîðèòìà; ñõåìîòåõíè÷åñêèå è êîíñòðóêòèâíûå ïàðàìåòðû ÏËÈÑ, íàäåæíîñòü, ðàáî÷èé äèàïàçîí òåìïåðàòóð, ñòîéêîñòü ê èîíèçèðóþùèì èçëó÷åíèÿì è ò.ï.; ñòîèìîñòü âëàäåíèÿ ñðåäñòâàìè ðàçðàáîòêè, âêëþ÷àþùàÿ êàê ñòîèìîñòü ïðîãðàììíîãî îáåñïå÷åíèÿ, òàê íàëè÷èå è ñòîèìîñòü àïïàðàòíûõ ñðåäñòâ îòëàäêè; ñòîèìîñòü îáîðóäîâàíèÿ äëÿ ïðîãðàììèðîâàíèÿ ÏËÈÑ èëè êîíôèãóðàöèîííûõ ÏÇÓ (ïîñòîÿííîå çàïîìèíàþùåå óñòðîéñòâî); íàëè÷èå ìåòîäè÷åñêîé è òåõíè÷åñêîé ïîääåðæêè; íàëè÷èå è íàäåæíîñòü ðîññèéñêèõ ïîñòàâùèêîâ; ñòîèìîñòü ìèêðîñõåì.  äàííîé êíèãå ðàññìàòðèâàþòñÿ âîïðîñû ïðîåêòèðîâàíèÿ óñòðîéñòâ îáðàáîòêè èíôîðìàöèè íà áàçå ÏËÈÑ ôèðìû «Altera». Ôèðìà «Altera Corporation» (101 Innovation Drive, San Jose, CA 95134, USA, www.altera.com) áûëà îñíîâàíà â èþíå 1983 ãîäà.  íàñòîÿùåå âðåìÿ ïîñëåäíèì äîñòèæåíèåì ýòîé ôèðìû ÿâëÿåòñÿ ñåìåéñòâî APEX20K. Kðîìå òîãî, ôèðìà «Altera» âûïóñêàåò CPLD ñåìåéñòâ MAX3000, MAX7000, MAX9000 (óñòàðåâøèå ñåðèè ñïåöèàëüíî íå óïîìèíàþòñÿ), FPGA ñåìåéñòâ FLEX10K, FLEX8000, FLEX6000. Äîïîëíèòåëüíûì ôàêòîðîì ïðè âûáîðå ÏËÈÑ ôèðìû «Altera» ÿâëÿåòñÿ íàëè÷èå äîñòàòî÷íî ðàçâèòûõ áåñïëàòíûõ âåðñèé ÑÀÏÐ.  Òàáë. Â.1 ïðèâåäåíû îñíîâíûå õàðàêòåðèñòèêè ïàêåòà MAX+PLUS II BASELINE âåðñèÿ 9.3 ôèðìû «Altera», êîòîðûé ìîæíî áåñïëàòíî «ñêà÷àòü» ñ ñàéòà www.altera.com èëè ïîëó÷èòü íà CD «Altera Digital Library», íà êîòîðîì ñîäåðæèòñÿ òàêæå è ïîëíûé íàáîð äîêóìåíòàöèè ïî àðõèòåêòóðå è ïðèìåíåíèþ ÏËÈÑ. Kðîìå òîãî, ÏËÈÑ ôèðìû «Altera» âûïóñêàþòñÿ ñ âîçìîæíîñòüþ ïðîãðàììèðîâàíèÿ â ñèñòåìå íåïîñðåäñòâåííî íà ïëàòå. Äëÿ ïðîãðàììèðîâàíèÿ è çàãðóçêè êîíôèãóðàöèè óñòðîéñòâ îïóáëèêîâàíà ñõåìà çàãðóçî÷íîãî êàáåëÿ ByteBlaster è ByteBlasteMV. Ñëåäóåò îòìåòèòü, ÷òî íîâûå êîíôèãóðàöèîííûå ÏÇÓ EPC2 è ÅÐÑ16 ïîçâîëÿþò ïðîãðàììèðîâàíèå ñ ïîìîùüþ ýòîãî óñòðîéñòâà, òåì ñàìûì îòïàäàåò íóæäà â ïðîãðàììàòîðå, ÷òî, åñòåñòâåííî, ñíèæàåò ñòîèìîñòü âëàäåíèÿ òåõíîëîãèåé. ÏËÈÑ ôèðìû «Altera» âûïóñêàþòñÿ â êîììåð÷åñêîì è èíäóñòðèàëüíîì äèàïàçîíå òåìïåðàòóð.
17
Ââåäåíèå Òàáëèöà Â.1. Îñíîâíûå õàðàêòåðèñòèêè ïàêåòà MAX+PLUS II BASELINE âåðñèè 9.3
Ïîääåðæèâàåìûå óñòðîéñòâà
ACEX, EPF10K10, EPF10K10A, EPF10K20, EPF10K30, EPF10K30A, EPF10K30E (äî 30000 ýêâèâàëåíòíûõ âåíòèëåé), EPM9320, EPM9320A, EPF8452A, EPF8282A, MAX7000, FLEX6000, MAX5000, MAX3000A, Classic
Ñõåìíûé ââîä, ïîääåðæêà AHDL, ñðåäñòâà èíòåðôåéñà ñ ÑÀÏÐ Ñðåäñòâà îïèñàíèÿ òðåòüèõ ôèðì, òîïîëîãè÷åñêèé ðåäàêòîð, èåðàðõè÷åñêàÿ ñòðóêòóðà ïðîåêòà ïðîåêòà, íàëè÷èå áèáëèîòåêè ïàðàìåòðèçèðóåìûõ ìîäóëåé Ñðåäñòâà Ëîãè÷åñêèé ñèíòåç è òðàññèðîâêà, àâòîìàòè÷åñêîå îáíàðóæåíèå êîìïèëÿöèè ïðîåêòà îøèáîê, ïîääåðæêà ìåãàôóíêöèé ïî ïðîãðàììàì MegaCore è AMPP Ñðåäñòâà âåðèôèêàöèè ïðîåêòà
Âðåìåííîé àíàëèç, ôóíêöèîíàëüíîå è âðåìåííîå ìîäåëèðîâàíèå, àíàëèç ñèãíàëîâ, âîçìîæíîñòü èñïîëüçîâàíèÿ ïðîãðàìì ìîäåëèðîâàíèÿ (ñèìóëÿòîðîâ) òðåòüèõ ôèðì
18
Ãëàâà 1.
Ýëåìåíòíàÿ áàçà
1.1. Ñåìåéñòâî MAX3000 Ëåòîì 1999 ãîäà íà ðûíêå ñòàëè äîñòóïíû ÏËÈÑ ñåìåéñòâà MAX3000. Èõ àðõèòåêòóðà áëèçêà ê àðõèòåêòóðå ñåìåéñòâà MAX7000, îäíàêî èìååòñÿ ðÿä íåáîëüøèõ îòëè÷èé.  Òàáë. 1.1 ïðèâåäåíû îñíîâíûå ïàðàìåòðû ÏËÈÑ. Òàáëèöà 1.1. Îñíîâíûå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà MAX3000 Ïàðàìåòð Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî ýêâèâàëåíòíûõ âåíòèëåé ×èñëî ìàêðîÿ÷ååê
EPM3032A EPM3064A EPM3128A EPM3256A 600
1 250
2 500
5 000
32
64
128
256
×èñëî ëîãè÷åñêèõ áëîêîâ
2
4
8
16
×èñëî ïðîãðàììèðóåìûõ ïîëüçîâàòåëåì âûâîäîâ
34
66
96
158
Çàäåðæêà ðàñïðîñòðàíåíèÿ ñèãíàëà âõîä/âûõîä, tPD [íñ]
4.5
4.5
5
6
Âðåìÿ óñòàíîâêè ãëîáàëüíîãî òàêòîâîãî ñèãíàëà, tSU [íñ]
3.0
3.0
3.2
3.7
Çàäåðæêà ãëîáàëüíîãî òàêòîâîãî ñèãíàëà äî âûõîäà, tCO1 [íñ]
2.8
2.8
3.0
3.3
192.3
192.3
181.8
156.3
Ìàêñèìàëüíàÿ ãëîáàëüíàÿ òàêòîâàÿ ÷àñòîòà, fCNT [ÌÃö]
Ìèêðîñõåìû ñåìåéñòâà MAX3000 âûïîëíåíû ïî ÊÌÎÏ EPROM 0.35-ìèêðîííîé òåõíîëîãèè, ÷òî ïîçâîëèëî ñóùåñòâåííî óäåøåâèòü èõ ïî ñðàâíåíèþ ñ ñåìåéñòâîì MAX7000S. Âñå ÏËÈÑ ñåìåéñòâà
19
Ýëåìåíòíàÿ áàçà MAX3000 ïîääåðæèâàþò òåõíîëîãèþ ïðîãðàììèðîâàíèÿ â ñèñòåìå ISP (In-System Programmability) è ïåðèôåðèéíîãî ñêàíèðîâàíèÿ (boundary scan) â ñîîòâåòñòâèè ñî ñòàíäàðòîì IEEE Std. 1149.1 1990 (JTAG). Ýëåìåíòû ââîäà/âûâîäà (ÝÂÂ) ïîçâîëÿþò ðàáîòàòü â ñèñòåìàõ ñ óðîâíÿìè ñèãíàëîâ 5, 3.3 è 2.5 Â. Ìàòðèöà ñîåäèíåíèé èìååò íåïðåðûâíóþ ñòðóêòóðó, ÷òî ïîçâîëÿåò ðåàëèçîâàòü âðåìÿ çàäåðæêè ðàñïðîñòðàíåíèÿ ñèãíàëà äî 4.5 íñ. ÏËÈÑ ñåìåéñòâà MAX3000 èìåþò âîçìîæíîñòü àïïàðàòíîé ýìóëÿöèè âûõîäîâ ñ îòêðûòûì êîëëåêòîðîì (open drains pin) è óäîâëåòâîðÿþò òðåáîâàíèÿì ñòàíäàðòà PCI. Èìååòñÿ âîçìîæíîñòü èíäèâèäóàëüíîãî ïðîãðàììèðîâàíèÿ öåïåé ñáðîñà, óñòàíîâêè è òàêòèðîâàíèÿ òðèããåðîâ, âõîäÿùèõ â ìàêðîÿ÷åéêó. Ïðåäóñìîòðåí ðåæèì ïîíèæåííîãî ýíåðãîïîòðåáëåíèÿ. Ïðîãðàììèðóåìûé ëîãè÷åñêèé ðàñøèðèòåëü ïîçâîëÿåò ðåàëèçîâàòü íà îäíîé ìàêðîÿ÷åéêå ôóíêöèè äî 32 ïåðåìåííûõ. Èìååòñÿ âîçìîæíîñòü çàäàíèÿ áèòà ñåêðåòíîñòè (security bit) äëÿ çàùèòû îò íåñàíêöèîíèðîâàííîãî òèðàæèðîâàíèÿ ðàçðàáîòêè. Ðåàëèçàöèÿ ôóíêöèè ïðîãðàììèðîâàíèÿ â ñèñòåìå ïîääåðæèâàåòñÿ ñ èñïîëüçîâàíèåì ñòàíäàðòíûõ ñðåäñòâ çàãðóçêè, òàêèõ, êàê ByteBlasterMV, BitBlaster, MasterBlaster, à òàêæå ïîääåðæèâàåòñÿ ôîðìàò JAM. ÏËÈÑ ñåìåéñòâà MAX3000 âûïóñêàþòñÿ â êîðïóñàõ îò 44 äî 208 âûâîäîâ. Íà Ðèñ. 1.1 ïðåäñòàâëåíà ôóíêöèîíàëüíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà MAX3000. Îñíîâíûìè ýëåìåíòàìè ñòðóêòóðû ÏËÈÑ ñåìåéñòâà MAX3000 ÿâëÿþòñÿ: ëîãè÷åñêèå áëîêè (ËÁ, Logic array blocks, LAB); ìàêðîÿ÷åéêè (Ìß, macrocells); ëîãè÷åñêèå ðàñøèðèòåëè (expanders) (ïàðàëëåëüíûé (parallel) è ðàçäåëÿåìûé (shareble)); ïðîãðàììèðóåìàÿ ìàòðèöà ñîåäèíåíèé (ÏÌÑ, Programmable Interconnect Array, PIA); ýëåìåíòû ââîäà/âûâîäà (ÝÂÂ, I/O control block). ÏËÈÑ ñåìåéñòâà MAX3000 èìåþò ÷åòûðå âûâîäà, çàêðåïëåííûõ çà ãëîáàëüíûìè öåïÿìè (dedicated inputs). Ýòî ãëîáàëüíûå öåïè ñèíõðîíèçàöèè ñáðîñà è óñòàíîâêè â òðåòüå ñîñòîÿíèå êàæäîé ìàêðîÿ÷åéêè. Kðîìå òîãî, ýòè âûâîäû ìîæíî èñïîëüçîâàòü êàê âõîäû èëè âûõîäû ïîëüçîâàòåëÿ äëÿ «áûñòðûõ» ñèãíàëîâ, îáðàáàòûâàåìûõ â ÏËÈÑ.
20
Ýëåìåíòíàÿ áàçà
INPUT/GCLK1 INPUT/OE2/GCLK2 INPUT/OE1
INPUT/GCLRn Разрешение выхода
4...16 I/O
ЛБ B МЯ 1...16
36
36
16
ЭВВ
4...16
4...16 I/O
4...16
ЛБ D
МЯ 33...48
36
36
16
4...16
МЯ 49...64
16
4...16
4...16 ЭВВ
6 AL1001+
6
6
PIA ЛБ C
ЭВВ
ЭВВ
16
4...16
6
МЯ 17...32
6 4...16 4...16 I/O
ЛБ A
4...16
4...16 I/O
6
Разрешение выхода
Ðèñ.1.1. Ôóíêöèîíàëüíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà MAX3000
Kàê âèäíî èç Ðèñ. 1.1, â îñíîâå àðõèòåêòóðû ÏËÈÑ ñåìåéñòâà MAX3000 ëåæàò ëîãè÷åñêèå áëîêè, ñîñòîÿùèå èç 16 ìàêðîÿ÷ååê êàæäûé. Ëîãè÷åñêèå áëîêè ñîåäèíÿþòñÿ ñ ïîìîùüþ ïðîãðàììèðóåìîé ìàòðèöû ñîåäèíåíèé. Kàæäûé ëîãè÷åñêèé áëîê èìååò 36 âõîäîâ ñ ÏÌÑ. Íà Ðèñ. 1.2 ïðèâåäåíà ñòðóêòóðíàÿ ñõåìà ìàêðîÿ÷åéêè ÏËÈÑ ñåìåéñòâà MAX3000.
21
22 Разделяемый расширитель
Матрица распре3 деления термов
Выбор сигнала сброса
VCC
Выбор сигналов тактирования и разрешения
ENA CLRN
PRN D/T Q Регистр
К ПМС
Цепь К ЭВВ обхода регистра
AL1002+
Глобальный Глобальный сигнал сигнал сброса синхронизации Параллельный 2 расширитель
Ðèñ. 1.2. Ñòðóêòóðíàÿ ñõåìà ìàêðîÿ÷åéêè ÏËÈÑ ñåìåéñòâà MAX3000
36 сигналов ПМС
ПМС
Ýëåìåíòíàÿ áàçà
Ýëåìåíòíàÿ áàçà Ìß ÏËÈÑ ñåìåéñòâà MAX3000 ñîñòîèò èç òðåõ îñíîâíûõ óçëîâ: ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöû (LAB local array); ìàòðèöû ðàñïðåäåëåíèÿ òåðìîâ (product-term select matrix); ïðîãðàììèðóåìîãî ðåãèñòðà (programmable register). Kîìáèíàöèîííûå ôóíêöèè ðåàëèçóþòñÿ íà ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå è ìàòðèöå ðàñïðåäåëåíèÿ òåðìîâ, ïîçâîëÿþùåé îáúåäèíÿòü ëîãè÷åñêèå ïðîèçâåäåíèÿ ëèáî ïî «ÈËÈ» (OR), ëèáî ïî èñêëþ÷àþùåìó «ÈËÈ» (XOR). Kðîìå òîãî, ìàòðèöà ðàñïðåäåëåíèÿ òåðìîâ ïîçâîëÿåò ñêîììóòèðîâàòü öåïè óïðàâëåíèÿ òðèããåðîì Ìß. Ðåæèì òàêòèðîâàíèÿ è êîíôèãóðàöèÿ òðèããåðà âûáèðàþòñÿ àâòîìàòè÷åñêè âî âðåìÿ ñèíòåçà ïðîåêòà â ÑÀÏÐ MAX+PLUS II â çàâèñèìîñòè îò âûáðàííîãî ðàçðàáîò÷èêîì òèïà òðèããåðà ïðè îïèñàíèè ïðîåêòà.  ÏËÈÑ ñåìåéñòâà MAX3000 äîñòóïíî 2 ãëîáàëüíûõ òàêòîâûõ ñèãíàëà, ÷òî ïîçâîëÿåò ïðîåêòèðîâàòü ñõåìû ñ äâóõôàçíîé ñèíõðîíèçàöèåé. Äëÿ ðåàëèçàöèè ëîãè÷åñêèõ ôóíêöèé áîëüøîãî ÷èñëà ïåðåìåííûõ èñïîëüçóþòñÿ ëîãè÷åñêèå ðàñøèðèòåëè. Ðàçäåëÿåìûé ëîãè÷åñêèé ðàñøèðèòåëü (Ðèñ. 1.3) ïîçâîëÿåò ðåàëèçîâàòü ëîãè÷åñêóþ ôóíêöèþ ñ áîëüøèì ÷èñëîì âõîäîâ, ïîçâîëÿÿ îáúåäèíèòü Ìß, âõîäÿùèå â ñîñòàâ îäíîãî ËÁ. Òàêèì îáðàçîì, ðàçäåëÿåìûé ðàñøèðèòåëü ôîðìèðóåò òåðì, èíâåðñíîå çíà÷åíèå êîòîðîãî ïåðåäàåòñÿ ìàòðèöåé ðàñïðåäåëåíèÿ òåðìîâ â ëîêàëüíóþ ïðîãðàììèðóåìóþ ìàòðèöó è ìîæåò áûòü èñïîëüçîâàíî â ëþáîé Ìß äàííîãî ËÁ. Kàê âèäíî èç Ðèñ. 1.3 èìåþòñÿ 36 ñèãíàëîâ ëîêàëüíîé ÏÌÑ, à òàêæå 16 èíâåðñíûõ ñèãíàëîâ ñ ðàçäåëÿåìûõ ëîãè÷åñêèõ ðàñøèðèòåëåé, ÷òî ïîçâîëÿåò â ïðåäåëàõ îäíîãî ËÁ ðåàëèçîâàòü ôóíêöèþ äî 52 òåðìîâ ðàíãà 1. Ïàðàëëåëüíûé ëîãè÷åñêèé ðàñøèðèòåëü (Ðèñ. 1.4) ïîçâîëÿåò èñïîëüçîâàòü ëîêàëüíûå ìàòðèöû ñìåæíûõ Ìß äëÿ ðåàëèçàöèè ôóíêöèé, â êîòîðûå âõîäÿò áîëåå 5 òåðìîâ. Îäíà öåïî÷êà ïàðàëëåëüíûõ ðàñøèðèòåëåé ìîæåò âêëþ÷àòü äî 4 Ìß, ðåàëèçóÿ ôóíêöèþ 20 òåðìîâ. Kîìïèëÿòîð ñèñòåìû MAX+PLUS II ïîääåðæèâàåò ðàçìåùåíèå äî 3 íàáîðîâ íå áîëåå ÷åì ïî 5 ïàðàëëåëüíûõ ðàñøèðèòåëåé. Íà Ðèñ. 1.5 ïðèâåäåíà ñòðóêòóðà ïðîãðàììèðóåìîé ìàòðèöû ñîåäèíåíèé. Íà ÏÌÑ âûâîäÿòñÿ ñèãíàëû îò âñåõ âîçìîæíûõ èñòî÷íèêîâ: ÝÂÂ, ñèãíàëîâ îáðàòíîé ñâÿçè ËÁ, ñïåöèàëèçèðîâàííûõ âûäåëåííûõ âûâîäîâ.  ïðîöåññå ïðîãðàììèðîâàíèÿ òîëüêî íåîáõîäèìûå ñèãíàëû «çàâîäÿòñÿ» íà êàæäûé ËÁ. Íà Ðèñ. 1.5 ïðèâåäåíà ñòðóêòóðíàÿ ñõåìà ôîðìèðîâàíèÿ ñèãíàëîâ ËÁ.
23
16 разделяемых расширителей
Матрица распределения термов
Логика макроячейки
AL1003+
36 сигналов ПМС
Логика макроячейки
Матрица распределения термов
Ýëåìåíòíàÿ áàçà
Ðèñ. 1.3. Ðàçäåëÿåìûé ëîãè÷åñêèé ðàñøèðèòåëü
Íà Ðèñ. 1.6 ïðèâåäåíà ñõåìà ýëåìåíòà ââîäà/âûâîäà ÏËÈÑ ñåìåéñòâà MAX3000. ÝÂÂ ïîçâîëÿåò îðãàíèçîâàòü ðåæèìû ðàáîòû ñ îòêðûòûì êîëëåêòîðîì è òðåòüèì ñîñòîÿíèåì. ÏËÈÑ ñåìåéñòâà MAX3000 ïîëíîñòüþ ïîääåðæèâàþò âîçìîæíîñòü ïðîãðàììèðîâàíèÿ â ñèñòåìå â ñîîòâåòñòâèè ñî ñòàíäàðòîì IEEE Std. 1149.1 1990 (JTAG) ñ èñïîëüçîâàíèåì ñîîòâåòñòâóþùèõ èíñòðóìåíòàëüíûõ ñðåäñòâ. Ïîâûøåííîå íàïðÿæåíèå ïðîãðàììèðîâàíèÿ ôîðìèðóåòñÿ ñïåöèàëèçèðîâàííûìè ñõåìàìè, âõîäÿùèìè â ñîñòàâ ÏËÈÑ ñåìåé-
24
Ýëåìåíòíàÿ áàçà
От предыдущей МЯ
Матрица распределения термов
PRESET
Логика макроячейки CLOCK CLEAR
Матрица распределения термов
PRESET
Логика макроячейки CLOCK CLEAR
16 разделяемых расширителей
AL1004+
36 сигналов ПМС
К следующей МЯ
Ðèñ. 1.4. Ïàðàëëåëüíûé ëîãè÷åñêèé ðàñøèðèòåëü
ñòâà MAX3000, èç íàïðÿæåíèÿ ïèòàíèÿ 3.3 Â. Âî âðåìÿ ïðîãðàììèðîâàíèÿ â ñèñòåìå âõîäû è âûõîäû ÏËÈÑ íàõîäÿòñÿ â òðåòüåì ñîñòîÿíèè è «ñëåãêà ïîäòÿíóòû» ê íàïðÿæåíèþ ïèòàíèÿ. Ñîïðîòèâëåíèÿ âíóòðåííèõ ïîäñòðàèâàþùèõ ðåçèñòîðîâ ïîðÿäêà 50 êÎì. Íà Ðèñ. 1.7 ïðèâåäåíû âðåìåííûå äèàãðàììû ïðîãðàììèðîâàíèÿ ÏËÈÑ ñåìåéñòâà MAX3000 ÷åðåç ïîðò JTAG. Çíà÷åíèÿ âðåìåííûõ ïàðàìåòðîâ ïðèâåäåíû â Òàáë. 1.2.
25
Ýëåìåíòíàÿ áàçà
К ЛБ
AL1005+
Сигналы ПМС
Ðèñ. 1.5. Ñòðóêòóðà ÏÌÑ ÏËÈÑ ñåìåéñòâà MAX3000
6 глобальных сигналов разрешения выхода
PIA
Мультиплексор разрешения выхода К другим выводам VCC
GND
Переключение выхода в режим "открытый коллектор" Управление скоростью переключения К ПМС
Ðèñ. 1.6. Ýëåìåíò ââîäà/âûâîäà
26
AL1006+
От МЯ
Ýëåìåíòíàÿ áàçà TMS TDI tJCP tJCH
tJPSU
tJCL
tJPH
TCK tJPZX
tJPCO
tJPXZ
TDO tJSSU
tJSH
Захват tJSCO
tJSXZ AL1007+
tJSZX Управление
Ðèñ. 1.7. Âðåìåííûå äèàãðàììû ïðîãðàììèðîâàíèÿ ÏËÈÑ ñåìåéñòâà MAX3000 ÷åðåç ïîðò JTAG Òàáëèöà 1.2. Âðåìåííûå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà MAX3000 Îáîçíà÷åíèå tJCP Ïåðèîä ñèãíàëà ÒÑK [íñ]
Ïàðàìåòð
Çíà÷åíèå min max 100
tJCH
Äëèòåëüíîñòü åäèíè÷íîãî óðîâíÿ ñèãíàëà ÒÑK [íñ]
50
tJCL
Äëèòåëüíîñòü íóëåâîãî óðîâíÿ ñèãíàëà ÒÑK [íñ]
50
tJPSU
Âðåìÿ óñòàíîâëåíèÿ ïîðòà JTAG [íñ]
20
tJPH
Äëèòåëüíîñòü ñèãíàëà JTAG
45
tJPCO
Çàäåðæêà ðàñïðîñòðàíåíèÿ ñèãíàëà îòíîñèòåëüíî òàêòà JTAG [íñ]
25
tJPZX
Çàäåðæêà ïåðåõîäà ñèãíàëà JTAG èç òðåòüåãî ñîñòîÿíèÿ [íñ]
25
tJPXZ
Çàäåðæêà ïåðåõîäà ñèãíàëà JTAG â òðåòüå ñîñòîÿíèå [íñ]
25
tJSSU
Âðåìÿ óñòàíîâêè ðåãèñòðà çàõâàòà [íñ]
20
tJSH
Äëèòåëüíîñòü ñèãíàëà íà âõîäå ðåãèñòðà çàõâàòà [íñ]
45
tJSCO
Çàäåðæêà îáíîâëåíèÿ ñèãíàëà â ðåãèñòðå çàõâàòà îòíîñèòåëüíî òàêòà [íñ]
25
tJSZX
Çàäåðæêà ïåðåõîäà ñèãíàëà ðåãèñòðà çàõâàòà èç òðåòüåãî ñîñòîÿíèÿ [íñ]
25
tJSXZ
Çàäåðæêà ïåðåõîäà ñèãíàëà ðåãèñòðà çàõâàòà â òðåòüå ñîñòîÿíèå [íñ]
25
27
Ýëåìåíòíàÿ áàçà
tIOE tIN
tGLOB
tPIA
tLAD
tPEXP
tOD1 tOD2 tOD3 tXZ tZX1 tZX2 tZX3
tSU tH tPRE tCLR tRD
tCOMB
tLAC tIC tEN
tIO
AL1008+
tSEXP
Ðèñ. 1.8. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà MAX3000A
Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà MAX3000A ïðèâåäåíà íà Ðèñ. 1.8. ÏËÈÑ ñåìåéñòâà MAX3000A èìåþò ïðåäñêàçóåìóþ çàäåðæêó ðàñïðîñòðàíåíèÿ ñèãíàëà, ïîýòîìó ðåçóëüòàòû âðåìåííîãî ìîäåëèðîâàíèÿ â ÑÀÏÐ MAX+PLUS II ïîëíîñòüþ àäåêâàòíû ïîâåäåíèþ ðåàëüíîé ñõåìû, â îòëè÷èå îò ÏËÈÑ, âûïîëíåííûõ ïî SRAM òåõíîëîãèè.  Òàáë. 1.3 ïðèâåäåíî îïèñàíèå ïàðàìåòðîâ âðåìåííîé ìîäåëè äëÿ ÏËÈÑ ñåìåéñòâà MAX3000A ñ áûñòðîäåéñòâèåì 4 è 10. Òàáëèöà 1.3. Ïàðàìåòðû âðåìåííîé ìîäåëè äëÿ ÏËÈÑ ñåìåéñòâà MAX3000A (âñå çíà÷åíèÿ çàäåðæêè â íñ) Îáîçíà÷åíèå tIN tIO tSEXP tPEXP tLAD tLAC tIOE
Ïàðàìåòð Çàäåðæêà íà âõîäå è âõîäíîì áóôåðå Çàäåðæêà íà äâóíàïðàâëåííîì âûâîäå è âõîäíîì áóôåðå Çàäåðæêà ðàçäåëÿåìîãî ðàñøèðèòåëÿ Çàäåðæêà ïàðàëëåëüíîãî ðàñøèðèòåëÿ Çàäåðæêà â ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå «È» Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà òðèããåðà â ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå «È» Âíóòðåííÿÿ çàäåðæêà ñèãíàëà ðàçðåøåíèÿ
28
min
4
Çíà÷åíèå
10
max 0.3
min
max 0.6
0.3
0.6
1.9 0.5
4.9 1.1
1.9
5.0
1.8
4.6
0.0
0.0
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.3 (îêîí÷àíèå) Îáîçíà÷åíèå
Ïàðàìåòð
4
Çíà÷åíèå
10
min
max
min
max
tOD1
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 3.3 Â, slew rate = off
0.3
0.7
tOD2
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 2.5 Â, slew rate = off
0.8
1.2
tOD3
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, slew rate = on
5.3
5.7
tZX1
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèã-íàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 3.3 Â, slew rate = off
4.0
5.0
tZX2
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 2.5 Â, slew rate = off
4.5
5.5
tZX3
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, slew rate = on
9.0
10.0
tXZ
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà çàïðåùåíèÿ âûõîäà
4.0
5.0
tSU
Âðåìÿ óñòàíîâêè ðåãèñòðà
1.4
1.7
tH
Âðåìÿ óäåðæàíèÿ ñèãíàëà íà ðåãèñòðå
0.8
3.8
tRD
Ðåãèñòðîâàÿ çàäåðæêà
1.2
2.8
Kîìáèíàöèîííàÿ çàäåðæêà
1.3
2.0
tIC
Çàäåðæêà èçìåíåíèÿ ñèãíàëà îòíîñèòåëüíî òàêòîâîãî èìïóëüñà
1.9
4.6
tEN
Çàäåðæêà ðàçðåøåíèÿ ðåãèñòà
1.8
4.6
Çàäåðæêà ãëîáàëüíûõ óïðàâëÿþùèõ ñèãíàëîâ
1.0
1.8
tPRE
Âðåìÿ ïðåäóñòàíîâêè ðåãèñòðà Ìß
2.3
5.2
tCLR
Âðåìÿ ñáðîñà ðåãèñòðà Ìß
2.3
5.2
tPIA
Çàäåðæêà ÏÌÑ
0.7
1.7
tLPA
Çàäåðæêà çà ñ÷åò ðåæèìà ïîíèæåííîãî ïîòðåáëåíèÿ
12
10.0
tCOMB
tGLOB
29
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.4. Äèíàìè÷åñêèå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà MAX3000A (âðåìåííûå ïàðàìåòðû â íñ, ÷àñòîòû â ÌÃö) Îáîçíà÷åíèå
Ïàðàìåòð
tPD1
Çàäåðæêà âõîä êîìáèíàòîðíûé âûõîä
tPD2
Çíà÷åíèå
10
max
min
4.5
10.0
Çàäåðæêà âõîä ðåãèñòðîâûé âûõîä
4.5
10.0
tSU
Âðåìÿ óñòàíîâêè ãëîáàëüíîãî ñèíõðîñèãíàëà
3.0
6.6
tH
Âðåìÿ óäåðæàíèÿ ãëîáàëüíîãî ñèíõðîñèãíàëà
0.0
0.0
1.0
2.8
1.0
5.9
2.0
4.0
tCO1 tCH
Çàäåðæêà ãëîáàëüíîãî ñèíõðîñèãíàëà äî âûõîäà Äëèòåëüíîñòü âûñîêîãî óðîâíÿ ãëîáàëüíîãî ñèíõðîñèãíàëà
min
4
max
tCL
Äëèòåëüíîñòü íèçêîãî óðîâíÿ ãëîáàëüíîãî ñèíõðîñèãíàëà
2.0
4.0
tASU
Âðåìÿ óñòàíîâêè ñèíõðîñèãíàëà òðèããåðà Ìß
1.4
2.1
0.8
3.4
4.4
10.4
tAH tACO1
Âðåìÿ óäåðæàíèÿ ñèíõðîñèãíàëà òðèããåðà Ìß Çàäåðæêà ñèíõðîñèãíàëà òðèããåðà Ìß äî âûõîäà
tACH
Äëèòåëüíîñòü âûñîêîãî óðîâíÿ ñèíõðîñèãíàëà òðèããåðà Ìß
2.0
4.0
tACL
Äëèòåëüíîñòü íèçêîãî óðîâíÿ ñèíõðîñèãíàëà òðèããåðà Ìß
2.0
4.0
tCPPW
Ìèíèìàëüíàÿ äëèòåëüíîñòü ñèãíàëîâ ñáðîñà è óñòàíîâêè òðèããåðà Ìß
2.0
2.0
tCNT
Ìèíèìàëüíûé ïåðèîä ãëîáàëüíîãî ñèíõðîñèãíàëà
5.2
11.2
fCNT
Ìàêñèìàëüíàÿ ãëîáàëüíàÿ âíóòðåííÿÿ òàêòîâàÿ ÷àñòîòà
192.3
89.3
tACNT
Ìèíèìàëüíûé ïåðèîä ñèíõðîñèãíàëà òðèããåðà Ìß
5.2
11.2
fACNT
Ìàêñèìàëüíàÿ âíóòðåííÿÿ òàêòîâàÿ ÷àñòîòà òðèããåðà Ìß
192.3
89.3
fMAX
Ìàêñèìàëüíàÿ òàêòîâàÿ ÷àñòîòà
250
125.0
30
Ýëåìåíòíàÿ áàçà  Òàáë. 1.4 ïðèâåäåíû äèíàìè÷åñêèå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà MAX3000A. Ðèñ. 1.9 è 1.10 èëëþñòðèðóþò çàäåðæêè ñèãíàëîâ â ÏËÈÑ ñåìåéñòâà MAX3000A â çàâèñèìîñòè îò ðåæèìà ðàáîòû ÏËÈÑ. Íà Ðèñ. 1.10 è 1.11 äëèòåëüíîñòè ïåðåäíåãî è çàäíåãî ôðîíòîâ tR è tF ñîîòâåòñòâåííî ðàâíû 2 íñ. Òàêèì îáðàçîì, ìû ðàññìîòðåëè îñíîâíûå àðõèòåêòóðíûå îñîáåííîñòè è ïðèíöèïû ïîñòðîåíèÿ ÏËÈÑ ñåìåéñòâà MAX3000A. Ñëåäóåò åùå ðàç çàìåòèòü, ÷òî â êíèãå íàìåðåííî íå ïðèâîäèòñÿ èíôîðìàöèÿ î íàçíà÷åíèè êîíòàêòîâ äëÿ ðàçëè÷íûõ êîðïóñîâ, ïîòðåáëÿåìîé ìîùíîñòè è ò.ä. Ýòî ñâÿçàíî ñ òåì, ÷òî äàííàÿ èíôîðìàöèÿ ëåãêîäîñòóïíà êàê íà CD «Altera Digital Library», òàê è â Internet.
tIN Вход tIO Вход/выход tPIA Задержка ПМС tSEXP Задержка разделяемого расширителя
tLAC/D
Вход комбинационной схемы
tPEXP
Задержка параллельного расширителя
tCOMB
Выход комбинационной схемы
tOD AL1009+
Выход
Ðèñ. 1.9. Çàäåðæêè â ÏËÈÑ ñåìåéñòâà MAX3000A
31
Ýëåìåíòíàÿ áàçà
tR
Глобальный сигнал синхронизации
tCH
tIN
Глобальный синхросигнал на регистре
tCL
tF
tCL
tF
tGLOB
tSU
tH
Данные tR
tCH
Вход tIN tIO Такт на ПМС
tPIA
Такт в ЛБ tIC Тест регистра
tSU
tH
Данные ЛЕ tRD
tPIA
tCLR tPRE
tPIA
Данные на ПМС tOO
AL1010+
Выход
tOO
Ðèñ. 1.10. Çàäåðæêè â ÏËÈÑ ñåìåéñòâà MAX3000A
32
Ýëåìåíòíàÿ áàçà
1.2. Ñåìåéñòâî FLEX6000 Îòíîñèòåëüíî íîâîå ñåìåéñòâî ÏËÈÑ FLEX6000 ïîÿâèëîñü íà ðûíêå â êîíöå 1997 ãîäà. Ïî ñâîèì õàðàêòåðèñòèêàì îíî ÿâëÿåòñÿ ïðîìåæóòî÷íûì ìåæäó ñåìåéñòâàìè FLEX8000 è FLEX10K. ÏËÈÑ ñåìåéñòâà FLEX6000 âûïóñêàþòñÿ ïî òåõíîëîãèè 0.5 ìêì SRAM (FLEX6000A ïî 0.35 ìêì) ñ òðåìÿ ñëîÿìè ìåòàëëèçàöèè è îáëàäàþò óäà÷íûìè õàðàêòåðèñòèêàìè öåíàïðîèçâîäèòåëüíîñòü äëÿ ðåàëèçàöèè íå î÷åíü ñëîæíûõ àëãîðèòìîâ ÖÎÑ.  Òàáë. 1.5 ïðèâåäåíû îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà FLEX6000. Òàáëèöà 1.5. Îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà FLEX6000 Ïàðàìåòð
EPF6010
EPF6016
EPF6016A
EPF6024A
10 000
16 000
16 000
24 000
×èñëî ëîãè÷åñêèõ ýëåìåíòîâ
800
1 320
1 320
1 960
×èñëî ëîãè÷åñêèõ áëîêîâ
80
132
132
196
×èñëî ïðîãðàììèðóåìûõ ïîëüçîâàòåëåì âûâîäîâ
160
204
204
215
Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî ýêâèâàëåíòíûõ âåíòèëåé
Îòëè÷èòåëüíîé îñîáåííîñòüþ àðõèòåêòóðû ÏËÈÑ ñåìåéñòâà FLEX6000 ÿâëÿåòñÿ òåõíîëîãèÿ OptiFLEX, ïðåäñòàâëåííàÿ íà Ðèñ. 1.11.  îñíîâå àðõèòåêòóðû OptiFLEX ëåæàò ëîãè÷åñêèå áëîêè, êàæäûé èç êîòîðûõ îáúåäèíÿåò ïî 10 ëîãè÷åñêèõ ýëåìåíòîâ (Logic elements, LEs) ñ ïîìîùüþ ëîêàëüíîé ìàòðèöû ñîåäèíåíèé. Îñîáåííîñòüþ àðõèòåêòóðû OptiFLEX ÿâëÿåòñÿ òî, ÷òî êàæäûé ëîãè÷åñêèé ýëåìåíò ìîæåò êîììóòèðîâàòüñÿ êàê íà ëîêàëüíóþ ìàòðèöó ñîåäèíåíèé ñîáñòâåííîãî ëîãè÷åñêîãî áëîêà, òàê è ñìåæíûõ (Ðèñ. 1.11), òåì ñàìûì ðàñøèðÿþòñÿ âîçìîæíîñòè äëÿ òðàññèðîâêè. Íà Ðèñ. 1.12 ïðèâåäåíà ñòðóêòóðà ËÁ ÏËÈÑ ñåìåéñòâà FLEX6000. Kàê âèäíî èç Ðèñ. 1.12, ËÁ èìååò ÷åðåäóþùóþñÿ ñòðóêòóðó (interleaved structure), îáúåäèíÿÿ íà ëîêàëüíîé ìàòðèöå ñîåäèíåíèé (ËÌÑ, lockal interconnect) ñèãíàëû ñ äâóõ ñìåæíûõ ËÁ. Kðîìå òîãî, ñèãíàëû ñ ËÝ è ËÌÑ
33
Ýëåìåíòíàÿ áàçà
ЭВВ
Строки ГМС
Строки ГМС ЭВВ Столбцы ГМС
AL1011+
ЛМС
ЛЕ
Ðèñ. 1.11. Òåõíîëîãèÿ OptiFLEX
Строки ГМС
ЛМС
10 ЛЭ
Столбец ГМС
Ðèñ. 1.12. Ñòðóêòóðà ËÁ FLEX6000
34
AL1012+
К смеж3 ному ЛБ или ЭВВ
К смеж3 ному ЭВВ или ЛБ
Ýëåìåíòíàÿ áàçà ìîãóò êîììóòèðîâàòüñÿ íà ñòðîêè è ñòîëáöû ãëîáàëüíîé ìàòðèöû ñîåäèíåíèé (row and column interconnect), êîòîðûå èìåþò íåïðåðûâíóþ ñòðóêòóðó, îáåñïå÷èâàþùóþ ìèíèìàëüíûå çàäåðæêè. Kàæäûé ËÁ è ËÝ óïðàâëÿåòñÿ âûäåëåííûìè ãëîáàëüíûìè ñèãíàëàìè (dedicated inputs), ÿâëÿþùèìèñÿ ñèãíàëàìè ñáðîñà, óñòàíîâêè è ñèíõðîíèçàöèè òðèããåðîâ ËÝ (Ðèñ. 1.13). 4
Выделенные входы
LABCTRL1/ CLK1/ LABCTRL2 SYNCLR SYNLOAD
CLK2
AL1013+
ЛЭ1
Ðèñ. 1.13. Ñïåöèàëèçèðîâàííûå ñèãíàëû
Íà Ðèñ. 1.14 ïðèâåäåíà ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà FLEX6000.  îñíîâå ËÝ ëåæèò ÷åòûðåõâõîäîâàÿ òàáëèöà ïåðåêîäèðîâîê (ÒÏ). Kðîìå òîãî, â ñîñòàâ ËÝ âõîäÿò öåïè óñêîðåííîãî öåïî÷å÷íîãî ïåðåíîñà (carry-in, carry-out) è êàñêàäèðîâàíèÿ (cascade-in, cascade-out). Òðèããåð ËÝ ìîæåò áûòü ñêîíôèãóðèðîâàí ñ ïîìîùüþ ëîãèêè ñáðîñà-óñòàíîâêè (clear/preset logic), òàêòèðóåòñÿ îäíèì èç ñèãíàëîâ, âûáèðàåìûõ ëîãèêîé òàêòèðîâàíèÿ (clock select). Ïðè íåîáõîäèìîñòè ñèãíàë ñ âûõîäà ÒÏ ìîæåò áûòü ïîäàí íà âûõîä ËÝ â îáõîä òðèããåðà (register bypass). Äëÿ îáåñïå÷åíèÿ ìèíèìàëüíîé çàäåðæêè ïðè ðåàëèçàöèè ñëîæíûõ àðèôìåòè÷åñêèõ ôóíêöèé â òàêèõ óñòðîéñòâàõ, êàê ñ÷åò÷èêè, ñóììàòîðû, âû÷èòàòåëè è ò.ï., èñïîëüçóåòñÿ îðãàíèçàöèÿ óñêîðåííûõ öåïî÷å÷íûõ ïåðåíîñîâ (carry chain) ìåæäó ËÝ. Ëîãèêà óñêîðåííûõ ïåðåíîñîâ àâòîìàòè÷åñêè ôîðìèðóåòñÿ êîìïèëÿòîðîì ÑÀÏÐ MAX+PLUS II èëè âðó÷íóþ ïðè îïèñàíèè ïðîåêòà.
35
Ýëåìåíòíàÿ áàçà
Перенос Data1 Data2 Data3 Data4
Таблица Цепь переко3 переноса дировки
Каскадирование
Цепь каскади3 рования
LE-OUT
PRN D
Q CLRN
Labctrl1 Labctrl2 Сброс
Схема сброса/ установки
Labctrl3
Выход переноса Выход каскадирования
AL1014+
Labctrl4
Ðèñ. 1.14. Ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà FLEX6000
Ïðè îðãàíèçàöèè öåïî÷å÷íûõ ïåðåíîñîâ ïåðâûé ËÝ êàæäîãî ËÁ íå âêëþ÷àåòñÿ â öåïî÷êó öåïî÷å÷íûõ ïåðåíîñîâ, ïîñêîëüêó îí ôîðìèðóåò óïðàâëÿþùèå ñèãíàëû ËÁ. Âõîä ïåðâîãî ËÝ â êàæäîì ËÁ ìîæåò áûòü èñïîëüçîâàí äëÿ ôîðìèðîâàíèÿ ñèãíàëîâ ñèíõðîííîé çàãðóçêè èëè ñáðîñà ñ÷åò÷èêîâ, èñïîëüçóþùèõ öåïî÷å÷íûé ïåðåíîñ. Öåïî÷êà ïåðåíîñîâ äëèííåå ÷åì 9 ËÝ àâòîìàòè÷åñêè ôîðìèðóåòñÿ ïóòåì îáúåäèíåíèÿ íåñêîëüêèõ ËÁ âìåñòå, ïðè÷åì ïåðåíîñ ôîðìèðóåòñÿ íå â ñîñåäíèé ËÁ, à ÷åðåç îäèí, ò.å. èç ÷åòíîãî â ÷åòíûé, èç íå÷åòíîãî ËÁ â íå÷åòíûé. Íàïðèìåð, ïîñëåäíèé ËÝ â ïåðâîì ËÁ â ðÿäó ôîðìèðóåò ïåðåíîñ âî âòîðîé ËÝ â òðåòüåì ËÁ â òîì æå ðÿäó. Îòñþäà ÿñíî, ÷òî äëèíà öåïî÷êè ïåðåíîñîâ íå ìîæåò áûòü áîëüøå, ÷åì ïîëîâèíà ðÿäà. Íà Ðèñ. 1.15 ïðèâåäåí ïðèìåð ðåàëèçàöèè ïîëíîãî ñóììàòîðà ñ èñïîëüçîâàíèåì ëîãèêè óñêîðåííîãî ïåðåíîñà.  ýòîì ñëó÷àå ÒÏ ñêîíôèãóðèðîâàí òàêèì îáðàçîì, ÷òî äâà åå âõîäà ôîðìèðóþò ñèãíàë ñóììû, à äâà äðóãèõ âõîäà ïåðåíîñ. Ïðè ðåàëèçàöèè ìíîãîâõîäîâûõ ôóíêöèé èñïîëüçóåòñÿ ðåæèì êàñêàäèðîâàíèÿ ËÝ (Ðèñ. 1.16). ÒÏ ñìåæíûõ ËÝ ðåàëèçóþò ÷àñòè÷íûå ôóíêöèè, à çàòåì ñ ïîìîùüþ öåïåé êàñêàäèðîâàíèÿ ôîðìèðóåòñÿ âûõîä ôóíêöèè ìíîãèõ ïåðåìåííûõ. Ëîãèêà êàñêàäèðîâàíèÿ ñòðîèòñÿ ëèáî ïî «È» (AND), ëèáî ïî «ÈËÈ» (OR).
36
Ýëåìåíòíàÿ áàçà
Carry-in
a1 b1
Таблица переко3 дировки Цепь переноса
a2 b2
Таблица переко3 дировки Цепь переноса
an bn
Таблица переко3 дировки
Регистр
s1
ЛЭ2
Регистр
s2
ЛЭ3
Регистр
sn
Цепь переноса ЛЭ n+1
Цепь переноса
Ðèñ. 1.15. Öåïî÷å÷íûé ïåðåíîñ â ñóììàòîðå
37
Регистр
ЛЭ n+2
Carry-out
AL1015+
Таблица переко3 дировки
Ýëåìåíòíàÿ áàçà Ïðè êàñêàäèðîâàíèè ïî «È» âîçìîæíî èñïîëüçîâàíèå ðåãèñòðà ïîñëåäíåãî ËÝ, ïðè êàñêàäèðîâàíèè ïî «ÈËÈ» èñïîëüçîâàíèå ðåãèñòðà íåâîçìîæíî, ïîñêîëüêó èíâåðòîð èñïîëüçóåòñÿ äëÿ ðåàëèçàöèè ýëåìåíòà «ÈËÈ». Àíàëîãè÷íî öåïî÷å÷íûì ïåðåíîñàì ïðè êàñêàäèðîâàíèè îáúåäèíÿþòñÿ ëèáî òîëüêî ÷åòíûå, ëèáî íå÷åòíûå ËÝ. Ðèñ. 1.16 èëëþñòðèðóåò ðåàëèçàöèþ êàñêàäèðîâàíèÿ äëÿ ôóíêöèè áîëüøîãî ÷èñëà ïåðåìåííûõ. Òàê, ïðè ðåàëèçàöèè 16-ðàçðÿäíîãî äåøèôðàòîðà àäðåñà çàäåðæêà ñîñòàâëÿåò ïîðÿäêà 3.5 íñ.
Каскадирование по «И» d(3...0)
LUT
LUT
ЛЭ2
d(7...4)
ЛЭ2
d(7...4)
LUT
LUT
ЛЭ3
d[(4n-1) ...4(n-1)]
ЛЭ3
d[(4n-1) ...4(n-1)]
LUT ЛЭ n+1
LUT ЛЭ n+1
AL1016+
d(3...0)
Каскадирование по «ИЛИ»
Ðèñ. 1.16. Kàñêàäèðîâàíèå ËÝ
Kàæäûé ËÝ ÏËÈÑ ìîæåò áûòü ñêîíôèãóðèðîâàí òðåìÿ ñïîñîáàìè (Ðèñ. 1.17): íîðìàëüíûé ðåæèì (normal mode); àðèôìåòè÷åñêèé ðåæèì (arithmetic mode); ðåæèì ñ÷åò÷èêà (counter mode). Íîðìàëüíûé ðåæèì èñïîëüçóåòñÿ äëÿ ðåàëèçàöèè îñíîâíûõ ëîãè÷åñêèõ ôóíêöèé, êîìáèíàöèîííûõ ñõåì, äåøèôðàòîðîâ ñ áîëüøèì ÷èñëîì âõîäîâ, êîãäà âîçìîæíîñòü êàñêàäíîãî íàðàùèâàíèÿ ïîçâîëÿåò ïîëó÷èòü âûèãðûø âî âðåìåíè.  íîðìàëüíîì ðåæèìå ÒÏ èìååò ÷åòûðå âõîäà, èñòî÷íèêàìè êîòîðûõ ÿâëÿþòñÿ ñèãíàëû ñ ËÌÑ è öåïî÷å÷íûå ïåðåíîñû.
38
Ýëåìåíòíàÿ áàçà
Carry-in
Cascade-in
Data1 Data2
LE-OUT PRN D
LUT
Data3
Q CLRN
Data4
Cascade-out Carry-in
Data1 Data2
Cascade-in
LE-OUT PRN D
LUT
Q CLRN
Cascade-out Carry-out
LUT
Carry-in
LAB-Wds
LAB-Wds
Cascade-in Data1 (2) Data2 (2)
PRN
LUT
D
Data3 (data)
Q
LE-OUT
CLRN LUT Carry-out
AL1017+
Cascade-out
Ðèñ. 1.17. Ðåæèìû êîíôèãóðàöèè ËÝ
Àðèôìåòè÷åñêèé ðåæèì èñïîëüçóåòñÿ äëÿ ðåàëèçàöèè ñóììàòîðîâ, âû÷èòàòåëåé, íàêîïèòåëåé è êîìïàðàòîðîâ.  àðèôìåòè÷åñêîì ðåæèìå ÒÏ êîíôèãóðèðóåòñÿ êàê äâå òðåõâõîäîâûå ÒÏ: îäíà äëÿ ôóíêöèè òðåõ ïåðåìåííûõ, äðóãàÿ äëÿ ñèãíàëà óñêîðåííîãî ïåðåíîñà.  ðåæèìå ñ÷åò÷èêà âîçìîæíà ðåàëèçàöèÿ ñ ïîìîùüþ ÒÏ ôóíêöèé ðàçðåøåíèÿ ñ÷åòà, ðåâåðñà, ñèíõðîííûõ ñáðîñà è çàãðóçêè äàííûõ â ñ÷åò÷èê. Kðîìå òîãî, ôîðìèðóåòñÿ óñêîðåííûé ïåðåíîñ äëÿ ðåàëèçàöèè ñèíõðîííûõ ñ÷åò÷èêîâ ñ ïîìîùüþ äâóõ òðåõâõîäîâûõ ÒÏ, ïîäîáíî àðèôìåòè÷åñêîìó ðåæèìó. Kàæäûé ËÝ èìååò âîçìîæíîñòü ãëîáàëüíîé àñèíõðîííîé óñòàíîâêè è ñáðîñà òðèããåðà, à òàêæå ýìóëÿöèè âíóòðåííåé øèíû ñ òðåìÿ ñîñòîÿíèÿìè.
39
40
К смешенному ЛБ
Ðèñ. 1.18. Kîììóòàöèÿ ËÝ íà ìàòðèöû ñîåäèíåíèé
AL1018+
10
10
5
ЛМС
5
5
22
5
10
5
10
10
2
5
2
5
ЛЭ10
ЛЭ5 ЛЭ6
ЛЭ1
5
Строки ГМС
5
20
10
10
10 5
5
22
5
10
5
10
10
2
5
2
5
ЛЭ10
ЛЭ5 ЛЭ6
ЛЭ1
5
5
20
10
10
Столбец ГМС
10
10
10
5
Ýëåìåíòíàÿ áàçà К смешенному ЛБ
Ýëåìåíòíàÿ áàçà Íà Ðèñ. 1.18 ïðèâåäåíà ñõåìà êîììóòàöèè ËÁ è ËÝ íà ëîêàëüíóþ è ãëîáàëüíóþ ìàòðèöó ñîåäèíåíèé (ÃÌÑ). Ñëåäóåò îòìåòèòü, ÷òî ÃÌÑ èìååò íåïðåðûâíóþ ñòðóêòóðó êàê ïî ñòðîêàì, òàê è ïî ñòîëáöàì (ò.í. FastTrack Interconnect). Kàê ìîæíî âèäåòü èç Ðèñ. 1.18, ËÝ èìåþò âîçìîæíîñòü êîììóòàöèè âõîäîâ è âûõîäîâ êàê íà ËÌÑ, òàê è íà ÃÌÑ. Kðîìå òîãî, íà ËÝ ìîãóò áûòü ñôîðìèðîâàíû ãëîáàëüíûå óïðàâëÿþùèå ñèãíàëû, òàêèå, êàê âíóòðåííÿÿ òàêòîâàÿ ÷àñòîòà, ñèãíàëû àñèíõðîííîãî ñáðîñà è óñòàíîâêè. Kàæäûé ËÁ êîììóòèðóåòñÿ íà äâå ËÌÑ, òåì ñàìûì óëó÷øàÿ âîçìîæíîñòè òðàññèðîâêè ÏËÈÑ. Íà Ðèñ. 1.19 ïðèâåäåíà ñòðóêòóðíàÿ ñõåìà ýëåìåíòà ââîäà/âûâîäà. Kàê ìîæíî çàìåòèòü, Ý ïîçâîëÿåò ñêîììóòèðîâàòü äàííûå êàê íà ãëîáàëüíûå öåïè, òàê è íà ëîêàëüíóþ ìàòðèöó ñîåäèíåíèé. Óïðàâëåíèå Ý îñóùåñòâëÿåòñÿ ñ ïîìîùüþ ãëîáàëüíîãî óïðàâëÿþùåãî ñèãíàëà ðàçðåøåíèÿ âûõîäà (chip-wide output enable). Kðîìå òîãî, ìîæíî çàäàòü ðåæèì ïîíèæåííîé ñêîðîñòè ïåðåêëþ÷åíèÿ ÝÂÂ, ÷òî ïîçâîëÿåò ñíèçèòü «çâîí», âîçíèêàþùèé ïðè âûñîêîé ñêîðîñòè ïåðåêëþ÷åíèÿ, ïðàâäà, öåíîé 5 íñ çàäåðæêè.
К ГМС
Задержка
Разрешение выхода К ЛМС
Контроль скорости ЭВВ
AL1019+
К ЛМС
Ðèñ. 1.19. Ýëåìåíò ââîäà/âûâîäà
ÏËÈÑ ñåìåéñòâà FLEX6000 ïîääåðæèâàþò âîçìîæíîñòü êîíôèãóðàöèè ÷åðåç ïîðò JTAG, âðåìåííûå äèàãðàììû ïðèâåäåíû íà Ðèñ. 1.20. Âðåìåííûå ïàðàìåòðû êîíôèãóðàöèè ïî ïîðòó JTAG ïðèâåäåíû â Òàáë. 1.6. Íà Ðèñ. 1.21 ïðèâåäåíà âðåìåííàÿ ìîäåëü ñåìåéñòâà FLEX6000, à â Òàáë. 1.7 çíà÷åíèÿ åå ïàðàìåòðîâ.
41
Ýëåìåíòíàÿ áàçà
TMS TDI tJCP tJCH
tJPSU
tJCL
tJPH
TCK tJPZX
tJPCO
tJPXZ
TDO tJSSU
tJSH
Захват tJSZX
tJSCO
tJSXZ AL1020+
Управление
Ðèñ. 1.20. Âðåìåííûå äèàãðàììû êîíôèãóðàöèè ÷åðåç ïîðò JTAG Òàáëèöà 1.6. Âðåìåííûå ïàðàìåòðû êîíôèãóðàöèè ïî ïîðòó JTAG Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå min max
tJCP
Ïåðèîä ñèãíàëà ÒÑK [íñ]
100
tJCH
Äëèòåëüíîñòü åäèíè÷íîãî óðîâíÿ ñèãíàëà ÒÑK [íñ]
50
tJCL
Äëèòåëüíîñòü íóëåâîãî óðîâíÿ ñèãíàëà ÒÑK [íñ]
50
tJPSU
Âðåìÿ óñòàíîâëåíèÿ ïîðòà JTAG [íñ]
20
tJPH
Äëèòåëüíîñòü ñèãíàëà JTAG
45
tJPCO
Çàäåðæêà ðàñïðîñòðàíåíèÿ ñèãíàëà îòíîñèòåëüíî òàêòà JTAG [íñ]
25
tJPZX
Çàäåðæêà ïåðåõîäà ñèãíàëà JTAG èç òðåòüåãî ñîñòîÿíèÿ [íñ]
25
tJPXZ
Çàäåðæêà ïåðåõîäà ñèãíàëà JTAG â òðåòüå ñîñòîÿíèå [íñ]
25
tJSSU
Âðåìÿ óñòàíîâêè ðåãèñòðà çàõâàòà [íñ]
20
tJSH
Äëèòåëüíîñòü ñèãíàëà íà âõîäå ðåãèñòðà çàõâàòà [íñ]
45
tJSCO
Çàäåðæêà îáíîâëåíèÿ ñèãíàëà â ðåãèñòðå çàõâàòà îòíîñèòåëüíî òàêòà [íñ]
35
tJSZX
Çàäåðæêà ïåðåõîäà ñèãíàëà ðåãèñòðà çàõâàòà èç òðåòüåãî ñîñòîÿíèÿ [íñ]
35
42
Ýëåìåíòíàÿ áàçà
tROW Перенос Каскадирование
tLOCAL
tREG_TO_REG tCASC_TO_REG tCARRY_TO_REG tDATA_TO_REG
tREG_TO_OUT tCASC_TO_OUT tCARRY_TO_OUT tDATA_TO_OUT
tSU tH tCO tCLR
tCOL tC tLD_CLR tLEGLOBAL tREG_TO_CARRY
tCARRY_TO_CARRY tDATA_TO_CARRY
tREG_TO_CASC tCASC_TO_CASC tCARRY_TO_CASC tDATA_TO_CASC ЛЭ
tLABCARRY Перенос
tIOE
tIN tIN_DELAY
tLABCASC Каскадирование
tOO1 tOO2 tOO3 tXZ tZX1 tZX2 tZX3
I/O PIN
ЭВВ
Ðèñ. 1.21. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà FLEX6000
43
AL1021+
tDIN_D tDIN_C
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.7. Ïàðàìåòðû âðåìåííîé ìîäåëè Îáîçíà÷åíèå tREG_TO_REG tCASC_TO_REG tCARRY_TO_REG tDATA_TO_REG tCASC_TO_OUT tCARRY_TO_OUT tDATA_TO_OUT tREG_TO_OUT tSU tH tCO tCLR tC tLD_CLR tCARRY_TO_CARRY tREG_TO_CARRY tDATA_TO_CARRY tCARRY_TO_CASC tREG_TO_CASC tCASC_TO_CASC tDATA_TO_CASC tCH tCL tOD1 tOD2 tOD3
Ïàðàìåòð Çàäåðæêà íà ÒÏ äëÿ îáðàòíîé ñâÿçè òðèããåðà ËÝ â öåïî÷êå ïåðåíîñà Çàäåðæêà â öåïè êàñêàäèðîâàíèÿ äî âõîäà ðåãèñòðà Çàäåðæêà â öåïè ïåðåíîñà äî âõîäà ðåãèñòðà
Çíà÷åíèå äëÿ EPF6010A-1 [íc] min max
1.2
0.9 0.9
Çàäåðæêà âõîäíûõ äàííûõ ËÝ äî ðåãèñòðà Çàäåðæêà îò âõîäà êàñêàäèðîâàíèÿ äî âûõîäà ËÝ Çàäåðæêà îò âõîäà ïåðåíîñà äî âûõîäà ËÝ Çàäåðæêà âõîäíûõ äàííûõ ËÝ äî âûõîäà Çàäåðæêà äàííûõ ñ âûõîäà ðåãèñòðà äî âûõîäà ËÝ
1.1 1.3 1.6 1.7 0.4
Âðåìÿ óñòàíîâêè ðåãèñòðà Âðåìÿ óäåðæàíèÿ ñèãíàëà íà âõîäå ðåãèñòðà ïîñëå ïîäà÷è ñèíõðîèìïóëüñà Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà îòíîñèòåëüíî òàêòà Çàäåðæêà ñáðîñà ðåãèñòðà Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà íà ðåãèñòðå Çàäåðæêà ñèãíàëà ñèíõðîííîãî ñáðîñà èëè çàãðóçêè ðåãèñòðà â ðåæèìå ñ÷åò÷èêà Çàäåðæêà ñèãíàëà ïåðåíîñà îò âõîäà ïåðåíîñà äî âûõîäà ïåðåíîñà Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà äî âûõîäà ïåðåíîñà Çàäåðæêà âõîäíûõ äàííûõ ËÝ äî âûõîäà ïåðåíîñà Çàäåðæêà ñèãíàëà ïåðåíîñà îò âõîäà äî âûõîäà êàñêàäèðîâàíèÿ Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà äî âûõîäà êàñêàäèðîâàíèÿ Çàäåðæêà ñèãíàëà êàñêàäèðîâàíèÿ îò âõîäà êàñêàäèðîâàíèÿ äî âûõîäà êàñêàäèðîâàíèÿ Çàäåðæêà âõîäíûõ äàííûõ ËÝ äî âûõîäà êàñêàäèðîâàíèÿ Äëèòåëüíîñòü âûñîêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà Äëèòåëüíîñòü íèçêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 3.3 Â, slew rate = off Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 2.5 Â, slew rate = off Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, slew rate = on
0.9
1.4
0.3 0.4 1.8
1.8
0.1
1.6 2.1
1.0
1.4
0.5
2.5 2.5
1.1
1.9
4.1
5.8
44
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.7 (îêîí÷àíèå) Îáîçíà÷åíèå
tXZ tZX1
Ïàðàìåòð Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà çàïðåùåíèÿ âûõîäà Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 3.3 Â, slew rate = off
Çíà÷åíèå äëÿ EPF6010A-1 [íc] min max
1.4
1.4
tZX2
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 2.5 Â, slew rate = off
3.6
tZX3
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, slew rate = on
5.3
tIOE
Çàäåðæêà ñèãíàëà ðàçðåøåíèÿ âûõîäà
0.5
tIN
Çàäåðæêà ñèãíàëà âî âõîäíîì áóôåðå
3.6
Çàäåðæêà ñèãíàëà âî âõîäíîì áóôåðå ïðè ââåäåíèè äîïîëíèòåëüíîé çàäåðæêè
4.8
tIN_DELAY tLOCAL
Çàäåðæêà ËÌÑ
0.7
tROW
Çàäåðæêà â ñòðîêå ÃÌÑ
2.9
tCÎL
Çàäåðæêà â ñòîëáöå ÃÌÑ
1.2
Çàäåðæêà äàííûõ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÝ
5.4
4.3
2.6 0.7
tDIN_D tDIN_C tLEGLOBAL
Çàäåðæêà óïðàâëÿþùèõ ñèãíàëîâ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÝ Çàäåðæêà ñôîðìèðîâàííîãî â ÏËÈÑ óïðàâëÿþùåãî ñèãíàëà ñ âûõîäà ËÝ äî âõîäîâ äðóãèõ ËÝ
tLABCARRY
Çàäåðæêà ñèãíàëà ïåðåíîñà â äðóãîé ËÁ
tLABCASC
Çàäåðæêà ñèãíàëà êàñêàäèðîâàíèÿ â äðóãîé ËÁ
1.3
Òåñòîâàÿ çàäåðæêà ðåãèñòð-ðåãèñòð
37.6
2.1
0.2
2.0
t1 tDPR tINSU tINH tOUTCO
Òåñòîâàÿ çàäåðæêà ðåãèñòð-ðåãèñòð ÷åðåç 4 ËÝ, 3 ðÿäà è 4 ËÌÑ Âðåìÿ óñòàíîâêè ãëîáàëüíîãî ñèíõðîñèãíàëà íà ðåãèñòðå ËÝ Âðåìÿ óäåðæàíèÿ äàííûõ äëÿ ãëîáàëüíîãî ñèíõðîñèãíàëà íà ðåãèñòðå ËÝ Çàäåðæêà ïîÿâëåíèÿ äàííûõ íà âûõîäå äëÿ ãëîáàëüíîãî
Âåëè÷èíû âðåìåí çàäåðæåê ðàñïðîñòðàíåíèÿ ñèãíàëà ïî ÃÌÑ ïðèâîäÿòñÿ èç ðàñ÷åòà «õóäøåãî ñëó÷àÿ».
45
Ýëåìåíòíàÿ áàçà
1.3. Ñåìåéñòâî MAX7000 ÏËÈÑ ñåìåéñòâà MAX7000 ÿâëÿþòñÿ ïåðâûìè CPLD ôèðìû «Altera», âûïîëíåííûìè ïî òåõíîëîãèè ÏÇÓ ñ ýëåêòðè÷åñêèì ñòèðàíèåì (EÅPROM).  íàñòîÿùåå âðåìÿ âûïóñêàþòñÿ ÏËÈÑ ñåìåéñòâ MAX7000, MAX7000A, MAX7000B, MAX7000E, MAX7000S. Ñåìåéñòâa MAX7000A è MAX7000B ðàññ÷èòàíû íà ðàáîòó â ñèñòåìàõ ñ íàïðÿæåíèåì ïèòàíèÿ 3.3 è 2.5  ñîîòâåòñòâåííî, ÏËÈÑ ñåìåéñòâà MAX7000S ÿâëÿåòñÿ äàëüíåéøèì ðàçâèòèåì 5-âîëüòîâîãî ñåìåéñòâà MAX7000, äîïóñêàÿ âîçìîæíîñòü ïðîãðàììèðîâàíèÿ â ñèñòåìå.  íàñòîÿùåå âðåìÿ ýòî ñåìåéñòâî, ïîæàëóé, ÿâëÿåòñÿ ñàìûì ïîïóëÿðíûì CPLD ó ðîññèéñêèõ ðàçðàáîò÷èêîâ. Ýòî ñâÿçàíî ñ òåì, ÷òî äëÿ ðàáîòû ñ ÏËÈÑ ýòîãî ñåìåéñòâà íå òðåáóåòñÿ íèêàêèõ ñåðüåçíûõ çàòðàò, ïîñêîëüêó ïàêåò MAX+PLUS II BASELINE ïîëíîñòüþ ïîääåðæèâàåò âñåõ ïðåäñòàâèòåëåé ýòîãî ñåìåéñòâà ÏËÈÑ, à äëÿ ïðîãðàììèðîâàíèÿ è çàãðóçêè êîíôèãóðàöèè óñòðîéñòâ îïóáëèêîâàíà ñõåìà çàãðóçî÷íîãî êàáåëÿ ByteBlaster è ByteBlasteMV.  Òàáë. 1.8 ïðèâåäåíû îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà MAX7000S. Òàáëèöà 1.8. Îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà MAX7000S Ïàðàìåòð Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî ýêâèâàëåíòíûõ âåíòèëåé
EPM7032S EPM7064S EPM7128S EPM7160S EPM7192S EPM7256S 600
1 250
2 500
3 200
3 750
5 000
32
64
128
160
192
256
2
4
8
10
12
16
×èñëî ïðîãðàììèðóåìûõ ïîëüçîâàòåëåì âûâîäîâ
36
68
100
104
124
164
Çàäåðæêà ðàñïðîñòðàíåíèÿ ñèãíàëà âõîä/âûõîä, tPD [íñ]
5
5
6
6
7.5
7.5
Âðåìÿ óñòàíîâêè ãëîáàëüíîãî òàêòîâîãî ñèãíàëà, tSU [íñ]
2.9
2.9
3.4
3.4
4.1
3.9
Çàäåðæêà ãëîáàëüíîãî òàêòîâîãî ñèãíàëà äî âûõîäà, tCO1 [íñ]
2.5
2.5
2.5
2.5
3.0
3.0
Ìàêñèìàëüíàÿ ãëîáàëüíàÿ òàêòîâàÿ ÷àñòîòà, fCNT [ÌÃö]
175.4
175.4
147.1
149.3
125.0
128.2
×èñëî ìàêðîÿ÷ååê ×èñëî ëîãè÷åñêèõ áëîêîâ
46
Ýëåìåíòíàÿ áàçà
Âñå ÏËÈÑ ñåìåéñòâà MAX7000S ïîääåðæèâàþò òåõíîëîãèþ ïðîãðàììèðîâàíèÿ â ñèñòåìå ISP è ïåðèôåðèéíîãî ñêàíèðîâàíèÿ â ñîîòâåòñòâèè ñî ñòàíäàðòîì IEEE Std. 1149.1 1990 (JTAG). Ýëåìåíòû ââîäà/âûâîäà ïîçâîëÿþò ðàáîòàòü â ñèñòåìàõ ñ óðîâíÿìè ñèãíàëîâ 5 èëè 3.3 Â. Ìàòðèöà ñîåäèíåíèé èìååò íåïðåðûâíóþ ñòðóêòóðó, ÷òî ïîçâîëÿåò ðåàëèçîâàòü âðåìÿ çàäåðæêè ðàñïðîñòðàíåíèÿ ñèãíàëà äî 5 íñ. ÏËÈÑ ñåìåéñòâà MAX7000S èìåþò âîçìîæíîñòü àïïàðàòíîé ýìóëÿöèè âûõîäîâ ñ îòêðûòûì êîëëåêòîðîì è óäîâëåòâîðÿþò òðåáîâàíèÿì ñòàíäàðòà PCI. Èìååòñÿ âîçìîæíîñòü èíäèâèäóàëüíîãî ïðîãðàììèðîâàíèÿ öåïåé ñáðîñà, óñòàíîâêè è òàêòèðîâàíèÿ òðèããåðîâ, âõîäÿùèõ â ìàêðîÿ÷åéêó. Ïðåäóñìîòðåí ðåæèì ïîíèæåííîãî ýíåðãîïîòðåáëåíèÿ. Ïðîãðàììèðóåìûé ëîãè÷åñêèé ðàñøèðèòåëü ïîçâîëÿåò ðåàëèçîâàòü íà îäíîé ìàêðîÿ÷åéêå ôóíêöèè äî 32 ïåðåìåííûõ. Èìååòñÿ âîçìîæíîñòü çàäàíèÿ áèòà ñåêðåòíîñòè äëÿ çàùèòû îò íåñàíêöèîíèðîâàííîãî òèðàæèðîâàíèÿ ðàçðàáîòêè.  îòëè÷èå îò àðõèòåêòóðû ÏËÈÑ ñåìåéñòâà MAX7000 (Ðèñ. 1.22), ÏËÈÑ ñåìåéñòâà MAX7000S (Ðèñ. 1.23) èìåþò âîçìîæíîñòü èñïîëüçîâàíèÿ äâóõ ãëîáàëüíûõ òàêòîâûõ ñèãíàëîâ. Íà Ðèñ. 1.24 ïðèâåäåíà ñòðóêòóðà ìàêðîÿ÷åéêè ëîãè÷åñêîãî ýëåìåíòà ÏËÈÑ MAX7000S. Kàê ìîæíî çàìåòèòü, Ìß ÏËÈÑ ñåìåéñòâà MAX7000 íå îòëè÷àåòñÿ îò Ìß ñåìåéñòâà MAX3000. Àíàëîãè÷íî ÏËÈÑ ñåìåéñòâà MAX3000, ÏËÈÑ ñåìåéñòâà MAX7000 èìåþò âîçìîæíîñòü èñïîëüçîâàíèÿ ïàðàëëåëüíîãî è ðàçäåëÿåìîãî ðàñøèðèòåëåé, êîòîðûå ïîäðîáíî îïèñàíû â ïàðàãðàôå 1.1. Íà Ðèñ. 1.25 ïðèâåäåíà âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà MAX7000, à â Òàáë. 1.9 è 1.10 åå ïàðàìåòðû. Òàáëèöà 1.9. Ïàðàìåòðû âðåìåííîé ìîäåëè ÏËÈÑ ñåìåéñòâà MAX7000 (âñå çíà÷åíèÿ çàäåðæåê è âðåìåí â íñ) Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EPM70128S-10 [íñ] min
max
tIN
Çàäåðæêà íà âõîäå è âõîäíîì áóôåðå
2.0
tIO
Çàäåðæêà íà äâóíàïðàâëåííîì âûâîäå è âõîäíîì áóôåðå
2.0
tSEXP
Çàäåðæêà ðàçäåëÿåìîãî ðàñøèðèòåëÿ
8.0
tPEXP
Çàäåðæêà ïàðàëëåëüíîãî ðàñøèðèòåëÿ
1.0
tLAD
Çàäåðæêà â ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå «È»
6.0
47
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.9 (îêîí÷àíèå) Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EPM70128S -10 min
max
tLAC
Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà òðèããåðà â ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå «È»
6.0
tIOE
Âíóòðåííÿÿ çàäåðæêà ñèãíàëà ðàçðåøåíèÿ
3.0
tOD1
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 3.3 Â, slew rate = off
4.0
tOD2
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 2.5 Â, slew rate = off
5.0
tOD3
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, slew rate = on
8.0
tZX1
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 3.3 Â, slew rate = off
6.0
tZX2
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 2.5 Â, slew rate = off
7.0
tZX3
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, slew rate = on
8.0
tXZ
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà çàïðåùåíèÿ âûõîäà
6.0
tSU
Âðåìÿ óñòàíîâêè ðåãèñòðà
4.0
tH
Âðåìÿ óäåðæàíèÿ ñèãíàëà íà ðåãèñòðå
4.0
tRD
Ðåãèñòðîâàÿ çàäåðæêà
1.0
Kîìáèíàöèîííàÿ çàäåðæêà
1.0
Çàäåðæêà èçìåíåíèÿ ñèãíàëà îòíîñèòåëüíî òàêòîâîãî èìïóëüñà
6.0
Çàäåðæêà ðàçðåøåíèÿ ðåãèñòðà
6.0
tPRE
Çàäåðæêà ãëîáàëüíûõ óïðàâëÿþùèõ ñèãíàëîâ
1.0
tPRE
Âðåìÿ ïðåäóñòàíîâêè ðåãèñòðà Ìß
4.0
tCLR
Âðåìÿ ñáðîñà ðåãèñòðà Ìß
4.0
tPIA
Çàäåðæêà ÏÌÑ
2.0
tLPA
Çàäåðæêà çà ñ÷åò ðåæèìà ïîíèæåííîãî ïîòðåáëåíèÿ
13.0
tCOMB tIC tGLOB
48
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.10. Ïàðàìåòðû âðåìåííîé ìîäåëè ÏËÈÑ ñåìåéñòâà MAX7000 (âðåìåííûå ïàðàìåòðû â íñ, ÷àñòîòû â ÌÃö) Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EPM70128S -10 min
max
tPD1
Çàäåðæêà âõîä êîìáèíàòîðíûé âûõîä
10.0
tPD2
Çàäåðæêà âõîä ðåãèñòðîâûé âûõîä
10.0
tSU
Âðåìÿ óñòàíîâêè ãëîáàëüíîãî ñèíõðîñèãíàëà
7.0
tH
Âðåìÿ óäåðæàíèÿ ãëîáàëüíîãî ñèíõðîñèãíàëà
0.0
tCO1
Çàäåðæêà ãëîáàëüíîãî ñèíõðîñèãíàëà äî âûõîäà
4.5
tCH
Äëèòåëüíîñòü âûñîêîãî óðîâíÿ ãëîáàëüíîãî ñèíõðîñèãíàëà
4.0
tCL
Äëèòåëüíîñòü íèçêîãî óðîâíÿ ãëîáàëüíîãî ñèíõðîñèãíàëà
4.0
tASU
Âðåìÿ óñòàíîâêè ñèíõðîñèãíàëà òðèããåðà Ìß
2.0
tAH
Âðåìÿ óäåðæàíèÿ ñèíõðîñèãíàëà òðèããåðà Ìß
5.0
tACO1
Çàäåðæêà ñèíõðîñèãíàëà òðèããåðà Ìß äî âûõîäà
10.0
tACH
Äëèòåëüíîñòü âûñîêîãî óðîâíÿ ñèíõðîñèãíàëà òðèããåðà Ìß
4.0
tACL
Äëèòåëüíîñòü íèçêîãî óðîâíÿ ñèíõðîñèãíàëà òðèããåðà Ìß
4.0
tCPPW
Ìèíèìàëüíàÿ äëèòåëüíîñòü ñèãíàëîâ ñáðîñà è óñòàíîâêè òðèããåðà Ìß
4.0
tCNT
Ìèíèìàëüíûé ïåðèîä ãëîáàëüíîãî ñèíõðîñèãíàëà
10.0
fCNT
Ìàêñèìàëüíàÿ ãëîáàëüíàÿ âíóòðåííÿÿ òàêòîâàÿ ÷àñòîòà
100
tACNT
Ìèíèìàëüíûé ïåðèîä ñèíõðîñèãíàëà òðèããåðà Ìß
10.0
fACNT
Ìàêñèìàëüíàÿ âíóòðåííÿÿ òàêòîâàÿ ÷àñòîòà òðèããåðà Ìß
100
fMAX
Ìàêñèìàëüíàÿ òàêòîâàÿ ÷àñòîòà
125.0
49
50
INPUT/GCLK1
ЭВВ
8...16 I/O PINS
8...16
8...16
ЛБ C
ЛБ A
Ðèñ. 1.22. Àðõèòåêòóðà ñåìåéñòâà MAX7000
ЭВВ
8...16 I/O PINS
INPUT/OE2n
INPUT/OE1n
МЯ 33...48
МЯ 1...16
8...16
16
36
8...16
16
36
8...16
8...16 PIA
16
36
16
36
МЯ 49...64
МЯ 17...32
ЛБ D
ЛБ B
8...16
8...16
ЭВВ
ЭВВ
8...16 I/O PINS
8...16 I/O PINS
AL1022+
INPUT/GCLRn
Ýëåìåíòíàÿ áàçà
51
INPUT/GCLK1
МЯ 1...16
36
PIA
36
МЯ 17...32
6
ЭВВ
6
ЭВВ
6...16
6...16
6...16
ЛБ C МЯ 33...48
6...16
16
36
6...16
16
6...16
16
36
6...16
16
МЯ 49...64
ЛБ D
ЛБ B
6...16
6...16
6...16
6...16
6
ЭВВ
6
ЭВВ
6
ЛБ A
6 6...16
Разрешение выхода
Разрешение выхода
Ðèñ. 1.23. Àðõèòåêòóðà ñåìåéñòâà MAX7000S
6...16 I/O PINS
6...16 I/O PINS
INPUT/GCLRn
INPUT/OE1
6...16 I/O PINS
6...16 I/O PINS
AL1023+
INPUT/OE2/GCLK2
Ýëåìåíòíàÿ áàçà
52 16 сигналов с расширителей
Матрица распределения термов
2
VCC
Глобальный сигнал синхронизации Cброс Параллельный расширитель
Ðèñ. 1.24. Ñòðóêòóðà ìàêðîÿ÷åéêè ñåìåéñòâà MAX7000
AL1024+
36 сигналов ПМС
ПМС
ENA CLRN
К ПМС
PRN D/T Q Регистр
К ЭВВ
К ЭВВ
Ýëåìåíòíàÿ áàçà
Ýëåìåíòíàÿ áàçà
tIOE (1) tIN
tGLOB
tPIA
tLAD
tPEXP
tCOMB
tLAC tIC tEN tFIN (1)
tIO
AL1025+
tSEXP
tOD1 tOD2 (2) tOD3 tXZ tZX1 tZX2 (2) tZX3 (1)
tSU tH tPRE tCLR tRD
Ðèñ. 1.25. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà MAX7000
1.4. Ñåìåéñòâî FLEX8000 ÏËÈÑ ñåìåéñòâà FLEX8000 âûïóñêàþòñÿ ïî òåõíîëîãèè 0.5 ìêì SRAM ñ òðåìÿ ñëîÿìè ìåòàëëèçàöèè è ïðèãîäíû äëÿ ðåàëèçàöèè íå î÷åíü ñëîæíûõ àëãîðèòìîâ ÖÎÑ.  Òàáë. 1.11 ïðèâåäåíû îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà FLEX8000. Äàííûå ÏËÈÑ îáëàäàþò âûñîêèìè õàðàêòåðèñòèêàìè íàäåæíîñòè, ïîýòîìó îíè äîñòàòî÷íî ÷àñòî âûïóñêàþòñÿ â èíäóñòðèàëüíîì ïðèìåíåíèè. Òàáëèöà 1.11. Îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà FLEX8000 Ïàðàìåòð Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî ýêâèâàëåíòíûõ âåíòèëåé
EPF8282 EPF8452 EPF8636 EPF8820 EPF81188 EPF81500 2 500
4 000
6 000
8 000
12 000
16 000
×èñëî ëîãè÷åñêèõ ýëåìåíòîâ
208
336
504
672
1 008
1 296
×èñëî ëîãè÷åñêèõ áëîêîâ
282
452
636
820
1 188
1 500
×èñëî ïðîãðàììèðóåìûõ ïîëüçîâàòåëåì âûâîäîâ
78
120
136
152
184
208
53
Ýëåìåíòíàÿ áàçà Íà Ðèñ. 1.26 ïðèâåäåíà îáîáùåííàÿ ôóíêöèîíàëüíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà FLEX8000. Kàê ìîæíî çàìåòèòü, â àðõèòåêòóðå ÏËÈÑ ñåìåéñòâà FLEX8000 ìíîãî îáùåãî ñ ðàññìîòðåííûì â ïàðàãðàôå 1.2 ñåìåéñòâîì FLEX6000, îäíàêî ïîñêîëüêó ñåìåéñòâî FLEX8000 áûëî ðàçðàáîòàíî çíà÷èòåëüíî ðàíüøå, òî èìååòñÿ ðÿä îòëè÷èé. Ëîãè÷åñêèå áëîêè ÏËÈÑ ñåìåéñòâà FLEX8000 îáúåäèíÿþò ïî 8 ëîãè÷åñêèõ ýëåìåíòîâ íà ËÌÑ, ïðè ýòîì â îòëè÷èå îò ñåìåéñòâà FLEX6000 êàæäûé ËÁ èìååò âîçìîæíîñòü êîììóòàöèè òîëüêî íà îäíó ñòðîêó è ñòîëáåö ÃÌÑ. Ñòðóêòóðà ËÁ ÏËÈÑ ñåìåéñòâà FLEX8000 ïðèâåäåíà íà Ðèñ. 1.27. Kàæäûé ËÝ, âõîäÿùèé â ËÁ, èìååò âîçìîæíîñòü êîììóòàöèè êàê íà ËÌÑ, òàê è íà ñòðîêè è ñòîëáöû ÃÌÑ. Íà ËÌÑ ïîñòóïàåò 24 âõîäíûõ ñèãíàëà ñî ñðîêè ÃÌÑ, à òàêæå 8 ñèãíàëîâ îáðàòíîé ñâÿçè. Óïðàâëÿþùèå ñèãíàëû ôîðìèðóþòñÿ ëèáî èç ãëîáàëüíûõ âûäåëåííûõ óïðàâëÿþùèõ ñèãíàëîâ, ëèáî èç ñèãíàëîâ ËÌÑ. Ñòðóêòóðà ËÝ â öåëîì ïðàêòè÷åñêè ïîäîáíà ËÝ ÏËÈÑ ñåìåéñòâà FLEX6000.
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ГМС
ЭВВ
ЭВВ
ЭВВ ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
AL1026+
ЛБ
Ðèñ. 1.26. Óêðóïíåííàÿ ñòðóêòóðíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà FLEX8000
54
Ýëåìåíòíàÿ áàçà
Сигналы Строки ГМС 24
4 4
Перенос и каскадирование
8 Соеди3 нение строка— столбец
2
Локаль3 ные управ3 ляющие сигналы
4
4
8
16
ЛЭ1 4 ЛЭ2 4 ЛМС
ЛЭ3 4 ЛЭ4 4 ЛЭ5 4 ЛЭ6 4 ЛЭ7 4 ЛЭ8 2 Выходы переноса и каскадирование
Столбец ГМС
AL1027+
8
Ðèñ. 1.27. ËÁ ÏËÈÑ ñåìåéñòâà FLEX8000
ËÝ ÏËÈÑ ñåìåéñòâà FLEX8000 äîïóñêàþò êàñêàäèðîâàíèå, à òàêæå öåïî÷å÷íûå ïåðåíîñû, èìåþò âîçìîæíîñòü êîíôèãóðàöèè â íîðìàëüíîì, ñ÷åòíîì è àðèôìåòè÷åñêîì ðåæèìàõ. Âðåìåííàÿ ìîäåëü ÏËÈÑ FLEX8000 ïðèâåäåíà íà Ðèñ 1.28 è 1.29. Îñíîâíûå ïàðàìåòðû âðåìåííîé ìîäåëè ÏËÈÑ ñåìåéñòâà FLEX8000 ïðèâåäåíû â Òàáë. 1.12.
55
Ýëåìåíòíàÿ áàçà
tROW Перенос
tLOCAL
Каскадирование
tLUT tRLUT tCLUT
tCO tCOMB tSU tH tPRE tCLR
tGATE
tGEN tCGEAN tCICO
tC
tCOL
tCASC ЛЭ
tLABCARRY Перенос
tLABCASC AL1028+
tDIN_D tDIN_C tDIN_O
Каскадирование
Ðèñ. 1.28. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà FLEX8000
ЭВВ tIOD
tIOC tIOE
tIOCO tIOCOMB tIOSU tIOH tIOCLR
tOD1 tOD2 tOD3 tXZ tZX1 tZX2 tZX3
AL1029+
tIN
Ðèñ. 1.29. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà FLEX8000
56
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.12. Ïàðàìåòðû âðåìåííîé ìîäåëè ÏËÈÑ ñåìåéñòâà FLEX8000 Îáîçíà÷åíèå tIOD tIOC tIOE tIOCO tIOCOMB tIOSU tIOH tIOCLR tIN tOD1 tOD3 tXZ tZX1 tZX3 tLUT tCLUT tRLUT tGATE tCASC tCICO tCGEN tCGENR tC tCH tCL tCO tCOMB tSU
Ïàðàìåòð Çàäåðæêà äàííûõ â ðåãèñòðå Ý Çàäåðæêà ñèãíàëà óïðàâëåíèÿ ðåãèñòðà Ý Çàäåðæêà ñèãíàëà ðàçðåøåíèÿ âûõîäà Çàäåðæêà ïîÿâëåíèÿ äàííûõ íà âûõîäå ðåãèñòðà Ý ïîñëå ïîäà÷è ñèíõðîèìïóëüñà Çàäåðæêà êîìáèíàöèîííûõ ñõåì Ý Âðåìÿ óñòàíîâêè ðåãèñòðà Ý Âðåìÿ óäåðæàíèÿ äàííûõ ðåãèñòðà Ý Çàäåðæêà ñáðîñà ðåãèñòðà Ý Çàäåðæêà ñèãíàëà âî âõîäíîì áóôåðå Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 3.3 Â, slew rate = off Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, slew rate = on Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà çàïðåùåíèÿ âûõîäà Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 3.3 Â, slew rate = off Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, slew rate = on Çàäåðæêà äàííûõ â ÒÏ Çàäåðæêà ôîðìèðîâàíèÿ ñèãíàëà ïåðåíîñà â ÒÏ Çàäåðæêà ñèãíàëà îáðàòíîé ñâÿçè ðåãèñòðà â ÒÏ Çàäåðæêà â ëîãèêå êàñêàäèðîâàíèÿ Çàäåðæêà â öåïè êàñêàäèðîâàíèÿ Çàäåðæêà äàííûõ ñî âõîäà íà âûõîä óñêîðåííîãî ïåðåíîñà Çàäåðæêà ðàñïðîñòðàíåíèÿ äàííûõ ñî âõîäà íà âûõîä ïåðåíîñà Çàäåðæêà ñèãíàëà îáðàòíîé ñâÿçè ñ ðåãèñòðà ËÝ íà öåïü ïåðåíîñà Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà íà ðåãèñòðå Äëèòåëüíîñòü âûñîêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà Äëèòåëüíîñòü íèçêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà îòíîñèòåëüíî òàêòà Çàäåðæêà â êîìáèíàöèîííîé ÷àñòè ËÝ Âðåìÿ óñòàíîâêè ðåãèñòðà
57
Çíà÷åíèå äëÿ EPF8282À-2 [íñ] min max 0.7 1.7 1.7
1.0
1.4 0.0
0.3 1.2 1.5
1.1
4.6
1.4
1.4
4.9
2.0 0.0 0.9 0.0 0.6 0.4
0.4
0.9
4.0 4.0 0.8
1.6 0.4 0.4
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.12 (îêîí÷àíèå) Îáîçíà÷åíèå tH tPRE tCLR tLABCASC tLABCARRY tLOCAL tROW tCÎL tDIN_D tDIN_C tDIN_IO tDPR
Çíà÷åíèå äëÿ EPF8282À-2 [íñ] min max
Ïàðàìåòð Âðåìÿ óäåðæàíèÿ ñèãíàëà íà âõîäå ðåãèñòðà ïîñëå ïîäà÷è ñèíõðîèìïóëüñà Çàäåðæêà ïðåäóñòàíîâêè ðåãèñòðà Çàäåðæêà ñáðîñà ðåãèñòðà Çàäåðæêà ñèãíàëà êàñêàäèðîâàíèÿ â äðóãîé ËÁ Çàäåðæêà ñèãíàëà ïåðåíîñà â äðóãîé ËÁ Çàäåðæêà ËÌÑ Çàäåðæêà â ñòðîêå ÃÌÑ Çàäåðæêà â ñòîëáöå ÃÌÑ Çàäåðæêà äàííûõ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÝ Çàäåðæêà óïðàâëÿþùèõ ñèãíàëîâ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÝ Çàäåðæêà óïðàâëÿþùèõ ñèãíàëîâ ñ âûäåëåííîãî âûâîäà äî âõîäîâ óïðàâëåíèÿ Ý Òåñòîâàÿ çàäåðæêà ðåãèñòð-ðåãèñòð ÷åðåç 4 ËÝ, 3 ðÿäà è 4 ËÌÑ
0.9
0.6 0.6 0.3 0.3 0.5 4.2 2.5 7.2
5.0
5.0
15.8
1.5. Ñåìåéñòâî MAX9000 Ñåìåéñòâî ÏËÈÑ MAX9000 èìååò ìàòðè÷íóþ ñòðóêòóðó, ïîäîáíóþ ÏËÈÑ ñåìåéñòâ FLEX6000 è FLEX8000, íî âûïîëíåíà ïî EPROM òåõíîëîãèè, òàê æå, êàê è ÏËÈÑ ñåìåéñòâ MAX3000 è MAX7000. Ìèêðîñõåìû ñåìåéñòâà MAX9000 èìåþò äîñòàòî÷íî âûñîêóþ ëîãè÷åñêóþ åìêîñòü è íå òðåáóþò âíåøíåãî êîíôèãóðàöèîííîãî ÏÇÓ. Áëàãîäàðÿ ìàòðè÷íîé ñòðóêòóðå ìåæñîåäèíåíèé îíè ÿâëÿþòñÿ ïîäõîäÿùåé ýëåìåíòíîé áàçîé äëÿ ðåàëèçàöèè àëãîðèòìîâ ÖÎÑ. Îñíîâíûå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà MAX9000 ïðèâåäåíû â Òàáë. 1.13. Òàáëèöà 1.13. Ïàðàìåòðû ÏËÈÑ ñåìåéñòâà MAX9000 Ïàðàìåòð
EPM9320 EPM9400 EPM9480 EPM9560
Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî ýêâèâàëåíòíûõ âåíòèëåé
600
1 250
2 500
5 000
×èñëî ìàêðîÿ÷ååê
320
400
480
560
×èñëî ëîãè÷åñêèõ áëîêîâ
484
580
676
772
×èñëî ïðîãðàììèðóåìûõ ïîëüçîâàòåëåì âûâîäîâ
168
159
175
216
58
Ýëåìåíòíàÿ áàçà
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ГМС
ЭВВ
ЭВВ
ЛБ ЭВВ
ЭВВ
ЭВВ
ЭВВ ЛМС
ЭВВ
ЭВВ
ЭВВ
ЭВВ
AL1030+
МЯ
Ðèñ. 1.30. Ñòðóêòóðíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà MAX9000
Ñòðóêòóðíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà MAX9000 ïðèâåäåíà íà Ðèñ. 1.30.  îñíîâå àðõèòåêòóðû ÏËÈÑ ñåìåéñòâà MAX9000 ëåæèò ãëîáàëüíàÿ ìàòðèöà ñîåäèíåíèé, ðàçäåëåííàÿ íà ñòðîêè è ñòîëáöû. Ìàêðîÿ÷åéêè îáúåäèíÿþòñÿ â ëîãè÷åñêèå áëîêè, ñîäåðæàùèå ïî 16 Ìß êàæäûé, à òàêæå ëîêàëüíóþ ìàòðèöó ñîåäèíåíèé. Íà Ðèñ. 1.31 ïðèâåäåíà ñòðóêòóðíàÿ ñõåìà ëîãè÷åñêîãî áëîêà ÏËÈÑ ñåìåéñòâà MAX9000. Kàê ìîæíî âèäåòü èç Ðèñ. 1.31, êàæäàÿ Ìß èìååò âîçìîæíîñòü êîììóòàöèè êàê íà ëîêàëüíóþ, òàê è íà ñòðîêè è ñòîëáöû ãëîáàëüíîé ìàòðèöû ñîåäèíåíèé. Ñîáñòâåííî ñòðóêòóðà Ìß ÏËÈÑ ñåìåéñòâà MAX9000 ïîêàçàíà íà Ðèñ. 1.32. Îíà ïðàêòè÷åñêè íå îòëè÷àåòñÿ îò Ìß ÏËÈÑ ñåìåéñòâ MAX7000 èëè MAX3000. Òàê æå, êàê è ó ÏËÈÑ ýòèõ ñåìåéñòâ, èìååòñÿ âîçìîæíîñòü èñïîëüçîâàíèÿ ïàðàëëåëüíûõ è ðàçäåëÿåìûõ ðàñøèðèòåëåé. Íàëè÷èå ýëåìåíòà ââîäà/âûâîäà ÏËÈÑ ñåìåéñòâà MAX9000 ïîêàçàíî íà Ðèñ. 1.33. Íàëè÷èå â Ý òàêòèðóåìîãî òðèããåðà ïîçâîëÿåò, ïî ñóòè, âûïîëíÿòü õðàíåíèå âõîäíûõ èëè âûõîäíûõ äàííûõ â ÝÂÂ, íå çàäåéñòâóÿ ðåñóðñû Ìß.
59
Ýëåìåíòíàÿ áàçà Выбор глобального управляющего сигнала GCLK1
DIN1
GCLK2 DIN2 DIN3
GCLR
DIN4
GOE Строки ГМС 38
16
16
16
16
48
1 16
2
48
3 4 5 6 7 ЛМС
8 9 10 11 12 13 14 15 16
16
Сигналы разделяемых расширителей
Столбец ГМС
AL1031+
16
Локальная обратная связь
Ðèñ. 1.31. Ñòðóêòóðíàÿ ñõåìà ëîãè÷åñêîãî áëîêà ÏËÈÑ ñåìåéñòâà MAX9000
60
Ýëåìåíòíàÿ áàçà МС
Матрица распределения термов
Параллельный расширитель
Cигналы ГМС
Сигналы ОС
Синхронизация Cброс
2 К ГМС PRN D/T Q Регистр
VCC
Сигналы с разделяемых расширителей
Ðèñ. 1.32. Ìß ÏËÈÑ ñåìåéñòâà MAX9000
61
Локальная ОС
AL1032+
ENA CLRN
Ýëåìåíòíàÿ áàçà
Управляющая шина
VCC
OE [7...0] 8 На ГМС
13 От ГМС D
Q
CLK [3...0] VCC
4
Контроль скорости ЭВВ
ENA CLRN
ENA [5...0] 6
VCC
CLR [1...0] AL1033+
2
Ðèñ. 1.33. ÝÂÂ ÏËÈÑ ñåìåéñòâà MAX9000
tROW
tLAD
tLOCAL
tPEXT
tLAC tIC tEN
tRD tCOMB tSU tH tPRE tCLR
tFTD tCOL
tSEXP tDIN_D tDIN_CLK tDIN_CLR tDIN_IO tDIN_IOC
AL1034+
МЯ
Ðèñ. 1.34. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà MAX9000
62
Ýëåìåíòíàÿ áàçà
ЭВВ tIODR tIODC
tIORD tIOCOMB tIOSU tIOH tIOCLR
tIOC
tOD1 tOD2 tOD3 tXZ tZX1 tZX2 tZX3
Вывод ПЛИС
tIOFD
AL1035+
tINREG tINCOMB
Ðèñ. 1.35. Âðåìåííàÿ ìîäåëü ÝÂÂ ÏËÈÑ ñåìåéñòâà MAX9000
Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà MAX9000 ïðèâåäåíà íà Ðèñ. 1.34. è 1.35, à åå ïàðàìåòðû â Òàáë. 1.14. Òàáëèöà 1.14. Ïàðàìåòðû âðåìåííîé ìîäåëè ñåìåéñòâà MAX9000 Îáîçíà÷åíèå tPD1 tPD2 tFSU tFH tFCO tCNT fCNT tLAD
Ïàðàìåòð
Çíà÷åíèå äëÿ EPM9400-10 [íñ] min max 10.0 10.8 3.0 0.0 1.0 4.8 6.9 144.9 3.5
tSEXP tPEXP tRD
Çàäåðæêà âõîäâûõîä ïî ñòðîêå Çàäåðæêà âõîäâûõîä ïî ñòîëáöó Âðåìÿ óñòàíîâêè ãëîáàëüíîãî ñèíõðîñèãíàëà Âðåìÿ óäåðæàíèÿ ãëîáàëüíîãî ñèíõðîñèãíàëà Çàäåðæêà ãëîáàëüíîãî ñèíõðîñèãíàëà äî âûõîäà Ìèíèìàëüíûé ïåðèîä ãëîáàëüíîãî ñèíõðîñèãíàëà Ìàêñèìàëüíàÿ ãëîáàëüíàÿ âíóòðåííÿÿ òàêòîâàÿ ÷àñòîòà Çàäåðæêà â ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå ««È»» Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà òðèããåðà â ëîêàëüíîé ïðîãðàììèðóåìîé ìàòðèöå «È» Çàäåðæêà èçìåíåíèÿ ñèãíàëà îòíîñèòåëüíî òàêòîâîãî èìïóëüñà Çàäåðæêà ðàçðåøåíèÿ ðåãèñòà Çàäåðæêà ðàçäåëÿåìîãî ðàñøèðèòåëÿ Çàäåðæêà ïàðàëëåëüíîãî ðàñøèðèòåëÿ Ðåãèñòðîâàÿ çàäåðæêà
tCOMB
Kîìáèíàöèîííàÿ çàäåðæêà
tSU
Âðåìÿ óñòàíîâêè ðåãèñòðà
2.4
tH
Âðåìÿ óäåðæàíèÿ ñèãíàëà â ðåãèñòðå
2.0
tLAC tIC tEN
63
3.5
3.5 3.5 3.5 0.5 0.5 0.4
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.14 (îêîí÷àíèå) Îáîçíà÷åíèå tPRE tCLR tFTD tLPA tIODR tIODC tIOC tIORD tIOCOMB tIOSU tIOH tIOCLR tIOFD tINREG tINCOMB tOD1 tOD2 tOD3 tXZ tZX1 tZX2 tZX3 tLOCAL tROW tCÎL tDIN_D tDIN_C tDIN_IO
Ïàðàìåòð Âðåìÿ ïðåäóñòàíîâêè ðåãèñòðà Ìß Âðåìÿ ñáðîñà ðåãèñòðà Ìß Çàäåðæêà ãëîáàëüíîé ÏÌÑ Çàäåðæêà çà ñ÷åò ðåæèìà ïîíèæåííîãî ïîòðåáëåíèÿ Çàäåðæêà ââîäà/âûâîäà äàííûõ íà ñòðîêó ÃÌÑ Çàäåðæêà ââîäà/âûâîäà äàííûõ íà ñòîëáåö ÃÌÑ Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà Ý Çàäåðæêà äàííûõ íà âûõîäå Ý îòíîñèòåëüíî òàêòà Çàäåðæêà êîìáèíàöèîííûõ ñõåì Ý Âðåìÿ óñòàíîâêè ðåãèñòðà Ý Âðåìÿ óäåðæàíèÿ äàííûõ ðåãèñòðà Ý Çàäåðæêà ñáðîñà ðåãèñòðà Ý Çàäåðæêà îáðàòíîé ñâÿçè ðåãèñòðà Ý Çàäåðæêà âî âõîäíîì áóôåðå Ý Çàäåðæêà âî âõîäíîì áóôåðå Ý Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 3.3 Â, slew rate = off Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 2.5 Â, slew rate = off Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, slew rate = on Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà çàïðåùåíèÿ âûõîäà Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 3.3 Â, slew rate = off Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 2.5 Â, slew rate = off Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, slew rate = on Çàäåðæêà ËÌÑ Çàäåðæêà â ñòðîêå ÃÌÑ Çàäåðæêà â ñòîëáöå ÃÌÑ Çàäåðæêà äàííûõ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÝ Çàäåðæêà óïðàâëÿþùèõ ñèãíàëîâ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÝ Çàäåðæêà óïðàâëÿþùèõ ñèãíàëîâ ñ âûäåëåííîãî âûâîäà äî âõîäîâ óïðàâëåíèÿ ÝÂÂ
64
Çíà÷åíèå äëÿ EPM9400-10 [íñ] min 2.0 1.0
max 3.5 3.7 0.5 10.0 0.2 0.4 0.5 0.6 0.2 1.5 0.0 3.5 1.5
1.8
2.3
8.3
2.5
2.5
3.0
9.0
0.5 0.9 0.9 4.0
2.7
2.5
Ýëåìåíòíàÿ áàçà
1.6. Ñåìåéñòâî FLEX10K ÏËÈÑ ñåìåéñòâ FLEX10K, FLEX10KA, FLEX10KE ÿâëÿþòñÿ íà äàííûé ìîìåíò, ïîæàëóé, ñàìîé ïîïóëÿðíîé ýëåìåíòíîé áàçîé äëÿ ðåàëèçàöèè àëãîðèòìîâ ÖÎÑ, ïîñòðîåíèÿ ñëîæíûõ óñòðîéñòâ îáðàáîòêè äàííûõ è èíòåðôåéñîâ. Ýòî îáúÿñíÿåòñÿ òåì, ÷òî áëàãîäàðÿ áîëüøîé ëîãè÷åñêîé åìêîñòè, óäîáíîé àðõèòåêòóðå, âêëþ÷àþùåé âñòðîåííûå áëîêè ïàìÿòè (EAB Embedded Array Block), äîñòàòî÷íî âûñîêîé íàäåæíîñòè è óäà÷íîìó ñîîòíîøåíèþ öåíàëîãè÷åñêàÿ åìêîñòü äàííûå ÏËÈÑ óäîâëåòâîðÿþò ðàçíîîáðàçíûì òðåáîâàíèÿì, âîçíèêàþùèì ó ðàçðàáîò÷èêà êàê ñèñòåì ÖÎÑ, òàê è óñòðîéñòâ óïðàâëåíèÿ, îáðàáîòêè äàííûõ è ò.ï.  Òàáë. 1.15 ïðèâåäåíû îñíîâíûå ñâåäåíèÿ î ÏËÈÑ ñåìåéñòâà FLEX10K. Òàáëèöà 1.15. ÏËÈÑ ñåìåéñòâà FLEX10K Ïàðàìåòð
EPF1 EPF1 EPF1 EPF1 EPF1 EPF1 EPF1 EPF1 EPF1 0K10 0K20 0K30 0K40 0K50 0K70 0K100 0K130 0K250
Ëîãè÷åñêàÿ åìêîñòü, êîëè÷å10 ñòâî ýêâèâàëåíòíûõ âåíòèëåé 000 ×èñëî ëîãè÷åñêèõ ýëåìåíòîâ Âñòðîåííûå áëîêè ïàìÿòè Îáúåì ïàìÿòè [áèò] Ìàêñèìàëüíîå ÷èñëî âûâîäîâ ïîëüçîâàòåëÿ
576 3
20 000
30 000
40 000
50 000
70 000
100 000
130 000
250 000
1 152 1 728 2 304 2 880 3 744 4 992 6 656 12 160 6
6
8
10
9
12
16
20
6 144 12 288 12 288 16 384 20 480 18 432 24 576 32 768 40 960 150
189
246
189
310
358
406
470
470
 íàñòîÿùåå âðåìÿ âûïóñêàþòñÿ ÏËÈÑ ñåìåéñòâ FLEX10K ñ íàïðÿæåíèåì ïèòàíèÿ 5 Â, FLEX10KÀ (V) ñ íàïðÿæåíèåì ïèòàíèÿ 3.3  è FLEX10KÅ ñ íàïðÿæåíèåì ïèòàíèÿ 2.5 Â. Kðîìå òîãî, ÏËÈÑ ñåìåéñòâà FLEX10KÅ èìåþò åìêîñòü âñòðîåííîãî áëîêà ïàìÿòè 4096 áèò, â îòëè÷èå îò ÏËÈÑ îñòàëüíûõ ñåìåéñòâ, èìåþùèõ åìêîñòü ÅÀ 2048 áèò. Îáîáùåííàÿ ôóíêöèîíàëüíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà FLEX10K ïðèâåäåíà íà Ðèñ. 1.36.  îñíîâå àðõèòåêòóðû ëåæàò ëîãè÷åñêèå áëîêè, ñîäåðæàùèå 8 ËÝ è ëîêàëüíóþ ìàòðèöó ñîåäèíåíèé. Ãëîáàëüíàÿ ìàòðèöà ñîåäèíåíèé ðàçäåëåíà íà ñòðîêè è ñòîëáöû, èìååò íåïðåðûâíóþ ñòðóêòóðó (Fast Track Interconnect). Ïîñåðåäèíå ñòðîêè ðàñïîëàãàþòñÿ âñòðîåííûå áëîêè ïàìÿòè. Kðîìå òîãî, èìåþòñÿ ãëîáàëüíûå öåïè óïðàâëåíèÿ, ñèíõðîíèçàöèè è óïðàâëåíèÿ ââîäîì/âûâîäîì.
65
Ýëåìåíòíàÿ áàçà
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
Столбец ГМС
ЛБ ВБП
ЭВВ
ЭВВ
ЭВВ
ЭВВ
Строка ГМС
ЛЭ
ВБП
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
AL1036+
ЛМС
Ðèñ. 1.36. Àðõèòåêòóðà ÏËÈÑ ñåìåéñòâà FLEX10K
Âñòðîåííûé áëîê ïàìÿòè (ÂÁÏ) (Ðèñ. 1.37) ïðåäñòàâëÿåò ñîáîé îïåðàòèâíîå çàïîìèíàþùåå óñòðîéñòâî (ÎÇÓ) åìêîñòüþ 2048 (4096) áèò è ñîñòîèò èç ëîêàëüíîé ìàòðèöû ñîåäèíåíèé, ñîáñòâåííî ìîäóëÿ ïàìÿòè, ñèíõðîííûõ áóôåðíûõ ðåãèñòðîâ, à òàêæå ïðîãðàììèðóåìûõ ìóëüòèïëåêñîðîâ. Ñèãíàëû íà âõîä ËÌÑ ÂÁÏ ïîñòóïàþò ñî ñòðîêè ÃÌÑ. Òàêòîâûå è óïðàâëÿþùèå ñèãíàëû ïîñòóïàþò ñ ãëîáàëüíîé øèíû óïðàâëÿþùèõ ñèãíàëîâ. Âûõîä ÂÁÏ ìîæåò áûòü ñêîììóòèðîâàí êàê íà ñòðîêó, òàê è íà ñòîëáåö ÃÌÑ. Íàëè÷èå ñèíõðîííûõ áóôåðíûõ ðåãèñòðîâ è ïðîãðàììèðóåìûõ ìóëüòèïëåêñîðîâ ïîçâîëÿåò êîíôèãóðèðîâàòü ÂÁÏ êàê çàïîìèíàþùåå óñòðîéñòâî (ÇÓ) ñ îðãàíèçàöèåé 256×8, 512×4, 1024×2, 2048×1. Íàëè÷èå ÂÁÏ äàåò âîçìîæíîñòü òàáëè÷íîé ðåàëèçàöèè òàêèõ ýëåìåíòîâ óñòðîéñòâ ÖÎÑ, êàê ïåðåìíîæèòåëè, àðèôìåòè÷åñêîå ëîãè÷åñêîå óñòðîéñòâî (ÀËÓ), ñóììàòîðû è ò.ï., èìåþùèõ áûñòðîäåéñòâèå äî 100 ÌÃö (êîíå÷íî, ïðè ñàìûõ áëàãîïðèÿòíûõ óñëîâèÿõ ðåàëüíî áûñòðîäåéñòâèå àðèôìåòè÷åñêèõ óñòðîéñòâ, ðåàëèçîâàííûõ íà áàçå ÂÁÏ, ñîñòàâëÿåò 10
50 ÌÃö).
66
Ýëåìåíòíàÿ áàçà
Выделенные Сброс сигналы Строки ГМС 2,4,8,16 1
6 8,4,2,1 D Q
Вход данных Выход данных
9,10,11 D Q
ЛМС D Q
Адрес ОЗУ/ПЗУ 256 x 8 512 x 4 1024 x 2 2048 x 1 WE
16 D Q
2,4,8,16
AL1037+
Столбец ГМС
Ðèñ. 1.37. Âñòðîåííûé áëîê ïàìÿòè
Âñå ÏËÈÑ ñåìåéñòâà FLEX10K ñîâìåñòèìû ïî óðîâíÿì ñ øèíîé PCI, èìåþò âîçìîæíîñòü êàê ïîñëåäîâàòåëüíîé, òàê è ïàðàëëåëüíîé çàãðóçêè, ïîëíîñòüþ ïîääåðæèâàþò ñòàíäàðò JTAG. Ñòðóêòóðà ëîãè÷åñêîãî áëîêà ÏËÈÑ ñåìåéñòâà FLEX10K ïðèâåäåíà íà Ðèñ. 1.38. Ñèãíàëû íà âõîä ËÌÑ ïîñòóïàþò êàê ñî ñòðîêè ÃÌÑ, òàê è ñ âûõîäîâ êàæäîãî èç 8 ËÝ, âõîäÿùèõ â ñîñòàâ ËÁ. Ñèãíàëû ñ âûõîäà ËÁ ïîñòóïàþò êàê íà ñòðîêó, òàê è íà ñòîëáåö ÃÌÑ. Kàê ìîæíî çàìåòèòü, àðõèòåêòóðà ËÁ ñåìåéñòâà FLEX10K íàïîìèíàåò àðõèòåêòóðó ËÁ ÏËÈÑ ñåìåéñòâà FLEX8000. Ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà FLEX10K ïðèâåäåíà íà Ðèñ. 1.39. Kàê ïðàâèëî, àðõèòåêòóðà ËÝ âñåõ ñåìåéñòâ FLEX ïðàêòè÷åñêè îäèíàêîâà. Ñ ïîìîùüþ ñõåì îðãàíèçàöèè
67
Ýëåìåíòíàÿ áàçà
Выделенные и глобальные сигналы
1
6 4
Перенос и каскадирование 2
4
16
4
8
24
4 ЛЭ1
4 ЛЭ2 4 ЛМС
16 8
Коммутация строка—столбец ГМС
Управляющие сигналы ЛБ
Строки ГМС
ЛЭ3 4 ЛЭ4 4 ЛЭ5 4 ЛЭ6 4 ЛЭ7 4 ЛЭ8 8
Выходы переноса и каскадирование
AL1038+
Столбец ГМС
2
Ðèñ. 1.38. Ëîãè÷åñêèé áëîê ÏËÈÑ ñåìåéñòâà FLEX10K
ïåðåíîñîâ (carry chain) è êàñêàäèðîâàíèÿ (cascade chain) âîçìîæíî ðàñøèðåíèå âîçìîæíîñòåé ËÝ (ïîäðîáíåå î ðåæèìàõ êîíôèãóðàöèè ËÝ ñì. ïàðàãðàô 1.2). Ýëåìåíò ââîäà/âûâîäà ÏËÈÑ ñåìåéñòâà FLEX10K ñîåäèíÿåò êàíàë ñòðîêè èëè ñòîëáöà ÃÌÑ ñ âûâîäîì ìèêðîñõåìû. Ñòðóêòóðíàÿ ñõåìà Ý ïðèâåäåíà íà Ðèñ. 1.40. Ý ïîçâîëÿåò îñóùåñòâèòü ââîä/âûâîä áèòà äàííûõ ñ ðàçëè÷íûìè ñêîðîñòÿìè, âðåìåííîå õðàíåíèå äàííûõ, ýìóëÿöèþ îòêðûòîãî êîëëåêòîðà.
68
Ýëåìåíòíàÿ áàçà
Перенос Data1 Data2 Data3 Data4
Labctrl1 Labctrl2 Сброс
Таблица Цепь перекоG переноса дировки
Каскадирование
Цепь каскадиG рования
ENA CLRN
Схема сброса/ установки
К ГМС
PRN D
Q
К ЛМС
Labctrl3
Выход переноса Выход каскадирования
AL1039+
Labctrl4
Ðèñ. 1.39. Ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà FLEX10K
Íàëè÷èå âõîäíîãî (input register) è âûõîäíîãî (output register) ðåãèñòðîâ ïîçâîëÿåò õðàíèòü äàííûå, ÷òî ñíèæàåò ëîãè÷åñêóþ íàãðóçêó íà ËÝ è âûñâîáîæäàåò ðåñóðñû ÏËÈÑ äëÿ ðåàëèçàöèè äðóãèõ ôóíêöèé. Ñêîðîñòü ïåðåêëþ÷åíèÿ áóôåðà Ý ìîæåò áûòü çàäàíà ïðè êîíôèãóðàöèè ÏËÈÑ. Ïîíèæåííàÿ ñêîðîñòü ïåðåêëþ÷åíèÿ ïîçâîëÿåò ñíèçèòü óðîâåíü èìïóëüñíûõ ïîìåõ è «çâîíà» â ñèñòåìå. Ñëåäóåò ïîìíèòü, ÷òî ðåæèì ýìóëÿöèè îòêðûòîãî êîëëåêòîðà îáåñïå÷èâàåò íå ñëèøêîì ìîùíûé âûõîäíîé ñèãíàë, ïîýòîìó ïðè íåîáõîäèìîñòè ñîïðÿæåíèÿ ñ âíåøíèìè ñõåìàìè ëó÷øå èñïîëüçîâàòü ñïåöèàëèçèðîâàííûå áóôåðû (íàïðèìåð, 74HC04, 1533ËÀ8, 1533ËÍ2 è ò.ï.). Ïî êðàéíåé ìåðå, ïðè âîçäåéñòâèè âûñîêîãî íàïðÿæåíèÿ ïðîùå (è äåøåâëå) ïîìåíÿòü áóôåð, à íå âñþ ÏËÈÑ (îñîáåííî â BGA êîðïóñå). Âðåìåííàÿ ìîäåëü ÏËÈÑ ïðåäñòàâëåíà íà Ðèñ. 1.411.44, à åå îñíîâíûå ïàðàìåòðû â Òàáë. 1.16.
69
Ýëåìåíòíàÿ áàçà Синхронизация ГМС Управляющие Выделенные сигналы сигналы
D
VCC
Q
ENA CLRN
Сброс
VCC CE [7...0]
Разрешение выхода
VCC
CLK [1...0] CLK [3...2]
D
VCC
ENA [3...0] VCC
Q
ENA CLRN
Открытый коллектор Скорость ЭВВ
CLRN [1...0]
Сброс
VCC
D
Q
Сброс
Ðèñ. 1.40. Ýëåìåíò ââîäà/âûâîäà
70
AL1040+
ENA CLRN
Ýëåìåíòíàÿ áàçà
Выделенные сигналы
Межсоединение
ВБР AL1041+
ЛЭ
ЭВВ
Ðèñ. 1.41. Âðåìåííàÿ ìîäåëü ÏËÈÑ ñåìåéñòâà FLEX10K
Вход данных
Вход каскадирования tLUT tPLUT tCLUT
tCO tCOMB tSU tH tPRE tCLR
tPACKED
Управление
Выход данных
tC tEN tCGENR tCGEN tCICO
tCASC
tLABCASC
tLABCARRY
Выход переноса
Выход каскадирования
Ðèñ. 1.42. Âðåìåííàÿ ìîäåëü ËÝ ÏËÈÑ ñåìåéñòâà FLEX10K
71
AL1042+
Вход переноса
Ýëåìåíòíàÿ áàçà
DATA IN
tIOD
CLOCK ENABLE CLEAR CLOCK OUTPUT ENABLE
tIDC
1 к ГМС
tIOFD
tIOCO tIOCOMB tIOSU tIOH tIOCLR
tOD1 tOD2 tOD3 tXZ tZX1 tZX2 tZX3
AL1043+
tINREG
tINCOMB
Ðèñ. 1.43. Âðåìåííàÿ ìîäåëü ÝÂÂ ÏËÈÑ ñåìåéñòâà FLEX10K
tEABOATA1 tEABOATA2 tEABWE1 tEABWE2
tEABCO tEABBYPASS tEABSU tEABH tEABCH tEABCL
tAA tDO tWR
tWDSU tWDH tWASU tWAH tWO
tEABCO tEABBYPASS tEABSU tEABH tEABCH tEABCL
tEABOUT DATA OUT
tEABCLK AL1044+
Синхронизация
Разрешение записи
Данные Адрес
Ðèñ. 1.44. Âðåìåííàÿ ìîäåëü ÂÁÏ ÏËÈÑ ñåìåéñòâà FLEX10K Òàáëèöà 1.16. Ïàðàìåòðû âðåìåííîé ìîäåëè ÏËÈÑ ñåìåéñòâà FLEX10K Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EPF10K103 [íñ] min
max
tLUT
Çàäåðæêà äàííûõ â ÒÏ
1.4
tCLUT
Çàäåðæêà ôîðìèðîâàíèÿ ñèãíàëà ïåðåíîñà â ÒÏ
0.6
tRLUT
Çàäåðæêà ñèãíàëà îáðàòíîé ñâÿçè ðåãèñòðà â ÒÏ
1.5
Çàäåðæêà âõîäíûõ äàííûõ äî îòäåëüíî ñêîíôèãóðèðîâàííîãî ðåãèñòðà (packed register)
0.6
Çàäåðæêà ñèãíàëà ðàçðåøåíèÿ ðåãèñòðà ËÝ
1.0
Çàäåðæêà ñèãíàëà ïåðåíîñà îò âõîäà äî âûõîäà ïåðåíîñà
0.2
tPACKED tEN tCICO
72
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.16 (ïðîäîëæåíèå) Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EPF10K103 [íñ] min max
tCGEN
Çàäåðæêà ñèãíàëà ïåðåíîñà îò âõîäà ËÝ äî âûõîäà ïåðåíîñà
0.9
tCGENR
Çàäåðæêà ñèãíàëà îò âûõîäà ðåãèñòðà ËÝ äî âûõîäà ïåðåíîñà
0.9
tCASC
Çàäåðæêà ñèãíàëà êàñêàäèðîâàíèÿ îò âõîäà äî âûõîäà êàñêàäèðîâàíèÿ
0.8
tC
Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà íà ðåãèñòðå ËÝ
1.3
tCO
Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà îòíîñèòåëüíî òàêòà
0.9
Çàäåðæêà â êîìáèíàöèîííîé ÷àñòè ËÝ
0.5
tSU
Âðåìÿ óñòàíîâêè ðåãèñòðà ËÝ
1.3
tH
Âðåìÿ óäåðæàíèÿ ñèãíàëà íà âõîäå ðåãèñòðà ïîñëå ïîäà÷è ñèíõðîèìïóëüñà
1.4
tCOMB
tPRE
Çàäåðæêà ïðåäóñòàíîâêè ðåãèñòðà ËÝ
1.0
tCLR
Çàäåðæêà ñáðîñà ðåãèñòðà ËÝ
1.0
tCH
Äëèòåëüíîñòü âûñîêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà
4.0
tCL
Äëèòåëüíîñòü íèçêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà
4.0
tIOD
Çàäåðæêà âûõîäíîãî ñèãíàëà ÝÂÂ
1.3
tIOC
Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà ÝÂÂ îòíîñèòåëüíî ñèãíàëîâ óïðàâëåíèÿ
0.5
tIOCO
Çàäåðæêà âûõîäíîãî ñèãíàëà ðåãèñòðà ÝÂÂ îòíîñèòåëüíî òàêòà
0.2
tIOCOMB
Çàäåðæêà êîìáèíàöèîííûõ ñõåì ÝÂÂ
0.0
tIOSU
Âðåìÿ óñòàíîâêè ðåãèñòðà ÝÂÂ
2.8
tIOH
Âðåìÿ óäåðæàíèÿ äàííûõ ðåãèñòðà ÝÂÂ
1.0
Çàäåðæêà ñáðîñà ðåãèñòðà ÝÂÂ
1.0
tOD1
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 3.3 Â, slew rate = off
2.6
tOD2
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, VCCIO = 2.5 Â, slew rate = off
4.9
tOD3
Çàäåðæêà ñèãíàëà îò âûõîäíîãî áóôåðà äî âûâîäà, slew rate = on
6.3
tXZ
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà çàïðåùåíèÿ âûõîäà
4.5
tZX1
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 3.3 Â, slew rate = off
4.5
tZX2
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, VCCIO = 2.5 Â, slew rate = off
6.8
tIOCLR
73
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.16 (ïðîäîëæåíèå) Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EPF10K103 [íñ] min max
tINREG
Çàäåðæêà ñèãíàëà â âûõîäíîì áóôåðå ïîñëå ñèãíàëà ðàçðåøåíèÿ âûõîäà, slew rate = on Çàäåðæêà â áóôåðå ÝÂÂ
6.0
tIOFD
Çàäåðæêà â öåïè îáðàòíîé ñâÿçè ðåãèñòðà ÝÂÂ
3.1
3.1
1.5
4.8
1.0
5.0
tEABCLK
Çàäåðæêà ñèãíàëà îò âõîäíîãî áóôåðà ÝÂÂ äî ÃÌÑ Çàäåðæêà äàííûõ èëè àäðåñà ÂÁÏ äî êîìáèíàöèîííîãî âûõîäà ÂÁÏ Çàäåðæêà äàííûõ èëè àäðåñà ÂÁÏ äî ðåãèñòðîâîãî âûõîäà ÂÁÏ Çàäåðæêà äàííûõ ÂÁÏ îòíîñèòåëüíî ñèãíàëà ðàçðåøåíèÿ çàïèñè äî êîìáèíàöèîííîãî âûõîäà ÂÁÏ Çàäåðæêà äàííûõ ÂÁÏ îòíîñèòåëüíî ñèãíàëà ðàçðåøåíèÿ çàïèñè äî ðåãèñòðîâîãî âûõîäà ÂÁÏ Çàäåðæêà òàêòîâîãî èìïóëüñà íà ðåãèñòðå ÂÁÏ
1.0
tEABCO
Çàäåðæêà âûõîäà ÂÁÏ îòíîñèòåëüíî òàêòîâîãî èìïóëüñà
0.5
1.5
1.5
2.0
4.0
5.8
tAA
Âðåìÿ óäåðæàíèÿ ðåãèñòðà ÂÁÏ Äëèòåëüíîñòü âûñîêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà ÂÁÏ Äëèòåëüíîñòü íèçêîãî óðîâíÿ òàêòîâîãî ñèãíàëà ðåãèñòðà ÂÁÏ Âðåìÿ óäåðæàíèÿ àäðåñà
8.7
tWP
Äëèòåëüíîñòü èìïóëüñà çàïèñè ÂÁÏ
5.8
tWDSU
Âðåìÿ óñòàíîâêè äàííûõ äî çàïèñè
1.6
tWDH
Âðåìÿ óäåðæàíèÿ äàííûõ ïðè ñèãíàëå çàïèñè â ÂÁÏ
0.3
tWASU
Âðåìÿ óñòàíîâêè àäðåñà
0.5
tWAH
Âðåìÿ óäåðæàíèÿ àäðåñà Çàäåðæêà äàííûõ íà âûõîäå ÂÁÏ îòíîñèòåëüíî ñèãíàëà ðàçðåøåíèÿ çàïèñè Çàäåðæêà äàííûõ îò âõîäà äî âûõîäà ÂÁÏ
1.0
5.0
5.0
tEABOUT
Çàäåðæêà äàííûõ íà âûõîäå ÂÁÏ
0.5
tEABAA
Âðåìÿ äîñòóïà àäðåñà ÂÁÏ
13.7
13.7
9.7
5.8
tZX3
tINCOMB tEABDATA1 tEABDATA2 tEABWE1 tEABWE2
tEABBYPASS Çàäåðæêà â öåïè îáõîäà ðåãèñòðà ÂÁÏ tEABSU Âðåìÿ óñòàíîâêè ðåãèñòðà ÂÁÏ tEABH tEABCH tEABCL
tWO tDD
tEABRCCOMB Äëèòåëüíîñòü öèêëà àñèíõðîííîãî ÷òåíèÿ èç ÂÁÏ tEABRCREG Äëèòåëüíîñòü öèêëà ñèíõðîííîãî ÷òåíèÿ èç ÂÁÏ tEABWP
Äëèòåëüíîñòü èìïóëüñà çàïèñè ÂÁÏ
74
8.2
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.16 (ïðîäîëæåíèå) Îáîçíà÷åíèå
Ïàðàìåòð
tEABWCCOMB Äëèòåëüíîñòü öèêëà àñèíõðîííîé çàïèñè â ÂÁÏ tEABWCREG Äëèòåëüíîñòü öèêëà ñèíõðîííîé çàïèñè â ÂÁÏ
Çíà÷åíèå äëÿ EPF10K103 [íñ] min max 7.3 13.0
10.0
tEABDATACO Çàäåðæêà äàííûõ íà âûõîäå ÂÁÏ îòíîñèòåëüíî òàêòà
2.0
tEABDATASU Âðåìÿ óñòàíîâêè àäðåñà èëè äàííûõ âî âõîäíîì ðåãèñòðå ÂÁÏ
5.3
tEABDATAH
Âðåìÿ óäåðæàíèÿ àäðåñà èëè äàííûõ íà âõîäå ÂÁÏ
0.0
tEABWESU
Âðåìÿ óñòàíîâêè ñèãíàëà WE
5.5
tEABWESH
Âðåìÿ óäåðæàíèÿ ñèãíàëà WE
0.0
5.5
0.0
2.1
0.0
9.5
tEABDD
tEABWDSU tEABWDH tEABWASU tEABWAH tEABWO
Çàäåðæêà äàííûõ îò âõîäà äî âûõîäà ÂÁÏ
Âðåìÿ óñòàíîâêè âõîäíûõ äàííûõ ÂÁÏ áåç èñïîëüçîâàíèÿ âõîäíîãî ðåãèñòðà Âðåìÿ óäåðæàíèÿ âõîäíûõ äàííûõ ÂÁÏ áåç èñïîëüçîâàíèÿ âõîäíîãî ðåãèñòðà Âðåìÿ óñòàíîâêè àäðåñà ÂÁÏ áåç èñïîëüçîâàíèÿ âõîäíîãî ðåãèñòðà Âðåìÿ óäåðæàíèÿ àäðåñà ÂÁÏ áåç èñïîëüçîâàíèÿ âõîäíîãî ðåãèñòðà Çàäåðæêà äàííûõ íà âûõîäå ÂÁÏ îòíîñèòåëüíî ñèãíàëà ðàçðåøåíèÿ çàïèñè
tSAMELAB
Çàäåðæêà äàííûõ â ËÌÑ
0.6
tSAMEROW
Çàäåðæêà ïåðåäà÷è äàííûõ âíóòðè îäíîé è òîé æå ñòðîêè ÃÌÑ
3.6
0.9
tDIFFROW
Çàäåðæêà ïåðåäà÷è äàííûõ ïî ñòîëáöó ñ îäíîé ñòðîêè ÃÌÑ íà äðóãóþ
4.5
tTWOROWS
Çàäåðæêà ïåðåäà÷è äàííûõ ñ îäíîé ñòðîêè ÃÌÑ íà äðóãóþ
8.1
tLEPERIPH
Çàäåðæêà óïðàâëÿþùåãî ñèãíàëà
3.3
tLABCARRY Çàäåðæêà ïåðåíîñà â ñëåäóþùèé ËÁ
0.5
tLABCASC
2.7
4.8
2.6
3.4
2.6
tSAMECOLUMN Çàäåðæêà ïåðåäà÷è äàííûõ âíóòðè îäíîãî è òîãî æå ÃÌÑ
tDIN2IOE tDIN2LE tDCLK2IOE tDCLK2LE
Çàäåðæêà êàñêàäèðîâàíèÿ â ñëåäóþùèé ËÁ Çàäåðæêà ðàñïðîñòðàíåíèÿ ñ âûäåëåííîãî âûâîäà äî âõîäà óïðàâëåíèÿ ÝÂÂ Çàäåðæêà ðàñïðîñòðàíåíèÿ ñ âûäåëåííîãî âûâîäà äî âõîäà óïðàâëåíèÿ ËÁ èëè ÂÁÏ Çàäåðæêà ðàñïðîñòðàíåíèÿ òàêòîâîãî ñèãíàëà ñ âûäåëåííîãî âûâîäà äî âõîäà òàêòèðîâàíèÿ ÝÂÂ Çàäåðæêà ðàñïðîñòðàíåíèÿ òàêòîâîãî ñèãíàëà ñ âûäåëåííîãî âûâîäà äî âõîäà òàêòèðîâàíèÿ ËÁ èëè ÂÁÏ
75
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.16 (îêîí÷àíèå) Îáîçíà÷åíèå tDIN2DATA
Çíà÷åíèå äëÿ EPF10K103 [íñ] min max
Ïàðàìåòð Çàäåðæêà ðàñïðîñòðàíåíèÿ äàííûõ ñ âûäåëåííîãî âûâîäà äî âõîäà ËÁ èëè ÂÁÏ
4.3
tDPR
Òåñòîâàÿ çàäåðæêà ðåãèñòð-ðåãèñòð ÷åðåç 4 ËÝ, 3 ðÿäà è 4 ËÌÑ
16.1
tINSU
Âðåìÿ óñòàíîâêè ãëîáàëüíîãî òàêòîâîãî èìïóëüñà Âðåìÿ óäåðæàíèÿ äàííûõ îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà Âðåìÿ çàäåðæêè âûõîäíûõ äàííûõ îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà Âðåìÿ óñòàíîâêè äâóíàïðàâëåííîãî âûâîäà îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
5.5
0.0
2.0
6.7
4.5
Âðåìÿ óäåðæàíèÿ äâóíàïðàâëåííîãî âûâîäà îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
0.0
tOUTCOBIDIR
Âðåìÿ çàäåðæêè âûõîäíûõ äàííûõ íà äâóíàïðàâëåííîì âûâîäå îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
2.0
6.7
tXZBIDIR
Çàäåðæêà ïåðåõîäà âûõîäíîãî áóôåðà â òðåòüå ñîñòîÿíèå
10.0
tZXBIDIR
Çàäåðæêà ïåðåõîäà âûõîäíîãî áóôåðà èç òðåòüåãî ñîñòîÿíèÿ
10.0
tINH tOUTCO tISUBIDIR tINHBIDIR
Асинхронное чтение Разрешение записи Адрес
a0
a1
a2
tEABAK Данные
a3
tEABRCCOMB
d0
d1
d2
d3
Асинхронная запись Разрешение записи
tEABWR tEABWPSU
Входные данные
tEABWOH
din0
din1 tEABWAH
tEABWASU tEABWCOCOMB Адрес
a0
a1
a2
Выходные данные
din0
din1
dout2
AL1045+
tEABD0
Ðèñ. 1.45. Àñèíõðîííûå ðåæèìû ÷òåíèÿ è çàïèñè ÂÁÏ ÏËÈÑ ñåìåéñòâà FLEX10K
76
Ýëåìåíòíàÿ áàçà
Разрешение записи
Синхронное чтение
Адрес
a0
a1
a2
tEABOATAH
tEABDATABU Такт
a3
tEABRCREQ
tEABDATACO
Выходные данные
d1
d3
Синхронная запись Разрешение записи Входные данные Адрес
din1 a0
a1 tEABDATASU
tEABWESU
din2
din3
a2
a3
tEABDATAH
a2 tEABWEH
Такт tEABWGREG dout0
dout1
din1
din2
din3
din2
AL1046+
Выходные данные
tEABDATACO
Ðèñ.1.46. Ñèíõðîííûå ðåæèìû ÷òåíèÿ è çàïèñè ÂÁÏ ÏËÈÑ ñåìåéñòâà FLEX10K
77
Ýëåìåíòíàÿ áàçà
1.7. Ñåìåéñòâî APEX20K Ðàçâèòèå è ðàçíîîáðàçèå àðõèòåêòóð ôóíêöèîíàëüíûõ ïðåîáðàçîâàòåëåé, ëåæàùèõ â îñíîâå áàçîâûõ óçëîâ ÏËÈÑ, ïðèâåëè ê òîìó, ÷òî â ïîñëåäíèå ãîäû ÏËÈÑ ñòàíîâÿòñÿ îñíîâîé äëÿ «ñèñòåì íà êðèñòàëëå».  îñíîâå èäåè SOC ëåæèò èíòåãðàöèÿ âñåé ýëåêòðîííîé ñèñòåìû â îäíîì êðèñòàëëå (íàïðèìåð, â ñëó÷àå ÏK òàêîé ÷èï îáúåäèíÿåò ïðîöåññîð, ïàìÿòü è ò.ä.). Kîìïîíåíòû ýòèõ ñèñòåì ðàçðàáàòûâàþòñÿ îòäåëüíî è õðàíÿòñÿ â âèäå ôàéëîâ ïàðàìåòðèçèðóåìûõ ìîäóëåé. Îêîí÷àòåëüíàÿ ñòðóêòóðà SOC-ìèêðîñõåìû âûïîëíÿåòñÿ íà áàçå ýòèõ «âèðòóàëüíûõ êîìïîíåíòîâ», íàçûâàåìûõ òàêæå «áëîêàìè èíòåëëåêòóàëüíîé ñîáñòâåííîñòè» ñ ïîìîùüþ ïðîãðàìì àâòîìàòèçàöèè ïðîåêòèðîâàíèÿ ýëåêòðîííûõ óñòðîéñòâ. Áëàãîäàðÿ ñòàíäàðòèçàöèè â îäíî öåëîå ìîæíî îáúåäèíÿòü «âèðòóàëüíûå êîìïîíåíòû» îò ðàçíûõ ðàçðàáîò÷èêîâ. Èäåÿ ïîñòðîåíèÿ «ñèñòåì íà êðèñòàëëå» ïîäñòåãíóëà âåäóùèõ ïðîèçâîäèòåëåé ÏËÈÑ ê âûïóñêó â êîíöå 1998 íà÷àëå 1999 ãîäà èçäåëèé ñ ýêâèâàëåíòíîé åìêîñòüþ 1000000 ýêâèâàëåíòíûõ âåíòèëåé è áîëåå. Ïðèìåðîì íîâûõ ñåìåéñòâ ÏËÈÑ, ïðèãîäíûõ äëÿ ðåàëèçàöèè «ñèñòåì íà êðèñòàëëå», ÿâëÿåòñÿ ñåìåéñòâî APEX20K ôèðìû «Altera», îñíîâíûå õàðàêòåðèñòèêè êîòîðîãî ïðèâåäåíû â Òàáë. 1.17. Òàáëèöà 1.17. Îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà APEX20K ôèðìû «Altera» Ïàðàìåòð
EP20K EP20K EP20K EP20K 100 160 200 300
EP20K 400
EP20K 600
EP20K 1000
Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî 263 000 404 000 526 000 728 000 1 052 000 1 537 000 2 670 000 ýêâèâàëåíòíûõ âåíòèëåé ×èñëî ëîãè÷åñêèõ ýëåìåíòîâ
4 160
6 400
8 320
11 520
16 640
24 320
42 240
Âñòðîåííûå áëîêè ïàìÿòè
26
40
52
72
104
152
264
311 296
540 672
Ìàêñèìàëüíûé îáúåì ïàìÿòè [áèò]
53 248
81 920 106 496 147 456 212 992
×èñëî ìàêðîÿ÷ååê
416
640
832
1 152
1 664
2 432
4 224
×èñëî âûâîäîâ ïîëüçîâàòåëÿ
252
320
382
420
502
620
780
78
Ýëåìåíòíàÿ áàçà Àðõèòåêòóðà ÏËÈÑ ñåìåéñòâà APEX20K (Ðèñ. 1.47) ñî÷åòàåò â ñåáå äîñòîèíñòâà FPGA ÏËÈÑ ñ èõ òàáëèöàìè ïåðåêîäèðîâîê, âõîäÿùèìè â ñîñòàâ ëîãè÷åñêîãî ýëåìåíòà, ëîãèêó âû÷èñëåíèÿ ÑÄÍÔ (ñîâåðøåííàÿ äèçúþíêòèâíàÿ íîðìàëüíàÿ ôîðìà), õàðàêòåðíóþ äëÿ ÏËÈÑ CPLD, à òàêæå âñòðîåííûå ìîäóëè ïàìÿòè. Îòëè÷èòåëüíîé îñîáåííîñòüþ ÏËÈÑ ñåìåéñòâà APEX20K ÿâëÿåòñÿ îáúåäèíåíèå ËÁ â òàê íàçûâàåìûé ìåãàáëîê (megaLAB) (Ðèñ. 1.48), èìåþùèé ñîáñòâåííóþ íåïðåðûâíóþ ìàòðèöó ñîåäèíåíèé (megaLAB interconnect). Òàêàÿ îðãàíèçàöèÿ ñîåäèíåíèé ïîçâîëÿåò âûäåëèòü äîïîëíèòåëüíûå ðåñóðñû äëÿ òðàññèðîâêè, êðîìå òîãî, â êàæäîì ìåãàáëîêå ìîæåò áûòü ïîëíîñòüþ ðàçâåäåíà òà èëè èíàÿ ôóíêöèîíàëüíî çàêîí÷åííàÿ ÷àñòü ñèñ-
Управление тактовой частотой
ЭВВ
ЭВВ
ЭВВ
ЭВВ
Таблицы перекодировки
Таблицы перекодировки
Таблицы перекодировки
Таблицы перекодировки
МЯ
МЯ
МЯ
МЯ
Память
Память
Память
Память
Таблицы перекодировки
Таблицы перекодировки
Таблицы перекодировки
Таблицы перекодировки
МЯ
МЯ
МЯ
МЯ
Память
Память
Память
Память
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ГМС
ЭВВ
ЭВВ
AL1047+
ЭВВ
ЭВВ
Ðèñ. 1.47. Àðõèòåêòóðà ÏËÈÑ ñåìåéñòâà APEX20K
79
Ýëåìåíòíàÿ áàçà
ЛМС
ЛЭ1
ЛЭ1
ЛЭ2
ЛЭ2
ЛЭ2
ЛЭ3
ЛЭ3
ЛЭ3
ЛЭ4
ЛЭ4
ЛЭ4
ЛЭ5
ЛЭ5
ЛЭ5
ЛЭ6
ЛЭ6
ЛЭ6
ЛЭ7
ЛЭ7
ЛЭ7
ЛЭ8
ЛЭ8
ЛЭ8
ЛЭ9
ЛЭ9
ЛЭ9
ЛЭ10
ЛЭ10
ЛЭ10
ЛБ
ЛБ
ЛМС
Блок памяти
ЛЭ1
AL1048+
К смежному ЛБ
Межсоединение мегаблока
Ðèñ. 1.48. Ñòðóêòóðà ìåãàáëîêà ÏËÈÑ ñåìåéñòâà APEX20K
òåìû, ÷òî ïîçâîëÿåò ïðè åå ìîäèôèêàöèè íå ïåðåòðàññèðîâàòü ýòîò ó÷àñòîê è òåì ñàìûì ñîõðàíèòü âñå çàäàííûå âðåìåííûå ïàðàìåòðû. Òàêæå òàêàÿ îðãàíèçàöèÿ ÏËÈÑ ïîçâîëÿåò ðàçóìíåå îðãàíèçîâàòü ñîîòâåòñòâóþùåå ïðîãðàììíîå îáåñïå÷åíèå, â òîì ÷èñëå ñîçäàòü ñðåäñòâà êîëëåêòèâíîé ðàáîòû íàä ïðîåêòîì. Íà Ðèñ. 1.49 ïðåäñòàâëåíà ñòðóêòóðà ËÁ ÏËÈÑ ñåìåéñòâà APEX20K. Kàæäûé ËÁ ñîñòîèò èç 10 ËÝ, èìåþùèõ ñòðóêòóðó, ïîêàçàííóþ íà Ðèñ. 1.50. Kàê ìîæíî çàìåòèòü, ñòðóêòóðà ËÁ îáúåäèíÿåò âñå ëó÷øåå, ÷òî íàðàáîòàíî â ïðåäøåñòâóþùèõ ñåìåéñòâàõ ÏËÈÑ. Kàæäûé ËÝ èìååò âîçìîæíîñòü êîììóòàöèè íà äâà ñòîëáöà ÃÌÑ, ïîäîáíî ÏËÈÑ ñåìåéñòâà FLEX6000. Ìàòðèöà ñîåäèíåíèé ìåãàáëîêà (ÌÑÌ) êîììóòèðóåòñÿ íà ËÌÑ ËÁ è íà ñòðîêè ÃÌÑ.  îòëè÷èå îò ñåìåéñòâ FLEX, ËÝ ÏËÈÑ ñåìåéñòâà APEX20K èìååò âîçìîæíîñòü ôîðìèðîâàíèÿ óïðàâëÿþùèõ ñèãíàëîâ òðèããåðà êàê ñ ïîìîùüþ ãëîáàëüíûõ è ëîêàëüíûõ ñèãíàëîâ, òàê è èñïîëüçóÿ ñèãíàëû ìåãàáëîêà. Àíàëîãè÷íî ñåìåéñòâàì FLEX ËÝ ìîæåò áûòü ñêîíôèãóðèðîâàí â íîðìàëüíîì, àðèôìåòè÷åñêîì èëè ñ÷åòíîì ðåæèìå, äîïóñêàåò êàñêàäèðîâàíèå è öåïî÷å÷íûé ïåðåíîñ.
80
Ýëåìåíòíàÿ áàçà
Строка ГМС
Межсоединение мегаблока ( МСМ ) ЛМС 10 ЛЭ
Столбец ГМС
AL1049+
К смежному ЛБ или ЭВВ
Ðèñ. 1.49. Ñòðóêòóðà ËÁ
Вход переноса Data1 Data2 Data3 Data4 Labctrl1 Labctrl2 Сброс
ТП
Цепь переноса
Синхронная Синхронный Вход каскадирования установка сброс Цепи каскадирования
Логика синхронного сброса и установки
Асинхронный сброс/ установка Синхронизация
PRN D
Labclk1
Q
К ГМС, МСМ, ЛМС
Labclk2
Labclkena2
Выход переноса
Выход каскадировании
Ðèñ. 1.50. Ëîãè÷åñêèé ýëåìåíò ÏËÈÑ ñåìåéñòâà APEX20K
81
К ГМС, МСМ, ЛМС AL1050+
ENA CLRN
Labclkena1
Ýëåìåíòíàÿ áàçà Ñòðóêòóðà ñîåäèíåíèé ïðèâåäåíà íà Ðèñ. 1.51. Ïîäîáíî ÏËÈÑ ñåìåéñòâà ÌÀÕ, â ñîñòàâ ÏËÈÑ ñåìåéñòâà ÀÐÅÕ20K âõîäÿò ìàêðîÿ÷åéêè, èìåþùèå ïðîãðàììèðóåìóþ ìàòðèöó «È» è ïàðàëëåëüíûé ðàñøèðèòåëü. Îòëè÷èòåëüíîé îñîáåííîñòüþ ÏËÈÑ ñåìåéñòâà ÀÐÅÕ20K ÿâëÿþòñÿ ñèñòåìíûå áëîêè ïàìÿòè (ÑÁÏ, ESB embedded system block), ïîêàçàííûå íà Ðèñ. 1.53. Îòëè÷èòåëüíîé îñîáåííîñòüþ ÑÁÏ ÿâëÿåòñÿ òî, ÷òî îí ìîæåò áûòü ñêîíôèãóðèðîâàí êàê êîíòåêñòíî-àäðåñóåìàÿ ïàìÿòü (ò.å. ïàìÿòü, àäðåñóåìàÿ ïî åå ñîäåðæèìîìó) èëè êàê äâóõïîðòîâàÿ ïàìÿòü, ÷òî ñóùåñòâåííî ðàñøèðÿåò âîçìîæíîñòè ïðèìåíåíèÿ. Íà Ðèñ. 1.54 ïðèâåäåíà îðãàíèçàöèÿ áëîêà ââîäà/âûâîäà (ÁÂÂ). Kàæäûé Á ìîæåò áûòü ñêîíôèãóðèðîâàí â ñîîòâåòñòâèè ñ ðàçëè÷íûìè óðîâíÿìè ëîãè÷åñêèõ ñèãíàëîâ, ñóùåñòâóåò òàêæå äâà áëîêà, ïîääåðæèâàþùèõ ñêîðîñòíîé èíòåðôåéñ LVDS. Òàêàÿ îðãàíèçàöèÿ ââîäà/âûâîäà ïîçâîëÿåò èñïîëüçîâàòü ÏËÈÑ â ñèñòåìàõ ñ ðàçëè÷íûìè óðîâíÿìè ñèãíàëîâ. Kàê è ñåìåéñòâà FLEX, ÏËÈÑ ñåìåéñòâà ÀÐÅÕ20K ïîääåðæèâàåò ñïåöèôèêàöèþ óðîâíåé PCI.  Òàáë. 1.18 ïðèâåäåíû âðåìåííûå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà APEX20K. ЭВВ
ЭВВ
ЭВВ
ЭВВ
Строка ГМС
ЭВВ
MegaLAB
MegaLAB
MegaLAB
MegaLAB
ЭВВ
ЭВВ
MegaLAB
MegaLAB
MegaLAB
MegaLAB
ЭВВ
MegaLAB
MegaLAB
MegaLAB
ЭВВ
ЭВВ
MegaLAB
ЭВВ
ЭВВ
ЭВВ
Ðèñ. 1.51. Ñòðóêòóðà ñîåäèíåíèé ÏËÈÑ ñåìåéñòâà APEX20K
82
ЭВВ
AL1051+
Столбец ГМС
Ýëåìåíòíàÿ áàçà
Разрешение синхро- СинхроСброс низации низация 2
2
2
Параллельный расширитель
Матрица распределения термов
Выход МЯ Прогр. регистр D
Q
ENA CLRN
Сброс
Ðèñ. 1.52. Ìàêðîÿ÷åéêà ÏËÈÑ ñåìåéñòâà APEX20K
WRADDRESS
RDADDRESS
DATA
Q
WREN
RDEN
INCLOCK
OUTCLOCK
INACLR
OUTCLOCKEN OUTACLR
Ðèñ. 1.53. Ñèñòåìíûé áëîê ïàìÿòè
83
AL1053+
INCLOCKEN
AL1052+
32 сигналов ПМС
Ýëåìåíòíàÿ áàçà
БВВ N2
Блок выходов LVDS
БВВ N3
БВВ N4
Поддерживаемые стандарты LVTTL LVCMOS 2.5-V 1.8-V 3.3V PCI GTL+ SSTL-3 CLASS I AND II SSTL-2 CLASS I AND II HSTL CLASS I,II,III,IV CTT AGP
БВВ N7
БВВ N0
Входной блок LVDS
БВВ N1
БВВ N5
AL1054+
БВВ N6
Ðèñ. 1.54. Îðãàíèçàöèÿ ââîäà/âûâîäà Òàáëèöà 1.18. Âðåìåííûå ïàðàìåòðû ÏËÈÑ ñåìåéñòâà APEX20K Îáîçíà÷åíèå
Ïàðàìåòð
Çíà÷åíèå äëÿ EP20K1001 [íñ] min max
tINSU
Âðåìÿ óñòàíîâêè ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
2.1
tINH
Âðåìÿ óäåðæàíèÿ äàííûõ îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
0.0
Âðåìÿ çàäåðæêè âûõîäíûõ äàííûõ îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
2.0
4.0
tISUBIDIR
Âðåìÿ óñòàíîâêè äâóíàïðàâëåííîãî âûâîäà îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
1.1
tINHBIDIR
Âðåìÿ óäåðæàíèÿ äâóíàïðàâëåííîãî âûâîäà îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
0.0
Âðåìÿ çàäåðæêè âûõîäíûõ äàííûõ íà äâóíàïðàâëåííîì âûâîäå îòíîñèòåëüíî ãëîáàëüíîãî òàêòîâîãî èìïóëüñà
2.0
4.0
tXZBIDIR
Çàäåðæêà ïåðåõîäà âûõîäíîãî áóôåðà â òðåòüå ñîñòîÿíèå
4.8
tZXBIDIR
Çàäåðæêà ïåðåõîäà âûõîäíîãî áóôåðà èç òðåòüåãî ñîñòîÿíèÿ
5.9
tOUTCO
tOUTCOBIDIR
84
Ýëåìåíòíàÿ áàçà
1.8. Ñåìåéñòâî Mercury Íîâîå ñåìåéñòâî Mercury áûëî âûïóùåíî íà ðûíîê ôèðìîé «Altera» â íà÷àëå 2001 ãîäà. Äàííûå óñòðîéñòâà ïðåäñòàâëÿþò ñîáîé ïðèíöèïèàëüíî íîâûé êëàññ ÏËÈÑ, îðèåíòèðîâàííûõ íà ïðèëîæåíèÿ äëÿ êîììóíèêàöèé è îáðàáîòêè ñèãíàëîâ. Îòëè÷èòåëüíûìè ÷åðòàìè ñåìåéñòâà Mercury ÿâëÿþòñÿ: èíòåãðèðîâàííûå âûñîêîñêîðîñòíûå ïðèåìîïåðåäàò÷èêè, ïîääåðæèâàþùèå ñèíõðîííîå âîññòàíîâëåíèå äàííûõ (Clock Data Recovery, CDR), ïîçâîëÿþùèå îðãàíèçîâàòü ïåðåäà÷ó è ïðèåì äàííûõ íà ñêîðîñòÿõ äî 1.25 Ãáèò/c (Gbps); àðõèòåêòóðà ëîãè÷åñêîãî ýëåìåíòà îñíîâàíà íà òðàäèöèîííîé òàáëèöå ïåðåêîäèðîâîê, îïòèìèçèðîâàíà ïîä âûñîêèå òåìïû îáðàáîòêè äàííûõ; íîâàÿ àðõèòåêòóðà áûñòðûõ ìåæñîåäèíåíèé âíóòðè êðèñòàëëà äëÿ óìåíüøåíèÿ çàäåðæåê â êðèòè÷åñêèõ ïóòÿõ; ýëåìåíòû ââîäà/âûâîäà ïîääåðæèâàþò ìíîæåñòâî ñòàíäàðòíûõ èíòåðôåéñîâ îáìåíà äàííûìè; ÏËÈÑ ñåìåéñòâà Mercury ñîäåðæàò äî 14 400 ëîãè÷åñêèõ ýëåìåíòîâ; òàêòèðîâàíèå ñ óìíîæåíèåì ÷àñòîòû îáåñïå÷èâàåòñÿ ñõåìàìè ôàçîâîé àâòîïîäñòðîéêè ÷àñòîòû (Phase-Locked Loop, PLL) ñ ïðîãðàììèðóåìûì êîýôôèöèåíòîì óìíîæåíèÿ ÷àñòîòû è ñäâèãîì ôàçû îïîðíîãî ñèãíàëà; ÏËÈÑ ñåìåéñòâà Mercury èìåþò äî 12 âûõîäîâ ÔÀÏ×; ñïåöèàëèçèðîâàííàÿ ñõåìà äëÿ ðåàëèçàöèè àïïàðàòíûõ óìíîæèòåëåé (êàê çíàêîâûõ, òàê è áåççíàêîâûõ), ïîçâîëÿþùàÿ ðåàëèçîâàòü óìíîæèòåëè ðàçðÿäíîñòüþ äî 16×16; ÏËÈÑ ñåìåéñòâà Mercury èìåþò âñòðîåííûå ñèñòåìíûå áëîêè ïàìÿòè (Embedded System Blocks, ESBs), íà êîòîðûõ âîçìîæíî ðåàëèçîâàòü ðàçíîîáðàçíûå óñòðîéñòâà ïàìÿòè, òàêèå, êàê ÷åòûðåõïîðòîâîå ÎÇÓ (quadport RAM), äâóíàïðàâëåííûå äâóõïîðòîâûå ÎÇÓ (bidirectional dual-port RAM), áóôåðû FIFO, ïàìÿòü ñ àäðåñàöèåé ïî ñîäåðæèìîìó (ContentAddressable Memory, CAM); êàæäûé ñèñòåìíûé áëîê ïàìÿòè ñîäåðæèò 4096 áèò è ìîæåò áûòü ñêîíôèãóðèðîâàí äëÿ èñïîëüçîâàíèÿ êàê äâà îäíîíàïðàâëåííûõ äâóõïîðòîâûõ ÎÇÓ ïî 2048 áèò êàæäîå.  Òàáë. 1.19 ïðèâåäåíû îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà Mercury.
85
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.19. Îñíîâíûå õàðàêòåðèñòèêè ÏËÈÑ ñåìåéñòâà Mercury Ïàðàìåòð
EP1M120
EP1M350
120 000
350 000
8
18
4 800
14 400
×èñëî ñèñòåìíûõ áëîêîâ ïàìÿòè
12
28
Îáúåì âñòðîåííîé ïàìÿòè [áèò]
49 152
114 688
×èñëî ïîëüçîâàòåëüñêèõ âûâîäîâ
303
486
Ëîãè÷åñêàÿ åìêîñòü, êîëè÷åñòâî ýêâèâàëåíòíûõ âåíòèëåé ×èñëî âûñîêîñêîðîñòíûõ äèôôåðåíöèàëüíûõ êàíàëîâ ââîäà/âûâîäà ×èñëî ëîãè÷åñêèõ ýëåìåíòîâ
Îñîáåííîñòè ýëåìåíòîâ ââîäà/âûâîäà ïîääåðæêà îãðîìíîãî ÷èñëà ñòàíäàðòíûõ èíòåðôåéñîâ, òàêèõ êàê LVTTL, PCI (äî 66 ÌÃö), PCI-X (äî 133 ÌÃö), 3.3- AGP, 3.3-V SSTL, 3- è 2.5- SSTL-2, GTL+, HSTL, CTT, LVDS, LVPECL è PCML. Âûñîêîñêîðîñòíîé äèôôåðåíöèàëüíûé èíòåðôåéñ (High-Speed Differential Interface, HSDI) ñ âñòðîåííîé ñèíõðîííîé ñõåìîé ñèíõðîííîãî âîññòàíîâëåíèÿ äàííûõ îáåñïå÷èâàåò ñêîðîñòü ïåðåäà÷è äàííûõ äî 1.25 Ãèãàáèòà â ñåêóíäó äëÿ óðîâíåé LVDS, LVPECL è PCML. Ïðè èñïîëüçîâàíèè âíåøíåé ñèíõðîíèçàöèè îáåñïå÷èâàåòñÿ ñêîðîñòü äî 840 Ìáèò/ñ äëÿ óðîâíåé LVDS, LVPECL è PCML. Âîçìîæíî èñïîëüçîâàòü äî 18 äèôôåðåíöèàëüíûõ êàíàëîâ íà âõîä è äî 18 íà âûõîä, ïîääåðæèâàÿ óðîâíè LVDS, LVPECL èëè PCML. Ãèáêàÿ âñòðîåííàÿ ñõåìà LVDS TM îáåñïå÷èâàåò ïðîèçâîäèòåëüíîñòü îáìåíà äî 332 Ìáèò/ñ ïî 100 êàíàëàì (äëÿ óñòðîéñòâà EP1M350). Ýëåìåíòû ââîäà/âûâîäà ïîääåðæèâàþò óäâîåííóþ ñêîðîñòü îáìåíà äàííûìè (Double Data Rate I/O, DDRIO), ÷òî ïîçâîëÿåò ðàáîòàòü ñ DDR SDRAM, ïàìÿòüþ ñ íóëåâûì âîçâðàùåíèåì øèíû (Zero Bus Turnaround, ZBT SRAM) è ïàìÿòüþ ñ ÷åòûðåõêðàòíûì óñêîðåíèåì îáìåíà (Quad Data Rate, QDR SRAM). Íàïðÿæåíèå ïèòàíèÿ ÏËÈÑ ñåìåéñòâà Mercury ñîñòàâëÿåò 1.8  äëÿ âíóòðåííèõ ÿ÷ååê (VCCINT ) è ïîääåðæêó ðàçëè÷íûõ óðîâíåé äëÿ íàïðÿæåíèÿ ïèòàíèÿ Ý (VCCIO ) 1.5, 1.8, 2.5, 3.3 Â. Äëÿ ðàáîòû ñ 5-âîëüòîâûìè ñõåìàìè íåîáõîäèìû âíåøíèå ïîäñòðàèâàþùèå ðåçèñòîðû. Ñòðóêòóðà ìåæñîåäèíåíèé èìååò ìíîãîóðîâíåâûé õàðàêòåð, ÷òî îáåñïå÷èâàåò õîðîøóþ òðàññèðóåìîñòü ïðîåêòà.
86
Ýëåìåíòíàÿ áàçà  îáùåì, ìîæíî ñêàçàòü, ÷òî ÏËÈÑ ñåìåéñòâà Mercury èíòåãðèðóþò â ñåáå âñòðîåííûå äèôôåðåíöèàëüíûå ÝÂÂ, ïîääåðæèâàþùèå ñêîðîñòíîé îáìåí äàííûìè è îïòèìèçèðîâàííóþ âíóòðåííþþ àðõèòåêòóðó. Àðõèòåêòóðà ÏËÈÑ ñåìåéñòâà Mercury ñïåöèàëüíî îïòèìèçèðîâàíà ïîä èñïîëüçîâàíèå ìåãàôóíêöèé. Ïðè ýòîì ïðîèçâîäèòåëüíîñòü ýòèõ óñòðîéñòâ çíà÷èòåëüíî âîçðîñëà ïî ñðàâíåíèþ ñ äðóãèìè ñåìåéñòâàìè (ñì. Òàáë. 1.20), ÷òî äåëàåò èõ î÷åíü ïðèâëåêàòåëüíûìè â ñèãíàëüíûõ çàäà÷àõ. Òàáëèöà 1.20. Ïðîèçâîäèòåëüíîñòü ÏËÈÑ ñåìåéñòâà Mercury Ðåñóðñû ÏËÈÑ
Ïðèëîæåíèå
Ïðîèçâîäèòåëüíîñòü
ËÝ
ÑÁÏ
16-ðàçðÿäíûé çàãðóæàåìûé ñ÷åò÷èê
16
0
333 ÌÃö
32-ðàçðÿäíûé çàãðóæàåìûé ñ÷åò÷èê
32
0
333 ÌÃö
32-ðàçðÿäíûé íàêàïëèâàþùèé ñóììàòîð
32
0
333 ÌÃö
Ìóëüòèïëåêñîð 32 â 1
27
0
1.7 íñ
32×64 FIFO
103
2
311 ÌÃö
ÏËÈÑ ñåìåéñòâà Mercury ïîñòðîåíû ïî òåõíîëîãèè ÊÌÎÏ SRAM è ìîãóò áûòü ñêîíôèãóðèðîâàíû ëèáî ñ âíåøíåãî ÏÇÓ, ëèáî îò êîíòðîëëåðà ñèñòåìû. Áåçóñëîâíî, ïîääåðæèâàþòñÿ âñå ôóíêöèè ïðîãðàììèðîâàíèÿ â ñèñòåìå.  êà÷åñòâå ñðåäñòâà ðàçðàáîòêè ïðîåêòîâ íà ÏËÈÑ ñåìåéñòâà Mercury èñïîëüçóåòñÿ ïàêåò Quartus II. Àðõèòåêòóðà ÏËÈÑ ñåìåéñòâà Mercury ñîñòîèò èç ðÿäîâ ËÝ, âûïîëíÿþùèõ ôóíêöèè ñòàíäàðòíîé ëîãèêè (row-based logic array), è ðÿäîâ âñòðîåííûõ ñèñòåìíûõ áëîêîâ ïàìÿòè (row-based embedded system array), êîòîðûå ìîãóò áûòü òàêæå ñêîíôèãóðèðîâàíû äëÿ ðåàëèçàöèè ñëîæíûõ ôóíêöèé. Âíóòðåííèå ìåæñîåäèíåíèÿ â ÏËÈÑ ñåìåéñòâà Mercury ïðåäñòàâëÿþò íàáîð âåðòèêàëüíûõ è ãîðèçîíòàëüíûõ òðàññ ðàçëè÷íîé äëèíû è îáåñïå÷èâàþùèõ ðàçëè÷íóþ ñêîðîñòü ðàñïðîñòðàíåíèÿ ñèãíàëà.  îòëè÷èå îò ÏËÈÑ äðóãèõ ñåìåéñòâ, â ÏËÈÑ ñåìåéñòâà Mercury ýëåìåíòû ââîäà/âûâîäà ðàñïîëîæåíû ïî âñåé ïëîùàäè ñèãíàëà, ÷òî îáåñïå÷èâàåò âîçìîæíîñòü ðåàëèçàöèè ñêîðîñòíîãî îáìåíà. Kàæäûé âûâîä óïðàâëÿåòñÿ ñâîèì ÝÂÂ.
87
Ýëåìåíòíàÿ áàçà Íà Ðèñ. 1.55 ïðèâåäåíà ñòðóêòóðà ÏËÈÑ ñåìåéñòâà Mercury. ÏËÈÑ ñåìåéñòâà Mercury èìåþò ÷åòûðå âûäåëåííûå ëèíèè òàêòîâûõ ñèãíàëîâ (dedicated clock) è øåñòü âûäåëåííûõ ãëîáàëüíûõ ëèíèé ñèãíàëîâ óïðàâëåíèÿ. Ñëåäóåò çàìåòèòü, ÷òî â ÏËÈÑ ñåìåéñòâà Mercury âûäåëåííûå ëèíèè ìîãóò óïðàâëÿòñÿ âíóòðåííèìè ñèãíàëàìè, ÷òî çíà÷èòåëüíî îáëåã÷àåò ïîñòðîåíèå ñõåì ñèíõðîíèçàöèè (òåïåðü íå íóæíî «ãîíÿòü» ñèãíàë èç ÏËÈÑ â ÏËÈÑ äëÿ ðåàëèçàöèè äåëèòåëåé ÷àñòîòû). Kðîìå òîãî, öåïè ñèíõðîíèçàöèè ìîæåò èñïîëüçîâàòü ÔÀÏ× äëÿ óìíîæåíèÿ ÷àñòîòû.  ÏËÈÑ ñåìåéñòâà Mercury ðåàëèçîâàí âñòðîåííûé âûñîêîñêîðîñòíîé äèôôåðåíöèàëüíûé èíòåðôåéñ, ïîçâîëÿþùèé ðåàëèçîâàòü îáìåí ñî ñêîðîñòüþ äî 1.25 Ãèãàáèò â ñåêóíäó. Ñòðóêòóðíàÿ ñõåìà ñèíõðîííîãî ïðèåìà äàííûõ ïðèâåäåíà íà Ðèñ. 1.56. Ñòðóêòóðíàÿ ñõåìà ñèíõðîííîé ïåðåäà÷è äàííûõ ïðèâåäåíà íà Ðèñ. 1.57. Ñõåìà âûñîêîñêîðîñòíîãî äèôôåðåíöèàëüíîãî èíòåðôåéñà óäîáíà äëÿ òàêèõ ïðèëîæåíèé, êàê Gigabit Ethernet, ATM, SONET, RapidIO, POS-PHY Level 4, Fibre Channel, IEEE Std. 1394, HDTV, SDTV. Ñõåìà ïîääåðæèâàåò ðåæèìû ñ âíåøíåé ñèíõðîíèçàöèåé (source-synchronous mode) è ñèíõðîííûì âîññòàíîâëåíèåì äàííûõ (Clock Data Recovery (CDR) mode) (Ðèñ. 1.58). Kàæäûé ëîãè÷åñêèé áëîê ñîäåðæèò 10 ëîãè÷åñêèõ ýëåìåíòîâ, öåïè ïåðåíîñà ËÝ, ñõåìó àïïàðàòíîãî óìíîæåíèÿ (multiplier circuitry), ñèãíàëû óïðàâëåíèÿ è äâà òèïà ìåæñîåäèíåíèé ëîêàëüíóþ ìàòðèöó (local interconnect) è áûñòðûå öåïè äëÿ îáúåäèíåíèÿ òàáëèö ïåðåêîäèðîâêè (Fast LUT). Ñòðóêòóðà ËÁ ÏËÈÑ ñåìåéñòâà Mercury ïðèâåäåíà íà Ðèñ. 1.59. Ñòðóêòóðíàÿ ñõåìà óïðàâëÿþùèõ ñèãíàëîâ ËÁ (LAB Control Signals) ïðèâåäåíà íà Ðèñ. 1.60. Kàæäûé ËÁ èìååò âûäåëåííûå òàêòîâûé ñèãíàë (clock), ñèãíàë ðàçðåøåíèÿ òàêòîâîãî èìïóëüñà (clock enable), àñèíõðîííûé ñáðîñ (asynchronous clear), àñèíõðîííóþ ïðåäóñòàíîâêó (asynchronous preset), àñèíõðîííóþ çàãðóçêó (asynchronous load), ñèíõðîííûé ñáðîñ (synchronous clear) è ñèãíàë ñèíõðîííîé çàãðóçêè (synchronous load). Îäíîâðåìåííî ìîæåò áûòü çàäåéñòâîâàíî äî 6 ñèãíàëîâ óïðàâëåíèÿ. Ñòðóêòóðà ëîãè÷åñêîãî ýëåìåíòà ÏËÈÑ ñåìåéñòâà Mercury íàïîìèíàåò ñòðóêòóðó ËÝ ñåìåéñòâ FLEX è APEX. Kàæäûé ËÝ ñîäåðæèò ÷åòûðåõâõîäîâóþ ÒÏ, öåïè ïåðåíîñà è êàñêàäèðîâàíèÿ, òðèããåð. Åäèíñòâåííîå ñåðüåçíîå îòëè÷èå äîïîëíèòåëüíûå öåïè ïåðåíîñà, ÷òî ïîçâîëÿåò ñòðîèòü âûñîêîïðîèçâîäèòåëüíûå àðèôìåòè÷åñêèå óñòðîéñòâà. Ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà Mercury ïðèâåäåíà íà Ðèñ. 1.61.
88
89 СБП
Ðèñ. 1.55. Ñòðóêòóðà ÏËÈÑ ñåìåéñòâà Mercury
Быстрые горизонтальные локальные соединения
Быстрые вертикальные локальные соединения
Вертикальные межсоединения и быстрые вертикальные межсоединения
Горизонтальные межсоединения и быстрые горизонтальные межсоединения
Локальные межсоединения
СБП
СБП
СБП Группа ЭВВ
СБП
СБП
СБП
СБП
Группа ЭВВ СБП
Внешний ряд логических блоков
Внутренний ряд логических блоков
Внешний ряд логических блоков
Группа ЭВВ
Внутренний ряд логических блоков
Внутренний ряд логических блоков
Внешний ряд логических блоков
Группа ЭВВ
Внутренний ряд логических блоков
Внутренний ряд логических блоков
Внешний ряд логических блоков
Группа ЭВВ
Внутренний ряд логических блоков
Внутренний ряд логических блоков
Внешний ряд логических блоков
СБП
СБП
СБП
Ýëåìåíòíàÿ áàçà
AL1055+
Ýëåìåíòíàÿ áàçà
J
Приемный канал
HSDI_CLK2
HSDI PLL2
Регистр с последовательной загрузкой и параллельной выдачей данных
К глобальным цепям тактовой частоты
1 J
×W
к ЛЭ
Приемный канал 1 Приемный канал
Приемный канал
AL1056+
Приемный канал 2
Приемный канал 8
Ðèñ. 1.56. Ñèíõðîííûé ïðèåì äàííûõ
J Передающий канал
HSDI_CLK1
HSDI PLL1
TXOUTCLOCK
×W ×
1 J
W B
Данные к ЛЭ
Передающий канал 1
Передающий канал
Передающий канал 2
Передающий канал
Передающий канал 8
Ðèñ. 1.57. Ñèíõðîííàÿ ïåðåäà÷à äàííûõ
90
AL1057+
Глобальный сигнал синхронизации
Регистр с параллельной загрузкой и последовательной выдачей данных
Ýëåìåíòíàÿ áàçà
4 Передающий канал
Передающий канал 1
Приемный канал
4
HSDI_CLK1
PLL1
×W
HSDI_CLK2
PLL2
×W
Приемный канал 1
J Регистр с параллельной загрузкой и последовательной выдачей данных
Передающий канал
Регистр с последовательной загрузкой и параллельной выдачей данных
от ЛЭ
4
1 J Передающий канал 4
J
Приемный канал
CAU
1 J
Регистр с последовательной загрузкой и параллельной выдачей данных
Регистр с параллельной загрузкой и последовательной выдачей данных
к ЛЭ
4
Приемный канал 4
Такт 4
Передающий канал
Передающий канал 5
Приемный канал
4 Приемный канал 5
Такт
4 Передающий канал
Приемный канал 8
Ðèñ. 1.58. Ðåæèì ñèíõðîííîãî âîññòàíîâëåíèÿ äàííûõ
91
4
AL1058+
Передающий канал 8
Приемный канал
Ýëåìåíòíàÿ áàçà
Горизонтальные межсоединения и быстрые горизонтальные межсоединения
Быстрые горизонтальные локальные соединения
Локальные межсоединения
Быстрые вертикальные локальные соединения
AL1059+
Вертикальные межсоединения и быстрые вертикальные межсоединения
Ðèñ. 1.59. Ëîãè÷åñêèé áëîê ÏËÈÑ ñåìåéñòâà Mercury
Kàæäûé ËÝ ìîæåò áûòü ñêîíôèãóðèðîâàí â òðåõ ðåæèìàõ: îáû÷íîì (normal), àðèôìåòè÷åñêîì (arithmetic) è ðåæèìå àïïàðàòíîãî óìíîæèòåëÿ (multiplier). Íîðìàëüíûé è àðèôìåòè÷åñêèé ðåæèìû âî ìíîãîì àíàëîãè÷íû ñîîòâåòñòâóþùèì ðåæèìàì ðàáîòû ËÝ ÏËÈÑ ñåìåéñòâ FLEX è APEX, îòëè÷èå òîëüêî â íàëè÷èè äîïîëíèòåëüíûõ öåïåé ïåðåíîñà, ÷òî ïîçâîëÿåò ñòðîèòü ìíîãîðàçðÿäíûå áûñòðûå àðèôìåòè÷åñêèå óçëû.  ðåæèìå ïåðåìíîæèòåëÿ (multiplier mode) ìîæíî ðåàëèçîâàòü ñêîðîñòíîé ïåðåìíîæèòåëü ðàçìåðíîñòüþ äî 16⫻16. Ñòðóêòóðíàÿ ñõåìà ýòîãî ðåæèìà ïðèâåäåíà íà Ðèñ. 1.62.
92
Ýëåìåíòíàÿ áàçà Выделенные тактовые частоты
4
Быстрые глобальные сигналы
6
Горизонтальные глобальные сигналы
2
Локальные межсоединения Локальные межсоединения Локальные межсоединения Локальные межсоединения
SYNCCLR or LABCLK2
SYNCLOAD or LABCLKENA2
LABCLK1
LABCLKENA1
LABCLR
AL1060+
ASYNCLOAD or LABPRE
Ðèñ. 1.60. Óïðàâëÿþùèå ñèãíàëû ËÁ ÏËÈÑ ñåìåéñòâà Mercury
LAB CarryGIn CarryGIn1 CarryGIn0 data1 data2 data3 data4 (1)
labdr labpre ChipGWide Reset
Таблица Цепи переG переноса кодировки
LABGwide Synchronous Load
LABGwide Synchronous Clear Цепи ТП
Цепи сбросаG загрузки (синхронные)
PRN D G
к межсоG единениям
ENA CLRN
к межсоG единениям
Цепи сбросаG установки (асинхронные) Цепи тактирования
labdk1 labdk2
CarryGOut0 CarryGOut1 LAB CarryGOut (2)
Ðèñ. 1.61. Ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà Mercury
93
AL1061+
labdkena1 labdkena2
Ýëåìåíòíàÿ áàçà LAB Wide Clock Enable Signals (1) Combinational Sum Output Combinational Sum Output
LAB CarryGIn CarryGIn0 CarryGIn1
RapidLAB Interconnect (2) Выход ЛЭ
BM+1
Программируемый инвертор
AN+1
Программируемый инвертор
BM
Программируемый инвертор
D
Полный сумматор
LAB CarryGOut
Выход ЛЭ
Q
ENA CLRN
Registered Sum Output
CarryGOut1
CarryGOut0
AL1062+
AN
Программируемый инвертор
Ðèñ. 1.62. Ñòðóêòóðà ËÝ ÏËÈÑ ñåìåéñòâà Mercury â ðåæèìå ïåðåìíîæèòåëÿ ñèãíàëîâ
Äëÿ ïîñòðîåíèÿ ïåðåìíîæèòåëåé â ÏËÈÑ ñåìåéñòâà Mercury èñïîëüçóåòñÿ áèíàðíîå äåðåâî. Íà Ðèñ. 1.63 ïðèâåäåíà åãî ñòðóêòóðà. Íà äâîè÷íîì äåðåâå ðåàëèçóåòñÿ ïðîèçâåäåíèå 16-ðàçðÿäíûõ ÷èñåë A[15:0] è B[15:0], ðåçóëüòàò ïåðâîé ñòóïåíè 16 øåñòíàäöàòèðàçðÿäíûõ ÷àñòè÷íûõ ïðîèçâåäåíèé A[15:0]B[15], A[15:0]B[14], . . . A[15:0]B[0]. ×àñòè÷íûå ïðîèçâåäåíèÿ ãðóïïèðóþòñÿ â ïàðû è ñóììèðóþòñÿ íà âòîðîé ñòóïåíè è ò.ä. ÏËÈÑ ñåìåéñòâà Mercury èìåþò ìíîãîóðîâíåâóþ ñòðóêòóðó ìåæñîåäèíåíèé (Multi-Level FastTrack Interconnect), êîòîðàÿ îáåñïå÷èâàåò âûñîêèå ñêîðîñòíûå õàðàêòåðèñòèêè ÏËÈÑ. Ìíîãîóðîâíåâàÿ ñòðóêòóðà ïîçâîëÿåò òðàññèðîâàòü îòâåòñòâåííûå öåïè íåïðåðûâíî, ÷òî çíà÷èòåëüíî ïîâûøàåò áûñòðîäåéñòâèå. Ðåñóðñû òðàññèðîâêè âêëþ÷àþò: ãîðèçîíòàëüíûå ëèíèè ñîåäèíåíèé (row interconnect); ïðèîðèòåòíûå ãîðèçîíòàëüíûå ëèíèè ñîåäèíåíèé (priority row interconnect) äëÿ áûñòðûõ ñèãíàëîâ; ãîðèçîíòàëüíûå ëèíèè (RapidLAB), êîòîðûå ïåðåñåêàþò îáëàñòü â 10 ËÁ â öåíòðå êðèñòàëëà (Ðèñ. 1.64). Âåðòèêàëüíûå ëèíèè ñîåäèíåíèé ïðåäñòàâëåíû ñëåäóþùèìè âèäàìè: ñòîëáöû ìàòðèöû ñîåäèíåíèé (column interconnect);
94
Ýëåìåíòíàÿ áàçà
Разряды B[0]…B[7]
A[15...0]B[8] Выход A[15...0]B[9]
A[15...0]B[10]
A[15...0]B[11]
A[15...0]B[12]
Ступень 5
A[15...0]B[13]
Ступень 4
A[15...0]B[14]
Ступень 3
A[15...0]B[15]
AL1063+
Ступень 2 Ступень 1
Ðèñ. 1.63. Áèíàðíîå äåðåâî óìíîæåíèÿ ñèãíàëîâ
ïðèîðèòåòíûå ñòîëáöû (priority column interconnect) äëÿ áûñòðûõ ñèãíàëîâ; âåðòèêàëüíûå ìåæñîåäèíåíèÿ (Leap line) (Ðèñ. 1.65). Kðîìå òîãî, âíóòðè êàæäîãî ËÁ èìåþòñÿ ñïåöèàëüíûå ðåñóðñû òðàññèðîâêè, íàçâàííûå fastLUT, êîòîðûå îáúåäèíÿþò â åäèíóþ öåïü êîìáèíàöèîííûé âûõîä òàáëèöû ïåðåêîäèðîâêè ËÝ, íå èñïîëüçóÿ ëîêàëüíóþ ìàòðèöó ñîåäèíåíèé. Ñòðóêòóðà öåïåé fastLUT ïðåäñòàâëåíà íà Ðèñ. 1.66. Òàêèì îáðàçîì, àðõèòåêòóðà ìåæñîåäèíåíèé ÏËÈÑ ñåìåéñòâà Mercury ïðåäñòàâëÿåò ñîáîé ñëîæíóþ ìíîãîóðîâíåâóþ ñòðóêòóðó, ïðåäñòàâëåíèå î êîòîðîé äàåò Òàáë. 1.21.
95
96
ЛБ
Ðèñ. 1.64. Ãîðèçîíòàëüíûå ëèíèè òðàññèðîâêè RapidLAB
ЛЭ10
ЛЭ 8
ЛЭ 6
ЛЭ 4
ЛЭ 2
ЛЭ 9
ЛЭ 7
ЛЭ 5
ЛЭ 3
ЛЭ 1
Горизонтальные линии RapidLAB
ЛМС
Ýëåìåíòíàÿ áàçà
AL1064+
Ýëåìåíòíàÿ áàçà
ЛЭ 1
ЛЭ 1
ЛЭ 2
ЛЭ 2
ЛЭ 2
ЛЭ 3
ЛЭ 3
ЛЭ 3
ЛЭ 4
ЛЭ 4
ЛЭ 4
ЛЭ 5
ЛЭ 5
ЛЭ 5
ЛЭ 6
ЛЭ 6
ЛЭ 6
ЛЭ 7
ЛЭ 7
ЛЭ 7
ЛЭ 8
ЛЭ 8
ЛЭ 8
ЛЭ 9
ЛЭ 9
ЛЭ 9
ЛЭ10
ЛЭ10
ЛЭ10
Ряд логических блоков n+1
Быстрые горизонтальные межсоединения
ЛЭ 1
Ряд логических блоков n
Ряд логических блоков n–1
Вертикальные межсоединения Лeap Line
Соединения RapidLAB
AL1065+
Вертикальные межсоединения Леap Line
Ðèñ. 1.65. Âåðòèêàëüíûå ìåæñîåäèíåíèÿ (Leap line)
97
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.21. Àðõèòåêòóðà ìåæñîåäèíåíèé ÏËÈÑ ñåìåéñòâà Mercury
Ëîãè÷åñêèé ýëåìåíò Ëîêàëüíûå ëèíèè ñîåäèíåíèé Ýëåìåíò ââîäà/âûâîäà Ãîðèçîíòàëüíûå ëèíèè ñîåäèíåíèÿ ÑÁÏ Ñèñòåìíûé áëîê ïàìÿòè Ãîðèçîíòàëüíûå ìåæñîåäèíåíèÿ Ïðèîðèòåòíûå ãîðèçîíòàëüíûå ìåæñîåäèíåíèÿ Ëèíèè ñîåäèíåíèé áûñòðîäåéñòâóþùèõ ËÁ Ñòîëáöû ìàòðèöû Ïðèîðèòåòíûå ñòîëáöû ìàòðèöû Âåðòèêàëüíûå ìåæñîåäèíåíèÿ
+
Ëîêàëüíûå ëèíèè ñîåäèíåíèé Ýëåìåíò ââîäà/âûâîäà Ãîðèçîíòàëüíûå ëèíèè ñîåäèíåíèé ÑÁÏ Ñèñòåìíûé áëîê ïàìÿòè Ãîðèçîíòàëüíûå ìåæñîåäèíåíèÿ Ïðèîðèòåòíûå ãîðèçîíòàëüíûå ìåæñîåäèíåíèÿ Ëèíèè ñîåäèíåíèé áûñòðîäåéñòâóþùèõ ËÁ Ñòîëáöû ìàòðèöû Ïðèîðèòåòíûå ñòîëáöû ìàòðèöû Âåðòèêàëüíûå ìåæñîåäèíåíèÿ
Èñòî÷íèê
Ëîãè÷åñêèé ýëåìåíò
Ïóòü
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+ + +
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
Ñèñòåìíûé áëîê ïàìÿòè ïîçâîëÿåò ðåàëèçîâàòü ðàçëè÷íûå òèïû áëîêîâ ïàìÿòè äâóõ- è ÷åòûðåõïîðòîâûå ÎÇÓ, ÏÇÓ, áóôåðû FIFO è êîíòåêñòíî àäðåñóåìóþ ïàìÿòü. Ñòðóêòóðà ñèñòåìíîãî áëîêà ïàìÿòè â ðåæèìå ÷åòûðåõïîðòîâîãî ÎÇÓ ïðèâåäåíà íà Ðèñ. 1.67. Ðàçëè÷íûå âàðèàíòû êîíôèãóðàöèè ñèñòåìíîãî áëîêà ïàìÿòè ïðèâåäåíû íà Ðèñ. 1.68. Ñòðóêòóðà ýëåìåíòà ââîäà/âûâîäà ÏËÈÑ ñåìåéñòâà Mercury ïðèâåäåíà íà Ðèñ. 1.69. Ý ÏËÈÑ ñåìåéñòâà Mercury ñîäåðæèò äâóíàïðàâëåííûé áóôåð (bidirectional I/O buffer) è 3 ðåãèñòðà (registers) äëÿ îáåñïå÷åíèÿ äâóíàïðàâëåííîãî ââîäà/âûâîäà äàííûõ. Ýëåìåíòû ââîäà/âûâîäà â ÏËÈÑ ñåìåéñòâà Mercury îáúåäèíÿþòñÿ â ãðóïïû (I/O rowbands), ÷òî ïîçâîëÿåò îáåñïå÷èòü êðàò÷àéøèé ïóòü ïðè òðàññèðîâêå êðèñòàëëà (Ðèñ. 1.70).
98
Ýëåìåíòíàÿ áàçà
ЛЭ 1 ЛЭ 2
ЛЭ 4 ЛЭ 5 ЛЭ 6 ЛЭ 7 ЛЭ 8
Порт B
dataA[] wraddressA[] wrenA inclockA inclockenA inaclrA
dataB[] wraddressB[] wrenB inclockB inclockenB inaclrB
rdaddressA[] rdenA qA[] outclockA outclockenA outaclrA
rdaddressB[] rdenB qB[] outclockB outclockenB outaclrB
ЛЭ10
AL1066+
ЛЭ 9
Ðèñ. 1.66. Ñòðóêòóðà öåïåé fastLUT
Ðèñ. 1.67. Ñèñòåìíûé áëîê ïàìÿòè
Двунаправленная двуxпортовая память Порт А
Порт B
dataA[] addressA[] wrenA clockA clockenA qA[] aclrA
dataB[] addressB[] wrenB clockB clockenB qB[] aclrB
Двухпортовая память data[] wraddress[] wren inclock inclocken inaclr
rdaddress[] rden q[] outclock outclocken outaclr
data[] address[] wren inclock inclocken inaclr
q[] outclock outclocken outaclr
Ðèñ. 1.68. Âàðèàíòû êîíôèãóðàöèè ÑÁÏ
99
AL1068+
Однопортовая память
AL1067+
Порт А
ЛЭ 3
лобал е сигналы Быстрые локальные Выделенные сигналы сигналы
К вертикальным соединениям
к АМС
Глобальный сброс
Q
Q
100 Q Регистр ENA RES
D
Регистр ENA RES
D
Регистр ENA RES
D
Сигналы управления
Устройство задержки
Устройство задержки
Устройство задержки
Подстраивающий регистр
Ограничитель PCI
Горизонтальные соединения
Схема удержания шины
VCC IO
VCC IO
Ýëåìåíòíàÿ áàçà
Ðèñ. 1.69. Ñòðóêòóðà ýëåìåíòà ââîäà/âûâîäà ÏËÈÑ ñåìåéñòâà Mercury
101
INC
ЛБ
INC
INB OUT INA
IOE
INC
INB OUT INA
IOE
Ðèñ. 1.70. Ãðóïïû ÝÂÂ I/O rowbands
ЛМС
INB OUT INA
IOE
ЛБ
INC
INB OUT INA
IOE
Пары ЭВВ
INC
к ЭВВ
INB OUT INA
IOE
ЛБ
INC
ЛМС
INB OUT INA
IOE
Пары ЭВВ
Внешний ряд ЛБ
Горизонтальные соединения
Пары ЭВВ
AL1070+
Пары ЭВВ
Вертикальные соединения
Ýëåìåíòíàÿ áàçà
Ýëåìåíòíàÿ áàçà ÏËÈÑ ñåìåéñòâà Mercury èìåþò ñïåöèàëèçèðîâàííûå âûäåëåííûå ëèíèè (FAST1, FAST2, FAST3, FAST4, FAST5 è FAST6), îáåñïå÷èâàþùèå ôóíêöèè ãëîáàëüíîãî óïðàâëåíèÿ. Ý ÏËÈÑ ñåìåéñòâà Mercury ïîääåðæèâàþò ñëåäóþùèå èíòåðôåéñû: • LVTTL • LVCMOS • 1.8-V • 2.5-V • 3.3-V PCI • 3.3-V PCI-X • 3.3-V AGP • LVDS • LVPECL • PCML • GTL+ • HSTL class I and II • SSTL-3 class I and II • SSTL-2 class I and II • CTT Âñå ÏËÈÑ ñåìåéñòâà Mercury ïîëíîñòüþ ïîääåðæèâàþò ïåðèôåðèéíîå ñêàíèðîâàíèå â ñîîòâåòñòâèè ñî ñòàíäàðòîì IEEE Std. 1149.1 1990 (JTAG).
1.9. Ñåìåéñòâî ACEX Âûïóùåííûå ôèðìîé «Altera» óñòðîéñòâà ACEX ïðåäñòàâëÿþò ñîáîé äåøåâóþ è áûñòðîäåéñòâóþùóþ àëüòåðíàòèâó ÏËÈÑ ñåìåéñòâà FLEX10K. Îíè íàñòîëüêî ñõîæè â àðõèòåêòóðå, ÷òî çäåñü ïðèâåäåì òîëüêî êðàòêèå ñâåäåíèÿ î íîâîì ñåìåéñòâå. Â ÏËÈÑ ñåìåéñòâà ACEX èìåþòñÿ âñòðîåííûå áëîêè ïàìÿòè, ïîçâîëÿþùèå ðåàëèçîâàòü äâóõïîðòîâóþ ïàìÿòü äî 16 ðàçðÿäîâ äàííûõ. ÏËÈÑ ñåìåéñòâà ACEX èìåþò ýêâèâàëåíòíóþ åìêîñòü äî 100 000 âåíòèëåé (Òàáë. 1.22).
102
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.22. Îñíîâíûå ñâåäåíèÿ î ÏËÈÑ ñåìåéñòâà ACEX Ïàðàìåòð Ëîãè÷åñêàÿ åìêîñòü ýêâèâàëåíòíûõ âåíòèëåé Ìàêñèìàëüíîå ÷èñëî ñèñòåìíûõ ýëåìåíòîâ ×èñëî ëîãè÷åñêèõ ýëåìåíòîâ ×èñëî ëîãè÷åñêèõ áëîêîâ Ìàêñèìàëüíûé îáúåì ÎÇÓ [áèò] Ìàêñèìàëüíîå ÷èñëî âûâîäîâ ïîëüçîâàòåëÿ
EP1K10 10 000 56 000 576 3 12 288 130
EP1K30 30 000 119 000 1 728 6 24 576 171
EP1K50 50 000 199 000 2 880 10 40 960 249
EP1K100 100 000 257 000 4 992 12 49 152 333
Òàáëèöà 1.23. Ïðîèçâîäèòåëüíîñòü ÏËÈÑ ñåìåéñòâà ACEX Ðåñóðñû ÏËÈÑ Ïðèëîæåíèå
ËÝ
16-ðàçðÿäíûé çàãðóæàåìûé ñ÷åò÷èê 16-ðàçðÿäíûé íàêàïëèâàþùèé ñóììàòîð Ìóëüòèïëåêñîð 32 â 1 Ìóëüòèïëåêñîð ñ 3-êàñêàäíîé îáðàáîòêîé äàííûõ 256⫻16 ÎÇÓ (ñêîðîñòü ñ÷èòûâàíèÿ) 256⫻16 ÎÇÓ (ñêîðîñòü çàïèñè)
16 16 10 544 0 0
Ïðîèçâîäèòåëüíîñòü Ãðàäàöèÿ ñêîðîñòè ÑÁÏ 1 2 3 0 200 ÌÃö 188 ÌÃö 128 ÌÃö 0 200 ÌÃö 188 ÌÃö 128 ÌÃö 0 3.2 íñ 4.3 íñ 5.5 íñ 0 93 ÌÃö 86 ÌÃö 64 ÌÃö 1 212 ÌÃö 181 ÌÃö 131 ÌÃö 1 142 ÌÃö 128 ÌÃö 94 ÌÃö
Ðåñóðñû ÏËÈÑ Ïðèëîæåíèå
ËÝ
16-ðàçðÿäíûé 8-âûâîäíîé ïàðàëëåëüíûé ôèëüòð ñ îãðàíè÷èòåëüíîé èìïóëüñíîé õàðàêòåðèñòèêîé 8-ðàçðÿäíûé, 512-òî÷å÷íûé ñ÷åòâåðåííûé áûñòðîäåéñòâóþùèé ïðåîáðàçîâàòåëü ôóíêöèè à16450 óíèâåðñàëüíûé àñèíõðîííûé ïðèåìîïåðåäàò÷èê
420
Ïðîèçâîäèòåëüíîñòü Ãðàäàöèÿ ñêîðîñòè 1 2 3 185
175
122
1.854
47.4 ìêñ 57.8 ìêñ 76.5 ìêñ 100 ÌÃö 82 ÌÃö 62 ÌÃö
342
66 ÌÃö 57 ÌÃö 44 ÌÃö
Kàæäûé ÂÁÏ ñîäåðæèò 4 096 áèò ïàìÿòè. Ïîääåðæèâàåòñÿ èíòåðôåéñ ñ óðîâíÿìè 2.5, 3.3 è 5.0 Â. Ýëåìåíòû ââîäà/âûâîäà îáåñïå÷èâàþò òåìï îáìåíà äàííûìè äî 250 ÌÃö.  Òàáë. 1.23 ïðèâåäåíû ïðèìåðû ïðîèçâîäèòåëüíîñòè ÏËÈÑ ñåìåéñòâà ACEX íà ðàçëè÷íûõ ïðîåêòàõ. Íà Ðèñ. 1.71 ïðèâåäåíà ñòðóêòóðíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà ACEX. Kàê âèäèì, ôàêòè÷åñêè ïîâòîðåíà àðõèòåêòóðà ÏËÈÑ ñåìåéñòâà FLEX10K, íî ñ ïîíèæåííûì íàïðÿæåíèåì ïèòàíèÿ è ïîòðåáëåíèåì çà ñ÷åò ïðèìåíåíèÿ íîâîé òåõíîëîãèè èçãîòîâëåíèÿ ìèêðîñõåì.
103
Ýëåìåíòíàÿ áàçà
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ ЛБ
Столбец ЛМС
LAB
ЭВВ
ЭВВ
ЭВВ
ЭВВ Строка ЛМС ЛЭ
LAB
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
ЭВВ
AL1071+
ЛМС
Ðèñ. 1.71. Ñòðóêòóðíàÿ ñõåìà ÏËÈÑ ñåìåéñòâà ACEX
1.10. Kîíôèãóðàöèîííûå ÏÇÓ Äëÿ õðàíåíèÿ êîíôèãóðàöèîííîé èíôîðìàöèè ÏËÈÑ èñïîëüçóþòñÿ ïîñëåäîâàòåëüíûå ÏÇÓ. Íà Ðèñ. 1.72 è 1.73 ïîêàçàíû êîíôèãóðàöèîííûå ÏÇÓ ôèðìû «Altera».  Òàáë. 1.24 ïðèâåäåíû îñíîâíûå äàííûå ïî êîíôèãóðàöèè ðàçëè÷íûõ ÏËÈÑ ñ ïîìîùüþ êîíôèãóðàöèîííûõ ÏÇÓ. Ïðè íåîáõîäèìîñòè èñïîëüçóåòñÿ êàñêàäíîå âêëþ÷åíèå íåñêîëüêèõ ÏÇÓ. Íà Ðèñ. 1.741.78 ïðèâåäåíû ñõåìû âêëþ÷åíèÿ êîíôèãóðàöèîííûõ ÏÇÓ è ÏËÈÑ ðàçëè÷íûõ ñåìåéñòâ. Íà Ðèñ. 1.79 ïðèâåäåíû âðåìåííûå äèàãðàììû êîíôèãóðàöèè ÏËÈÑ.
104
Ýëåìåíòíàÿ áàçà Òàáëèöà 1.24. Òèïû ÏËÈÑ è ñîîòâåòñòâóþùèå èì êîíôèãóðàöèîííûå ÏÇÓ ÏËÈÑ
ÏÇÓ
EP20K100
EPC2
EP20K200
2⫻EPC2
EP20K400 EPF10K10, EPF10K10A EPF10K20
3⫻EPC2 EPC2, EPC1, EPC1441 EPC2, EPC1, EPC1441
EPF10K30E
EPC2, EPC1
EPF10K30, EPF10K30A
EPC2, EPC1, EPC1441
EPF10K40
EPC2, EPC1
EPF10K50, EPF10K50V, EPF10K50E EPF10K70
EPC2, EPC1 EPC2, EPC1
EPF10K100, EPF10K100A, EPF10K100B, EPF10K100E
EPC2, EPC1
EPF10K130V
EPC2, 2⫻EPC1
EPF10K130E
2⫻EPC2, 2⫻EPC1
EPF10K200E
2⫻EPC2, 3⫻EPC1
EPF10K250E
2⫻EPC2, 4⫻EPC1
EPF8282A
EPC1, EPC1441, EPC1064
EPF8282AV
EPC1, EPC1441, EPC1064V
EPF8452A
EPC1, EPC1441, EPC1213
EPF8636A
EPC1, EPC1441, EPC1213
EPF8820A
EPC1, EPC1441, EPC1213
EPF81188A
EPC1, EPC1441, EPC1213
EPF81500A
EPC1, EPC1441
EPF6010A
EPC2, EPC1, EPC1441
EPF6016, EPF6016A
EPC2, EPC1, EPC1441
EPF6024A
EPC2, EPC1, EPC1441
Kðîìå èñïîëüçîâàíèÿ ÏÇÓ ÏËÈÑ ìîæíî êîíôèãóðèðîâàòü ñ èñïîëüçîâàíèåì êîíòðîëëåðà ñèñòåìû, â êîòîðîé ïðèìåíåíà ÏËÈÑ. Â Òàáë. 1.25 ïðèâåäåíû âîçìîæíûå ðåæèìû êîíôèãóðàöèè ÏËÈÑ.
105
3 2 1 20 19
VCC VCC nCASC(1) GND
DCLK n.c. n.c. n.c. OE
4 5 6 7 8
18 17 16 15 14
n.c. DCLK n.c. n.c. n.c. n.c. OE n.c.
VCC n.c. n.c. n.c. n.c.
n.c. VCC n.c. n.c. n.c. n.c. n.c. n.c.
9 10 11 12 13 14 15 16
24 23 22 21 20 19 18 17 n.c. nC8 n.c. GND n.c. n.c. n.c. n.c.
AL1073+
nC3 GND n.c. nCASC(1) n.c.
1 2 3 4 5 6 7 8
AL1074+
8 7 6 5
9 10 11 12 13
1 2 3 4
AL1072+
DATA DCLK CE nC8
32 31 30 29 28 27 26 25
n.c. DATA n.c. VCC n.c.
n.c. DATA n.c. n.c. n.c. VCC n.c. n.c.
Ýëåìåíòíàÿ áàçà
3 2 1 20 19
32 31 30 29 28 27 26 25
TCK DATA TOO VCC TMS
TCK DATA n.c. n.c. TOO VCC n.c. TMS
Ðèñ. 1.72. Kîíôèãóðàöèîííûå ÏÇÓ, ïðîãðàììèðóåìûå ñ ïîìîùüþ ïðîãðàììàòîðà
18 17 16 15 14
n.c. DCLK VCCSEL n.c. n.c. n.c. OE n.c.
VPP n.c. n.c. n.c. VPPSEL
24 23 22 21 20 19 18 17
n.c. VPP n.c. n.c. n.c. n.c. n.c. VPPSEL
n.c. nC8 n.c. GND TDI n.c. nCASC n.c.
AL1075+
nC3 GND TD4 nCASC n.c.
9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8
AL1076+
4 5 6 7 8 9 10 11 12 13
DCLK VCCSEL n.c. n.c. OE
Ðèñ. 1.73. Kîíôèãóðàöèîííûå ÏÇÓ ÅÐÑ2, ïðîãðàììèðóåìûå ïî JTAG
VCC 10 к
VCC 10 к
VCC 10 к
DCLK
DCLK
DATA0
DATA
nSTATUS
OE
CONF_DONE nCONFIG
MSEL1
nCE
nCS nINIT_CONF (3) AL1077+
MSEL0
Ðèñ. 1.74. Kîíôèãóðàöèÿ ÏËÈÑ ñåìåéñòâ FLEX6000, FLEX10K, APEX20K ïðè ïîìîùè ÏÇÓ EPC2, EPC1, EPC1441
106
Ýëåìåíòíàÿ áàçà VCC
VCC
VCC
1к
1к
1к
DCLK
DCLK
DATA0
DATA
nSTATUS
OE
CONF_DONE nCONFIG
MSEL1
nCE
DATA nCASC
nCS OE
nCS nINIT_CONF (3)
AL1078+
MSEL0
DCLK
Ðèñ. 1.75. Kîíôèãóðàöèÿ ÏËÈÑ ñåìåéñòâ FLEX6000, FLEX10K, APEX20K ïðè ïîìîùè äâóõ ÏÇÓ EPC2, EPC1, EPC1441 VCC 1к
DCLK
MSEL0
DCLK
DATA0
MSEL1
DATA0
nSTATUS
nSTATUS
CONF_DONE
CONF_DONE
MSEL0
nCONFIG
MSEL1
nCE
VCC 1к
nCONFIG nCEO
nCE
VCC 1к
DCLK
DCLK
DATA
DATA OE
nCASC
nCS ПЗУ1
nCS OE ПЗУ2
AL1079+
nINIT_CONF (3)
Ðèñ. 1.76. Kîíôèãóðàöèÿ íåñêîëüêèõ ÏËÈÑ ñåìåéñòâ FLEX6000, FLEX10K, APEX20K ïðè ïîìîùè ÏÇÓ EPC2, EPC1, EPC1441
107
Ýëåìåíòíàÿ áàçà
VCC 1к
VCC 1к
"0"
nSIP CONF_DONE
nCS
"0"
MSEL0
nSTATUS
OE
"0"
MSEL1
DCLK
DCLK
ПЗУ DATA
DATA0 nCONFIG
AL1080+
VCC
Ðèñ. 1.77. Kîíôèãóðàöèÿ ÏËÈÑ ñåìåéñòâà FLEX8000 ïðè ïîìîùè ÏÇÓ EPC1, EPC1441, EPC1213, EPC1064
VCC 1к
VCC 1к
VCC 1к
VCC 1к
"0"
nSIP CONF_DONE
nCS
"0"
MSEL0
nSTATUS
OE
"0"
MSEL1
DCLK
nCASC
ПЗУ1
DCLK DATA
DATA0 VCC
nCONFIG
"0"
nSIP CONF_DONE
"1"
MSEL0
"0"
MSEL1
nCS
nSTATUS 1к
OE VCC
DCLK DATA0
ПЗУ2
DCLK DATA
nCONFIG "0"
nSIP CONF_DONE
"1"
MSEL0
"0"
MSEL1 DCLK
nSTATUS 1к VCC
DATA0 AL1081+
nCONFIG
Ðèñ. 1.78. Kîíôèãóðàöèÿ íåñêîëüêèõ ÏËÈÑ ñåìåéñòâà FLEX8000 ïðè ïîìîùè ÏÇÓ EPC1, EPC1213
108
Ýëåìåíòíàÿ áàçà
D(N–1) nCONFIG nSTATUS CONF_DONE (1) (4)
DCLK DATA User I/O (2)
D0
D1
D2
D3
DN
(5)
Состояние
Работа
MODE
Конфигурация
Инициализация
Работа
AL1082+
INIT_DONE (3)
Ðèñ. 1.79. Âðåìåííûå äèàãðàììû êîíôèãóðàöèè ÏËÈÑ
Òàáëèöà 1.25. Ðåæèìû êîíôèãóðàöèè ÏËÈÑ Ðåæèì êîíôèãóðàöèè
Ïðèìåíåíèå
Passive Serial (PS) Ïàññèâíûé ïîñëåäîâàòåëüíûé
Kîíôèãóðàöèÿ ïî ïîñëåäîâàòåëüíîìó ñèíõðîííîìó ïîðòó ìèêðîïðîöåññîðà (ÌÏ) èëè óñòðîéñòâó ByteBlaster, BitBlaster, MasterBlaster
Passive Parallel Synchronous (PPS) Ïàññèâíûé ïàðàëëåëüíûé ñèíõðîííûé
Kîíôèãóðàöèÿ ïî ïàðàëëåëüíîìó ñèíõðîííîìó ïîðòó ÌÏ
Passive Parallel Asynchronous (PPA) Ïàññèâíûé ïàðàëëåëüíûé àñèíõðîííûé
Kîíôèãóðàöèÿ ïî ïàðàëëåëüíîìó àñèíõðîííîìó ïîðòó ÌÏ. ÌÏ àäðåñóåò ÏËÈÑ êàê ïàìÿòü
Passive Serial Asynchronous (PSA) Ïàññèâíûé ïîñëåäîâàòåëüíûé àñèíõðîííûé
Kîíôèãóðàöèÿ ïî ïîñëåäîâàòåëüíîìó àñèíõðîííîìó ïîðòó ìèêðîïðîöåññîðà
JTAG
Èñïîëüçóåòñÿ ñòàíäàðò IEEE Std. 1149.11990
109
Ýëåìåíòíàÿ áàçà
1.11. Ïðîãðàììèðîâàíèå è ðåêîíôèãóðèðîâàíèå â ñèñòåìå Ïîíÿòèå «ïðîãðàììèðîâàíèå â ñèñòåìå» îòíîñèòñÿ ê òåì ÏËÈÑ, êîòîðûå ïîçâîëÿþò ïðîèçâåñòè ïðîãðàììèðîâàíèå íåïîñðåäñòâåííî â ñîñòàâå ñèñòåìû áåç èñïîëüçîâàíèÿ ïðîãðàììàòîðà, íà ñìîíòèðîâàííîé ïëàòå, ïðè÷åì ïðîãðàììèðîâàíèå ÏËÈÑ èëè êîíôèãóðàöèîííîãî ÏÇÓ ìîæåò ïðîèçâîäèòüñÿ ìíîãîêðàòíî. Ðåêîíôèãóðèðîâàíèå â ñõåìå (InCircuit Reconfigurability, ISR) ïîçâîëÿåò ïðîèçâåñòè ïåðåçàãðóçêó äàííûõ â ÏËÈÑ, ïîñòðîåííîé ïî SRAM òåõíîëîãèè «íà ëåòó», òî åñòü áåç âûêëþ÷åíèÿ ïèòàíèÿ ñèñòåìû è ïîñëåäóþùåé çàãðóçêè íîâîé êîíôèãóðàöèè. Ñâîéñòâà ISP è ISR õàðàêòåðíû ïðàêòè÷åñêè äëÿ âñåõ ñîâðåìåííûõ ÏËÈÑ, âûïóñêàåìûõ âåäóùèìè ôèðìàìè-ïðîèçâîäèòåëÿìè. Ðàññìîòðèì íåêîòîðûå îñîáåííîñòè àðõèòåêòóðû ÏËÈÑ, ïîçâîëÿþùèå ðåàëèçîâàòü ìåõàíèçì ISP. Kàê ïðàâèëî, ìèêðîñõåìû CPLD ñåìåéñòâ MAX7000S, A, B, E, MAX 3000A, MAX9000 ôèðìû «Altera» ïðîãðàììèðóþòñÿ â ñèñòåìå ÷åðåç ñòàíäàðòíûé ÷åòûðåõêîíòàêòíûé JTAG-èíòåðôåéñ. Ïðîãðàììíîå îáåñïå÷åíèå ñîçäàåò êîíôèãóðàöèîííóþ ïîñëåäîâàòåëüíîñòü, êîòîðàÿ çàãðóæàåòñÿ â ÏËÈÑ ñ ïîìîùüþ ñïåöèàëèçèðîâàííîãî çàãðóçî÷íîãî êàáåëÿ (ByteBlaster, BitBlaster èëè MasterBlaster äëÿ óñòðîéñòâ ôèðìû «Altera»). Kðîìå òîãî, äëÿ ïðîãðàììèðîâàíèÿ òàêèõ ÏËÈÑ ìîæíî èñïîëüçîâàòü ñòàíäàðòíûé JTAG-òåñòåð èëè ïðîñòîé èíòåðôåéñ, ýìóëèðóþùèé ïîñëåäîâàòåëüíîñòü êîìàíä JTAG.  êà÷åñòâå ïðèìåðà ðàññìîòðèì ñõåìó êîíôèãóðàöèîííîãî êàáåëÿ ByteBlaster MV, îïóáëèêîâàííóþ ôèðìîé «Altera» [3] è ïðåäíàçíà÷åííóþ äëÿ ïðîãðàììèðîâàíèÿ ÏËÈÑ ñåìåéñòâ êîíôèãóðàöèè MAX7000S, A, B, E, MAX3000A, MAX9000. Íà Ðèñ. 1.80 ïðèâåäåíà ïðèíöèïèàëüíàÿ ýëåêòðè÷åñêàÿ ñõåìà óñòðîéñòâà. Íà ñõåìå ðåçèñòîðû, ïîìå÷åííûå (1), èìåþò íîìèíàë 100 Îì (ðåàëüíî ìîæíî èñïîëüçîâàòü ðåçèñòîðû îò 50 äî 150 Îì) è ïðåäíàçíà÷åíû äëÿ çàùèòû ëèíèé ââîäà/âûâîäà. Kîíå÷íî, â ýêñòðåííûõ ñëó÷àÿõ ìîæíî îáîéòèñü áåç íèõ, íî ñëåäóåò ïîìíèòü, ÷òî «ñêóïîé ïëàòèò ÷åòûðåæäû», è íå ýêîíîìèòü íà ñïè÷êàõ (ìåíÿòü ïîâðåæäåííóþ ÏËÈÑ îáîéäåòñÿ äîðîæå). Ïîäòÿãèâàþùèå ðåçèñòîðû (pull-up resistors), îáîçíà÷åííûå (2), èìåþò íîìèíàë 2.2 êÎì (ÿñíî, ÷òî íà äåëå îò 1 äî 3.3 êÎì).  êà÷åñòâå øèííîãî ôîðìèðîâàòåëÿ æåëàòåëüíî èìåòü ìèêðîñõåìó 74ÍÑ244 (ðîñ-
110
Ýëåìåíòíàÿ áàçà
VCC
Разъем ByteBlaster 10 контактов
(2)
VCC 4
VCC
7
(2)
3
25Gконтактный разъем LPTGпорта
74HC244
14
(1)
9
(1)
GND
VCC VCC VCC (2) 2
(1)
3
(1)
8
(1)
7
(2)
(2) GND
VCC
1G
VCC
2G
GND
1A1
1Y1
1A2
1Y2
1A3
1Y3
1A4
1Y4
2A1
2Y1
2A2
2Y2
2A3
2Y3
2A4
2Y4
GND
(1)
1
(1)
5
(1)
9
GND 2, 10
10
13
(1)
11
(1)
12
(1)
GND
VCC (2) 15
AL1083+
18G25 GND
Ðèñ. 1.80. Ïðèíöèïèàëüíàÿ ñõåìà çàãðóçî÷íîãî êàáåëÿ ByteBlaster MV
ñèéñêèé èëè áåëîðóññêèé àíàëîã 1564ÀÏ5), õîòÿ ó àâòîðà îäèí èç ByteBlasterMV áûë ñîáðàí íà ìèêðîñõåìå ñåðèè 74ÀÑ (ïðîñòî ïîä ðóêîé äðóãîãî íå îêàçàëîñü) è óñïåøíî ðàáîòàåò. Åñëè âû ðàáîòàåòå òîëüêî ñ 5âîëüòîâûìè ÏËÈÑ, òî ïîéäóò è ñåðèè 1533, è 555 (74ALS è 74LS), íî òîãäà ãàðàíòèé óñïåøíîãî ïðîãðàììèðîâàíèÿ íèêòî íå äàñò. Âîîáùå ãîâîðÿ, íàâåðíîå, íå ñëåäóåò çàíèìàòüñÿ èçîáðåòåíèåì âåëîñèïåäà, áëàãî, øòàòíàÿ ñõåìà íå ñîäåðæèò äåôèöèòíûõ êîìïîíåíòîâ, åå ñåáåñòîèìîñòü
111
Ýëåìåíòíàÿ áàçà ïîðÿäêà 1.5
2 äîëëàðîâ. Ñëåäóåò ïîìíèòü, ÷òî äëèíà êàáåëÿ îò ïàðàëëåëüíîãî ïîðòà äî ByteBlasterMV íå äîëæíà ïðåâûøàòü 100
120 ñì (õîòÿ â ñòàíäàðòíîì óñòðîéñòâå, ïîñòàâëÿåìîì ôèðìîé «Altera», ñõåìà ñìîíòèðîâàíà íåïîñðåäñòâåííî â êîðïóñå ðàçúåìà, íî ýòî íåóäîáíî â ðàáîòå), äëèíó êàáåëÿ îò ByteBlasterMV äî ïëàòû ñ óñòàíîâëåííîé ÏËÈÑ íå ñòîèò äåëàòü áîëüøå 25 ñì. Íà Ðèñ. 1.81 ïðèâåäåíà ðàñïàéêà ðàçúåìà óñòðîéñòâà ByteBlasterMV. Íà Ðèñ. 1.81 âñå ðàçìåðû ïðèâåäåíû â äþéìàõ. Îáû÷íî èñïîëüçóþò ñòàíäàðòíûé ðàçúåì íà 10-æèëüíûé ëåíòî÷íûé êàáåëü ïîä îáæèì. Íàçíà÷åíèå êîíòàêòîâ ðàçúåìà êàáåëÿ ByteBlasterMV â ðàçëè÷íûõ ðåæèìàõ ïðèâåäåíî â Òàáë. 1.26. Òàáëèöà 1. 26. Íàçíà÷åíèå êîíòàêòîâ ðàçúåìà êàáåëÿ ByteBlasterMV Kîíòàêò ðàçúåìà ByteBlaster
Ðåæèì ïîñëåäîâàòåëüíîé ïàññèâíîé êîíôèãóðàöèè (PS Mode)
Ðåæèì ïðîãðàììèðîâàíèÿ ïî ïîðòó JTAG (JTAG mode)
Ñèãíàë
Íàçíà÷åíèå
Ñèãíàë
Íàçíà÷åíèå
1
DCLK
Òàêòîâûé ñèãíàë
TCK
Òàêòîâûé ñèãíàë
2
GND
Ñèãíàëüíàÿ çåìëÿ
GND
Ñèãíàëüíàÿ çåìëÿ
3
CONF_DONE
Kîíòðîëü çàâåðøåíèÿ êîíôèãóðàöèè
TDO
Äàííûå ñ ÏËÈÑ
4
VCC
Íàïðÿæåíèå ïèòàíèÿ
VCC
5
nCONFIG
Kîíòðîëü êîôèãóðàöèè
TMS
6
Íå ïîäêëþ÷åí
Íå ïîäêëþ÷åí
7
nSTATUS
Ñîñòîÿíèå êîíôèãóðàöèè
Íå ïîäêëþ÷åí
8
Íå ïîäêëþ÷åí
Íå ïîäêëþ÷åí
9
DATA0
Äàííûå â ÏËÈÑ
TDI
Äàííûå â ÏËÈÑ
10
GND
Ñèãíàëüíàÿ çåìëÿ
GND
Ñèãíàëüíàÿ çåìëÿ
Íàïðÿæåíèå ïèòàíèÿ Kîíòðîëü àâòîìàòà JTAG
Ðåæèì ïîñëåäîâàòåëüíîé ïàññèâíîé êîíôèãóðàöèè (PS Mode) ïðèìåíÿåòñÿ äëÿ çàãðóçêè êîíôèãóðàöèè ÏËÈÑ, âûïîëíåííûõ ïî òåõíîëîãèè SRAM, òàêèõ ñåìåéñòâ, êàê FLEX6000, 8000, 10K, APEX, ACEX. Ðåæèì ïðîãðàììèðîâàíèÿ ïî ïîðòó JTAG (JTAG mode) ïðèìåíÿåòñÿ äëÿ ïðî-
112
Ýëåìåíòíàÿ áàçà
0.425 Тур.
Метка первого провода в жгуте
1
3
5
7
9
2
4
6
8
10
0.250 Тур.
0.025 Sq.
AL1084+
0.100 Sq.
0.700 Тур.
Ðèñ. 1.81. Ðàçúåì êàáåëÿ ByteBlasterMV
VCC 1к
VCC
VCC VCC
1к
FLEX 10K, FLEX 10KA Device MSEL1 MSEL0 nCE
1к
1к
CONF_DONE nSTATUS
GND Разъем IDC10M
DCLK DATA nCONFIG
VCC
Вывод [1]
GND
AL1085+
GND
Ðèñ. 1.82. Âêëþ÷åíèå ÏËÈÑ ñåìåéñòâà FLEX10K â ðåæèìå ïîñëåäîâàòåëüíîé ïàññèâíîé êîíôèãóðàöèè ñ ïîìîùüþ êàáåëÿ ByteBlasterMV
113
Ýëåìåíòíàÿ áàçà VCC 1к VCC 1к VCC 1к TCK TDO
VCC 1к
Разъем IDC10M VCC
Вывод [1]
TMS TDI
GND
AL1086+
GND
Ðèñ. 1.83. Âêëþ÷åíèå ÏËÈÑ ñåìåéñòâ ÌÀÕ3000, 7000, 9000 â ðåæèìå ïðîãðàììèðîâàíèÿ ÷åðåç èíòåðôåéñ JTAG
ãðàììèðîâàíèÿ â ñèñòåìå ÏËÈÑ CPLD, à òàêæå êîíôèãóðàöèîííûõ ÏÇÓ ÅÐÑ2 è ãîòîâÿùèõñÿ ê âûïóñêó ÅÐÑ4, äëÿ çàãðóçêè SRAM óñòðîéñòâ (ïðàâäà, ðåæå, ÷åì PS Mode). Ïðè ðàáîòå ñ óñòðîéñòâîì íåîáõîäèìî ïîìíèòü, ÷òî âñå êîììóòàöèè è ïîäêëþ÷åíèå êàáåëÿ ñëåäóåò ïðîâîäèòü ïðè âûêëþ÷åííîì ïèòàíèè. Ïèòàíèå óñòðîéñòâà îñóùåñòâëÿåòñÿ îò èñòî÷íèêà ïèòàíèÿ ñèñòåìû, â êîòîðóþ óñòàíîâëåíà ÏËÈÑ. Åñòåñòâåííî, ÷òî çåìëÿ äîëæíà áûòü îáùåé. Íà Ðèñ. 1.82 è 1.83 ïðèâåäåíû ïðèìåðû âêëþ÷åíèÿ ÏËÈÑ äëÿ êîíôèãóðàöèè ÏËÈÑ è ïðîãðàììèðîâàíèÿ.
114
Ãëàâà 2.
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
2.1. Îáùèå ñâåäåíèÿ Äî ïîñëåäíåãî âðåìåíè MAX+PLUS II ÿâëÿëñÿ åäèíñòâåííîé ñèñòåìîé ïðîåêòèðîâàíèÿ óñòðîéñòâ íà ÏËÈÑ ôèðìû «Altera». Òîëüêî â 1999 ãîäó ïîÿâèëàñü ñèñòåìà ïðîåêòèðîâàíèÿ íîâîãî ïîêîëåíèÿ Quartus, ïðåäíàçíà÷åííàÿ äëÿ ñîçäàíèÿ óñòðîéñòâ íà ÏËÈÑ ñåìåéñòâà APEX20K. Ïðîãðàììíîå îáåñïå÷åíèå (ÏÎ) ñèñòåìû MAX+PLUS II, ïðåäñòàâëÿþùåå ñîáîé åäèíîå öåëîå, îáåñïå÷èâàåò ïîëüçîâàòåëþ óïðàâëåíèå ñðåäîé ëîãè÷åñêîãî ïðîåêòèðîâàíèÿ è ïîìîãàåò äîñòè÷ü ìàêñèìàëüíîé ýôôåêòèâíîñòè è ïðîèçâîäèòåëüíîñòè. Âñå ïàêåòû ðàáîòàþò êàê íà ïëàòôîðìå IBM PC, òàê è íà ïëàòôîðìàõ SUN, IBM RISC/6000 è HP9000.  äàëüíåéøåì ìû áóäåì ðàññìàòðèâàòü ðàáîòó íà ïëàòôîðìå IBM PC. Äëÿ íîðìàëüíîé èíñòàëëÿöèè è ðàáîòû ÑÀÏÐ MAX+PLUS II (âåðñèÿ 9.4 âûøëà â äåêàáðå 1999 ãîäà) íåîáõîäèìà IBM PC, ñîâìåñòèìàÿ ÝÂÌ ñ ïðîöåññîðîì íå õóæå Pentium, îáúåìîì ÎÇÓ íå ìåíüøå 16 Ìáèò è ñâîáîäíûì ìåñòîì íà æåñòêîì äèñêå ïîðÿäêà 150
400 Ìáèò â çàâèñèìîñòè îò êîíôèãóðàöèè ñèñòåìû. Èç ñîáñòâåííîãî îïûòà ìîæåì ñêàçàòü, ÷òî äëÿ ðàçðàáîòêè áîëüøèõ êðèñòàëëîâ íà ÏËÈÑ ñåìåéñòâà FLEX10K50 è âûøå æåëàòåëüíî èìåòü íå ìåíåå 64 Ìáèò ÎÇÓ (ëó÷øå 128, åùå ëó÷øå 256, ñîâñåì õîðîøî 384 Ìáèò è âûøå) è ïðîöåññîð Pentium II (Ð-3 ðåàëüíî íå äàåò îñîáîãî âûèãðûøà). Kîíå÷íî, ìîæíî èñïîëüçîâàòü è áîëåå ñëàáûå ìàøèíû, íî òîãäà âîçðàñòàåò âðåìÿ êîìïèëÿöèè è óâåëè÷èâàåòñÿ íàãðóçêà íà æåñòêèé äèñê èç-çà ñâîïèíãà. Óâåëè÷åíèå îáúåìà îïåðàòèâíîé ïàìÿòè è êýøà äàåò ëó÷øèå ðåçóëüòàòû ïî ñðàâíåíèþ ñ óâåëè÷åíèåì òàêòîâîé ÷àñòîòû ïðîöåññîðà. Åñëè íå ïðåäïîëàãàåòñÿ òðàññèðîâêà áîëüøèõ êðèñòàëëîâ, òî âïîëíå õâàòàåò 32 Ìáèò ÎÇÓ ïðè õîðîøåé ñêîðîñòè êîìïèëÿöèè ïðîåêòà. ×òî êà-
115
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II ñàåòñÿ âûáîðà îïåðàöèîííîé ñèñòåìû, òî, áåç ñîìíåíèÿ, ëó÷øå èñïîëüçîâàòü Windows NT, õóæå Windows 95 OSR2, ïëîõî Windows 98, îñîáåííî ëîêàëèçîâàííóþ âåðñèþ. Î÷åâèäíî, ýòî ñâÿçàíî ñ òåì, ÷òî èçíà÷àëüíî ïàêåò áûë ðàçðàáîòàí ïîä Unix è íå ïîëíîñòüþ èñïîëüçóåò âñå ìåõàíèçìû Windows. Îñîáåííî ýòî çàìåòíî ïðè âðåìåííîì ìîäåëèðîâàíèè ñëîæíûõ óñòðîéñòâ ÖÎÑ, êîãäà ïåðåðèñîâêà ýêðàíà çàíèìàåò îñíîâíîå âðåìÿ. Ïîñêîëüêó ïàêåò íå ëîêàëèçîâàí, òî ëó÷øå èñïîëüçîâàòü íå ëîêàëèçîâàííûå (àìåðèêàíñêóþ èëè ïàíåâðîïåéñêóþ) âåðñèè Windows. Âî âðåìÿ èíñòàëëÿöèè ñèñòåìû MAX+PLUS II ñîçäàþòñÿ äâà êàòàëîãà: \maxplus2 è \max2work. Kàòàëîã \maxplus2 ñîäåðæèò ñèñòåìíîå ÏÎ è ôàéëû äàííûõ è ðàçáèò íà ïîäêàòàëîãè, ïåðå÷èñëåííûå â Òàáë. 2.1. Òàáëèöà 2.1. Ñòðóêòóðà ñèñòåìíîãî êàòàëîãà \maxplus2 ñèñòåìû MAX+PLUS II Ïîäêàòàëîã .\drivers .\edc .\lmf
.\max2inc
.\max2lib\edif .\max2lib\mega_lpm .\max2lib\mf .\max2lib\prim .\vhdlnn\Altera .\vhdlnn\ieee .\vhdlnn\std
Îïèñàíèå Ñîäåðæèò äðàéâåðû óñòðîéñòâ äëÿ cðåäû Windows NT (òîëüêî äëÿ èíñòàëëÿöèè íà ïëàòôîðìå PC â ñðåäå Windows NT) Ñîäåðæèò ïîñòàâëÿåìûå ôèðìîé «Altera» êîìàíäíûå ôàéëû (.edc), êîòîðûå ãåíåðèðóþò âûõîäíûå ôàéëû (.edo) ïî çàêàçó ïîëüçîâàòåëÿ äëÿ çàäàííûõ óñëîâèé òåñòèðîâàíèÿ Ñîäåðæèò ïîñòàâëÿåìûå ôèðìîé «Altera» ôàéëû ìàêðîáèáëèîòåê (.lmf), êîòîðûå óñòàíàâëèâàþò ñîîòâåòñòâèå ìåæäó ëîãè÷åñêèìè ôóíêöèÿìè ïîëüçîâàòåëÿ è ýêâèâàëåíòíûìè ëîãè÷åñêèìè ôóíêöèÿìè MAX+PLUS II Ñîäåðæèò Include-ôàéëû (ôàéëû «çàãîëîâêîâ») ñ ïðîòîòèïàìè ôóíêöèé äëÿ ðàçðàáîòàííûõ ôèðìîé «Altera» ìàêðîôóíêöèé.  ïðîòîòèïàõ ôóíêöèé ïåðå÷èñëÿþòñÿ ïîðòû (âûâîäû) äëÿ ìàêðîôóíêöèé, ðåàëèçîâàííûõ â òåêñòîâûõ ôàéëàõ ïðîåêòà (.tdf), íàïèñàííûõ íà ÿçûêå AHDL Ñîäåðæèò ïðèìèòèâû è ìàêðîôóíêöèè, èñïîëüçóåìûå äëÿ ïîëüçîâàòåëüñêèõ èíòåðôåéñîâ EDIF Ñîäåðæèò ìåãàôóíêöèè, â òîì ÷èñëå áèáëèîòåêó ôóíêöèé ïàðàìåòðèçîâàííûõ ìîäóëåé (LPM) è Include-ôàéëû äëÿ íèõ ñ ñîîòâåòñòâóþùèìè ïðîòîòèïàìè íà ÿçûêå AHDL Ñîäåðæèò ìàêðîôóíêöèè ïîëüçîâàòåëüñêèå è óñòàðåâøèå (74-series) Ñîäåðæèò ïîñòàâëÿåìûå ôèðìîé «Altera» ïðèìèòèâû Ñîäåðæèò áèáëèîòåêó ôèðìû «Altera» ñ ïðîãðàììíûì ïàêåòîì maxplus2.  ýòîò ïàêåò âõîäÿò âñå ïðèìèòèâû, ìåãàôóíêöèè è ìàêðîôóíêöèè ñèñòåìû MAX+PLUS II, ïîääåðæèâàåìûå ÿçûêîì VHDL Ñîäåðæèò áèáëèîòåêó ieee ïàêåòîâ VHDL, â òîì ÷èñëå std_logic_1164, std_logic_arith, std_logic_signed è std_logic_unsigned Ñîäåðæèò áèáëèîòåêó std ñ ïàêåòàìè ñòàíäàðòîâ è ñðåäñòâ ââîäà/âûâîäà òåêñòà, îïèñàííûõ â ñïðàâî÷íèêå ïî ñòàíäàðòàì èíñòèòóòà IEEE íà ÿçûêå VHDL IEEE Standard VHDL Language Reference Manual
116
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Òàáëèöà 2.2. Ñòðóêòóðà ðàáî÷åãî êàòàëîãà \max2work ñèñòåìû MAX+PLUS II Ïîäêàòàëîã
Îïèñàíèå
.\ahdl
Ñîäåðæèò ôàéëû ïðèìåðîâ, èëëþñòðèðóþùèõ òåìó «Kàê èñïîëüçîâàòü ÿçûê AHDL» (How to use AHDL) â ýëåêòðîííîì ñïðàâî÷íèêå (MAX+PLUS II Help) è â ðóêîâîäñòâå MAX+PLUS II AHDL
.\chiptrip
Ñîäåðæèò âñå ôàéëû îáó÷àþùåãî ïðîåêòà chiptrip, îïèñàííîãî â ðóêîâîäñòâå MAX+PLUS II AHDL
.\edif
Ñîäåðæèò âñå ôàéëû ïðèìåðîâ, èëëþñòðèðóþùèõ îñîáåííîñòè EDIF â ýëåêòðîííîì ñïðàâî÷íèêå (MAX+PLUS II Help)
.\tutorial
Ñîäåðæèò èíôîðìàöèîííûé ôàéë read.me îáó÷àþùåãî ïðîåêòà chiptrip. Âñå ôàéëû, ñîçäàþùèåñÿ â ïðîåêòå chiptrip, äîëæíû íàõîäèòüñÿ â ýòîì ïîäêàòàëîãå
.\vhdl
Ñîäåðæèò ôàéëû ïðèìåðîâ, èëëþñòðèðóþùèõ òåìó «Kàê èñïîëüçîâàòü ÿçûê VHDL» (How to use VHDL) â ýëåêòðîííîì ñïðàâî÷íèêå (MAX+PLUS II Help) è â ðóêîâîäñòâå MAX+PLUS II VHDL
.\verilog
Ñîäåðæèò ôàéëû ïðèìåðîâ, èëëþñòðèðóþùèõ òåìó «Kàê èñïîëüçîâàòü ÿçûê âåðèôèêàöèîííîãî ïðîòîêîëà Verilog HDL» (How to use Verilog HDL) â ýëåêòðîííîì ñïðàâî÷íèêå (MAX+PLUS II Help) è â ðóêîâîäñòâå MAX+PLUS II Verilog HDL
Kàòàëîã \max2work ñîäåðæèò ôàéëû îáó÷àþùåé ïðîãðàììû è ïðèìåðû è ðàçäåëÿåòñÿ íà ïîäêàòàëîãè, îïèñàííûå â Òàáë. 2.2. Íàçâàíèå ñèñòåìû MAX+PLUS II ÿâëÿåòñÿ àááðåâèàòóðîé îò Multiple Array MatriX Programmable Logic User System (Ïîëüçîâàòåëüñêàÿ Ñèñòåìà Ïðîãðàììèðîâàíèÿ Ëîãèêè Óïîðÿäî÷åííûõ Ñòðóêòóð). Ñèñòåìà MAX+PLUS II ðàçðàáîòàíà ôèðìîé «Altera» è îáåñïå÷èâàåò ìíîãîïëàòôîðìåííóþ àðõèòåêòóðíî-íåçàâèñèìóþ ñðåäó ñîçäàíèÿ äèçàéíà, ëåãêî ïðèñïîñàáëèâàåìóþ äëÿ êîíêðåòíûõ òðåáîâàíèé ïîëüçîâàòåëÿ. Ñèñòåìà MAX+PLUS II èìååò ñðåäñòâà óäîáíîãî ââîäà äèçàéíà, áûñòðîãî ïðîãîíà è íåïîñðåäñòâåííîãî ïðîãðàììèðîâàíèÿ óñòðîéñòâ. Ïðåäñòàâëåííûé íà Ðèñ. 2.1 ñîñòàâ ÏÎ ñèñòåìû MAX+PLUS II ÿâëÿåòñÿ ïîëíûì êîìïëåêòîì, îáåñïå÷èâàþùèì ñîçäàíèå ëîãè÷åñêèõ äèçàéíîâ äëÿ óñòðîéñòâ ôèðìû «Altera» ñ ïðîãðàììèðóåìîé ëîãèêîé, â òîì ÷èñëå ñåìåéñòâà óñòðîéñòâ Classic, MAX5000, MAX7000, MAX9000, FLEX6000, FLEX8000 è FLEX10K. Èíôîðìàöèÿ î äðóãèõ ïîääåðæèâàåìûõ ñåìåéñòâàõ óñòðîéñòâ ôèðìû «Altera» ïðèâåäåíà â ôàéëå read.me â ñèñòåìå MAX+PLUS II.
117
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Компиляция Ввод проекта MAX+PLUS II Graphic Editor MAX+PLUS II Symbol Editor MAX+PLUS II Text Editor MAX+PLUS II Waveform Editor MAX+PLUS II Floorplan Editor AHDL VHDL Verilog HDL
Программирование ПЛИС MAX+PLUS II Programmer Data I/O
AL2087+
Верификация проекта MAX+PLUS II Simulator MAX+PLUS II Waveform Editor MAX+PLUS II Timing Analyzer
Ðèñ. 2.1. Ñðåäà ïðîåêòèðîâàíèÿ â ñèñòåìå MAX+PLUS II
Ñèñòåìà MAX+PLUS II ïðåäëàãàåò ïîëíûé ñïåêòð âîçìîæíîñòåé ëîãè÷åñêîãî äèçàéíà: ðàçíîîáðàçíûå ñðåäñòâà îïèñàíèÿ ïðîåêòà äëÿ ñîçäàíèÿ ïðîåêòîâ ñ èåðàðõè÷åñêîé ñòðóêòóðîé, ìîùíûé ëîãè÷åñêèé ñèíòåç, êîìïèëÿöèÿ ñ çàäàííûìè âðåìåííûìè ïàðàìåòðàìè, ðàçäåëåíèå íà ÷àñòè, ôóíêöèîíàëüíîå è âðåìåííîå òåñòèðîâàíèå (ñèìóëÿöèÿ), òåñòèðîâàíèå íåñêîëüêèõ ñâÿçàííûõ óñòðîéñòâ, àíàëèç âðåìåííûõ ïàðàìåòðîâ ñèñòåìû, àâòîìàòè÷åñêàÿ ëîêàëèçàöèÿ îøèáîê, à òàêæå ïðîãðàììèðîâàíèå è âåðèôèêàöèÿ óñòðîéñòâ.  ñèñòåìå MAX+PLUS II ìîæíî êàê ÷èòàòü, òàê è çàïèñûâàòü ôàéëû íà ÿçûêå AHDL è ôàéëû òðàññèðîâêè â ôîðìàòå EDIF, ôàéëû íà ÿçûêàõ îïèñàíèÿ àïïàðàòóðû Verilog HDL è VHDL, à òàêæå ñõåìíûå ôàéëû OrCAD. Kðîìå òîãî, ñèñòåìà MAX+PLUS II ÷èòàåò ôàéëû òðàññèðîâêè, ñîçäàííûå ñ ïîìîùüþ ÏÎ ôèðìû «Xilinx», è çàïèñûâàåò ôàéëû çàäåðæåê â ôîðìàòå SDF äëÿ óäîáñòâà âçàèìîäåéñòâèÿ ñ ïàêåòàìè, ðàáîòàþùèìè ñ äðóãèìè ïðîìûøëåííûìè ñòàíäàðòàìè. Ñèñòåìà MAX+PLUS II ïðåäëàãàåò ïîëüçîâàòåëþ áîãàòûé ãðàôè÷åñêèé èíòåðôåéñ, äîïîëíåííûé èëëþñòðèðîâàííîé îïåðàòèâíîé ñïðàâî÷íîé ñèñòåìîé.  ïîëíóþ ñèñòåìó MAX+PLUS II âõîäÿò 11 ïîëíîñòüþ âíåäðåííûõ â ñèñòåìó ïðèëîæåíèé (Ðèñ. 2.2). Ëîãè÷åñêèé äèçàéí (Design), âêëþ÷àÿ âñå ïîääèçàéíû (Subdesign), íàçûâàåòñÿ â ñèñòåìå MAX+PLUS II ïðîåêòîì (Project). Âîçìîæíî îïèñàíèå ïðîåêòà (Design Entry) â âèäå ôàéëà íà ÿçûêå îïèñàíèÿ àïïàðàòóðû, ñîçäàííîãî ëèáî âî âíåøíåì ðåäàêòîðå, ëèáî â òåêñòîâîì ðåäàêòîðå MAX+PLUS II (Text Editor), â âèäå ýëåêòðè÷åñêîé
118
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ввод проекта
Ввод проекта MAX+PLUS II Compiler
MAX+PLUS II Text Editor
MAX+PLUS II Graphic Editor
Compiler Netlist Extractor
Database Builder
Logic Synthesizer
MAX+PLUS II Waveform Editor
MAX+PLUS II Symbol Editor
Functional, Timing or Linked SNF Extractor
Partitioner
Filter
EDIF, VHDL & Verilog Netlist Writers
Design Doctor
Assembler
MAX+PLUS II Floorplan Editor
Верификация
MAX+PLUS II Message Processor & Hierarchy Display
MAX+PLUS II Simulator
MAX+PLUS II Programmer MAX+PLUS II Waveform Editor
AL2088+
MAX+PLUS II Timing Analyzer
Программирование
Ðèñ. 2.2. Ïðèëîæåíèÿ â ñèñòåìå MAX+PLUS II
ïðèíöèïèàëüíîé ñõåìû ñ ïîìîùüþ ãðàôè÷åñêîãî ðåäàêòîðà Graphic Editor, â âèäå âðåìåííîé äèàãðàììû, ñîçäàííîé â ñèãíàëüíîì ðåäàêòîðå Waveform Editor. Äëÿ óäîáñòâà ðàáîòû ñî ñëîæíûìè èåðàðõè÷åñêèìè ïðîåêòàìè êàæäîìó ïîääèçàéíó ñîîòâåòñòâóåò ñèìâîë, ðåäàêòèðîâàíèå êîòîðîãî ïðîèçâîäèòñÿ ñ ïîìîùüþ ãðàôè÷åñêîãî ðåäàêòîðà Symbol Editor. Ðàçìåùåíèå óçëîâ ïî ËÁ è âûâîäàì ÏËÈÑ âûïîëíÿþò ñ ïîìîùüþ ïîóðîâíåâîãî ïëàíèðîâùèêà Floorplan Editor. Âåðèôèêàöèÿ ïðîåêòà (Project Verification) âûïîëíÿåòñÿ ñ ïîìîùüþ ñèìóëÿòîðà (Simulator), ðåçóëüòàòû ðàáîòû êîòîðîãî óäîáíî ïðîñìîòðåòü â ñèãíàëüíîì ðåäàêòîðå Waveform Editor, â íåì æå ñîçäàþòñÿ òåñòîâûå âîçäåéñòâèÿ. Kîìïèëÿöèÿ ïðîåêòà, âêëþ÷àÿ èçâëå÷åíèå ñïèñêà ñîåäèíåíèé (Netlist Extractor), ïîñòðîåíèå áàçû äàííûõ ïðîåêòà (Data Base Builder), ëîãè÷åñêèé ñèíòåç (logic synthesis), èçâëå÷åíèå âðåìåííûõ, ôóíêöèîíàëüíûõ ïàðàìåòðîâ ïðîåêòà (SNF Extractor), ðàçáèåíèå íà ÷àñòè (Partioner), òðàññèðîâêà (Fitter) è ôîðìèðîâàíèå ôàéëà ïðîãðàììèðîâàíèÿ èëè çàãðóçêè (Assembler) âûïîëíÿþòñÿ ñ ïîìîùüþ êîìïèëÿòîðà ñèñòåìû (Compiler).
119
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Íåïîñðåäñòâåííî ïðîãðàììèðîâàíèå èëè çàãðóçêà êîíôèãóðàöèè óñòðîéñòâ ñ èñïîëüçîâàíèåì ñîîòâåòñòâóþùåãî àïïàðàòíîãî îáåñïå÷åíèÿ âûïîëíÿþòñÿ ñ èñïîëüçîâàíèåì ìîäóëÿ ïðîãðàììàòîðà (Programmer). Ìíîãèå õàðàêòåðíûå ÷åðòû è êîìàíäû, òàêèå êàê îòêðûòèå ôàéëîâ, ââîä íàçíà÷åíèé óñòðîéñòâ, âûâîäîâ è ëîãè÷åñêèõ ýëåìåíòîâ, êîìïèëÿöèÿ òåêóùåãî ïðîåêòà, ïîõîæè äëÿ ìíîãèõ ïðèëîæåíèé ñèñòåìû MAX+PLUS II. Ðåäàêòîðû äëÿ ðàçðàáîòêè ïðîåêòà (ãðàôè÷åñêèé, òåêñòîâîé è ñèãíàëüíûé) èìåþò ìíîãî îáùåãî ñî âñïîìîãàòåëüíûìè ðåäàêòîðàìè (ïîóðîâíåâîãî ïëàíèðîâàíèÿ è ñèìâîëüíûìè). Kàæäûé ðåäàêòîð ðàçðàáîòêè ïðîåêòà ïîçâîëÿåò âûïîëíÿòü ïîõîæèå çàäà÷è (íàïðèìåð ïîèñê ñèãíàëà èëè ñèìâîëà) ñõîæèì ñïîñîáîì. Ìîæíî ëåãêî êîìáèíèðîâàòü ðàçíûå òèïû ôàéëîâ â èåðàðõè÷åñêîì ïðîåêòå, âûáèðàÿ äëÿ êàæäîãî ôóíêöèîíàëüíîãî áëîêà òîò ôîðìàò îïèñàíèÿ, êîòîðûé áîëüøå ïîäõîäèò. Ïîñòàâëÿåìàÿ ôèðìîé «Altera» áîëüøàÿ áèáëèîòåêà ìåãà- è ìàêðîôóíêöèé, â òîì ÷èñëå ôóíêöèé èç áèáëèîòåêè ïàðàìåòðèçîâàííûõ ìîäåëåé (LPM), îáåñïå÷èâàåò øèðîêèå âîçìîæíîñòè ââîäà äèçàéíà. Ìîæíî îäíîâðåìåííî ðàáîòàòü ñ ðàçíûìè ïðèëîæåíèÿìè ñèñòåìû MAX+PLUS II. Íàïðèìåð ìîæíî îòêðûòü íåñêîëüêî ôàéëîâ ïðîåêòà è ïåðåíîñèòü èíôîðìàöèþ èç îäíîãî â äðóãîé â ïðîöåññå êîìïèëÿöèè èëè òåñòèðîâàíèÿ äðóãîãî ïðîåêòà. Èëè, íàïðèìåð, ïðîñìàòðèâàòü âñå äåðåâî ïðîåêòà è â îêíå ïðîñìîòðà ïåðåìåùàòüñÿ ñ îäíîãî óðîâíÿ íà äðóãîé, à â îêíå ðåäàêòîðà áóäåò ïîÿâëÿòüñÿ âûáðàííûé âàìè ôàéë, ïðè÷åì âûçûâàåòñÿ àâòîìàòè÷åñêè ñîîòâåòñòâóþùèé ðåäàêòîð äëÿ êàæäîãî ôàéëà (Ðèñ. 2.3). Îñíîâîé ñèñòåìû MAX+PLUS II ÿâëÿåòñÿ êîìïèëÿòîð, îáåñïå÷èâàþùèé ìîùíûå ñðåäñòâà îáðàáîòêè ïðîåêòà, ïðè ýòîì ìîæíî çàäàâàòü íóæíûå ðåæèìû ðàáîòû êîìïèëÿòîðà. Àâòîìàòè÷åñêàÿ ëîêàëèçàöèÿ îøèáêè, âûäà÷à ñîîáùåíèÿ è îáøèðíàÿ äîêóìåíòàöèÿ îá îøèáêàõ óñêîðÿþò è îáëåã÷àþò ïðîâåäåíèå èçìåíåíèé â äèçàéíå. Ìîæíî ñîçäàâàòü âûõîäíûå ôàéëû â ðàçíûõ ôîðìàòàõ äëÿ ðàçíûõ öåëåé, òàêèõ êàê ðàáîòà ôóíêöèé, ñâÿçü íåñêîëüêèõ óñòðîéñòâ, àíàëèç âðåìåííûõ ïàðàìåòðîâ, ïðîãðàììèðîâàíèå óñòðîéñòâà.
120
AL2089
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.3. Èåðàðõè÷åñêèé ïðîñìîòð ïðîåêòà
2.2. Ïðîöåäóðà ðàçðàáîòêè ïðîåêòà Ïðîöåäóðó ðàçðàáîòêè íîâîãî ïðîåêòà îò êîíöåïöèè äî çàâåðøåíèÿ ìîæíî óïðîùåííî ïðåäñòàâèòü ñëåäóþùèì îáðàçîì: ñîçäàíèå íîâîãî ôàéëà (design file) ïðîåêòà èëè èåðàðõè÷åñêîé ñòðóêòóðû íåñêîëüêèõ ôàéëîâ ïðîåêòà ñ èñïîëüçîâàíèåì ðàçëè÷íûõ ðåäàêòîðîâ ðàçðàáîòêè ïðîåêòà â ñèñòåìå MAX+PLUS II, ò.å. ãðàôè÷åñêîãî, òåêñòîâîãî è ñèãíàëüíîãî ðåäàêòîðîâ; çàäàíèå èìåíè ôàéëà ïðîåêòà âåðõíåãî óðîâíÿ (Top of Hierarchy) â êà÷åñòâå èìåíè ïðîåêòà (project name); íàçíà÷åíèå ñåìåéñòâà ÏËÈÑ äëÿ ðåàëèçàöèè ïðîåêòà. Ïîëüçîâàòåëü ìîæåò ñàì íàçíà÷èòü êîíêðåòíîå óñòðîéñòâî èëè ïðåäîñòàâèòü ýòî êîìïèëÿòîðó äëÿ òîãî, ÷òîáû îöåíèòü òðåáóåìûå ðåñóðñû; îòêðûòèå îêíà êîìïèëÿòîðà è åãî çàïóñê íàæàòèåì êíîïêè Start äëÿ íà÷àëà êîìïèëÿöèè ïðîåêòà. Ïî æåëàíèþ ïîëüçîâàòåëÿ ìîæíî ïîäêëþ÷èòü
121
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II ìîäóëü èçâëå÷åíèÿ âðåìåííûõ çàäåðæåê Timing SNF Extractor äëÿ ñîçäàíèÿ ôàéëà ðàçâîäêè, èñïîëüçóåìîãî ïðè òåñòèðîâàíèè âðåìåííûõ ïàðàìåòðîâ è àíàëèçå âðåìåííûõ ïàðàìåòðîâ; â ñëó÷àå óñïåøíîé êîìïèëÿöèè âîçìîæíî òåñòèðîâàíèå è âðåìåííîé àíàëèç, äëÿ ïðîâåäåíèÿ êîòîðîãî íåîáõîäèìî âûïîëíèòü ñëåäóþùèå äåéñòâèÿ: • äëÿ ïðîâåäåíèÿ âðåìåííîãî àíàëèçà îòêðûòü îêíî Timing Analyzer, âûáðàòü ðåæèì àíàëèçà è íàæàòü êíîïêó Start; • äëÿ ïðîâåäåíèÿ òåñòèðîâàíèÿ íóæíî ñíà÷àëà ñîçäàòü òåñòîâûé âåêòîð â ôàéëå êàíàëà òåñòèðîâàíèÿ (.scf), ïîëüçóÿñü ñèãíàëüíûì ðåäàêòîðîì, èëè â ôàéëå âåêòîðà (.vec), ïîëüçóÿñü òåêñòîâûì ðåäàêòîðîì. Çàòåì îòêðûòü îêíî îòëàä÷èêà-ñèìóëÿòîðà è íàæàòü êíîïêó Start; ïðîãðàììèðîâàíèå èëè çàãðóçêà êîíôèãóðàöèè âûïîëíÿåòñÿ ïóòåì çàïóñêà ìîäóëÿ ïðîãðàììàòîðà ñ ïîñëåäóþùåé âñòàâêîé óñòðîéñòâà â ïðîãðàììèðóþùèé àäàïòåð ïðîãðàììàòîðà MPU (Master Programming Unit) èëè ïîäêëþ÷åíèÿ óñòðîéñòâ MasterBlaster, BitBlaster, ByteBlaster èëè êàáåëÿ çàãðóçêè FLEX (FLEX download cable) ê óñòðîéñòâó, ïðîãðàììèðóåìîìó â ñèñòåìå; âûáîð êíîïêè Program äëÿ ïðîãðàììèðîâàíèÿ óñòðîéñòâ ñ ïàìÿòüþ òèïà EPROM èëè EEPROM (MAX, EPC) ëèáî âûáîð êíîïêè Configure äëÿ çàãðóçêè êîíôèãóðàöèè óñòðîéñòâà ñ ïàìÿòüþ òèïà SRAM (FLEX). Äàëåå áóäóò ïîäðîáíî ðàññìîòðåíû îñíîâíûå ýëåìåíòû ðàçðàáîòêè ïðîåêòà â ñèñòåìå MAX+PLUS II. Ñèñòåìó MAX+PLUS II ìîæíî çàïóñòèòü äâóìÿ ñïîñîáàìè, ùåëêíóâ äâàæäû ëåâîé êíîïêîé ìûøè íà ïèêòîãðàììå MAX+PLUS II èëè íàáðàâ maxplus2 â êîìàíäíîé ñòðîêå. Ïðè çàïóñêå ñèñòåìû MAX+PLUS II àâòîìàòè÷åñêè îòêðûâàåòñÿ åå Ãëàâíîå îêíî, ìåíþ êîòîðîãî îõâàòûâàåò âñå ïðèëîæåíèÿ ñèñòåìû MAX+PLUS II (Ðèñ. 2.4).  âåðõíåé ÷àñòè îêíà îòîáðàæàåòñÿ èìÿ ïðîåêòà è òåêóùåãî ôàéëà ïðîåêòà. Çàòåì ñëåäóåò ñòðîêà ìåíþ, ïîä íåé ïàíåëü îñíîâíûõ èíñòðóìåíòîâ ñèñòåìû, îáåñïå÷èâàþùàÿ áûñòðûé âûçîâ åå êîìïîíåíòîâ.  íèæíåé ÷àñòè ýêðàíà ðàñïîëàãàåòñÿ ñòðîêà ïîäñêàçêè. Âûçîâ êîìïîíåíòîâ ñèñòåìû óäîáíî ïðîèçâîäèòü ñ ïîìîùüþ îêíà ìåíþ MAX+PLUS II, ïðåäñòàâëåííîì íà Ðèñ. 2.5. Ðàññìîòðèì ïîäðîáíåå ìåíþ MAX+ PLUS II (Ðèñ. 2.5). ÏÎ ñèñòåìû MAX+ PLUS II ñîäåðæèò 11 ïðèëîæåíèé è ãëàâíóþ óïðàâëÿþùóþ îáîëî÷êó. Ðàçëè÷íûå ïðèëîæåíèÿ, îáåñïå÷èâàþùèå ñîçäàíèå ôàéëîâ ïðî-
122
AL2090
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
åêòà, ìîãóò áûòü àêòèâèçèðîâàíû îäíîâðåìåííî, ÷òî ïîçâîëÿåò ïîëüçîâàòåëþ ïåðåêëþ÷àòüñÿ ìåæäó ïðèëîæåíèÿìè ùåë÷êîì ìûøè èëè ñ ïîìîùüþ êîìàíä ìåíþ.  ýòî æå âðåìÿ ìîæåò ðàáîòàòü îäíî èç ôîíîâûõ ïðèëîæåíèé, íàïðèìåð, êîìïèëÿòîð, ñèìóëÿòîð, âðåìåííîé àíàëèçàòîð è ïðîãðàììàòîð. Îäíè è òå æå êîìàíäû ðàçíûõ ïðèëîæåíèé ðàáîòàþò îäèíàêîâî, ÷òî îáëåã÷àåò çàäà÷ó ðàçðàáîòêè ïðîåêòà. Îêíî ëþáîãî ïðèëîæåíèÿ ìîæíî ñâåðíóòü äî ïèêòîãðàììû, íå çàêðûâàÿ ïðèëîæåíèÿ, à çàòåì ñíîâà ðàç-
123
AL2091
Ðèñ. 2.4. Ãëàâíîå îêíî ñèñòåìû MAX+PLUS II
Ðèñ. 2.5. Îêíî ìåíþ MAX+PLUS II
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II âåðíóòü åãî. Ýòî ïîçâîëÿåò ïîëüçîâàòåëþ ðàáîòàòü ýôôåêòèâíî, íå çàãðîìîæäàÿ ðàáî÷èé ýêðàí.  Òàáë. 2.3 ïðèâåäåíû ïèêòîãðàììû è îïèñàíèå ïðèëîæåíèé. Ðàíåå íà Ðèñ. 2.3 ïðîèëëþñòðèðîâàí ðàáî÷èé ìîìåíò ìíîãîîêîííîé ðàçðàáîòêè äèçàéíà, êîãäà íà ýêðàíå îäíîâðåìåííî îòêðûòû íåñêîëüêî îêîí îáçîðà èåðàðõèè è òåêñòîâîãî ðåäàêòîðà. Ïåðåä òåì êàê íà÷àòü ðàáîòàòü â ñèñòåìå MAX+PLUS II, ñëåäóåò ïîíÿòü ðàçíèöó ìåæäó ôàéëàìè ïðîåêòà (design file), âñïîìîãàòåëüíûìè ôàéëàìè è ïðîåêòàìè. Ôàéë ïðîåêòà ýòî ãðàôè÷åñêèé, òåêñòîâûé èëè ñèãíàëüíûé ôàéë, ñîçäàííûé ñ ïîìîùüþ ãðàôè÷åñêîãî èëè ñèãíàëüíîãî ðåäàêòîðà ñèñòåìû MAX+PLUS II èëè â ëþáîì äðóãîì ñõåìíîì èëè òåêñòîâîì ðåäàêòîðå, èñïîëüçóþùåì ïðîìûøëåííûå ñòàíäàðòû, ëèáî ïðè ïîìîùè ïðîãðàììû netlist writer, èìåþùåéñÿ â ïàêåòàõ, ïîääåðæèâàþùèõ EDIF, VHDL è Verilog HDL. Ýòîò ôàéë ñîäåðæèò ëîãèêó äëÿ ïðîåêòà MAX+PLUS II è îáðàáàòûâàåòñÿ êîìïèëÿòîðîì. Kîìïèëÿòîð ìîæåò àâòîìàòè÷åñêè îáðàáàòûâàòü ñëåäóþùèå ôàéëû ïðîåêòà: Òàáëèöà 2.3. Ïðèëîæåíèÿ ñèñòåìû MAX+PLUS II Ïðèëîæåíèå Âûïîëíÿåìàÿ ôóíêöèÿ Hierarchy Îáçîð èåðàðõèè îòîáðàæàåò òåêóùóþ èåðàðõè÷åñêóþ ñòðóêòóðó ôàéëîâ Display â âèäå äåðåâà ñ âåòâÿìè, ïðåäñòàâëÿþùèìè ñîáîé ïîääèçàéíû. Ìîæíî âèçóàëüíî îïðåäåëèòü, ÿâëÿåòñÿ ëè ôàéë ïðîåêòà ñõåìíûì, òåêñòîâûì èëè ñèãíàëüíûì; êàêèå ôàéëû îòêðûòû â äàííûé ìîìåíò; êàêèå âñïîìîãàòåëüíûå ôàéëû â ïðîåêòå äîñòóïíû ïîëüçîâàòåëþ äëÿ ðåäàêòèðîâàíèÿ. Ìîæíî òàêæå íåïîñðåäñòâåííî îòêðûòü èëè çàêðûòü îäèí èëè íåñêîëüêî ôàéëîâ äåðåâà è ââåñòè íàçíà÷åíèÿ ðåñóðñîâ äëÿ íèõ Graphic Editor Ãðàôè÷åñêèé ðåäàêòîð ïîçâîëÿåò ðàçðàáàòûâàòü ñõåìíûé ëîãè÷åñêèé äèçàéí â ôîðìàòå ðåàëüíîãî îòîáðàæåíèÿ íà ýêðàíå WYSIWYG. Ïðèìåíÿÿ ðàçðàáîòàííûå ôèðìîé «Altera» ïðèìèòèâû, ìåãàôóíêöèè è ìàêðîôóíêöèè â êà÷åñòâå îñíîâíûõ áëîêîâ ðàçðàáîòêè, ïîëüçîâàòåëü ìîæåò òàêæå èñïîëüçîâàòü ñîáñòâåííûå ñèìâîëû Symbol Editor Ñèìâîëüíûé ðåäàêòîð ïîçâîëÿåò ðåäàêòèðîâàòü ñóùåñòâóþùèå ñèìâîëû è ñîçäàâàòü íîâûå
124
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Òàáëèöà 2.3 (îêîí÷àíèå) Ïðèëîæåíèå Âûïîëíÿåìàÿ ôóíêöèÿ Text Òåêñòîâûé ðåäàêòîð ïîçâîëÿåò ñîçäàâàòü è ðåäàêòèðîâàòü òåêñòîâûå ôàéëû Editor ïðîåêòà, íàïèñàííûå íà ÿçûêàõ îïèñàíèÿ àïïàðàòóðû AHDL, VHDL è Verilog HDL. Kðîìå òîãî, â ýòîì ðåäàêòîðå ìîæíî ñîçäàâàòü, ïðîñìàòðèâàòü è ðåäàêòèðîâàòü äðóãèå ôàéëû ôîðìàòà ASCII, èñïîëüçóåìûå äðóãèìè ïðèëîæåíèÿìè MAX+PLUS II. Ìîæíî ñîçäàâàòü ôàéëû íà ÿçûêàõ HDL è â äðóãèõ òåêñòîâûõ ðåäàêòîðàõ, îäíàêî äàííûé òåêñòîâûé ðåäàêòîð ñèñòåìû MAX+PLUS II äàåò ïðåèìóùåñòâà â âèäå êîíòåêñòíîé ñïðàâêè, âûäåëåíèÿ öâåòîì ñèíòàêñè÷åñêèõ êîíñòðóêöèé è ãîòîâûõ øàáëîíîâ ÿçûêîâ AHDL, VHDL è Verilog HDL Waveform Editor Ñèãíàëüíûé ðåäàêòîð âûïîëíÿåò äâîéíóþ ôóíêöèþ: èíñòðóìåíò äëÿ ðàçðàáîòêè äèçàéíà è èíñòðóìåíò äëÿ ââîäà òåñòîâûõ ñèãíàëîâ è íàáëþäåíèÿ çà ðåçóëüòàòàìè òåñòèðîâàíèÿ Floorplan Editor
Ïîóðîâíåâûé ïëàíèðîâùèê ïîçâîëÿåò ãðàôè÷åñêèìè ñðåäñòâàìè äåëàòü íàçíà÷åíèÿ âûâîäàì óñòðîéñòâà è ðåñóðñîâ ëîãè÷åñêèõ ýëåìåíòîâ è áëîêîâ. Ìîæíî ðåäàêòèðîâàòü ðàñïîëîæåíèå âûâîäîâ íà ÷åðòåæå êîðïóñà óñòðîéñòâà è íàçíà÷àòü ñèãíàëû îòäåëüíûì ëîãè÷åñêèì ýëåìåíòàì íà áîëåå ïîäðîáíîé ñõåìå ëîãè÷åñêîé ñòðóêòóðû (LAB view). Ìîæíî òàêæå ïðîñìàòðèâàòü ðåçóëüòàòû ïîñëåäíåé êîìïèëÿöèè
Compiler
Kîìïèëÿòîð îáðàáàòûâàåò ëîãè÷åñêèå ïðîåêòû, ðàçðàáîòàííûå äëÿ ñåìåéñòâ óñòðîéñòâ «Altera» Classic, MAX5000, MAX7000, MAX9000, FLEX6000, FLEX8000 è FLEX10K. Áîëüøèíñòâî çàäàíèé âûïîëíÿåòñÿ àâòîìàòè÷åñêè. Îäíàêî ïîëüçîâàòåëü ìîæåò óïðàâëÿòü ïðîöåññîì êîìïèëÿöèè ïîëíîñòüþ èëè ÷àñòè÷íî
Simulator
Ñèìóëÿòîð ïîçâîëÿåò òåñòèðîâàòü ëîãè÷åñêèå îïåðàöèè è âíóòðåííþþ ñèíõðîíèçàöèþ ïðîåêòèðóåìîé ëîãè÷åñêîé ñõåìû. Âîçìîæíû òðè ðåæèìà òåñòèðîâàíèÿ: ôóíêöèîíàëüíîå, âðåìåííîå è òåñòèðîâàíèå íåñêîëüêèõ ñîåäèíåííûõ ìåæäó ñîáîé óñòðîéñòâ
Timing Analyzer
Àíàëèçàòîð âðåìåííûõ ïàðàìåòðîâ àíàëèçèðóåò ðàáîòó ïðîåêòèðóåìîé ëîãè÷åñêîé öåïè ïîñëå òîãî, êàê îíà áûëà ñèíòåçèðîâàíà è îïòèìèçèðîâàíà êîìïèëÿòîðîì, ïîçâîëÿåò îöåíèòü çàäåðæêè, âîçíèêàþùèå â ñõåìå
Programmer Ïðîãðàììàòîð ïîçâîëÿåò ïðîãðàììèðîâàòü, êîíôèãóðèðîâàòü, ïðîâîäèòü âåðèôèêàöèþ è èñïûòûâàòü óñòðîéñòâà ôèðìû «Altera» Message Processor
Ãåíåðàòîð ñîîáùåíèé âûäàåò íà ýêðàí ñîîáùåíèÿ îá îøèáêàõ, ïðåäóïðåæäàþùèå è èíôîðìàöèîííûå ñîîáùåíèÿ î ñîñòîÿíèè ïðîåêòà ïîëüçîâàòåëÿ è ïîçâîëÿåò ïîëüçîâàòåëþ àâòîìàòè÷åñêè íàéòè èñòî÷íèê ñîîáùåíèÿ â èñõîäíîì èëè âñïîìîãàòåëüíîì ôàéëå (ôàéëàõ) è â ïîóðîâíåâîì ïëàíå íàçíà÷åíèé
125
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II ãðàôè÷åñèå ôàéëû ïðîåêòà (.gdf); òåêñòîâûå ôàéëû ïðîåêòà íà ÿçûêå AHDL (.tdf); ñèãíàëüíûå ôàéëû ïðîåêòà (.wdf); ôàéëû ïðîåêòà íà ÿçûêå VHDL (.vhd); ôàéëû ïðîåêòà íà ÿçûêå Verilog (.v); ñõåìíûå ôàéëû OrCAD (.sch); âõîäíûå ôàéëû EDIF (.edf); ôàéëû ôîðìàòà Xilinx Netlist (.xnf); ôàéëû ïðîåêòà «Altera» (.adf); ôàéëû öèôðîâîãî àâòîìàòà (.smf). Âñïîìîãàòåëüíûå ôàéëû ýòî ôàéëû, ñâÿçàííûå ñ ïðîåêòîì MAX+PLUS II, íî íå ÿâëÿþùèåñÿ ÷àñòüþ èåðàðõè÷åñêîãî äåðåâà ïðîåêòà. Áîëüøèíñòâî òàêèõ ôàéëîâ íå ñîäåðæèò ëîãèêè äèçàéíà. Íåêîòîðûå èç íèõ ñîçäàþòñÿ àâòîìàòè÷åñêè ïðèëîæåíèåì ñèñòåìû MAX+PLUS II, äðóãèå ïîëüçîâàòåëåì. Ïðèìåðàìè âñïîìîãàòåëüíûõ ôàéëîâ ÿâëÿþòñÿ ôàéëû íàçíà÷åíèé è êîíôèãóðàöèè (.acf), ñèìâîëüíûå ôàéëû (.sym), ôàéëû îò÷åòà (.rpt) è ôàéëû òåñòîâûõ âåêòîðîâ (.vec). Ïðîåêò ñîñòîèò èç âñåõ ôàéëîâ èåðàðõè÷åñêîé ñòðóêòóðû äèçàéíà, â òîì ÷èñëå âñïîìîãàòåëüíûõ è âûõîäíûõ ôàéëîâ. Èìåíåì ïðîåêòà ÿâëÿåòñÿ èìÿ ôàéëà (ghjtrnf) âåðõíåãî óðîâíÿ áåç ðàñøèðåíèÿ. Ñèñòåìà MAX+PLUS II âûïîëíÿåò êîìïèëÿöèþ, òåñòèðîâàíèå, âðåìåííîé àíàëèç è ïðîãðàììèðîâàíèå ñðàçó öåëîãî ïðîåêòà, õîòÿ ïîëüçîâàòåëü ìîæåò â ýòî âðåìÿ ðåäàêòèðîâàòü ôàéëû ýòîãî ïðîåêòà â ðàìêàõ äðóãîãî ïðîåêòà. Íàïðèìåð, âî âðåìÿ êîìïèëÿöèè ïðîåêòà project1 ïîëüçîâàòåëü ìîæåò ðåäàêòèðîâàòü äèçàéí-ôàéë TDF ñ ïîìîùüþ ÿçûêà AHDL, êîòîðûé ÿâëÿåòñÿ òàêæå ôàéëîì ïðîåêòà project2, è ñîõðàíÿòü åãî; îäíàêî åñëè îí çàõî÷åò êîìïèëèðîâàòü åãî, íóæíî áóäåò ñíà÷àëà äàòü èìÿ project2 â êà÷åñòâå íàçâàíèÿ ïðîåêòà. Äëÿ êàæäîãî ïðîåêòà ñëåäóåò ñîçäàâàòü îòäåëüíûé ïîäêàòàëîã â ðàáî÷åì êàòàëîãå ñèñòåìû MAX+PLUS II (\max2work).  ñèñòåìå MAX+PLUS II ëåãêîäîñòóïíû âñå èíñòðóìåíòû äëÿ ñîçäàíèÿ ëîãè÷åñêîãî ïðîåêòà. Ðàçðàáîòêà ïðîåêòà óñêîðÿåòñÿ çà ñ÷åò èìåþùèõñÿ ñòàíäàðòíûõ ëîãè÷åñêèõ ôóíêöèé, â òîì ÷èñëå ïðèìèòèâîâ, ìåãàôóíêöèé, áèáëèîòåêè ïàðàìåòðèçèðîâàííûõ ìîäóëåé è ìàêðîôóíêöèé óñòàðåâøåãî òèïà ìèêðîñõåì 74-é ñåðèè. Kðàéíå âðåäíî èñïîëüçîâàòü óñòàðåâøèå áèáëèîòåêè è ïåðåíîñèòü íà ÏËÈÑ ñõåìîòåõíèêó ñòàíäàðòíûõ ÒÒË-ñåðèé. Ñëåäóåò ïðîåêòèðîâàòü ïðîåêò èìåííî ïîä àðõèòåêòóðó ÏËÈÑ äëÿ ïîëó÷åíèÿ áîëåå èëè ìåíåå ðàçóìíûõ ðåçóëüòàòîâ.
126
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Ñõåìíûå ôàéëû ïðîåêòà ñîçäàþòñÿ â ãðàôè÷åñêîì ðåäàêòîðå MAX+PLUS II. Ìîæíî òàêæå îòêðûòü, ðåäàêòèðîâàòü è ñîõðàíÿòü ñõåìû, ñîçäàííûå ñõåìíûì ðåäàêòîðîì OrCAD. Ïðîåêòû íà ÿçûêàõ AHDL, VHDL è Verilog HDL ñîçäàþòñÿ â òåêñòîâîì ðåäàêòîðå MAX+PLUS II èëè ëþáîì äðóãîì òåêñòîâîì ðåäàêòîðå. Ñèãíàëüíûå ïðîåêòû ñîçäàþòñÿ â ñèãíàëüíîì ðåäàêòîðå MAX+PLUS II. Ôàéëû ôîðìàòîâ EDIF è «Xilinx», ðàçðàáîòàííûå äðóãèìè ñòàíäàðòíûìè èíñòðóìåíòàìè ñèñòåìû EDA, ìîãóò áûòü èìïîðòèðîâàíû â ñðåäó MAX+PLUS II. Ñõåìíûå è òåñòîâûå ôàéëû, ñîçäàííûå â ñèñòåìå MAX+PLUS II (ïîä DOS) è ïðîãðàììíûõ ïàêåòàõ ôèðìû «Altera» A+PLUS è SAM+PLUS ìîãóò áûòü èíòåãðèðîâàíû â ñðåäå MAX+PLUS II. Íàçíà÷åíèÿ ôèçè÷åñêèõ ðåñóðñîâ äëÿ ëþáîãî óçëà èëè êîíòàêòà â òåêóùåì ïðîåêòå ìîãóò áûòü ââåäåíû â ãðàôè÷åñêóþ ñðåäó ñ ïîìîùüþ ïîóðîâíåâîãî ïëàíèðîâùèêà. Îí ñîõðàíÿåò äëÿ ïðîåêòà íàçíà÷åíèÿ â ôàéëå ñ ðàñøèðåíèåì .acf, â êîòîðîì õðàíÿòñÿ âñå òèïû íàçíà÷åíèé ðåñóðñîâ, çîíäîâ (Probes) è óñòðîéñòâ (Devices) òàê æå, êàê è êîíôèãóðàöèîííûå óñòàíîâêè (Assign) äëÿ êîìïèëÿòîðà, ñèìóëÿòîðà è âðåìåííîãî àíàëèçàòîðà. Ãðàôè÷åñêèå ñèìâîëû, ïðåäñòàâëÿþùèå ëþáîé òèï ôàéëà ïðîåêòà, ìîãóò áûòü àâòîìàòè÷åñêè ñîçäàíû â ëþáîì èç ðåäàêòîðîâ MAX+PLUS II, ïðåäíàçíà÷åííûõ äëÿ ðàçðàáîòêè ïðîåêòîâ ñ ïîìîùüþ êîìàíäû File/Create Default Symbol Command. Ñ ïîìîùüþ ñèìâîëüíîãî ðåäàêòîðà MAX+PLUS II ìîæíî ðåäàêòèðîâàòü ñèìâîëû èëè ñîçäàâàòü ñîáñòâåííûå, à çàòåì èñïîëüçîâàòü èõ â ëþáîì ñõåìíîì ôàéëå ïðîåêòà.  èåðàðõè÷åñêîé ñòðóêòóðå ïðîåêòà íà ëþáîì óðîâíå äîïóñêàåòñÿ ñìåøàííîå èñïîëüçîâàíèå ôàéëîâ ñ ðàñøèðåíèÿìè .gdf, .tdf, .vhd, .v, .edf, .sch. Îäíàêî ôàéëû ñ ðàñøèðåíèåì .wdf, .xnf, .adf, .smf äîëæíû áûòü ëèáî íà ñàìîì íèæíåì èåðàðõè÷åñêîì óðîâíå ïðîåêòà, ëèáî áûòü åäèíñòâåííûì ôàéëîì. Ñïîñîáû çàäàíèÿ ôàéëîâ ïðîåêòà ïîêàçàíû íà Ðèñ. 2.6. Âî âñåõ ïðèëîæåíèÿõ MAX+PLUS II åñòü âîçìîæíîñòü ñ ïîìîùüþ êîìàíä èç ìåíþ Assign (íàçíà÷èòü) ââîäèòü, ðåäàêòèðîâàòü è óäàëÿòü òèïû íàçíà÷åíèé ðåñóðñîâ, óñòðîéñòâ è ïàðàìåòðîâ, êîòîðûå óïðàâëÿþò êîìïèëÿöèåé ïðîåêòà, â òîì ÷èñëå ëîãè÷åñêèì ñèíòåçîì, ðàçäåëåíèåì íà ÷àñòè è ïîäãîíêîé. Íà Ðèñ. 2.7 ïðåäñòàâëåíû êîìàíäû ìåíþ Assign. Ïîëüçîâàòåëü ìîæåò äåëàòü íàçíà÷åíèÿ äëÿ òåêóùåãî ïðîåêòà íåçàâèñèìî îò òîãî, îòêðûòû ëè êàêîé-íèáóäü ôàéë ïðîåêòà èëè îêíî ïðèëîæåíèé. Ñèñòåìà MAX+PLUS II ñîõðàíÿåò èíôîðìàöèþ äëÿ ïðîåêòà â ôàéëå ñ ðàñøèðåíèåì .acf. Èçìåíåíèÿ íàçíà÷åíèé, ñäåëàííûå â îêíå ïîóðîâ-
127
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Текстовый редактор (Text Editor)
Символьный редактор (Symbol Editor)
Поуровневый планировщик (Floorplan Editor)
TopN Level File
.gdf
.sch
.wdf
.tdf
Сигнальный редактор (Waveform Editor)
.vhd
Файлы проекта
.v
Графические Файлы файлы сигналов
.edf
.xnf
Текстовые файлы
.adf
.smf
AL2103+
Графический редактор (Graphic Editor)
Ðèñ. 2.6. Ñïîñîáû îïèñàíèÿ ôàéëîâ ïðîåêòà
AL2104
íåâîãî ïëàíèðîâùèêà, òàêæå ñîõðàíÿþòñÿ â ôàéëå ACF. Kðîìå òîãî, ìîæíî ðåäàêòèðîâàòü ôàéë ACF äëÿ ïðîåêòà â òåêñòîâîì ðåäàêòîðå. Ñëåäóþùèå ôóíêöèè ÿâëÿþòñÿ îáùèìè äëÿ âñåõ ïðèëîæåíèé MAX+PLUS II: íàçíà÷åíèÿ óñòðîéñòâ, ðåñóðñîâ è çîíäîâ; ñîõðàíåíèå ïðåäûäóùåé âåðñèè; ãëîáàëüíûå îïöèè óñòðîéñòâà â ïðîåêòå; ãëîáàëüíûå ïàðàìåòðû ïðîåêòà; ãëîáàëüíûå òðåáîâàíèÿ ê âðåìåííûì ïàðàìåòðàì ïðîåêòà; ãëîáàëüíûé ëîãè÷åñêèé ñèíòåç ïðîåêòà. Ðàññìîòðèì èõ ïîäðîáíåå. Ðåñóðñ ÿâëÿåòñÿ ÷àñòüþ óñòðîéñòâà ôèðìû «Altera», êàê, íàïðèìåð, êîíòàêò èëè ëîãè÷åñêèé ýëåìåíò, êîòîðûé âûïîëíÿåò êîíêðåòíîå, îïðåäåëåííîå ïîëüçîâàòåëåì Ðèñ. 2.7. Ìåíþ íàçíà÷åíèé ïðîåêòà Assign
128
AL2105
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.8. Íàçíà÷åíèå êëèêè (êîìàíäà Assign/Clique)
çàäàíèå. Ïîëüçîâàòåëü ìîæåò íàçíà÷èòü ëîãèêó ðåñóðñàì óñòðîéñòâà äëÿ ãàðàíòèè òîãî, ÷òî êîìïèëÿòîð MAX+PLUS II ñäåëàåò ïîäãîíêó â ïðîåêòå òàê, êàê õî÷åò ïîëüçîâàòåëü. Åñòü ñëåäóþùèå òèïû íàçíà÷åíèé. Clique assignment (íàçíà÷åíèå êëèêè) çàäàåò, êàêèå ëîãè÷åñêèå ôóíêöèè äîëæíû îñòàâàòüñÿ âìåñòå. Ãðóïïèðîâêà ëîãè÷åñêèõ ôóíêöèé â êëèêè ãàðàíòèðóåò, ÷òî îíè ðåàëèçóþòñÿ â îäíîì è òîì æå áëîêå ëîãè÷åñêîé ñòðóêòóðû LAB, áëîêå ÿ÷ååê ïàìÿòè EAB, â îäíîì ðÿäó èëè óñòðîéñòâå. Äëÿ íàçíà÷åíèÿ êëèêè èñïîëüçóþò êîìàíäó Assign/Clique (Ðèñ. 2.8).  ïîëå Clique Name çàäàþò èìÿ êëèêè.  ïîëå Node Name çàäàþò èìÿ óçëà. Óçëû, îáúåäèíåííûå â êëèêè (èíîãäà íàçûâàþò ãðóïïû, íî òàêîå íàèìåíîâàíèå ïðèâîäèò ê ïóòàíèöå ñ ïîíÿòèåì ãðóïïû â AHDL), ïðè êîìïèëÿöèè áóäóò ðàçìåùàòüñÿ â ïðåäåëàõ îäíîãî ËÁ. Chip assignment (íàçíà÷åíèå ÷èïà) çàäàåò, êàêèå ëîãè÷åñêèå ôóíêöèè äîëæíû áûòü ðåàëèçîâàíû â îäíîì è òîì æå óñòðîéñòâå â ñëó÷àå ðàçäåëåíèÿ ïðîåêòà íà ÷àñòè (íà íåñêîëüêî óñòðîéñòâ).
129
AL2106
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.9. Îêíî êîìàíäû Assign/Pin/Location/Chip
Pin assignment (íàçíà÷åíèå âûâîäà) íàçíà÷àåò âõîä èëè âûõîä îäíîé ëîãè÷åñêîé ôóíêöèè, òàêîé êàê ïðèìèòèâ èëè ìåãàôóíêöèÿ, êîíêðåòíîìó êîíòàêòó èëè âåðòèêàëüíîìó (ãîðèçîíòàëüíîìó) ðÿäó âûâîäîâ ÏËÈÑ. Location assignment (íàçíà÷åíèå ÿ÷åéêè) íàçíà÷àåò åäèíñòâåííóþ ëîãè÷åñêóþ ôóíêöèþ, òàêóþ êàê âûõîä ïðèìèòèâà èëè ìåãàôóíêöèè, êîíêðåòíîé ÿ÷åéêå ÷èïà, òàêîé êàê ëîãè÷åñêèé ýëåìåíò, ÿ÷åéêà ââîäà/âûâîäà, ÿ÷åéêà ïàìÿòè, áëîêè LAB è EAB, ãîðèçîíòàëüíûå èëè âåðòèêàëüíûå ðÿäû. Íàçíà÷åíèÿ âûâîäà, ÷èïà è ÿ÷åéêè âûïîëíÿþòñÿ ñ ïîìîùüþ êîìàíäû Assign/Pin/Location/Chip, îêíî êîòîðîé ïðèâåäåíî íà Ðèñ. 2.9.  ïîëÿõ äàííîãî îêíà ìîæíî çàäàòü íîìåð âûâîäà (Pin), ëîãè÷åñêóþ ÿ÷åéêó èëè áëîê, à òàêæå, èñïîëüçóÿ êíîïêè Change è Delete, èçìåíèòü íàçíà÷åíèÿ. Probe assignment (íàçíà÷åíèå çîíäà) ïðèñâàèâàåò ëåãêî çàïîìèíàþùååñÿ óíèêàëüíîå èìÿ âõîäó èëè âûõîäó ëîãè÷åñêîé ôóíêöèè. Äàííîå íàçíà÷åíèå âåñüìà ïîëåçíî ïðè ìîäåëèðîâàíèè ñèñòåìû. Äëÿ íàçíà÷åíèÿ çîíäà èñïîëüçóþò êîìàíäó Assign/Probe (Ðèñ. 2.10).
130
AL2107
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.10. Ìåíþ êîìàíäû Assign/Probe
Connected pin assignment (íàçíà÷åíèå ñîåäèíåííûõ âûâîäîâ) çàäàåò âíåøíåå ñîåäèíåíèå äâóõ èëè áîëåå âûâîäîâ íà ñõåìå ïîëüçîâàòåëÿ. Ýòà èíôîðìàöèÿ òàêæå ïîëåçíà â ðåæèìå òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ è ïðè òåñòèðîâàíèè íåñêîëüêèõ ñêîìïîíîâàííûõ ïðîåêòîâ. Äëÿ âûïîëíåíèÿ íàçíà÷åíèÿ ñîåäèíåííûõ âûâîäîâ èñïîëüçóþò êîìàíäó Assign/Connected Pins (Ðèñ. 2.11). Local routing assignment (íàçíà÷åíèå ìåñòíîé òðàññèðîâêè) ïðèñâàèâàåò êîýôôèöèåíò ðàçâåòâëåíèÿ ïî âûõîäó óçëà ëîãè÷åñêîìó ýëåìåíòó, íàõîäÿùåìóñÿ â òîì æå áëîêå LAB, ÷òî è óçåë, èëè æå â ñîñåäíåì LAB, ñìåæíîì ñ âûáðàííûì óçëîì, ñ èñïîëüçîâàíèåì îáùèõ ìåñòíûõ ñâÿçåé. Ìåñòíàÿ òðàññèðîâêà òàêæå ïðîèçâîäèòñÿ ìåæäó óçëîì, ïîìåùåííûì â áëîê LAB íà ïåðèôåðèè óñòðîéñòâà, è âûõîäíûì êîíòàêòîì, ñ êîòîðûì îí ñîåäèíåí. Íàçíà÷åíèå ìåñòíîé òðàññèðîâêè ïðîèçâîäèòñÿ ñ ïîìîùüþ êîìàíäû Assign/Local routing (Ðèñ. 2.12). Device assignment (íàçíà÷åíèå óñòðîéñòâà) íàçíà÷àåò òèï ÏËÈÑ, â êîòîðîé áóäåò âîïëîùåí ïðîåêò. Åñëè ïðîåêò ñîñòîèò èç íåñêîëüêèõ óñòðîéñòâ, äàííûé òèï íàçíà÷åíèÿ äåëàåò íàçíà÷åíèÿ ÷èïîâ êîíêðåòíûì óñòðîéñòâàì. Ìîæíî òàêæå âûáðàòü îïöèþ AUTO è ïðåäîñòàâèòü êîìïèëÿòîðó âûáðàòü
131
AL2108
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
AL2109
Ðèñ. 2.11. Ìåíþ êîìàíäû Assign/Connected Pins
Ðèñ. 2.12. Îêíî êîìàíäû Assign/Local routing
132
AL2110
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.13. Îêíî êîìàíäû Assign/ Device
óñòðîéñòâî èç çàäàííîãî ñåìåéñòâà óñòðîéñòâ. Ïðîöåññîì àâòîìàòè÷åñêîãî âûáîðà óñòðîéñòâà ìîæíî óïðàâëÿòü, çàäàâàÿ äèàïàçîí è ÷èñëî óñòðîéñòâ â ñåìåéñòâå. Åñëè ïðîåêò îêàçàëñÿ ñëèøêîì áîëüøèì äëÿ ðåàëèçàöèè â îäíîì óñòðîéñòâå, ìîæíî çàäàòü òèï è ÷èñëî äîïîëíèòåëüíûõ óñòðîéñòâ. Äëÿ âûáîðà óñòðîéñòâà èñïîëüçóåòñÿ êîìàíäà Assign/Device (Ðèñ. 2.13). Logic option assignment (íàçíà÷åíèå ëîãè÷åñêîé îïöèè) óïðàâëÿåò ëîãè÷åñêèì ñèíòåçîì îòäåëüíûõ ëîãè÷åñêèõ ôóíêöèé âî âðåìÿ êîìïèëÿöèè ñ ïðèìåíåíèåì ñòèëÿ ëîãè÷åñêîãî ñèíòåçà è/èëè îòäåëüíûõ îïöèé ëîãè÷åñêîãî ñèíòåçà. Ôèðìà «Altera» îáåñïå÷èâàåò áîëüøîå êîëè÷åñòâî ëîãè÷åñêèõ îïöèé, à òàêæå ãîòîâûõ ñòèëåé, êàæäûé èç êîòîðûõ ïðåäñòàâëÿåò ñîáîé ñîáðàíèå óñòàíîâîê äëÿ ëîãè÷åñêèõ îïöèé, îáúåäèíåííûõ îäíèì èìåíåì ñòèëÿ ñèíòåçà (Synthesis Style). Ïîëüçîâàòåëü ìîæåò ïðèìåíÿòü ãîòî-
133
AL2111
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.14. Îêíî êîìàíäû Assign/Logic Options
âûå ñòèëè èëè ñîçäàâàòü íîâûå. Ñòèëè ñèíòåçà ïîçâîëÿþò íàñòðàèâàòü îïöèè ñèíòåçà íà îïðåäåëåííîå ñåìåéñòâî óñòðîéñòâ, ó÷èòûâàÿ ïðè ýòîì àðõèòåêòóðó ñåìåéñòâà. Äëÿ íàñòðîéêè ñòèëåé ñèíòåçà ïðèìåíÿåòñÿ êîìàíäà Assign/Logic Options (Ðèñ. 2.14). Timing assignment (íàçíà÷åíèå âðåìåííûõ ïàðàìåòðîâ) óïðàâëÿåò ëîãè÷åñêèì ñèíòåçîì è ïîäãîíêîé îòäåëüíûõ ëîãè÷åñêèõ ôóíêöèé äëÿ ïîëó÷åíèÿ òðåáóåìûõ õàðàêòåðèñòèê äëÿ âðåìåíè çàäåðæêè tPD (âõîäíåòàêòèðóåìûé âûõîä), tCO (ñèíõðîñèãíàëâûõîä), tSU (ñèíõðîñèãíàëâðåìÿ óñòàíîâêè), fMAX (÷àñòîòà ñèíõðîñèãíàëà). Ïîëüçîâàòåëü ìîæåò òàêæå âûðåçàòü ñîåäèíåíèÿ ìåæäó ïóòÿìè ðàñïðîñòðàíåíèÿ äëÿ êîíêðåòíîãî ñèãíàëà, íàçûâàåìîãî «óçëîì» â ñèñòåìå MAX+PLUS II è äðóãèìè óçëàìè ïðîåêòà. Íàçíà÷åíèå âðåìåííûõ ïàðàìåòðîâ óçëà ïðîèçâîäèòñÿ ïî êîìàíäå Assign/Timing Requirements (Ðèñ. 2.15).
134
AL2112
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.15. Îêíî êîìàíäû Assign/Timing Requirements
Kðîìå èñïîëüçîâàíèÿ êîìàíä ìåíþ Assign, íàçíà÷åíèÿ ìîæíî âûïîëíÿòü ùåë÷êîì ïðàâîé êíîïêè ìûøè ïî âûáðàííîìó óçëó ïðîåêòà è âûáèðàÿ ñîîòâåòñòâóþùåå íàçíà÷åíèå âî âñïëûâàþùåì ìåíþ (Ðèñ. 2.16). Ìîæíî îïðåäåëèòü ãëîáàëüíûå îïöèè êîìïèëÿòîðà äëÿ òîãî, ÷òîáû îí èõ èñïîëüçîâàë äëÿ âñåõ óñòðîéñòâ ïðè îáðàáîòêå ïðîåêòà. Äëÿ ðåçåðâèðîâàíèÿ äîïîëíèòåëüíûõ âîçìîæíîñòåé ëîãèêè íà áóäóùåå ìîæíî çàäàòü ïðîöåíòíîå ñîîòíîøåíèå âûâîäîâ è ëîãè÷åñêèõ ýëåìåíòîâ, êîòîðûå äîëæíû îñòàâàòüñÿ íåèñïîëüçîâàííûìè âî âðåìÿ òåêóùåé êîìïèëÿöèè. Ìîæíî òàêæå çàäàòü óñòàíîâêè äëÿ áèòîâ îïöèé óñòðîéñòâ è âûâîäîâ â êîíôèãóðàöèè óñòðîéñòâ, èñïîëüçóåìîé äëÿ íåñêîëüêèõ öåëåé. Íàïðèìåð, ìîæíî çàäàòü áèò çàùèòû îò íåñàíêöèîíèðîâàííîãî ñ÷èòûâàíèÿ (security bit) ãëîáàëüíûì, ÷òî ïðåäîòâðàòèò ïèðàòñêîå êîïèðîâàíèå òîïîëîãèè óñòðîéñòâ, áàçèðóþùèõñÿ íà ïàìÿòè EPROM èëè EEPROM.
135
AL2113
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.16. Âûáîð êîìàíä Assign ñ ïîìîùüþ âñïëûâàþùåãî ìåíþ
Ìîæíî çàäàòü èìåíà è ãëîáàëüíûå óñòàíîâêè, êîòîðûå áóäóò èñïîëüçîâàíû êîìïèëÿòîðîì äëÿ ïàðàìåòðîâ âî âñåõ ïàðàìåòðèçîâàííûõ ôóíêöèÿõ â ïðîåêòå. Ìîæíî ââåñòè ãëîáàëüíûå âðåìåííûå òðåáîâàíèÿ äëÿ ïðîåêòà, çàäàâàÿ îáùèå õàðàêòåðèñòèêè äëÿ âðåìåíè çàäåðæêè tPD (âõîäíåðåãèñòðèðóåìûé âûõîä), tCO (ñèíõðîñèãíàëâûõîä), tSU (ñèíõðîñèãíàëâðåìÿ óñòàíîâêè), fMAX (÷àñòîòà ñèíõðîñèãíàëà). Ìîæíî òàêæå âûðåçàòü ñîåäèíåíèÿ ìåæäó âñåìè äâóíàïðàâëåííûìè êîíòóðàìè îáðàòíîé ñâÿçè, öåïÿìè ïðîõîæäåíèÿ ñèãíàëîâ Preset (óñòàíîâêà 1) è Clear (óñòàíîâêà 0) è äðóãèìè öåïÿìè ñèíõðîíèçàöèè â ïðîåêòå. Äëÿ ýòèõ öåëåé èñïîëüçóåòñÿ êîìàíäà Assign/Global Project Timing Requirements (Ðèñ. 2.17). Ôëàæîê Cut All Bidirectional Feedback Timing Paths ïîçâîëÿåò èñêëþ÷èòü âñå öåïè îáðàòíîé ñâÿçè äëÿ äâóíàïðàâëåííûõ âûâîäîâ. Ôëàæîê Cut All Clear & Preset Timing Paths ïîçâîëÿåò óäàëèòü ñîåäèíåíèÿ ìåæäó âñåìè öåïÿìè ñáðîñà è ïðåäóñòàíîâêè ïðîåêòà. Ôëàæîê Ignore Timing Assignments During Fitting ïîçâîëÿåò çàïóñòèòü òðàññèðîâùèê (Fitter) áåç ó÷åòà âðåìåííûõ îãðàíè÷åíèé ïðîåêòà. Kîãäà ýòîò ôëàæîê ñáðîøåí è çàäàíû âðåìåííûå ïàðàìåòðû, îñóùåñòâëÿåòñÿ ò.í. óïðàâëÿåìûé ñèíòåç (time driving synthesis).
136
AL2 114
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.17. Îêíî êîìàíäû Assign/Global Project Timing Requirements
Èç ñîáñòâåííîãî îïûòà çàìå÷åíî, ÷òî âíà÷àëå äëÿ óñêîðåíèÿ êîìïèëÿöèè ñëåäóåò âûáðàòü ýòîò ôëàæîê, à â äàëüíåéøåì ïðè «âûëèçûâàíèè» ïðîåêòà ñáðîñèòü. Ñëåäóåò ïîìíèòü, ÷òî óïðàâëÿåìûé âðåìåííîé ñèíòåç âîçìîæåí òîëüêî äëÿ óñòðîéñòâ FLEX, äëÿ óñòðîéñòâ MAX âðåìåíà çàäåðæåê ïðåäîïðåäåëåíû, è â ñëó÷àå íàçíà÷åíèÿ âðåìåííûõ ïàðàìåòðîâ ïðîèñõîäèò òîëüêî ëèøü ïðîâåðêà ñîîòâåòñòâèÿ ïîëó÷åííûõ ïðè ñèíòåçå ïàðàìåòðîâ çàäàííûì. Ìîæíî ñäåëàòü ãëîáàëüíûå óñòàíîâêè äëÿ êîìïèëÿòîðà â ÷àñòè ëîãè÷åñêîãî ñèíòåçà ïðîåêòà. Ìîæíî çàäàòü èñïîëüçóåìûé ïî óìîë÷àíèþ ñòèëü ëîãè÷åñêîãî ñèíòåçà, îïðåäåëèòü ñòåïåíü îïòèìèçàöèè ïî ñêîðîñòè è çàíèìàåìûì ðåñóðñàì, äàòü óêàçàíèÿ êîìïèëÿòîðó ïî âûáîðó àâòîìàòè÷åñêèõ ãëîáàëüíûõ ñèãíàëîâ óïðàâëåíèÿ, òàêèõ êàê Clock (òàêòîâûé), Clear (óñòàíîâêà 0), Preset (óñòàíîâêà 1) è Output Enable (ðàçðåøåíèå âûõîäà). Ìîæíî òàêæå âûáðàòü äëÿ êîìïèëÿòîðà ðåæèì ñòàíäàðòíîãî èëè ìíîãîóðîâíåâîãî ñèíòåçà, ðåæèì êîäèðîâàíèÿ öèôðîâîãî àâòîìàòà ñ 1 ïðè ïîäêëþ÷åíèè ïèòàíèÿ, à òàêæå ðåæèì àâòîìàòè÷åñêîé óïàêîâêè ðåãèñòðîâ. Kðîìå òîãî, ìîæíî âûáðàòü âàðèàíò àâòîìàòè÷åñêîé ðåàëèçàöèè ëîãèêè â áûñòðûõ âõîäíûõ èëè âûõîäíûõ ëîãè÷åñêèõ ýëåìåíòàõ è ÿ÷åéêàõ âõîäà/âûõîäà, âûâîäàõ ñ îòêðûòûì ñòîêîì è áëîêàõ ÿ÷ååê ïàìÿòè. Äëÿ íàçíà÷åíèÿ ãëîáàëüíûõ ïàðàìåòðîâ ëîãè÷åñêîãî ñèíòåçà èñïîëüçóþò êîìàíäó Assign/Global Project Logic Synthesis (Ðèñ. 2.18).
137
AL2115
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.18. Îêíî êîìàíäû Assign/Global Project Logic Synthesis
Kíîïêà Define Synthesis Style ïîçâîëÿåò âûáðàòü áîëåå òîíêèå ïàðàìåòðû ñòèëÿ ñèíòåçà (Ðèñ. 2.19), òàêèå êàê èìÿ ñòèëÿ, ñïîñîá ðåàëèçàöèè è ìàêñèìàëüíóþ äëèíó öåïî÷åê ïåðåíîñà è êàñêàäèðîâàíèÿ, ñòåïåíü ìèíèìèçàöèè ëîãè÷åñêèõ ôóíêöèé è äðóãèå ïàðàìåòðû ñèíòåçà. Kíîïêà Advanced Options ïîçâîëÿåò âûáðàòü ïàðàìåòðû ñèíòåçà â äèàëîãîâîì îêíå, èçîáðàæåííîì íà Ðèñ. 2.20.
138
AL2116
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
AL2117
Ðèñ. 2.19. Îïðåäåëåíèå ñòèëÿ ñèíòåçà
Ðèñ. 2.20. Îêíî Advanced Options
139
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
2.3. Ðåäàêòîðû MAX+PLUS II Âñå ïÿòü ðåäàêòîðîâ MAX+PLUS II è òðè ðåäàêòîðà ñîçäàíèÿ ôàéëà ïðîåêòà (ãðàôè÷åñêèé, òåêñòîâûé è ñèãíàëüíûé) èìåþò îáùèå ôóíêöèè, òàêèå êàê, íàïðèìåð, ñîõðàíåíèå è âûçîâ ôàéëà. Kðîìå òîãî, ïðèëîæåíèÿ ðåäàêòîðà MAX+PLUS II èìåþò ñëåäóþùèå îáùèå ôóíêöèè: ñîçäàíèå ôàéëîâ ñèìâîëîâ è ôàéëîâ ñ ïðîòîòèïàìè ôóíêöèé (in-clude file symbol and include file generation); ïîèñê óçëîâ (node location); òðàâåðç èåðàðõè÷åñêîãî äåðåâà (hierarchy traversal); âñïëûâàþùèå îêíà ìåíþ, çàâèñÿùåãî îò êîíòåêñòà (context-sensitive menu comands); âðåìåííîé àíàëèç (timing analysis); ïîèñê è çàìåíà ôðàãìåíòîâ òåêñòà (find & replace text); îòìåíà ïîñëåäíåãî øàãà ðåäàêòèðîâàíèÿ, åãî âîçâðàùåíèå, âûðåçêà, êîïèðîâàíèå, âêëåèâàíèå è óäàëåíèå âûáðàííûõ ôðàãìåíòîâ, îáìåí ôðàãìåíòàìè ìåæäó ïðèëîæåíèÿìè MAX+PLUS II èëè ïðèëîæåíèÿìè Windows (undo, cut, copy, paste & delete); ïå÷àòü (print). Íà Ðèñ. 2.21 ïîêàçàíî îêíî ãðàôè÷åñêîãî ðåäàêòîðà (Graphic Editor) MAX+PLUS II, îáåñïå÷èâàþùåãî ïðîåêòèðîâàíèå â ðåàëüíîì ôîðìàòå èçîáðàæåíèÿ (WYSIWIG).  íåì ìîæíî ñîçäàâàòü íîâûå ôàéëû (êîìàíäà New èç ìåíþ File). Âûçûâàåòñÿ ãðàôè÷åñêèé ðåäàêòîð èç ìåíþ MAX+PLUS II. Ãðàôè÷åñêèå ôàéëû ïðîåêòà (.gdf) èëè ñõåìíûå ôàéëû OrCAD (.sch), ñîçäàííûå â äàííîì ãðàôè÷åñêîì ðåäàêòîðå, ìîãóò âêëþ÷àòü ëþáóþ êîìáèíàöèþ ñèìâîëîâ ïðèìèòèâîâ, ìåãàôóíêöèé è ìàêðîôóíêöèé. Ñèìâîëû ìîãóò ïðåäñòàâëÿòü ñîáîé ëþáîé òèï ôàéëà ïðîåêòà (.gdf, .sch, .tdf, .vhd, .v, .wdf, .edf, .xnf, .adf, .smf). Óíèâåðñàëüíîñòü ãðàôè÷åñêîãî ðåäàêòîðà õàðàêòåðèçóåòñÿ ñëåäóþùèìè ÷åðòàìè: èíñòðóìåíò âûáîðà («ñòðåëêà») îáëåã÷àåò ðàçðàáîòêó ïðîåêòà. Îí ïîçâîëÿåò äâèãàòü è êîïèðîâàòü îáúåêòû, à òàêæå ââîäèòü íîâûå ñèìâîëû. Kîãäà âû ïîìåùàåòå åãî íà âûâîä èëè êîíåö ëèíèè, îí àâòîìàòè÷åñêè ïðåîáðàçóåòñÿ â èíñòðóìåíò ðèñîâàíèÿ îðòîãîíàëüíûõ ëèíèé. Åñëè èì ùåëêíóòü íà òåêñòå, îí àâòîìàòè÷åñêè ïðåîáðàçóåòñÿ â èíñòðóìåíò ðåäàêòèðîâàíèÿ òåêñòà; ñèìâîëû ñîåäèíÿþòñÿ ñèãíàëüíûìè ëèíèÿìè, êîòîðûå íàçûâàþò óçëàìè (nodes) èëè ëèíèÿìè øèí (bus), êîòîðûå ïðåäñòàâëÿþò ñîáîé íå-
140
AL2118
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.21. Îêíî ãðàôè÷åñêîãî ðåäàêòîðà MAX+PLUS II
ñêîëüêî ëîãè÷åñêè ñãðóïïèðîâàííûõ óçëîâ. Kîãäà âû ïðèñâàèâàåòå óçëó èìÿ, âû ìîæåòå ñîåäèíèòü åãî ñ äðóãèìè óçëàìè èëè ñèìâîëàìè òîëüêî ïî èìåíè. Øèíû ñîåäèíÿþòñÿ ïî èìåíè, íî âîçìîæíî è èõ ãðàôè÷åñêîå ñîåäèíåíèå; ïîëüçîâàòåëü ìîæåò ïåðåîïðåäåëèòü ïîðòû, èñïîëüçóåìûå â êàæäîì îòäåëüíîì ïðèìåðå ñèìâîëà ìåãà- èëè ìàêðîôóíêöèè, à òàêæå èíâåðòèðîâàòü èõ. Ïðè ýòîì äëÿ óêàçàíèÿ èíâåðòèðîâàííîãî ïîðòà ïîÿâèòñÿ êðóæîê, îáîçíà÷àþùèé èíâåðñèþ; ìîæíî âûáðàòü íåñêîëüêî îáúåêòîâ â ïðÿìîóãîëüíîé îáëàñòè è ðåäàêòèðîâàòü èõ âìåñòå èëè ïî îòäåëüíîñòè. Ïðè ïåðåìåùåíèè âûáðàííîé îáëàñòè ñèãíàëüíûå ñâÿçè ñîõðàíÿþòñÿ; äëÿ êàæäîãî ñèìâîëà ìîæíî ïðèñâîèòü íàçíà÷åíèÿ çîíäîâ, âûâîäîâ, ðàñïîëîæåíèÿ, ÷èïîâ, êëèê, âðåìåííûõ ïàðàìåòðîâ, ìåñòíóþ òðàññèðîâêó, ëîãè÷åñêèå îïöèè è íàçíà÷åíèÿ ïàðàìåòðîâ. Äëÿ îáëåã÷åíèÿ òåñòèðîâàíèÿ ìîæíî òàêæå ñîçäàòü íàçíà÷åíèÿ ãðóïï âûâîäîâ, êîòîðûå áóäóò îïðåäåëÿòü ñîåäèíåíèÿ âíåøíåãî óñòðîéñòâà ìåæäó âûâîäàìè;
141
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II ïîñòàâëÿåìûå ôèðìîé «Altera» ïðèìèòèâû, ìåãà- è ìàêðîôóíêöèè ñîêðàùàþò âðåìÿ ðàçðàáîòêè äèçàéíà. Ïîëüçîâàòåëü ìîæåò òàêæå ñîçäàâàòü ñâîè ñîáñòâåííûå áèáëèîòåêè ôóíêöèé. Ïðè ðåäàêòèðîâàíèè ñèìâîëà èëè âîññòàíîâëåíèè åãî ïî óìîë÷àíèþ ìîæíî àâòîìàòè÷åñêè ñîçäàâàòü âûáðàííûå ïðèìåðû èëè âñå ïðèìåðû ýòîãî ñèìâîëà â ôàéëå â ãðàôè÷åñêîì ðåäàêòîðå. Ãðàôè÷åñêèé ðåäàêòîð îáåñïå÷èâàåò è ìíîãî äðóãèõ âîçìîæíîñòåé. Íàïðèìåð, ìîæíî óâåëè÷èòü èëè óìåíüøèòü ìàñøòàá îòîáðàæåíèÿ íà ýêðàíå è óâèäåòü äèçàéí öåëèêîì èëè êàêóþ-ëèáî åãî äåòàëü. Ìîæíî âûáèðàòü ãàðíèòóðó è ðàçìåð øðèôòà, çàäàâàòü ñòèëè ëèíèé, óñòàíàâëèâàòü è îòîáðàæàòü íàïðàâëÿþùèå. Ìîæíî êîïèðîâàòü, âûðåçàòü, âêëåèâàòü è óäàëÿòü âûáðàííûå ôðàãìåíòû; ïîëó÷àòü çåðêàëüíîå îòîáðàæåíèå (âåðòèêàëüíîå èëè ãîðèçîíòàëüíîå); ïîâîðà÷èâàòü âûäåëåííûå ôðàãìåíòû íà 90, 180 èëè 270 ãðàäóñîâ; çàäàâàòü ðàçìåð, ðàçìåùåíèå òåêóùåãî ëèñòà ñõåìû ïî âåðòèêàëè èëè ãîðèçîíòàëè. Íà Ðèñ. 2.22 ïðåäñòàâëåíî îêíî ñèìâîëüíîãî ðåäàêòîðà ñèñòåìû MAX+PLUS II, ñ ïîìîùüþ êîòîðîãî ìîæíî ïðîñìàòðèâàòü, ñîçäàâàòü è ðåäàêòèðîâàòü ñèìâîë, ïðåäñòàâëÿþùèé ñîáîé ëîãè÷åñêóþ ñõåìó.  íåì ìîæíî ñîçäàâàòü íîâûå ôàéëû (êîìàíäà New èç ìåíþ File). Âûçûâàåòñÿ ñèìâîëüíûé ðåäàêòîð èç ìåíþ MAX+PLUS II. Ñèìâîëüíûé ôàéë èìååò òî æå èìÿ, ÷òî è ôàéë ïðîåêòà, è ðàñøèðåíèå .sym. Kîìàíäà Creat Default Suymbol ìåíþ File, êîòîðàÿ åñòü â ãðàôè÷åñêîì, òåêñòîâîì è ñèãíàëüíîì ðåäàêòîðàõ, ñîçäàåò ñèìâîë äëÿ ëþáîãî ôàéëà äèçàéíà. Ñèìâîëüíûé ðåäàêòîð îáëàäàåò ñëåäóþùèìè õàðàêòåðèñòèêàìè: ìîæíî ïåðåîïðåäåëèòü ñèìâîë, ïðåäñòàâëÿþùèé ôàéë ïðîåêòà; ìîæíî ñîçäàâàòü è ðåäàêòèðîâàòü âûâîäû è èõ èìåíà, ðàçðàáàòûâàÿ âõîäíûå, âûõîäíûå è äâóíàïðàâëåííûå êîíòàêòû, à òàêæå çàäàâàòü âàðèàíòû ââîäà ñèìâîëà â ôàéë ãðàôè÷åñêîãî ðåäàêòîðà ñ îòîáðàæåíèåì íà ýêðàíå èìåí âûâîäîâ èëè áåç îòîáðàæåíèÿ, ñ îòîáðàæåíèåì ïîëíîãî èëè ñîêðàùåííîãî èìåíè. Òàêèì îáðàçîì, ïîëíîå èìÿ ïîðòà è èìÿ, îòîáðàæàåìîå â ôàéëå â îêíå ãðàôè÷åñêîãî ðåäàêòîð, ìîãóò áûòü ðàçíûìè; èìåíà âûâîäîâ àâòîìàòè÷åñêè äóáëèðóþòñÿ çà ãðàíèöó ñèìâîëà. Ðåäàêòèðîâàíèþ ïîäëåæàò òîëüêî èìåíà âíóòðè ãðàíèöû ñèìâîëà. Èìåíà ñíàðóæè íåëüçÿ ìåíÿòü, îíè ïðîñòî èëëþñòðèðóþò ñîåäèíåíèå âûâîäîâ; ìîæíî çàäàòü çíà÷åíèÿ ïàðàìåòðîâ è èõ çíà÷åíèÿ ïî óìîë÷àíèþ; ñåòêà è íàïðàâëÿþùèå ïîìîãàþò âûïîëíèòü òî÷íîå âûðàâíèâàíèå îáúåêòîâ;
142
AL2119
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.22. Ñèìâîëüíûé ðåäàêòîð MAX+PLUS II
â ñèìâîëàõ ìîæíî ââîäèòü êîììåíòàðèè èëè ïîëåçíûå çàìå÷àíèÿ, êîòîðûå òàêæå ïîÿâÿòñÿ ïðè ââîäå ñèìâîëà â ôàéë â ãðàôè÷åñêîì ðåäàêòîðå. Íà Ðèñ. 2.23 ïîêàçàíî îêíî òåêñòîâîãî ðåäàêòîðà MAX+PLUS II, êîòîðûé ÿâëÿåòñÿ ãèáêèì èíñòðóìåíòîì äëÿ ñîçäàíèÿ òåêñòîâûõ ôàéëîâ ïðîåêòà íà ÿçûêàõ îïèñàíèÿ àïïàðàòóðû: AHDL (.tdf), VHDL (.vhd), Verilog HDL (.v).  ýòîì òåêñòîâîì ðåäàêòîðå ìîæíî ðàáîòàòü òàêæå ñ ïðîèçâîëüíûì ôàéëîì ôîðìàòà ASCII.  íåì ìîæíî ñîçäàâàòü íîâûå ôàéëû (êîìàíäà New èç ìåíþ File). Âûçûâàåòñÿ ñèìâîëüíûé ðåäàêòîð èç ìåíþ MAX+PLUS II. Âñå ïåðå÷èñëåííûå ôàéëû ïðîåêòà ìîæíî ñîçäàâàòü â ëþáîì òåêñòîâîì ðåäàêòîðå, îäíàêî äàííûé ðåäàêòîð èìååò âñòðîåííûå âîçìîæíîñòè óäîáíîãî ââîäà ôàéëîâ ïðîåêòà, èõ êîìïèëÿöèè è îòëàäêè ñ âûäà÷åé ñîîáùåíèé îá îøèáêàõ è èõ ëîêàëèçàöèåé â èñõîäíîì òåêñòå èëè â òåêñòå âñïîìîãàòåëüíûõ ôàéëîâ; êðîìå òîãî, ñóùåñòâóþò øàáëîíû ÿçûêîâûõ êîíñòðóêöèé äëÿ AHDL, VHDL è Verilog HDL, âûïîëíåíî îêðàøèâàíèå ñèíòàêñè÷åñêèõ êîíñòðóêöèé.  äàííîì ðåäàêòîðå ìîæíî âðó÷íóþ ðåäàêòèðîâàòü ôàéëû íàçíà÷åíèé è êîíôèãóðàöèè (.acf), à òàêæå äåëàòü óñòàíîâêè êîíôèãóðàöèè äëÿ êîìïèëÿòîðà, ñèìóëÿòîðà è âðåìåííîãî àíàëèçàòîðà.
143
AL2120
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.23. Òåêñòîâûé ðåäàêòîð MAX+PLUS II
Ïîëüçóÿñü äàííûì òåêñòîâûì ðåäàêòîðîì, ìîæíî ñîçäàâàòü òåñòîâûå âåêòîðû (.vec), èñïîëüçóåìûå äëÿ òåñòèðîâàíèÿ, îòëàäêè ôóíêöèé è ïðè ââîäå ñèãíàëüíîãî ïðîåêòà. Ìîæíî òàêæå ñîçäàâàòü êîìàíäíûå ôàéëû (.cmd äëÿ ñèìóëÿòîðà è .edc äëÿ EDIF), à òàêæå ìàêðîáèáëèîòåêè (.lmf).  òåêñòîâîì ðåäàêòîðå MAX+PLUS II îáåñïå÷èâàåòñÿ êîíòåêñòóàëüíàÿ ñïðàâêà. Ñèãíàëüíûé ðåäàêòîð (Ðèñ. 2.24) âûïîëíÿåò äâå ðîëè: ñëóæèò èíñòðóìåíòîì ñîçäàíèÿ äèçàéíà è èíñòðóìåíòîì ââîäà òåñòîâûõ âåêòîðîâ è ïðîñìîòðà ðåçóëüòàòîâ òåñòèðîâàíèÿ. Ïîëüçîâàòåëü ìîæåò ñîçäàâàòü ñèãíàëüíûå ôàéëû ïðîåêòà (.wdf), êîòîðûå ñîäåðæàò ëîãèêó äèçàéíà äëÿ ïðîåêòà, à òàêæå ôàéëû êàíàëîâ òåñòèðîâàíèÿ (.scf), êîòîðûå ñîäåðæàò âõîäíûå âåêòîðû äëÿ òåñòèðîâàíèÿ è ôóíêöèîíàëüíîé îòëàäêè. Íîâûé ôàéë ñîçäàåòñÿ êîìàíäîé New ìåíþ File. Âûçûâàåòñÿ ñèãíàëüíûé ðåäàêòîð èç ìåíþ MAX+PLUS II. Ðàçðàáîòêà äèçàéíà â ñèãíàëüíîì ðåäàêòîðå ÿâëÿåòñÿ àëüòåðíàòèâîé ñîçäàíèþ äèçàéíà â ãðàôè÷åñêîì èëè òåêñòîâîì ðåäàêòîðàõ. Çäåñü ìîæ-
144
AL2121
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.24. Ñèãíàëüíûé ðåäàêòîð MAX+PLUS II
íî ãðàôè÷åñêèì ñïîñîáîì çàäàâàòü êîìáèíàöèè âõîäíûõ ëîãè÷åñêèõ óðîâíåé è òðåáóåìûõ âûõîäîâ. Ñîçäàííûé òàêèì îáðàçîì ôàéë ñ ðàñøèðåíèåì WDF (Waveform Design File) ìîæåò ñîäåðæàòü êàê ëîãè÷åñêèå âõîäû, òàê è âõîäû öèôðîâîãî àâòîìàòà, à òàêæå âûõîäû êîìáèíàòîðíîé ëîãèêè, ñ÷åò÷èêîâ è öèôðîâûõ àâòîìàòîâ. Ìîæíî èñïîëüçîâàòü òàêæå «çàìóðîâàííûå» (buried) óçëû, êîòîðûå ïîìîãàþò îïðåäåëèòü òðåáóåìûå âûõîäû. Ñïîñîá ðàçðàáîòêè ïðîåêòà â ñèãíàëüíîì ðåäàêòîðå ëó÷øå ïîäõîäèò äëÿ öåïåé ñ ÷åòêî îïðåäåëåííûìè ïîñëåäîâàòåëüíûìè âõîäàìè è âûõîäàìè, ò.å. äëÿ öèôðîâûõ àâòîìàòîâ, ñ÷åò÷èêîâ è ðåãèñòðîâ. Ñ ïîìîùüþ ñèãíàëüíîãî ðåäàêòîðà ìîæíî ëåãêî ïðåîáðàçîâûâàòü ôîðìû ñèãíàëîâ öåëèêîì èëè ÷àñòè÷íî, ñîçäàâàÿ è ðåäàêòèðóÿ óçëû è ãðóïïû. Ïðîñòûìè êîìàíäàìè ìîæíî ñîçäàâàòü ôàéë òàáëèöû ASCII-ñèìâîëîâ (.tbl) èëè èìïîðòèðîâàòü ôàéë òåñòîâûõ âåêòîðîâ â ôîðìàòå ASCII (.vec) äëÿ ñîçäàíèÿ ôàéëîâ òåñòèðóåìûõ êàíàëîâ SCF è ñèãíàëüíîãî äèçàéíà WDF. Ìîæíî òàêæå ñîõðàíèòü ôàéë WDF êàê SCF äëÿ ïðîâåäåíèÿ
145
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II òåñòèðîâàíèÿ èëè ïðåîáðàçîâàòü SCF â WDF äëÿ èñïîëüçîâàíèÿ åãî â êà÷åñòâå ôàéëà ïðîåêòà. Ñèãíàëüíûé ðåäàêòîð èìååò ñëåäóþùèå îòëè÷èòåëüíûå ÷åðòû: ìîæíî ñîçäàòü èëè îòðåäàêòèðîâàòü óçåë äëÿ ïîëó÷åíèÿ òèïà I/O (âõîä/âûõîä), êîòîðûé ïðåäñòàâëÿåò ñîáîé âõîäíîé èëè âûõîäíîé êîíòàêò èëè «çàìóðîâàííóþ» ëîãèêó; ïðè ðàçðàáîòêå WDF ìîæíî çàäàòü òèï ëîãèêè, êîòîðàÿ äåëàåò êàæäûé óçåë êîíòàêòîì, ïðè÷åì âõîäíûì, ðåãèñòðîâûì, êîìáèíàòîðíûì èëè öèôðîâûì àâòîìàòîì; ìîæíî òàêæå çàäàòü çíà÷åíèÿ ïî óìîë÷àíèþ â ëîãè÷åñêîì óçëå äëÿ àêòèâíîãî ëîãè÷åñêîãî óðîâíÿ: âûñîêèé ("1"), íåîïðåäåëåííûé (Õ) èëè ñ âûñîêèì èìïåäàíñîì (Z), à òàêæå èìÿ ñîñòîÿíèÿ ïî óìîë÷àíèþ â óçëå òèïà öèôðîâîãî àâòîìàòà; äëÿ óïðîùåíèÿ ñîçäàíèÿ òåñòîâîãî âåêòîðà ìîæíî ëåãêî äîáàâèòü â ôàéë òåñòèðóåìûõ êàíàëîâ SCF íåñêîëüêî óçëîâ èëè âñå èç èíôîðìàöèîííîãî ôàéëà ñèìóëÿòîðà (.snf), ñóùåñòâóþùåãî äëÿ ïîëíîñòüþ îòêîìïèëèðîâàííîãî è îïòèìèçèðîâàííîãî ïðîåêòà; ìîæíî îáúåäèíèòü îò 2 äî 256 óçëîâ äëÿ ñîçäàíèÿ íîâîé ãðóïïû (øèíû) èëè ðàçãðóïïèðîâàòü îáúåäèíåííûå ðàíåå â ãðóïïó óçëû. Ìîæíî òàêæå îáúåäèíÿòü ãðóïïû ñ äðóãèìè ãðóïïàìè. Çíà÷åíèå ãðóïïû ìîæåò áûòü îòîáðàæåíî â äâîè÷íîé, äåñÿòè÷íîé, øåñòíàäöàòåðè÷íîé èëè âîñüìåðè÷íîé ñèñòåìå ñ÷èñëåíèÿ ñ ïðåîáðàçîâàíèåì (èëè áåç) â êîä Ãðýÿ; ìîæíî êîïèðîâàòü, âêëåèâàòü, ïåðåìåùàòü èëè óäàëÿòü âûáðàííóþ ÷àñòü («èíòåðâàë») ôîðìû ñèãíàëà èëè âñþ ôîðìó ñèãíàëà, à òàêæå âåñü óçåë èëè ãðóïïó (ò.å. èìÿ óçëà èëè ãðóïïû ïëþñ ôîðìà ñèãíàëà). Îäíîé îïåðàöèåé ìîæíî îòðåäàêòèðîâàòü íåñêîëüêî èíòåðâàëîâ, öåëûå ôîðìû ñèãíàëîâ, à òàêæå öåëûå óçëû è ãðóïïû. Kîïèè öåëûõ óçëîâ è ãðóïï ñâÿçàíû, òàê ÷òî ðåäàêöèîííûå ïðàâêè îäíîé êîïèè îòðàæàþòñÿ âî âñåõ êîïèÿõ. Ìîæíî òàêæå èíâåðòèðîâàòü, âñòàâëÿòü, ïåðåïèñûâàòü, ïîâòîðÿòü, ðàñøèðÿòü èëè ñæèìàòü èíòåðâàë ôîðìû ñèãíàëà ëþáîé äëèíû ñ ëþáûì ëîãè÷åñêèì óðîâíåì, òàêòîâûì ñèãíàëîì, ïîñëåäîâàòåëüíîñòüþ ñ÷åòà èëè èìåíåì ñîñòîÿíèÿ; ìîæíî çàäàòü è, ïî æåëàíèþ, îòîáðàæàòü íà ýêðàíå ñåòêó äëÿ âûðàâíèâàíèÿ ïåðåõîäîâ ìåæäó ëîãè÷åñêèìè óðîâíÿìè ëèáî äî èõ ñîçäàíèÿ, ëèáî ïîñëå; â ëþáîì ìåñòå ôàéëà ìîæíî ââîäèòü êîììåíòàðèè ìåæäó ôîðìàìè ñèãíàëà; ìîæíî ìåíÿòü ìàñøòàá îòîáðàæåíèÿ;
146
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II äëÿ òîãî, ÷òîáû ïîêàçàòü ðàçíèöó ìåæäó âûõîäàìè ïðè òåñòèðîâàíèè è âûõîäàìè ðåàëüíîãî óñòðîéñòâà, ìîæíî ñäåëàòü íàëîæåíèå ëþáûõ âûõîäîâ â òåêóùåì ôàéëå èëè íàëîæèòü âòîðîé ôàéë ñèãíàëüíîãî ðåäàêòîðà äëÿ ñðàâíåíèÿ ôîðì ñèãíàëîâ åãî óçëîâ è ãðóïï ñ ñîîòâåòñòâóþùèìè èì èç òåêóùåãî ôàéëà. Äëÿ îòëàäêè óñòðîéñòâ ÖÎÑ ÷àñòî ïðèõîäèòñÿ òåñòèðîâàòü àëãîðèòì íà ðåàëüíûõ èëè ñìîäåëèðîâàííûõ ñèãíàëàõ. Äëÿ ýòîãî óäîáíî èñïîëüçîâàòü âåêòîðíûé ñèãíàëüíûé ôàéë (Vector File). Vector File (ôîðìàò òåêñòà ASCII) èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ âõîäíûõ óñëîâèé ìîäåëèðîâàíèÿ è óçëîâ, êîòîðûå íóæíî ìîäåëèðîâàòü. Vector File ìîæåò òàêæå èñïîëüçîâàòüñÿ, ÷òîáû ñîçäàòü Waveform Design File äëÿ âõîäíûõ äàííûõ ïðîåêòà. Ðàññìîòðèì ôîðìàò âåêòîðíîãî ôàéëà ïîäðîáíåå. Âñå ðàçäåëû, èñïîëüçóåìûå â Vector File, ðàññìàòðèâàþòñÿ íèæå â òîì ïîðÿäêå, â êîòîðîì îíè îáû÷íî ïðèñóòñòâóþò â ôàéëå. Âîçìîæíî ïîâòîðåíèå ëþáîãî ðàçäåëà ñ öåëüþ âíåñåíèÿ äîïîëíèòåëüíûõ óñëîâèé äëÿ âõîäíûõ äàííûõ â ïðåäåëàõ îäíîãî Vector File. Unit Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà UNIT ñ äàëüíåéøèì óêàçàíèåì åäèíèö èçìåðåíèÿ â ôàéëå. Ïàðàìåòð íåîáÿçàòåëüíûé. Ïî óìîë÷àíèþ åäèíèöû èçìåðåíèÿ ns. Âîçìîæíûå åäèíèöû èçìåðåíèÿ: ns (íc), ms (ìñ), us (ìêñ), s (ñ), mhz (ÌÃö). Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Ïðèìåð: UNIT ms; Start Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà START ñ ïîñëåäóþùèì óêàçàíèåì íà÷àëüíîãî âðåìåííîãî çíà÷åíèÿ. Ïàðàìåòð íåîáÿçàòåëüíûé. Çíà÷åíèå ïî óìîë÷àíèþ íóëåâîå. Åñëè íå óêàçàíû åäèíèöû èçìåðåíèÿ, òî îíè ïðèíèìàþòñÿ èç ðàçäåëà Unit Section. Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Ïðèìåð: START 5ns; Stop Section Àíàëîãè÷åí ðàçäåëó Start Section. Ïî óìîë÷àíèþ ïðèíèìàåòñÿ çíà÷åíèå âðåìåíè ïîñëåäíåãî âåêòîðà ìîäåëè. Ïðèìåð: STOP 150ms; Íåîáõîäèìî ó÷èòûâàòü, ÷òî Vector File äîëæåí ñîäåðæàòü êðàòíîå êîëè÷åñòâî Start-Stop Section, ïðåäñòàâëÿþùèõ ñîáîé âðåìåííûå èíòåðâàëû. Íåäîïóñòèìî îáðàùåíèå ê îäíîìó âðåìåííîìó èíòåðâàëó ðàçëè÷íûõ âåêòîðîâ ìîäåëè.
147
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Interval Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà INTERVAL ñ ïîñëåäóþùèì óêàçàíèåì âðåìåííîãî çíà÷åíèÿ. Îïðåäåëÿåò âðåìåííîé èíòåðâàë ââîäà âåêòîðîâ. Ïàðàìåòð íåîáÿçàòåëüíûé. Çíà÷åíèå ïî óìîë÷àíèþ 1 íñ. Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Ïðèìåð: INTERVAL 15ns; Group Create Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà GROUP CREATE. Äàííûé ðàçäåë òðåáóåòñÿ íå âñåãäà äëÿ ãðóïï, øèí èëè êîíå÷íûõ àâòîìàòîâ, êîòîðûå áûëè ñîçäàíû â èñõîäíûõ ôàéëàõ ïðîåêòà. Âñå óçëû â ãðóïïå äîëæíû èìåòü òèï I/O.  Vector File, èñïîëüçóåìîì äëÿ ñèìóëÿöèè, óçëû äîëæíû èìåòü èìåíà, ñîâïàäàþùèå ñ èìåíàìè óçëîâ, çàâåäåííûìè â ôàéë-ïðîåêòå, âêëþ÷àÿ èåðàðõè÷åñêèé ïóòü, åñëè ýòî íåîáõîäèìî. Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Ïðèìåð: GROUP CREATE groupABC = nodeA nodeB nodeC; Radix Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà RADIX ñ ïîñëåäóþùèì óêàçàíèåì îáîçíà÷åíèÿ ñèñòåìû ñ÷èñëåíèÿ. Ïàðàìåòð íåîáÿçàòåëüíûé. Ïî óìîë÷àíèþ ïðèíèìàåòñÿ øåñòíàäöàòåðè÷íàÿ ñèñòåìà ñ÷èñëåíèÿ. Ðàçëè÷àþò ÷åòûðå ñèñòåìû: BIN (äâîè÷íàÿ), DEC (äåñÿòè÷íàÿ), HEX (øåñòíàäöàòåðè÷íàÿ), OCT (âîñüìåðè÷íàÿ). Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Ïðèìåð: RADIX DEC; Inputs Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà INPUTS. Äàëåå ñëåäóåò ñïèñîê óçëîâ è/èëè èìåí ãðóïï.  Vector File, èñïîëüçóåìîì äëÿ ñèìóëÿöèè, èìåíà óçëîâ äîëæíû ñîâïàäàòü ñ èìåíàìè óçëîâ â ôàéëå-ïðîåêòå, âêëþ÷àÿ èåðàðõè÷åñêèé ïóòü, åñëè ýòî íåîáõîäèìî. Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Ïðèìåð: INPUT databus clk OEN nodeA;  ïðèâåäåííîì íèæå ïðèìåðå ïðè çàäåéñòâîâàíèè ñëåäóþùåé ñåêöèè âõîäíûõ äàííûõ çíà÷åíèÿ â ïðåäûäóùåé ñåêöèè òåðÿþòñÿ. Ïðèìåð: INPUTS A1 A2; START 0; STOP 25; PATTERN %Секция модели 1 с входами А1 и А2% 0 0 0 0 0 1;
148
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
START 26; STOP 50; PATTERN %Секция модели 2 с входами А1 и А2% 0 1 0 1 0 0; INPUTS A1 B1; START 51; STOP 100; PATTERN %Секция модели 3 с входами А1 и В1% 1 1 0 0 1 1; Outputs Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà OUTPUTS. Èñïîëüçóåòñÿ äëÿ îïèñàíèÿ âûõîäîâ. Àíàëîãèÿ ñ Inputs Section. Ïðèìåð: OUTPUTS RCO QA QB QC; Ïðèìåð: OUTPUTS A1 A2; START 0; STOP 25; PATTERN %Секция модели 1 с выходами А1 и А2% 0 0 0 0 0 1; START 26; STOP 50; PATTERN %Секция модели 2 с выходами А1 и А2% 0 1 0 1 0 0; OUTPUTS A1 B1;
149
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
START 51; STOP 100; PATTERN %Секция модели 3 с выходами А1 и В1% 1 1 0 0 1 1; Buried Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà BURIED. Èñïîëüçóåòñÿ äëÿ îïèñàíèÿ óçëîâ. Àíàëîãèÿ ñ Inputs Section. Ïðèìåð: BURIED nodeQA0 nodeQA1 nodeQB0 nodeQB1; Pattern Section Íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà PATTERN.  ýòîì ðàçäåëå èñïîëüçóþòñÿ äàííûå ïðåäûäóùèõ ðàçäåëîâ Inputs, Outputs è Buried Section. Äîáàâëåíèå íîâûõ Inputs, Outputs è Buried Section î÷èùàåò âñå ïðåäûäóùèå äàííûå ýòèõ òèïîâ, ò.å. ñòàðûå äàííûå çàìåíÿþòñÿ íîâûìè (ñì. ïðèìåð äëÿ Inputs Section). Ðàçäåë çàêàí÷èâàåòñÿ ñèìâîëîì «;». Vector File, èñïîëüçóåìûé, ÷òîáû ñîçäàòü WDF, ìîæåò ñîäåðæàòü äîïîëíèòåëüíûå ðàçäåëû Combinatorial Section, Machine Section, Registered Section. Ýòè ðàçäåëû èãíîðèðóþòñÿ, åñëè Vector File èñïîëüçóåòñÿ äëÿ ìîäåëèðîâàíèÿ. Ðàññìîòðèì ïðèìåð ñîçäàíèÿ Vector File äëÿ âîñüìèáèòíîãî ñóììàòîðà. Îïèñàíèå íà ÿçûêå AHDL. Ïðèìåð ïðîãðàììû sum8_.tdf: SUBDESIGN SUM8_ %8 разрядный сумматор без знака% ( clk:INPUT; a[7..0]:INPUT = GND; b[7..0]:INPUT = GND; sum[7..0]:OUTPUT; cr:OUTPUT; ) VARIABLE c[7..1]:NODE;
150
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II sum[7..0]:DFF; cr:DFF; BEGIN sum[7..0].clk=clk; sum[7..0].prn=VCC; sum[7..0].clrn=VCC; cr.clk=clk; cr.prn=VCC; cr.clrn=VCC;
If (a[0]&b[0])==VCC then sum[0]=GND; c[1]=VCC; ElsIf (a[0]#b[0])==GND then sum[0]=GND; c[1]=GND; Else sum[0]=VCC; c[1]=GND; End If; %% FOR i IN 1 TO 6 GENERATE If (a[i]&b[i]&c[i])==VCC then sum[i]=VCC; c[i+1]=VCC; ElsIf (a[i]#b[i]#c[i])==GND then sum[i]=GND; c[i+1]=GND; ElsIf (((a[i]&b[i])#(a[i]&c[i])#(b[i]&c[i]))&!(a[i]&b[i]&c[ i]))==VCC then sum[i]=GND; c[i+1]=VCC; Else sum[i]=VCC; c[i+1]=GND;
151
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II End If; END GENERATE; %% If (a[7]&b[7]&c[7])==VCC then sum[7]=VCC; cr=VCC; ElsIf (a[7]#b[7]#c[7])==GND then sum[7]=GND; cr=GND; ElsIf (((a[7]&b[7])#(a[7]&c[7])#(b[7]&c[7]))&!(a[7]&b[7]&c[ 7]))==VCC then sum[7]=GND; cr=VCC; Else sum[7]=VCC; cr=GND; End If; END; Ïðèìåð ïðîãðàììû sum8_.vec: START 0; STOP 500; INTERVAL 25; RADIX BIN; INPUTS clk; PATTERN 0 1; START 0; STOP 500; INTERVAL 50; RADIX BIN; INPUTS a7 a6 a5 a4 a3 a2 a1 a0 b7 b6 b5 b4 b3 b2 b1 b0;
152
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II OUTPUTS PATTERN %a7 a6 a5 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0
sum[7..0] cr; a4 0 1 0 1 1 0
a3 0 0 0 1 1 0
a2 0 0 0 1 1 0
a1 0 0 0 0 1 0
a0 1 0 0 0 1 0
b7 0 0 1 1 1 0
b6 0 0 1 0 1 0
b5 0 0 0 1 1 0
b4 0 0 0 1 1 0
b3 0 1 1 0 1 0
b2 b1 b0% 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0;
 äàííîì ïðèìåðå áóäóò ñëîæåíû 6 ïàð äâîè÷íûõ ÷èñåë. Ïðè ýòîì áóäåò çàäàí òàêòèðóþùèé ìåàíäð clk (òàêòèðóþùèé èìïóëüñ äëÿ D-òðèããåðîâ) ñ ïåðèîäîì ïîâòîðåíèÿ 50 íñ è ñêâàæíîñòüþ 2. Íà÷àëüíûì çíà÷åíèåì èìïóëüñà áóäåò 0. Ïðåîáðàçîâàíèå áóäåò ïðîâîäèòüñÿ îò 0 äî 500 íñ. Ïðè íà÷àëå ñèìóëÿöèè íåîáõîäèìî îòñóòñòâèå â ðàáî÷åé äèðåêòîðèè ñîîòâåòñòâóþùåãî ôàéëà sum8_.scf, òàê êàê èíà÷å ñèìóëÿòîð áóäåò ïî óìîë÷àíèþ èñïîëüçîâàòü ôàéë íå ñ ðàñøèðåíèåì .vec, à ôàéë ñ ðàñøèðåíèåì .scf. Ïîñëå ïðîöåññà ñèìóëÿöèè ñ èñïîëüçîâàíèåì .vec ôàéëà ôàéë ñ ðàñøèðåíèåì .scf áóäåò ñîçäàí àâòîìàòè÷åñêè. Íà Ðèñ. 2.25 ïîêàçàíî îêíî ïîóðîâíåâîãî ïëàíèðîâùèêà (Floorplan Editor), ñ ïîìîùüþ êîòîðîãî ïîëüçîâàòåëü íàçíà÷àåò ðåñóðñû ôèçè÷åñêèõ óñòðîéñòâ è ïðîñìàòðèâàåò ðåçóëüòàòû ðàçâåòâëåíèé è ìîíòàæà, ñäåëàííûõ êîìïèëÿòîðîì. Îêíî ïîóðîâíåâîãî ïëàíèðîâùèêà îòêðûâàåòñÿ ïðè âûáîðå îïöèè Floorplan Editor â ìåíþ MAX+PLUS II.  îêíå ïîóðîâíåâîãî ïëàíèðîâùèêà ìîãóò áûòü ïðåäñòàâëåíû äâà òèïà èçîáðàæåíèÿ: Device View (âèä óñòðîéñòâà) ïîêàçûâàåò âñå âûâîäû óñòðîéñòâà â ñáîðêå è èõ ôóíêöèè; LAB View (âèä ëîãè÷åñêîãî áëîêà) ïîêàçûâàåò âíóòðåííþþ ñòðóêòóðó óñòðîéñòâà, â òîì ÷èñëå âñå ëîãè÷åñêèå áëîêè è îòäåëüíûå ëîãè÷åñêèå ýëåìåíòû èëè ìàêðîÿ÷åéêè.
153
AL2122
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.25. Ïîóðîâíåâûé ïëàíèðîâùèê MAX+PLUS II
2.4. Ïðîöåññ êîìïèëÿöèè Ñíà÷àëà êîìïèëÿòîð èçâëåêàåò èíôîðìàöèþ îá èåðàðõè÷åñêèõ ñâÿçÿõ ìåæäó ôàéëàìè ïðîåêòà è ïðîâåðÿåò ïðîåêò íà ïðîñòûå îøèáêè ââîäà äèçàéíîâ. Îí ñîçäàåò îðãàíèçàöèîííóþ êàðòó ïðîåêòà è çàòåì, êîìáèíèðóÿ âñå ôàéëû ïðîåêòà, ïðåâðàùàåò èõ â áàçó äàííûõ áåç èåðàðõèè, êîòîðóþ ìîæåò ýôôåêòèâíî îáðàáàòûâàòü. Kîìïèëÿòîð ïðèìåíÿåò ðàçíîîáðàçíûå ñïîñîáû óâåëè÷åíèÿ ýôôåêòèâíîñòè ïðîåêòà è ìèíèìèçàöèè èñïîëüçîâàíèÿ ðåñóðñîâ óñòðîéñòâà. Åñëè ïðîåêò ñëèøêîì áîëüøîé, ÷òîáû áûòü ðåàëèçîâàííûì â îäíîé ÏËÈÑ, êîìïèëÿòîð ìîæåò àâòîìàòè÷åñêè ðàçáèòü åãî íà ÷àñòè äëÿ ðåàëèçàöèè â íåñêîëüêèõ óñòðîéñòâàõ òîãî æå ñàìîãî ñåìåéñòâà ÏËÈÑ, ïðè ýòîì ìèíèìèçèðóåòñÿ ÷èñëî ñîåäèíåíèé ìåæäó óñòðîéñòâàìè.  ôàéëå îò÷åòà (.rpt) çàòåì áóäåò îòðàæåíî, êàê ïðîåêò áóäåò ðåàëèçîâàí â îäíîì èëè íåñêîëüêèõ óñòðîéñòâàõ. Kðîìå òîãî, êîìïèëÿòîð ñîçäàåò ôàéëû ïðîãðàììèðîâàíèÿ èëè çàãðóçêè, êîòîðûå ïðîãðàììàòîð ñèñòåìû MAX+PLUS II èëè äðóãîé ñèñòåìû áó-
154
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
AL2123
äåò èñïîëüçîâàòü äëÿ ïðîãðàììèðîâàíèÿ îäíîé èëè íåñêîëüêèõ ÏËÈÑ ôèðìû «Altera». Íåñìîòðÿ íà òî ÷òî êîìïèëÿòîð ìîæåò àâòîìàòè÷åñêè êîìïèëèðîâàòü ïðîåêò, ñóùåñòâóåò âîçìîæíîñòü çàäàòü îáðàáîòêó ïðîåêòà â ñîîòâåòñòâèè ñ òî÷íûìè óêàçàíèÿìè ðàçðàáîò÷èêà. Íàïðèìåð âîçìîæíî çàäàòü ñòèëü ëîãè÷åñêîãî ñèíòåçà ïðîåêòà ïî óìîë÷àíèþ è äðóãèå ïàðàìåòðû ëîãè÷åñêîãî ñèíòåçà â ðàìêàõ âñåãî ïðîåêòà. Kðîìå òîãî, óäîáíî çàäàòü âðåìåííûå òðåáîâàíèÿ â ðàìêàõ âñåãî ïðîåêòà, òî÷íî çàäàòü ðàçáèåíèå áîëüøîãî ïðîåêòà íà ÷àñòè äëÿ ðåàëèçàöèè â íåñêîëüêèõ óñòðîéñòâàõ è âûáðàòü âàðèàíòû ïàðàìåòðîâ óñòðîéñòâ, êîòîðûå áóäóò ïðèìåíåíû äëÿ âñåãî ïðîåêòà â öåëîì. Âû ìîæåòå òàêæå âûáðàòü, ñêîëüêî âûâîäîâ è ëîãè÷åñêèõ ýëåìåíòîâ äîëæíî áûòü îñòàâëåíî íåèñïîëüçîâàííûìè âî âðåìÿ òåêóùåé êîìïèëÿöèè, ÷òîáû çàðåçåðâèðîâàòü èõ äëÿ ïîñëåäóþùèõ ìîäèôèêàöèé ïðîåêòà. Kîìïèëÿöèþ ìîæíî çàïóñòèòü èç ëþáîãî ïðèëîæåíèÿ MAX+PLUS II èëè èç îêíà êîìïèëÿòîðà. Kîìïèëÿòîð àâòîìàòè÷åñêè îáðàáàòûâàåò âñå âõîäíûå ôàéëû òåêóùåãî ïðîåêòà. Ïðîöåññ êîìïèëÿöèè ìîæíî íàáëþäàòü â îêíå êîìïèëÿòîðà â ñëåäóþùåì âèäå (Ðèñ. 2.26): îïóñòîøàþòñÿ è ïåðåâîðà÷èâàþòñÿ ïåñî÷íûå ÷àñû, ÷òî óêàçûâàåò íà àêòèâíîñòü êîìïèëÿòîðà; âûñâå÷èâàþòñÿ ïðÿìîóãîëüíèêè ìîäóëåé êîìïèëÿòîðà ïî î÷åðåäè, ïî ìåðå òîãî êàê êîìïèëÿòîð çàâåðøàåò êàæäûé ýòàï îáðàáîòêè; ïîä ïðÿìîóãîëüíèêîì ìîäóëÿ êîìïèëÿòîðà ïîÿâëÿåòñÿ ïèêòîãðàììà âûõîäíîãî ôàéëà, ñãåíåðèðîâàííîãî äàííûì ìîäóëåì. Äëÿ îòêðûòèÿ ñîîòâåòñòâóþùåãî ôàéëà ñëåäóåò äâàæäû ùåëêíóòü ëåâîé êíîïêîé ìûøè íà ïèêòîãðàììå, è îí îòêðîåòñÿ; ïðîöåíò çàâåðøåíèÿ êîìïèëÿöèè ïîñòåïåííî óâåëè÷èâàåòñÿ (äî 100%), ÷òî îòðàæàåòñÿ òàêæå ðàñòóùèì ïðÿìîóãîëüíèêîì («ãðàäóñíèê»);
Ðèñ. 2.26. Ïðîöåññ êîìïèëÿöèè
155
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II âî âðåìÿ ðàçáèåíèÿ è ìîíòàæà êíîïêà êîìïèëÿòîðà Stop (ñòîï) ïðåâðàùàåòñÿ â êíîïêó Stop/Show Status (ñòîï/ïîêàçàòü ñîñòîÿíèå), êîòîðóþ âû ìîæåòå âûáðàòü äëÿ îòêðûòèÿ äèàëîãîâîãî îêíà, â êîòîðîì îòðàæàåòñÿ òåêóùåå ñîñòîÿíèå ðàçáèåíèÿ è ìîíòàæà ïðîåêòà; ïðè îáíàðóæåíèè â ïðîöåññå êîìïèëÿöèè êàêèõ-ëèáî îøèáîê èëè âîçìîæíûõ ïðîáëåì àâòîìàòè÷åñêè îòêðûâàåòñÿ îêíî îáðàáîò÷èêà ñîîáùåíèé, â êîòîðîì îòîáðàæàåòñÿ ñïèñîê ñîîáùåíèé îá îøèáêå, ïðåäóïðåæäàþùèõ è èíôîðìàöèîííûõ ñîîáùåíèé, à òàêæå ñðàçó äàåòñÿ ñïðàâêà ïî èñïðàâëåíèþ îøèáêè. Kðîìå òîãî, âû ìîæåòå îïðåäåëèòü èñòî÷íèêè ñîîáùåíèé â ôàéëàõ ïðîåêòà èëè â åãî ïîóðîâíåâîì ïëàíå íàçíà÷åíèé. Kîìïèëÿòîð ìîæåò ðàáîòàòü â ôîíîâîì ðåæèìå. Âû ìîæåòå óìåíüøèòü äî ìèíèìóìà îêíî êîìïèëÿòîðà, ïîêà îí îáðàáàòûâàåò ïðîåêò, è ïðîäîëæèòü ðàáîòó íàä äðóãèìè ôàéëàìè ïðîåêòà. Ðàñòóùèé ïðÿìîóãîëüíèê («ãðàäóñíèê») ïîä ïèêòîãðàììîé óìåíüøåííîãî îêíà êîìïèëÿòîðà ïîçâîëÿåò âàì íàáëþäàòü çà ïðîäâèæåíèåì ïðîöåññà êîìïèëÿöèè, è â òî æå âðåìÿ âû ìîæåòå ñîñðåäîòî÷èòü ñâîå âíèìàíèå íà äðóãîé çàäà÷å. Îäíàêî ñëåäóåò ïîìíèòü, ÷òî òàêàÿ ðîñêîøü, êàê ìíîãîçàäà÷íàÿ ðàáîòà, âîçìîæíà òîëüêî íà âûñîêîïðîèçâîäèòåëüíîì ÏÊ. Åñëè ñóùåñòâóåò äåôèöèò îïåðàòèâíîé ïàìÿòè, òî ïðîöåññ êîìïèëÿöèè çàéìåò ìíîãî âðåìåíè. Ðåêîìåíäóåìàÿ êîíôèãóðàöèÿ ÏÊ äàíà â ðàçäåëå 2.1. Kîìïèëÿòîð ñèñòåìû MAX+PLUS II îáðàáàòûâàåò ïðîåêò, èñïîëüçóÿ ñëåäóþùèå ìîäóëè è óòèëèòû: Compiler Netlist Extractor (ýêñòðàêòîð ôîðìàòîâ), âêëþ÷àþùèé âñòðîåííûå ïðîãðàììû ÷òåíèÿ ôîðìàòîâ EDIF, VHDL, Verilog è XNF; Database Builder (ïîñòðîèòåëü áàçû äàííûõ); Logic Synthesizer (ëîãè÷åñêèé ñèíòåçàòîð); Partitioner (ðàçäåëèòåëü); Fitter (òðàññèðîâùèê); Functional SNF Extractor (ýêñòðàêòîð äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ); Timing SNF Extractor (ýêñòðàêòîð äëÿ òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ); Linked SNF Extractor (ýêñòðàêòîð äëÿ òåñòèðîâàíèÿ êîìïîíîâêè); EDIF Netlist Writer (ïðîãðàììà çàïèñè âûõîäíîãî ôàéëà â ôîðìàò EDIF); Verilog Netlist Writer (ïðîãðàììà çàïèñè âûõîäíîãî ôàéëà â ôîðìàò Verilog); VHDL Netlist Writer VHDL (ïðîãðàììà çàïèñè âûõîäíîãî ôàéëà â ôîðìàò VHDL);
156
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Assembler (ìîäóëü àññåìáëåðà); Design Doctor Utility (óòèëèòà äèàãíîñòèêè ïðîåêòà). Ìîäóëü Compiler Netlist Extractor ïðåîáðàçóåò êàæäûé ôàéë ïðîåêòà â îäèí èëè íåñêîëüêî äâîè÷íûõ ôàéëîâ ñ ðàñøèðåíèåì .cnf. (compiler netlist file). Ïîñêîëüêó êîìïèëÿòîð ïîäñòàâëÿåò çíà÷åíèÿ âñåõ ïàðàìåòðîâ, èñïîëüçóåìûõ â ïàðàìåòðèçîâàííûõ ôóíêöèÿõ, ñîäåðæèìîå ôàéëà CNF ìîæåò ìåíÿòüñÿ ïðè ïîñëåäîâàòåëüíîé êîìïèëÿöèè, åñëè çíà÷åíèÿ ïàðàìåòðîâ ìåíÿþòñÿ. Äàííûé ìîäóëü ñîçäàåò òàêæå ôàéë èåðàðõè÷åñêèõ âçàèìîñâÿçåé (.hif, hierarchy interconnect file), â êîòîðîì äîêóìåíòèðóþòñÿ èåðàðõè÷åñêèå ñâÿçè ìåæäó ôàéëàìè ïðîåêòà, à òàêæå ñîäåðæèòñÿ èíôîðìàöèÿ, íåîáõîäèìàÿ äëÿ ïîêàçà èåðàðõè÷åñêîãî äåðåâà ïðîåêòà â îêíå Hierarchy Display. Kðîìå òîãî, äàííûé ìîäóëü ñîçäàåò ôàéë áàçû äàííûõ óçëîâ (.ndb, node database), â êîòîðîì ñîäåðæàòñÿ èìåíà óçëîâ ïðîåêòà äëÿ áàçû äàííûõ íàçíà÷åíèé ðåñóðñîâ. Âñòðîåííûå ïðîãðàììû ÷òåíèÿ ôîðìàòîâ EDIF, VHDL, Verilog è XNF àâòîìàòè÷åñêè òðàíñëèðóþò èíôîðìàöèþ ïðîåêòà â ôàéëû ñîîòâåòñòâóþùèõ ôîðìàòîâ .edf, .vhd, .v, .xnf â ôîðìàò, ñîâìåñòèìûé ñ ñèñòåìîé MAX+PLUS II. Ïðîãðàììà ÷òåíèÿ ôîðìàòà EDIF îáðàáàòûâàåò âõîäíûå ôàéëû EDIF ñ ïîìîùüþ áèáëèîòå÷íûõ ôàéëîâ (.lmf, library mapping file), êîòîðûå óñòàíàâëèâàþò ñîîòâåòñòâèå ìåæäó ëîãè÷åñêèìè ôóíêöèÿìè, ðàçðàáîòàííûìè â äðóãèõ ÑÀÏÐ, è ôóíêöèÿìè ñèñòåìû MAX+PLUS II. Ïðîãðàììà ÷òåíèÿ ôîðìàòà XNF ìîæåò ñîçäàâàòü ôàéë äëÿ ýêñïîðòà òåêñòîâîãî äèçàéíà (.tdx, text design export file), êîòîðûé ñîäåðæèò èíôîðìàöèþ íà ÿçûêå AHDL, êîòîðàÿ ýêâèâàëåíòíà òîé, ÷òî ñîäåðæèòñÿ â ôàéëå ôîðìàòà XNF (.xnf). Ýòî äåëàåòñÿ äëÿ òîãî, ÷òîáû ðåäàêòèðîâàòü ïðîåêò íà ÿçûêå AHDL. Ìîäóëü Database Builder èñïîëüçóåò ôàéë èåðàðõè÷åñêèõ ñâÿçåé HIF äëÿ êîìïîíîâêè ñîçäàííûõ êîìïèëÿòîðîì ôàéëîâ CNF, â êîòîðûõ ñîäåðæèòñÿ îïèñàíèå ïðîåêòà. Íà îñíîâàíèè äàííûõ îá èåðàðõè÷åñêîé ñòðóêòóðå ïðîåêòà äàííûé ìîäóëü êîïèðóåò êàæäûé ôàéë CNF â îäíó áàçó äàííûõ áåç èåðàðõè÷åñêîé ñòðóêòóðû. Òàêèì îáðàçîì, ýòà áàçà äàííûõ ñîõðàíÿåò ýëåêòðè÷åñêóþ ñâÿçíîñòü ïðîåêòà. Ïðè ñîçäàíèè áàçû äàííûõ ìîäóëü èññëåäóåò ëîãè÷åñêóþ ïîëíîòó è ñîãëàñîâàííîñòü ïðîåêòà, à òàêæå ïðîâåðÿåò ïîãðàíè÷íóþ ñâÿçíîñòü è íàëè÷èå ñèíòàêñè÷åñêèõ îøèáîê (íàïðèìåð óçåë áåç èñòî÷íèêà èëè ìåñòà íàçíà÷åíèÿ). Íà ýòîé ñòàäèè êîìïèëÿöèè îáíàðóæèâàåòñÿ áîëüøèíñòâî îøèáîê, êîòîðûå ìîãóò áûòü òóò æå ëåãêî èñïðàâëåíû. Kàæäûé ìîäóëü êîìïèëÿòîðà ïîñëåäîâàòåëüíî îáðàáàòûâàåò è îáíîâëÿåò ýòó áàçó äàííûõ.
157
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Ïåðâûé ðàç, êîãäà êîìïèëÿòîð îáðàáàòûâàåò ïðîåêò, âñå ôàéëû ïðîåêòà êîìïèëèðóþòñÿ. Âû ìîæåòå èñïîëüçîâàòü âîçìîæíîñòü «áûñòðîé ïîâòîðíîé êîìïèëÿöèè» (smart recompile) äëÿ ñîçäàíèÿ ðàñøèðåííîé áàçû äàííûõ ïðîåêòà, êîòîðàÿ ïîìîãàåò óñêîðèòü ïîñëåäóþùèå êîìïèëÿöèè. Ýòà áàçà äàííûõ ïîçâîëÿåò âàì èçìåíèòü íàçíà÷åíèÿ ðåñóðñîâ ôèçè÷åñêîãî óñòðîéñòâà, òàêèå êàê íàçíà÷åíèÿ âûâîäîâ è ëîãè÷åñêèõ ýëåìåíòîâ, à òàêæå ïîâòîðíî êîìïèëèðîâàòü ïðîåêò áåç ïîâòîðíîãî ïîñòðîåíèÿ áàçû äàííûõ è ïîâòîðíîãî ñèíòåçà ëîãèêè ïðîåêòà. Èñïîëüçóÿ âîçìîæíîñòü «ïîëíîé ïîâòîðíîé êîìïèëÿöèè» (total recompile), âîçìîæíî ñäåëàòü âûáîð ìåæäó ïîâòîðíîé êîìïèëÿöèåé òîëüêî òåõ ôàéëîâ, êîòîðûå ðåäàêòèðîâàëèñü ïîñëå ïîñëåäíåé êîìïèëÿöèè, è ïîëíîé ïîâòîðíîé êîìïèëÿöèåé âñåãî ïðîåêòà. Ìîäóëü Logic Synthesizer ïðèìåíÿåò ðÿä àëãîðèòìîâ, êîòîðûå óìåíüøàþò èñïîëüçîâàíèå ðåñóðñîâ è óáèðàþò äóáëèðîâàííóþ ëîãèêó, îáåñïå÷èâàÿ òåì ñàìûì ìàêñèìàëüíî ýôôåêòèâíîå èñïîëüçîâàíèå ñòðóêòóðû ëîãè÷åñêîãî ýëåìåíòà äëÿ àðõèòåêòóðû öåëåâîãî ñåìåéñòâà óñòðîéñòâ. Äàííûé ìîäóëü êîìïèëÿòîðà ïðèìåíÿåò òàêæå ñïîñîáû ëîãè÷åñêîãî ñèíòåçà äëÿ òðåáîâàíèé ïîëüçîâàòåëÿ ïî âðåìåííûì ïàðàìåòðàì è äð. Kðîìå òîãî, ëîãè÷åñêèé ñèíòåçàòîð èùåò ëîãèêó äëÿ íåñîåäèíåííûõ óçëîâ. Åñëè íàõîäèò íåïðèñîåäèíåííûé óçåë, îí óáèðàåò ïðèìèòèâû, îòíîñÿùèåñÿ ê ýòîìó óçëó. Äëÿ óïðàâëåíèÿ ëîãè÷åñêèì ñèíòåçîì èìåþòñÿ òðè çàðàíåå îïèñàííûõ ñòèëÿ è áîëüøîå ÷èñëî ëîãè÷åñêèõ îïöèé.  ëþáîì ïðèëîæåíèè MAX+PLUS II ìîæíî ââåñòè çíà÷åíèÿ âðåìåííûõ ïàðàìåòðîâ ïðîåêòà è âûáðàòü ëîãè÷åñêèå îïöèè, à òàêæå îïðåäåëèòü ñòèëè ëîãè÷åñêîãî ñèíòåçà. Âû ìîæåòå çàäàòü ãëîáàëüíûé ëîãè÷åñêèé ñèíòåç ïî óìîë÷àíèþ è âðåìåííûå ïàðàìåòðû ïðîåêòà äëÿ âñåãî ïðîåêòà â öåëîì, à òàêæå âñå äîïîëíèòåëüíûå íàçíà÷åíèÿ ëîãè÷åñêèõ îïöèé è âðåìåííûõ ïàðàìåòðîâ ïðîåêòà è äëÿ îòäåëüíûõ ëîãè÷åñêèõ ôóíêöèé. Åñëè ïðîåêò íå ïîìåùàåòñÿ ïðè ìîíòàæå â îäíî óñòðîéñòâî, ìîäóëü Partitioner ðàçäåëÿåò áàçó äàííûõ, îáíîâëåííóþ ëîãè÷åñêèì ñèíòåçàòîðîì, íà íåñêîëüêî ÏËÈÑ îäíîãî è òîãî æå ñåìåéñòâà, ñòàðàÿñü ïðè ýòîì ðàçäåëèòü ïðîåêò íà ìèíèìàëüíî âîçìîæíîå ÷èñëî óñòðîéñòâ. Ðàçáèåíèå ïðîåêòà ïðîèñõîäèò ïî ãðàíèöàì ëîãè÷åñêèõ ýëåìåíòîâ, à ÷èñëî âûâîäîâ, èñïîëüçóåìîå äëÿ ñîîáùåíèÿ ìåæäó óñòðîéñòâàìè, ìèíèìèçèðóåòñÿ. Ðàçáèåíèå ìîæåò áûòü ïðîâåäåíî ïîëíîñòüþ àâòîìàòè÷åñêè ëèáî ïîä ÷àñòè÷íûì èëè ïîëíûì óïðàâëåíèåì ñî ñòîðîíû ïîëüçîâàòåëÿ. Íàçíà÷åíèÿ óñòðîéñòâ è óñòàíîâêè äëÿ àâòîìàòè÷åñêîãî âûáîðà óñòðîéñòâ ïîçâîëÿþò ïðèìåíèòü òîò óðîâåíü óïðàâëåíèÿ, êîòîðûé íàèáîëåå ïîäõîäèò äëÿ êîíêðåòíîãî ïðîåêòà.
158
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II Kîãäà ðàáîòàþò ìîäóëè Partitioner è Fitter, âû ìîæåòå ïðèîñòàíîâèòü êîìïèëÿöèþ. Kîìïèëÿòîð îòîáðàçèò èíôîðìàöèþ î òåêóùåì ñîñòîÿíèè ïðîöåññîâ ðàçáèåíèÿ è òðàññèðîâêè êðèñòàëëà, â òîì ÷èñëå ñðàâíåíèå òðåáóåìûõ è èìåþùèõñÿ ðåñóðñîâ. Ýòî íóæíî äëÿ òîãî, ÷òîáû ïðèíÿòü ðåøåíèå, ïðîäîëæàòü ëè êîìïèëÿöèþ èëè âíîñèòü êàðäèíàëüíûå èçìåíåíèÿ â ïðîåêò. Èñïîëüçóÿ áàçó äàííûõ, îáíîâëåííóþ ìîäóëåì ðàçáèåíèÿ, ìîäóëü Fitter ïðèâîäèò â ñîîòâåòñòâèå òðåáîâàíèÿ ïðîåêòà ñ èçâåñòíûìè ðåñóðñàìè îäíîãî èëè íåñêîëüêèõ óñòðîéñòâ. Îí íàçíà÷àåò êàæäîé ëîãè÷åñêîé ôóíêöèè ðàñïîëîæåíèå ðåàëèçóþùåãî åå ëîãè÷åñêîãî ýëåìåíòà è âûáèðàåò ñîîòâåòñòâóþùèå ïóòè âçàèìíûõ ñîåäèíåíèé è íàçíà÷åíèÿ âûâîäîâ. Äàííûé ìîäóëü ïûòàåòñÿ ñîãëàñîâàòü íàçíà÷åíèÿ ðåñóðñîâ, ò.å. âûâîäîâ, ëîãè÷åñêèõ ýëåìåíòîâ, ýëåìåíòîâ ââîäà/âûâîäà, ÿ÷ååê ïàìÿòè, ÷èïîâ, êëèê, óñòðîéñòâ, ìåñòíîé òðàññèðîâêè, âðåìåííûõ ïàðàìåòðîâ è íàçíà÷åíèÿ ñîåäèíåííûõ âûâîäîâ èç ôàéëà íàçíà÷åíèé è êîíôèãóðàöèè (.acf, Assignment & Configuration file), ñ èìåþùèìèñÿ ðåñóðñàìè. Ìîäóëü èìååò ïàðàìåòðû, ïîçâîëÿþùèå îïðåäåëèòü ñïîñîáû òðàññèðîâêè, íàïðèìåð àâòîìàòè÷åñêîå ââåäåíèå ëîãè÷åñêèõ ýëåìåíòîâ èëè îãðàíè÷åíèå êîýôôèöèåíòà îáúåäèíåíèÿ ïî âõîäó. Åñëè òðàññèðîâêà íå ìîæåò áûòü âûïîëíåíà, ìîäóëü âûäàåò ñîîáùåíèå è ïðåäëàãàåò âàì âûáîð, ïðîèãíîðèðîâàòü íåêîòîðûå èëè âñå âàøè íàçíà÷åíèÿ ëèáî ïðåêðàòèòü êîìïèëÿöèþ. Íåçàâèñèìî îò òîãî, çàâåðøåíà ëè ïîëíàÿ òðàññèðîâêà ïðîåêòà, äàííûé ìîäóëü ãåíåðèðóåò ôàéë îò÷åòà (.rpt, report file), â êîòîðîì äîêóìåíòèðóåòñÿ èíôîðìàöèÿ î ðàçáèåíèè ïðîåêòà, èìåíàõ âõîäíûõ è âûõîäíûõ êîíòàêòîâ, âðåìåííûõ ïàðàìåòðàõ ïðîåêòà è íåèñïîëüçîâàííûõ ðåñóðñàõ äëÿ êàæäîãî óñòðîéñòâà â ïðîåêòå. Âû ìîæåòå âêëþ÷èòü â ôàéë îò÷åòà ðàçäåëû, ïîêàçûâàþùèå íàçíà÷åíèÿ ïîëüçîâàòåëÿ, ôàéëîâóþ èåðàðõèþ, âçàèìíûå ñîåäèíåíèÿ ëîãè÷åñêèõ ýëåìåíòîâ è óðàâíåíèÿ, ðåàëèçîâàííûå â ËÝ. Kîìïèëÿòîð òàêæå àâòîìàòè÷åñêè ñîçäàåò ôàéë òðàññèðîâêè (.fit), â êîòîðîì äîêóìåíòèðóþòñÿ íàçíà÷åíèÿ ðåñóðñîâ è óñòðîéñòâ äëÿ âñåãî ïðîåêòà, à òàêæå èíôîðìàöèÿ î òðàññèðîâêå. Íåçàâèñèìî îò òîãî, óñïåøíî ëè ïðîøëà òðàññèðîâêà, ïîëüçîâàòåëü ìîæåò ïðîñìîòðåòü èíôîðìàöèþ î ñîãëàñîâàíèè, ðàçáèåíèè è òðàññèðîâêå èç ôàéëà ñîãëàñîâàíèÿ â îêíå ïîóðîâíåâîãî ïëàíèðîâùèêà. Âîçìîæíî òàêæå ïåðåïèñàòü íàçíà÷åíèÿ èç ôàéëà ñîãëàñîâàíèÿ â ôàéë íàçíà÷åíèé è êîíôèãóðàöèè ACF äëÿ ïîñëåäóþùåãî ðåäàêòèðîâàíèÿ. Ñóùåñòâóåò âîçìîæíîñòü äàòü óêàçàíèå ìîäóëþ Fitter ñãåíåðèðîâàòü âûõîäíûå òåêñòîâûå ôàéëû ïðîåêòà íà ÿçûêå AHDL (.tdo). Ïîñêîëüêó â ïðîåêòå ñ íåñêîëüêèìè óñòðîéñòâàìè äëÿ îäíîãî óñòðîéñòâà ãåíåðèðóåòñÿ
159
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II îäèí ôàéë, ñëåäóåò ðàçáèòü ïðîåêò íà íåñêîëüêî ïðîåêòîâ, êàæäûé äëÿ îäíîãî óñòðîéñòâà, åñëè òðåáóåòñÿ çàôèêñèðîâàòü ëîãèêó â íåêîòîðûõ óñòðîéñòâàõ, çàòåì ñîõðàíèòü ôàéë TDO äëÿ ýòîãî óñòðîéñòâà êàê ôàéë òåêñòîâîãî äèçàéíà (.tdf) è ïåðåêîìïèëèðîâàòü ëîãèêó äëÿ ýòîãî óñòðîéñòâà, ñîõðàíÿÿ ïðè ýòîì ðåçóëüòàòû ëîãè÷åñêîãî ñèíòåçà, ïîëó÷åííûå â õîäå ïðåäûäóùåé êîìïèëÿöèè. Functional SNF Extractor ñîçäàåò ôàéë äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ (.snf). Kîìïèëÿòîð ãåíåðèðóåò ýòîò ôàéë ïåðåä ñèíòåçîì ïðîåêòà, ïîýòîìó îí ñîäåðæèò âñå óçëû, ïðèñóòñòâóþùèå â ïåðâîíà÷àëüíûõ ôàéëàõ ïðîåêòà. Ýòîò ôóíêöèîíàëüíûé ôàéë SNF íå ñîäåðæèò èíôîðìàöèþ î âðåìåííûõ ïàðàìåòðàõ. Åãî ãåíåðàöèÿ âîçìîæíà òîëüêî â ñëó÷àå, åñëè êîìïèëÿöèÿ ïðîåêòà ïðîøëà áåç îøèáîê. Timing SNF Extractor ñîçäàåò (åñëè êîìïèëÿöèÿ ïðîåêòà ïðîøëà áåç îøèáîê) ôàéë äëÿ òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ (.snf), êîòîðûé ñîäåðæèò äàííûå î âðåìåííûõ ïàðàìåòðàõ ïðîåêòà. Ýòîò ôàéë èñïîëüçóåòñÿ äëÿ òåñòèðîâàíèÿ è àíàëèçà âðåìåííûõ ïàðàìåòðîâ. Kðîìå òîãî, ýòè ôàéëû SNF èñïîëüçóþò òàêæå ìîäóëè êîìïèëÿòîðà, ñîäåðæàùèå ïðîãðàììû çàïèñè â ôîðìàòû EDIF, Verilog è VHDL, ãåíåðèðóþùèå âûõîäíûå ôàéëû ýòèõ ôîðìàòîâ è òàêæå (ïî æåëàíèþ ïîëüçîâàòåëÿ) âûõîäíûå ôàéëû ôîðìàòà ñòàíäàðòíûõ çàäåðæåê (.sdo, standart delay format output file). Ìîæíî çàäàòü êîìïèëÿòîðó ñãåíåðèðîâàòü îïòèìèçèðîâàííûé ôàéë SNF ñ ïîìîùüþ êîìàíäû Processing/Timing SNF Extractor. Îïòèìèçàöèÿ ôàéëà SNF óâåëè÷èâàåò âðåìÿ êîìïèëÿöèè, íî ïîìîãàåò ñýêîíîìèòü âàøå âðåìÿ ïðè òåñòèðîâàíèè è àíàëèçå âðåìåííûõ ïàðàìåòðîâ. Linked SNF Extractor ñîçäàåò ôàéë (.snf) äëÿ òåñòèðîâàíèÿ êîìïîíîâêè ïðè òåñòèðîâàíèè íåñêîëüêèõ ïðîåêòîâ (íà óðîâíå ïëàòû). Òàêîé ôàéë SNF êîìáèíèðóåò èíôîðìàöèþ èç ôàéëîâ SNF äâóõ òèïîâ: äëÿ òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ è ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ, êîòîðûå áûëè ñãåíåðèðîâàíû äëÿ ýòèõ íåñêîëüêèõ ïðîåêòîâ ïî îòäåëüíîñòè. Ñêîìïîíîâàííûå ïðîåêòû ìîãóò èñïîëüçîâàòü óñòðîéñòâà, ïðèíàäëåæàùèå ðàçíûì ñåìåéñòâàì. Åñëè ôàéë äëÿ òåñòèðîâàíèÿ êîìïîíîâêè ñîäåðæèò òîëüêî èíôîðìàöèþ î âðåìåííûõ ïàðàìåòðàõ, åãî ìîæíî òàêæå èñïîëüçîâàòü ïðè ïðîãîíå àíàëèçà âðåìåííûõ ïàðàìåòðîâ. EDIF Netlist Writer. Kîìïèëÿòîð MAX+PLUS II ìîæåò âçàèìîäåéñòâîâàòü ñ áîëüøèíñòâîì ñòàíäàðòíûõ ïðîãðàììíûõ ñðåäñòâ ÑÀÏÐ, êîòîðûå ìîãóò ÷èòàòü ôàéëû ñòàíäàðòíîãî ôîðìàòà EDIF 200 èëè 300. Äàííûé (íåîáÿçàòåëüíûé) ìîäóëü êîìïèëÿòîðà, ñîäåðæàùèé ïðîãðàììó çàïèñè â ôîð-
160
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II ìàò EDIF, ñîçäàåò îäèí èëè íåñêîëüêî âûõîäíûõ ôàéëîâ â ôîðìàòå EDIF (.edo), ñîäåðæàùèõ èíôîðìàöèþ î ôóíêöèÿõ è (íåîáÿçàòåëüíî) âðåìåííûõ ïàðàìåòðàõ, ïîëó÷åííóþ ïîñëå ïðîâåäåíèÿ ñèíòåçà. Èíôîðìàöèÿ î âðåìåííûõ ïàðàìåòðàõ ìîæåò áûòü òàêæå çàïèñàíà â îòäåëüíûå âûõîäíûå ôàéëû ôîðìàòà ñòàíäàðòíîé çàäåðæêè (.sdo). Verilog Netlist Writer (íåîáÿçàòåëüíûé ìîäóëü ïðîãðàììû çàïèñè â ôîðìàò Verilog) ãåíåðèðóåò âûõîäíûå ôàéëû ñ ðàñøèðåíèåì .vo, ñîäåðæàùèå èíôîðìàöèþ î ôóíêöèÿõ è âðåìåííûõ ïàðàìåòðàõ, ïîëó÷åííóþ ïîñëå ïðîâåäåíèÿ ñèíòåçà. Èíôîðìàöèÿ î âðåìåííûõ ïàðàìåòðàõ ìîæåò áûòü òàêæå çàïèñàíà â îòäåëüíûå âûõîäíûå ôàéëû ôîðìàòà ñòàíäàðòíîé çàäåðæêè (.sdo). VHDL Netlist Writer VHDL (íåîáÿçàòåëüíûé ìîäóëü êîìïèëÿòîðà ñ ïðîãðàììîé çàïèñè â ôîðìàò VHDL) ãåíåðèðóåò îäèí èëè íåñêîëüêî âûõîäíûõ ôàéëîâ (.vho) íà ÿçûêå VHDL ñ ñèíòàêñèñîì 1987 èëè 1993, ñîäåðæàùèõ èíôîðìàöèþ î ôóíêöèÿõ è (íåîáÿçàòåëüíî) âðåìåííûõ ïàðàìåòðàõ, ïîëó÷åííóþ ïîñëå ïðîâåäåíèÿ ñèíòåçà. Èíôîðìàöèÿ î âðåìåííûõ ïàðàìåòðàõ ìîæåò áûòü òàêæå çàïèñàíà â îòäåëüíûå âûõîäíûå ôàéëû ôîðìàòà ñòàíäàðòíîé çàäåðæêè (.sdo). Âûõîäíûå ôàéëû íà ÿçûêàõ îïèñàíèÿ àïïàðàòóðû ìîæíî èñïîëüçîâàòü ïðè âåðèôèêàöèè ïðîåêòà ñ èñïîëüçîâàíèåì âíåøíåãî ñèìóëÿòîðà. Ýòè ôàéëû ãåíåðèðóþòñÿ òîëüêî â ñëó÷àå óñïåøíîé êîìïèëÿöèè ïðîåêòà. Ìîäóëü Assembler ïðåîáðàçóåò íàçíà÷åíèÿ ëîãè÷åñêèõ ýëåìåíòîâ, âûâîäîâ è óñòðîéñòâà, ñäåëàííûå ìîäóëåì Fitter, â ïðîãðàììíûé îáðàç äëÿ óñòðîéñòâà (óñòðîéñòâ) â âèäå îäíîãî èëè íåñêîëüêèõ äâîè÷íûõ îáúåêòíûõ ôàéëîâ äëÿ ïðîãðàììàòîðà (.pof) èëè îáúåêòíûõ ôàéëîâ SRAM (.sof); äëÿ íåêîòîðûõ óñòðîéñòâ êîìïèëÿòîð òàêæå ãåíåðèðóåò ASCII-ôàéëû JEDEC (.jed), ñîäåðæàùèå èíôîðìàöèþ äëÿ ïðîãðàììàòîðà, êîíôèãóðàöèîííûå ASCII-ôàéëû (.ttf) è ASCII-ôàéëû ôîðìàòà Intel (.hex). Îáúåêòíûå ôàéëû POF è SOF, à òàêæå êîíôèãóðàöèîííûå ôàéëû JEDEC çàòåì îáðàáàòûâàþòñÿ ïðîãðàììàòîðîì ñèñòåìû MAX+PLUS II è ïðîãðàììèðóþùåé àïïàðàòóðîé ôèðìû «Altera» (èëè äðóãèì ïðîãðàììàòîðîì). Ôàéëû HEX è TTF ìîãóò áûòü èñïîëüçîâàíû äëÿ êîíôèãóðèðîâàíèÿ óñòðîéñòâ FLEX6000, FLEX8000 è FLEX10K ñ ïîìîùüþ äðóãèõ ñðåäñòâ. Ìîäóëü àññåìáëåðà ñîçäàåò ôàéëû äëÿ ïðîãðàììàòîðà òîëüêî â ñëó÷àå óñïåøíîé êîìïèëÿöèè ïðîåêòà. Ïîñëå çàâåðøåíèÿ êîìïèëÿöèè êîìïèëÿòîð è ïðîãðàììàòîð ñèñòåìû MAX+PLUS II ïîçâîëÿþò ñãåíåðèðîâàòü äîïîëíèòåëüíûå ôàéëû äëÿ ïðîãðàììèðîâàíèÿ óñòðîéñòâà, êîòîðûå ìîæíî èñïîëüçîâàòü â äðóãèõ óñëîâè-
161
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
AL2124
ÿõ ïðîãðàììèðîâàíèÿ. Íàïðèìåð ìîæíî ñîçäàòü ôàéëû ñ ïîñëåäîâàòåëüíûì ïîòîêîì áèòîâ (.bbs) è íåîáðàáîòàííûå äâîè÷íûå ôàéëû (.rbf) äëÿ êîíôèãóðèðîâàíèÿ óñòðîéñòâ FLEX6000, FLEX8000 è FLEX10K. Ìîæíî ñîçäàòü ïîñëåäîâàòåëüíûå ôàéëû òåñòîâûõ âåêòîðîâ (.svf) èëè ôàéëû íà ÿçûêå JAM (.jam) äëÿ ïðîãðàììèðîâàíèÿ óñòðîéñòâ â àâòîìàòèçèðîâàííîé èñïûòàòåëüíîé àïïàðàòóðå òèïà ATE. Design Doctor Utility (íåîáÿçàòåëüíàÿ óòèëèòà äèàãíîñòèêè) ïðîåêòà ïðîâåðÿåò ëîãèêó êàæäîãî ôàéëà ïðîåêòà äëÿ âûÿâëåíèÿ ýëåìåíòîâ, êîòîðûå ìîãóò âûçâàòü ïðîáëåìû íàäåæíîñòè íà ñèñòåìíîì óðîâíå. Ýòè ïðîáëåìû îáû÷íî îáíàðóæèâàþòñÿ òîëüêî ïîñëå çàïóñêà óñòðîéñòâà «â æåëåçå». Ñóùåñòâóåò âîçìîæíîñòü âûáîðà îäíîãî èç òðåõ ïðåäâàðèòåëüíî îïðåäåëåííûõ íàáîðîâ ïðàâèë ðàçðàáîòêè ïðîåêòà ñ ðàçíûìè óðîâíÿìè. Kðîìå òîãî, âû ìîæåòå ðàçðàáîòàòü ñâîé ñîáñòâåííûé ñâîä ïðàâèë ðàçðàáîòêè äèçàéíà. Ïðàâèëà ðàçðàáîòêè äèçàéíà îñíîâûâàþòñÿ íà ïðèíöèïàõ íàäåæíîñòè, êîòîðûå îõâàòûâàþò ëîãèêó, ñîäåðæàùóþ àñèíõðîííûå âõîäû, òàêòîâûå ñèãíàëû (Clock), ìíîãîóðîâíåâóþ ëîãèêó íà êîíôèãóðàöèÿõ ñ ñèãíàëàìè Clock, Preset è Clear, à òàêæå â óñëîâèÿõ ñîñòÿçàíèé. Óñòàíîâêà ïðàâèë ïðîÐèñ. 2.27. Îêíî êîìàíäû âåðêè ïðîèçâîäèòñÿ ñ ïîìîùüþ êîìàíDesign Doctor Settings äû Design Doctor Settings (Ðèñ. 2.27).
2.5. Âåðèôèêàöèÿ ïðîåêòà Äëÿ âåðèôèêàöèè ïðîåêòà (Ðèñ. 2.28) â ñèñòåìå MAX+PLUS II èñïîëüçóþòñÿ òðè ïðèëîæåíèÿ: ñèìóëÿòîð, àíàëèçàòîð âðåìåííûõ ïàðàìåòðîâ è ñèãíàëüíûé ðåäàêòîð.
Ñèìóëÿòîð (Simulator) Ñèìóëÿòîð ñèñòåìû MAX+PLUS II òåñòèðóåò ëîãè÷åñêèå îïåðàöèè è âíóòðåííþþ ñèíõðîíèçàöèþ ïðîåêòà, ïîçâîëÿÿ ïîëüçîâàòåëþ ìîäåëèðîâàòü
162
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
.cmd
.hex .mif
.vec
.vec
MAX+PLUS II Симулятор
.log
.hst
.sif
.scf
.tbl
Сигнальный редактор
.tbl
.snf Протокол исполнения команд
История команд
Выходной табличный файл
MAX+PLUS II Временной анализатор
AL2125+
.tao
Ðèñ. 2.28. Âåðèôèêàöèÿ ïðîåêòà â ñèñòåìå MAX+PLUS II
ïðîåêò. Ñèìóëÿòîð ìîæåò ðàáîòàòü èëè â äèàëîãîâîì, èëè àâòîìàòè÷åñêîì (ïàêåòíîì) ðåæèìàõ. Îêíî ñèìóëÿòîðà ïîêàçàíî íà Ðèñ. 2.29. Ïåðåä òåñòèðîâàíèåì ïðîåêò íåîáõîäèìî ñêîìïèëèðîâàòü, çàäàâ êîìïèëÿòîðó îïöèþ ñãåíåðèðîâàòü ôàéë (.snf) äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ, òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ ëèáî òåñòèðîâàíèÿ êîìïîíîâêè íåñêîëüêèõ ïðîåêòîâ (óñòðîéñòâ). Çàòåì ïîëó÷åííûé äëÿ òåêóùåãî ïðîåêòà ôàéë SNF çàãðóæàåòñÿ àâòîìàòè÷åñêè ïðè îòêðûòèè ñèìóëÿòîðà.  êà÷åñòâå èñòî÷íèêà âõîäíûõ âåêòîðîâ èñïîëüçóþòñÿ ëèáî ãðàôè÷åñêèé ñèãíàëüíûé ôàéë êàíàëîâ òåñòèðîâàíèÿ (.scf), ëèáî òåêñòîâûé ASCIIôàéë (.vec). Äëÿ ïðîåêòîâ, ðàáîòàþùèõ ñ ïàìÿòüþ, ìîæíî çàäàòü íåêîå èñõîäíîå ñîäåðæèìîå ïàìÿòè â ôàéëàõ øåñòíàäöàòåðè÷íîãî ôîðìàòà («Intel») ñ ðàñøèðåíèåì .hex èëè â ôàéëàõ èíèöèàëèçàöèè ïàìÿòè ñ ðàñøèðåíèåì .mif. Ñèãíàëüíûé ðåäàêòîð ìîæåò àâòîìàòè÷åñêè ñîçäàâàòü ôàéë SCF ïî óìîë÷àíèþ, êîòîðûé ïîëüçîâàòåëü ìîæåò ðåäàêòèðîâàòü ñ öåëüþ ïîëó÷åíèÿ íóæíûõ åìó òåñòîâûõ âõîäíûõ âåêòîðîâ. Åñëè âìåñòî ýòîãî èñïîëüçóåòñÿ
163
AL2126
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II
Ðèñ. 2.29. Ñèìóëÿòîð MAX+PLUS II
òåêñòîâûé ASCII-ôàéë âåêòîðîâ, ñèãíàëüíûé ðåäàêòîð àâòîìàòè÷åñêè ãåíåðèðóåò èç íåãî ôàéë êàíàëîâ òåñòèðîâàíèÿ SCF ( Simulator Chanel File). Ñèìóëÿòîð ïîçâîëÿåò ïðîâåðèòü âûõîäíûå çíà÷åíèÿ, ïîëó÷àåìûå â õîäå òåñòèðîâàíèÿ, ïî âûõîäàì, ñîäåðæàùèìñÿ â ôàéëå SCF (çàäàííûì ïîëüçîâàòåëåì ïðîãíîçèðóåìûì çíà÷åíèÿì èëè ðåçóëüòàòàì ïðåäûäóùèõ òåñòîâ). Ñ ïîìîùüþ ñîîòâåòñòâóþùåé àïïàðàòóðû äëÿ ïðîãðàììèðîâàíèÿ ìîæíî òàêæå âûïîëíèòü ôóíêöèîíàëüíîå òåñòèðîâàíèå äëÿ ïðîâåðêè äåéñòâèòåëüíûõ çíà÷åíèé âûõîäîâ ïðîãðàììèðóåìîãî óñòðîéñòâà ïî ðåçóëüòàòàì òåñòèðîâàíèÿ. Èñïîëüçóÿ ðàçëè÷íûå îïöèè ñèìóëÿòîðà, ìîæíî êîíòðîëèðîâàòü ïðîåêò íà ïîÿâëåíèå ñáîåâ (glitches), à òàêæå íàðóøåíèå óñòàíîâî÷íûõ ïàðàìåòðîâ è âðåìåííûõ çàäåðæåê. Ïîñëå çàâåðøåíèÿ òåñòèðîâàíèÿ ìîæíî îòêðûòü ñèãíàëüíûé ðåäàêòîð äëÿ ïðîñìîòðà îáíîâëåííîãî ôàéëà SCF èëè ñîõðàíèòü ïîëó÷åííûå âûõîäíûå çíà÷åíèÿ â òàáëè÷íîì ôàéëå ñ ðàñøèðåíèåì .tbl, à çàòåì ïðîñìàòðèâàòü ðåçóëüòàòû â òåêñòîâîì ðåäàêòîðå. Ôóíêöèîíàëüíîå òåñòèðîâàíèå. Åñëè êîìïèëÿòîðó «äàíî çàäàíèå» ñãåíåðèðîâàòü ôàéë SNF äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ, îí ñîçäàåò åãî
164
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II ïåðåä ñèíòåçîì ïðîåêòà. Ñëåäîâàòåëüíî, ïðè ôóíêöèîíàëüíîì òåñòèðîâàíèè ìîæíî ñìîäåëèðîâàòü âñå óçëû ïðîåêòà. Âî âðåìÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ ñèìóëÿòîð èãíîðèðóåò âñå çàäåðæêè ðàñïðîñòðàíåíèÿ. Ïîýòîìó â ôàéëå SNF äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ íåò çàäåðæåê, âûõîäíûå ëîãè÷åñêèå óðîâíè èçìåíÿþòñÿ îäíîâðåìåííî ñî âõîäíûìè âåêòîðàìè. Òåñòèðîâàíèå âðåìåííûõ ïàðàìåòðîâ. Ôàéë SNF äëÿ òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ êîìïèëÿòîð ãåíåðèðóåò, ïîñëå òîãî êàê ïðîâåäåíû ïîëíûé ñèíòåç è îïòèìèçàöèÿ ïðîåêòà. Ïîýòîìó ýòîò ôàéë ñîäåðæèò òîëüêî òå óçëû, êîòîðûå íå áûëè óíè÷òîæåíû â ïðîöåññå ëîãè÷åñêîãî ñèíòåçà. Èç ýòîãî ôàéëà ñèìóëÿòîð áåðåò èíôîðìàöèþ îá àïïàðàòíîé ÷àñòè, êîòîðàÿ áûëà ñîáðàíà èç ôàéëîâ ìîäåëåé óñòðîéñòâ (.dmf), èìåþùèõñÿ â êîìïëåêòå ñèñòåìû MAX+PLUS II. Åñëè ïðîåêò áûë ðàçáèò íà íåñêîëüêî óñòðîéñòâ, êîìïèëÿòîð ñîçäàåò ôàéë SNF äëÿ ïðîåêòà â öåëîì è äëÿ êàæäîãî óñòðîéñòâà. Îäíàêî òåñòèðîâàíèå âðåìåííûõ ïàðàìåòðîâ îñóùåñòâëÿåòñÿ òîëüêî äëÿ ïðîåêòà â öåëîì. Ìîæíî óñêîðèòü òåñòèðîâàíèå âðåìåííûõ ïàðàìåòðîâ, âûäàâ êîìïèëÿòîðó óêàçàíèå ñãåíåðèðîâàòü îïòèìèçèðîâàííûé ôàéë SNF, ñîäåðæàùèé äèíàìè÷åñêèå ìîäåëè, êîòîðûå ïðåäñòàâëÿþò ñîáîé ðàçíûå òèïû êîìáèíàòîðíîé ëîãèêè. Ïðîöåññîðíîå âðåìÿ êîìïèëÿòîðà ïðè ýòîì óâåëè÷èâàåòñÿ, îäíàêî ïîëó÷åííûé îïòèìèçèðîâàííûé SNF ìîæåò óìåíüøèòü âðåìÿ òåñòèðîâàíèÿ, ïîñêîëüêó ñèìóëÿòîð ìîæåò ðàáîòàòü ñ äèíàìè÷åñêèìè ìîäåëÿìè, âìåñòî òîãî ÷òîáû èíòåðïðåòèðîâàòü âñþ ëîãèêó â êîìáèíàòîðíîé ñõåìå. Ïðè ñîçäàíèè ôàéëà SNF äëÿ òåñòèðîâàíèÿ êîìïîíîâêè íåñêîëüêèõ ïðîåêòîâ êîìïèëÿòîð êîìáèíèðóåò ôàéëû SNF äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ è/èëè ôàéëû äëÿ òåñòèðîâàíèÿ âðåìåííûõ ïàðàìåòðîâ íåñêîëüêèõ îòäåëüíûõ ïðîåêòîâ. Îòäåëüíûå ïîäïðîåêòû â êîìïîíîâî÷íîì SNF ìîãóò áûòü ïðåäíàçíà÷åíû äëÿ óñòðîéñòâ ðàçíûõ ñåìåéñòâ. Kðîìå òîãî, ïîñêîëüêó ôàéëû SNF äëÿ ôóíêöèîíàëüíîãî òåñòèðîâàíèÿ ñîçäàþòñÿ äî îêîí÷àíèÿ ïîëíîé êîìïèëÿöèè, ìîæíî ââåñòè ïîäïðîåêòû, êîòîðûå ïðåäñòàâëÿþò ëîãèêó, íå ðåàëèçîâàííóþ â óñòðîéñòâå ôèðìû «Altera». Kîìïîíîâî÷íûé ôàéë SNF ìîæíî èñïîëüçîâàòü äëÿ òåñòèðîâàíèÿ íà óðîâíå ïëàòû. Kðîìå òîãî, åñëè îí ñîäåðæèò òîëüêî èíôîðìàöèþ î âðåìåííûõ ïàðàìåòðàõ, åãî ìîæíî èñïîëüçîâàòü äëÿ ïðîãîíà âðåìåííîãî àíàëèçàòîðà ñèñòåìû MAX+PLUS II. Âìåñòå ñ äðóãèìè ïðèëîæåíèÿìè ñèñòåìû MAX+PLUS II ñèìóëÿòîð ïîçâîëÿåò âàì âûïîëíÿòü ñëåäóþùèå çàäà÷è:
165
Ñèñòåìà ïðîåêòèðîâàíèÿ MAX+PLUS II çàäàòü îæèäàåìûå ëîãè÷åñêèå óðîâíè íà âûõîäå, êîòîðûå ìîæíî áóäåò ñðàâíèòü ñ ðåçóëüòàòàìè òåñòèðîâàíèÿ; ñìîäåëèðîâàòü îòäåëüíûå óçëû èëè óçëû, îáúåäèíåííûå â ãðóïïû. Ìîæíî êîìáèíèðîâàòü áèòû öèôðîâîãî àâòîìàòà â ïðîåêòå, ìîäåëèðîâàòü èõ êàê ãðóïïó è îáðàùàòüñÿ ê íèì ïî èìåíè ñîñòîÿíèÿ; îïðåäåëèòü âðåìåííîé èíòåðâàë, ïðåäñòàâëÿþùèé ñîáîé äðîæàíèå ôðîíòà èìïóëüñà èëè ñáîé, è ïðîàíàëèçèðîâàòü ïðîåêò íà íàëè÷èå îáîèõ ýòèõ óñëîâèé èëè îäíîãî èç íèõ; êîíòðîëèðîâàòü íàëè÷èå â ïðîåêòå íàðóøåíèé íà÷àëüíûõ óñòàíîâîê ðåãèñòðîâ è âðåìåííûõ çàäåðæåê; ðåãèñòðèðîâàòü äåéñòâèòåëüíûå çíà÷åíèÿ âûõîäîâ óñòðîéñòâ âìåñòî ìîäåëèðîâàííûõ; ïðîâîäèòü ôóíêöèîíàëüíîå òåñòèðîâàíèå. Ìîæíî ïðîâåðèòü, ÿâëÿþòñÿ ëè ñìîäåëèðîâàííûå âûõîäíûå çíà÷åíèÿ ôóíêöèîíàëüíî ýêâèâàëåíòíûìè ðåàëüíûì âûõîäàì óñòðîéñòâ; çàäàâàòü óñëîâèÿ òî÷êè ïðåðûâàíèÿ, êîòîðàÿ çàñòàâëÿåò ñèìóëÿòîð äåëàòü ïàóçó ïðè èõ ðåàëèçàöèè â ïðîöåññå òåñòèðîâàíèÿ; ñîñòàâëÿòü ïåðå÷åíü èìåí è ëîãè÷åñêèõ óðîâíåé ëþáîé êîìáèíàöèè óçëîâ è ãðóïï è èíèöèàëèçèðîâàòü ëîãè÷åñêèå óðîâíè óçëà èëè ãðóïïû ïåðåä òåñòèðîâàíèåì; èíèöèàëèçèðîâàòü ñîäåðæèìîå áëîêîâ ïàìÿòè RAM (ÎÇÓ) èëè ROM (ÏÇÓ) ïåðåä òåñòèðîâàíèåì; ñîõðàíÿòü èíèöèàëèçèðîâàííûå çíà÷åíèÿ óçëîâ è ãðóïï, â òîì ÷èñëå èíèöèàëèçèðîâàííîå ñîäåðæèìîå ïàìÿòè, â ôàéëå èíèöèàëèçàöèè ñèìóëÿòîðà (.sif) èëè ïåðåçàãðóæàòü èíèöèàëèçèðîâàííûå çíà÷åíèÿ, õðàíÿùèåñÿ â ôàéëå; ðåãèñòðèðîâàòü êîìàíäû ñèìóëÿòîðà â òåêñòîâîì ôàéëå ïðîòîêîëà èñïûòàíèé (.log) òîãî æå ôîðìàòà, ÷òî è êîìàíäíûé ôàéë (.cmd), èñïîëüçóåìûé ïðè òåñòèðîâàíèè â àâòîìàòè÷åñêîì (ïàêåòíîì) ðåæèìå, à çàòåì èñïîëüçîâàòü ýòîò ôàéë LOG äëÿ ïîâòîðåíèÿ ýòîãî öèêëà òåñòèðîâàíèÿ. Kîìàíäû ñèìóëÿòîðà è ïîëó÷åííûå ðåçóëüòàòû ìîæíî òàêæå çàïèñàòü â òåñòîâûé ôàéë èñòîðèè òåñòèðîâàíèÿ ñ ðàñøèðåíèåì .hst. Òàêèì îáðàçîì, ìû ðàññìîòðåëè îñíîâíûå ïðèåìû ðàáîòû ïàêåòà MAX+PLUS II. Kîíå÷íî, â ðàìêàõ îäíîé ãëàâû ïðàêòè÷åñêè íåâîçìîæíî ïîäðîáíî ðàññìîòðåòü âñå ïðèåìû ðàáîòû ñ òàêèì ñëîæíûì è ðàçíîîáðàçíûì ïðîãðàììíûì ñðåäñòâîì, îäíàêî çàèíòåðåñîâàííûé ïîëüçîâàòåëü â ñîñòîÿíèè ñàìîñòîÿòåëüíî îñâîèòü ïàêåò, èñïîëüçóÿ äàííóþ êíèãó è ôèðìåííîå ðóêîâîäñòâî ïîëüçîâàòåëÿ.
166
Ãëàâà 3.
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.1. Îáùèå ñâåäåíèÿ ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ðàçðàáîòàí ôèðìîé «Altera» è ïðåäíàçíà÷åí äëÿ îïèñàíèÿ êîìáèíàöèîííûõ è ïîñëåäîâàòåëüíîñòíûõ ëîãè÷åñêèõ óñòðîéñòâ, ãðóïïîâûõ îïåðàöèé, öèôðîâûõ àâòîìàòîâ (state machine) è òàáëèö èñòèííîñòè ñ ó÷åòîì àðõèòåêòóðíûõ îñîáåííîñòåé ÏËÈÑ ôèðìû «Altera». Îí ïîëíîñòüþ èíòåãðèðóåòñÿ ñ ñèñòåìîé àâòîìàòèçèðîâàííîãî ïðîåêòèðîâàíèÿ ÏËÈÑ MAX+PLUS II. Ôàéëû îïèñàíèÿ àïïàðàòóðû, íàïèñàííûå íà ÿçûêå AHDL, èìåþò ðàñøèðåíèå .TDF (text design file). Äëÿ ñîçäàíèÿ TDF-ôàéëà ìîæíî èñïîëüçîâàòü êàê òåêñòîâûé ðåäàêòîð ñèñòåìû MAX+PLUS II, òàê è ëþáîé äðóãîé. Ïðîåêò, âûïîëíåííûé â âèäå TDFôàéëà, êîìïèëèðóåòñÿ, îòëàæèâàåòñÿ è èñïîëüçóåòñÿ äëÿ ôîðìèðîâàíèÿ ôàéëà ïðîãðàììèðîâàíèÿ èëè çàãðóçêè ÏËÈÑ ôèðìû «Altera». Îïåðàòîðû è ýëåìåíòû ÿçûêà AHDL ÿâëÿþòñÿ äîñòàòî÷íî ìîùíûì è óíèâåðñàëüíûì ñðåäñòâîì îïèñàíèÿ àëãîðèòìîâ ôóíêöèîíèðîâàíèÿ öèôðîâûõ óñòðîéñòâ, óäîáíûì â èñïîëüçîâàíèè. ßçûê îïèñàíèÿ àïïàðàòóðû AHDL äàåò âîçìîæíîñòü ñîçäàâàòü èåðàðõè÷åñêèå ïðîåêòû â ðàìêàõ îäíîãî ýòîãî ÿçûêà èëè æå â èåðàðõè÷åñêîì ïðîåêòå èñïîëüçîâàòü êàê TDF-ôàéëû, ðàçðàáîòàííûå íà ÿçûêå AHDL, òàê è äðóãèå òèïû ôàéëîâ. Äëÿ ñîçäàíèÿ ïðîåêòîâ íà AHDL ìîæíî, êîíå÷íî, ïîëüçîâàòüñÿ ëþáûì òåêñòîâûì ðåäàêòîðîì, íî òåêñòîâûé ðåäàêòîð ñèñòåìû MAX+PLUS II ïðåäîñòàâëÿåò ðÿä äîïîëíèòåëüíûõ âîçìîæíîñòåé äëÿ ââîäà, êîìïèëÿöèè è îòëàäêè ïðîåêòîâ (ñì. ãëàâó 2). Ïðîåêòû, ñîçäàííûå íà ÿçûêå AHDL, ëåãêî âíåäðÿþòñÿ â èåðàðõè÷åñêóþ ñòðóêòóðó. Ñèñòåìà MAX+PLUS II ïîçâîëÿåò àâòîìàòè÷åñêè ñîçäàòü ñèìâîë êîìïîíåíòà, àëãîðèòì ôóíêöèîíèðîâàíèÿ êîòîðîãî îïèñûâàåòñÿ
167
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL TDF-ôàéëîì, è çàòåì âñòàâèòü åãî â ôàéë ñõåìíîãî îïèñàíèÿ (GDF-ôàéë). Ïîäîáíûì æå îáðàçîì ìîæíî ââîäèòü ñîáñòâåííûå ôóíêöèè ðàçðàáîò÷èêà, ïîìèìî ïîðÿäêà 300 ìàêðîôóíêöèé, ðàçðàáîòàííûõ ôèðìîé «Altera», â ëþáîé TDF-ôàéë. Äëÿ âñåõ ôóíêöèé, âêëþ÷åííûõ â ìàêðîáèáëèîòåêó ñèñòåìû MAX+PLUS II, ôèðìà «Altera» ïîñòàâëÿåò ôàéëû ñ ðàñøèðåíèåì .inc, êîòîðûå èñïîëüçóþòñÿ â îïåðàòîðå âêëþ÷åíèÿ INCLUDE. Ïðè ðàñïðåäåëåíèè ðåñóðñîâ óñòðîéñòâ ðàçðàáîò÷èê ìîæåò ïîëüçîâàòüñÿ êîìàíäàìè òåêñòîâîãî ðåäàêòîðà èëè îïåðàòîðàìè ÿçûêà AHDL äëÿ òîãî, ÷òîáû ñäåëàòü íàçíà÷åíèÿ ðåñóðñîâ è óñòðîéñòâ. Kðîìå òîãî, ðàçðàáîò÷èê ìîæåò òîëüêî ïðîâåðèòü ñèíòàêñèñ èëè âûïîëíèòü ïîëíóþ êîìïèëÿöèþ äëÿ îòëàäêè è çàïóñêà ïðîåêòà. Ëþáûå îøèáêè àâòîìàòè÷åñêè îáíàðóæèâàþòñÿ îáðàáîò÷èêîì ñîîáùåíèé è âûñâå÷èâàþòñÿ â îêíå òåêñòîâîãî ðåäàêòîðà. Ïðè ðàáîòå ñ AHDL ñëåäóåò ñîáëþäàòü òàê íàçûâàåìûå «çîëîòûå ïðàâèëà» (golden rules). Âûïîëíåíèå ýòèõ ïðàâèë ïîçâîëèò ýôôåêòèâíî ïðèìåíÿòü ÿçûê AHDL è èçáåæàòü ìíîãèõ îøèáîê: • Ñîáëþäàéòå ôîðìàòû è ïðàâèëà ïðèñâîåíèÿ èìåí, îïèñàííûå â ðóêîâîäñòâå ïî ñòèëÿì AHDL, ÷òîáû ïðîãðàììà áûëà ÷èòàåìîé è ñîäåðæàëà ìåíüøå îøèáîê. • Íåñìîòðÿ íà òî, ÷òî ÿçûê AHDL íå ðàçëè÷àåò ïðîïèñíûå è ñòðî÷íûå áóêâû, ôèðìà «Altera» ðåêîìåíäóåò äëÿ óëó÷øåíèÿ ÷èòàåìîñòè èñïîëüçîâàòü ïðîïèñíûå áóêâû äëÿ êëþ÷åâûõ ñëîâ. • Íå ïðèìåíÿéòå âëîæåííûå êîíñòðóêöèè óñëîâíîãî îïåðàòîðà IF, åñëè ìîæíî èñïîëüçîâàòü îïåðàòîð âûáîðà CASE. • Ñòðîêà â TDF-ôàéëå ìîæåò áûòü äëèíîé äî 255 ñèìâîëîâ. Îäíàêî ñëåäóåò ñòðåìèòüñÿ ê äëèíå ñòðîêè, óìåùàþùåéñÿ íà ýêðàíå. Ñòðîêè çàêàí÷èâàþòñÿ íàæàòèåì êëàâèøè Enter. • Íîâóþ ñòðîêó ìîæíî íà÷èíàòü â ëþáîì ñâîáîäíîì ìåñòå, ò.å. íà ìåñòàõ ïóñòûõ ñòðîê, òàáóëÿöèé, ïðîáåëîâ. Îñíîâíûå êîíñòðóêöèè ÿçûêà îòäåëÿþòñÿ ïóñòûì ïðîñòðàíñòâîì. • Këþ÷åâûå ñëîâà, èìåíà è ÷èñëà äîëæíû ðàçäåëÿòüñÿ ñîîòâåòñòâóþùèìè ñèìâîëàìè èëè îïåðàòîðàìè è/èëè îäíèì èëè áîëåå ïðîáåëàìè. • Kîììåíòàðèè äîëæíû áûòü çàêëþ÷åíû â ñèìâîëû ïðîöåíòà (%). Kîììåíòàðèé ìîæåò âêëþ÷àòü ëþáîé ñèìâîë, êðîìå ñèìâîëà %, ïîñêîëüêó êîìïèëÿòîð ñèñòåìû MAX+PLUS II èãíîðèðóåò âñå, çàêëþ÷åííîå â ñèìâîëû ïðîöåíòà. Kîììåíòàðèè íå ìîãóò áûòü âëîæåííûìè. • Ïðè ñîåäèíåíèè îäíîãî ïðèìèòèâà ñ äðóãèì èñïîëüçóéòå òîëüêî «ðàç-
168
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
•
•
•
•
•
•
• •
ðåøåííûå» ñâÿçè ìåæäó íèìè, íå âñå ïðèìèòèâû ìîãóò ñîåäèíÿòüñÿ äðóã ñ äðóãîì. Èñïîëüçóéòå òîëüêî ìàêðîôóíêöèè EXPDFF, EXPLATCH, NANDLTCH è NORLTCH, âõîäÿùèå â ìàêðîáèáëèîòåêó ñèñòåìû MAX+PLUS II. Íå ñîçäàâàéòå ñâîè ñîáñòâåííûå ñòðóêòóðû ïåðåêðåñòíûõ ñâÿçåé. Èçáåãàéòå ìíîãîêðàòíîãî ñâÿçûâàíèÿ âìåñòå EXPDFF, EXPLATCH, NANDLTCH è NORLTCH. Ìíîãî÷èñëåííûå ïðèìåðû ýòèõ ìàêðîôóíêöèé äîëæíû âñåãäà ðàçäåëÿòüñÿ ïðèìèòèâàìè LCELL. Îáùèå «çîëîòûå ïðàâèëà» ââîäà ïðîåêòà: Åñëè ìíîãî÷èñëåííûå äâóíàïðàâëåííûå èëè âûõîäíûå âûâîäû ñâÿçàíû âìåñòå, ðàçðàáîò÷èê íå ìîæåò èñïîëüçîâàòü îïåðàòîð Pin Connection äëÿ ñîåäèíåíèÿ âûâîäîâ ïðè ôóíêöèîíàëüíîì ìîäåëèðîâàíèè ñ àïïàðàòíîé ïîääåðæêîé èëè ôóíêöèîíàëüíîì òåñòèðîâàíèè. Íåò íåîáõîäèìîñòè ñîçäàâàòü ïðîòîòèïû ôóíêöèé äëÿ ïðèìèòèâîâ. Îäíàêî ðàçðàáîò÷èê ìîæåò ïåðåîïðåäåëèòü ïðèìèòèâû â îáúÿâëåíèÿõ ïðîòîòèïîâ ôóíêöèé äëÿ èçìåíåíèÿ ïîðÿäêà âûçîâà âõîäîâ â âàøåì TDF-ôàéëå. Íå ðåäàêòèðóéòå ôàéë FIT. Åñëè ðàçðàáîò÷èê æåëàåò îòðåäàêòèðîâàòü íàçíà÷åíèÿ äëÿ ïðîåêòà, íåîáõîäèìî ñîõðàíèòü ñíà÷àëà ôàéë FIT êàê TDF-ôàéë èëè ñäåëàòü îáðàòíîå íàçíà÷åíèå ñ ïîìîùüþ êîìàíäû Project Back-Annotate è îòðåäàêòèðîâàòü èõ ñ ïîìîùüþ êîìàíä Chip to Device, Pin/LC/Chip è Enter Assignments. Åñëè ðàçðàáîò÷èê õî÷åò çàãðóçèòü ðåãèñòð ïî îïðåäåëåííîìó ôðîíòó ãëîáàëüíîãî òàêòîâîãî ñèãíàëà Clock, ôèðìà «Altera» ðåêîìåíäóåò, êîãäà ðåãèñòð çàãðóæåí, èñïîëüçîâàòü äëÿ óïðàâëåíèÿ âõîä Clock Enable îäíîãî èç òðèããåðîâ òèïà Enable: DFFE, TFFE, JKFFE èëè SRFFE; Kîãäà ðàçðàáîò÷èê íà÷èíàåò ðàáîòàòü ñ íîâûì ôàéëîì ïðîåêòà, ñðàçó æå íåîáõîäèìî çàäàòü ñåìåéñòâî ÏËÈÑ, íà êîòîðîå îðèåíòèðîâàí ïðîåêò, ñ ïîìîùüþ êîíñòðóêöèè Family äëÿ òîãî, ÷òîáû â äàëüíåéøåì èìåòü âîçìîæíîñòü âîñïîëüçîâàòüñÿ ìàêðîôóíêöèÿìè, ñïåöèôè÷íûìè äëÿ äàííîãî ñåìåéñòâà. Åñëè ðàçðàáîò÷èê íå çàäàñò ñåìåéñòâî, îíî áóäåò ñ÷èòàòüñÿ òàêèì æå, êàê è â òåêóùåì ïðîåêòå. Èñïîëüçóéòå îïöèþ Design Doctor äëÿ ïðîâåðêè íàäåæíîñòè ëîãèêè ïðîåêòà âî âðåìÿ êîìïèëÿöèè. Ïðåäîñòàâëÿåìûå ïî óìîë÷àíèþ ôèðìîé «Altera» ñòèëè äëÿ ëîãè÷åñêîãî ñèíòåçà èìåþò ðàçíûå óñòàíîâêè äëÿ ðàçíûõ ñåìåéñòâ óñòðîéñòâ, ÷òî îáåñïå÷èâàåò áîëåå ýôôåêòèâíîå èñïîëüçîâàíèå àðõèòåêòóðû êàæ-
169
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
•
•
• • •
•
äîãî óñòðîéñòâà. Kîãäà ðàçðàáîò÷èê èñïîëüçóåò êàêîé-íèáóäü èç ýòèõ ñòèëåé, åãî óñòàíîâêè èçìåíÿòñÿ ïðè ïåðåõîäå ê äðóãîìó ñåìåéñòâó óñòðîéñòâ. Ïîñëå ñìåíû ñåìåéñòâà íåîáõîäèìî ïðîâåðèòü íîâûå óñòàíîâêè ñòèëÿ. Îáùèå «çîëîòûå ïðàâèëà» ñèñòåìû MAX+PLUS II:  íà÷àëå ðàáîòû íàä íîâûì ïðîåêòîì ðåêîìåíäóåòñÿ ñðàçó æå çàäàòü åãî èìÿ êàê èìÿ íîâîãî ïðîåêòà ñ ïîìîùüþ ìåíþ Project Name äëÿ òîãî, ÷òîáû â äàëüíåéøåì åãî áûëî ëåãêî êîìïèëèðîâàòü. Ïîçæå ðàçðàáîò÷èê âñåãäà ìîæåò èçìåíèòü èìÿ ïðîåêòà. Èñïîëüçóéòå èåðàðõè÷åñêèå âîçìîæíîñòè ñèñòåìû MAX+PLUS II äëÿ ïåðåìåùåíèÿ ìåæäó ôàéëàìè ïðîåêòà. Äëÿ îòêðûòèÿ ôàéëà íèæíåãî óðîâíÿ èåðàðõèè îòêðîéòå ôàéë âåðõíåãî óðîâíÿ, çàòåì èñïîëüçóéòå îêíî Hierarchy Display èëè Hierarchy Down è îòêðîéòå ôàéë áîëåå íèçêîãî óðîâíÿ. Åñëè ðàçðàáîò÷èê âûáèðàåò Open èëè Retrieve äëÿ îòêðûòèÿ ôàéëà íèæíåãî óðîâíÿ, ñ÷èòàåòñÿ, ÷òî îí ÿâëÿåòñÿ ôàéëîì âåðõíåãî óðîâíÿ íîâîãî äåðåâà, è âñå íàçíà÷åíèÿ ðåñóðñîâ, óñòðîéñòâ è çîíäîâ ñîõðàíÿþòñÿ òîëüêî äëÿ ýòîé íîâîé èåðàðõèè, à íå äëÿ òåêóùåãî ïðîåêòà. Åñëè ðàçðàáîò÷èê ñîçäàåò âñïîìîãàòåëüíûé ôàéë äëÿ êàêîãî-íèáóäü ïðîåêòà, ïèêòîãðàììà ýòîãî ôàéëà ïîÿâèòñÿ â îêíå Hierarchy Display â òîì ñëó÷àå, åñëè èñïîëüçóåòñÿ òî æå èìÿ, ÷òî è äëÿ ïðîåêòà. Íå ðåêîìåíäóåòñÿ ðåäàêòèðîâàòü ñèñòåìíûå ôàéëû MAX+PLUS II, â òîì ÷èñëå ôàéëû ñ ðàñøèðåíèåì .prb, ôàéëû HIF èëè maxplus2.ini ëèáî ôàéëû .ini. Åñëè ðàçðàáîò÷èê æåëàåò ïåðåèìåíîâàòü ôàéë ïðîåêòà èëè âñïîìîãàòåëüíûé ôàéë, ñëåäóåò èñïîëüçîâàòü êîìàíäó Save As... Íå ðåêîìåíäóåòñÿ ïåðåèìåíîâûâàòü ôàéëû ïðîåêòà âíå ñðåäû MAX+PLUS II (íàïðèìåð èç MS-DOS èëè Windows File Manager). Ïîñëå çàâåðøåíèÿ ïðîåêòà ðåêîìåíäóåòñÿ âûïîëíèòü êîìàíäó àðõèâèðîâàíèÿ ïðîåêòà Project Archive äëÿ ñîçäàíèÿ ðåçåðâíîé êîïèè âñåãî ïðîåêòà (âñåõ åãî ôàéëîâ). Íà àðõèâèðîâàííóþ êîïèþ íå ïîâëèÿþò íèêàêèå ïîñëåäóþùèå ðåäàêòèðîâàíèÿ.
170
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.2. Èñïîëüçîâàíèå ÷èñåë è êîíñòàíò â ÿçûêå AHDL 3.2.1. Èñïîëüçîâàíèå ÷èñåë ×èñëà èñïîëüçóþòñÿ äëÿ ïðåäñòàâëåíèÿ êîíñòàíò â áóëåâûõ âûðàæåíèÿõ è óðàâíåíèÿõ. ßçûê AHDL ïîääåðæèâàåò âñå êîìáèíàöèè äåñÿòè÷íûõ, äâîè÷íûõ, âîñüìåðè÷íûõ è øåñòíàäöàòåðè÷íûõ ÷èñåë. Íèæå ïðèâåäåí ôàéë decode1.tdf, êîòîðûé ïðåäñòàâëÿåò ñîáîé äåøèôðàòîð àäðåñà, ãåíåðèðóþùèé âûñîêèé àêòèâíûé óðîâåíü ñèãíàëà ðàçðåøåíèÿ äîñòóïà ê øèíå, åñëè àäðåñ ðàâåí øåñòíàäöàòåðè÷íîìó ÷èñëó 370h. SUBDESIGN decode1 ( address[15..0] : INPUT; chip_enable : OUTPUT; ) BEGIN chip_enable = (address[15..0] == H"0370"); END;  ýòîì ïðèìåðå äåñÿòè÷íûå ÷èñëà èñïîëüçîâàíû äëÿ óêàçàíèÿ ðàçìåðíîñòè ìàññèâà áèò, êîòîðûì çàïèñûâàåòñÿ àäðåñ øèíû. Øåñòíàäöàòåðè÷íûì ÷èñëîì H"0370" çàïèñàíî çíà÷åíèå àäðåñà, ïðè êîòîðîì îáåñïå÷èâàåòñÿ âûñîêèé óðîâåíü ñèãíàëà.
3.2.2. Èñïîëüçîâàíèå êîíñòàíò  ôàéëå AHDL ìîæíî èñïîëüçîâàòü êîíñòàíòû äëÿ îïèñàòåëüíûõ èìåí ðàçíûõ ÷èñåë. Òàêîå èìÿ, èñïîëüçóåìîå íà ïðîòÿæåíèè âñåãî ôàéëà, ìîæåò áûòü áîëåå èíôîðìàòèâíûì, ÷åì ÷èñëî; íàïðèìåð èìÿ UPPER_LI íåñåò áîëüøå èíôîðìàöèè, ÷åì ÷èñëî 103.  ÿçûêå AHDL êîíñòàíòû ââîäÿòñÿ îáúÿâëåíèåì CONSTANT. Ïðèâåäåííûé âûøå ôàéë ìîæíî çàïèñàòü ïîäðóãîìó, èñïîëüçóÿ âìåñòî ÷èñëà H"0370" êîíñòàíòó IO_ADDRESS. CONSTANT IO_ADDRESS = H"0370"; SUBDESIGN decode2 (
171
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL a[15..0] : INPUT; ce : OUTPUT; ) BEGIN ce = (a[15..0] == IO_ADDRESS); END; Ïðåèìóùåñòâî èñïîëüçîâàíèÿ êîíñòàíò îñîáåííî çàìåòíî, åñëè îäíî è òî æå ÷èñëî èñïîëüçóåòñÿ â ôàéëå íåñêîëüêî ðàç. Òîãäà, åñëè åãî íóæíî èçìåíèòü, ìåíÿþò åãî òîëüêî îäèí ðàç â îáúÿâëåíèè êîíñòàíòû.
3.3. Kîìáèíàöèîííàÿ ëîãèêà Kàê èçâåñòíî, ëîãè÷åñêàÿ ñõåìà íàçûâàåòñÿ êîìáèíàöèîííîé, åñëè â çàäàííûé ìîìåíò âðåìåíè âûõîäû ÿâëÿþòñÿ òîëüêî ôóíêöèÿìè âõîäîâ â ýòîò ìîìåíò âðåìåíè. Kîìáèíàöèîííàÿ ëîãèêà â ÿçûêå AHDL ðåàëèçîâàíà áóëåâûìè âûðàæåíèÿìè è óðàâíåíèÿìè, òàáëèöàìè èñòèííîñòè è áîëüøèì êîëè÷åñòâîì ìàêðîôóíêöèé.  ÷èñëî ïðèìåðîâ êîìáèíàòîðíûõ ëîãè÷åñêèõ ôóíêöèé âõîäÿò äåøèôðàòîðû, ìóëüòèïëåêñîðû è ñóììàòîðû.
3.3.1. Ðåàëèçàöèÿ áóëåâûõ âûðàæåíèé è óðàâíåíèé Áóëåâû âûðàæåíèÿ ýòî ìíîæåñòâî óçëîâ, ÷èñåë, êîíñòàíò è äðóãèõ áóëåâûõ âûðàæåíèé, âûäåëÿåìûõ îïåðàòîðàìè, êîìïàðàòîðàìè, è, âîçìîæíî, ñãðóïïèðîâàííûå â çàêëþ÷àþùèõ êðóãëûõ ñêîáêàõ. Áóëåâî óðàâíåíèå óñòàíàâëèâàåò ðàâåíñòâî ìåæäó óçëîì èëè ãðóïïîé è áóëåâûì âûðàæåíèåì.  êà÷åñòâå ïðèìåðà ïðèâåäåí ôàéë boole1.tdf, â êîòîðîì äàíû äâà ïðîñòûõ áóëåâûõ âûðàæåíèÿ, ïðåäñòàâëÿþùèå äâà ëîãè÷åñêèõ ýëåìåíòà. SUBDESIGN boole1 ( a0, a1, b : INPUT; out1, out2 : OUTPUT; ) BEGIN out1 = a1 & !a0; out2 = out1 # b; END;
172
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Çäåñü âûõîä out1 ïîëó÷àåòñÿ â ðåçóëüòàòå ëîãè÷åñêîé îïåðàöèè «È», ïðèìåíåííîé êî âõîäó à1 è èíâåðòèðîâàííîìó âõîäó à0, à âûõîä out2 â ðåçóëüòàòå ïðèìåíåíèÿ ëîãè÷åñêîé îïåðàöèè «ÈËÈ» ê âûõîäó out1 è âõîäó b. Ïîñêîëüêó ýòè óðàâíåíèÿ îáðàáàòûâàþòñÿ îäíîâðåìåííî, ïîñëåäîâàòåëüíîñòü èõ ñëåäîâàíèÿ â ôàéëå íå âàæíà.
3.3.2. Îáúÿâëåíèå NODE (óçåë) Óçåë, êîòîðûé îáúÿâëÿåòñÿ â ñåêöèè ïåðåìåííûõ VARIABLE â îáúÿâëåíèè NODE, ìîæíî èñïîëüçîâàòü äëÿ õðàíåíèÿ ïðîìåæóòî÷íûõ âûðàæåíèé. Ýòî ïîëåçíî äåëàòü, åñëè áóëåâî âûðàæåíèå ïîâòîðÿåòñÿ íåñêîëüêî ðàç è åãî öåëåñîîáðàçíî çàìåíèòü èìåíåì óçëà. Ïðèâåäåííûé âûøå ôàéë boole1.tdf ìîæíî ïåðåïèñàòü ïî-äðóãîìó: SUBDESIGN boole2 ( a0, a1, b : INPUT; out : OUTPUT; ) VARIABLE a_equals_2 : NODE; BEGIN a_equals_2 = a1 & !a0; out = a_equals_2 # b; END; Çäåñü îáúÿâëÿåòñÿ óçåë a_equals_2, è åìó ïðèñâàèâàåòñÿ çíà÷åíèå âûðàæåíèÿ a1 & !a0. Èñïîëüçîâàíèå óçëîâ ïîìîãàåò ýêîíîìèòü ðåñóðñû óñòðîéñòâ, åñëè óçåë èñïîëüçóåòñÿ â íåñêîëüêèõ âûðàæåíèÿõ.
3.3.3. Îïðåäåëåíèå ãðóïï Ãðóïïà ìîæåò âêëþ÷àòü â ñåáÿ äî 256 ýëåìåíòîâ (áèò), ðàññìàòðèâàåòñÿ êàê ñîâîêóïíîñòü óçëîâ è ó÷àñòâóåò â ðàçëè÷íûõ äåéñòâèÿõ êàê åäèíîå öåëîå.  áóëåâûõ óðàâíåíèÿõ ãðóïïà ìîæåò áûòü ïðèðàâíåíà áóëåâîìó âûðàæåíèþ, äðóãîé ãðóïïå, îäíîìó óçëó, VCC, GND, 1 èëè 0.  êàæäîì ñëó÷àå çíà÷åíèÿ ãðóïïû ðàçíûå. Åñëè ãðóïïà îïðåäåëåíà, äëÿ êðàòêîãî óêàçàíèÿ âñåãî äèàïàçîíà ñòàâÿò äâå êâàäðàòíûå ñêîáêè [ ]. Íàïðèìåð, ãðóïïó à[4..1] ìîæíî êðàòêî çàïèñàòü êàê à[ ].
173
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Ïðèìåðû îïðåäåëåíèÿ ãðóïï:
• Ïðè ïðèðàâíèâàíèè äâóõ ãðóïï îáå äîëæíû èìåòü îäèíàêîâîå ÷èñëî
•
•
•
áèò.  ïðèâîäèìîì íèæå ïðèìåðå êàæäûé áèò ïåðâîé ãðóïïû ñîåäèíÿåòñÿ ñ ñîîòâåòñòâóþùèì áèòîì âòîðîé ãðóïïû, à èìåííî d2 ñîåäèíÿåòñÿ ñ q8, d1 ñ q7 è d0 ñ q6: d[2..0] = q[8..6] Ïðè ïðèðàâíèâàíèè ãðóïïû îäíîìó óçëó âñå áèòû ãðóïïû ïðèñîåäèíÿþòñÿ ê óçëó.  ïðèâîäèìîì íèæå ïðèìåðå d1, d2 è d0 ïðèñîåäèíÿþòñÿ âñå âìåñòå ê n: d[2..0] = n Ïðè ïðèðàâíèâàíèè ãðóïïû çíà÷åíèþ VCC èëè GND âñå áèòû ãðóïïû ïðèñîåäèíÿþòñÿ ê ýòîìó çíà÷åíèþ.  ïðèâîäèìîì íèæå ïðèìåðå d1, d2 è d0 ïðèñîåäèíÿþòñÿ âñå âìåñòå ê VCC: d[2..0] = VCC Ïðè ïðèðàâíèâàíèè ãðóïïû ê 1 ìëàäøèé áèò ãðóïïû ïðèñîåäèíÿåòñÿ ê VCC, à âñå äðóãèå áèòû ê çíà÷åíèþ GND.  ïðèâîäèìîì íèæå ïðèìåðå òîëüêî d0 ïðèñîåäèíÿåòñÿ ê VCC, çíà÷åíèå 1 ðàñøèðÿåòñÿ äî ïðåäñòàâëåíèÿ B"001". d[2..0] = 1
3.3.4. Ðåàëèçàöèÿ óñëîâíîé ëîãèêè Óñëîâíàÿ ëîãèêà äåëàåò âûáîð ìåæäó ðåæèìàìè â çàâèñèìîñòè îò ëîãè÷åñêèõ âõîäîâ. Äëÿ ðåàëèçàöèè óñëîâíîé ëîãèêè èñïîëüçóþòñÿ îïåðàòîðû IF èëè CASE.  îïåðàòîðå IF îöåíèâàþòñÿ îäíî èëè íåñêîëüêî áóëåâûõ âûðàæåíèé, è çàòåì îïèñûâàþòñÿ ðåæèìû äëÿ ðàçíûõ çíà÷åíèé ýòèõ âûðàæåíèé.  îïåðàòîðå CASE äàåòñÿ ñïèñîê àëüòåðíàòèâ, êîòîðûå èìåþòñÿ äëÿ êàæäîãî âîçìîæíîãî çíà÷åíèÿ íåêîòîðîãî âûðàæåíèÿ. Îïåðàòîð îöåíèâàåò çíà÷åíèå âûðàæåíèÿ è ïî íåìó âûáèðàåò ðåæèì â ñîîòâåòñòâèè ñî ñïèñêîì. 3.3.4.1. Ëîãèêà îïåðàòîðà IF  êà÷åñòâå ïðèìåðà ðàññìîòðèì ôàéë priority.tdf, â êîòîðîì îïèñàí êîäèðîâùèê ïðèîðèòåòà, êîòîðûé ïðåîáðàçóåò óðîâåíü ñàìîãî ïðèîðèòåòíîãî àêòèâíîãî âõîäà â çíà÷åíèå. Îí ãåíåðèðóåò äâóõðàçðÿäíûé êîä, ïîêàçûâàþùèé âõîä ñ íàèâûñøèì ïðèîðèòåòîì, çàïóñêàåìûé VCC.
174
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL SUBDESIGN priority ( low, middle, high : INPUT; highest_level[1..0] : OUTPUT; ) BEGIN IF high THEN highest_level[] ELSIF middle THEN highest_level[] ELSIF low THEN highest_level[] ELSE highest_level[] END IF; END;
= 3; = 2; = 1; = 0;
Çäåñü îöåíèâàþòñÿ âõîäû low, middle è high, ÷òîáû îïðåäåëèòü, çàïóùåíû ëè îíè VCC. Íà âûõîäå ïîëó÷èòñÿ êîä, ñîîòâåòñòâóþùèé ïðèîðèòåòó òîãî âõîäà, êîòîðûé áûë çàïóùåí VCC. Åñëè íè îäèí âõîä íå çàïóùåí, çíà÷åíèå êîäà ñòàíåò 0. 3.3.4.2. Ëîãèêà îïåðàòîðà CASE  êà÷åñòâå ïðèìåðà ðàññìîòðèì ôàéë decoder.tdf, ðåàëèçóþùèé ôóíêöèè äåøèôðàòîðà, ïðåîáðàçóþùåãî êîä èç äâóõðàçðÿäíîãî â ÷åòûðåõðàçðÿäíûé.  ðåçóëüòàòå åãî ðàáîòû äâà äâóõðàçðÿäíûõ äâîè÷íûõ âõîäà ïðåîáðàçóþòñÿ â îäèí «ãîðÿ÷èé êîä», êîòîðûé òàê íàçûâàåòñÿ ïîòîìó, ÷òî ÷åòûðå åãî äîïóñòèìûõ çíà÷åíèÿ ñîäåðæàò ïî îäíîé åäèíèöå: 0001, 0010, 0100, 1000. SUBDESIGN decoder ( code[1..0] : INPUT; out[3..0] : OUTPUT; ) BEGIN
175
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
WHEN WHEN WHEN WHEN
0 1 2 3
=> => => =>
CASE code[] IS out[] = B"0001"; out[] = B"0010"; out[] = B"0100"; out[] = B"1000"; END CASE;
END; Çäåñü ãðóïïà âõîäà code [1..2] ìîæåò ïðèíèìàòü çíà÷åíèÿ 0, 1, 2, 3.  çàâèñèìîñòè îò ðåàëüíîãî êîäà àêòèâèçèðóåòñÿ ñîîòâåòñòâóþùàÿ âåòâü îïåðàòîðà, è òîëüêî îíà îäíà â äàííûé ìîìåíò âðåìåíè. Íàïðèìåð, åñëè íà âõîäå code [ ] ðàâåí 1, íà âûõîäå out óñòàíàâëèâàåòñÿ çíà÷åíèå Â"0010". 3.3.4.3. Ñðàâíåíèå îïåðàòîðîâ IF è CASE Îïåðàòîðû IF è CASE ïîõîæè. Èíîãäà èñïîëüçîâàíèå ëþáîãî èç íèõ ïðèâîäèò ê îäíèì è òåì æå ðåçóëüòàòàì: IF THEN
CASE
IF a[] == 0 THEN y = c & d;
CASE a[] IS WHEN 0 => y = c & d; WHEN 1 => y = e & f; WHEN 2 => y = g & h; WHEN 3 => y = i; WHEN OTHERS => y = GND; END CASE;
ELSIF a[] == 1 THEN y = e & f; ELSIF a[] == 2 THEN y = g & h; ELSIF a[] == 3 THEN y = i; ELSE y = GND; END IF;
Îäíàêî ìåæäó ýòèìè äâóìÿ îïåðàòîðàìè ñóùåñòâóþò íåñêîëüêî âàæíûõ ðàçëè÷èé: •  îïåðàòîðå IF ìîæíî èñïîëüçîâàòü ëþáîå áóëåâî âûðàæåíèå. Kàæäîå âûðàæåíèå, çàïèñûâàåìîå â ïðåäëîæåíèè, ñëåäóþùåì çà IF èëè ELSEIF, ìîæåò íå áûòü ñâÿçàííûì ñ äðóãèìè âûðàæåíèÿìè â îïåðàòîðå.  îïåðàòîðå CASE îäíî-åäèíñòâåííîå âûðàæåíèå ñðàâíèâàåòñÿ ñ ïðîâåðÿåìûì çíà÷åíèåì.
176
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
• Â ðåçóëüòàòå èíòåðïðåòàöèè îïåðàòîðà IF ìîæåò áûòü ñãåíåðèðîâàíà ëîãèêà, ñëèøêîì ñëîæíàÿ äëÿ êîìïèëÿòîðà ñèñòåìû MAX+PLUS II. Â ïðèâåäåííîì íèæå ïðèìåðå ïîêàçàíî, êàê êîìïèëÿòîð èíòåðïðåòèðóåò îïåðàòîð IF. Åñëè à è b ñëîæíûå âûðàæåíèÿ, òî èíâåðñèÿ êàæäîãî èç íèõ äàñò åùå áîëåå ñëîæíîå âûðàæåíèå. IF a THEN IF a THEN c = d; c = d; END IF; ELSIF b THEN c = e;
IF !a & b THEN c = e; END IF;
ELSE c = f; END IF;
IF !a & !b THEN c = f; END IF;
3.3.5. Îïèñàíèå äåøèôðàòîðîâ Äåøèôðàòîð ñîäåðæèò êîìáèíàòîðíóþ ëîãèêó, êîòîðàÿ ïðåîáðàçóåò âõîäíûå ñõåìû â âûõîäíûå çíà÷åíèÿ èëè çàäàåò âûõîäíûå çíà÷åíèÿ äëÿ âõîäíûõ ñõåì. Äëÿ ñîçäàíèÿ äåøèôðàòîðà â ÿçûêå AHDL èñïîëüçóåòñÿ îáúÿâëåíèå òàáëèöû èñòèííîñòè TABLE. Íèæå ïðèâåäåí ôàéë 7segment.tdf, ïðåäñòàâëÿþùèé ñîáîé äåøèôðàòîð, êîòîðûé çàäàåò ëîãèêó ñõåìû ñâåòîäèîäîâ. Ñâåòîäèîäû ñâåòÿòñÿ íà ñåìèñåãìåíòíîì äèñïëåå äëÿ èíäèêàöèè øåñòíàäöàòåðè÷íîé öèôðû (îò 0 äî 9 è áóêâû îò A äî F). % % % % % % % %
a % f| |b % g % e| |c % d % % 0 1 2 3 4 5 6 7 8 9 A b C d E F % %
SUBDESIGN 7segment
177
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ( i[3..0] : INPUT; a, b, c, d, e, f, g : OUTPUT; ) BEGIN TABLE i[3..0] => a, b, c, d, e, f, g; H"0" => 1, H"1" => 0, H"2" => 1, H"3" => 1, H"4" => 0, H"5" => 1, H"6" => 1, H"7" => 1, H"8" => 1, H"9" => 1, H"A" => 1, H"B" => 0, H"C" => 1, H"D" => 0, H"E" => 1, H"F" => 1, END TABLE; END;
1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0,
1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,
1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0,
1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1,
0; 0; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 0; 1; 1; 1;
 ýòîì ïðèìåðå ïåðå÷èñëåíû âñå âîçìîæíûå øåñòíàäöàòåðè÷íûå öèôðû (i[3..0]) è ñîîòâåòñòâóþùèå èì ñîñòîÿíèÿ ñâåòîäèîäîâ (a, b, c, d, e, f, g), êîòîðûå îáåñïå÷èâàþò «íà÷åðòàíèå» öèôðû íà äèñïëåå. Èçîáðàæåíèå ñâåòîäèîäîâ íà äèñïëåå äàíî â âèäå êîììåíòàðèÿ ïåðåä ôàéëîì. Íèæå ïðèâåäåí ôàéë äåøèôðàòîðà àäðåñà decode3.tdf äëÿ øåñòíàäöàòèðàçðÿäíîé ìèêðîïðîöåññîðíîé ñèñòåìû. SUBDESIGN decode3 ( addr[15..0], m/io : INPUT; rom, ram, print, sp[2..1] : OUTPUT;
178
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ) BEGIN TABLE m/io, addr[15..0] => rom, 1, B"00XXXXXXXXXXXXXX" => 1, B"100XXXXXXXXXXXXX" => 0, B"0000001010101110" => 0, B"0000001011011110" => 0, B"0000001101110000" => END TABLE; END;
ram, print, sp[]; 1, 0, 0, B"00"; 0, 1, 0, B"00"; 0, 0, 1, B"00"; 0, 0, 0, B"01"; 0, 0, 0, B"10";
 äàííîì ïðèìåðå ñóùåñòâóþò òûñÿ÷è âîçìîæíûõ âàðèàíòîâ âõîäà (àäðåñà), ïîýòîìó áûëî áû íåïðàêòè÷íî ñâîäèòü èõ âñå â òàáëèöó. Âìåñòî ýòîãî ìîæíî ïîìåòèòü ñèìâîëîì Õ íåñóùåñòâåííûå, íå âëèÿþùèå íà âûõîä ðàçðÿäû. Íàïðèìåð, âûõîäíîé ñèãíàë rom (ÏÇÓ) áóäåò âûñîêèì äëÿ âñåõ 16384 âàðèàíòîâ àäðåñà addr[15..0], êîòîðûå íà÷èíàþòñÿ ñ 00. Ïîýòîìó âàì íóæíî òîëüêî óêàçàòü îáùóþ äëÿ âñåõ âàðèàíòîâ ÷àñòü êîäà, ò.å. 00, à â îñòàëüíûõ ðàçðÿäàõ êîäà ïîñòàâèòü Õ. Òàêîé ïðèåì ïîçâîëèò ñäåëàòü ïðîåêò, òðåáóþùèé ìåíüøå óñòðîéñòâ è ðåñóðñîâ. Ïðèâåäåííûé íèæå ïðèìåð decode4.tdf ïîêàçûâàåò èñïîëüçîâàíèå ñòàíäàðòíîé ïàðàìåòðèçèðóåìîé ôóíêöèè lpm_decode â çàäà÷å ðàçðàáîòêè äåøèôðàòîðà, àíàëîãè÷íàÿ ïðèìåðó decode1.tdf. INCLUDE "lpm_decode.inc"; SUBDESIGN decode4 ( address[15..0] : INPUT; chip_enable : OUTPUT; ) BEGIN chip_enable = lpm_decode(.data[]=address[]) WITH (LPM_WIDTH=16, LPM_DECODES=2^10) RETURNS (.eq[H"0370"]); END;
179
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.3.6. Èñïîëüçîâàíèå äëÿ ïåðåìåííûõ çíà÷åíèé ïî óìîë÷àíèþ Ìîæíî îïðåäåëèòü çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ óçëà èëè ãðóïïû, êîòîðûå áóäóò àâòîìàòè÷åñêè èñïîëüçîâàòüñÿ äëÿ íèõ, åñëè â ôàéëå èõ çíà÷åíèÿ íå áóäóò çàäàíû. ßçûê AHDL ïîçâîëÿåò ïðèñâàèâàòü çíà÷åíèå óçëó èëè ãðóïïå â ôàéëå íåîäíîêðàòíî. Åñëè ïðè ýòîì ïðîèçîéäåò êîíôëèêò, ñèñòåìà àâòîìàòè÷åñêè áóäåò èñïîëüçîâàòü çíà÷åíèÿ ïî óìîë÷àíèþ. Åñëè çíà÷åíèÿ ïî óìîë÷àíèþ íå áûëè çàäàíû, èñïîëüçóåòñÿ çíà÷åíèå GND. Îáúÿâëåíèå çíà÷åíèé ïî óìîë÷àíèþ DEFAULTS ìîæíî èñïîëüçîâàòü äëÿ çàäàíèÿ ïåðåìåííûõ â òàáëèöå èñòèííîñòè, îïåðàòîðàõ IF è CASE. Ïðèìå÷àíèå. Íå ñëåäóåò ïóòàòü çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ ïåðåìåííûõ ñî çíà÷åíèÿìè ïî óìîë÷àíèþ äëÿ ïîðòîâ, êîòîðûå çàäàþòñÿ â ñåêöèè SUBDESIGN. Íèæå ïðèâîäèòñÿ ôàéë default1.tdf, â êîòîðîì ïðîèñõîäèò îöåíêà âõîäîâ è âûáîð ñîîòâåòñòâóþùåãî ASCII êîäà. SUBDESIGN default1 ( i[3..0] : INPUT; ascii_code[7..0] : OUTPUT; ) BEGIN DEFAULTS ascii_code[] = B"00111111";% ASCII question mark"?" % END DEFAULTS; TABLE i[3..0] => ascii_code[]; B"1000" => B"01100001"; % "a" % B"0100" => B"01100010"; % "b" % B"0010" => B"01100011"; % "c" % B"0001" => B"01100100"; % "d" % END TABLE; END; Åñëè çíà÷åíèå âõîäà ñîâïàäàåò ñ îäíèì èç çíà÷åíèé â ëåâîé ÷àñòè òàáëèöû, êîä íà âûõîäå ïðèîáðåòàåò ñîîòâåòñòâóþùåå çíà÷åíèå ASCII êîäà â ïðàâîé ÷àñòè òàáëèöû. Åñëè âõîäíîå çíà÷åíèå íå ñîâïàäàåò íè ñ îäíèì èç (â ëåâîé êîëîíêå) òàáëè÷íûõ, âûõîäó áóäåò ïðèñâîåíî çíà÷åíèå ïî óìîë÷àíèþ B"00111111" (âîïðîñèòåëüíûé çíàê).
180
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL  ïðèâåäåííîì íèæå ôàéëå default2.tdf ïîêàçàíî, êàê ïðè ìíîãîêðàòíîì ïðèñâàèâàíèè óçëó ðàçíûõ çíà÷åíèé âîçíèêàåò êîíôëèêò è êàê îí ðàçðåøàåòñÿ ñðåäñòâàìè AHDL. SUBDESIGN default2 ( a, b, c : INPUT; select_a, select_b, select_c : INPUT; wire_or, wire_and : OUTPUT; ) BEGIN DEFAULTS wire_or = GND; wire_and = VCC; END DEFAULTS; IF select_a THEN wire_or = a; wire_and = a; END IF; IF select_b THEN wire_or = b; wire_and = b; END IF; IF select_c THEN wire_or = c; wire_and = c; END IF; END;  äàííîì ïðèìåðå âûõîä wire_or óñòàíàâëèâàåòñÿ ðàâíûì a, b èëè ñ â çàâèñèìîñòè îò âõîäíûõ ñèãíàëîâ select_a, select_b è select_c. Åñëè íè îäèí èç íèõ íå ðàâåí VCC, òî âûõîä wire_or ïðèíèìàåò çíà÷åíèå ïî óìîë÷àíèþ, ðàâíîå GND. Åñëè áîëåå îäíîãî ñèãíàëà (select_a, select_b èëè select_c) ðàâíû VCC, òî wire_or ðàâíî ðåçóëüòàòó ëîãè÷åñêîé îïåðàöèè «ÈËÈ» íàä ñîîòâåòñòâóþùèìè âõîäíûìè ñèãíàëàìè. Íàïðèìåð, åñëè select_a è select_b ðàâíû VCC, òî wire_or ðàâíî a èëè b. Ñ ñèãíàëîì wire_and ïðîèçâîäÿòñÿ àíàëîãè÷íûå äåéñòâèÿ, íî îí ñòàíîâèòñÿ ðàâíûì VCC, êîãäà âõîäíûå ñèãíàëû select ðàâíû VCC, è ðàâåí ëî-
181
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ãè÷åñêîìó «È» îò ñîîòâåòñòâóþùèõ âõîäíûõ ñèãíàëîâ, åñëè áîëåå ÷åì îäèí èç íèõ ðàâåí VCC.
3.3.7. Ðåàëèçàöèÿ ëîãèêè ñ àêòèâíûì íèçêèì óðîâíåì Çíà÷åíèå ñèãíàëà ñ íèçêèì àêòèâíûì óðîâíåì ðàâíî GND. Ñèãíàëû ñ íèçêèì àêòèâíûì óðîâíåì ìîãóò áûòü èñïîëüçîâàíû äëÿ óïðàâëåíèÿ ïàìÿòüþ, ïåðèôåðèéíûìè óñòðîéñòâàìè è ìèêðîïðîöåññîðíûìè ÷èïàìè. Íèæå ïðèâîäèòñÿ ôàéë daisy.tdf, êîòîðûé ïðåäñòàâëÿåò ìîäóëü àðáèòðàæíîé ñõåìû äëÿ ñîåäèíåíèÿ «ãèðëÿíäîé» (daisy chain). Äàííûé ìîäóëü äåëàåò çàïðîñ íà äîñòóï ê øèíå äëÿ ïðåäûäóùåãî (â «ãèðëÿíäå») ìîäóëÿ. Îí ïîëó÷àåò çàïðîñ íà äîñòóï ê øèíå îò ñàìîãî ñåáÿ è îò ñëåäóþùåãî (â öåïî÷êå) ìîäóëÿ. Äîñòóï ê øèíå ïðåäîñòàâëÿåòñÿ òîìó ìîäóëþ, ó êîòîðîãî ïðèîðèòåò âûøå. SUBDESIGN daisy ( /local_request : INPUT; /local_grant : OUTPUT; /request_in : INPUT; % from lower priority % /request_out : OUTPUT; % to higher priority % /grant_in : INPUT; % from higher priority % /grant_out : OUTPUT; % to lower priority % ) BEGIN DEFAULTS /local_grant = VCC; % activelow output % /request_out = VCC; % signals should default % /grant_out = VCC; % to VCC % END DEFAULTS; IF /request_in == GND # /local_request == GND THEN /request_out = GND; END IF; IF /grant_in == GND THEN IF /local_request == GND THEN /local_grant = GND; ELSIF /request_in == GND THEN /grant_out = GND;
182
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL END IF; END IF; END; Âñå ñèãíàëû â äàííîì ôàéëå èìåþò àêòèâíûé íèçêèé óðîâåíü. Ôèðìà «Altera» ðåêîìåíäóåò ïîìå÷àòü êàê-ëèáî èìåíà ñèãíàëîâ ñ íèçêèì àêòèâíûì óðîâíåì, íàïðèìåð ïåðâûì ñèìâîëîì â èìåíè ñòàâèòü ñèìâîë /, êîòîðûé íå ÿâëÿåòñÿ îïåðàòîðîì, è èñïîëüçîâàòü åãî ïîñòîÿííî.  îïåðàòîðå IF ïðîâåðÿåòñÿ, ÿâëÿåòñÿ ëè ìîäóëü àêòèâíûì, ò.å. ðàâåí ëè îí GND. Åñëè ìîäóëü îêàçûâàåòñÿ àêòèâíûì, ðåàëèçóþòñÿ äåéñòâèÿ, çàïèñàííûå â îïåðàòîðå IF.  îáúÿâëåíèè ïî óìîë÷àíèþ DEFAULTS ñ÷èòàåòñÿ, ÷òî ñèãíàëó ïðèñâàèâàåòñÿ çíà÷åíèå VCC, åñëè îí íåàêòèâåí.
3.3.8. Ðåàëèçàöèÿ äâóíàïðàâëåííûõ âûâîäîâ Ñèñòåìà MAX+PLUS II ïîçâîëÿåò êîíôèãóðèðîâàòü ïîðòû ââîäà/âûâîäà â óñòðîéñòâàõ «Altera» êàê äâóíàïðàâëåííûå ïîðòû. Äâóíàïðàâëåííûé âûâîä çàäàåòñÿ êàê ïîðò BIDIR, êîòîðûé ïîäñîåäèíÿåòñÿ ê âûõîäó ïðèìèòèâà TRI. Ñèãíàë ìåæäó ýòèì âûâîäîì è áóôåðîì ñ òðåìÿ ñîñòîÿíèÿìè ÿâëÿåòñÿ äâóíàïðàâëåííûì, è åãî ìîæíî èñïîëüçîâàòü â ïðîåêòå äëÿ çàïóñêà äðóãèõ ëîãè÷åñêèõ ñõåì. Ïðèâîäèìûé íèæå ôàéë bus_reg2.tdf ðåàëèçóåò ðåãèñòð, êîòîðûé äåëàåò âûáîðêó çíà÷åíèÿ, íàéäåííîãî íà øèíå ñ òðåìÿ ñîñòîÿíèÿìè, à òàêæå ìîæåò ïåðåäàòü îáðàòíî íà øèíó õðàíèìîå çíà÷åíèå. SUBDESIGN bus_reg2 ( clk : INPUT; oe : INPUT; io : BIDIR; ) BEGIN io = TRI(DFF(io, clk,, ), oe); END; Äâóíàïðàâëåííûé ñèãíàë io, çàïóñêàåìûé ïðèìèòèâîì TRI, èñïîëüçóåòñÿ â êà÷åñòâå âõîäà d äëÿ D-òðèããåðà (DFF). Çàïÿòûå â êîíöå ñïèñêà ïàðàìåòðîâ îòäåëÿþò ìåñòà äëÿ ñèãíàëîâ òðèããåðà clrn è prn. Ýòè ñèãíàëû ïî óìîë÷àíèþ óñòàíîâëåíû â íåàêòèâíîå ñîñòîÿíèå.
183
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Äâóíàïðàâëåííûé âûâîä ìîæíî òàêæå èñïîëüçîâàòü äëÿ ïîäñîåäèíåíèÿ TDF-ôàéëà áîëåå íèçêîãî óðîâíÿ ê âûâîäó ñ âûñîêèì óðîâíåì. Ïðîòîòèï ôóíêöèè äëÿ TDF-ôàéëà áîëåå íèçêîãî óðîâíÿ äîëæåí ñîäåðæàòü äâóíàïðàâëåííûé âûâîä â ïðåäëîæåíèè RETURNS.  ïðèâåäåííîì íèæå ôàéëå bidir1.tdf äàíû ÷åòûðå ïðèìåðà èñïîëüçîâàíèÿ ìàêðîôóíêöèè bus_reg2. FUNCTION bus_reg2 (clk, oe) RETURNS (io); SUBDESIGN bidir1 ( clk, oe : INPUT; io[3..0] : BIDIR; ) BEGIN io0 = bus_reg2(clk, oe); io1 = bus_reg2(clk, oe); io2 = bus_reg2(clk, oe); io3 = bus_reg2(clk, oe); END;
3.4. Ïîñëåäîâàòåëüíîñòíàÿ ëîãèêà Ëîãè÷åñêàÿ ñõåìà íàçûâàåòñÿ ïîñëåäîâàòåëüíîñòíîé, åñëè âûõîäû â çàäàííûé ìîìåíò âðåìåíè ÿâëÿþòñÿ ôóíêöèåé âõîäîâ íå òîëüêî â òîò æå ìîìåíò, íî è âî âñå ïðåäûäóùèå ìîìåíòû âðåìåíè. Òàêèì îáðàçîì, â ïîñëåäîâàòåëüíîñòíóþ ñõåìó äîëæíû âõîäèòü íåêîòîðûå ýëåìåíòû ïàìÿòè (òðèããåðû).  ÿçûêå AHDL ïîñëåäîâàòåëüíîñòíàÿ ëîãèêà ðåàëèçîâàíà öèôðîâûìè àâòîìàòàìè ñ ïàìÿòüþ (state machines), ðåãèñòðàìè è òðèããåðàìè. Ïðè ýòîì ñðåäñòâà îïèñàíèÿ öèôðîâûõ àâòîìàòîâ çàíèìàþò îñîáîå ìåñòî. Kðîìå òîãî, ê ïîñëåäîâàòåëüíîñòíûì ëîãè÷åñêèì ñõåìàì îòíîñÿòñÿ ðàçëè÷íûå ñ÷åò÷èêè è êîíòðîëëåðû.
3.4.1. Îáúÿâëåíèå ðåãèñòðîâ Ðåãèñòðû èñïîëüçóþòñÿ äëÿ õðàíåíèÿ çíà÷åíèé äàííûõ è ïðîìåæóòî÷íûõ ðåçóëüòàòîâ ñ÷åò÷èêà, òàêòèðîâàíèå îñóùåñòâëÿåòñÿ ñèíõðîñèãíàëîì. Ðåãèñòð ñîçäàåòñÿ åãî îáúÿâëåíèåì â ñåêöèè VARIABLE. Äëÿ ïîäñîåäèíåíèÿ ïðèìåðà ïðèìèòèâà, ìàêðîôóíêöèè èëè öèôðîâîãî àâòîìàòà ê äðóãîé ëîãèêå â TDF-ôàéë ìîæíî èñïîëüçîâàòü ïîðòû. Ïîðò ïðèìåðà îïèñûâàåòñÿ â ñëåäóþùåì ôîðìàòå: ..
184
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Èìÿ ïîðòà ýòî âõîä èëè âûõîä ïðèìèòèâà, ìàêðîôóíêöèè èëè öèôðîâîãî àâòîìàòà, ÷òî ÿâëÿåòñÿ ñèíîíèìîì èìåíè âûâîäà â ôàéëàõ ïðîåêòîâ GDF-ôàéë, WDF è äðóãèõ. Íèæå ïðèâîäèòñÿ ôàéë bur_reg.tdf, ñîäåðæàùèé áàéòîâûé ðåãèñòð, êîòîðûé ôèêñèðóåò çíà÷åíèÿ íà âõîäàõ d ïî âûõîäàì q íà ôðîíòå ñèíõðîèìïóëüñà, êîãäà óðîâåíü çàãðóçêè âûñîêèé. SUBDESIGN bur_reg ( clk, load, d[7..0] : INPUT; q[7..0] : OUTPUT; ) VARIABLE ff[7..0] : DFFE; BEGIN ff[].clk = clk; ff[].ena = load; ff[].d = d[]; q[] = ff[].q; END; Kàê âèäíî èç ôàéëà, ðåãèñòð îáúÿâëåí â ñåêöèè VARIABLE êàê Dòðèããåð ñ ðàçðåøåíèåì (DFFE).  ïåðâîì áóëåâîì óðàâíåíèè â ëîãè÷åñêîé ñåêöèè ïðîèñõîäèò ñîåäèíåíèå âõîäà òàêòîâîãî ñèãíàëà ïîäïðîåêòà ê ïîðòàì òàêòîâîãî ñèãíàëà òðèããåðîâ ff [7..0]. Âî âòîðîì óðàâíåíèè îòïèðàþùèé òàêòîâûé ñèãíàë ñîåäèíÿåòñÿ ñ çàãðóçêîé.  òðåòüåì óðàâíåíèè âõîäû äàííûõ ïîäïðîåêòà ñîåäèíÿþòñÿ ñ ïîðòàìè äàííûõ òðèããåðîâ ff [7..0].  ÷åòâåðòîì óðàâíåíèè âûõîäû ïîäïðîåêòà ñîåäèíÿþòñÿ ñ âûõîäàìè òðèããåðîâ. Âñå ÷åòûðå óðàâíåíèÿ îöåíèâàþòñÿ îäíîâðåìåííî. Ìîæíî òàêæå â ñåêöèè VARIABLE îáúÿâèòü T-, JK- è SR-òðèããåðû è çàòåì èñïîëüçîâàòü èõ â ëîãè÷åñêîé ñåêöèè. Ïðè èñïîëüçîâàíèè T-òðèããåðîâ ïðèäåòñÿ â òðåòüåì óðàâíåíèè èçìåíèòü ïîðò d íà t. Ïðè èñïîëüçîâàíèè JKè SR-òðèããåðîâ âìåñòî òðåòüåãî óðàâíåíèÿ ïðèäåòñÿ çàïèñàòü äâà óðàâíåíèÿ, â êîòîðûõ ïðîèñõîäèò ñîåäèíåíèå ïîðòîâ j è k èëè s è r ñ ñèãíàëàìè. Ïðèìå÷àíèå. Ïðè çàãðóçêå ðåãèñòðà ïî çàäàííîìó ôðîíòó ãëîáàëüíîãî òàêòîâîãî ñèãíàëà ôèðìà «Altera» ðåêîìåíäóåò èñïîëüçîâàòü âõîä ðàçðå-
185
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL øåíèÿ îäíîãî èç ðåãèñòðîâ: DFFE, TFFE, JKFFE èëè SRFFE, ÷òîáû êîíòðîëèðîâàòü çàãðóçêó ðåãèñòðà.
3.4.2. Îáúÿâëåíèå ðåãèñòðîâûõ âûõîäîâ Ìîæíî îáúÿâèòü ðåãèñòðîâûå âûõîäû, åñëè îáúÿâèòü âûõîäû ïîäïðîåêòà êàê D-òðèããåðû â ñåêöèè VARIABLE. Ïðèâåäåííûé íèæå ôàéë reg_out.tdf îáåñïå÷èâàåò òå æå ôóíêöèè, ÷òî è ïðåäûäóùèé ôàéë bur_reg.tdf, íî èìååò ðåãèñòðîâûå âûõîäû. SUBDESIGN reg_out ( clk, load, d[7..0] : INPUT; q[7..0] : OUTPUT; ) VARIABLE q[7..0] : DFFE; BEGIN q[].clk = clk; q[].ena = load; q[] = d[]; END; Ïðè ïðèñâîåíèè çíà÷åíèÿ ðåãèñòðîâîìó âûõîäó â ëîãè÷åñêîé ñåêöèè ýòî çíà÷åíèå ôîðìèðóåò âõîäíûå d-ñèãíàëû ðåãèñòðîâ. Âûõîä ðåãèñòðà íå èçìåíÿåòñÿ äî òåõ ïîð, ïîêà íå ïðèäåò ôðîíò ñèíõðîñèãíàëà. Äëÿ îïðåäåëåíèÿ òàêòèðóþùåãî ñèãíàëà ðåãèñòðà íóæíî èñïîëüçîâàòü îïèñàíèå â ñëåäóþùåì ôîðìàòå: .clk äëÿ âõîäà òàêòèðóþùåãî ñèãíàëà ðåãèñòðà â ëîãè÷åñêîé ñåêöèè. Ãëîáàëüíûé ñèíõðîñèãíàë ìîæíî ðåàëèçîâàòü ïðèìèòèâîì GLOBAL èëè âûáîðîì â äèàëîãîâîì îêíå êîìïèëÿòîðà logic synthesis (ëîãè÷åñêèé ñèíòåç) îïöèè Automatic Global Clock. Kàæäûé îòïèðàþùèé D-òðèãåð, îáúÿâëåííûé â ñåêöèè VARIABLE, âîçáóæäàåò âûõîä ñ òàêèì æå èìåíåì, ïîýòîìó ìîæíî îáðàùàòüñÿ ê q-âûõîäàì îáúÿâëåííûõ òðèããåðîâ áåç èñïîëüçîâàíèÿ q-ïîðòà ýòèõ òðèããåðîâ.
3.4.3. Ñîçäàíèå ñ÷åò÷èêîâ Ñ÷åò÷èêàìè íàçûâàþòñÿ ïîñëåäîâàòåëüíîñòíûå ëîãè÷åñêèå ñõåìû äëÿ ñ÷åòà òàêòîâûõ èìïóëüñîâ.  íåêîòîðûõ ñ÷åò÷èêàõ ðåàëèçîâàí ñ÷åò íà ñëîæåíèå è
186
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL âû÷èòàíèå (ðåâåðñèâíûå ñ÷åò÷èêè), â íåêîòîðûå ñ÷åò÷èêè ìîæíî çàãðóæàòü äàííûå, à òàêæå îáíóëÿòü èõ. Ñ÷åò÷èêè îáû÷íî îïðåäåëÿþò êàê D-òðèããåðû (DFF è DFFE) è èñïîëüçóþò îïåðàòîðû IF. Íèæå ïðèâåäåí ôàéë ahdlcnt.tdf, êîòîðûé ðåàëèçóåò 16-ðàçðÿäíûé çàãðóæàåìûé ñ÷åò÷èê ñî ñáðîñîì. SUBDESIGN ahdlcnt ( clk, load, ena, clr, d[15..0] : INPUT; q[15..0] : OUTPUT; ) VARIABLE count[15..0] : DFF; BEGIN count[].clk = clk; count[].clrn = !clr; IF load THEN count[].d = d[]; ELSIF ena THEN count[].d = count[].q + 1; ELSE count[].d = count[].q; END IF; q[] = count[]; END;  äàííîì ôàéëå â ñåêöèè VARIABLE îáúÿâëåíû 16 D-òðèããåðîâ, è èì ïðèñâîåíû èìåíà îò count0 äî count15.  îïåðàòîðå IF îïðåäåëÿåòñÿ çíà÷åíèå, çàãðóæàåìîå â òðèããåðû ïî ôðîíòó ñèíõðîñèãíàëà (íàïðèìåð, åñëè çàãðóçêà çàïóñêàåòñÿ VCC, òî òðèããåðàì ïðèñâàèâàåòñÿ çíà÷åíèå d[ ]).
3.5. Öèôðîâûå àâòîìàòû ñ ïàìÿòüþ (state mashine) Öèôðîâûå àâòîìàòû òàê æå, êàê òàáëèöû èñòèííîñòè è áóëåâû óðàâíåíèÿ, ëåãêî ðåàëèçóþòñÿ â ÿçûêå AHDL. ßçûê ñòðóêòóðèðîâàí, ïîýòîìó ïîëüçîâàòåëü ìîæåò ëèáî ñàì íàçíà÷èòü áèòû è çíà÷åíèÿ ñîñòîÿíèé, ëèáî ïðåäîñòàâèòü ýòó ðàáîòó êîìïèëÿòîðó ñèñòåìû MAX+PLUS II. Kîìïèëÿòîð, ïî óâåðåíèÿì ïðîèçâîäèòåëÿ, «èñïîëüçóåò ïàòåíòîâàííûå ïåðñïåêòèâíûå ýâðèñòè÷åñêèå àëãîðèòìû», ïîçâîëÿþùèå ñäåëàòü òàêèå àâ-
187
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL òîìàòè÷åñêèå íàçíà÷åíèÿ ñîñòîÿíèé, êîòîðûå ìèíèìèçèðóþò ëîãè÷åñêèå ðåñóðñû, íóæíûå äëÿ ðåàëèçàöèè öèôðîâîãî àâòîìàòà. Ïîëüçîâàòåëþ ïðîñòî íóæíî íàðèñîâàòü äèàãðàììó ñîñòîÿíèé è ïîñòðîèòü òàáëèöó ñîñòîÿíèé. Çàòåì êîìïèëÿòîð âûïîëíÿåò àâòîìàòè÷åñêè ñëåäóþùèå ôóíêöèè: íàçíà÷àåò áèòû, âûáèðàÿ äëÿ êàæäîãî áèòà ëèáî T-òðèããåð, ëèáî Dòðèããåð; ïðèñâàèâàåò çíà÷åíèÿ ñîñòîÿíèé; ïðèìåíÿåò ñëîæíûå ìåòîäû ëîãè÷åñêîãî ñèíòåçà äëÿ ïîëó÷åíèÿ óðàâíåíèé âîçáóæäåíèÿ. Ïî æåëàíèþ ïîëüçîâàòåëÿ, ìîæíî çàäàòü â TDF-ôàéëå ïåðåõîäû â ìàøèíå ñîñòîÿíèé ñ ïîìîùüþ îáúÿâëåíèÿ òàáëèöû èñòèííîñòè.  ÿçûêå AHDL äëÿ çàäàíèÿ öèôðîâîãî àâòîìàòà íóæíî âêëþ÷èòü â TDF-ôàéë ñëåäóþùèå ýëåìåíòû: îáúÿâëåíèå öèôðîâîãî àâòîìàòà (â ñåêöèè VARIABLE); áóëåâû óðàâíåíèÿ óïðàâëåíèÿ (â ëîãè÷åñêîé ñåêöèè); ïåðåõîäû ìåæäó ñîñòîÿíèÿìè (â ëîãè÷åñêîé ñåêöèè). Öèôðîâûå àâòîìàòû â ÿçûêå AHDL ìîæíî òàêæå ýêñïîðòèðîâàòü è èìïîðòèðîâàòü, ñîâåðøàÿ îáìåí ìåæäó ôàéëàìè òèïà TDF è GDF èëè WDF, ïðè ýòîì âõîäíîé èëè âûõîäíîé ñèãíàë çàäàåòñÿ êàê ïîðò öèôðîâîãî àâòîìàòà â ñåêöèè SUBDESIGN.
3.5.1. Ðåàëèçàöèÿ öèôðîâûõ àâòîìàòîâ (state machine) Öèôðîâîé àâòîìàò çàäàþò â ñåêöèè VARIABLE ïóòåì îáúÿâëåíèÿ èìåíè öèôðîâîãî àâòîìàòà, åãî ñîñòîÿíèé è, âîçìîæíî, âûõîäíûõ áèòîâ. Íèæå ïðèâåäåí ôàéë simple.tdf, êîòîðûé ðåàëèçóåò ôóíêöèþ D-òðèããåðà. SUBDESIGN simple ( clk : INPUT; reset : INPUT; d : INPUT; q : OUTPUT; ) VARIABLE ss : MACHINE WITH STATES (s0, s1); BEGIN ss.clk = clk;
188
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ss.reset = reset; CASE ss IS WHEN s0 => q = GND; IF d THEN ss = s1; END IF; WHEN s1 => q = VCC; IF !d THEN ss = s0; END IF; END CASE; END; Â äàííîì ôàéëå â ñåêöèè VARIABLE îáúÿâëåí öèôðîâîé àâòîìàò (state machine) ss. Ñîñòîÿíèÿ àâòîìàòà îïðåäåëÿþòñÿ êàê s0 è s1. Áèòû ñîñòîÿíèé íå îïðåäåëåíû.
3.5.2. Óñòàíîâêà ñèãíàëîâ Clock, Reset è Enable Ñèãíàëû Clock, Reset è Enable óïðàâëÿþò òðèããåðàìè ðåãèñòðà ñîñòîÿíèé â öèôðîâîì àâòîìàòå. Ýòè ñèãíàëû çàäàþòñÿ áóëåâûìè óðàâíåíèÿìè óïðàâëåíèÿ â ëîãè÷åñêîé ñåêöèè.  ïðåäûäóùåì ïðèìåðå (ôàéë simple.tdf) ñèíõðîñèãíàë öèôðîâîãî àâòîìàòà (Clock) ôîðìèðóåòñÿ âõîäîì clk. Àñèíõðîííûé ñèãíàë ñáðîñà öèôðîâîãî àâòîìàòà (Reset) ôîðìèðóåòñÿ âõîäîì reset, èìåþùèì âûñîêèé àêòèâíûé óðîâåíü. Äëÿ ïîäêëþ÷åíèÿ ñèãíàëà îòïèðàíèÿ (Enable) íóæíî äîáàâèòü â äàííûé ôàéë ïðîåêòà ñòðîêó «ena : INPUT;» â ñåêöèþ SUBDESIGN, à òàêæå äîáàâèòü â ëîãè÷åñêóþ ñåêöèþ áóëåâî óðàâíåíèå «ss.ena = ena;».
3.5.3. Çàäàíèå âûõîäíûõ çíà÷åíèé äëÿ ñîñòîÿíèé Äëÿ çàäàíèÿ âûõîäíûõ çíà÷åíèé ìîæíî èñïîëüçîâàòü îïåðàòîðû IF è CASE.  ïðèâåäåííîì âûøå ïðèìåðå (ôàéë simple.tdf) çíà÷åíèå âûõîäà q óñòàíàâëèâàåòñÿ ðàâíûì GND, åñëè öèôðîâîé àâòîìàò ss íàõîäèòñÿ â ñîñòîÿíèè s0, è ðàâíûì VCC, êîãäà îí íàõîäèòñÿ â ñîñòîÿíèè s1. Ýòè ïðèñâàèâàíèÿ äåëàþòñÿ â ïðåäëîæåíèÿõ WHEN îïåðàòîðà CASE. Âûõîäíûå çíà-
189
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ÷åíèÿ ìîæíî òàêæå çàäàâàòü â òàáëèöàõ èñòèííîñòè, êàê áóäåò îïèñàíî â ðàçäåëå 3.5.5.
3.5.4. Çàäàíèå ïåðåõîäîâ ìåæäó ñîñòîÿíèÿìè Ïåðåõîäû ìåæäó ñîñòîÿíèÿìè îïðåäåëÿþò óñëîâèÿ, ïðè êîòîðûõ ìàøèíà ïåðåõîäèò â íîâîå ñîñòîÿíèå. Ïåðåõîäû â ìàøèíå ñîñòîÿíèé çàäàþòñÿ ïóòåì óñëîâíîãî ïðèñâîåíèÿ ñîñòîÿíèÿ â ðàìêàõ îäíîé êîíñòðóêöèè, îïèñûâàþùåé ðåæèì. Äëÿ ýòîé öåëè ðåêîìåíäóåòñÿ èñïîëüçîâàòü îïåðàòîð CASE èëè òàáëèöó èñòèííîñòè. Â ïðèâåäåííîì âûøå ïðèìåðå (ôàéë simple.tdf) ïåðåõîäû äëÿ êàæäîãî ñîñòîÿíèÿ îïðåäåëåíû â ïðåäëîæåíèÿõ WHEN îïåðàòîðà CASE.
3.5.5. Ïðèñâîåíèå áèòîâ è çíà÷åíèé â öèôðîâîì àâòîìàòå Áèò ñîñòîÿíèÿ ýòî âûõîä òðèããåðà, èñïîëüçóåìûé äëÿ õðàíåíèÿ îäíîãî áèòà çíà÷åíèé öèôðîâîãî àâòîìàòà.  áîëüøèíñòâå ñëó÷àåâ äëÿ ìèíèìèçàöèè ëîãè÷åñêèõ ðåñóðñîâ ñëåäóåò ïðåäîñòàâèòü êîìïèëÿòîðó ñèñòåìû MAX+PLUS II ïðèñâîåíèå áèòîâ è çíà÷åíèé ñîñòîÿíèÿ. Îäíàêî ïîëüçîâàòåëü ìîæåò ñäåëàòü ýòî ñàìîñòîÿòåëüíî â îáúÿâëåíèè öèôðîâîãî àâòîìàòà, åñëè, íàïðèìåð, îí õî÷åò, ÷òîáû îïðåäåëåííûå áèòû áûëè âûõîäàìè öèôðîâîãî àâòîìàòà. Íèæå ïðèâåäåí ôàéë stepper.tdf, ðåàëèçóþùèé ôóíêöèþ êîíòðîëëåðà øàãîâîãî äâèãàòåëÿ. SUBDESIGN stepper ( clk, reset : INPUT; ccw, cw : INPUT; phase[3..0] : OUTPUT; ) VARIABLE ss : MACHINE OF BITS (phase[3..0]) WITH STATES ( s0 = B"0001", s1 = B"0010", s2 = B"0100", s3 = B"1000"); BEGIN ss.clk = clk; ss.reset = reset; TABLE
190
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ss, s0, s0, s1, s1, s2, s2, s3, s3, END TABLE; END;
ccw, 1, x, 1, x, 1, x, 1, x,
cw x 1 x 1 x 1 x 1
=> => => => => => => => =>
ss; s3; s1; s0; s2; s1; s3; s2; s0;
 äàííîì ïðèìåðå âûõîäû phase[3..0], îáúÿâëåííûå â ñåêöèè SUBDESIGN, îáúÿâëÿþòñÿ òàê æå, êàê áèòû öèôðîâîãî àâòîìàòà ss â îáúÿâëåíèè öèôðîâîãî àâòîìàòà.
3.5.6. Öèôðîâûå àâòîìàòû ñ ñèíõðîííûìè âûõîäàìè Åñëè âûõîäû öèôðîâîãî àâòîìàòà çàâèñÿò òîëüêî îò åãî ñîñòîÿíèÿ, èõ ìîæíî çàäàòü â ïðåäëîæåíèè WITH STATES îáúÿâëåíèÿ öèôðîâîãî àâòîìàòà. Ýòî ñäåëàåò èõ ìåíåå ïîäâåðæåííûìè îøèáêàì. Kðîìå òîãî, â íåêîòîðûõ ñëó÷àÿõ äëÿ ëîãè÷åñêèõ îïåðàöèé ïîòðåáóåòñÿ ìåíüøå ëîãè÷åñêèõ ÿ÷ååê. Íèæå ïðèâåäåí ïðèìåð (ôàéë moorel.tdf), â êîòîðîì ðåàëèçîâàí àâòîìàò Ìóðà ñ ÷åòûðüìÿ ñîñòîÿíèÿìè. SUBDESIGN moore1 ( clk : INPUT; reset : INPUT; y : INPUT; z : OUTPUT; ) VARIABLE % current current % state output % ss :MACHINE OF BITS (z) WITH STATES (s0 = s1 = s2 = s3 =
191
%
0, 1, 1, 0);
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL BEGIN ss.clk = clk; ss.reset = reset; TABLE % current current next % % state input state % ss, y => ss; s0, 0 => s0; s0, 1 => s2; s1, 0 => s0; s1, 1 => s2; s2, 0 => s2; s2, 1 => s3; s3, 0 => s3; s3, 1 => s1; END TABLE; END;  äàííîì ïðèìåðå ñîñòîÿíèÿ îïðåäåëåíû â îáúÿâëåíèè öèôðîâîãî àâòîìàòà. Ïåðåõîäû ìåæäó ñîñòîÿíèÿìè îïðåäåëåíû â òàáëèöå next_state, êîòîðàÿ çàäàíà â îáúÿâëåíèè òàáëèöû èñòèííîñòè.  äàííîì ïðèìåðå ìàøèíà èìååò ÷åòûðå ñîñòîÿíèÿ è òîëüêî îäèí áèò ñîñòîÿíèÿ Z. Kîìïèëÿòîð ñèñòåìû MAX+PLUS II àâòîìàòè÷åñêè äîáàâëÿåò åùå îäèí áèò è äåëàåò ñîîòâåòñòâóþùèå ïðèñâîåíèÿ ýòîé ñèíòåçèðîâàííîé ïåðåìåííîé äëÿ òîãî, ÷òîáû ïîëó÷èëàñü ìàøèíà ñ ÷åòûðüìÿ ñîñòîÿíèÿìè. Òàêîé öèôðîâîé àâòîìàò (state machine) òðåáóåò, ïî êðàéíåé ìåðå, äâóõ áèòîâ. Åñëè çíà÷åíèÿ ñîñòîÿíèé èñïîëüçóþòñÿ êàê âûõîäû (êàê â ôàéëå moorel.tdf), äëÿ ïðîåêòà ïîòðåáóåòñÿ ìåíüøå ëîãè÷åñêèõ ÿ÷ååê, íî, âîçìîæíî, ëîãè÷åñêèå ÿ÷åéêè ïîòðåáóþò áîëüøå ëîãèêè, ÷òîáû âîçáóäèòü âõîäû òðèããåðà.  ýòîì ñëó÷àå ìîäóëü ëîãè÷åñêîãî ñèíòåçàòîðà êîìïèëÿòîðà, âîçìîæíî, íå ñìîæåò ïîëíîñòüþ ìèíèìèçèðîâàòü àâòîìàò. Äðóãîé ñïîñîá ïîñòðîåíèÿ öèôðîâîãî àâòîìàòà çàêëþ÷àåòñÿ â òîì, ÷òîáû íå äåëàòü ïðèñâîåíèÿ ñîñòîÿíèé è ÿâíî îáúÿâèòü âûõîäíûå òðèããåðû. Ýòîò àëüòåðíàòèâíûé ìåòîä èñïîëüçîâàí â ïðèâåäåííîì íèæå ôàéëå moore2.tdf. SUBDESIGN moore2 (
192
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL clk : INPUT; reset : INPUT; y : INPUT; z : OUTPUT; ) VARIABLE ss : MACHINE WITH STATES (s0, s1, s2, s3); zd : NODE; BEGIN ss.clk = clk; ss.reset = reset; z = DFF(zd, clk, VCC, VCC); TABLE % current current next next % % state input state output % ss, y => ss, zd; s0, 0 => s0, 0; s0, 1 => s2, 1; s1, 0 => s0, 0; s1, 1 => s2, 1; s2, 0 => s2, 1; s2, 1 => s3, 0; s3, 0 => s3, 0; s3, 1 => s1, 1; END TABLE; END;  äàííîì ïðèìåðå âìåñòî òîãî, ÷òîáû çàäàòü âûõîäû ïðèñâîåíèåì çíà÷åíèé ñîñòîÿíèÿì â îáúÿâëåíèè öèôðîâîãî àâòîìàòà, â îáúÿâëåíèå òàáëèöû èñòèííîñòè äîáàâëåí îäèí ñòîëáåö ïîä íàçâàíèåì "next output" (ñëåäóþùèé âûõîä).  ýòîì ìåòîäå äëÿ ñèíõðîíèçàöèè âûõîäîâ ñèíõðîñèãíàëîì èñïîëüçóåòñÿ D-òðèããåð, âûçîâ êîòîðîãî çàïèñàí ñ ïîìîùüþ íåïîñðåäñòâåííîé ññûëêè.
3.5.7. Öèôðîâûå àâòîìàòû ñ àñèíõðîííûìè âûõîäàìè Â ÿçûêå AHDL âîçìîæíà ðåàëèçàöèÿ öèôðîâîãî àâòîìàòà ñ àñèíõðîííûìè âûõîäàìè. Âûõîäû òàêîãî òèïà àâòîìàòîâ âñåãäà èçìåíÿþòñÿ, êîãäà èçìåíÿþòñÿ âõîäû, íåçàâèñèìî îò ñîñòîÿíèÿ ñèíõðîñèãíàëà. Â ïðèâåäåí-
193
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL íîì íèæå ôàéëå mealy.tdf ðåàëèçîâàí àâòîìàò Ìèëè ñ ÷åòûðüìÿ ñîñòîÿíèÿìè è àñèíõðîííûìè âûõîäàìè. SUBDESIGN mealy ( clk : INPUT; reset : INPUT; y : INPUT; z : OUTPUT; ) VARIABLE ss : MACHINE WITH STATES (s0, s1, s2, s3); BEGIN ss.clk = clk; ss.reset = reset; TABLE % current current current next % % state input outputstate % ss, y => z, ss; s0, 0 => 0, s0; s0, 1 => 1, s1; s1, 0 => 1, s1; s1, 1 => 0, s2; s2, 0 => 0, s2; s2, 1 => 1, s3; s3, 0 => 0, s3; s3, 1 => 1, s0; END TABLE; END;
3.5.8. Âîññòàíîâëåíèå ïîñëå íåïðàâèëüíûõ ñîñòîÿíèé Ëîãèêà, ñãåíåðèðîâàííàÿ äëÿ öèôðîâîãî àâòîìàòà êîìïèëÿòîðîì ñèñòåìû MAX+PLUS II, áóäåò ðàáîòàòü òàê, êàê îïðåäåëåíî â TDF-ôàéëå. Îäíàêî ïðîåêòû ñ èñïîëüçîâàíèåì öèôðîâûõ àâòîìàòîâ ÷àñòî äîïóñêàþò çíà÷åíèÿ áèòîâ ñîñòîÿíèé, êîòîðûå íå ïðèñâàèâàþòñÿ ïðàâèëüíûì ñîñòîÿíèÿì. Ýòè çíà÷åíèÿ ñ íå ïðèñâîåííûìè áèòàìè ñîñòîÿíèé íàçûâàþòñÿ íåïðàâèëüíûìè ñîñòîÿíèÿìè. Ïðîåêò, êîòîðûé ïåðåõîäèò â íåïðàâèëüíîå ñîñòîÿíèå, íàïðèìåð, â ðåçóëüòàòå íàðóøåíèé âðåìåííûõ òðåáîâàíèé ê óñòàíîâêå èëè çàäåðæêå,
194
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ìîæåò ðåàëèçîâàòü îøèáî÷íûå âûõîäû. Íåñìîòðÿ íà ðåêîìåíäàöèè ôèðìû «Altera» ïî ñîáëþäåíèþ âðåìåííûõ òðåáîâàíèé ê óñòàíîâêå è çàäåðæêå, ïîëüçîâàòåëü ìîæåò ñäåëàòü âîññòàíîâëåíèå öèôðîâîãî àâòîìàòà ïîñëå íåïðàâèëüíîãî ñîñòîÿíèÿ ïóòåì ïðèíóäèòåëüíîãî ïðåîáðàçîâàíèÿ íåïðàâèëüíîãî ñîñòîÿíèÿ ê èçâåñòíîìó ïðàâèëüíîìó â ðàìêàõ îïåðàòîðà CASE. Äëÿ âîññòàíîâëåíèÿ èç íåïðàâèëüíûõ ñîñòîÿíèé ñëåäóåò îáúÿâèòü èõ ïîèìåííî äëÿ äàííîãî àâòîìàòà. Ïðåäëîæåíèå WHEN OTHERS â îïåðàòîðå CASE, êîòîðîå ïðèíóäèòåëüíî ïðåîáðàçóåò ñîñòîÿíèÿ, ïðèìåíÿåòñÿ òîëüêî ê ñîñòîÿíèÿì, êîòîðûå áûëè îáúÿâëåíû, à íå óïîìÿíóòû â ïðåäëîæåíèè WHEN. Äàííûé ìåòîä ðàáîòàåò, òîëüêî åñëè âñå íåïðàâèëüíûå ñîñòîÿíèÿ îïðåäåëåíû â îáúÿâëåíèè öèôðîâîãî àâòîìàòà. Äëÿ n-áèòîâîãî öèôðîâîãî àâòîìàòà ñóùåñòâóþò 2n âîçìîæíûõ ñîñòîÿíèÿ. Ïîýòîìó íóæíî äîáàâèòü âîîáðàæàåìûå èìåíà ñîñòîÿíèé, ÷òîáû ïîëó÷èëîñü òàêîå èõ ÷èñëî. Íèæå ïðèâåäåí ôàéë recover.tdf, â êîòîðîì ðåàëèçîâàí öèôðîâîé àâòîìàò, êîòîðûé ìîæåò âîññòàíàâëèâàòüñÿ èç íåïðàâèëüíûõ ñîñòîÿíèé. SUBDESIGN recover ( clk : INPUT; go : INPUT; ok : OUTPUT; ) VARIABLE sequence : MACHINE OF BITS (q[2..0]) WITH STATES (idle, one, two, three, four, illegal1, illegal2, illegal3); BEGIN sequence.clk = clk; CASE sequence IS WHEN idle => IF go THEN sequence = one; END IF; WHEN one => sequence = two; WHEN two =>
195
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL sequence = three; WHEN three => sequence = four; WHEN OTHERS => sequence = idle; END CASE; ok = (sequence == four); END; Â äàííîì ïðèìåðå öèôðîâîé àâòîìàò èìååò òðè áèòà, ïîýòîìó îí äîëæåí èìåòü 23 èëè 8 ñîñòîÿíèé. Â îáúÿâëåíèè çàäàíû òîëüêî 5 ñîñòîÿíèé. Ñëåäîâàòåëüíî, íóæíî òóäà äîáàâèòü åùå òðè âîîáðàæàåìûõ ñîñòîÿíèÿ illegal1, illegal2, illegal3.
3.6. Ðåàëèçàöèÿ èåðàðõè÷åñêîãî ïðîåêòà  èåðàðõè÷åñêîé ñòðóêòóðå ïðîåêòà TDF-ôàéëû, íàïèñàííûå íà ÿçûêå AHDL, ìîæíî èñïîëüçîâàòü âìåñòå ñ äðóãèìè ôàéëàìè ïðîåêòîâ. Íà íèæíåì óðîâíå ïðîåêòà ìîãóò áûòü ìàêðîôóíêöèè, ïîñòàâëÿåìûå ôèðìîé «Altera» èëè ðàçðàáîòàííûå ïîëüçîâàòåëÿìè.
3.6.1. Èñïîëüçîâàíèå ìàêðîôóíêöèé ñèñòåìû MAX+PLUS II ôèðìû «Altera»  ñèñòåìå MAX+PLUS II åñòü áîëüøàÿ áèáëèîòåêà, â êîòîðóþ âõîäÿò 74 ñòàíäàðòíûå ìàêðîôóíêöèè, ðåàëèçóþùèå øèíû ñ ïîñëåäîâàòåëüíûì îïðîñîì, îïòèìèçàöèþ àðõèòåêòóðû è êîíêðåòíûå ïðèëîæåíèÿ. Áèáëèîòåêà ïðåäñòàâëÿåò ñîáîé ñîáðàíèå áëîêîâ âûñîêîãî óðîâíÿ, èñïîëüçóåìûõ äëÿ ñîçäàíèÿ ïðîåêòà ñ èåðàðõè÷åñêîé ëîãèêîé. Âî âðåìÿ èíñòàëëÿöèè ñèñòåìû ýòè ìàêðîôóíêöèè àâòîìàòè÷åñêè çàïèñûâàþòñÿ â êàòàëîã \maxplus2\max2lib è åãî ïîäêàòàëîãè, ñîçäàâàåìûå â ïðîöåññå èíñòàëëÿöèè.  ÿçûêå AHDL ñóùåñòâóþò äâà ñïîñîáà âûçîâà (ò. å. âñòàâêè â êà÷åñòâå ïðèìåðà) ìàêðîôóíêöèè: îáúÿâèòü ïåðåìåííóþ òèïà <macrofunction> â îáúÿâëåíèè ïðèìåðîâ INSTANCE â ñåêöèè VARIABLE è èñïîëüçîâàòü ïîðòû ïðèìåðà ìàêðîôóíêöèè â ëîãè÷åñêîé ñåêöèè.  ýòîì ñïîñîáå âàæíîå çíà÷åíèå èìåþò èìåíà ïîðòîâ;
196
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL èñïîëüçîâàòü äëÿ ìàêðîôóíêöèè íåïîñðåäñòâåííóþ ññûëêó â ëîãè÷åñêîé ñåêöèè ôàéëà TDF.  ýòîì ñïîñîáå âàæåí ïîðÿäîê ïîðòîâ. Âõîäû è âûõîäû ìàêðîôóíêöèé ïåðå÷èñëÿþòñÿ â îïèñàíèè ïðîòîòèïîâ ôóíêöèé (FUNCTION PROTOTYPE). Ïðîòîòèïû ôóíêöèé ìîæíî çàïèñàòü â îòäåëüíûé ôàéë è óêàçàòü åãî â ñâîåì ôàéëå ñ ïîìîùüþ äèðåêòèâû INCLUDE. Òàêèå Include-ôàéëû ñîçäàþòñÿ àâòîìàòè÷åñêè äëÿ äàííîãî ïðîåêòà ñ ïîìîùüþ êîìàíäû Create Default Include File. Include-ôàéë âñòàâëÿåòñÿ âìåñòî âûçûâàþùåé åãî äèðåêòèâû INCLUDE. Äëÿ âñåõ ìàêðîôóíêöèé ñèñòåìû MAX+PLUS II Include-ôàéëû äîëæíû íàõîäèòüñÿ â êàòàëîãå \maxplus2\max2inc. Íèæå ïðèâåäåí ôàéë macro1.tdf, êîòîðûé ðåàëèçóåò ÷åòûðåõðàçðÿäíûé ñ÷åò÷èê, ïîäñîåäèíåííûé ñâîèìè âûõîäàìè ê äåøèôðàòîðó 4 â 16. Ñîîòâåòñòâóþùèå ìàêðîôóíêöèè âûçûâàþòñÿ îáúÿâëåíèÿìè ïðèìåðîâ â ñåêöèè VARIABLE. INCLUDE "4count"; INCLUDE "16dmux"; SUBDESIGN macro1 ( clk : INPUT; out[15..0] : OUTPUT; ) VARIABLE counter : 4count; decoder : 16dmux; BEGIN counter.clk = clk; counter.dnup = GND; decoder.(d,c,b,a) = counter.(qd,qc,qb,qa); out[15..0] = decoder.q[15..0]; END;  äàííîì ôàéëå èñïîëüçóþòñÿ äèðåêòèâû INCLUDE äëÿ èìïîðòèðîâàíèÿ ïðîòîòèïîâ ôóíêöèé äëÿ äâóõ ìàêðîôóíêöèé ôèðìû «Altera»: 4count è 16dmux.  ñåêöèè VARIABLE îáúÿâëÿþòñÿ äâå ïåðåìåííûå counter è decoder êàê ïðèìåðû ýòèõ ìàêðîôóíêöèé.  ëîãè÷åñêîé ñåêöèè îïðåäåëÿþòñÿ âõîäíûå ïîðòû äëÿ îáåèõ ìàêðîôóíêöèé â ôîðìàòå . (îíè ñòàâÿòñÿ â ëåâîé ÷àñòè áóëåâûõ óðàâíå-
197
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL íèé, à âûõîäíûå ïîðòû ñïðàâà.) Ïîðÿäîê ïîðòîâ â ïðîòîòèïå ôóíêöèè íå âàæåí, òàê êàê èìåíà ïîðòîâ â ëîãè÷åñêîé ñåêöèè ïåðå÷èñëÿþòñÿ ÿâíî. Íèæå ïðèâåäåí ôàéë macro2.tdf, âûïîëíÿþùèé òå æå ôóíêöèè, ÷òî è ïðåäûäóùèé, íî ìàêðîôóíêöèè â íåì âûçûâàþòñÿ íåïîñðåäñòâåííîé ññûëêîé. INCLUDE "4count"; INCLUDE "16dmux"; SUBDESIGN macro2 ( clk : INPUT; out[15..0] : OUTPUT; ) VARIABLE q[3..0] : NODE; BEGIN (q[3..0], ) = 4count (clk, , , , , GND, , , , ); out[15..0] = 16dmux (.(d, c, b, a)=q[3..0]); % equivalent inline ref. with positional port association % % out[15..0] = 16dmux (q[3..0]); % END; Âûçîâ ìàêðîôóíêöèé 4count è 16dmux îñóùåñòâëÿåòñÿ â ëîãè÷åñêîé ñåêöèè íåïîñðåäñòâåííîé ññûëêîé (â ïðàâîé ÷àñòè áóëåâûõ óðàâíåíèé). Íèæå ïðèâåäåíû ïðîòîòèïû ýòèõ ìàêðîôóíêöèé, çàïèñàííûå â ôàéëàõ 4count.inc, 16dmux.inc: FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a) RETURNS (qd, qc, qb, qa, cout); FUNCTION 16dmux (d, c, b, a) RETURNS (q[15..0]); Ñîåäèíåíèå ïîðòîâ ïîêàçàíî â ëîãè÷åñêîé ñåêöèè ôàéëà macro2.tdf. Ïîðÿäîê ïîðòîâ âàæåí, òàê êàê äîëæíî áûòü îäíîçíà÷íîå ñîîòâåòñòâèå ìåæäó ïîðòàìè, îïèñàííûìè â ïðîòîòèïå ôóíêöèè è ïðè åå ðåàëèçàöèè â ëîãè÷åñêîé ñåêöèè.  äàííîì ïðèìåðå çàïÿòûìè îòäåëÿþòñÿ (íî íå ïåðå÷èñëÿþòñÿ) ïîðòû, äëÿ êîòîðûõ íå äåëàåòñÿ ÿâíîå ïîäêëþ÷åíèå.
198
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.6.2. Ñîçäàíèå è ïðèìåíåíèå ïîëüçîâàòåëüñêèõ ìàêðîôóíêöèé  ôàéëàõ, íàïèñàííûõ íà AHDL, ìîæíî ëåãêî ñîçäàâàòü è èñïîëüçîâàòü ïîëüçîâàòåëüñêèå ìàêðîôóíêöèè, âûïîëíÿÿ ñëåäóþùèå äåéñòâèÿ: Ñîçäàòü ëîãèêó äëÿ ìàêðîôóíêöèè â ôàéëå ïðîåêòà. Îïðåäåëèòü ïîðòû ìàêðîôóíêöèè â îáúÿâëåíèè ïðîòîòèïà ôóíêöèè. Ïðîòîòèï ôóíêöèè äàåò êðàòêîå îïèñàíèå ôóíêöèè: åå èìÿ, à òàêæå âõîäíûå, âûõîäíûå è äâóíàïðàâëåííûå ïîðòû. Ìîæíî òàêæå èñïîëüçîâàòü ìàøèííûå ïîðòû äëÿ ìàêðîôóíêöèé, êîòîðûå èìïîðòèðóþò èëè ýêñïîðòèðóþò öèôðîâîé àâòîìàò. Îáúÿâëåíèå ïðîòîòèïîâ ôóíêöèé ìîæåò áûòü ðàçìåùåíî â Include-ôàéëå, êîòîðûé âûçûâàåòñÿ â ïîëüçîâàòåëüñêîì ôàéëå. Èñïîëüçóÿ êîìàíäó Create Default Include File, ìîæíî àâòîìàòè÷åñêè ñîçäàâàòü Include-ôàéë ñ ïðîòîòèïîì ôóíêöèè äëÿ ëþáîãî ôàéëà ïðîåêòà: âñòàâèòü â ôàéë ïðèìåð ìàêðîôóíêöèè ñ ïîìîùüþ îáúÿâëåíèÿ ïðèìåðà â ñåêöèè VARIABLE èëè ñ ïîìîùüþ íåïîñðåäñòâåííîé ññûëêè â òåêñòå; èñïîëüçîâàòü ìàêðîôóíêöèþ â ôàéëå.
3.6.3. Îïðåäåëåíèå ïîëüçîâàòåëüñêîé ìàêðîôóíêöèè Äëÿ èñïîëüçîâàíèÿ ìàêðîôóíêöèè åå íóæíî ëèáî âêëþ÷èòü â îïèñàíèå ïðîòîòèïà ôóíêöèè â TDF-ôàéëå, ëèáî óêàçàòü â äèðåêòèâå INCLUDE ôàéëà TDF èìÿ Include-ôàéëà, ñîäåðæàùåãî ïðîòîòèï ýòîé ìàêðîôóíêöèè. Kàê óæå óïîìèíàëîñü âûøå, Include-ôàéëû ìîæíî ñîçäàâàòü àâòîìàòè÷åñêè. Íèæå ïðèâîäèòñÿ ôàéë keyboard.tdf, â êîòîðîì ðåàëèçîâàí êîäèðîâùèê äëÿ 16-êëàâèøíîé êëàâèàòóðû. TITLE "Keyboard Encoder"; INCLUDE "74151"; INCLUDE "74154"; INCLUDE "4count"; FUNCTION debounce (clk, key_pressed) RETURNS (pulse); SUBDESIGN keyboard ( clk : INPUT; % 50KHz clock % col[3..0] : INPUT; % keyboard columns % row[3..0], d[3..0] : OUTPUT; % keyboard rows, key code %
199
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL strobe : OUTPUT; % key code is valid % ) VARIABLE key_pressed : NODE; % VCC when key d[3..0] is pressed % mux : 74151; decoder : 74154; counter : 4count; opencol[3..0] : TRI; BEGIN % Drive keyboard rows with a decoder and opencollector outputs % row[] = opencol[].out; opencol[].in = GND; opencol[].oe = decoder.(o0n,o1n,o2n,o3n); decoder.(b,a) = counter.(qd,qc); % Sense keyboard columns with a multiplexer % mux.d[3..0] = col[3..0]; mux.(b,a) = counter.(qb,qa); key_pressed = !mux.y; % Scan keyboard until a key is pressed. % % Drive key’s code onto d[] outputs % counter.clk = clk; counter.cin = !key_pressed; d[] = counter.(qd,qc,qb,qa); % Generate strobe when key has settled % strobe = debounce(clk, key_pressed); END;  äàííîì ïðèìåðå â äèðåêòèâàõ INCLUDE óêàçûâàþòñÿ ôàéëû ïðîòîòèïîâ ôóíêöèè äëÿ ñòàíäàðòíûõ ìàêðîôóíêöèé ôèðìû «Altera»: 4count, 74151 è 74154. Îòäåëüíî â ôàéëå äàí ïðîòîòèï ôóíêöèè äëÿ ìàêðîôóíêöèè debounce, â êîòîðîì îïèñàíû âõîäû clk è key_pressed è âûõîä pulse. Ïðèìåðû ìàêðîôóíêöèé 4count, 74151 è 74154 âûçûâàþòñÿ îáúÿâëåíèåì ïðèìåðîâ â ñåêöèè VARIABLE. Ïðèìåð ìàêðîôóíêöèè debounce âûçûâàåòñÿ íåïîñðåäñòâåííîé ññûëêîé â òåêñòå ëîãè÷åñêîé ñåêöèè.
200
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.6.4. Èìïîðò è ýêñïîðò öèôðîâûõ àâòîìàòîâ (state machine) Îïåðàöèè èìïîðòà è ýêñïîðòà öèôðîâûõ àâòîìàòîâ îñóùåñòâëÿþòñÿ ìåæäó ôàéëàìè TDF è äðóãèìè ôàéëàìè ïðîåêòà ïóòåì çàäàíèÿ âõîäíîãî èëè âûõîäíîãî ïîðòà êàê âõîäà àâòîìàòà (MACHINÅ INPUT) è åãî âûõîäà (MACHINÅ OUTPUT) â ñåêöèè SUBDESIGN. Ïðîòîòèï ôóíêöèè, êîòîðûé ïðåäñòàâëÿåò ñîáîé ôàéë, ñîäåðæàùèé ìàøèíó ñîñòîÿíèé, äîëæåí óêàçûâàòü, êàêèå âõîäû è âûõîäû ïðèíàäëåæàò ìàøèíå ñîñòîÿíèé. Ýòî îñóùåñòâëÿåòñÿ ñíàáæåíèåì èìåí ñèãíàëîâ ïðåôèêñîì êëþ÷åâûì ñëîâîì MACHINE. Çàìå÷àíèå. Ïîðòû òèïà MACHINÅ INPUT è MACHINÅ OUTPUT íåëüçÿ èñïîëüçîâàòü â ôàéëå ïðîåêòà âåðõíåãî óðîâíÿ. Ìîæíî ïåðåèìåíîâàòü àâòîìàò, äàâ åìó âðåìåííîå èìÿ (ïñåâäîíèì) â îáúÿâëåíèè MACHINE â ñåêöèè VARIABLE. Ïñåâäîíèì öèôðîâîãî àâòîìàòà ìîæíî èñïîëüçîâàòü â òîì ôàéëå, ãäå ñîçäàåòñÿ öèôðîâîé àâòîìàò, èëè â òîì ôàéëå, ãäå èñïîëüçóåòñÿ ïîðò MACHINÅ INPUT äëÿ èìïîðòèðîâàíèÿ öèôðîâîãî àâòîìàòà. Ýòî èìÿ ìîæíî ïîòîì èñïîëüçîâàòü âìåñòî ïåðâîíà÷àëüíîãî èìåíè öèôðîâîãî àâòîìàòà. Íèæå ïðèâîäèòñÿ ôàéë ss_def.tdf, êîòîðûé îïðåäåëÿåò è ýêñïîðòèðóåò öèôðîâîé àâòîìàò ss ñ ïîðòîì ss_out òèïà MACHINÅ OUTPUT. SUBDESIGN ss_def ( clk, reset, count : INPUT; ss_out : MACHINE OUTPUT; ) VARIABLE ss : MACHINE WITH STATES (s1, s2, s3, s4, s5); BEGIN ss_out = ss; CASE ss IS WHEN s1=> IF count THEN ss = s2; ELSE ss = s1; END IF; WHEN s2=> IF count THEN ss = s3; ELSE ss = s2; END IF; WHEN s3=> IF count THEN ss = s4; ELSE ss = s3; END IF; WHEN s4=>
201
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL IF count THEN ss = s5; ELSE ss = s4; END IF; WHEN s5=> IF count THEN ss = s1; ELSE ss = s5; END IF; END CASE; ss.(clk, reset) = (clk, reset); END; Íèæå ïðèâîäèòñÿ ôàéë ss_use.tdf, êîòîðûé èìïîðòèðóåò öèôðîâîé àâòîìàò ñ ïîðòîì ss_in òèïà MACHINE INPUT. SUBDESIGN ss_use ( ss_in : MACHINE INPUT; out : OUTPUT; ) BEGIN out = (ss_in == s2) OR (ss_in == s4); END; Íèæå ïðèâåäåí ôàéë top1.tdf, â êîòîðîì èñïîëüçóþòñÿ íåïîñðåäñòâåííûå ññûëêè â òåêñòå äëÿ âñòàâêè ïðèìåðîâ ôóíêöèé ss_def è ss_use.  ïðîòîòèïàõ ýòèõ ôóíêöèé ñîäåðæèòñÿ êëþ÷åâîå ñëîâî MACHINE äëÿ óêàçàíèÿ, êàêèå âõîäû è âûõîäû ÿâëÿþòñÿ öèôðîâûìè àâòîìàòàìè ñ ïàìÿòüþ. FUNCTION ss_def (clk, reset, count)RETURNS (MACHINE ss_out); FUNCTION ss_use (MACHINE ss_in) RETURNS (out); DESIGN IS «top1» DEVICE IS «AUTO»; SUBDESIGN top1 ( sys_clk, /reset, hold : INPUT; sync_out : OUTPUT; ) VARIABLE ss_ref: MACHINE; % Machine Alias Declaration % BEGIN ss_ref = ss_def(sys_clk, !/reset, !hold);
202
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL sync_out = ss_use(ss_ref); END; Âíåøíèé öèôðîâîé àâòîìàò ìîæíî òàêæå ðåàëèçîâàòü â TDF-ôàéëå âåðõíåãî óðîâíÿ ñ îáúÿâëåíèåì ïðèìåðà â ñåêöèè VARIABLE. Íèæå ïðèâåäåí ôàéë top2.tdf, êîòîðûé èìååò òó æå ôóíêöèþ, ÷òî è ôàéë top1.tdf, íî äëÿ âûçîâà ìàêðîôóíêöèé èñïîëüçóåò îáúÿâëåíèå ïðèìåðîâ. FUNCTION ss_def (clk, reset, count) RETURNS (MACHINE ss_out); FUNCTION ss_use (MACHINE ss_in) RETURNS (out); DESIGN IS "top2" DEVICE IS "AUTO"; SUBDESIGN top2 ( sys_clk, /reset, hold : INPUT; sync_out : OUTPUT; ) VARIABLE sm_macro : ss_def; sync : ss_use; BEGIN sm_macro.(clk, reset, count) = (sys_clk, !/reset,!hold); sync.ss_in = sm_macro.ss_out; sync_out = sync.out; END;
3.7. Óïðàâëåíèå ñèíòåçîì 3.7.1. Ðåàëèçàöèÿ ïðèìèòèâîâ LCELL è SOFT Ìîæíî îãðàíè÷èòü ëîãè÷åñêèé ñèíòåç ñ ïîìîùüþ çàìåíû ïåðåìåííûõ òèïà óçåë (NODE) ïðèìèòèâàìè SOFT è LCELL. Ïåðåìåííûå NODE è ïðèìèòèâû LCELL îáåñïå÷èâàþò íàèëó÷øåå óïðàâëåíèå ëîãè÷åñêèì ñèíòåçîì. Ïðèìèòèâû SOFT îáåñïå÷èâàþò áîëåå ñëàáîå óïðàâëåíèå ëîãè÷åñêèì ñèíòåçîì. Ïåðåìåííûå NODE, êîòîðûå îáúÿâëÿþòñÿ â ñåêöèè VARIABLE, íàêëàäûâàþò ñëàáûå îãðàíè÷åíèÿ íà ëîãè÷åñêèé ñèíòåç. Âî âðåìÿ ñèíòåçà ìîäóëü ëîãè÷åñêîãî ñèíòåçà êîìïèëÿòîðà ñèñòåìû MAX+PLUS II çàìåíÿåò êàæäûé ïðèìåð èñïîëüçîâàíèÿ ïåðåìåííîé NODE ëîãèêîé, êîòîðóþ
203
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL îíà ïðåäñòàâëÿåò. Çàòåì ïðîèñõîäèò ìèíèìèçàöèÿ ëîãèêè äî îäíîé ëîãè÷åñêîé ÿ÷åéêè. Ýòîò ìåòîä îáû÷íî ïðèâîäèò ê óñêîðåíèþ ðàáîòû ñõåìû, íî â ðåçóëüòàòå ìîæåò ïîëó÷èòüñÿ ñëèøêîì ñëîæíàÿ ëîãèêà èëè æå åå òðóäíî ñâåñòè ê îäíîé ÿ÷åéêå. Áóôåðû SOFT îáåñïå÷èâàþò ëó÷øåå óïðàâëåíèå èñïîëüçîâàíèåì ðåñóðñîâ, ÷åì ïåðåìåííûå NODE. Ìîäóëü ëîãè÷åñêîãî ñèíòåçàòîðà âûáèðàåò, êîãäà çàìåíèòü ïðèìåðû èñïîëüçîâàíèÿ ïðèìèòèâîâ SOFT ïðèìèòèâàìè LCELL. Áóôåðû SOFT ìîãóò ïîìî÷ü óíè÷òîæèòü ëîãèêó, êîòîðàÿ îêàçàëàñü ñëèøêîì ñëîæíîé, è ñäåëàòü ïðîåêò ïðîùå. Îäíàêî ïðè ýòîì ìîæåò áûòü óâåëè÷åíî ÷èñëî ëîãè÷åñêèõ îïåðàöèé è ñêîðîñòü âûïîëíåíèÿ ïðîãðàììû ñîîòâåòñòâåííî óìåíüøèòñÿ. Íàèáîëåå ñèëüíîå óïðàâëåíèå ïðîöåññîì ëîãè÷åñêîãî ñèíòåçà îáåñïå÷èâàåòñÿ ïðèìèòèâàìè LCELL. Ìîäóëü ëîãè÷åñêîãî ñèíòåçàòîðà ìèíèìèçèðóåò âñþ ëîãèêó, êîòîðàÿ çàïóñêàåò ïðèìèòèâ LCELL, òàêèì îáðàçîì, ÷òîáû ìîæíî áûëî ñâåñòè åå ê îäíîé ëîãè÷åñêîé ÿ÷åéêå. Ïðèìèòèâû LCELL ðåàëèçóþòñÿ â âèäå îäíîé ëîãè÷åñêîé ÿ÷åéêè (èõ íåëüçÿ óáðàòü èç ïðîåêòà, äàæå åñëè îíè èìåþò åäèíñòâåííûé âõîä). Åñëè ïðîåêò ìèíèìèçèðîâàí äî òàêîé ñòåïåíè, ÷òî îäèí ïðèìèòèâ LCELL èìååò åäèíñòâåííûé âõîä, òî â ýòîì ñëó÷àå âìåñòî ïðèìèòèâîâ LCELL ìîæíî èñïîëüçîâàòü ïðèìèòèâû SOFT, êîòîðûå óáèðàþòñÿ â ïðîöåññå ëîãè÷åñêîãî ñèíòåçà. Ïðèìå÷àíèå. Ïðè ìíîãîóðîâíåâîì ñèíòåçå êîìïèëÿòîð ñèñòåìû MAX+PLUS II àâòîìàòè÷åñêè ïîìåùàåò áóôåðû SOFT â áîëåå âûãîäíîå ìåñòî ïðîåêòà, åñëè âêëþ÷èòü îïöèþ SOFT Buffer Insertion logic. Íèæå ïðèâîäÿòñÿ äâå âåðñèè ôàéëà TDF ñ ïåðåìåííûìè NODE è ñ ïðèìèòèâàìè SOFT.  âåðñèè nodevar ïåðåìåííàÿ odd_parity îáúÿâëåíà êàê NODE, çàòåì åé ïðèñâàèâàåòñÿ áóëåâî âûðàæåíèå d0 $ d1 $... $ d8.  âåðñèè softbuf êîìïèëÿòîð çàìåíèò íåêîòîðûå ïðèìèòèâû SOFT ïðèìèòèâàìè LCELL âî âðåìÿ îáðàáîòêè äàííûõ äëÿ ëó÷øåãî èñïîëüçîâàíèÿ ðåñóðñîâ óñòðîéñòâà. TDF with NODE Primitives: SUBDESIGN nodevar ( : )
TDF with SOFT Variables: SUBDESIGN softbuf ( : )
204
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL VARIABLE odd_parity : NODE; BEGIN odd_parity = d0 $ d1 $ d2 $ d3 $ d4 $ d5 $ d6 $ d7 $ d8; END;
VARIABLE odd_parity : NODE; BEGIN odd_parity = SOFT(d0 $ d1 $ d2) $ SOFT(d3 $ d4 $ d5) $ SOFT(d6 $ d7 $ d8); END;
3.7.2. Çíà÷åíèÿ êîíñòàíò ïî óìîë÷àíèþ Ëîãè÷åñêèé ñèíòåçàòîð àâòîìàòè÷åñêè âûïîëíÿåò ïîäêëþ÷åíèå ê GND âñåõ âûõîäîâ òàáëèöû èñòèííîñòè, åñëè íå óäîâëåòâîðÿåòñÿ íè îäíî èç óñëîâèé âõîäà òàáëèöû. Äëÿ ïðèñâîåíèÿ âûõîäàì òàáëèöû èñòèííîñòè çíà÷åíèÿ VCC ìîæíî èñïîëüçîâàòü îäíî èëè íåñêîëüêî îáúÿâëåíèé ÿçûêà AHDL ïî óìîë÷àíèþ. Ñ ïîìîùüþ ýòèõ îáúÿâëåíèé ìîæíî çàäàòü çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ ñîîòâåòñòâóþùèõ âûõîäîâ. Íàïðèìåð, åñëè áîëüøèíñòâî âûõîäîâ òàáëèöû èñòèííîñòè ðàâíî "1", ìîæíî çàäàòü çíà÷åíèå ïî óìîë÷àíèþ VCC. Ïðèìå÷àíèå. Íå ñëåäóåò ïóòàòü çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ ïåðåìåííûõ è ïîðòîâ, êîòîðûå ïðèñâàèâàþòñÿ â ñåêöèè SUBDESIGN.
3.7.3. Ïðèñâîåíèå áèòîâ è çíà÷åíèé â öèôðîâîì àâòîìàòå Ëîãè÷åñêèé ñèíòåçàòîð àâòîìàòè÷åñêè ìèíèìèçèðóåò ÷èñëî áèòîâ ñîñòîÿíèÿ, òðåáóåìîå äëÿ öèôðîâîãî àâòîìàòà. Ïðè ýòîì îïòèìèçèðóþòñÿ êàê èñïîëüçîâàíèå óñòðîéñòâà, òàê è õàðàêòåðèñòèêè åãî ðàáîòû. Îäíàêî íåêîòîðûå óñòðîéñòâà öèôðîâîãî àâòîìàòà ìîãóò ðàáîòàòü áûñòðåå ïðè çíà÷åíèÿõ ñîñòîÿíèÿ, èñïîëüçóþùèõ ÷èñëî áèòîâ áîëüøå ìèíèìàëüíîãî. Äëÿ êîíòðîëÿ ýòèõ ñëó÷àåâ ïîëüçîâàòåëü ñàì îáúÿâëÿåò áèòû è çíà÷åíèÿ äëÿ öèôðîâîãî àâòîìàòà.
3.8. Ýëåìåíòû ÿçûêà AHDL 3.8.1. Çàðåçåðâèðîâàííûå êëþ÷åâûå ñëîâà Çàðåçåðâèðîâàííûå êëþ÷åâûå ñëîâà èñïîëüçóþòñÿ äëÿ ñëåäóþùèõ öåëåé: äëÿ îáîçíà÷åíèÿ íà÷àëà, êîíöà è ïåðåõîäîâ â îáúÿâëåíèÿõ ÿçûêà AHDL;
205
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL äëÿ îáîçíà÷åíèÿ ïðåäîïðåäåëåííûõ êîíñòàíò, ò.å. GND è VCC. Këþ÷åâûå ñëîâà ìîæíî èñïîëüçîâàòü êàê ñèìâîëè÷åñêèå èìåíà, òîëüêî åñëè îíè çàêëþ÷åíû â ñèìâîëû îäèíàðíûõ êàâû÷åê ('). Èõ ìîæíî òàêæå èñïîëüçîâàòü â êîììåíòàðèÿõ. Äëÿ òîãî ÷òîáû ïîëó÷èòü êîíòåêñòîâóþ ïîìîùü ïî êëþ÷åâîìó ñëîâó, óáåäèòåñü, ÷òî âàø ôàéë ñîõðàíåí ñ ðàñøèðåíèåì .tdf, çàòåì íàæìèòå îäíîâðåìåííî äâå êíîïêè Shift+F1 â îêíå òåêñòîâîãî ðåäàêòîðà Text Editor è ùåëêíèòå êíîïêîé ìûøè Button 1 íà êëþ÷åâîì ñëîâå. Ôèðìà «Altera» ðåêîìåíäóåò âñå êëþ÷åâûå ñëîâà íàáèðàòü ïðîïèñíûìè áóêâàìè. Ñïèñîê âñåõ çàðåçåðâèðîâàííûõ êëþ÷åâûõ ñëîâ ÿçûêà AHDL: FUNCTION
OTHERS
JKFFE
CASE
TABLE
NCLUDE
BITS
SRFFE
NODE
DFF
VCC
NOR
DFFE
WHEN
NOT
ELSE
WITH
OPTIONS
END
XNOR
OR
EXP
XOR
OUTPUT
AND
GLOBAL
RETURNS
BEGIN
GND
SOFT
BURIED
INPUT
SRFF
BIDIR
IF
STATES
CARRY
IS
SUBDESIGN
CASCADE
JKFF
TFF
CLIQUE
LATCH
TFFE
CONNECTED_PINS
LCELL
THEN
CONSTANT
MACHINE
TITLE
DEFAULTS
MACRO
TRI
DESIGN
MCELL
VARIABLE
DEVICE
NAND
X
ELSIF
OF
206
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.8.2. Ñèìâîëû  Òàáë. 3.1 ïðèâåäåíû ñèìâîëû, èìåþùèå îïðåäåëåííîå çíà÷åíèå â ÿçûêå AHDL.  ýòîò ïåðå÷åíü íå âêëþ÷åíû ñèìâîëû, èñïîëüçóåìûå â áóëåâûõ âûðàæåíèÿõ êàê îïåðàòîðû è äëÿ îïåðàöèé ñðàâíåíèÿ. Òàáëèöà 3.1. Ñèìâîëû, èñïîëüçóåìûå â ÿçûêå AHDL Ñèìâîë _ (ïîä÷åðêèâàíèå) (òèðå) (äâà òèðå) % (ïðîöåíò)
() (êðóãëûå ñêîáêè)
Ôóíêöèÿ Èñïîëüçóåìûå ïîëüçîâàòåëåì èäåíòèôèêàòîðû Ñèìâîëû â ñèìâîëè÷åñêèõ èìåíàõ Íà÷èíàåò êîììåíòàðèé â ñòèëå VHDL, êîòîðûé ïðîäîëæàåòñÿ äî êîíöà ñòðîêè Çàêëþ÷àåò ñ äâóõ ñòîðîí êîììåíòàðèé ñòèëÿ AHDL Çàêëþ÷àþò è îïðåäåëÿþò ïîñëåäîâàòåëüíûå èìåíà ãðóïï. Çàêëþ÷àþò èìåíà âûâîäîâ â ñåêöèè ïîäïðîåêòà (Subdesign Section) è â ïðîòîòèïàõ ôóíêöèé. Çàêëþ÷àþò (íåîáÿçàòåëüíî) âõîäû è âûõîäû òàáëèö â îáúÿâëåíèè Truth Table. Çàêëþ÷àþò ñîñòîÿíèÿ â îáúÿâëåíèè öèôðîâîãî àâòîìàòà State Machine. Çàêëþ÷àþò áîëåå ïðèîðèòåòíûå îïåðàöèè â áóëåâûõ âûðàæåíèÿõ. Çàêëþ÷àþò íåîáÿçàòåëüíûå âàðèàíòû â ñåêöèè ïðîåêòà Design Section (âíóòðè îáúÿâëåíèÿ íàçíà÷åíèÿ ðåñóðñîâ Assignment)
[] Çàêëþ÷àþò äèàïàçîí çíà÷åíèé â äåñÿòè÷íîì èìåíè ãðóïïû (êâàäðàòíûå ñêîáêè) '...' Çàêëþ÷àþò ñèìâîëè÷åñêèå èìåíà (îäèíàðíûå êàâû÷êè)
"..." (äâîéíûå êàâû÷êè)
. (òî÷êà) ... (ìíîãîòî÷èå) ; (òî÷êà ñ çàïÿòîé) , (çàïÿòàÿ)
Çàêëþ÷àþò ñòðîêó â îáúÿâëåíèè íàçâàíèÿ Title. Çàêëþ÷àþò öèôðû â íåäåñÿòè÷íûõ íîìåðàõ. Çàêëþ÷àþò ïóòü â îáúÿâëåíèè Include Ìîãóò (íåîáÿçàòåëüíî) çàêëþ÷àòü èìÿ ïðîåêòà è óñòðîéñòâà â ñåêöèè ïðîåêòà Design Section. Ìîãóò (íåîáÿçàòåëüíî) çàêëþ÷àòü èìÿ â îáúÿâëåíèè íàçíà÷åíèÿ êëèêè Clique Assignment Îòäåëÿåò ñèìâîëè÷åñêèå èìåíà ïåðåìåííûõ â ìàêðîôóíêöèè èëè ïðèìèòèâå îò èìåí ïîðòîâ. Îòäåëÿåò èìÿ ôàéëà îò ðàñøèðåíèÿ Ðàçäåëÿåò íàèìåíüøåå è íàèáîëüøåå çíà÷åíèå â äèàïàçîíàõ Çàêàí÷èâàåò îáúÿâëåíèÿ è ñåêöèè â ÿçûêå AHDL Ðàçäåëÿåò ýëåìåíòû ïîñëåäîâàòåëüíûõ ãðóïï è ñïèñêîâ
207
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Òàáëèöà 3.1 (îêîí÷àíèå) Ñèìâîë : (äâîåòî÷èå) @ «ñîáàêà» = (ðàâåíñòâî)
=> (ñòðåëêà)
Ôóíêöèÿ Îòäåëÿåò ñèìâîëè÷åñêèå èìåíà îò òèïîâ â îáúÿâëåíèÿõ è íàçíà÷åíèÿõ ðåñóðñîâ Ïðèñâàèâàåò ñèìâîëè÷åñêèå óçëû âûâîäàì óñòðîéñòâà è ëîãè÷åñêèì ÿ÷åéêàì â îáúÿâëåíèÿõ íàçíà÷åíèÿ ðåñóðñîâ Resource Assignment Ïðèñâàèâàåò çíà÷åíèÿ ïî óìîë÷àíèþ GND è VCC âõîäàì â ñåêöèè ïîäïðîåêòà Subdesign. Ïðèñâàèâàåò óñòàíîâî÷íûå çíà÷åíèÿ â âàðèàíòàõ. Ïðèñâàèâàåò çíà÷åíèÿ ñîñòîÿíèÿì â ìàøèíå ñîñòîÿíèé. Ïðèñâàèâàåò çíà÷åíèÿ â áóëåâûõ óðàâíåíèÿõ Îòäåëÿåò âõîäû îò âûõîäîâ â îáúÿâëåíèÿõ òàáëèöû èñòèííîñòè Truth Table. Îòäåëÿåò ïðåäëîæåíèÿ ñ WHEN îò áóëåâûõ âûðàæåíèé â îïåðàòîðå Case
3.8.3. Èìåíà â êàâû÷êàõ è áåç êàâû÷åê  ÿçûêå AHDL åñòü òðè òèïà èìåí: Ñèìâîëè÷åñêèå èìåíà ýòî îïðåäåëÿåìûå ïîëüçîâàòåëåì èäåíòèôèêàòîðû. Îíè èñïîëüçóþòñÿ äëÿ îáîçíà÷åíèÿ ñëåäóþùèõ ÷àñòåé TDF: âíóòðåííèõ è âíåøíèõ óçëîâ (âåðøèí); êîíñòàíò; ïåðåìåííûõ öèôðîâîãî àâòîìàòà, áèòîâ ñîñòîÿíèé, èìåí ñîñòîÿíèé; ïðèìåðîâ (Instance). Èìåíà ïîäïðîåêòà ýòî îïðåäåëÿåìûå ïîëüçîâàòåëåì èìåíà äëÿ ôàéëîâ ïðîåêòà áîëåå íèçêîãî óðîâíÿ. Èìÿ ïîäïðîåêòà äîëæíî áûòü òàêèì æå, êàê èìÿ ôàéëà TDF. Èìåíà ïîðòîâ ýòî ñèìâîëè÷åñêèå èìåíà, èäåíòèôèöèðóþùèå âõîä èëè âûõîä ïðèìèòèâà èëè ìàêðîôóíêöèè.  ôàéëå FIT âàøåãî ïðîåêòà ìîãóò ïîÿâèòüñÿ ãåíåðèðóåìûå êîìïèëÿòîðîì èìåíà âûâîäîâ ñ ñèìâîëîì «òèëüäà» (~). Ýòîò ñèìâîë çàðåçåðâèðîâàí äëÿ èìåí, ãåíåðèðóåìûõ êîìïèëÿòîðîì, ïîëüçîâàòåëþ çàïðåùàåòñÿ åãî èñïîëüçîâàòü äëÿ îáîçíà÷åíèÿ èìåí âûâîäîâ, óçëîâ (âåðøèí), ãðóïï (øèí). Ñóùåñòâóþò äâå ôîðìû çàïèñè äëÿ âñåõ òðåõ òèïîâ èìåí (ñèìâîëè÷åñêèõ, ïîäïðîåêòà è ïîðòîâ): â êàâû÷êàõ (') è áåç êàâû÷åê. Åñëè ðàçðàáîò÷èê ñîçäàåò ñèìâîë ïî óìîë÷àíèþ äëÿ ôàéëà TDF, êîòîðûé âêëþ÷àåò â ñåáÿ èìåíà ïîðòîâ â êàâû÷êàõ, ñîáñòâåííî êàâû÷êè íå âõîäÿò â èìåíà âûâîäîâ. Íèæå â Òàáë. 3.2 óêàçàíû âñå âîçìîæíûå âàðèàíòû çàïèñè èìåí â ÿçûêå AHDL.
208
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Òàáëèöà 3.2. Âàðèàíòû çàïèñè èìåí â ÿçûêå AHDL Èìÿ ïîäïðîåêòà Ðàçðåøåííûå ñèìâîëû
Ñèìâîëè÷åñêîå èìÿ
Èìÿ ïîðòà
Áåç êàâû-  êàâû÷- Áåç êàâû-  êàâû÷- Áåç êàâû-  êàâû÷÷åê êàõ ÷åê êàõ ÷åê êàõ
A-Z
+
+
+
+
+
+
A-z
+
+
+
+
+
+
0-9
+
+
+
+
+
+
Ïîä÷åðêèâàíèå (_)
+
+
+
+
+
+
Kîñàÿ ÷åðòà (/)
+
+
+
+
Òèðå ()
+
+
+
Òîëüêî öèôðû (0-9)
+
+
+
+
+
Këþ÷åâîå ñëîâî
+
+
+
Ìàêñèìàëüíîå ÷èñëî ñèìâîëîâ
8
8
32
32
32
32
Ïðèìåðû: Ñèìâîëè÷åñêèå èìåíà áåç êàâû÷åê: a, /a: ðàçðåøåííûå -foo, node, 55: íåðàçðåøåííûå Ñèìâîëè÷åñêèå èìåíà â êàâû÷êàõ: '-bar', 'table', '1221': ðàçðåøåííûå 'bowling4$', 'has a space ', 'a_name_with_more_than_32_characters': íåðàçðåøåííûå
3.8.4. Ãðóïïû Ñèìâîëè÷åñêèå èìåíà è ïîðòû îäíîãî è òîãî æå òèïà ìîæíî îáúÿâèòü è èñïîëüçîâàòü êàê ãðóïïû â áóëåâûõ âûðàæåíèÿõ è óðàâíåíèÿõ. Ãðóïïà, â êîòîðóþ ìîæåò âõîäèòü äî 256 ýëåìåíòîâ (èëè «áèòîâ»), îáðàáàòûâàåòñÿ êàê êîëëåêöèÿ óçëîâ (âåðøèí) è ñ÷èòàåòñÿ åäèíûì öåëûì. Ãðóïïà â ëîãè÷åñêîé ñåêöèè ôàéëà TDF ìîæåò ñîñòîÿòü èç óçëîâ èëè ÷èñåë. Îäèíî÷íûå óçëû è êîíñòàíòû GND è VCC ìîãóò äóáëèðîâàòüñÿ äëÿ îáðàçîâàíèÿ ãðóïï â áóëåâûõ âûðàæåíèÿõ è óðàâíåíèÿõ.  ôàéëå FIT ìîãóò ïîÿâèòüñÿ ãåíåðèðóåìûå êîìïèëÿòîðîì èìåíà âûâîäîâ ñ ñèìâîëîì «òèëüäà» (~). Ýòîò ñèìâîë çàðåçåðâèðîâàí äëÿ èìåí, ãåíåðèðóåìûõ êîìïèëÿòîðîì, ïîëüçîâàòåëþ çàïðåùàåòñÿ åãî èñïîëüçîâàòü äëÿ îáîçíà÷åíèÿ èìåí âûâîäîâ, óçëîâ (âåðøèí), ãðóïï (øèí).
209
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL 3.8.4.1. Ôîðìà çàïèñè ãðóïï Ñóùåñòâóþò äâå ôîðìû çàïèñè ïðè îáúÿâëåíèè ãðóïï: 1. Äåñÿòè÷íîå èìÿ ãðóïïû ñîñòîèò èç ñèìâîëè÷åñêîãî èìåíè (èëè èìåíè ïîðòà), çà êîòîðûì ñëåäóåò äèàïàçîí äåñÿòè÷íûõ ÷èñåë, çàêëþ÷åííûé â êâàäðàòíûå ñêîáêè, íàïðèìåð a[4..1]. Ïîñëå ýòîãî èìåíè ãðóïïû óêàçûâàåòñÿ òîëüêî îäèí äèàïàçîí. Âñåãî ñèìâîëè÷åñêîå èìÿ (èëè èìÿ ïîðòà) âìåñòå ñ ñàìûì äëèííûì (ïî íàïèñàíèþ) íîìåðîì â äèàïàçîíå ìîæåò ñîäåðæàòü äî 32 ñèìâîëîâ. Åñëè ãðóïïà îïðåäåëåíà, êâàäðàòíûå ñêîáêè îáåñïå÷èâàþò ñàìûé êðàòêèé ïóòü çàäàíèÿ âñåãî äèàïàçîíà. Âìåñòî äèàïàçîíà ìîæíî òàêæå óêàçûâàòü òîëüêî îäíî äåñÿòè÷íîå ÷èñëî, íàïðèìåð a[5]. Îäíàêî òàêàÿ ôîðìà çàïèñè îçíà÷àåò åäèíñòâåííîå ñèìâîëè÷åñêîå èìÿ, à íå èìÿ ãðóïïû è ýêâèâàëåíòíî èìåíè a5. 2. Ïîñëåäîâàòåëüíîå èìÿ ãðóïïû ñîñòîèò èç çàêëþ÷åííîãî â ñêîáêè ïåðå÷íÿ ñèìâîëè÷åñêèõ èìåí, èìåí ïîðòîâ èëè ÷èñåë, ðàçäåëåííûõ çàïÿòûìè, íàïðèìåð (a, b, c).  ýòîì ïåðå÷íå ìîãóò áûòü òàêæå äåñÿòè÷íûå èìåíà ãðóïï, íàïðèìåð (a, b, c[5..1]). Òàêàÿ çàïèñü èñïîëüçóåòñÿ äëÿ çàäàíèÿ èìåí ïîðòîâ. Íàïðèìåð: reg. (d, clk, clrn, prn).  ñëåäóþùåì ïðèìåðå ïîêàçàíû âàðèàíòû çàïèñè îäíîé è òîé æå ãðóïïû: b[5..0] (b5, b4, b3, b2, b1, b0) b[ ] 3.8.4.2. Äèàïàçîí è ïîääèàïàçîí ãðóïï Äèàïàçîíû â äåñÿòè÷íûõ èìåíàõ ãðóïï îáîçíà÷àþòñÿ äåñÿòè÷íûìè íîìåðàìè, îáû÷íî ïåðå÷èñëÿåìûìè â ïîðÿäêå óáûâàíèÿ. Äëÿ òîãî ÷òîáû óêàçàòü äèàïàçîí â ïîðÿäêå âîçðàñòàíèÿ èëè â îáîèõ ïîðÿäêàõ, ðàçðàáîò÷èê äîëæåí óñòàíîâèòü îïöèþ BIT0 â îáúÿâëåíèè îïöèé Options, òîãäà êîìïèëÿòîð íå áóäåò âûäàâàòü ïðåäóïðåæäàþùèå ñîîáùåíèÿ. Ïîääèàïàçîíû âêëþ÷àþò ïîäìíîæåñòâî óçëîâ, çàäàííûõ â îáúÿâëåíèè ãðóïïû, èõ ìîæíî óêàçûâàòü ðàçëè÷íûìè ñïîñîáàìè. Íàïðèìåð, åñëè ðàçðàáîò÷èê îáúÿâèë ãðóïïó c[5..1], îí ìîæåò èñïîëüçîâàòü ñëåäóþùèå ïîääèàïàçîíû ýòîé ãðóïïû: c[3..1], c4, c[5], (c2,,c4).  ëåâîé ÷àñòè áóëåâûõ óðàâíåíèé èëè â ññûëêàõ (reference) ïî òåêñòó ïðîãðàììû (in-line) íà ìàêðîôóíêöèè èëè ïðèìèòèâû â íàïèñàíèè èìåíè ãðóïïû ìîæíî èñïîëüçîâàòü çàïÿòûå âìåñòî ïåðå÷èñëåíèÿ èìåí.
210
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Ïðè óêàçàíèè äèàïàçîíà âìåñòî ÷èñåë ìîæíî èñïîëüçîâàòü êîíñòàíòû. Íàïðèìåð q[MAX...0] ÿâëÿåòñÿ ðàçðåøåííîé ôîðìîé çàïèñè, åñëè êîíñòàíòà MAX îïðåäåëåíà â îáúÿâëåíèè CONSTANT.
3.8.5. ×èñëà â ÿçûêå AHDL  ÿçûêå AHDL ìîæíî èñïîëüçîâàòü äåñÿòè÷íûå, äâîè÷íûå, âîñüìåðè÷íûå è øåñòíàäöàòåðè÷íûå ÷èñëà â ëþáîé êîìáèíàöèè.  Òàáë. 3.3 ïðèâåäåí ñèíòàêñèñ çàïèñè ÷èñåë â ÿçûêå AHDL äëÿ êàæäîé ñèñòåìû ñ÷èñëåíèÿ. Òàáëèöà 3.3. Ñèíòàêñèñ çàïèñè ÷èñåë â ÿçûêå AHDL Ñèñòåìà ñ÷èñëåíèÿ Äåñÿòè÷íàÿ Äâîè÷íàÿ Âîñüìåðè÷íàÿ Øåñòíàäöàòåðè÷íàÿ
Çíà÷åíèÿ B"", ãäå ñèìâîë Õ îáîçíà÷àåò áåçðàçëè÷íîå çíà÷åíèå O"< ïîñëåäîâàòåëüíîñòü öèôð 07>" èëè Q"< ïîñëåäîâàòåëüíîñòü öèôð 07>" X"< ïîñëåäîâàòåëüíîñòü öèôð 09, áóêâ AF>" èëè H"< ïîñëåäîâàòåëüíîñòü öèôð 09, áóêâ AF>"
Ïðèìåðû ðàçðåøåííîé çàïèñè ÷èñåë â ÿçûêå AHDL: B"0110X1X10" Q"4671223" H"123AECF" K ÷èñëàì â ÿçûêå AHDL ïðèìåíÿþòñÿ ñëåäóþùèå ïðàâèëà: • Kîìïèëÿòîð ñèñòåìû MAX+PLUS II âñåãäà èíòåðïðåòèðóåò ÷èñëà êàê ãðóïïû äâîè÷íûõ öèôð. •  áóëåâûõ âûðàæåíèÿõ ÷èñëà íåëüçÿ ïðèñâàèâàòü îäèíî÷íûì óçëàì (âåðøèíàì). Âìåñòî ýòîãî íóæíî èñïîëüçîâàòü êîíñòàíòû VCC è GND.
3.8.6. Áóëåâû âûðàæåíèÿ Áóëåâû âûðàæåíèÿ ñîñòîÿò èç îïåðàíäîâ, ðàçäåëåííûõ ëîãè÷åñêèìè è àðèôìåòè÷åñêèìè îïåðàòîðàìè è êîìïàðàòîðàìè è (íåîáÿçàòåëüíî) ñãðóïïèðîâàííûõ ñ ïîìîùüþ êðóãëûõ ñêîáîê. Âûðàæåíèÿ èñïîëüçóþòñÿ â áóëåâûõ óðàâíåíèÿõ, à òàêæå â äðóãèõ êîíñòðóêöèÿõ ÿçûêà, òàêèõ êàê îïåðàòîðû CASE è IF. Ñóùåñòâóþò ñëåäóþùèå ïðèìåíåíèÿ áóëåâûõ âûðàæåíèé: • Îïåðàíä. Ïðèìåð: a, b[5..1], 7, VCC
211
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
• Âñòðîåííàÿ â òåêñò (in-line) ññûëêà (reference) íà ïðèìèòèâ èëè ìàêðîôóíêöèþ. • Ïðåôèêñíûé îïåðàòîð (! èëè -), ïðèìåíåííûé ê áóëåâó âûðàæåíèþ. Ïðèìåð: !c • Äâà áóëåâûõ âûðàæåíèÿ, ðàçäåëåííûå äâîè÷íûì (íå ïðåôèêñíûì) îïåðàòîðîì. Ïðèìåð: d1 $ d3 • Çàêëþ÷åííîå â êðóãëûå ñêîáêè áóëåâî âûðàæåíèå. Ïðèìåð: (!foo & bar) Ðåçóëüòàò êàæäîãî áóëåâà âûðàæåíèÿ äîëæåí èìåòü òó æå øèðèíó, ÷òî è óçåë èëè ãðóïïà (â ëåâîé ñòîðîíå óðàâíåíèÿ), êîòîðîìó îí, â êîíå÷íîì ñ÷åòå, ïðèñâàèâàåòñÿ. 3.8.7 Ëîãè÷åñêèå îïåðàòîðû  Òàáë. 3.4 ïðèâåäåíû ëîãè÷åñêèå îïåðàòîðû äëÿ áóëåâûõ âûðàæåíèé. Òàáëèöà 3.4. Ëîãè÷åñêèå îïåðàòîðû äëÿ áóëåâûõ âûðàæåíèé Îïåðàòîð
Ïðèìåð
!
!tob
NOT
NOT tob
&
bread & butter
AND
bread AND butter
!&
a[3..1] !& b[5..3]
NAND
a[3..1] NAND b[5..3]
#
trick # treat
OR
trick OR treat
!#
c[8..5] !# d[7..4]
NOR
c[8..5] NOR d[7..4]
$
foo $ bar
XOR
foo XOR bar
!$
x2 !$ x4
XNOR
x2 XNOR x4
Îïèñàíèå Äîïîëíåíèå (ïðåôèêñíîå îáðàùåíèå) Ëîãè÷åñêîå «È» Îáðàùåíèå ëîãè÷åñêîãî «È» Ëîãè÷åñêîå «ÈËÈ» Îáðàùåíèå ëîãè÷åñêîãî «ÈËÈ» «Èñêëþ÷àþùåå ÈËÈ» Îáðàùåíèå «èñêëþ÷àþùåãî ëîãè÷åñêîãî ÈËÈ»
Kàæäûé îïåðàòîð ïðåäñòàâëÿåò ñîáîé ëîãè÷åñêèé âåíòèëü ñ äâóìÿ âõîäàìè; èñêëþ÷åíèå ñîñòàâëÿåò îïåðàòîð NOT, ÿâëÿþùèéñÿ ïðåôèêñíûì èíâåðòîðîì. Äëÿ çàïèñè ëîãè÷åñêîãî îïåðàòîðà ìîæíî èñïîëüçîâàòü åãî èìÿ èëè ñèìâîë.
212
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Âûðàæåíèÿ, â êîòîðûõ èñïîëüçóþòñÿ ýòè îïåðàòîðû, èíòåðïðåòèðóþòñÿ ïî-ðàçíîìó â çàâèñèìîñòè îò òîãî, ÷òî ïðåäñòàâëÿþò ñîáîé îïåðàíäû: îäèíî÷íûå óçëû (âåðøèíû), ãðóïïû èëè ÷èñëà. Kðîìå òîãî, âûðàæåíèÿ ñ îïåðàòîðîì NOT èíòåðïðåòèðóþòñÿ íå òàê êàê äðóãèå ëîãè÷åñêèå îïåðàòîðû.
3.8.8. Âûðàæåíèÿ ñ îïåðàòîðîì NOT Ñ îïåðàòîðîì NOT ìîæíî èñïîëüçîâàòü òðè òèïà îïåðàíäîâ: • Åñëè îïåðàíä ïðåäñòàâëÿåò ñîáîé îäèíî÷íûé óçåë, êîíñòàíòû GND èëè VCC, âûïîëíÿåòñÿ îäíà îïåðàöèÿ îáðàùåíèÿ. Ïðèìåð: !a. • Åñëè îïåðàíä ïðåäñòàâëÿåò ñîáîé ãðóïïó óçëîâ, êàæäûé ýëåìåíò ãðóïïû ïðîõîäèò ÷åðåç èíâåðòîð. Ïðèìåð: !a[4..1] èíòåðïðåòèðóåòñÿ êàê (!a4, !a3, !a2, !a1). • Åñëè îïåðàíä ïðåäñòàâëÿåò ñîáîé ÷èñëî, îí îáðàáàòûâàåòñÿ êàê äâîè÷íîå ÷èñëî, ò.å. êàê ãðóïïà ñîîòâåòñòâóþùåãî ÷èñëà áèòîâ, ãäå îáðàùàåòñÿ êàæäûé áèò. Ïðèìåð: !9 îïåðàíä èíòåðïðåòèðóåòñÿ êàê äâîè÷íîå ÷èñëî !B"1001" (ãðóïïà èç ÷åòûðåõ ýëåìåíòîâ), ðåçóëüòàò B"0110".
3.8.9. Âûðàæåíèÿ ñ îïåðàòîðàìè AND, NAND, OR, NOR, XOR, & XNOR Ñóùåñòâóþò ÷åòûðå êîìáèíàöèè îïåðàíäîâ ñ äâîè÷íûìè (íå ïðåôèêñíûìè) îïåðàòîðàìè, è êàæäàÿ èç íèõ èíòåðïðåòèðóåòñÿ ïî-îñîáîìó: • Åñëè îïåðàíä ïðåäñòàâëÿåò ñîáîé îäèíî÷íûé óçåë, êîíñòàíòû GND èëè VCC, îïåðàòîð âûïîëíÿåò ëîãè÷åñêóþ îïåðàöèþ íàä äâóìÿ ýëåìåíòàìè. Ïðèìåð: (a&b). • Åñëè îáà îïåðàòîðà ÿâëÿþòñÿ ãðóïïàìè óçëîâ, îïåðàòîð ïðèìåíÿåòñÿ ê ñîîòâåòñòâóþùèì óçëàì êàæäîé ãðóïïû, ïðîèçâîäÿ ðÿä îïåðàöèé íà áèòîâîì óðîâíå ìåæäó ãðóïïàìè. Ãðóïïû äîëæíû áûòü îäèíàêîâîãî ðàçìåðà. Ïðèìåð: (a,b) # (c,d) èíòåðïðåòèðóåòñÿ êàê (a#c, b#d). • Åñëè îäèí îïåðàòîð ïðåäñòàâëÿåò ñîáîé îäèíî÷íûé óçåë, êîíñòàíòû GND èëè VCC, à äðóãîé îïåðàíä ãðóïïó óçëîâ, òî îäèíî÷íûé óçåë èëè êîíñòàíòà äóáëèðóþòñÿ äëÿ îáðàçîâàíèÿ ãðóïïû òàêîãî æå ðàçìåðà, ÷òî è âòîðîé îïåðàíä. Çàòåì âûðàæåíèå èíòåðïðåòèðóåòñÿ êàê ãðóïïîâàÿ îïåðàöèÿ. Ïðèìåð: a & b[2..1] èíòåðïðåòèðóåòñÿ êàê (a&b2, a&b1). • Åñëè îáà îïåðàíäà ïðåäñòàâëÿþò ñîáîé ÷èñëà, áîëåå êîðîòêîå (â ñìûñëå ÷èñëà áèòîâ â äâîè÷íîì ïðåäñòàâëåíèè) ÷èñëî äîïîëíÿåòñÿ íåçíà-
213
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ÷àùèìè íóëÿìè, ÷òîáû ñðàâíÿòüñÿ ïî ÷èñëó áèòîâ ñ äðóãèì îïåðàíäîì. Çàòåì âûðàæåíèå èíòåðïðåòèðóåòñÿ êàê ãðóïïîâàÿ îïåðàöèÿ. Ïðèìåð: â âûðàæåíèè (3#8) 3 è 8 ïðåîáðàçóþòñÿ â äâîè÷íûå ÷èñëà B"0011" è B"1000". Ðåçóëüòàòîì ÿâëÿåòñÿ B"1011". • Åñëè îäèí îïåðàíä ïðåäñòàâëÿåò ñîáîé ÷èñëî, à äðóãîé óçåë èëè ãðóïïó óçëîâ, òî ÷èñëî óñåêàåòñÿ èëè ðàñøèðÿåòñÿ äî ðàçìåðà ãðóïïû. Ïðè óñå÷åíèè çíà÷àùèõ áèòîâ ãåíåðèðóåòñÿ ñîîáùåíèå îá îøèáêå. Âûðàæåíèå çàòåì èíòåðïðåòèðóåòñÿ êàê ãðóïïîâàÿ îïåðàöèÿ. Ïðèìåð: (a,b,c)&1 èíòåðïðåòèðóåòñÿ êàê (a&0, b&0, c&1). Âûðàæåíèå ñ êîíñòàíòîé VCC èíòåðïðåòèðóåòñÿ íå òàê êàê âûðàæåíèå ñ îïåðàíäîì 1.  ïåðâîì âûðàæåíèè ïðèâåäåííîãî íèæå ïðèìåðà ÷èñëî 1 ðàñøèðÿåòñÿ ïî ÷èñëó áèòîâ äâîè÷íîãî ïðåäñòàâëåíèÿ, ÷òîáû ñîîòâåòñòâîâàòü ðàçìåðó ãðóïïû. Âî âòîðîì óðàâíåíèè óçåë VCC äóáëèðóåòñÿ äëÿ îáðàçîâàíèÿ ãðóïïû òîãî æå ðàçìåðà. Çàòåì êàæäîå óðàâíåíèå èíòåðïðåòèðóåòñÿ êàê ãðóïïîâàÿ îïåðàöèÿ. ! operation. (a, b, c) & 1 = (0, 0, c) (a, b, c) & VCC = (a, b, c).
3.8.10. Àðèôìåòè÷åñêèå îïåðàòîðû Àðèôìåòè÷åñêèå îïåðàòîðû èñïîëüçóþòñÿ äëÿ âûïîëíåíèÿ àðèôìåòè÷åñêèõ îïåðàöèé ñëîæåíèÿ è âû÷èòàíèÿ íàä ãðóïïàìè è ÷èñëàìè.  ÿçûêå AHDL ïðèìåíÿþòñÿ ñëåäóþùèå àðèôìåòè÷åñêèå îïåðàòîðû (Òàáë. 3.5). Òàáëèöà 3.5. Àðèôìåòè÷åñêèå îïåðàòîðû, ïðèìåíÿåìûå â ÿçûêå AHDL Îïåðàòîð
Ïðèìåð
Îïèñàíèå
+ (óíàðíûé)
+1
Ïîëîæèòåëüíîå çíà÷åíèå
(óíàðíûé)
a[4..1]
Îòðèöàòåëüíîå çíà÷åíèå
+
count[7..0] + delta[7..0]
Ñëîæåíèå
rightmost_x[] leftmost_x[]
Âû÷èòàíèå
Óíàðíûå ïëþñ (+) è ìèíóñ () ÿâëÿþòñÿ ïðåôèêñíûìè îïåðàòîðàìè. Îïåðàòîð + íå âëèÿåò íà ñâîé îïåðàíä, è ðàçðàáîò÷èê ìîæåò èñïîëüçîâàòü åãî äëÿ èëëþñòðàòèâíûõ öåëåé (ò.å. äëÿ óêàçàíèÿ ïîëîæèòåëüíîãî ÷èñëà). Îïåðàòîð èíòåðïðåòèðóåò ñâîé îïåðàíä â äâîè÷íîì ïðåäñòàâëåíèè (åñëè îí òàêîâûì íå ÿâëÿåòñÿ ñ ñàìîãî íà÷àëà). Çàòåì îí âûïîëíÿåò îïåðàöèþ óíàðíîãî ìèíóñà, ò.å. ïîëó÷àåò äîïîëíåíèå îïåðàíäà êàê äâîè÷íîãî ÷èñëà.
214
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL K äðóãèì àðèôìåòè÷åñêèì îïåðàòîðàì ïðèìåíÿþòñÿ ñëåäóþùèå ïðàâèëà:
• Îïåðàöèè âûïîëíÿþòñÿ ìåæäó äâóìÿ îïåðàíäàìè, êîòîðûå äîëæíû áûòü ãðóïïàìè óçëîâ èëè ÷èñëàìè.
• Åñëè îáà îïåðàíäà ïðåäñòàâëÿþò ñîáîé ãðóïïû óçëîâ, òî îíè äîëæíû èìåòü îäèíàêîâûé ðàçìåð.
• Åñëè îáà îïåðàíäà ïðåäñòàâëÿþò ñîáîé ÷èñëà, òî áîëåå êîðîòêîå (â äâîè÷•
íîì ïðåäñòàâëåíèè) ÷èñëî ðàñøèðÿåòñÿ (äîïîëíÿåòñÿ íåçíà÷àùèìè íóëÿìè), ÷òîáû ñðàâíÿòüñÿ ïî ÷èñëó áèòîâ ñ äðóãèì îïåðàíäîì. Åñëè îäèí îïåðàíä ïðåäñòàâëÿåò ñîáîé ÷èñëî, à äðóãîé ÿâëÿåòñÿ ãðóïïîé óçëîâ, òî ÷èñëî óñåêàåòñÿ èëè ðàñøèðÿåòñÿ â äâîè÷íîì ïðåäñòàâëåíèè äî ðàçìåðà ãðóïïû. Åñëè ïðè ýòîì óñåêàþòñÿ çíà÷àùèå áèòû, êîìïèëÿòîð ñèñòåìû MAX+PLUS II ãåíåðèðóåò ñîîáùåíèå îá îøèáêå.
3.8.11. Kîìïàðàòîðû (îïåðàòîðû ñðàâíåíèÿ) Kîìïàðàòîðû èñïîëüçóþòñÿ äëÿ ñðàâíåíèÿ îäèíî÷íûõ óçëîâ èëè ãðóïï. Ñóùåñòâóþò äâà òèïà êîìïàðàòîðîâ: ëîãè÷åñêèå è àðèôìåòè÷åñêèå.  ÿçûêå AHDL ðåàëèçîâàíû ñëåäóþùèå êîìïàðàòîðû (Òàáë. 3.6). Òàáëèöà 3.6. Kîìïàðàòîðû, ðåàëèçîâàííûå â ÿçûêå AHDL Kîìïàðàòîð == (ëîãè÷åñêèé)
Ïðèìåð addr[19..4] == B"B800"
Ðàâíû
Îïèñàíèå
!= (ëîãè÷åñêèé)
b1 != b3
Íå ðàâíû
< (àðèôìåòè÷åñêèé)
fame[] < power[]
Ìåíüøå ÷åì
= (àðèôìåòè÷åñêèé)
love[] > money[] delta[] >= 0
Áîëüøå ÷åì Áîëüøå ëèáî ðàâíî
Îïåðàòîð (==) èñïîëüçóåòñÿ èñêëþ÷èòåëüíî â áóëåâûõ âûðàæåíèÿõ. Ëîãè÷åñêèå êîìïàðàòîðû ìîãóò ñðàâíèâàòü îäèíî÷íûå óçëû, ãðóïïû óçëîâ è ÷èñëà. Ïðè ñðàâíåíèè ãðóïï óçëîâ èëè ÷èñåë ðàçìåð ãðóïï äîëæåí áûòü îäèíàêîâûì. Kîìïèëÿòîð ñèñòåìû MAX+PLUS II âûïîëíÿåò ïîáèòîâîå ñðàâíåíèå ãðóïï è âîçâðàùàåò çíà÷åíèå VCC, åñëè ðåçóëüòàò èñòèíà, è GND, åñëè ðåçóëüòàò ëîæü. Àðèôìåòè÷åñêèå êîìïàðàòîðû ìîãóò ñðàâíèâàòü òîëüêî ãðóïïû óçëîâ è ÷èñëà, è ãðóïïû äîëæíû èìåòü îäèíàêîâûé ðàçìåð. Kîìïèëÿòîð âûïîëíÿåò íàä ãðóïïàìè îïåðàöèè áåççíàêîâîãî ñðàâíåíèÿ çíà÷åíèé, ò.å. êàæäàÿ ãðóïïà èíòåðïðåòèðóåòñÿ êàê ïîëîæèòåëüíîå äâîè÷íîå ÷èñëî è ñðàâíèâàåòñÿ ñ äðóãîé ãðóïïîé.
215
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
3.8.12. Ïðèîðèòåòû â áóëåâûõ óðàâíåíèÿõ Îïåðàíäû, ðàçäåëåííûå ëîãè÷åñêèìè è àðèôìåòè÷åñêèìè îïåðàòîðàìè è êîìïàðàòîðàìè, îöåíèâàþòñÿ ïî ïðàâèëàì ïðèîðèòåòîâ, ïåðå÷èñëåííûì íèæå (Òàáë. 3.7) (ïðèîðèòåò 1 ÿâëÿåòñÿ íàèâûñøèì). Ðàâíîïðèîðèòåòíûå îïåðàöèè âûïîëíÿþòñÿ ïî î÷åðåäè ñëåâà íàïðàâî. Ïîðÿäîê âûïîëíåíèÿ ìîæåò áûòü èçìåíåí ñ ïîìîùüþ çàêëþ÷åíèÿ â êðóãëûå ñêîáêè. Òàáëèöà 3.7. Îïåðàíäû è èõ ïðèîðèòåòû Ïðèîðèòåò
Îïåðàòîð
1
Îòðèöàíèå
Kîìïàðàòîð
1
!
Ëîãè÷åñêîå «ÍÅ»
2
+
Ñëîæåíèå
2
Âû÷èòàíèå
3
==
Ðàâíî
3
!=
Íå ðàâíî
3
=
Áîëüøå ëèáî ðàâíî ...
4
&
AND
4
!&
NAND
5
$
XOR
5
!$
XNOR
6
#
OR
6
!#
NOR
3.8.13. Ïðèìèòèâû  ñèñòåìå MAX+PLUS II åñòü ðàçíîîáðàçíûå ïðèìèòèâíûå ôóíêöèè äëÿ ïðîåêòèðîâàíèÿ ýëåêòðè÷åñêèõ ñõåì. Ïîñêîëüêó ëîãè÷åñêèå îïåðàòîðû, ïîðòû è íåêîòîðûå îáúÿâëåíèÿ ÿçûêà AHDL çàìåíÿþò ïðèìèòèâû â ôàéëàõ TDF, íàïèñàííûõ íà ÿçûêå AHDL, ïðèìèòèâû ÿçûêà AHDL ÿâëÿþòñÿ ïîäìíîæåñòâîì ïðèìèòèâîâ, êîòîðûå èìåþòñÿ äëÿ ôàéëîâ ãðàôè÷åñêîãî ïðîåêòà (GDF-ôàéë), êàê áóäåò ïîêàçàíî íèæå.  ôàéëàõ TDF íåò íåîáõîäèìîñòè èñïîëüçîâàíèÿ ïðîòîòèïîâ ôóíêöèé ÿçûêà AHDL äëÿ ïðèìèòèâîâ. Îäíàêî ïóòåì âêëþ÷åíèÿ â âàø TDF-ôàéë
216
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ïðîòîòèïà ôóíêöèè ðàçðàáîò÷èê ìîæåòå ïåðåîïðåäåëèòü ïîðÿäîê âûçîâà âõîäîâ ïðèìèòèâà. 3.8.13.1. Ïðèìèòèâû áóôåðîâ CARRY LCELL (MCELL) CASCADE SOFT EXP TRI GLOBAL (SCLK) Ïðèìèòèâ CARRY (ïåðåíîñ) Ïðîòîòèï ôóíêöèè: FUNCTION CARRY (in) RETURNS (out); Ïðèìèòèâ CARRY îïðåäåëÿåò ëîãèêó «ïåðåíîñà íà âûõîä» (carry-out) äëÿ îäíîé ôóíêöèè è äåéñòâóåò êàê «ïåðåíîñ íà âõîä» (carry-in) äëÿ äðóãîé ôóíêöèè. Ôóíêöèÿ ïåðåíîñà îñóùåñòâëÿåò ëîãèêó áûñòðîãî ïåðåíîñà ïî öåïî÷êå äëÿ òàêèõ ôóíêöèé êàê ñóììàòîðû è ñ÷åò÷èêè. Ïðèìèòèâ CARRY ïîääåðæèâàåòñÿ òîëüêî äëÿ óñòðîéñòâ ñåìåéñòâà FLEX8000. Äëÿ äðóãèõ óñòðîéñòâ îí èãíîðèðóåòñÿ. Åñëè ðàçðàáîò÷èê èñïîëüçóåò ïðèìèòèâ CARRY íåêîððåêòíî, îí èãíîðèðóåòñÿ è êîìïèëÿòîð âûäàåò ñîîòâåòñòâóþùåå ïðåäóïðåæäàþùåå ñîîáùåíèå. Âû ìîæåòå ïîçâîëèòü êîìïèëÿòîðó àâòîìàòè÷åñêè âñòàâëÿòü è óáèðàòü CARRY âî âðåìÿ ñèíòåçà ëîãèêè, äëÿ ýòîãî íóæíî âûáðàòü îïöèþ ëîãèêè ñ ïåðåíîñîì ïî öåïî÷êå Carry Chain èëè ñòèëü ñèíòåçà ëîãèêè, êîòîðûé âêëþ÷àåò ýòó îïöèþ. Ïðèìèòèâ CASCADE (êàñêàä) Ïðîòîòèï ôóíêöèè: FUNCTION CASCADE (in) RETURNS (out); Áóôåð CASCADE îïðåäåëÿåò ôóíêöèþ êàñêàäíîãî âûõîäà èç ëîãè÷åñêîé ñõåìû «È» (AND) èëè «ÈËÈ» (OR) è äåéñòâóåò êàê âõîäíîé êàñêàä äëÿ äðóãîé ëîãè÷åñêîé ñõåìû «È» èëè «ÈËÈ». Ôóíêöèÿ âõîäíîãî êàñêàäà ïîçâîëÿåò îðãàíèçîâàòü êàñêàäíûé ïðîöåññ, êîòîðûé ïðåäñòàâëÿåò ñîáîé áûñòðûé âûõîä, ðàñïîëîæåííûé íà êàæäîé êîìáèíàöèîííîé ëîãè÷åñêîé ÿ÷åéêå è ó÷àñòâóþùèé â îïåðàöèè «ÈËÈ» èëè «È» ñ âûõîäîì ñîñåäíåé êîìáèíàöèîííîé ëîãè÷åñêîé ÿ÷åéêè â óñòðîéñòâå. Ñ ïîìîùüþ ïðèìèòèâà CASCADE ëîãè÷åñêàÿ ÿ÷åéêà «È» èëè «ÈËÈ», êîòîðàÿ ïèòàåò ïðèìèòèâ CASCADE, è ëîãè÷åñêàÿ ÿ÷åéêà «È» èëè «ÈËÈ», êîòîðàÿ çàïèòûâàåòñÿ ïðèìèòèâîì CASCADE, ïîìåùàþòñÿ â îäíîì óñòðîéñòâå, ïðè÷åì ïåðâûé ñèìâîë ïîñëå ïðîâåäåíèÿ íàä íèì ëîãè÷åñêîé îïåðàöèè «È» èëè «ÈËÈ» ïåðåõîäèò âî âòîðîé ñèìâîë. Ïðèìèòèâ CASCADE ïîä-
217
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL äåðæèâàåòñÿ òîëüêî äëÿ óñòðîéñòâ ñåìåéñòâà FLEX8000. Äëÿ äðóãèõ óñòðîéñòâ îí èãíîðèðóåòñÿ. Ïðè èñïîëüçîâàíèè ïðèìèòèâà CASCADE íóæíî ñîáëþäàòü ñëåäóþùèå ïðàâèëà: • Ïðèìèòèâ CASCADE ìîæåò ôîðìèðîâàòü ñèãíàë äëÿ ëîãè÷åñêîé ÿ÷åéêè «È» èëè «ÈËÈ» èëè áûòü çàïèòàííûì îäíîé-åäèíñòâåííîé ñõåìîé «È» èëè «ÈËÈ». • Îáðàùåííàÿ ëîãè÷åñêàÿ ñõåìà «ÈËÈ» ðàññìàòðèâàåòñÿ êàê ñõåìà «È», è íàîáîðîò. Ëîãè÷åñêèìè ýêâèâàëåíòàìè ñõåìû «È» ÿâëÿþòñÿ BAND, BNAND è NOR. Ëîãè÷åñêèìè ýêâèâàëåíòàìè ñõåìû «ÈËÈ» ÿâëÿþòñÿ BOR, BNOR and NAND. • Äâà ïðèìèòèâà CASCADE íå ìîãóò ôîðìèðîâàòü ñèãíàë äëÿ îäíîé è òîé æå ëîãè÷åñêîé ñõåìû. • Ïðèìèòèâ CASCADE íå ìîæåò ôîðìèðîâàòü ñèãíàë äëÿ ëîãè÷åñêîé ñõåìû XOR. • Ïðèìèòèâ CASCADE íå ìîæåò ôîðìèðîâàòü ñèãíàë äëÿ ïðèìèòèâà âûâîäà OUTPUT èëè OUTPUTC, èëè ðåãèñòðà. •  ñîîòâåòñòâèè ñ ïðàâèëàìè Äå Ìîðãàíà (De Morgan) îá èíâåðñèè äëÿ êàñêàäèðîâàííûõ ëîãè÷åñêèõ ñõåì «È» èëè «ÈËÈ» íóæíî, ÷òîáû âñå ïðèìèòèâû â êàñêàäèðîâàííîé öåïî÷êå áûëè îäíîãî è òîãî æå òèïà. Kàñêàäèðîâàííàÿ ëîãè÷åñêàÿ ñõåìà «È» íå ìîæåò ôîðìèðîâàòü ñèãíàë äëÿ êàñêàäèðîâàííîé ñõåìû «ÈËÈ», è íàîáîðîò. Åñëè ðàçðàáîò÷èê èñïîëüçóåò ïðèìèòèâ CASCADE íåêîððåêòíî, îí èãíîðèðóåòñÿ è êîìïèëÿòîð âûäàåò ñîîòâåòñòâóþùåå ïðåäóïðåæäàþùåå ñîîáùåíèå. Âû ìîæåòå ïîçâîëèòü êîìïèëÿòîðó àâòîìàòè÷åñêè âñòàâëÿòü è óáèðàòü ïðèìèòèâû CASCADE âî âðåìÿ ñèíòåçà ëîãèêè, äëÿ ýòîãî íóæíî âûáðàòü îïöèþ ëîãèêè ñ ïåðåíîñîì ïî öåïî÷êå Cascade Chain èëè ñòèëü ñèíòåçà ëîãèêè, êîòîðûé âêëþ÷àåò ýòó îïöèþ. Ïðèìèòèâ EXP (ðàñøèðèòåëü) Ïðîòîòèï ôóíêöèè: FUNCTION EXP (in) RETURNS (out); Ðàñøèðèòåëüíûé áóôåð EXP îïðåäåëÿåò íåîáõîäèìîñòü äîïîëíèòåëüíîãî ìåñòà ïðè âû÷èñëåíèè ïðîèçâåäåíèÿ â ïðîåêòå. Ïðîèçâåäåíèå èç ðàñøèðèòåëÿ â óñòðîéñòâå èíâåðòèðóåòñÿ. Ïðèìèòèâ EXP ïîääåðæèâàåòñÿ òîëüêî ñåìåéñòâîì óñòðîéñòâ MAX5000/EPS464 è MAX7000.  äðóãèõ óñòðîéñòâàõ îí ðàññìàòðèâàåòñÿ êàê ëîãè÷åñêàÿ ñõåìà «ÍÅ» (NOT). Äëÿ êàæäîãî îòäåëüíîãî óñòðîéñòâà
218
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL íóæíî îçíàêîìèòüñÿ ñ åãî òåõíè÷åñêèì ïàñïîðòîì, ÷òîáû óçíàòü, êàê êîíêðåòíîå óñòðîéñòâî èñïîëüçóåò ëîãè÷åñêèå ÿ÷åéêè è ðàñøèðèòåëüíûå áóôåðû äëÿ âû÷èñëåíèÿ ïðîèçâåäåíèé. Áóäåò èëè íåò èñïîëüçîâàòüñÿ ðàñøèðèòåëü äëÿ ïðîèçâåäåíèÿ, çàâèñèò îò ïîëÿðíîñòè ëîãèêè, òðåáóåìîé âû÷èñëÿåìûìè ôóíêöèÿìè. Íàïðèìåð, åñëè áóôåð EXP ïèòàåò äâå ëîãè÷åñêèå ñõåìû «È» (ò.å. ëîãè÷åñêîå óìíîæåíèå), à âòîðàÿ ñõåìà «È» èìååò èíâåðòèðîâàííûé âõîä, òî ïðèìèòèâ EXP, ïèòàþùèé èíâåðòèðîâàííûé âõîä, âî âðåìÿ ëîãè÷åñêîãî ñèíòåçà óáèðàåòñÿ, ñîçäàâàÿ, òàêèì îáðàçîì, ïîëîæèòåëüíóþ ëîãèêó. Ïðèìèòèâ EXP, ïèòàþùèé íåèíâåðòèðîâàííûé âõîä, íå óáèðàåòñÿ, è äëÿ ðåàëèçàöèè ëîãèêè èñïîëüçóåòñÿ ðàñøèðèòåëü äëÿ ïðîèçâåäåíèÿ. Îáû÷íî ëîãè÷åñêèé ñèíòåçàòîð îïðåäåëÿåò, êóäà âñòàâëÿòü è îòêóäà óáèðàòü áóôåðû. Ôèðìà «Altera» ðåêîìåíäóåò, ÷òîáû òîëüêî îïûòíûå ðàçðàáîò÷èêè èñïîëüçîâàëè ïðèìèòèâ EXP â ñâîèõ ïðîåêòàõ.  óñòðîéñòâàõ, ñîäåðæàùèõ ìíîãî ëîãè÷åñêèõ áëîêîâ (LAB), âûõîä áóôåðà EXP ìîæåò ôîðìèðîâàòü ñèãíàë òîëüêî â ïðåäåëàõ îäíîãî LAB. Ïðèìèòèâ EXP äóáëèðóåòñÿ äëÿ êàæäîãî LAB, ãäå îí òðåáóåòñÿ. Åñëè ïðîåêò ñîäåðæèò ìíîãî ðàñøèðèòåëüíûõ áóôåðîâ, ëîãè÷åñêèé ñèíòåçàòîð ìîæåò ïðåîáðàçîâàòü èõ â áóôåðû LCELL, ÷òîáû ñáàëàíñèðîâàòü èñïîëüçîâàíèå ðàñøèðèòåëÿ äëÿ ïðîèçâåäåíèÿ è ëîãè÷åñêîé ÿ÷åéêè. Íå èñïîëüçóéòå ïðèìèòèâû EXP äëÿ ñîçäàíèÿ íàìåðåííîé çàäåðæêè èëè àñèíõðîííîãî èìïóëüñà. Çàäåðæêà ýòèõ ýëåìåíòîâ èçìåíÿåòñÿ ñ òåìïåðàòóðîé, íàïðÿæåíèåì ïèòàíèÿ è ïðè ïðîöåññàõ èçãîòîâëåíèÿ óñòðîéñòâà, ïîýòîìó ìîæåò âîçíèêíóòü ðåæèì ñîñòÿçàíèÿ è ïîëó÷èòñÿ íåíàäåæíàÿ ñõåìà. Ïðèìèòèâ GLOBAL (ãëîáàëüíûé) Ïðîòîòèï ôóíêöèè: FUNCTION GLOBAL (in) RETURNS (out); Áóôåð GLOBAL óêàçûâàåò, ÷òî ñèãíàë (signal) äîëæåí èñïîëüçîâàòü ãëîáàëüíûé ñèíõðîííûé ñèãíàë Clock, Clear, Preset èëè Output Enable âìåñòî ñèãíàëîâ, ñãåíåðèðîâàííûõ âíóòðåííåé ëîãèêîé èëè ïîñòóïàþùèõ ÷åðåç îáû÷íûå âûâîäû âõîä/âûõîä. Ãëîáàëüíûå ñèãíàëû èñïîëüçóþòñÿ â ðàçëè÷íûõ ñåìåéñòâàõ óñòðîéñòâ â ñîîòâåòñòâèè ñ èõ ñèíõðîíèçàöèåé. Åñëè âõîäíîé âûâîä ôîðìèðóåò ñèãíàë íåïîñðåäñòâåííî íà âõîä ïðèìèòèâà GLOBAL, òî âûõîä ïðèìèòèâà GLOBAL ìîæåò áûòü èñïîëüçîâàí, ÷òîáû ôîðìèðîâàòü ñèãíàë íà âõîäû Clock, Clear, Preset èëè Output Enable ê ïðèìèòèâó. Äîëæíî ñóùåñòâîâàòü íåïîñðåäñòâåííîå ñîåäèíåíèå îò âûõîäà GLOBAL êî âõîäó ðåãèñòðà èëè áóôåðà TRI. Åñëè áóôåð GLOBAL
219
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL ôîðìèðóåò ñèãíàë, ÿâëÿþùèéñÿ âõîäíûì ñèãíàëîì Output Enable áóôåðà TRI, òî ìîæåò ïîòðåáîâàòüñÿ ëîãè÷åñêàÿ ñõåìà «ÍÅ». Îäèí âõîä ìîæåò ïðîõîäèòü ÷åðåç GLOBAL, ïåðåä òåì êàê ôîðìèðîâàòü ñèãíàë äëÿ âõîäà ðåãèñòðà ñèãíàëîâ Clock, Clear èëè Preset èëè âõîä áóôåðà TRI äëÿ ñèãíàëà Output Enable. Ãëîáàëüíûå ñèíõðîñèãíàëû ðàñïðîñòðàíÿþòñÿ áûñòðåå, ÷åì àñèíõðîííûå (array) ñèãíàëû, è ìîãóò îñâîáîæäàòü ðåñóðñû óñòðîéñòâà äëÿ ðåàëèçàöèè äðóãîé ëîãèêè. Äëÿ îñóùåñòâëåíèÿ ñèíõðîíèçàöèè ÷àñòè èëè âñåãî ïðîåêòà ñëåäóåò èñïîëüçîâàòü ïðèìèòèâ GLOBAL. Äëÿ òîãî ÷òîáû ïðîâåðèòü, èìåþò ëè ðåãèñòðû ãëîáàëüíóþ ñèíõðîíèçàöèþ, íóæíî ïðîñìîòðåòü ôàéë îò÷åòà Report File îáðàáàòûâàåìîãî ïðîåêòà. Åñëè âàø ïðîåêò óñòðîéñòâà MAX5000 ñî÷åòàåò àñèíõðîííûé ðåæèì ðàáîòû è ðåæèì ñ ãëîáàëüíîé ñèíõðîíèçàöèåé, à ìîäóëü êîìïèëÿòîðà Fitter íå ìîæåò âûáðàòü ïîäõîäÿùèé, ïðîáëåìà ìîæåò áûòü ðåøåíà óäàëåíèåì áóôåðà GLOBAL. Åñëè àíàëîãè÷íàÿ ïðîáëåìà âñòðåòèòñÿ âàì â ïðîåêòå MAX7000, çàìåíèòå àñèíõðîííûé ðåæèì ðåæèìîì ñ ãëîáàëüíîé ñèíõðîíèçàöèåé.  êà÷åñòâå àëüòåðíàòèâû èñïîëüçîâàíèþ ïðèìèòèâà GLOBAL ðàçðàáîò÷èê ìîæåò ïðåäîñòàâèòü êîìïèëÿòîðó àâòîìàòè÷åñêè âûáèðàòü, êàêèì áóäåò ñóùåñòâóþùèé ñèãíàë ïðîåêòà, ãëîáàëüíûì Clock, Clear, Preset èëè Output Enable, ïîñðåäñòâîì êîìàíäû Logic Synthesis. Ïðèìèòèâ LCELL Ïðîòîòèï ôóíêöèè: FUNCTION LCELL (in) RETURNS (out); Áóôåð LCELL âûäåëÿåòñÿ äëÿ ëîãè÷åñêîé ÿ÷åéêè ïðîåêòà. Áóôåð LCELL âûðàáàòûâàåò èñòèííîå çíà÷åíèå è äîïîëíåíèå ëîãè÷åñêîé ôóíêöèè è äåëàåò èõ äîñòóïíûìè äëÿ âñåé ëîãèêè óñòðîéñòâà. Äëÿ îáðàòíîé ñîâìåñòèìîñòè ñ áîëåå ðàííèìè âåðñèÿìè ñèñòåìû MAX+PLUS II èìååòñÿ áóôåð MCELL, ôóíêöèîíàëüíî òàêîé æå, êàê è áóôåð LCELL.  íîâûõ ïðîåêòàõ ñëåäóåò èñïîëüçîâàòü òîëüêî áóôåð LCELL. Áóôåð LCELL âñåãäà çàíèìàåò îäíó ëîãè÷åñêóþ ÿ÷åéêó. Îí íå óäàëÿåòñÿ èç ïðîåêòà âî âðåìÿ ëîãè÷åñêîãî ñèíòåçà. Íå èñïîëüçóéòå ïðèìèòèâû LCELL äëÿ ñîçäàíèÿ çàäåðæêè èëè àñèíõðîííîãî èìïóëüñà. Çàäåðæêà ýòèõ ýëåìåíòîâ èçìåíÿåòñÿ ñ òåìïåðàòóðîé, íàïðÿæåíèåì ïèòàíèÿ è â ïðîöåññå èçãîòîâëåíèÿ èçäåëèÿ, ïîýòîìó ìîãóò âîçíèêíóòü ðåæèìû ñîñòÿçàíèé.
220
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Ñ ïîìîùüþ êîìàíäû êîìïèëÿòîðà Automatic LCELL Insertion ðàçðàáîò÷èê ìîæåò äàòü óêàçàíèå êîìïèëÿòîðó àâòîìàòè÷åñêè âñòàâëÿòü áóôåðû LCELL â ïðîåêò, åñëè ýòî íåîáõîäèìî äëÿ òðàññèðîâêè ïðîåêòà â òîì ñëó÷àå, êîãäà íàçíà÷åíèÿ îïðåäåëåííûõ ïîëüçîâàòåëåì ðåñóðñîâ è èìåþùèåñÿ ó óñòðîéñòâà íå îáåñïå÷èâàþò ïîäãîíêè ìîíòàæà â ïðîåêòå. Ïðèìèòèâ SOFT Ïðîòîòèï ôóíêöèè: FUNCTION SOFT (in) RETURNS (out); Áóôåð SOFT óñòàíàâëèâàåò, ÷òî ëîãè÷åñêàÿ ÿ÷åéêà ìîæåò ïîíàäîáèòüñÿ â ïðîåêòå. Ïðè îáðàáîòêå ïðîåêòà ïðîöåññîðîì ëîãè÷åñêèé ñèíòåçàòîð èññëåäóåò ëîãèêó, ïèòàþùóþ ïðèìèòèâ, è îïðåäåëÿåò, íóæíà ëè ëîãè÷åñêàÿ ÿ÷åéêà. Åñëè íóæíà, áóôåð SOFT ïðåîáðàçóåòñÿ â LCELL, â ïðîòèâíîì ñëó÷àå SOFT óäàëÿåòñÿ. Åñëè êîìïèëÿòîð ïîêàçûâàåò, ÷òî ïðîåêò ñëèøêîì ñëîæíûé, ðàçðàáîò÷èê ìîæåò ðåäàêòèðîâàòü ïðîåêò, âñòàâëÿÿ áóôåðû SOFT äëÿ ïðåäîòâðàùåíèÿ ðàñøèðåíèÿ ëîãèêè. Íàïðèìåð, ðàçðàáîò÷èê ìîæåò äîáàâèòü áóôåð SOFT â êîìáèíàòîðíûé âûõîä ìàêðîôóíêöèè äëÿ ðàçâÿçêè äâóõ êîìáèíàòîðíûõ öåïåé. Ðàçðàáîò÷èê ìîæåò òàêæå âêëþ÷èòü ëîãè÷åñêóþ îïöèþ SOFT Buffer Insertion â ñòèëè ëîãè÷åñêîãî ñèíòåçà ïî óìîë÷àíèþ â ïðîåêò, ÷òîáû êîìïèëÿòîð âñòàâëÿë áóôåðû SOFT àâòîìàòè÷åñêè. Ïðèìèòèâ TRI Ïðîòîòèï ôóíêöèè: FUNCTION TRI (in, oe) RETURNS (out); Ïðèìèòèâ TRI ïðåäñòàâëÿåò ñîáîé òðåõñòàáèëüíûé áóôåð ñ ñèãíàëàìè âõîäíûì, âûõîäíûì è Output Enable (îòïèðàíèå âûõîäà). Åñëè óðîâåíü ñèãíàëà Output Enable ÂÛÑÎÊÈÉ, âûõîä áóäåò óïðàâëÿòüñÿ âõîäîì. Ïðè ÍÈÇKÎÌ óðîâíå ñèãíàëà Output Enable âûõîä ïåðåõîäèò â ñîñòîÿíèå âûñîêîãî èìïåäàíñà, ÷òî ïîçâîëÿåò èñïîëüçîâàòü I/O êàê âõîäíîé âûâîä. Ïî óìîë÷àíèþ ñèãíàë Output Enable óñòàíàâëèâàåòñÿ â çíà÷åíèå VCC. Åñëè ñèãíàë Output Enable áóôåðà TRI ïîäñîåäèíÿåòñÿ ê VCC èëè ëîãè÷åñêîé ôóíêöèè, êîòîðàÿ áóäåò ìèíèìèçèðîâàòü äî èñòèíû, áóôåð TRI ìîæåò áûòü ïðåîáðàçîâàí â áóôåð SOFT âî âðåìÿ ëîãè÷åñêîãî ñèíòåçà. Ïðè èñïîëüçîâàíèè áóôåðà TRI íóæíî ñîáëþäàòü ñëåäóþùèå ïðàâèëà: • Áóôåð TRI ìîæåò óïðàâëÿòü òîëüêî îäíèì âûâîäîì BIDIR èëè BIDIRC. Ðàçðàáîò÷èê äîëæåí èñïîëüçîâàòü âûâîä BIDIR èëè BIDIRC, åñëè ïîñëå áóôåðà TRI ïðèìåíÿåòñÿ îáðàòíàÿ ñâÿçü. Åñëè áóôåð TRI ôîðìèðóåò ñèãíàë íà ëîãèêó, îí äîëæåí òàêæå ôîðìèðîâàòü ñèãíàë äëÿ BIDIR
221
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL èëè BIDIRC. Åñëè îí ôîðìèðóåò ñèãíàë íà âûâîä BIDIR èëè BIDIRC, îí íå ìîæåò ôîðìèðîâàòü ñèãíàë íà êàêèå-ëèáî äðóãèå âûõîäû. • Åñëè ñèãíàë Output Enable íå ïðèâÿçûâàåòñÿ ê VCC, áóôåð TRI äîëæåí ôîðìèðîâàòü ñèãíàë äëÿ âûâîäîâ OUTPUT, OUTPUTC, BIDIR èëè BIDIRC. Âíóòðåííèå ñèãíàëû ìîãóò íå áûòü òðåõñòàáèëüíûìè. Ïðèìèòèâû FLIPFLOP (áèñòàáèëüíûé ìóëüòèâèáðàòîð) & LATCH (òðèããåð-çàùåëêà) DFF SRFF DFFE SRFFE JKFF TFF JKFFE TFFE LATCH Ïðèìèòèâû LATCH îïèñûâàþò D-òðèããåð, óïðàâëÿåìûé óðîâíÿìè òàêòîâûõ ñèãíàëîâ. Kîãäà âõîäíîé ñèãíàë ðàçðåøåíèÿ D-òðèããåðà ENA (Latch Enable) èìååò ÂÛÑÎKÈÉ óðîâåíü, D-òðèããåð ïðîïóñêàåò ñèãíàë îò D ê Q. Åñëè âõîä ENA èìååò ÍÈÇKÈÉ óðîâåíü, ñîõðàíÿåòñÿ ñîñòîÿíèå Q, íåñìîòðÿ íà âõîäíîé ñèãíàë D. Äëÿ óñòðîéñòâ, íå ïîääåðæèâàþùèõ ñèãíàë Latch Enable, ëîãè÷åñêèé ñèíòåç ãåíåðèðóåò ëîãè÷åñêèå óðàâíåíèÿ, ñîäåðæàùèå D-òðèããåðû ñ ñèãíàëàìè Latch Enable. Ýòè ëîãè÷åñêèå óðàâíåíèÿ êîððåêòíî ýìóëèðóþò ëîãèêó, çàäàííóþ â âàøåì ïðîåêòå. Âñå æäóùèå ìóëüòèâèáðàòîðû (Flipflop) ïåðåõîäÿò â ðàáî÷åå ñîñòîÿíèå ïî ïîëîæèòåëüíîìó ïåðåïàäó ñèãíàëà. Ïðèìèòèâ LATCH Ïðîòîòèï ôóíêöèè: FUNCTION LATCH (D, ENA) RETURNS (Q); ENA
Âõîäû D
Âûõîä Q
L
X
Q 0*
H H
L H
L H
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ DFF (D-òðèããåð òèïà Flipflop) Ïðîòîòèï ôóíêöèè: FUNCTION DFF (D, CLK, CLRN, PRN) RETURNS (Q);
222
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Âõîäû CLK X X X
D X X X L
Âûõîä Q H L Çàïðåùåííîå ñîñòîÿíèå L
PRN L H L H
CLRN H L L H
H
H
H
H
H
H
L
X
Q0 *
H
H
H
X
Q0
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ DFFE Ïðîòîòèï ôóíêöèè: FUNCTION DFFE (D, CLK, CLRN, PRN, ENA) RETURNS (Q); CLRN L H L H
PRN H L L H
Âõîäû ENA X X X L
CLK X X X X
Âûõîä Q L H Çàïðåùåííîå ñîñòîÿíèå Q 0*
H
H
H
H
H
H
L
L
H L
H Q 0*
H
H
X
X
D X X X X
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ TFF (Òðèããåð Ò-òèïà, Flipflop) Ïðîòîòèï ôóíêöèè: FUNCTION TFF (T, CLK, CLRN, PRN) RETURNS (Q); Âõîäû CLK X X X
CLRN H L L
H
H
L
Q 0*
H
H
H
Áèñòàáèëüíîå ñîñòîÿíèå
H
H
X
Q 0*
L
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
223
T X X X
Âûõîä Q H L Çàïðåùåííîå ñîñòîÿíèå
PRN L H L
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Ïðèìèòèâ TFFE Ïðîòîòèï ôóíêöèè: FUNCTION TFFE (T, CLK, CLRN, PRN, ENA) RETURNS (Q); CLRN L H L
PRN H L L
Âõîäû ENA X X X
T X X X
CLK X X X
Âûõîä Q L H Çàïðåùåííîå ñîñòîÿíèå Q 0*
H
H
L
X
Õ
H
H
H
L
Q 0*
H
H
H
H
Áèñòàáèëüíîå ñîñòîÿíèå
H
H
X
X
Q 0*
L
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ JKFF (Òðèããåð JK-òèïà, Flipflop) Ïðîòîòèï ôóíêöèè: FUNCTION JKFF (J, K, CLK, CLRN, PRN) RETURNS (Q); Âõîäû
Âûõîä
PRN
CLRN
CLK
J
K
Q
L
H
X
X
X
H
H
L
X
X
X
L
L
L
X
X
X
Çàïðåùåííîå ñîñòîÿíèå
H
H
L
X
X
Q 0*
H
H
L
L
Q 0*
H
H
H
L
H
H
H
L
H
L
H
H
H
H
Áèñòàáèëüíîå ñîñòîÿíèå
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ JKFFE Ïðîòîòèï ôóíêöèè: FUNCTION JKFFE (J, K, CLK, CLRN, PRN, ENA) RETURNS (Q);
224
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Âõîäû CLRN CLK H X L X L X
ENA X X X
PRN L H L
X
H
H
H
H
H
H
H
H
H
H
H
H
H
H
L
H
H
L
X
J X X X
K X X X
X
X
Âûõîä Q H L Çàïðåùåííîå ñîñòîÿíèå Q 0*
L
L
Q 0*
H
L
H
L
H
L
H
H
Áèñòàáèëüíîå ñîñòîÿíèå
X
X
Q 0*
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ SRFF (Òðèããåð SR-òèïà, Flipflop) Ïðîòîòèï ôóíêöèè: FUNCTION SRFF (S, R, CLK, CLRN, PRN) RETURNS (Q); PRN L H L
CLRN H L L
Âõîäû CLK X X X
S X X X
R X X X
Âûõîä Q H L Çàïðåùåííîå ñîñòîÿíèå
H
H
L
X
X
Q 0*
H
H
L
L
Q 0*
H
H
H
L
H
H
H
L
H
L
H
H
H
H
Áèñòàáèëüíîå ñîñòîÿíèå
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
Ïðèìèòèâ SRFFE Ïðîòîòèï ôóíêöèè: FUNCTION SRFFE (S, R, CLK, CLRN, PRN, ENA) RETURNS (Q);
225
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL
S X X X X
R X X X X
Âûõîä Q H L Çàïðåùåííîå ñîñòîÿíèå Q 0*
H
L
L
Q 0*
H
H
H
L
H
H
H
L
H
L
H
H
H
H
H
Áèñòàáèëüíîå ñîñòîÿíèå
L
H
H
X
X
Q 0*
ENA X X X X
PRN L H L H
H
H
H H
Âõîäû CLRN CLK H X L X L X H L
X
* Q0 = óðîâåíü Q ïåðåä òàêòîâûì èìïóëüñîì.
3.8.14. Ïîðòû Ïîðò ïðåäñòàâëÿåò ñîáîé âõîä èëè âûõîä ïðèìèòèâà, ìàêðîôóíêöèè èëè öèôðîâîãî àâòîìàòà. Ïîðò ìîæåò ïîÿâëÿòüñÿ â òðåõ ìåñòàõ ôàéëà: • ïîðò, ÿâëÿþùèéñÿ âõîäîì èëè âûõîäîì òåêóùåãî ôàéëà, îáúÿâëÿåòñÿ â ñåêöèè ïîäïðîåêòà Subdesign; • ïîðò, ÿâëÿþùèéñÿ âõîäîì èëè âûõîäîì òåêóùåãî ôàéëà, ìîæåò áûòü íàçíà÷åí (ïðèñâîåí) âûâîäó, ëîãè÷åñêîìó ýëåìåíòó èëè ÷èïó â ñåêöèè ïðîåêòà Design; • ïîðò, ÿâëÿþùèéñÿ âõîäîì èëè âûõîäîì ïðèìåðà (Instance) ïðèìèòèâà èëè ôàéë ïðîåêòà áîëåå íèçêîãî óðîâíÿ, èñïîëüçóåòñÿ â ëîãè÷åñêîé ñåêöèè Logic. 3.8.14.1. Ïîðòû òåêóùåãî ôàéëà Ïîðò, ÿâëÿþùèéñÿ âõîäîì èëè âûõîäîì òåêóùåãî ôàéëà, îáúÿâëÿåòñÿ â ñåêöèè ïîäïðîåêòà Subdesign ñëåäóþùèì îáðàçîì: : [ = ] Åñòü ñëåäóþùèå òèïû ïîðòîâ: INPUT MACHINE INPUT OUTPUT MACHINE OUTPUT BIDIR Åñëè TDF-ôàéë ÿâëÿåòñÿ ôàéëîì âåðõíåãî óðîâíÿ èåðàðõèè, èìÿ ïîðòà ÿâëÿåòñÿ ñèíîíèìîì èìåíè âûâîäà. Äëÿ ïîðòîâ òèïà INPUT è BIDIR ìî-
226
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL æåò áûòü îïðåäåëåíî ïî óìîë÷àíèþ çíà÷åíèå VCC èëè GND.  ñëó÷àå èñïîëüçîâàíèÿ ïðèìåðà äàííîãî TDF â ôàéëå áîëåå âûñîêîãî óðîâíÿ ýòî çíà÷åíèå èñïîëüçóåòñÿ òîëüêî åñëè ïîðò îñòàåòñÿ íåïîäêëþ÷åííûì. Âõîäíûå è âûõîäíûå ïîðòû, îáúÿâëåííûå â ñåêöèè ïîäïðîåêòà Subdesign, ìîãóò áûòü íàçíà÷åíû âûâîäàì, ëîãè÷åñêèì ýëåìåíòàì, ÷èïàì, êëèêàì è ëîãè÷åñêèì îïöèÿì ïðè íàçíà÷åíèè ðåñóðñîâ Resource Assignment â ñåêöèè ïðîåêòà Design. Íàçíà÷åíèÿ âûâîäîâ ìîãóò áûòü ñäåëàíû òîëüêî íà âåðõíåì óðîâíå èåðàðõèè. Ëþáûå íàçíà÷åíèÿ âûâîäîâ íà áîëåå íèçêèõ èåðàðõè÷åñêèõ óðîâíÿõ èãíîðèðóþòñÿ.  ïðèâîäèìîì íèæå ïðèìåðå â ñåêöèè ïîäïðîåêòà Subdesign îáúÿâëåíû âõîäíûå, âûõîäíûå è äâóíàïðàâëåííûå ïîðòû, à â ñåêöèè ïðîåêòà Design äâà âõîäíûõ ïîðòà íàçíà÷àþòñÿ (ïðèñâàèâàþòñÿ) âûâîäàì. DESIGN IS top BEGIN DEVICE IS AUTO BEGIN foo @ 1, bar @ 2 : INPUT; END; END; SUBDESIGN top ( foo, bar, clk1, clk2 : INPUT = VCC; % VCC это значение порта по умолчанию % a0, a1, a2, a3, a4 : OUTPUT; b[7..0] : BIDIR; ) Ìåæäó ôàéëàìè TDF, (GDF-ôàéë) èëè WDF ìîæíî îñóùåñòâëÿòü èìïîðòèðîâàíèå è ýêñïîðòèðîâàíèå öèôðîâûõ àâòîìàòîâ, åñëè ðàçðàáîò÷èê îïðåäåëèò âõîäíîé èëè âûõîäíîé ïîðò êàê MACHINE INPUT èëè MACHINE OUTPUT â ñåêöèè ïîäïðîåêòà Subdesign.  ïðîòîòèïå ôóíêöèè (Function Prototype), îïèñûâàþùåì ýòîò ôàéë, äîëæíî áûòü óêàçàíî, êàêèå ïîðòû ÿâëÿþòñÿ öèôðîâûìè àâòîìàòàìè ñ ïàìÿòüþ. Ïîðòû MACHINE INPUT è MACHINE OUTPUT ìîæíî èñïîëüçîâàòü òîëüêî â ôàéëàõ áîëåå íèçêèõ óðîâíåé â èåðàðõèè ïðîåêòà.
227
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL 3.8.15.2. Ïîðòû ïðèìåðîâ (INSTANCE) Ñîåäèíåíèå ïîðòà, ÿâëÿþùåãîñÿ âõîäîì èëè âûõîäîì ïðèìåðà (Instance) â ôàéë ïðîåêòà áîëåå íèçêîãî óðîâíÿ èëè ïðèìèòèâà, îñóùåñòâëÿåòñÿ â ëîãè÷åñêîé ñåêöèè Logic. Äëÿ ñîåäèíåíèÿ ïðèìèòèâà, ìàêðîôóíêöèè èëè öèôðîâîãî àâòîìàòà ñ äðóãèìè ÷àñòÿìè ôàéëà TDF íóæíî âñòàâèòü ïðèìåð (Instance) ïðèìèòèâà èëè ìàêðîôóíêöèè êàê ññûëêó ñ êëþ÷åâûì ñëîâîì in-line èëè äàòü â êîíñòðóêöèè îáúÿâëåíèÿ ïðèìåðà Instance, èëè îáúÿâèòü öèôðîâîé àâòîìàò â êîíñòðóêöèè, à çàòåì èñïîëüçîâàòü ïîðòû ôóíêöèè â ëîãè÷åñêîé ñåêöèè. Åñëè ðàçðàáîò÷èê äëÿ âñòàâêè ïðèìåðà ïðèìèòèâà èëè ìàêðîôóíêöèè èñïîëüçóåò ññûëêó ñ êëþ÷åâûì ñëîâîì in-line, âàæåí ïîðÿäîê ïåðå÷èñëåíèÿ ïîðòîâ, íî íå èõ èìåíà. Ýòîò ïîðÿäîê îïðåäåëÿåòñÿ â ïðîòîòèïå ôóíêöèè äëÿ ïðèìèòèâà èëè ìàêðîôóíêöèè. Åñëè äëÿ âñòàâêè ïðèìåðà ðàçðàáîò÷èê èñïîëüçóåò êîíñòðóêöèþ îáúÿâëåíèÿ ïðèìåðà Instance, âàæíû èìåíà ïîðòîâ, à íå ïîðÿäîê èõ ïåðå÷èñëåíèÿ. Èìåíà ïîðòîâ äàþòñÿ â ñëåäóþùåì ôîðìàòå: . Çäåñü ïðåäñòàâëÿåò ñîáîé îïðåäåëåííîå ïîëüçîâàòåëåì èìÿ ôóíêöèè, à ñîâïàäàåò ñ èìåíåì ïîðòà, îáúÿâëåííîãî â ëîãè÷åñêîé ñåêöèè ôàéëà TDF áîëåå íèçêîãî óðîâíÿ èëè ñîâïàäàåò ñ èìåíåì âûâîäà â ôàéëå ïðîåêòà äðóãîãî òèïà. Ýòî ÿâëÿåòñÿ ñèíîíèìîì èìåíè øòûðåâîãî âûâîäà äëÿ ñèìâîëà, êîòîðûé ïðåäñòàâëÿåò ïðèìåð äàííîãî ôàéë ïðîåêòà â ôàéëå (GDF-ôàéë).  ïðèâîäèìîì íèæå ïðèìåðå òðèããåð òèïà D îáúÿâëåí êàê ïåðåìåííàÿ reg â ñåêöèè îáúÿâëåíèÿ ïåðåìåííûõ VARIABLE è çàòåì èñïîëüçóåòñÿ â ëîãè÷åñêîé ñåêöèè. VARIABLE reg : DFF; BEGIN reg.clk = clk reg.d = d out = reg.q END;
228
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL Âñå ïîñòàâëÿåìûå ôèðìîé «Altera» ïðèìèòèâû è ìàêðîôóíêöèè èìåþò ïðåäîïðåäåëåííûå èìåíà ïîðòîâ (øòûðåâûå âûâîäû), êîòîðûå îïèñûâàþòñÿ â ïðîòîòèïå ôóíêöèè. Íàèáîëåå øèðîêî èñïîëüçóåìûå èìåíà ïîðòîâ ïðèâåäåíû â Òàáë. 3.8. Òàáëèöà 3.8. Èìåíà ïîðòîâ Èìÿ ïîðòà .q .d .t .j .k .s .r .clk
Îïèñàíèå
Âûõîä áèñòàáèëüíîãî ìóëüòèâèáðàòîðà (Flipflop) èëè òðèããåðà-çàùåëêè (Latch) Èíôîðìàöèîííûé âõîä â òðèããåð D-òèïà (Flipflop) èëè òðèããåð-çàùåëêó (Latch) Âõîä ïåðåêëþ÷åíèÿ (Toggle) òðèããåðà T-òèïà (Flipflop) Âõîä J òðèããåðà J-K-òèïà (Flipflop) Âõîä K òðèããåðà J-K-òèïà (Flipflop) Âõîä S òðèããåðà S-R-òèïà (Flipflop) Âõîä R òðèããåðà S-R-òèïà (Flipflop) Âõîä òàêòîâîãî ñèãíàëà (Clock) òðèããåðà (Flipflop) Âõîä îòïèðàíèÿ òàêòîâîãî ñèãíàëà (Clock Enable) äëÿ òðèããåðà, îòïèðàíèÿ çàùåëêè .ena (Latch Enable) è îòïèðàíèÿ öèôðîâîãî àâòîìàòà (Enable) .prn Âõîä óñòàíîâêè òðèããåðà (Flipflop) Preset ñ íèçêèì àêòèâíûì óðîâíåì .clrn Âõîä ñáðîñà òðèããåðà (Flipflop) Clear ñ íèçêèì àêòèâíûì óðîâíåì .reset Âõîä öèôðîâîãî àâòîìàòà Reset ñ âûñîêèì àêòèâíûì óðîâíåì .oe Âõîä Output Enable (îòïèðàíèå âûõîäà) ïðèìèòèâà TRI .in Îñíîâíîé âõîä ïðèìèòèâîâ TRI, SOFT, GLOBAL è LCELL .out Âûõîä ïðèìèòèâîâ TRI, SOFT, GLOBAL è LCELL
3.9. Ñèíòàêñèñ ÿçûêà AHDL 3.9.1. Ëåêñè÷åñêèå ýëåìåíòû Ñèíòàêñèñ ëåêñè÷åñêèõ ýëåìåíòîâ ÿçûêà AHDL îïèñàí íèæå ñ èñïîëüçîâàíèåì ôîðìóë ÁýêóñàÍàóðà. ::= B | Q | H | O | X | b | q | h | o | x ::= < îñíîâàíèå ñèñòåìû ñ÷èñëåíèÿ > " { }" ::= | ::= :1:2 ::= | %% ::= % { < ñèìâîë êîììåíòàðèÿ > } %
229
ßçûê îïèñàíèÿ àïïàðàòóðû AHDL | { < ñèìâîë êîììåíòàðèÿ > } ::= :1:10 ::= ::= :1:3 ::= 0 | 1 |... | 9 ::= ():1:8 | ' ():1:8 ' ::= ::= A |... | Z | a |... | z ::= LC :1:3 | LC :1:2 | MC :1:3 | MC :1:2 ::= | | _ ::= | ::= ( | /):1:32 | ' ( | /):1:32 ' < ñèìâîë èìåíè â êàâû÷êàõ >::= | ::= ::= %b %d", increment, load_data, global_reset, d, q, q); endmodule // stumulus Íà÷íåì ïîäðîáíîå ðàññìîòðåíèå ýòîãî ïðèìåðà. module counter4_bit(q, d, increment, load_data, glob al_reset, clock); output [3:0] q; input [3:0] d; input load_data, global_reset, clock, increment; wire t1, t2, t3; // internal wires wire see12, reset; // internal wires Kàê íàì óæå èçâåñòíî, ïåðâûå ñòðîêè ìîäóëÿ ñîäåðæàò åãî èìÿ è îáúÿâëåíèå ïîðòîâ. Âûõîä ñ÷åò÷èêà q, âñå îñòàëüíûå âõîäíûå ñèãíàëû, t1, t2, t3, see12 è RESET îáúÿâëåíû êàê âíóòðåííèå öåïè, ïîäêëþ÷åííûå ê âõîäàì, ñîîòâåòñòâóþùèì ñóáìîäóëÿì ïðîåêòà. et_ff etff0(q[0], clock); et_ff etff1(q[1], et_ff etff2(q[2], et_ff etff3(q[3],
d[0], increment, load_data, reset, d[1], t1, load_data, reset, clock); d[2], t2, load_data, reset, clock); d[3], t3, load_data, reset, clock);
 ýòîì ôðàãìåíòå êîäà ìû îïðåäåëÿåì 4 ñ÷åòíûõ òðèããåðà ñ ðàçðåøåíèåì. and a1(t1, increment, q[0]); and a2(t2, t1, q[1]); and a3(t3, t2, q[2]);
399
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL Ñèãíàë óâåëè÷åíèÿ ñ÷åò÷èêà (increment signal) îáúåäèíÿåòñÿ ïî «È» ñ âûõîäîì ïîñëåäíåãî òðèããåðà äëÿ ïåðåíîñà ñèãíàëà ñ÷åòà íà ñëåäóþùèé òðèããåð. recog12 r1(see12, q); or or1(reset, see12, global_reset); Kàæäûé ðàç, êîãäà âûõîä q èçìåíÿåòñÿ, ïåðåìåííàÿ see12 ìîäèôèöèðóåòñÿ. Kîãäà îíà äîñòèãíåò 12, âíóòðåííèé ñèãíàë ñáðîñà îáåñïå÷èò ñáðîñ ñ÷åò÷èêà íà î÷åðåäíîì òàêòå. Äàëåå ðàññìîòðèì ïîâåäåí÷åñêóþ ìîäåëü íàøåãî ñ÷åò÷èêà.
5.25.1. Ïîâåäåí÷åñêàÿ ìîäåëü ñ÷åò÷èêà (Behavioural model) Ïðåäøåñòâóþùåå îïèñàíèå ñ÷åò÷èêà áûëî îñóùåñòâëåíî íà óðîâíå âåíòèëåé è òðèããåðîâ, ò.å. íà ñòðóêòóðíîì óðîâíå. Ñ äðóãîé ñòîðîíû, ïðè íàëè÷èè äîñòàòî÷íî ìîùíûõ ñðåäñòâ ñèíòåçà ïîâåäåí÷åñêîå îïèñàíèå ïîçâîëÿåò ïîëó÷èòü áîëåå íàãëÿäíîå îïèñàíèå ïðîåêòà. Íèæå ïðèâîäèòñÿ ïðèìåð ïîâåäåí÷åñêîãî îïèñàíèÿ (Behavioural description) ñ÷åò÷èêà. // 4bit binary upcounter of period 13 module counter4_bit(q, d, increment, load_data, glob al_reset, clock); output [3:0] q; input [3:0] d; input load_data, global_reset, clock, increment; reg [3:0] q; always @(posedge clock) if (global_reset) q = 4'b0000; else if (load_data) q = d; else if (increment) begin if (q == 12) q = 0; else
400
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL q = q + 1; end endmodule // counter4_bit  îòëè÷èå îò îïèñàíèÿ íà ðåãèñòðîâîì óðîâíå ðàçëè÷èå â ïåðâûõ ñòðîêàõ òîëüêî îäíî âûõîä q îáúÿâëåí êàê ðåãèñòð. Äàííàÿ ìîäåëü ïîçâîëÿåò ïóòåì ïðîâåäåíèÿ íåáîëüøèõ ìîäèôèêàöèé ïîëó÷èòü îïèñàíèå äðóãîãî òèïà ñ÷åò÷èêà ñ÷åò÷èêà â îáðàòíîì íàïðàâëåíèè (down counter). Íèæå ïðèâåäåí ïðèìåð òàêîãî îïèñàíèÿ. // 4bit binary downcounter of period 13 module counter4_bit(q, d, decrement, load_data, global_reset, clock); always @(posedge clock) if (global_reset) q = 12; else if (load_data) q = d; else if (decrement) begin if (q == 0) q = 12; else q = q 1; end endmodule Äàëåå ðàññìîòðèì ðåâåðñèâíûé ñ÷åò÷èê (ñ÷åò÷èê ñ ïåðåìåííûì íàïðàâëåíèåì ñ÷åòà, up-down counter) ñ ïåðèîäîì 16. // 4bit binary updowncounter of period 16 module counter4_bit(q, d, updown, count, load_data, global_reset, clock); always @(posedge clock) if (reset)
401
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL q = 0; else if (load_data) q = d; else if (count) begin if (updown) q = q + 1; else q = q 1; end endmodule
5.26. Âðåìåííîé êîíòðîëü (Timing control) Â ÿçûêå Verilog ñóùåñòâóåò òðè âàðèàíòà îñóùåñòâëåíèÿ âðåìåííîãî êîíòðîëÿ (timing control): èñïîëüçîâàíèå çàäåðæåê (delay), ñîáûòèé (event) è óðîâíè ÷óâñòâèòåëüíîñòè (level sensitive). Ðàññìîòðèì èõ ïîäðîáíåå.
5.26.1. Çàäåðæêè (delay) Ñèíòàêñ: timing_control_statement::== delay_based statement* delay_based::== # delay_value  äàííîì ìåòîäå ââîäèòñÿ çàäåðæêà ìåæäó ïîñòóïëåíèåì ïåðåìåííîé íà âõîä áëîêà è ðåçóëüòàòîì. initial begin a = 0; #10 b = 2; #15 c = a; #b c = 4; b = 5; end
// выполняется в момент t = 0 // выполняется в момент t = 10 // выполняется в момент t = 25 // выполняется в момент t = 27 // выполняется в момент t = 27
Âåëè÷èíà çàäåðæêè ìîæåò áûòü îïðåäåëåíà êàê ïîñòîÿííàÿ èëè ïåðåìåííàÿ. Ñëåäóåò ïîìíèòü, ÷òî ñèñòåìíîå âðåìÿ èçìåðÿåòñÿ â òåõ åäèíèöàõ, êîòîðûå óñòàíîâëåíû â ñèñòåìå. Íèæå ïðèâîäèòñÿ ïðèìåð ôîðìèðîâàíèÿ òàêòîâîãî ñèãíàëà (creation of a clock signal).
402
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL initial begin clock = 1'b0; forever #5 clock = ~clock; end  äàííîì ïðèìåðå êàæäûå 5 åäèíèö âðåìåíè ñèãíàë ïåðåõîäèò èç ÂÛÑÎKÎÃÎ óðîâíÿ â ÍÈÇKÈÉ è íàîáîðîò.
5.26.2. Ñîáûòèéíûé êîíòðîëü (event-based control) Ïðè ñîáûòèéíîì êîíòðîëå ñïðàâåäëèâ ñëåäóþùèé ñèíòàêñèñ îïåðàòîðà ñîáûòèÿ (â ôîðìå ÁýêóñàÍàóýðà): event_control_statement::== @ event_identifier | @ (event_expression) event_expression::== | exp | event_id | posedge exp | negedge exp | event_exp or event_exp. Ïðè ñîáûòèéíîì êîíòðîëå ïðîèñõîäèò âû÷èñëåíèå ðåçóëüòàòà ïðè êàæäîì èçìåíåíèè âõîäíûõ ñèãíàëîâ. @ (clock) a = b; // при каждом такте выполняется a = b @ (negedge clock) a = b;
// когда clock > 0, то a = b
a = @(posedge clock) b;
5.27. Çàùåëêèâàíèå (triggers) Ôóíêöèîíèðîâàíèå çàùåëêè ðàññìîòðèì íà ïðèìåðå. event data_in; always @(negedge clock) if (data[8]==1) > data_in;
403
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL always @(data_in) mem[0:1] = buf; Â ýòîì ïðèìåðå â êàæäîì îòðèöàòåëüíîì ôðîíòå ñèíõðîèìïóëüñà ïðîâåðÿåòñÿ, ðàâíî ëè data[8] åäèíèöå, åñëè òàê, òî data_in = 1.
5.28. Ñïèñîê ñèãíàëîâ âîçáóæäåíèÿ (sensitivity list) Ñèíòàêñ: event_list_statement::==@ (event_exp or event_exp) event_exp::== (event_exp or event_exp). Åñëè ìû æåëàåì, ÷òîáû áëîê âûïîëíÿëñÿ òîãäà, êîãäà èçìåíèëàñü ëþáàÿ èç âõîäíûõ ïåðåìåííûõ, òî ñïèñîê ñèãíàëîâ âîçáóæäåíèÿ ðàçäåëÿåòñÿ îïåðàòîðàìè OR. always @ (i_change or he_changes or she_changes) somebody_changed = 1; Çäåñü èçìåíåíèå õîòÿ áû îäíîé ïåðåìåííîé ïðèâîäèò ê èçìåíåíèþ îñòàëüíûõ.
5.29. Çàäåðæêà ðàñïðîñòðàíåíèÿ â âåíòèëå (Gate delays) Ñèíòàêñ: delay_statement::== gate_name delay_exp gate_details delay_exp::== # delay_time Äàííûé òèï çàäåðæêè ïðèìåíèì òîëüêî ê ïðîñòåéøèì âåíòèëÿì, îïðåäåëÿåìûì â Verilog. and #(5) a1(out, in1, in2);
5.30. Îïåðàòîðû âåòâëåíèÿ (Branch statements) 5.30.1. Îïåðàòîð IF (IF statement) Ñèíòàêñ: if (conditional_expression) statement{else statement}. Kàê èçâåñòíî, îïåðàòîð IF ÿâëÿåòñÿ îïåðàòîðîì óñëîâíîãî ïåðåõîäà è âûïîëíÿåòñÿ ñòàíäàðòíûì äëÿ ÿçûêîâ âûñîêîãî óðîâíÿ ñïîñîáîì. Óñëîâèå âû÷èñëÿåòñÿ, è â çàâèñèìîñòè îò ðåçóëüòàòà âûïîëíÿåòñÿ ëèáî ïåðâûé îïå-
404
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL ðàòîð, ëèáî âòîðîé. Ãðóïïû îïåðàòîðîâ â âåòâè âûäåëÿþòñÿ îïåðàòîðíûìè ñêîáêàìè (êàê â ÿçûêå Ïàñêàëü) begin... end. Ðàññìîòðèì ðåàëèçàöèþ íàøåãî ìóëüòèïëåêñîðà ñ ïîìîùüþ îïåðàòîðà IF. module multiplexor4_1 (out, in1, in2, in3 ,in4, cntrl1, cntrl2); output out; input in1, in2, in3, in4, cntrl1, cntrl2; assign out = (~cntrl2 ( cntrl2 (~cntrl2 ( cntrl2 endmodule
& ~cntrl1 & in1) | & ~cntrl1 & in2) | & cntrl1 & in3) | & cntrl1 & in4) ;
Ðàññìîòðèì ïðèìåð ðåàëèçàöèè ìóëüòèïëåêñîðà 4 â 1 ñ ïîìîùüþ ëîãè÷åñêèõ óðàâíåíèé. module multiplexor4_1 (out, in1, in2, in3,in4, cntrl1, cntrl2); output out; input in1, in2, in3, in4, cntrl1, cntrl2; reg out; always @(in1 or in2 or in3 or in4 or cntrl1 or cntrl2) if (cntrl1==1) if (cntrl2==1) out = in4; else out = in3; else if (cntrl2==1) out = in2; else out = in1; endmodule
405
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL
5.30.2. Îïåðàòîð âûáîðà (CASE statement) Ðàññìîòðåííûé âûøå ìåòîä ðåàëèçàöèè ìóëüòèïëåêñîðà óäîáåí ïðè ìàëîì ÷èñëå âõîäîâ, ïðè èõ óâåëè÷åíèè ãîðàçäî ðàçóìíåå èñïîëüçîâàòü îïåðàòîð âûáîðà, ïðè÷åì åãî ñèíòàêñèñ àíàëîãè÷åí îïåðàòîðó âûáîðà â C++. Ñèíòàêñ: conditional::== case (condition) case_item+ endcase case_item::== expression+ (seperated by commas) : statement* | default : statement* Ðàññìîòðèì ðåàëèçàöèþ ìóëüòèïëåêñîðà 4 â 1 ñ ïîìîùüþ îïåðàòîðà âûáîðà. module multiplexor4_1 (out, in1, in2, in3, in4, cntrl1, cntrl2); output out; input in1, in2, in3, in4, cntrl1, cntrl2; reg out; // note must be a register always @(in1 | in2 | in3 | in4 | cntrl1 | cntrl2) case ({cntrl2, cntrl1}) // concatenation 2’b00 : out = in1; 2’b01 : out = in2; 2’b10 : out = in3; 2’b11 : out = in4; default : $display("Please check control bits"); endcase endmodule Âàðèàíòàìè îïåðàòîðà âûáîðà ÿâëÿþòñÿ îïåðàòîðû casez è casex.
5.30.3. Îïåðàòîð âåòâëåíèÿ (Conditional operator) Îïåðàòîð ïî ñèíòàêñèñó àíëîãè÷åí òàêîìó æå îïåðàòîðó â Ñ++, òàê æå, êàê è â Ñ++ ýòîò îïåðàòîð ìîæåò áûòü çàìåíåí êîíñòðóêöèåé IF-ELSE. Ñèíòàêñ: conditional_expression ? true_expression : false_expression Ïðèìåð ðåàëèçàöèè ìóëüòèïëåêñîðà 2 â 1:
406
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL assign out = control ? in2 : in1;
5.31. Öèêëû (Looping constructs)  Verilog ñóùåñòâóåò ÷åòûðå òèïà öèêëîâ êîíñòðóêöèè WHILE, FOR, REPEAT è FOREVER. Öèêëû âîçìîæíî èñïîëüçîâàòü òîëüêî âíóòðè áëîêîâ Initial è Always. Îñíîâíîå íàçíà÷åíèå öèêëîâ: WHILE âûïîëíåíèå îïåðàòîðîâ, ïîêà óñëîâèå èñòèííîe; FOR â ýòîì öèêëå âîçìîæíî èíèöèàëèçèðîâàòü, ïðîâåðÿòü è óâåëè÷èâàòü èíäåêñíóþ ïåðåìåííóþ ÿâíûì ñïîñîáîì; REPEAT öèêë ñ çàäàííûì ÷èñëîì ïîâòîðåíèé; FOREVER âå÷íûé öèêë: ïîâòîðåíèå äî êîíöà ïðîöåññà ìîäåëèðîâàíèÿ.
5.31.1. Öèêë WHILE (WHILE LOOP) Ñèíòàêñ: looping_statement::== while (conditional) statement Öèêë WHILE âûïîëíÿåòñÿ äî òåõ ïîð, ïîêà óñëîâèå èñòèííî, â êà÷åñòâå óñëîâèÿ ìîæåò áûòü èñïîëüçîâàíî ëþáîå ëîãè÷åñêîå âûðàæåíèå. Îïåðàòîðû â öèêëå ãðóïïèðóþòñÿ ñ èñïîëüçîâàíèåì îïåðàòîðíûõ ñêîáîê begin ... end. Íèæå ïðèâåäåí ïðèìåð WHILE. /* How many cups of volume 33 ml does it take to fill a jug of volume 1 litre */ 'define JUGVOL 1000 'define CUPVOL 33 module cup_and_jugs; integer cup, jug; initial begin cup = 0; jug = 0; while (jug < `JUGVOL) begin jug = jug + `CUPVOL; cup = cup + 1; end // while (jug < JUG_VOL) $display("It takes %d cups", cup);
407
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL end // initial begin endmodule // cup_and_jugs Notice the use of the "define" statement.
5.31.2. Öèêë FOR (FOR LOOP) Ñèíòàêñ: FOR (reg_initialisation ; conditional ; reg_update) statement Öèêë FOR â Verilog àíàëîãè÷åí öèêëó FOR â ÿçûêå C++. Íèæå ïðèâåäåí ïðèìåð åãî èñïîëüçîâàíèÿ. integer list [31:0]; integer index; initial begin for(index = 0; index < 32; index = index + 1) list[index] = index + index; end
5.31.3. Öèêë REPEAT (REPEAT LOOP) Ñèíòàêñ: looping_statement::== repeat (conditional) statement Öèêë REPEAT âûïîëíÿåòñÿ êîíå÷íîå ÷èñëî ðàç, óñëîâèå (Conditional) ìîæåò áûòü êîíñòàíòîé, ïåðåìåííîé èëè ñèãíàëîì, íî îáÿçàòåëüíî áûòü öåëûì ÷èñëîì. Íèæå ïðèâåäåí ïðèìåð öèêëà REPEAT. module comply; int count; initial begin count = 128; repeat (count) begin $display("%d seconds to comply", count); count = count 1; end end endmodule Ïðèìå÷àíèå: Öèêë áóäåò âûïîëíÿòüñÿ 128 òàêòîâ íåçàâèñèìî îò âåëè÷èíû ñ÷åòà, êîòîðàÿ ìîæåò èçìåíÿòüñÿ ïîñëå çàïóñêà ñàìîãî öèêëà.
408
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL
5.31.4. Âå÷íûé öèêë (FOREVER LOOP) Ñèíòàêñèñ: forever statement Öèêë FOREVER âûïîëíÿåòñÿ íåïðåðûâíî, ïîêà ìîäåëèðîâàíèå íå áóäåò îñòàíîâëåíî êîìàíäîé $finish. Íèæå ïðèâåäåí ïðèìåð âå÷íîãî öèêëà. reg clock; initial begin clock = 1'b0; forever #5 clock = ~clock; end initial #2000 $finish;
5.32. Ôàéëû â Verilog 5.32.1. Îòêðûòèå ôàéëà (Opening a file) Këþ÷åâûå ñëîâà: $open Ñèíòàêñ: = $fopen(«»); $readmemb(«», <memory_name>, memory_start»); $readmemb(«», <memory_name>, memory_start, memory_finish»); Äëÿ èíèöèàëèçàöèè ðåãèñòðîâûõ ôàéëîâ èñïîëüçóåòñÿ ñëåäóþùàÿ êîíñòðóêöèÿ. Ñîäåðæèìîå ðåãèñòðîâîãî ôàéëà õðàíèòñÿ â ôàéëå ñ ôîðìàòîì, ïðèâåäåííîì íèæå, âñå àäðåñà øåñòíàäöàòåðè÷íûå. @003 00000011 00000100
410
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL 00000101 00000110 00000111 00001000 00001001 Äëÿ óëó÷øåíèÿ ÷èòàåìîñòè âîçìîæíà è òàêàÿ çàïèñü: @003 00000011 00000100 00000101 @006 00000110 00000111 @008 00001000 00001001 Ïðèìåð èíèöèàëèçàöèè ïàìÿòè ïðèâåäåí íèæå. module testmemory; reg [7:0] memory [9:0]; integer index; initial begin $readmemb("mem.dat", memory); for(index = 0; index < 10; index = index + 1) $display("memory[%d] = %b", index[4:0], memory[index]); end endmodule // testmemory Ñîäåðæèìîå ôàéëà ôàéëà mem.data èìååò âèä: 1000_0001 1000_0010 0000_0000 0000_0001 0000_0010 0000_0011
411
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL 0000_0100 0000_0101 0000_0110 0000_0000
5.33. Çàäàíèå âåêòîðîâ âõîäíûõ ñèãíàëîâ äëÿ ìîäåëèðîâàíèÿ (Verilog input vectors) Äëÿ çàäàíèÿ âõîäíûõ âåêòîðîâ äëÿ ìîäåëèðîâàíèÿ ñèñòåìû òðåáóåòñÿ âåñüìà îãðàíè÷åííîå ïîäìíîæåñòâî ÿçûêà Verilog. Ðàññìîòðèì ïðîñòîé ïðèìåð. initial begin clk = 1’b0; globalReset = 1’b1; in = 1’b1; end Âûðàæåíèå 1'b0 ïðåäñòàâëÿåò ñîáîé äâîè÷íîå ïðåäñòàâëåíèå 0. Ñóùåñòâóþò äâå îñíîâíûå ÷àñòè: initial begin ... end always begin ... end Áëîê Initial íà÷èíàåò âûïîëíÿòüñÿ ñ íà÷àëîì ìîäåëèðîâàíèÿ, ïîýòîìó â íåì èíèöèàëèçèðóþòñÿ ñèãíàëû è îïðåäåëÿåòñÿ ïîñëåäîâàòåëüíîñòü èõ èçìåíåíèé. Òàêòîâûé ñèãíàë ñóùåñòâóåò â òå÷åíèå âñåãî âðåìåíè ìîäåëèðîâàíèÿ. Çàäåðæêà ìåæäó ìîìåíòàìè ñìåíû ñèãíàëîâ (ñîáûòèÿìè) îïðåäåëÿåòñÿ ñ ïîìîùüþ çíàêà #.
412
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL Íàïðèìåð: #160 #160 #160 #320
globalReset = 0; in = 0; in = 1; in = 0;
 ïðèâåäåííîì ïðèìåðå ïîñëå 160 åäèíèö âðåìåíè îæèäàíèÿ ñèãíàë globalReset óñòàíàâëèâàåòñÿ â 0, çàòåì 160 åäèíèö îæèäàíèÿ è óñòàíîâêà ñèãíàëà in â 0 è ò.ä. Íàèáîëåå ÷àñòî êîíñòðóêöèÿ always èñïîëüçóåòñÿ äëÿ çàäàíèÿ òàêòîâîãî ñèãíàëà. Íàïðèìåð: always begin #10 clk = ~clk; end Çäåñü ñèãíàë clk äîëæåí áûòü ïðîèíâåðòèðîâàí êàæäûå 10 åäèíèö èçìåðåíèÿ âðåìåíè, ÷òî, ïî ñóòè, îçíà÷àåò, ÷òî ïåðèîä òàêòîâîãî ñèãíàëà 20 åäèíèö èçìåðåíèÿ âðåìåíè (time units). Kðîìå òîãî, â ïðîöåññå ìîäåëèðîâàíèÿ íåïëîõî èñïîëüçîâàòü öèêë REPEAT äëÿ çàäàíèÿ çàäàííîãî ÷èñëà ïîâòîðåíèé. repeat(10) begin #40 in = 0; #20 in = 1; end Äëÿ ãåíåðàöèè ñëó÷àéíûõ ÷èñåë â äèàïàçîíå [0, n-1] èñïîëüçóåòñÿ ñëåäóþùàÿ êîìàíäà {$random} % n Kîìáèíèðóÿ ýòè êîìàíäû, ñîçäàäèì ãåíåðàòîð ïà÷åê èç 14 ñëó÷àéíûõ ÷èñåë êàæäûå 20 åäèíèö âðåìåíè:
413
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL
repeat(14) begin #20 in = {$random} / 16 end
% 2;
5.34. Ñïèñîê îïåðàòîðîâ Verilog Äàáû îáîáùèòü ðàññìîòðåííûå ðàíåå êëþ÷åâûå ìîìåíòû ðàáîòû ñ Òàáëèöà 5.2. Ñïèñîê îïåðàòîðîâ ÿçûêà Verilog Òèï îïåðàòîðà
Ñèìâîë
Àðèôìåòè÷åñêèå (Arithmetic)
* / + %
Ëîãè÷åñêèå (Logical)
! && ||
Îòíîøåíèÿ (Relational)
Îïåðàöèÿ
×èñëî îïåðàíäîâ
Óìíîæåíèå äåëåíèå ñóììà ðàçíîñòü îñòàòîê
2 2 2 2 2
«ÍÅ» «È» «ÈËÈ»
1 2 2
> < >= >
= == != === !== & ~& ^ ^~ | ~| && || ?: (conditional)
íèçøèé
Íèæå ðàññìàòðèâàåòñÿ ïðèîðèòåò îïåðàòîðîâ Verilog.
5.36. Këþ÷åâûå ñëîâà (keywords) Íèæå ïðèâåäåíû êëþ÷åâûå ñëîâà ÿçûêà Verilog â àëôàâèòíîì ïîðÿäêå. Åñòåñòâåííî, èõ íåëüçÿ èñïîëüçîâàòü äëÿ èìåí âåíòèëåé, ìîäóëåé, ïîðòîâ è ò.ï. always and bufif1 case
assign attribute begin buf casex casez cmos deassign
415
bufif0 default
ßçûê îïèñàíèÿ àïïàðàòóðû Verilog HDL defpram disable edge else end endattribute endcase endfunction endmodule endprimitive endspecify endtable endtask event for force forever fork function highz0 highz1 if initial inout input integer join large macromodule meduim module nand negedge nmos nor not notif0 notif1 or output arameter pmos posedge primitive pull0 pull1 pulldown pullup rcmos real realtime reg release repeat rtranif1 scalared signed small specify specpram strength strong0 strong1 supply0 supply1 table task time tran tranif0 tranif1 tri tri0 tri1 triand trior trireg unsigned vectored wait wand weak0 weak1 while wire wor xnor xor
5.37. Äèðåêòèâû êîìïèëÿòîðà $bitstoreal $countdrivers $display $fclose $fdisplay $fmonitor $fopen $fstrobe $fwrite $finish $getpattern $history $incsave $input $itor $key $list $log $monitor $monitoroff monitoron $nokey
5.38. Òèïû öåïåé (Net types) supply0 supply1 wand wire wor
tri
triand
416
trior
trireg
tri0
tri1
Ãëàâà 6.
Ïðèìåðû ïðîåêòèðîâàíèÿ öèôðîâûõ óñòðîéñòâ ñ èñïîëüçîâàíèåì ÿçûêîâ îïèñàíèÿ àïïàðàòóðû VHDL è Verilog
6.1. Îáùèå ñâåäåíèÿ ßçûêè îïèñàíèÿ àïïàðàòóðû VHDL è Verilog HDL ïðåäñòàâëÿþò ñîáîé ÿçûêè âûñîêîãî óðîâíÿ (â îòëè÷èå îò AHDL è ABEL HDL) è ïðåäíàçíà÷åíû äëÿ îïèñàíèÿ öèôðîâûõ ñõåì è èõ ýëåìåíòîâ â ïåðâóþ î÷åðåäü íà ïîâåäåí÷åñêîì óðîâíå. Ýòè ÿçûêè ïîääåðæèâàþò ðàçëè÷íûå óðîâíè àáñòðàêöèè ïðîåêòà, âêëþ÷àÿ ïîääåðæêó îñîáåííîñòåé àðõèòåêòóðû ÏËÈÑ, ïîä êîòîðóþ âûïîëíÿåòñÿ ïðîåêò (Architecture-Specific Design). Èñïîëüçîâàíèå ÿçûêîâ îïèñàíèÿ àïïàðàòóðû âûñîêîãî óðîâíÿ ïîçâîëÿåò ïðîåêòèðîâàòü öèôðîâûå ñèñòåìû, îáëàäàþùèå âûñîêîé ìîáèëüíîñòüþ, òî åñòü âîçìîæíîñòüþ ïåðåíîñèìîñòè íà äðóãóþ ýëåìåíòíóþ áàçó. Äëÿ ñîçäàíèÿ çàêîí÷åííîãî ïðîåêòà íåîáõîäèìî òîëüêî ëèøü ïðîèçâåñòè êîìïèëÿöèþ â ñîîòâåòñòâóþùåé ñèñòåìå â ýëåìåíòíóþ áàçó âûáðàííîãî ïðîèçâîäèòåëÿ. Íî â ýòîì è îñíîâíîé íåäîñòàòîê ÿçûêîâ âûñîêîãî óðîâíÿ íåäîñòàòî÷íûé ó÷åò ñïåöèôè÷åñêèõ àðõèòåêòóðíûõ îñîáåííîñòåé èñïîëüçóåìîé ýëåìåíòíîé áàçû (specific target technology).  ýòîì ðàçäåëå ìû ïîïûòàåìñÿ ðàññìîòðåòü íåêîòîðûå ïðèìåðû èñïîëüçîâàíèÿ ÿçûêîâ îïèñàíèÿ àïïàðàòóðû äëÿ ñîçäàíèÿ ïðîåêòîâ ðàçëè÷íîãî óðîâíÿ ñëîæíîñòè. Ïðè ïðîâåäåíèè ñèíòåçà ëîãè÷åñêîé ñòðóêòóðû ÏËÈÑ ñ èñïîëüçîâàíèåì ÿçûêîâ îïèñàíèÿ àïïàðàòóðû (HDL Synthesis-Based Design Flow) ðàçëè÷àþò ÷åòûðå îñíîâíûå ñòàäèè ïðîåêòèðîâàíèÿ: ñîçäàíèå è ôóíêöèîíàëüíàÿ âåðèôèêàöèÿ ïðîåêòà; ðåàëèçàöèÿ ïðîåêòà â ÑÀÏÐ ÏËÈÑ; ïðîãðàììèðîâàíèå ÏËÈÑ; âåðèôèêàöèÿ âñåé ñèñòåìû.
417
Ýëåìåíòíàÿ áàçà Ïðè ôóíêöèîíàëüíîé âåðèôèêàöèè ïðîåêòà ââîä îïèñàíèÿ ïðîåêòà îñóùåñòâëÿåòñÿ íà ðåãèñòðîâîì óðîâíå (RTL-level) â ïîâåäåí÷åñêîé îáëàñòè (behavioral). Ïîñëå ââîäà îïèñàíèÿ ïðîåêòà ïîâåäåí÷åñêîå (ôóíêöèîíàëüíîå) ìîäåëèðîâàíèå (âåðèôèêàöèÿ) ïîçâîëÿåò îöåíèòü ñòåïåíü ïðàâèëüíîñòè ôóíêöèîíèðîâàíèÿ àëãîðèòìà. Ïîñëå ïðîâåäåíèÿ ôóíêöèîíàëüíîãî ìîäåëèðîâàíèÿ îïèñàíèå ñèíòåçèðóåòñÿ â ñïèñîê öåïåé íà âåíòèëüíîì óðîâíå (GATE-level) â ñòðóêòóðíîé îáëàñòè (structural). Ïîñëå îñóùåñòâëåíèÿ ñèíòåçà ìîæíî âûïîëíèòü ñòðóêòóðíîå (âðåìåííîå è ôóíêöèîíàëüíîå) ìîäåëèðîâàíèå óñòðîéñòâà.  ðåçóëüòàòå ìû ïîëó÷àåì ñïèñîê öåïåé (êàê ïðàâèëî, â ôîðìàòå EDIF) äëÿ âðåìåííîé âåðèôèêàöèè ïðîåêòà. Ðàññìîòðèì ïðèìåíåíèå ÿçûêîâ îïèñàíèÿ àïïàðàòóðû âûñîêîãî óðîâíÿ (VHDL è Verilog HDL) äëÿ îïèñàíèÿ ðàçëè÷íûõ öèôðîâûõ óñòðîéñòâ. Äàííûå îïèñàíèÿ, åñëè íå îñîáî óêàçûâàåòñÿ, íå îðèåíòèðîâàíû íà êàêóþ-ëèáî êîíêðåòíóþ ñèñòåìó ïðîåêòèðîâàíèÿ èëè ñåìåéñòâî ÏËÈÑ è ìîãóò áûòü âîïëîùåíû â ðàçëè÷íûõ áàçèñàõ. Òàêîé òèï îïèñàíèé ïîëó÷èë íàçâàíèå íåçàâèñèìîãî îò òåõíîëîãèè ñòèëÿ îïèñàíèÿ óñòðîéñòâ (Technology Independent Coding Styles). Íà÷íåì ðàññìîòðåíèå ñïîñîáîâ îïèñàíèÿ íåçàâèñèìûõ îò òåõíîëîãèè óñòðîéñòâ ñ ïîñëåäîâàòåëüíîñòíûõ óñòðîéñòâ (Sequential Devices).  àíãëîÿçû÷íîé ëèòåðàòóðå ïðèíÿòû òåðìèíû çàùåëêà äëÿ óñòðîéñòâ, òàêòèðóåìûõ óðîâíåì, è òðèããåð äëÿ óñòðîéñòâ, òàêòèðóåìûõ ôðîíòîì òàêòîâîãî èìïóëüñà.
6.2. Òðèããåðû è ðåãèñòðû Äëÿ îïèñàíèÿ òðèããåðíûõ ñõåì â VHDL èñïîëüçóþòñÿ îïåðàòîðû WAIT è IF âìåñòå ñ ïðîöåññîì, èñïîëüçóþùèì àòðèáóòû ïåðåäíåãî èëè çàäíåãî ôðîíòîâ ñèíõðîèìïóëüñà (ñì. ãëàâó 4). Íèæå ïðèâåäåíû ïðèìåðû ñîçäàíèÿ îïèñàíèé ñðàáàòûâàíèÿ ïî ôðîíòó: (clk'event and clk='1') àòðèáóò ñðàáàòûâàíèÿ ïî ïåðåäíåìó ôðîíòó (clk'event and clk='0') àòðèáóò ñðàáàòûâàíèÿ ïî çàäíåìó ôðîíòó rising_edge(clock) âûçîâ ôóíêöèè ïî ïåðåäíåìó ôðîíòó falling_edge(clock) âûçîâ ôóíêöèè ïî çàäíåìó ôðîíòó  ýòèõ ïðèìåðàõ èëëþñòðèðóåòñÿ ïðèìåíåíèå àòðèáóòà ïåðåäíåãî ôðîíòà (rising edge 'event attribute). Èñïîëüçîâàíèå àòðèáóòîâ ñëåäóåò ðåêîìåíäîâàòü â òåõ ñëó÷àÿõ, êîãäà ñèñòåìà ïðîåêòèðîâàíèÿ íå ïîääåðæèâàåò
418
Ýëåìåíòíàÿ áàçà âûçîâ ôóíêöèè ïî ñîáûòèþ. Îäíàêî èñïîëüçîâàíèå ôóíêöèé ïîçâîëÿåò èçáåæàòü êîëëèçèé, ñâÿçàííûõ ñ ïåðåõîäîì èç íåîïðåäåëåííîãî ñîñòîÿíèÿ, ïîñêîëüêó ôóíêöèÿ îïðåäåëÿåò òîëüêî ïåðåõîäû óðîâíåé (èç «0» â «1» èëè èç «1» â «0»), à íå ïåðåõîä èç íåîïðåäåëåííîãî ñîñòîÿíèÿ â «1» èëè «0». Ýòî ñòàíîâèòñÿ äîñòàòî÷íî âàæíûì â ñëó÷àå èñïîëüçîâàíèÿ ìíîãîçíà÷íûõ òèïîâ äàííûõ, íàïðèìåð std_logic, êîòîðûé èìååò 9 âîçìîæíûõ çíà÷åíèé ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-'). Äàëåå ðàññìîòðèì îñíîâíûå òèïû òðèããåðîâ.
6.2.1. Òðèããåðû, òàêòèðóåìûå ïåðåäíèì ôðîíòîì (Rising Edge Flipflop) Íèæå ïðèâîäèòñÿ ïðèìåð îïèñàíèÿ D-òðèããåðà áåç öåïåé àñèíõðîííîãî ñáðîñà (RESET) èëè ïðåäóñòàíîâêè (PRESET). Íà Ðèñ. 6.1 ïðèâåäåíî ñõåìíîå îáîçíà÷åíèå ðàññìàòðèâàåìîãî òðèããåðà.
clk
q AL6127+
data
Ðèñ. 6.1. Ñõåìíîå îáîçíà÷åíèå D-òðèããåðà
Ïðèìåð îïèñàíèÿ íà VHDL: library IEEE; use IEEE.std_logic_1164.all; entity dff is port (data, clk : in std_logic; q : out std_logic); end dff; architecture behav of dff is begin process (clk) begin if (clk'event and clk = '1') then q Yout Yout Yout Yout Yout Yout Yout Yout Yout y y y e, Y => b, PAD => y); end bi; Ïðèìåð îïèñàíèÿ ýêçåìïëÿðà áóôåðà íà Verilog: module bidir (e, y, a, b); input a, e; inout y; output b; BIBUF U1 (.PAD(y),.D(a),.E(e),.Y(b) ); Endmodule
6.8. Ïàðàìåòðèçàöèÿ Kàê óæå îòìå÷àëîñü âûøå, â ïîñëåäíèå ãîäû íàìåòèëàñü òåíäåíöèÿ ê ðàçðàáîòêå è èñïîëüçîâàíèþ ïàðàìåòðèçîâàííûõ ìîäóëåé (ÿäåð, ìàêðîñîâ, ìåãàôóíêöèé) ïðè ïðîåêòèðîâàíèè óñòðîéñòâ íà ÏËÈÑ ñ èñïîëüçîâàíèåì ÿçûêîâ îïèñàíèÿ àïïàðàòóðû.  ÿçûêàõ îïèñàíèÿ àïïàðàòóðû ñóùåñòâóþò ñïåöèàëüíûå êîíñòðóêöèè, ïîçâîëÿþùèå îáåñïå÷èòü ïîëíóþ ïàðàìåòðèçàöèþ ïðîåêòà. Ýòî òàê íàçûâàåìûå ðîäîâûå (ïàðàìåòðèçîâàííûå, íàñòðàèâàåìûå) òèïû äàííûõ (Generics) è ïàðàìåòðû (Parameters). Ìû áóäåì èñïîëüçîâàòü òåðìèí íàñòðàèâàåìûé òèï. Íàñòðàèâàåìûå òèïû äàííûõ è ïàðàìåòðû èñïîëüçóþòñÿ îáû÷íî äëÿ îïðåäåëåíèÿ ðàçìåðíîñòè êîìïîíåíòà (íàïðèìåð, ðàçðÿäíîñòü øèí, êîýôôèöèåíòîâ è ò.ï.). Kîíêðåòíîå çíà÷åíèå ïàðàìåòðîâ îïðåäåëÿåòñÿ ïðè ñîçäàíèè êîíêðåòíîãî ýêçåìïëÿðà êîìïîíåíòà. Ðàññìîòðèì ïðèìåð èñïîëüçîâàíèÿ ïàðàìåòðèçàöèè íà ïðèìåðå ñóììàòîðà. Ïðèìåð îïèñàíèÿ ïàðàìåòðèçèðóåìîãî ñóììàòîðà íà VHDL: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all;
464
Ýëåìåíòíàÿ áàçà use IEEE.std_logic_unsigned.all; entity adder is generic (WIDTH : integer := 8); port (A, B: in UNSIGNED(WIDTH1 downto 0); CIN: in std_logic; COUT: out std_logic; Y: out UNSIGNED(WIDTH1 downto 0)); end adder; architecture rtl of adder is begin process (A,B,CIN) variable TEMP_A,TEMP_B,TEMP_Y:UNSIGNED(A'length downto 0); begin TEMP_A := '0' & A; TEMP_B := '0' & B; TEMP_Y := TEMP_A + TEMP_B + CIN; Y VDD
± 20 ìÀ
Âûõîäíîé òîê (DC output current)
IO ïðè VO < 0 Â èëè VO > VDD
± 20 ìÀ
Íàïðÿæåíèå ïèòàíèÿ (supply voltage)
Òàáëèöà Ï2.5. Ðåêîìåíäóåìûå óñëîâèÿ ýêñïëóàòàöèè äëÿ 3.3-âîëüòîâûõ ëîãè÷åñêèõ ÈÑ Äèàïàçîí íàïðÿæåíèé ïèòàíèÿ
Íîðìàëüíûé äèàïàçîí
Ðàñøèðåííûé äèàïàçîí
Íîìèíàë
3.3 Â
3.0 Â
Äîïóñòèìûå ïðåäåëû èçìåíåíèÿ
3.0...3.6 Â
2.7...3.6 Â
— 561 —
Ïðèëîæåíèÿ Âõîäíûå ïàðàìåòðû ìèêðîñõåì ñåìåéñòâ LVTTL è LVCMOS ïðèâåäåíû â Òàáë. Ï2.6.  Òàáë. Ï2.7 ïðèâåäåíû îñíîâíûå âûõîäíûå ïàðàìåòðû ìèêðîñõåì LVTTL. Âûõîäíûå ïàðàìåòðû KÌÎÏ ñåìåéñòâ LVCMOS ïðèâåäåíû â Òàáë. Ï2.8. Kàê èçâåñòíî, äëÿ óâåëè÷åíèÿ áûñòðîäåéñòâèÿ è ñòåïåíè èíòåãðàöèè ïîñòîÿííî ñíèæàþòñÿ ïðîåêòíûå íîðìû, ïðèìåíÿåìûå ïðè èçãîòîâëåíèè ÁÈÑ. Åñëè åùå ïàðó ëåò íàçàä íàèáîëåå ïîïóëÿðíûìè è ìàññîâûìè áûëè 0.5- è 0.35-ìèêðîííûå òåõíîëîãèè, òî ñåé÷àñ àêòóàëüíû 0.25 è ìåíåå. ßñíî, ÷òî óìåíüøåíèå ãåîìåòðè÷åñêèõ ðàçìåðîâ ëîãè÷åñêèõ ýëåìåíòîâ ïðèâîäèò ê óìåíüøåíèþ äîïóñòèìîãî íàïðÿæåíèÿ ïèòàíèÿ. Îäíàêî áîëüøèíñòâî ñóùåñòâóþùèõ ñòàíäàðòíûõ èíòåðôåéñîâ è ïðîòîêîëîâ îáìåíà äî ñèõ ïîð îïåðèðóþò ñòàðûìè äîáðûìè ÒÒË-óðîâíÿìè.  ýòîé ñâÿçè àêÒàáëèöà Ï2.6. Âõîäíûå ïàðàìåòðû ìèêðîñõåì ñåìåéñòâ LVTTL è LVCMOS Îáîçíà÷åíèå
Çíà÷åíèå min max
Óñëîâèÿ èçìåðåíèé
Ïàðàìåòð
VIH
Âõîäíîå íàïðÿæåíèå ÂÛÑÎKÎÃÎ VOUT >= VOH èëè VOUT >= VOL óðîâíÿ (high-level input voltage)
VIL
Âõîäíîå íàïðÿæåíèå ÍÈÇKÎÃÎ óðîâíÿ (low-level input voltage)
IIN
Âõîäíîé òîê (input current)
2Â
VDD + 0.3 Â
–0.3 Â
0.8 Â
—
±5 ìêÀ
VIN = 0 Â èëè VIN = VDD
Òàáëèöà Ï2.7. Îñíîâíûå âûõîäíûå ïàðàìåòðû ìèêðîñõåì LVTTL Îáîçíà÷åíèå
Ïàðàìåòð
Óñëîâèÿ èçìåðåíèé
VOH
Âûõîäíîå íàïðÿæåíèå ÂÛÑÎKÎÃÎ VDD = min, IOH = –2 ìÀ óðîâíÿ (high-level output voltage)
VOL
Âûõîäíîå íàïðÿæåíèå ÍÈÇKÎÃÎ óðîâíÿ (low-level output voltage)
VDD = min, IOL = 2 ìÀ
Çíà÷åíèå min max 2.4 Â
—
—
0.4 Â
Òàáëèöà Ï2.8. Âûõîäíûå ïàðàìåòðû KÌÎÏ ñåìåéñòâ LVCMOS Îáîçíà÷åíèå
Ïàðàìåòð
Óñëîâèÿ èçìåðåíèé
Çíà÷åíèå min max
VOH
Âûõîäíîå íàïðÿæåíèå ÂÛÑÎKÎÃÎ VDD = min, V – 0.2  IOH = –100 ìêÀ DD óðîâíÿ (high-level output voltage)
VOL
Âûõîäíîå íàïðÿæåíèå ÍÈÇKÎÃÎ óðîâíÿ (low-level output voltage)
— 562 —
VDD = min, IOL = 100 ìêÀ
—
— 0.2 Â
Ïðèëîæåíèÿ òóàëüíûì ñòàíîâèòñÿ âîïðîñ î ñîïðÿæåíèè íèçêîâîëüòíûõ è êëàññè÷åñêèõ ëîãè÷åñêèõ ÈÑ. Îïðåäåëèìñÿ, ÷òî æå îçíà÷àåò ñîâìåñòèìîñòü ÈÑ ðàçëè÷íûõ ñåìåéñòâ. Ïðèâåäåííûå â Òàáë. Ï2.8 ïàðàìåòðû îïðåäåëÿþò ñîâìåñòèìîñòü ÈÑ êàê ñîâìåñòèìûå ñ LVTTL (LVTTL-compatible). Kàê ìîæíî çàìåòèòü, âûõîäíûå íàïðÿæåíèÿ ÍÈÇKÎÃÎ è ÂÛÑÎKÎÃÎ óðîâíÿ ñîâåðøåííî îäíîçíà÷íî îïðåäåëÿþòñÿ êëàññè÷åñêèìè 5-âîëüòîâûìè ñõåìàìè è ìîãóò áûòü èñïîëüçîâàíû äëÿ ïîäà÷è íà âõîä 5-âîëüòîâûõ ÒÒË ñîâìåñòèìûõ ÈÑ. Îäíàêî ïðè îáðàòíîì ïåðåõîäå îò 5-âîëüòîâûõ ñèñòåì ê 3-âîëüòîâûì ñëåäóåò ïîìíèòü îá îïàñíîñòè ïîâðåæäåíèÿ âõîäíûõ êàñêàäîâ, íå ðàññ÷èòàííûõ íà íàïðÿæåíèå ïèòàíèÿ 5 Â.  ýòîì ñëó÷àå ïîëåçíû ñåðèè 74ÍÑ è 74ÀÍÑ.  ýòîé ñâÿçè ñëåäóåò ÷åòêî ïîìíèòü, ÷òî ïðè ñîâìåñòíîé ðàáîòå 5-âîëüòîâûõ è 3-âîëüòîâûõ êîìïîíåíòîâ âûõîäíîå íàïðÿæåíèå VOH 5-âîëüòîâûõ ÈÑ íå äîëæíî ïðåâûøàòü ìàêñèìàëüíîãî âõîäíîãî íàïðÿæåíèÿ 3-âîëüòîâûõ ÈÑ VIH. Ãîâîðÿ î ñîâìåñòèìîñòè ñ íèçêîâîëüòíûìè KÌÎÏ ÈÑ (LVCMOS compatibility), íåîáõîäèìî ïîìíèòü, ÷òî â ýòîì ñëó÷àå âûõîäíûå ïàðàìåòðû îïðåäåëåíû â Òàáë. Ï2.8. Ïðè ýòîì ïðè ïåðåêëþ÷åíèè èç îäíîãî ëîãè÷åñêîãî óðîâíÿ â äðóãîé âûõîäíîé ñèãíàë ïðàêòè÷åñêè ïðîõîäèò âåñü äèàïàçîí ïèòàíèÿ, çàíèìàÿ îäíî èç êðàéíèõ çíà÷åíèé (íîëü èëè íàïðÿæåíèå ïèòàíèÿ). Ýòî ñâîéñòâî â àíãëîÿçû÷íîé ëèòåðàòóðå ïîëó÷èëî íàèìåíîâàíèå rail-to-rail. Òàêîå ïîñòðîåíèå ïîçâîëÿåò ïðèéòè ê ïðàêòè÷åñêè íóëåâîìó ïîòðåáëåíèþ â ñòàòèêå (ïðè îòñóòñòâèè ïåðåêëþ÷åíèé). Äëÿ òîãî, ÷òîáû îáåñïå÷èòü ñîâìåñòèìîñòü ñ íèçêîâîëüòíûìè KÌÎÏ óñòðîéñòâàìè ïî âõîäó, íåîáõîäèìî ñîáëþäàòü ñëåäóþùèå óñëîâèÿ: 1. Ìèíèìàëüíîå çíà÷åíèå âõîäíîãî íàïðÿæåíèÿ ÂÛÑÎKÎÃÎ óðîâíÿ VIH äîëæíî áûòü íå ìåíåå 2 Â, íî íå âûøå íàïðÿæåíèÿ ïèòàíèÿ VDD. Äëÿ KÌÎÏ-óñòðîéñòâ âîîáùå ïðèíÿòî, ÷òî óðîâåíü ëîãè÷åñêîé åäèíèöû íå ìåíåå 0.7 íàïðÿæåíèÿ ïèòàíèÿ. 2. Ìàêñèìàëüíîå çíà÷åíèå âõîäíîãî íàïðÿæåíèÿ ÍÈÇKÎÃÎ óðîâíÿ VIL ðàâíî 0.8 Â. Òàêèì îáðàçîì, êîãäà ðàçðàáîò÷èê â òåõíè÷åñêîé äîêóìåíòàöèè ÷èòàåò «Components are «LVTTL-compatible» èëè «LVCMOS-compatible», ýòî îçíà÷àåò, ÷òî âûõîäíûå õàðàêòåðèñòèêè òàêîãî ïðèáîðà ñîîòâåòñòâóþò ïðèâåäåííûì â Òàáë. Ï2.9 è Ï2.10 ñîîòâåòñòâåííî. Íî, êàê èçâåñòíî, íåëüçÿ îáúÿòü íåîáúÿòíîå, ïîýòîìó ïðîèçâîäèòåëè ÷àñòî óêàçûâàþò íà îòêëîíåíèÿ îò ñòàíäàðòà, êàê ïðàâèëî, â ñòîðîíó ïðåâûøåíèÿ ñòàíäàðòíûõ çíà÷åíèé (exceed the requirements). K òàêèì ïðåâûøåíèÿì îòíîñÿòñÿ ïîâûøåí-
— 563 —
Ïðèëîæåíèÿ Òàáëèöà Ï2.9. Îñíîâíûå ïàðàìåòðû ÑÑÒ Îáîçíà÷åíèå
Ïàðàìåòð
Óñëîâèÿ èçìåðåíèÿ
min
Íàïðÿæåíèå VTT/VREF íàãðóçêè/îïîðíîå — 1.35 íàïðÿæåíèå Âõîäíîå íàïðÿæåíèå VIH VREF + 0.2 ÂÛÑÎKÎÃÎ óðîâíÿ (high— level input voltage) Âõîäíîå íàïðÿæåíèå VIL ÍÈÇKÎÃÎ óðîâíÿ (low— — level input voltage) Âûõîäíîå íàïðÿæåíèå 50-îìíàÿ VOH VREF+ 0.4 ÂÛÑÎKÎÃÎ óðîâíÿ (highíàãðóçêà level output voltage) Âûõîäíîå íàïðÿæåíèå 50-îìíàÿ VOL VREF – 0.6 ÍÈÇKÎÃÎ óðîâíÿ (lowíàãðóçêà level output voltage) VSS VDD IO ïðè VO < 0 Â èëè VO > VDD
±20 ìÀ ±20 ìÀ
Òàáëèöà Ï2.11. Ïàðàìåòðû 2.5-âîëüòîâûõ ÈÑ ÎáîçíàÏàðàìåòð Óñëîâèÿ èçìåðåíèÿ ÷åíèå VDD Íàïðÿæåíèå ïèòàíèÿ — Âõîäíîå íàïðÿæåíèå VIH VOUT > VOH ÂÛÑÎKÎÃÎ óðîâíÿ (high-level input voltage) Âõîäíîå íàïðÿæåíèå VIL VOUT < VOL ÍÈÇKÎÃÎ óðîâíÿ (low-level input voltage) VDD = MIN, Âûõîäíîå íàïðÿæåíèå IOH = VOH VI = VIH ÂÛÑÎKÎÃÎ óðîâíÿ –100 ìêÀ èëè VIL (high-level output voltage) VDD = MIN, Âûõîäíîå íàïðÿæåíèå IOH = VOL VI = VIH ÍÈÇKÎÃÎ óðîâíÿ (low–100 ìêÀ level output voltage) èëè VIL II VDD = MIN, VI = VIH èëè VIL Âõîäíîé òîê
Çíà÷åíèå min max 2.3 2.7
Åäèíèöà èçìåðåíèÿ Â
1.7
VDD + 0.3
Â
–0.3
0.4
Â
1.7
VDD + 0.3
Â
–0.3
0.4
Â
—
±5
ìêÀ
Ïðèìå÷àíèå: MIN — ìèíèìàëüíîå çíà÷åíèå.
Ñòàíäàðò JEDEC JESD8-5 îïðåäåëÿåò ëîãè÷åñêèå óðîâíè è ïàðàìåòðû ÈÑ, ðàáîòàþùèõ â äèàïàçîíå ïèòàíèÿ 2.5 Â. Ïðåäåëüíî äîïóñòèìûå ïàðàìåòðû, îïðåäåëÿåìûå ýòèì ñòàíäàðòîì, ïðèâîäÿòñÿ â Òàáë. Ï2.10. Ïàðàìåòðû 2.5-âîëüòîâûõ ÈÑ ïðèâîäÿòñÿ â Òàáë. Ï2.11. Ïîñëåäíèå ðàçðàáîòêè ÈÑ âûïîëíÿþòñÿ ïî 0.18-ìèêðîííîé òåõíîëîãèè, ïðè èñïîëüçîâàíèè êîòîðîé íàïðÿæåíèå ïèòàíèÿ ñîñòàâëÿåò âñåãî ëèøü 1.8 Â. Ñòàíäàðò JESD8-7 îïðåäåëÿåò êàê ïðåäåëüíî äîïóñòèìûå, òàê è ðàáî÷èå ïàðàìåòðû 1.8-âîëüòîâûõ ÈÑ.  Òàáë. Ï2.12 ïðèâåäåíû ïðåäåëüíî äîïóñòèìûå ïàðàìåòðû äëÿ 1.8-âîëüòîâûõ ÈÑ. Ðàáî÷èå õàðàêòåðèñòèêè 1.8-âîëüòîâûõ ÈÑ ïðèâåäåíû â Òàáë. Ï2.13.
— 565 —
Ïðèëîæåíèÿ
Управление 3м состоянием DATA OUT
Z0
————— ——— DATA OUT Управление передатчиком
R0 VTT
VTT
СТТ передатчик
ALT'P2208+
DATA IN (порт ввода/вывода)
СТТ приемник
Ðèñ. Ï2.29. Ñõåìà èñïîëüçîâàíèÿ ÑÒÒ-èíòåðôåéñà
HZ VDD
30/30 D08
2
2
2
2
10/10
500 40 2
2
2
2
40 (1.2u)
VTT
D0 10
VDD (ENABLE)
ALT'P2 209
500
Высокоскоростной интерфейс ввода/вывода
Ðèñ. Ï2.30. Ñõåìà èñïîëüçîâàíèÿ ÑÒÒ-èíòåðôåéñà
— 566 —
Ïðèëîæåíèÿ Òàáëèöà Ï2.12. Ïðåäåëüíî äîïóñòèìûå ïàðàìåòðû äëÿ 1.8-âîëüòîâûõ ÈÑ Ïàðàìåòð
Îáîçíà÷åíèå
Çíà÷åíèå
Íàïðÿæåíèå ïèòàíèÿ (supply voltage)
VDD
–0.5 Â...2.5 Â
Âõîäíîå ïîñòîÿííîå íàïðÿæåíèå (DC input voltage)
VIN
–0.5 Â...VDD + 0.5 Â
Âûõîäíîå ïîñòîÿííîå íàïðÿæåíèå (DC output voltage)
VOUT
–0.5 Â...VDD + 0.5 Â
II ïðè VI < 0 Â èëè VI > VDD IO ïðè VO < 0 Â èëè VO > VDD
Âõîäíîé òîê (DC input current) Âûõîäíîé òîê (DC output current)
±20 ìÀ ±20 ìÀ
Òàáëèöà Ï2.13. Ðàáî÷èå õàðàêòåðèñòèêè 1.8-âîëüòîâûõ ÈÑ Îáîçíà÷åíèå
Óñëîâèÿ èçìåðåíèÿ
Ïàðàìåòð
Çíà÷åíèå min
max
Åäèíèöà èçìåðåíèÿ
1.2
1.95
Â
VDD
Íàïðÿæåíèå ïèòàíèÿ
VIH
Âõîäíîå íàïðÿæåíèå ÂÛÑÎKÎÃÎ óðîâíÿ (high-level input voltage)
VOUT > VOH
0.7 VDD
VDD + 0.3
Â
VIL
Âõîäíîå íàïðÿæåíèå ÍÈÇKÎÃÎ óðîâíÿ (lowlevel input voltage)
VOUT < VOL
–0.3
0.3 VDD
Â
VOH
Âûõîäíîå íàïðÿæåíèå ÂÛÑÎKÎÃÎ óðîâíÿ (high-level output voltage)
IOH = –100 ìêÀ
VDD – 0.2
—
Â
VOL
Âûõîäíîå íàïðÿæåíèå ÍÈÇKÎÃÎ óðîâíÿ (lowlevel output voltage)
IOL = –100 ìêÀ
—
0.2
Â
— 567 —
Ïðèëîæåíèÿ
Ïðèëîæåíèå 3.
Ïðàêòè÷åñêèå ðåêîìåíäàöèè ïî ðàçðàáîòêå ïå÷àòíûõ ïëàò
Ñîâðåìåííûå ýëåêòðîííûå óçëû çíà÷èòåëüíî îòëè÷àþòñÿ îò óñòðîéñòâ ðàçðàáîòêè êîíöà 80-õ — íà÷àëà 90-õ ãîäîâ. Âî-ïåðâûõ, íîâûå òåõíîëîãèè ïîâåðõíîñòíîãî ìîíòàæà ïðèâåëè ê óìåíüøåíèþ ãàáàðèòîâ êîìïîíåíòîâ â 3…6 ðàç. Âî-âòîðûõ, ïîÿâèëèñü íîâûå êîðïóñà èíòåãðàëüíûõ ñõåì ñ ìàëûì øàãîì ìåæäó âûâîäàìè (0.5…0.65 ìì), êîðïóñà ñ øàðèêîâûìè âûâîäàìè (BGA), íîâûå ìàëîãàáàðèòíûå äèñêðåòíûå êîìïîíåíòû è ñîåäèíèòåëè. Â-òðåòüèõ, ïîâûñèëàñü òî÷íîñòü èçãîòîâëåíèÿ ïå÷àòíûõ ïëàò, ïîâûñèëèñü âîçìîæíîñòè äëÿ ðàçâîäêè ñëîæíûõ óñòðîéñòâ â ìàëûõ ãàáàðèòàõ. Ïîÿâëåíèå íîâîé ýëåìåíòíîé áàçû ïîçâîëÿåò ãîâîðèòü î âîçìîæíîñòè âîïëîùåíèÿ ñëîæíûõ ñèñòåì íà îäíîé ïëàòå è äàæå íà îäíîì êðèñòàëëå. Ýòî îçíà÷àåò, ÷òî íà îäíîé è òîé æå òèïè÷íîé ïëàòå óñòðîéñòâà îáðàáîòêè ñèãíàëîâ â ìàëûõ ãàáàðèòàõ ðàçìåùàþòñÿ âûñîêî÷óâñòâèòåëüíûé àíàëîãîâûé òðàêò, àíàëîãî-öèôðîâîé ïðåîáðàçîâàòåëü, âûñîêîñêîðîñòíàÿ ñõåìà öèôðîâîé îáðàáîòêè íà ïðîöåññîðå è (èëè) ïðîãðàììèðóåìûõ ëîãè÷åñêèõ èíòåãðàëüíûõ ñõåìàõ, áóôåðíûå ýëåìåíòû è äðàéâåðû ëèíèé ñâÿçè, ýëåìåíòû ñòàáèëèçàòîðîâ íàïðÿæåíèÿ ïèòàíèÿ è ïðåîáðàçîâàòåëåé óðîâíÿ è äðóãèå óçëû. Åñòåñòâåííî, ÷òî ýòî íàêëàäûâàåò ñâîé îòïå÷àòîê íà ìåòîäîëîãèþ ðàçðàáîòêè ïëàòû. Ïðè ïðîåêòèðîâàíèè ïëàò ñ èñïîëüçîâàíèåì ñðåäñòâ ÑÀÏÐ íåîáõîäèìî âñåãäà ïîìíèòü, ÷òî ñêîëü ñîâåðøåííûìè íè áûëè àëãîðèòìû àâòîìàòè÷åñêîé òðàññèðîâêè, îíè íèêîãäà íå çàìåíÿò ðàáîòó êîíñòðóêòîðà.  ëó÷øåì ñëó÷àå â àâòîìàòè÷åñêîì ðåæèìå âîçìîæíà òðàññèðîâêà ìàëî÷óâñòâèòåëüíûõ, ìåäëåííûõ (äî 3…5 ÌÃö) öèôðîâûõ öåïåé. Îñîáîå âíèìàíèå ñëåäóåò óäåëÿòü ïðîáëåìå çàçåìëåíèÿ. Çåìëÿíàÿ øèíà îïðåäåëÿåòñÿ êàê ýêâèïîòåíöèàëüíàÿ ïîâåðõíîñòü, ïîòåíöèàë êîòîðîé ñëóæèò äëÿ ñõåìû óðîâíåì îòñ÷åòà íàïðÿæåíèé.
— 568 —
Ïðèëîæåíèÿ Ïðè ïðîåêòèðîâàíèè çåìëÿíûõ öåïåé ïðåñëåäóþòñÿ äâå öåëè. Âî-ïåðâûõ, ñëåäóåò ïîìíèòü, ÷òî çàçåìëåíèå ìèíèìèçèðóåò íàïðÿæåíèå øóìîâ, âîçíèêàþùåå ïðè ïðîõîæäåíèè òîêîâ îò íåñêîëüêèõ ñõåì ÷åðåç îáùåå ñîïðîòèâëåíèå çåìëè. Âî-âòîðûõ, íåîáõîäèìî èñêëþ÷èòü îáðàçîâàíèå êîíòóðîâ çàçåìëåíèÿ, ÷óâñòâèòåëüíûõ ê ýëåêòðîìàãíèòíûì ïîëÿì è ðàçíîñòÿì ïîòåíöèàëîâ. Òàêèì îáðàçîì, çàçåìëåíèå ïðåäñòàâëÿåò ñîáîé îáëàäàþùóþ íèçêèì èìïåäàíñîì öåïü âîçâðàòà òîêà. Îòñþäà ÿñíî, ÷òî ïðîòåêàíèå ëþáîãî òîêà â ñèñòåìå çàçåìëåíèÿ ïðèâîäèò ê ïîÿâëåíèþ ðàçíîñòè ïîòåíöèàëîâ. ßñíî, ÷òî ýòà ðàçíîñòü ïîòåíöèàëîâ äîëæíà áûòü ìèíèìàëüíîé. Îòñþäà ñëåäóåò, ÷òî ïðè ïðîåêòèðîâàíèè òîïîëîãèè çåìëè ñëåäóåò îáåñïå÷èòü èìïåäàíñ çàçåìëåíèÿ íà êàê ìîæíî áîëåå íèçêîì óðîâíå è êîíòðîëèðîâàòü òîêè, ïðîòåêàþùèå ìåæäó èñòî÷íèêàìè è íàãðóçêàìè. Ïîýòîìó íåîáõîäèìî èñïîëüçîâàòü íåñêîëüêî öåïåé çàçåìëåíèÿ, ñîåäèíåííûõ â îäíîé òî÷êå. Ïðè÷åì òðàäèöèîííîãî äåëåíèÿ íà àíàëîãîâîå è öèôðîâîå çàçåìëåíèå ìîæåò îêàçàòüñÿ íåäîñòàòî÷íî. Íà Ðèñ. Ï3.1 ïðåäñòàâëåíà ñõåìà çàçåìëåíèÿ äâóõ àíàëîãîâûõ çåìåëü, ïðè÷åì îäíà ñëóæèò çåìëåé äëÿ ñëàáîãî âõîäíîãî ñèãíàëà, à äðóãàÿ — äëÿ ìîùíîãî âûõîäíîãî. Ñëåäóåò èçáåãàòü çàçåìëåíèÿ òàê íàçûâàåìîé ãèðëÿíäîé, íàäî èñïîëüçîâàòü îäíîòî÷å÷íûå ñõåìû çàçåìëåíèÿ, êîãäà ðàçëè÷íûå çåìëè ñîåäèíÿþòñÿ â òî÷êå ââîäà ó ðàçúåìà ïèòàíèÿ.  ïåðâóþ î÷åðåäü ñëåäóåò ïîìíèòü, ÷òî åñëè ðàçðàáàòûâàåòñÿ ïëàòà, ñîäåðæàùàÿ êàê àíàëîãîâûå, òàê è öèôðîâûå óçëû è ðàáîòàþùàÿ íà äîñòàòî÷íî âûñîêîé òàêòîâîé ÷àñòîòå (>1 ÌÃö), òî íå ñëåäóåò ýêîíîìèòü è ðàçðàáàòûâàòü äâóõñëîéíóþ ïëàòó.  ýòîì ñëó÷àå íåîáõîäèìî èñïîëüçîâàòü ìíîãîñëîéíóþ ïëàòó, â êîòîðîé âíóòðåííèå ñëîè ïðåäñòàâëÿþò ñîáîé ñïëîøíûå ïëîñêîñòè çåìëè è ïèòàíèÿ. Zf1
Zf Zi
Zi1
Входной сигнал
RL
Выход RL1
К источнику питания
Силовая «земля»
Ðèñ. Ï3.1. Ñõåìà çàçåìëåíèÿ äëÿ äâóõ àíàëîãîâûõ çåìåëü
— 569 —
ALT'P2210+
Сигнальная «земля»
Ïðèëîæåíèÿ
ALT'P2211+
Íåëèøíå íàïîìíèòü î âñåì èçâåñòíîì ñêèí-ýôôåêòå è çàâèñèR1 ìîñòè èìïåäàíñà îò ÷àñòîòû, ïîýòîìó îáëàñòü ìåòàëëèçàöèè îäR2 íîãî è òîãî æå ðàçìåðà áóäåò èìåòü ðàçëè÷íûé èìïåäàíñ íà íèçêèõ è âûñîêèõ ÷àñòîòàõ. Ðåêîìåíäóåòñÿ âñå ñâîáîäíîå ïðîñòR3 ðàíñòâî ïëàòû çàïîëíèòü ñïëîøíîé îáëàñòüþ ìåòàëëèçàöèè, ñîåäèíåííîé ñ îáùåé øèíîé, ÷òîáû èçáåæàòü íàâîäîê. Ðèñ. Ï3.2. Èñïîëüçîâàíèå çàùèòíîãî Âûáèðàÿ øàã ñåòêè òðàññèðîâêîëüöà êè, íàäî ó÷èòûâàòü íå òîëüêî ðàçðåøàþùóþ ñïîñîáíîñòü ôîòîïëîòòåðà è äðóãîãî òåõíîëîãè÷åñêîãî îáîðóäîâàíèÿ, íî è ïîìíèòü î âîçìîæíûõ òîêàõ óòå÷êè ÷åðåç ïëàòó. Îñîáåííî ýòî êðèòè÷íî ê âõîäíûì âûñîêîîìíûì öåïÿì óñèëèòåëåé, â ýòîì ñëó÷àå íåïëîõîé ìåðîé ÿâëÿåòñÿ çàùèòíîå êîëüöî (Ðèñ. Ï3.2). Åñëè ïåðåäàåòñÿ ñêîðîñòíîé ñèãíàë íà äîñòàòî÷íî áîëüøîå ðàññòîÿíèå, òî ñäåëàòü ýòî ìîæíî òîëüêî ïî ñîãëàñîâàííîé ëèíèè íà íèçêîîìíóþ íàãðóçêó. Íåñêîëüêî ñëîâ ñëåäóåò ñêàçàòü î ôèëüòðóþùèõ åìêîñòÿõ. Î÷åíü ÷àñòî íà÷èíàþùèé êîíñòðóêòîð áåçäóìíî óñòàíàâëèâàåò èõ ãäå ïðèäåòñÿ, ðóêîâîäñòâóÿñü òîëüêî íîðìîé óñòàíîâêè áëîêèðóþùèõ åìêîñòåé íà ÷èñëî òåõ èëè èíûõ ìèêðîñõåì. Ñëåäóåò ïîìíèòü, ÷òî äëÿ òîãî, ÷òîáû ôèëüòðóþùèå åìêîñòè ýôôåêòèâíî ðàáîòàëè, äëèíà öåïè îò âûâîäà ìèêðîñõåìû äî åìêîñòè áûëà ìèíèìàëüíîé. Èñïîëüçîâàíèå ïëàíàðíûõ êîìïîíåíòîâ ïðàêòè÷åñêè ïîëíîñòüþ ïîçâîëÿåò ðåøèòü ýòó ïðîáëåìó (Ðèñ. Ï3.3). Íå ñëåäóåò ðàçíîñèòü â ïðîñòðàíñòâå ñèãíàëüíóþ è âîçâðàòíûå öåïè îäíîãî ñèãíàëà (Ðèñ. Ï3.4). Ýòî çàìå÷àíèå êàñàåòñÿ òàêæå äèôôåðåíöèàëüíûõ âõîäíûõ öåïåé, êîòîðûå äîëæíû èìåòü îäèíàêîâóþ äëèíó. Ñëåäóåò ñòðåìèòüñÿ âûïîëíèòü ðàçâîäêó ÷óâñòâèòåëüíûõ àíàëîãîâûõ öåïåé â îäíîì ñëîå (ñî ñòîðîíû óñòàíîâêè êîìïîíåíòîâ) è èçáåãàòü ïåðåñå÷åíèé ïðîâîäíèêîâ, òàê êàê íàðóøåíèå öåëîñòíîñòè çàçåìëÿþùåãî ñëîÿ âûçûâàåò óâåëè÷åíèå åãî èíäóêòèâíîñòè è, ñëåäîâàòåëüíî, âîçðàñòàåò ñòåïåíü âçàèìíîãî âëèÿíèÿ âîçâðàòíûõ òîêîâ (Ðèñ. Ï3.5).
— 570 —
Ïðèëîæåíèÿ
Слой земли конденсатора C B
B 0 Поверхность монтажа
0
B
B
C
C
Слой земли
D B B
Наиболее удобное место установки фильтра конденсаторов
DD
Аналоговая земли ALT'P2212+
DDDBBAA CC DD
Ðèñ. Ï3.3. Óñòàíîâêà ôèëüòðóþùèõ åìêîñòåé Неудачная трассировка
Правильная трассировка
Нагрузка
Нагрузка
Нагрузка
Нагрузка
Нагрузка ALT'P2213+
Нагрузка
Ðèñ. Ï3.4. Ðàçâîäêà ñèãíàëüíîé öåïè è öåïè âîçâðàòà
Ïðè ïðîåêòèðîâàíèè ïëàòû, ñîäåðæàùåé ñêîðîñòíûå öèôðîâûå ìèêðîñõåìû (ÏËÈÑ, ñèãíàëüíûå ïðîöåññîðû è ò.ï.), ñëåäóåò ïîäóìàòü î òåïëîîòâîäå. Ïîëåçíû áûâàþò äîïîëíèòåëüíûå ñëîè äëÿ îòâîäà èçëèøíåãî òåïëà îò ìèêðîñõåì. Ïîëåçíî ïîñëå çàâåðøåíèÿ ðàçðàáîòêè òîïîëîãèè ïëàòû ìàêñèìàëüíî ðàñøèðèòü âñå ñèëîâûå öåïè, çåìëè, îòâåòñòâåííûå ñèãíàëüíûå öåïè. Ïðè ðàçðàáîòêå îòâåòñòâåííûõ óñòðîéñòâ íå ñëåäóåò çàáûâàòü î âîçìîæíîñòÿõ ñîâðåìåííûõ ñðåäñòâ ïî àíàëèçó öåëîñòíîñòè ñèãíàëîâ, òåïëîâûõ ðåæèìîâ, ïðî÷íîñòè è ò.ä.
— 571 —
Ïðèëîæåíèÿ
Разрыв в области металлизации земли Пересечение с земляным слоем
Сигнал 1
Возвратный ток сигнала 1
Сигнал 2
ALT'P2214+
Возвратный ток сигнала 2
Ðèñ. Ï3.5. Âçàèìîäåéñòâèå âîçâðàòíûõ òîêîâ íà âûðåçå â çàçåìëÿþùåé ïëîñêîñòè
Ëèòåðàòóðà 1. 2. 3. 4. 5.
Ñòåøåíêî Â.Á. Øêîëà ðàçðàáîòêè àïïàðàòóðû öèôðîâîé îáðàáîòêè ñèãíàëîâ íà ÏËÈÑ. // Chip News,1999, ¹ 8—10, 2000, ¹ 1—3. Àðìñòðîíã Äæ.Ð. Ìîäåëèðîâàíèå öèôðîâûõ ñèñòåì íà ÿçûêå VHDL. Ïåð. ñ àíãë. // Ì.: Ìèð, 1992, ñ.175. Âèöèí Í. Ñîâðåìåííûå òåíäåíöèè ðàçâèòèÿ ñèñòåì àâòîìàòèçèðîâàííîãî ïðîåêòèðîâàíèÿ â îáëàñòè ýëåêòðîíèêè. // Chip News, ¹ 1, 1997. Ãóáàíîâ Ä.À., Ñòåøåíêî Â.Á., Õðàïîâ Â.Þ., Øèïóëèí Ñ.Í. Ïåðñïåêòèâû ðåàëèçàöèè àëãîðèòìîâ öèôðîâîé ôèëüòðàöèè íà îñíîâå ÏËÈÑ ôèðìû «Altera». // Chip News, ¹ 9—10, 1997. Ãóáàíîâ Ä.À., Ñòåøåíêî Â.Á. Ìåòîäîëîãèÿ ðåàëèçàöèè àëãîðèòìîâ öèôðîâîé ôèëüòðàöèè íà îñíîâå ïðîãðàììèðóåìûõ ëîãè÷åñêèõ èíòåãðàëüíûõ ñõåì. // Ñáîðíèê äîêëàäîâ 1-é Ìåæäóíàðîäíîé êîíôåðåíöèè «Öèôðîâàÿ îáðàáîòêà ñèãíàëîâ è åå ïðèìåíåíèÿ», 30.06—3.07.1998, Ìîñêâà, ÌÖÍÒÈ, òîì 4, ñ. 9—19.
— 572 —
Ëèòåðàòóðà 6.
7. 8. 9. 10. 11. 12. 13. 14.
Ñòåøåíêî Â.Á. Îñîáåííîñòè ïðîåêòèðîâàíèÿ àïïàðàòóðû öèôðîâîé îáðàáîòêè ñèãíàëîâ íà ÏËÈÑ ñ èñïîëüçîâàíèåì ÿçûêîâ îïèñàíèÿ àïïàðàòóðû // Ñáîðíèê äîêëàäîâ 2-é Ìåæäóíàðîäíîé êîíôåðåíöèè «Öèôðîâàÿ îáðàáîòêà ñèãíàëîâ è åå ïðèìåíåíèÿ», 21.09—24.09.1999, Ìîñêâà, ÌÖÍÒÈ, òîì 2, ñ. 307—314. Ùåðáàêîâ Ì.À., Ñòåøåíêî Â.Á., Ãóáàíîâ Ä.À. Öèôðîâàÿ ïîëèíîìèíàëüíàÿ ôèëüòðàöèÿ: àëãîðèòìû è ðåàëèçàöèÿ íà ÏËÈÑ // Èíæåíåðíàÿ ìèêðîýëåêòðîíèêà, ¹ 1 (3), ìàðò 1999, ñ. 12—17. Ãóáàíîâ Ä.À., Ñòåøåíêî Â.Á., Øèïóëèí Ñ.Í. Ñîâðåìåííûå àëãîðèòìû ÖÎÑ: ïåðñïåêòèâû ðåàëèçàöèè. // Ýëåêòðîíèêà: íàóêà, òåõíîëîãèÿ, áèçíåñ, ¹ 1, 1999, ñ. 54—57. Øèïóëèí Ñ.Í., Ãóáàíîâ Ä.À., Ñòåøåíêî Â.Á., Õðàïîâ Â.Þ. Òåíäåíöèè ðàçâèòèÿ ÏËÈÑ è èõ ïðèìåíåíèå äëÿ öèôðîâîé îáðàáîòêè ñèãíàëîâ // Ýëåêòðîííûå êîìïîíåíòû, ¹ 5, 1999, ñ. 42—45. IEEE Standart 1149.1a –1993. ByteBlasterMV Parallel Port Download Cable, Data Sheet, «Altera corporation», ver.1, April 1998. AN74. High Speed Boards Design, «Altera corporation». Ñòåøåíêî Â.Á. ACCEL EDA: òåõíîëîãèÿ ïðîåêòèðîâàíèÿ ïå÷àòíûõ ïëàò. // Ì.: Íîëèäæ, 2000. Ñòåøåíêî Â.Á. ÏËÈÑ ôèðìû «Altera»: ïðîåêòèðîâàíèå óñòðîéñòâ îáðàáîòêè ñèãíàëîâ // Ì.: «Äîäýêà», 2000.
— 573 —