You are on page 1of 5

Zrb sobie mikrokontroler

PROJEKTY

Zrb sobie mikrokontroler,

cz 2

RISC w VHDL: PicoBlaze rmy Xilinx


AVT-457
Zgodnie z obietnicami, w tej
czci artykuu przedstawiamy
uniwersaln platform sprztow
wykonan na ukadzie FPGA
z rodziny Spartan 3, ktra moe
posuy midzy innymi do
implementacji mikrokontrolera
PicoBlaze. Pokaemy w paru
krokach jak to zrobi, przy
okazji prezentujc take
dostpne bezpatnie narzdzia
projektowe.
Rekomendacje:
opracowanie przeznaczone
zarwno dla entuzjastw PLD,
jak i wszelkiej maci techniki
cyfrowej. Mikrokontrolery potra
przecie wszystko!

Platforma sprztowa

Jak wspomniaem w poprzedniej czci artykuu, PicoBlaze jest


mikkim mikrokontrolerem, opisanym w jzyku VHDL. Mikkim
oznacza, e uytkownik moe samodzielnie wybra (oczywicie w okrelonych granicach) typ ukadu PLD,
w jakim mikroprocesor zostanie zaimplementowany. W wersji prezentowanej w artykule, PicoBlaze zoptymalizowano pod ktem aplikowania
w ukadach z rodzin: Spartan 3 oraz
Virtex II i Virtex II PRO, lecz drobne modykacje plikw rdowych
(nie jest to zgodne z licencj!) pozwalaj zaimplementowa go take
w ukadach PLD produkowanych

przez rmy inne ni Xilinx. Dodatkow, cho atw do pokonania,


trudnoci jest zoptymalizowanie
kompilatora asemblera pod ktem
ukadw rmy Xilinx. Pisz o tym
wycznie po to, eby pokaza uniwersalno i elastyczno rozwiza
IPcoreowych.
Poznanie zarwno samego PicoBlazea, jak i moliwoci wspczesnych ukadw, uatwi prosta platforma sprztowa, zbudowana na
bazie ukadu XC3S200VQ100 rmy Xilinx. Jest to drugi od dou
ukad z rodziny Spartan 3, charakteryzujcy si doskonaym wyposaeniem wewntrznym i nisk cen
(patrz tab. 1, EP5/2005). Zaimple-

PODSTAWOWE PARAMETRY
Pytka o wymiarach 56 x 56 mm
Zasilanie +5 V/200 mA
Moliwo zastosowania ukadu XC3S50 lub
XC3S200
Wbudowany kongurator XCF01S
Liczba dostpnych linii I/O: 61

W ofercie AVT s dostpne:


- [AVT-457C] modu zmontowany
i uruchomiony
Listingi do tego artykuu s umieszczone na pycie CD EP6/2005 oraz na stronie http://download.ep.com.pl

Elektronika Praktyczna 6/2005

31

Zrb sobie mikrokontroler


Bezpatny rdze
Pliki rdowe, dokumentacj w postaci
elektronicznej oraz kompilator asemblera dla
mikrokontrolerw PicoBlaze mona pobra
ze strony internetowej rmy Xilinx: http://
www.xilinx.com/ipcenter/processor_central/
picoblaze/index.htm.

Rys. 7. Konfiguracja acucha JTAG


w zestawie
List. 3. Listing przykadowego programu napisanego w asemblerze
PicoBlaze
vhdl ROM_form.vhd, pico_te.vhd,
PROG_ROM
wyjscie equ
s0
licznik equ
s1
led_port
dsout $00

Rys. 6. Schemat elektryczny zestawu

mentowanie w tym ukadzie mikroprocesora PicoBlaze zabiera zaledwie 5% zasobw logicznych i jeden
blok pamici BlockRAM.
Schemat elektryczny urzdzenia
pokazano na rys. 6. Na pytce drukowanej, oprcz ukadu XC3S200,
zamontowano take pami kongurujc XCF01S (typu Flash), ktra
suy do przechowywania danych
o konguracji ukadu FPGA i umoliwia automatyczne odtworzenie pamici kongurujcej SRAM wbudoDa si, lecz nie wolno
PicoBlaze da si zaimplementowa take
w ukadach innych producentw ni Xilinx,
lecz wymaga to pewnych modykacji kodu
rdowego i nie jest zgodne z licencj.

32

wanej w ukad FPGA po kadorazowym wczeniu zasilania. Zawarto


pamici Flash mona modykowa
za pomoc prostego programatora ISP, doczonego do zcza JP3.
Pami Flash i pami kongurujca SRAM wbudowana w FPGA s
poczone szeregowo w acuchu
JTAG, ktrego budow pokazano
na rys. 7. Pierwszym ukadem (od
strony wejcia TDI) jest XC3S200,
natomiast drugim kongurator
XCF01S. Dodatkowo jak wida na
rys. 7 kongurator jest doczony
do FPGA za pomoc specjalnego
interfejsu szeregowego, ktry suy
do automatycznego kongurowania
ukadu FPGA po wczeniu zasilania. Taki zestaw pocze umoli-

start:
out
call
load
out
call
jump

load wyjscie, 01
wyjscie, led_port
delay
wyjscie, 00
wyjscie, led_port
delay
start

delay:
loop1:
jump
load
ret

load licznik, $ff


sub
licznik, 1
nz, loop1
licznik, $ff

wia uytkownikowi przeprowadzenie


nastpujcych operacji:
programowania (via JTAG) pamici Flash, ktrej zawarto
bdzie automatycznie kopiowana
do pamici kongurujcej FPGA
po kadym wczeniu zasilania,
bezporedniego modykowania
zawartoci (via JTAG) pamici kongurujcej SRAM ukadu FPGA, dziki czemu mona
prowadzi niedestrukcyjne (jak
w przypadku pamici Flash, ktra po kadym kasowaniu si degraduje), wielokrotne modykacje
jej zawartoci,
automatycznego kongurowania
FPGA poprzez skopiowanie zawartoci pamici Flash do pamici kongurujcej (proces ten
mona zainicjowa rcznie poprzez wcinicie S1).
Pierwsze dwie z wymienionych
operacje mona wykona za pomoc taniego i atwego w wykonaniu programatora, ktrego schemat
elektryczny przedstawiamy na rys. 8

Elektronika Praktyczna 6/2005

Zrb sobie mikrokontroler

Kurs obsugi WebPacka (i nie tylko!) dla kadego

Czytelnikom zamierzajcym pozna z bliska system projektowy WebPack rmy Xilinx polecamy ksik Ukady programowalne, pierwsze kroki (http://www.
btc.pl/index.php?id=uppk), dostpn w ofercie handlowej
AVT. Ksika zawiera CDROM z WebPackiem i narzdziami projektowymi rmy Altera.

Rys. 8. Schemat elektryczny programatora ISP dla ukadw firmy Xilinx

(szczegowo opisany w Miniprojektach w EP4/2001, mona zastosowa


take nowoczeniejszy UnISProg,
ktry zosta opisany w EP1/2004).
Dioda wiecca D1 sygnalizuje
poprawne skongurowanie ukadu
FPGA.

Monta i uruchomienie

Urzdzenie zmontowano na dwustronnej pytce drukowanej, ktrej


schematy montaowe (elementy s
rozlokowane na obydwu stronach
PCB) pokazano na rys. 9. Ze wzgldu na zastosowanie ukadw o bardzo maych odstpach pomidzy
wyprowadzeniami (0,5 mm), rczny
monta pytek jest mocno utrudniony osoby majce niewielk wpraw w lutowaniu powinny pomyle
o zakupie gotowych (zmontowanych)
moduw. Sposobem lutowania rcznego dajcym nieze wyniki (mam
tu na myli wycznie skuteczno)
jest po dokadnym wypozycjonowaniu ukadu na punktach lutow-

niczych przylutowanie go z uyciem duej iloci stopu lutowniczego, ktrego nadmiar jest pniej
usuwany za pomoc miedzianej
plecionki (najlepiej ze sproszkowan kalafoni). Po lutowaniu pytk
trzeba dokadnie umy, na przykad
za pomoc rozpuszczalnika Kontakt
PCC (dostarczanego w butelce cinieniowej ze szczotk).

Narzdzia projektowe

Korzystanie z PicoBlazea wymaga


zastosowania zestawu dwch programw narzdziowych, spord trzech
ktre s dostpne bezpatnie:
WebPacka ISE w dowolnej wersji powyej 3.3WP8.0 udostpniony przez rm Xilinx (www.
xilinx.com),
kompilatora asemblera dla PicoBlazea (kcpsm3.exe) udostpniony przez rm Xilinx (www.
xilinx.com),
opcjonalnie mona skorzysta
z IDE z symulatorem PicoBlazea
program pBlazIDE opracowany
i udostpniony bezpatnie przez
holendersk rm Mediatronix
(www.mediatronix.com/tools).
Niezalenie od tego czy bdziemy stosowa liniowy kompilator
asemblera, czy te zostanie wykorzystane rodowisko zintegrowane
(widok okna pBlazIDE pokazano na
rys. 10), narzdziem niezbdnym do

zaimplementowania projektu w ukadzie PLD jest WebPack kompletne


rodowisko projektowe dla ukadw
rmy Xilinx. To wanie WebPack
odpowiada za prawidow implementacj samego procesora i wykorzystywanej przez niego pamici
programu w struktur docelowego
ukadu PLD.
Na rys. 11 zilustrowano prac asemblera kcpsm3.exe, ktry na
wejciu, oprcz pliku rdowego
potrzebuje take trzech plikw zawierajcych formatki opisu pamici w jzykach Verilog (ROM_form.v)

Rys. 10. Widok okna programu pBlazIDE

i VHDL (ROM_form.vhd) oraz w formacie COEfcient (ROM_form.coe),


stosowanym (rzadko) przez niektre
narzdzia syntezy logicznej. Pliki zawierajce formatki udostpnia rma
Xilinx wraz z asemblerem, ich zawartoci zalecam nie modykowa.
Projektantw przyzwyczajonych
do Windows (czyli jak szacuj 99,9 % czytajcych) surowy interfejs (w zasadzie jego brak)
asemblera kcpsm3.exe z pewno ci bdzie deprymowa. Wszystkich zdeprymowanych zachcam
do signicia po program pBlazIDE, ktrego efekty dziaania s
w zasadzie identyczne jak kcpsm3.
Rnice w menmonikach

Rys. 9. Schemat montaowy zestawu

Elektronika Praktyczna 6/2005

Mnemoniki niektrych rozkazw


rozpoznawanych przez pBlazIDE s inne ni
ustalone pierwotnie przez autora PicoBlazea.
Rnice zestawiono w tab. 4.

33

Zrb sobie mikrokontroler

FPGA i wyczanie zasilania

Z maymi wyjtkami, ukady FPGA


maj przedziwn konstrukcj: za
ich konguracj (czyli spenian
funkcj) odpowiada pami SRAM,
ktra jest pamici ulotn nie
potra przechowywa danych bez
zasilania. Tak wic, bez dodatkowych zabiegw, FPGA po wczeniu zasilania nie moe poprawnie dziaa!
Jak rozwizano ten problem? Ot
przez krtki czas (do kilkuset milisekund od chwili wczenia zasilania) FPGA jest kongurowany,
co oznacza po prostu odtworzenie
poprawnej zawartoci kongurujcej pamici SRAM. Dostpnych
jest wiele sposobw konguracji,
z ktrych najwiksz popularnoci

w praktyce
ciesz si
wyspecjalizowane, zewntrzne pamici Flash
z wyjciem
szeregowym,
ktre s
przystosowane do automatycznego
kongurowania ukadw FPGA.
Naley pamita, e niektre rodziny ukadw FPGA s wyposaone w drugi rodzaj pamici SRAM,
ktra w odrnieniu od pamici
kongurujcej jest dostpna dla
aplikacji uytkownika. W ukadach
Spartan 3 pami ta jest podzielona na bloki o nazwie BlockRAM.

Rys. 13. pBlaz wyranie wskazuje bdy wykryte w programie

rnice, do tego czciowo zniwelowane przez wbudowany w pBlazIDE, ale warto o nich wiedzie,
dlatego w tab. 4. znajduje si ich
zestawienie.

Rys. 11. Obieg plikw projektowych przy uzyciu asemblera kcpsm3.exe

exe (rys. 12), a daje on dodatkowo


moliwo symulowania pracy PicoBlazea! pBlazeIDE obsuguje dwa
formaty plikw wejciowych i wyjciowych zapisanych w VHDL
lub w Verilogu. Zapewnia to wystarczajc uniwersalno narzdzia, poniewa wszystkie znane mi
wspczesne syntezery jzykw HDL
radz sobie z implementacj pamici ROM. pBlazeIDE generuje pliki

wyjciowe zawierajce opis zawartoci pamici na podstawie szablonw (ROM_form.vhd i ROM_form.v).


Konieczne jest uycie w pliku *.psm
dyrektywy:
vhdl ROM_form.vhd, pico_te.vhd

lub (wbrew sugestii zawartej


w nazwie dyrektywy)
vhdl ROM_form.v, pico_te.v,

gdzie pico_te.vhd i pico_te.v to


nazwy plikw wynikowych. Pliki
wynikowe s generowane w chwili zainicjowania
pracy symulatora, a ewentualne bdy s automatycznie wskazywane przez
program, jak to wida na
rys. 13 (opis po znaku ?
w lewej czci okna).
Warto zwrci uwag,
e mnemoniki niektrych
polece rozpoznawane
przez pBlazIDE rni si
od przyjtych jako stanRys. 12. Obieg plikw projektowych przy uyciu dardowe w liniowej wersji
asemblera. Nie s to due
pBlazIDE

34

Mamy program
implementacji krok nastpny

Po napisaniu i przesymulo waniu programu nadchodzi czas


implementacji rdzenia procesora
i pamici programu wraz z jej zawartoci. Prosty program przykadowy, sucy do zilustrowania
implementacji pokazano na list. 3.
Spenia on niezwykle fantazyjne zadanie migania diod LED
doczon do portu wyjciowego
o adresie 00. Kody polece dla
procesora s zapisane (w prezentowanym przykadzie) w pliku pico_
te.vhd (jego najwaniejsze fragTab. 4. Rnice pomidzy
mnemonikami rozpoznawanymi przez
pBlazIDE i kompilator KCPSM
pBlazIDE
RET
RETI
ADDC
SUBC
IN
OUT
EINT
DINT

KCPSM
RETURN
RETURNI
ADDCY
SUBCY
INPUT
OUTPUT
ENABLE INTERRUPT
DISABLE INTERRUPT

Elektronika Praktyczna 6/2005

Zrb sobie mikrokontroler


menty pokazano na list. 4, cao
udostpniamy na CDEP6/2005B).
Opis HDL PicoBlazea domylnie domaga si pliku zawierajcego jednostk (entity) PROG_ROM
(rys. 14). W przygotowanym przez
nas pliku pico_te.vhd tak wanie
zostaa ona nazwa, dziki czemu
List. 4. Najwaniejsze fragmenty pliku zawierajcego opis programu

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
library unisim;
use unisim.vcomponents.all;

entity PROG_ROM is
Port (
address : in std_logic_
vector(9 downto 0);
instruction : out std_logic
_vector(17 downto 0);
clk : in std_logic);
end PROG_ROM;
architecture low_level_denition of
PRO
G_ROM is
attribute INIT_00 : string;
attribute INIT_01 : string;
attribute INIT_02 : string;
.
attribute INITP_05 : string;
attribute INITP_06 : string;
attribute INITP_07 : string;
attribute INIT_00 of ram_1024_
x_18 : label is 540EC10101FF540BC10101FF5408C10101FF40000007C00000000007C0000001;
attribute INIT_01 of ram_1024_x_18 :
label is 00000000000000000000000000
0000000000000000000000000000000000A000;
attribute INIT_02 of ram_1024_x_18 :
label is 0000000000000000000000000000
000000000000000000000000000000000000;
.
attribute INITP_07 of ram_1024_x_18 :
label is 0000000000000000000000000000
000000000000000000000000000000000000;
begin
generic map ( INIT_00 => X540EC10101FF540BC10101FF5408C10101FF40000007C00000000007C0000001,
INIT_01 => X000000000
00000000000000000000000000000000000000
0000000000000A000,
INIT_02 => X000000000
00000000000000000000000000000000000000
00000000000000000,
.
.
.
X000000000000000000000000000000000000
0000000000000000000000000000,
INIT_3E => X000000000
00000000000000000000000000000000000000
00000000000000000,
INIT_3F => X000000000
00000000000000000000000000000000000000
00000000000000000,
INITP_00 => X000000000
00000000000000000000000000000000000000
000000002D34D3E38,
INITP_01 => X000000000
00000000000000000000000000000000000000
00000000000000000,
.
.
INITP_06 => X000000000
00000000000000000000000000000000000000
00000000000000000,
INITP_07 => X000000000
00000000000000000000000000000000000000
00000000000000000)
port map(

downto 0),

DI => 0000000000000000,
DIP => 00,
EN => 1,
WE => 0,
SSR => 0,
CLK => clk,
ADDR => address,
DO => instruction(15

DOP => instruction(17


downto 16));
end low_level_denition;

Elektronika Praktyczna 6/2005

po doczeniu tego pliku do projektu (rys. 15), mona go od razu


podda kompilacji. Jeeli zakoczy
si ona sukcesem, naley jeszcze
przypisa nazwy sygnaw do odpowiednich wyprowadze ukadu
FPGA i projekt ponownie skompilowa. W projekcie udostpnionym
na pycie przypisania sygnaw
nie zostay wymuszone, co wynika z uniwersalnej budowy pytki
uruchomieniowej.
Podczas prb naley zwrci
uwag na to, e maksymalne czstotliwoci taktowania PicoBlazea
s do wysokie, a procedura
opnienia okrelajca czas trwania wiecenia i wygaszenia LED
trwa zaledwie 1030 taktw zegara. W zwizku z tym podczas
pierwszych prb zalecam stosowanie rda sygnau zegarowego o czstotliwoci 510 kHz lub
zmodykowanie procedury opnienia (choby w sposb pokazany
na list. 5), eby wyduy czas
jej trwania (opnienie zabiera
261632 taktw zegara), ewentualList. 5. Zmodyfikowana wersja programu testowego
Wyjscie equ
s0
licznik1
equ
s1
licznik2
equ
s2
led_port
dsout $00
start:
out
call
load
out
call
jump

load wyjscie, 01
wyjscie, led_port
delay
wyjscie, 00
wyjscie, led_port
delay
start

delay:
loop1:
loop2:
jump
sub
jump
ret

load licznik2, $ff


load licznik1, $ff
sub
licznik1, 1
nz, loop2
licznik2, 1
nz, loop1

WYKAZ ELEMENTW
Rezystory
(obudowy 0805)
R1, R2: 4,7 kV
R3: 270 V
Kondensatory
(obudowy 0805/A)
C1, C2, C3, C4, C5, C7, C9, C10,
C11, C12, C14, C16, C17, C18,
C19: 100 nF
C6, C8, C13, C15: 10 mF/10 V
Pprzewodniki
U1: XC3S2005VQ100
U2: XCF01SVO20C
VR1: LT19633,3
VR2: LT19632,5
VR3: LD11171,2
D1: LED (0805)
Inne
JP1, JP2: goldpiny 2x16
JP3: ZWS10

Rys. 14. PicoBlaze ma przedefiniowan pami w jednostce PROG-ROM

nie werykowa prac procesora


za pomoc oscyloskopu doczonego do linii portu, na ktrej jest
generowany sygna prostoktny.

Podsumowanie

Po kilkudniowych, bardzo intensywnych, testach PicoBlazea


doszedem do wniosku, e jest to
obecnie najlepszy, pord dostpnych bezpatnie, rdze mikrokontrolera na znanym mi wiecie.
Ze wzgldu na du wydajno,
stabilno dziaania, kompletn
list instrukcji (zwaszcza w wersji na rodzin Spartan 3), dobrej
jakoci narzdzia projektowe (take dostpne bezpatnie), niewielkie zasoby wymagane do penej
implementacji projektu, do tego
dobrze przygotowany opis HDL
(gwarantujcy przenono pomidzy rnymi platformami) PicoBlaze jest wart polecenia wszystkim uytkownikom ukadw PLD,
ktrzy preferuj wygodne, nowoczesne rozwizania sprztowo
programowe (hardware software
codesign).
Piotr Zbysiski, EP
piotr.zbysinski@ep.com.pl

Rys. 15. Widok okna WebPacka po


zadeklarowaniu pliku z opisem pamici programu

35

You might also like