BittWare, furnizor de produse hardware şi software DSP

BittWare, a realizat un SDK (software development toolkit) pentru plăcile lor SharcFIN™ ASIC bazate pe DSP, folosind WinDriver driver development toolkit de la Jungo



Acest toolkit este proiectat pentru integrarea plăcilor cu produsele Original Equipment Manufacturer's (OEM). Pentru dezvoltarea SDK au fost necesare drivere foarte performante ce suportă diferite sisteme de operare. Datorită limitărilor instrumentelor de dezvoltare de drivere disponibile şi reţinerilor privind alocarea de resurse interne pentru dezvoltarea de soluţii proprietare, echipa de programatori de la BittWare a realizat un driver development toolkit ce le permite să creeze drivere de dispozitiv de înaltă performanţă, portabile între diferite sisteme de operare, într-o perioadă relativ scurtă. Folosind WinDriver, inginerii de la BittWare au realizat foarte repede un SDK multi platform driver de înaltă calitate.

Pentru a realiza o referinţă completă de proiectare care să permită comunicaţii host-to-board şi board-to-host (inclusiv încărcarea şi rularea programelor, accesarea memoriei şi a variabilelor şi realizarea de operaţii pe placă şi DSP), au fost necesare drivere low-level pentru plăcile BittWare. Mai mult, driverele trebuie să suporte sistemele de operare Windows 95, 98, Me, NT, 2000 şi Linux, cu opţiunea de a porta driverele pe Solaris şi VxWorks. Scrierea unui driver de dispozitiv pentru fiecare placă BittWare pentru fiecare sistem de operare ar fi însemnat studierea de detalii pentru fiecare sistem de operare, studierea protocolului hardware relevant, dezvoltare şi debugging în modul kernel, scrierea driverului de dispozitiv în modul kernel pentru rezolvarea operaţiilor de hardware input/output şi repetarea acestui proces pentru fiecare sistem de operare suportat.
Folosind WinDriver, inginerii de la BittWare au putut imediat să acceseze şi să controleze resursele plăcilor (fără scrierea niciunei linii de cod) şi apoi generarea automată a codului skeleton specific dispozitivului. WinDriver a permis dezvoltatorilor de la BittWare să adauge funcţionalitate în modul utilizator. Inginerii de la BittWare au creat imediat un driver bazat pe WinDriver, cu funcţionalitate specifică pentru plăcile DSP, care putea apoi fi integrată în SDK.
WinDriver a eliminat necesitatea de a scrie un driver de dispozitiv pentru modul kernel oferind un API pentru acces complet la hardware în modul utilizator, ce poate fi folosit într-un mediu de dezvoltare la alegerea utilizatorilor - MSDEV, C Builder sau orice alt mediu de dezvoltare pe 32 de biţi. Modul utilizator apelează funcţii API din WinDriver Kernel Module (un driver generic pentru modul kernel), care controlează apoi hardware-ul. WinDriver's API este optimizat pentru a minimiza scăderea performanţelor. Pentru driverele care necesită performanţe în modul kernel, WinDriver oferă “Kernel PlugIn,” ce permite creare şi debugging pentru cod în modul utilizator, realizând astfel performanţele în modul kernel.
Inginerii de la BittWare au identificat anumite caracteristici cruciale pentru succesul toolkit-ului, cum ar fi hardware auto-detect (astfel încât poate fi prezentată utilizatorului o listă de plăci BittWare), numere unice pentru dispozitive (unique device numbers) (astfel încât utlizatorii mai multor plăci de acelaşi tip să le poată deosebi una de alta) şi flexibilitatea de a face schimbări on-the-fly (cum ar fi DMA buffer allocation).
În comparaţie cu alte driver development kits realizate de echipa de la BittWare ce aveau limitări, WinDriver de la Jungo a fost ales din mai multe motive. WinDriver poate citi alcătuirea configuraţiei PCI ce au fost la baza PCI-to-PCI bridge sub Windows 95 şi 98. Numărul de dispozitive în Windows 95 şi 98 nu era limitat, în timp ce produsele competitoare permiteau un număr de maxim 10 dispozitive. WinDriver nu necesita restartarea sistemului pentru fiecare placă instalată, atunci când se instalau mai multe plăci de acelaşi tip. WinDriver oferea o interfaţă grafică utilizator (graphical user interface) ce automatiza generarea codului pentru driver şi producea codul skeleton pentru driver, specific resurselor plăcii BittWare.
Folosind iniţial unul din instrumentele comerciale pentru drivere, echipa de la BittWare trebuia să rebooteze după setarea mărimii buffer-ului DMA în regiştrii Windows. Mai mult, era admis un singur buffer pentru fiecare dispozitiv. Cantitatea de memorie mapată pentru dispozitiv nu putea fi schimbată, chiar dacă o parte din ea nu era folosită.

Acest lucru însemna că pe un sistem ce rula Windows NT puteau fi instalate numai trei plăci BittWare. Folosind WinDriver, BittWare a putut modifica cantităţile de memorie alocate pentru un anumit dispozitiv DSP şi controla un număr nelimitat de plăci. Instumentul comercial pe care l-au folosit suporta numai sistemul de operare Windows. Deoarece cererea pentru suport de drivere pentru platoformele UNIX era în creştere, BittWare a căutat o soluţie mai flexibilă. Echipa de la BittWare a început dezvoltarea de drivere pentru Linux, dar au renunţat la acest proiect atunci când au descoperit WinDriver, un instrument multi- şi cross platform care, alături de sistemul de operare Windows, suportă şi Linux, Solaris şi VxWorks. Driverele realizate cu WinDriver sunt portabile între toate sistemele de operare suportate, fără modificarea codului.
Caracteristicile WinDriver au suport îmbunătăţit pentru principalii producători de cipseturi PCI (PLX, Altera, AMCC, Marvell şi QuickLogic) ce au colaborat cu Jungo pentru a realiza soluţii ample hardware şi software. Suportul include un set special de API particularizat pentru dispozitivele fiecărui partener şi cuprinde modele de diagnostic (codul sursă este inclus). Modelele de diagnostic permit acces nerestricţionat read/write la toate registrele dispozitivelor, la toate domeniile de memorie host şi locală şi la domeniile pentru porturile de I/O. Placa BittWare Snaggletooth foloseşte un cip cu interfaţă PLX PCI 9080 ca interfaţă între busul PCI şi DSP-uri şi dispozitivele periferice de pe placă. Astfel programele de diagnosticare specifice PCI 9080 şi API oferit de WinDriver vor ajuta programatorii pentru dezvoltarea de drivere pentru această placă particulară, permiţând manipularea întreruperilor, acces la memorie/IO şi realizarea de funcţii DMA.

Arhitectura BittWare SDK realizată cu WinDriver
Host Interface Library (HIL) este principala componentă a BittWare DSP21k-SF Toolkit şi este o bibliotecă de funcţii apelabile din C ce permit utilizatorului să descarce şi să starteze programele pe placa DSP, să citească şi să scrie pe memorie de pe placa DSP şi să controleze alte funcţii de pe placă. HIL oferă un set de funcţii comune pentru toate plăcile suportate şi realizează automat operaţiile necesare interfeţei. Funcţiile API ale HIL (funcţii de interfaţă) sunt standard pentru toate plăcile BittWare suportate de BittWare toolkit - programele ce folosesc HIL pot apela funcţii pentru a determina ce dispozitive BittWare există în sistem, unde se află şi determină tipurile de dispozitive care sunt prezente. Schema arhitecturii BittWare Toolkit de mai jos arată cum WinDriver formează baza driverului low-level a sistemului de operare şi arată că toate comunicaţiile cu plăcile BittWare DSP sunt realizate prin apeluri de la Host Interface Library către driver. BittWare toolkit include utilităţi ce folosesc HIL pentru a comunica cu placa, anume cu DSP Host Library, Diag21k şi DSP Bad.
Diag21k, o aplicaţie consolă, este o utilitate de diagnostic ce permite dezvoltatorilor să controleze, interogheze şi să testeze placa DSP. Diag21k poate descărca şi rula programe DSP, să citească de pe şi să scrie în memoria DSP (în formate multiple, inclusiv cod de asamblare), să realizeze teste de memorie şi să afişeze informaţii despre program. DspHost este un instrument pentru portarea aplicaţiilor existente C către DSP şi pentru crearea de programe care rulează pe placa DSP şi au acces la resursele sistemului gazdă. DSP Board Automated Diagnostic este un utilitar ce funcţionează la nivelul liniei de comandă, folosit pentru a testa placa DSP dacă funcţionează corect. El verifică posibilitatea de a comunica cu placa DSP de la PC, de a testa memoria şi alte caracteristici speciale ale plăcii DSP şi de a confirma posibilitatea procesorului DSP de a încărca şi de a rula un program.

BittWare Porting Kit
BittWare oferă un Porting Kit pentru a permite clienţilor libertatea de a folosi placa BittWare sub un sistem de operare, la alegerea lor. Nucleul BittWare Toolkit, adică HIL, oferă o interfaţă către hardware, consistentă pentru toate produsele BittWare. Anumite părţi din HIL conţin totuşi funcţii specifice sistemului de operare pentru interfaţarea cu driverul. BittWare Porting Kit permite dezvolatatorilor să adapteze anumite porţiuni la sistemul respectiv de operare. Odată ce funcţiile specifice sistemului de operare au fost definite, HIL poate fi compilat şi legat cu programele gazdă, cu Diag21k, sau alte programe, astfel că dezvoltatorul poate începe să folosească placa sub un sistem de operare la alegere.

Impactul pe piaţă
Software development kit este parte integrală oferită de BittWare clienţilor DSP. Deoarece timpul de lansare pe piată este un factor crucial, folosirea of WinDriver a grăbit data de lansare a BittWare DSP 21K-SP toolkit şi a permis clienţilor BittWare creşterea rapidă a calităţii produselor la preţuri mai mici decât cele de pe piaţă.