Якось потрібно було мені зробити 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