Bdyssh! // Бдыщщь!

Из человека получается семь кусков мыла, %username%!

Доработка Xilinx ISE Webpack / Making Xilinx ISE Webpack useable

Well, this article is mostly complete and production-quality now. But not the final release.

Added 02/15/2013: Tested also with ISE 14.4, so it works on 13.3, 13.4, 14.4 same way – just replace the path(s).

06/09/2013: Tested also with spartan6.lib

02/26/2014: added about ^V key

Многие производители ПО уделяют с каждым годом всё меньше внимания как качеству основных функций ПО, так и устранению недоработок, прилагая основные усилия к добавлению новых функций.

Особенно здесь отличаются производители узкоспециализированного ПО, такого, как средства разработки для конкретных аппаратных платформ. Здесь нет единого стандарта, и каждый производитель платформы (микросхемы) делает ПО произвольно, что постепенно привело к тому, что в части пользовательского интерфейса, такое ПО стало практически негодным к ежедневному безопасному использованию.

Типичным примером является интегрированная среда разработки для ПЛИС Xilinx. Это Xilinx Webpack IDE 13.4. Ранее ПО этой серии было известно как Xilinx Foundation.

Качество пользовательского интерфейса этого программного комплекса неуклонно снижалось со времён Foundation 4.2i, и теперь находится за гранью пригодности к ежедневному безопасному использованию.

Наиболее важная часть для отечественного разработчика — это схемный редактор, schematic editor. От высококачественного редактора из Foundation, не осталось даже следа. Принципиальные недостатки по сравнению с Foundation:

  1. Невозможно задать размер и гарнитуру схемных шрифтов.
  2. Как следствие — постоянное масштабирование, занимающее не менее 90% времени работы с ISE.
  3. Невозможно задать ступени масштабирования схемы.
  4. Невозможно отключить subpixel smoothing (сглаживание) шрифтов.
  5. Крайне тяжело попадание курсором мыши в вывод элемента при отрисовке проводов (связей).
  6. Элементы занимают слишком много места на листе.
  7. Неверная работа автоматического трассировщика связей вблизи элементов.
  8. Невозможно настроить вид соединения (wire junction).
  9. Отсутствие LogiBLOX.
  10. Отсутствие подавляющего большинства горячих клавиш, а те что есть, частично не работают (пример: Ctrl+W — Add Wire).
  11. Невозможно изменить назначение горячих клавиш, и предже всего, невозможность использования функциональных клавиш; выбраны очень неудобные клавиши по умолчанию.

Ну и собственно главный недостаток, присущий всем современным подобным программам — невозможность работы на чёрном фоне. Как же так, может спросить читатель, ведь в настройках явно присутствует тёмная цветовая схема? Но рано радоваться. Внезапно всплывающие окна, например настройки или результатов компиляции, имеют неменяемый белый фон, и неотвратимо жгут глаза. К счастью, данная проблема была почти полностью решена мной “на корню”, см. подробнее в статье. “Почти” означает здесь — достигнута пригодность к ежедневному безопасному использованию, но с некоторыми визуальными недостатками.

Без использования новых версий данного ПО обойтись невозможно, ведь последняя поддерживаемая микросхема в Foundation это Spartan-II, которые уже сняты с производства. Также, Xilinx Foundation никак невозможно запускать под Wine, что приводило к необходимости иметь виртуальную машину и пиратскую копию ОС Windows 2000/ME.

Поэтому остальные недостатки как-то придётся устранять самому, и никто здесь не поможет.

Хорошей новостью можно назвать то, что, после длительного поиска методов решения их по отдельности, выяснилось, что проблемы №№ 1, 2, 3, 5 и 6 имеют один корень. Это — неверная графическая библиотека примитивов, или элементов, идущая в комплекте. Элементы раздуты в 2 или 4 раза. Оказалось возможным исправить библиотеку в полуавтоматическом режиме, и это стало переломным моментом, после которого система получила статус пригодной к доработке.

Наиболее необходимая нам микросхема это Spartan-3A, поскольку она, в отличие от  Spartan-3/3E, может работать только от двух напряжений — 3,3В и 1,2В, при этом имеется в выводном корпусе (а значит, печатная плата будет обычной двухслойной 3-го квалитета), и достаточно дёшева. Использование только двух питающих напряжений, по сравнению с тремя, даёт возможность нормально работать с двумя слоями ПП. 1,2 вольта мы будем получать от универсального стабилизатора LM1117-ADJ, замыкая управляющий вход на землю и получая 1,23В на выходе. Помни! Если есть стандартное решение, запрещено ставить специализированные микросхемы! 

Итак, необходимо в текстовом файле /opt/Xilinx/13.4/ISE_DS/ISE/spartan3a/data/symbol/spartan3a.lib уменьшить размеры графических элементов в 2 или 4 раза. Недостатком этого можно назвать то, что теперь при выкладывании вашей схемы (*.sch) или целого проекта, надо обязательно прилагать файл примитивов (*.lib).

Для того, чтобы изменять файл не вручную, я написал инструкцию. Я делал так просто, как это только принципиально возможно, в соответствии с правилом KISS. Если вы видите, что здесь можно убрать хотя бы одно действие, обязательно пишите мне.

There is increasing number of software written past years, which is mostly enhanced with new, fresh functions. But most important, basic functions of it, realized poorly, and many bugs still not solved.

These are not only operating systems. Many problem we encounter when use special proprietary software, regardless of it is free or not. This software includes integrated development environments for specific particular hardware solutions, like FPGAs. There is not any standard for user interface for such apps defined anywhere. So all suppliers write its own user interfaces, and their quality drops rapidly past years. Looks like the suppliers even not worry for bugs in user interaction, while worrying mostly on adding new functions. No one bug reported by me was fixed all the times. Please note, most bugs i report, are easy and fast to fix.

Typical example of such IDE is Xilinx Webpack ISE 13.4. This software suite was formely known as Xilinx Foundation.

The quality of user interface, user interaction, look-and-feel, eye safe grade, keyboard/hotkey usage, and speed of developement, was drop dramatically since Foundation 4.2i epoch, up to today times.

The most important part of the ISE for users in my country, as well as for other old-school developers, is Schematic editor. There is major degrade in this part of ISE, compared to one from 15-years old Foundation series. Parts of this degrade are: –

  1. Can’t change size and font type of schematic fonts; at least, can’t change all of it in one place.
  2. Consequently, continuous zooming in/out during drawing, taking at least 90% of overall design time.
  3. Can’t define fixed zoom levels, or, at least, change step of zoom amounts.
  4. Can’t disable subpixel smoothing of screen fonts.
  5. Really hard to point with mouse cursor into hot ends (pins) of a symbol, to get net connected to it.
  6. Schematic primitives (elements, parts) take too many place on a sheet.
  7. Automatic tracer of wire is wrong work when wire go near elements.
  8. Can’t define outlook of wire junction (size, etc).
  9. Absence of LogiBLOX.
  10. Absence of major hotkeys. Remaining hotkeys are often not work (ex.: Ctrl+W – Add Wire), and have annoying, confusing binding, instead of crystally working in Foundation function keys without modifiers.

And most huge and dangerous regression, which also can be found in most special modern software: Can’t use black background.

— Hey, – you may say, – are you blind and not see Black background setting in Schematic editor options?

I see it and try it, but it is not helpful. Even if you so happy that qtconfig works for you and you can do rest of program window turn dark, like main working area in schematic (black), you still attacked by suddenly appear bright windows, like compilation (implementation) reports. And they unavoidable burn your eyes.

But…

Fortunately, this problem was almost completely solved by me for current and probably all future releases for all such a dangerous software. Based on Inversion feature of Ubuntu OS, and color filter suggested by other user, i develop inverting screen color fitler for fight with this problem. It is outlined here. It is still not absolutely visually cute solution, but it already can correctly turn most software to “non dangerous for eyes during continuous everyday use” grade. Note, as you maybe already notice, using proposed solution, you should use white background setting. Just because all becomes inverted.

Trying to solve remaining problems…

Unfortunately, we can’t avoid use of ISE Webpack at all. It’s due to Foundation series are not support anything above Spartan-II, which is obsolete now. Also, Xilinx Foundation software absolutely don’t run under Wine; so we should take pirated copy of Windows 2000/ME and use the Virtual Machine.

So we are alone with our problems in entire world.

But there are also good news exist.

After long searching for solutions of mentioned problems separately, i notice that problems number 1, 2, 3, 5 and 6 are all have one root. It is incorrect graphic library of primitives (symbols), which bundled with free version of Webpack ISE. All symbols are stretched 2 or 4 times. But it can be fixed, fortunately. And even not only hand-fixed, but also in semi-automatic mode, using auto-replacements and spread-sheet processing of text file. And this possibility becomes the key event, after which status of ISE software turns from “non-useable for production, only for short-time tests” to “can be fixed to everyday use“.

Now we can select which library we try to fix. I use Spartan-3A IC due to following reasons:

  • It can work only from two power lines [1], 3.3 volts and 1.2 volts, like discontinued Spartan-II (3.3 & 2.5 volts) and unlike Spartan-3/3E, which require three power rails. Three power lines makes almost impossible to use two-layer PCBs but still get industrial-quality design of PDS (power distributing system). <– “thanks” to Google, inc., for such a not working link. Using Yahoo gives correct link with less amount of hair tearing.
  • It is cheap enough.
  • It is exist in leaded package, like T(V)QFP, so we can use two-layer PCB with relaxed precision of 10/10 mils.

_________
[1] Dual-range VCCAUX supply simplifies 3.3V-only design: DS529:  Spartan-3A FPGA Family Data Sheet.

We can get both 2.5 or 1.2 volts from famous LM1117-ADJ (only one pc. need per project). And 1.2 volts mode even do not require setting resistors at all. So we save money when not buy special power solutions. You should always prefer common solutions, rather than special, according to KISS rule.

So, we should process /opt/Xilinx/13.4/ISE_DS/ISE/spartan3a/data/symbol/spartan3a.lib file in order to change graphical primitives size in it. Unfortunately, disadvantage of this, is you then obligated to share your .lib file also, when you share your .sch or entire design.

To make it faster, i write the following step-by-step guide. I do it as simple as possible, but it still looks too complicated. So if you see that it can be make simpler, please write me immediately!


Step-by-step instructions to change symbol size in Xilinx Webpack ISE.
Author: mvv@nposozvezdie.ru
Date: 07/02/2012
Tested on ISE 13.3, 13.4 (LINUX installation)
Spreadsheet software used: OpenOffice 3.2.1

: cd '/opt/Xilinx/13.4/ISE_DS/ISE/spartan3a/data/symbol'

(backup)
: sudo cp spartan3a.lib spartan3a.lib.orig

(remove leading spaces and tabs)
: sudo cat spartan3a.lib | sed 's/^[ \t]*//;s/[ \t]*$//' > spartan3a.txt

(start file manager, if need. Warning: root access!)
: sudo nautilus .

open spartan3a.txt in gedit (maybe by using file manager)

autoreplace all `">` to `" >`

autoreplace all `"?>` to `" ?>`

(to pervent setting cell type to `date` type)
autoreplace all `"1.0"` to `"*1.0*"`
autoreplace all `"1.1"` to `"*1.1*"`

(prevent conversion of specific values)
autoreplace all `"1"` to `"*1*"`
autoreplace all `"7"` to `"*7*"`

save and close gedit

rename spartan3a.txt to spartan3a.csv

open in openoffice using delimiter `other` -> `= ` (uncheck others) and text delimiter `"`

(do not do it)
NO! aa1 = a1, ..., az1 = z1

(zero suppressing)
cell AA1: =IF(LEN(A1)>0;A1;"")
repeat (or copy) AA1 to all AB1...AZ1

cell AC1: =IF(ISNUMBER(C1);CONCATENATE("=&&";TEXT(C1/4;"#");"&&");IF(LEN(C1)>0;CONCATENATE("=&&";C1;"&&");""))

(division by 4 - change above 4 to 2 if need)

copy column AC1 to AE1, AG1, AI1, AK1, AM1, AO1 (and maybe other remainin odd columns)

Determine how many rows in A column: go to A1 cell and press Ctrl+Down.
Mine is 35791, change it below to your value.

{When cursor at last line (35791), it is good idea to write anything into cell AA35791 for easy selection in next step.}

Select big block range AA1-AZ35791. (shift+ctrl+down may help if you on AA1 cell and follow previous suggestion; then Shift+Right some times).

do Edit->Fill->Down

See if your results looks properly.

Select big block range AA1-AZ35791, again. (Now may go to AA1 and Shift+Ctrl+Down, Shift+Ctrl+Right).

`copy` selection.

Open new sheet. (Ctrl+N)

`paste special` -> `Text` & `Numbers`  (it works like `paste values` in Microsoft Excel(R) ).

export (Save as...) as `Text .CSV (.csv)`, like spartan3a.new.csv
Use `Edit filter settings...` checkbutton to set following:
Field delimiter ` ` (space)
Text delimiter `` (delete any symbols)

after export:

autoreplace all `&&` to `"`

autoreplace all `"*1*"` to `"1"`
autoreplace all `"*7*"` to `"7"`
autoreplace all `"*1.0*"` to `"1.0"`
autoreplace all `"*1.1*"` to `"1.1"`

autoreplace all `" >` to `">`

autoreplace all `" ?>` to `"?>`

autoreplace fontsize:56 to fontsize:36

autoreplace ` ="` to `="`
autoreplace `=""` to `="0"`

! remove leading spaces and tabs ! (trailing only present now probably)
: cat spartan3a.new.csv | sed 's/^[ \t]*//;s/[ \t]*$//' > spartan3a.new.lib

(optional) autoreplace some other fontsize:xx to fontsize:yy

Replace Arial to Terminus

Полученный результат можно загрузить здесь, если вы не хотите проделывать правку самостоятельно; но он может оказаться уже не последней версии на этот момент.

Не следует думать, что я замечаю только недостатки. Новые версии Xilinx ISE Webpack имеют также и достоинства.

  1. Родная, работающая без костылей, версия для Linux! И она не только действительно работает, но и уже с помощью неё были выпуски промышленной продукции.
  2. Возможность модифицировать код некоторых скриптов, так что оказывается возможным легко подключить мой Ethernet-программатор ПЗУ.
  3. Библиотеки примитивов используются в текстовом виде, а также, визуальные примитивы (изображения элементов) “оторваны” от их логической части, что вместе даёт возможность правки библиотек. А это весьма важно для того, чтобы стало возможным сделать систему более дружественной и безопасной.
  4. Не требуется переустановка ISE (речь идёт, конечно, о версии для Linux), при обновлении или полной переустановке основной части ОС. Требуется лишь создать новый ярлык для ISE, и всё! А чтобы вообще не только не переустанавливать ISE, но и не копировать её файлы, достаточно папку /opt разместить в отдельном разделе жёсткого диска, и при переустановке системы просто подключить данный раздел в инсталляторе в /opt, так же, как это часто делается, к примеру, с папкой /home.

Что осталось сделать:

  • Добавить об использовании шрифта Terminus.
  • Добавить три скриншота.
  • Разобраться с горячими клавишами ISE.

Final result you may see here (to be displayed), if you can’t follow the instruction yourself. But it can be outdated at this moment.

You may think that i look only for disadvantages in Webpack ISE. No, i always notice the good news or changes in software, and always find the best practices to effectively use these changes. The benefits of new versions of Webpack ISEs include:

  1. Native Linux-compiled working version! It not only starts up; but i even already produce the designs of production quality with it, and they work now in places.
  2. Possibility to change some parts of software, due to they written as text scripts. So i connect to it my Ethernet EEPROM programmer with ease and cute way.
  3. Libraries of primitives are not only used in text form, but also not hardly tied with logical structure (internal digital logic) of primitive in this files, so it can be manually edited bu user, as we can see above. This is important for possibility to turn the system user-friendly and suitable for everyday safe use.
  4. You never need to reinstall ISE (i mean Linux version, of course) when you upgrade or completely reinstall your OS (Ubuntu or so). Just make new shortcut and go! And you may avoid not only reinstall of ISE, but even copying any its files: to obtain this, you may mount your /opt folder in separate hard drive partition, and during reinstall your OS, you just mount it at /opt again, as it usually occurs with your /home folder for example.

To do with this article:

  • Add section about Terminus font.
  • Add three screenshots.

To do with ISE software:

  • Fix hotkeys, if possible.

 

Внезапно обнаружилась возможность переименования цепей прямо на листе. Насколько это удобно и нужно – это вопрос, учитывая то, что сделано это весьма странно. Тем не менее потерять, эту информацию было бы неправильно. Итак, нужно на названии цепи, которое отражается на листе, нажать курсором мыши, чтобы выделилось именно только название, но не вся цепь вместе с названием. Затем нажать ^v (Ctrl+v) (нетрудно заметить, что это конфликтует с вставкой из буфера, но разве есть варианты?). И затем нажать на пустое место листа. Откроется окошко для переименования. Что примечательно, в нём будет использован правильный системный шрифт, в отличие от остального текста на листе, и правильного размера.

Таким обрахом удаётся переименовать цепи и текстовые комментарии, но не получается менять атрибуты. Что ж, нам остаётся смириться с определённой кривизной, и надеяться, что дальше не станет хуже.

Часть 2. Дорабатываем генератор символов

После данной доработки генератор символов выдаёт изображения, максимально соответствующие остальному схемному окружению.

Инструкция:

I suddenly discover ability of inline renaming the net names (directly on schematic sheet). Not sure if it useful for someone, but i at least should document it.

So, one need to select net name, but only name text, without selecting net itself. Then use ^v (Ctrl+v) (while it conflicts with Paste buffer, it still work). Then click with mouse cursor on empty place on the sheet. Opens the renaming window. It is noticeable that it uses correct system font, unlike other texts on sheet.

Described way works on net names and text labels/comments. But not work, unfortunately, on displayed attributes.

Part 2. Turning Symbol generator useable

This can be done in order to make generated symbols match the rest of schematic environment items, and even it can be close to XF4.2i look.

How to do it:

 

sudo gedit /opt/Xilinx/13.4/ISE_DS/ISE/data/projnav/scripts/dpm_ecsTasks.tcl

Search for 'spl2sym'
Then search for first '$_Exe' after it
Then after...
         lappend lCmdLine "-intstyle"
         lappend lCmdLine "ise"
...add/replace the following:
         lappend lCmdLine "-pinfont"
         lappend lCmdLine "24"
         lappend lCmdLine "-symfont"
         lappend lCmdLine "32"
         lappend lCmdLine "-symwidth"
         lappend lCmdLine "192"
         lappend lCmdLine "-pinspace"
         lappend lCmdLine "32"
         lappend lCmdLine "-pinlen"
         lappend lCmdLine "32"
         lappend lCmdLine "-pinedge"
         lappend lCmdLine "32"

Futher readings:

http://forums.xilinx.com/t5/user/viewprofilepage/user-id/18935  (please read all of my posts shown at that page).

Don’t forget to fix libraries so web updates etc. become to work:
It’s not my solution, just it’s hard to find, so i copy it here:

http://forums.xilinx.com/t5/Installation-and-Licensing/ISE-13-1-on-kubuntu-11-04/td-p/151626

cd /opt/Xilinx/13.1/ISE_DS/ISE/lib/lin/
mkdir orig && mv libstdc++* orig
cd /opt/Xilinx/13.1/ISE_DS/ISE/lib/lin64/
mkdir orig && mv libstdc++* orig
cd /opt/Xilinx/13.1/ISE_DS/common/lib/lin/
mkdir orig && mv libstdc++* orig
cd /opt/Xilinx/13.1/ISE_DS/common/lib/lin64/
mkdir orig && mv libstdc++* orig

3. Использование растрового шрифта.  Внимание! Идёт эксперимент!

Частично готовые куски…

3. Using of bitmap font. Warning: this section is highly experimental!

Here i place only partially ready content.

 

(based on http://askubuntu.com/questions/210590/can-i-override-fonts-installed-by-ttf-mscorefonts-installer-prefer-liberation-f)

gedit ~/.config/fontconfig/fonts.conf

sudo dpkg-reconfigure fontconfig-config

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<match>
 <test name="family"><string>Arial</string></test>
 <edit name="family" mode="prepend" binding="strong">
 <string>Terminus</string>
 <string>Arial</string>
 </edit>
</match>

</fontconfig>

Keywords: xilinx, webpack, ise, 10, 11, 12, 13, 13.3, 13.4, 14.4, wrong, font, size, change, changeable, schematic, editor, interface, fonts, zoom, zooming, magnifier, panning, user-friendly, usability, eye safe, black, white, background,

Keywords:

background, black, change, changeable, editor, eye safe, font, fonts, interface, ise, magnifier, panning, schematic, size, usability, user-friendly, webpack, white, wrong, xilinx, zoom, zooming,