Witam.
Na zajęcia laboratoryjne muszę zrobić projekt na układzie GAL20V8 realizujący zamianę liczby 8bitowej na jej odpowiednik szesnastkowy, którego wynik ma być przedstawiony na wyświetlaczu 7segmentowym. Z racji, że do dyspozycji jest tylko jeden wyświetlacz zadanie polega na naprzemiennym wyświetlaniu starczej i młodszej 4bitowej części liczby zadanej (dla rozróżnienia przy starszej części pali sie kropka wyświetlacza). Układ może być sekwencyjny-zmieniać pokazywaną liczbę w takt sygnału zegarowego, bądź kombinacyjny, w którym zmianę wyświetlanej "połówki liczby zadanej" realizuje się ręcznie podając 0 lub 1 na jedno z wejść. Mój problem polega na tym, że nie bardzo wiem jak to zrobić, a prowadzący laboratorium z kolei nie bardzo chce mi pomóc. Nie napisałem wielu programów w tym języku i nie znam jego możliwości. W C++ lub chociażby Bascomie program można by napisać w kilku linijkach, ale na Abela po prostu nie mam pomysłu.
Prosiłbym o pomoc bardziej doświadczonych Kolegów. Jak ugryźć ten problem? Poniżej przedstawiam moje koncepcje.
===============================
module nkb2hex
title 'nkb2hex'
nkb2hex device 'P20V8';
clk,b7,b6,b5,b4,b3,b2,b1,b0 pin 1,2,3,4,5,6,7,8,9;
h7,h6,h5,h4,h3,h2,h1,h0 pin 22,21,20,19,18,17,16,15 istype 'reg';
bin2=[b7,b6,b5,b4];
bin1=[b3,b2,b1,b0];
hex=[h7,h6,h5,h4,h3,h2,h1,h0];
i=[0];
disp(0)=[0,0,0,0,0,0,1,0];
disp(1)=[1,0,0,1,1,1,1,0];
disp(2)=[0,0,1,0,0,1,0,0];
disp(3)=[0,0,0,0,1,1,0,0];
disp(4)=[1,0,0,1,1,0,0,0];
disp(5)=[0,1,0,0,1,0,0,0];
disp(6)=[0,1,0,0,0,0,0,0];
disp(7)=[0,0,0,1,1,1,1,0];
disp(8)=[0,0,0,0,0,0,0,0];
disp(9)=[0,0,0,0,1,0,0,0];
disp(10)=[0,0,0,1,0,0,0,0];
disp(11)=[1,1,0,0,0,0,0,0];
disp(12)=[0,1,1,0,0,0,1,0];
disp(13)=[1,0,0,0,0,1,0,0];
disp(14)=[0,1,1,0,0,0,0,0];
disp(15)=[0,1,1,1,0,0,0,0];
equations
hex.clk=clk;
hex:=(disp(bin2) & i==0) # ((disp(bin1) # [0,0,0,0,0,0,0,1]) & i==1);
i:=!i.fb;
end nkb2hex
Program polega na tym, że w zależności od zmiennej i program wyświetla jedną z części zadanej liczby korzystając z zakodowanych liczb. No ale podobno takiej sztuczki w Abelu nie można zrobić.
=======================================
module bcd2hex
title 'bcd2hex'
bcd2hex device 'P20V8';
mode,b7,b6,b5,b4,b3,b2,b1,b0 pin 10,2,3,4,5,6,7,8,9;
h7,h6,h5,h4,h3,h2,h1,h0 pin 22,21,20,19,18,17,16,15 istype 'com';
bcd2=[b3,b2,b1,b0];
bcd1=[b7,b6,b5,b4];
hex=[h7,h6,h5,h4,h3,h2,h1,h0];
equations
when (mode==0) then
truth_table(bcd2->hex)
0->2;
1->158;
2->36;
3->12;
4->152;
5->72;
6->64;
7->30;
8->0;
9->8;
10->16;
11->192;
12->98;
13->132;
14->96;
15->112;
when (mode==1) then
truth_table(bcd1->hex)
0->3;
1->159;
2->37;
3->13;
4->153;
5->73;
6->65;
7->31;
8->1;
9->9;
10->17;
11->193;
12->99;
13->133;
14->97;
15->113;
end bcd2hex
Natomiast ten program ma działać tak, że w zależności od wartości wejścia sterującego mode program korzysta z jednej z dwu tablic prawdy.
Niestety oba programy działają ale tylko w teorii... To jest trzeci program, który musze napisać aby zaliczyć laboratorium, 2 pozostałe juz napisałem. Bardzo prośbę o jakąkolwiek pomoc. Dołączam jeszcze zdjęcie płyty na której ma być uruchomiony program.
Dziękuje.
Na zajęcia laboratoryjne muszę zrobić projekt na układzie GAL20V8 realizujący zamianę liczby 8bitowej na jej odpowiednik szesnastkowy, którego wynik ma być przedstawiony na wyświetlaczu 7segmentowym. Z racji, że do dyspozycji jest tylko jeden wyświetlacz zadanie polega na naprzemiennym wyświetlaniu starczej i młodszej 4bitowej części liczby zadanej (dla rozróżnienia przy starszej części pali sie kropka wyświetlacza). Układ może być sekwencyjny-zmieniać pokazywaną liczbę w takt sygnału zegarowego, bądź kombinacyjny, w którym zmianę wyświetlanej "połówki liczby zadanej" realizuje się ręcznie podając 0 lub 1 na jedno z wejść. Mój problem polega na tym, że nie bardzo wiem jak to zrobić, a prowadzący laboratorium z kolei nie bardzo chce mi pomóc. Nie napisałem wielu programów w tym języku i nie znam jego możliwości. W C++ lub chociażby Bascomie program można by napisać w kilku linijkach, ale na Abela po prostu nie mam pomysłu.
Prosiłbym o pomoc bardziej doświadczonych Kolegów. Jak ugryźć ten problem? Poniżej przedstawiam moje koncepcje.
===============================
module nkb2hex
title 'nkb2hex'
nkb2hex device 'P20V8';
clk,b7,b6,b5,b4,b3,b2,b1,b0 pin 1,2,3,4,5,6,7,8,9;
h7,h6,h5,h4,h3,h2,h1,h0 pin 22,21,20,19,18,17,16,15 istype 'reg';
bin2=[b7,b6,b5,b4];
bin1=[b3,b2,b1,b0];
hex=[h7,h6,h5,h4,h3,h2,h1,h0];
i=[0];
disp(0)=[0,0,0,0,0,0,1,0];
disp(1)=[1,0,0,1,1,1,1,0];
disp(2)=[0,0,1,0,0,1,0,0];
disp(3)=[0,0,0,0,1,1,0,0];
disp(4)=[1,0,0,1,1,0,0,0];
disp(5)=[0,1,0,0,1,0,0,0];
disp(6)=[0,1,0,0,0,0,0,0];
disp(7)=[0,0,0,1,1,1,1,0];
disp(8)=[0,0,0,0,0,0,0,0];
disp(9)=[0,0,0,0,1,0,0,0];
disp(10)=[0,0,0,1,0,0,0,0];
disp(11)=[1,1,0,0,0,0,0,0];
disp(12)=[0,1,1,0,0,0,1,0];
disp(13)=[1,0,0,0,0,1,0,0];
disp(14)=[0,1,1,0,0,0,0,0];
disp(15)=[0,1,1,1,0,0,0,0];
equations
hex.clk=clk;
hex:=(disp(bin2) & i==0) # ((disp(bin1) # [0,0,0,0,0,0,0,1]) & i==1);
i:=!i.fb;
end nkb2hex
Program polega na tym, że w zależności od zmiennej i program wyświetla jedną z części zadanej liczby korzystając z zakodowanych liczb. No ale podobno takiej sztuczki w Abelu nie można zrobić.
=======================================
module bcd2hex
title 'bcd2hex'
bcd2hex device 'P20V8';
mode,b7,b6,b5,b4,b3,b2,b1,b0 pin 10,2,3,4,5,6,7,8,9;
h7,h6,h5,h4,h3,h2,h1,h0 pin 22,21,20,19,18,17,16,15 istype 'com';
bcd2=[b3,b2,b1,b0];
bcd1=[b7,b6,b5,b4];
hex=[h7,h6,h5,h4,h3,h2,h1,h0];
equations
when (mode==0) then
truth_table(bcd2->hex)
0->2;
1->158;
2->36;
3->12;
4->152;
5->72;
6->64;
7->30;
8->0;
9->8;
10->16;
11->192;
12->98;
13->132;
14->96;
15->112;
when (mode==1) then
truth_table(bcd1->hex)
0->3;
1->159;
2->37;
3->13;
4->153;
5->73;
6->65;
7->31;
8->1;
9->9;
10->17;
11->193;
12->99;
13->133;
14->97;
15->113;
end bcd2hex
Natomiast ten program ma działać tak, że w zależności od wartości wejścia sterującego mode program korzysta z jednej z dwu tablic prawdy.
Niestety oba programy działają ale tylko w teorii... To jest trzeci program, który musze napisać aby zaliczyć laboratorium, 2 pozostałe juz napisałem. Bardzo prośbę o jakąkolwiek pomoc. Dołączam jeszcze zdjęcie płyty na której ma być uruchomiony program.
Dziękuje.