Якось потрібно було мені зробити binary to BCD convertor щоб запрограмити його в CPLD від Altera і бажано з найнижчим використанням ресурсів (логічних блоків), трохи погугливши знайшо даташіт на 74185, в бібліотеці MAX+plus II вона теж була. Довго не думаючи зробив маленький проект схему взяв з даташіта на 74185 рис.1.
Рис.1
Далі відкриваю файл з розширенням *.rtf, щоб глянути на результати компіляції. І от лишенько проект зайняв 32LE, тобто якщо брати CPLD на 32LE то тоді туди вже більше нічого не влізе. Далі вирішив протестити проект і закомпілювати його під різні серії CPLD та FPGA. Компіляцію проводив на версії MAX+plus II ver. 10.0.
Ось результати ….
Devices | Defining a Logic Synthesis Style |
Fast used LE/LC | Normal used LE/LC | WYSIWYG used LE/LC |
(Classic) | 32 | 32 | 41 |
(MAX3000) | 41 | 32 | 39 |
(MAX7000) | 41 | 32 | 39 |
(MAX9000) | 42 | 40 | 44 |
(FLEX 6000) | 43 | 43 | 72 |
(FLEX 8000) | 44 | 43 | 71 |
(FLEX 10K) | 44 | 42 | 71 |
(ACEX 1K) | 44 | 42 | 71 |
Чесно кажучи результати більш ніж вразили, самі простенькі серії типу Classic, Max3000, Max7000 краще оптимізують логіку ніж круті серії з тригерами та пам’яттю. Всі параметри синтезу були виставленні по замовчуванню див. Рис. 2 , Рис. 3.
Рис. 2.
Рис. 3
Глобальні параметри виглядають так Рис. 4.
Рис. 4
Крім того дуже здивували результати синтезу проекту в серії MAX3000, MAX7000, MAX9000 на основі комбінаторної логіки при зміні параметрів в Advanced Options рис. 5, стиль синтезу NORMAL.
Рис. 5
Ось результати...
Total logic cells used: 21/32 ( 65%)
При синтезі в мікросхему MAX3032 або в MAX7032.
Total logic cells used: 25/320 ( 7%)
При синтезі в мікросхему MAX9000(EPM9320LC84-15)
Жовтим позначено скільки ЛБ займає проект в тій чи іншій серії мікросхеми. Як результат вирішив бінарний конвертор в BCD зробити на двох лічильниках, в однин з них буде завантажуватись бінарний вхідний код і при кожному CLK буде віднімати 1 і коли лічильник дорахує до 0 припинити віднімати, інший буде як група BCD лічильників(я використовував 74190 з загальної бібліотеки ) каскадованих між собою(в нашому випадку 3 BCD лічильника), тільки вони вже будуть додавати 1 до свого результату при приході CLK.Лічильники будуть працювати паралельно тільки один додавати , другий віднімати. Далі невеличка схема керування при досягненні 0 на першому лічильнику відключити CLK на першому і другому лічильнику, далі щось робимо з результатом як варіант переводимо ВСD в 7 segment індикацію( використовував серію 7449). В цієї схеми є й недоліки потрібно скажімо так, час для обрахунку результату, але людина не може сприймати зображення яке міняється з частотою більше ніж 50 Гц, а як правило схеми на CPLD працють на частотах min від 10 кГц(або і менше) і результат буде видаватись з частотою приблизно 40 Гц. Але перевага теж є буде займати значно менше ЛБ(LC), по приблизним підрахункам 8 ЛБ на перший лічильник, 4ЛБ * 3 BCD лічильника і копійки на схему керування, ну нехай 1-2ЛБ, і того 22ЛБ. При переході такої схеми на інші серії загальна кількість використаних ЛБ буде та сама, оскільки використовуються лише програмовані D-трігери з яких також складається ЛБ окрім серії Classic (це PLD і не містить D-трігерів). Таку схему можна використовувати для тестування і на інших серіях CPLD, FPGA, SOC від Altera та інших виробників. Думаю може скоро протестую в Quartus, а також цікавить Xilinx кажуть що в них з компілятором теж не все в порядку. Мені розказували одну історію коли брали один і той же проект і компілювали під Xilinx та Аltera, правда на яких серіях не казали, виходило Altera більше оптимізує проект ніж Xilinx, я думаю що це більше пов’язано із внутрішньою структурою і системою зв’язків між ЛБ в середині CPLD, FPGA, SoC. Що стосується оптимізації на VHDL чи Verilog то це скоріше міф, оскільки все залежить від структури проекту який ти хочеш зашити в CPLD, FPGA, SoC, а також від самої структури CPLD, FPGA, SoC. Короче кажуть ти просто вибираєш мову якою вказуєш що CPLD, FPGA, SoC має робити, а що воно має робити ти вже сам визначаєш як інженер в структурі проекту.
P.S. Можливо скоро навіть зявляться такі вакансії як CPLD, FPGA, SoC architecture optimization