Ik moet voor school een chronometer programmeren in Abel-hdl.
Ik heb een programma geschreven dat zou moeten werken. Maar wanneer ik het probeer te compileren zegt hij dat er te veel GLB's zijn.
Is er een moeglijkheid om deze code eenvoudiger te maken?
MODULE Chrono
TITLE 'chronometer min sec en hondersten'
"ingangen en uitgangen"
segmA,segmB,segmC,segmD,segmE,segmF,segmG,segmP pin 20,23,17,18,26,22,24,19 istype 'com';
disp1,disp2,disp3,disp4 pin 27,28,29,30 istype 'buffer';
clk0,clk1 pin 60,65;
start,stop,reset,ms pin 40,42,45,47;
"registers"
mint3,mint2,mint1,mint0 node istype 'reg_d';
mine3,mine2,minte,mine0 node istype 'reg_d';
sect3,sect2,sect1,sect0 node istype 'reg_d';
sece3,sece2,sece1,sece0 node istype 'reg_d';
milt3,milt2,milt1,milt0 node istype 'reg_d';
mile3,mile2,mile1,mile0 node istype 'reg_d';
temp3,temp2,temp1,temp0 node istype 'com';
"carry's
CoMe,CoSe,CoSt,CoMIe,CoMIt node istype 'com';
counter1,counter0 node istype 'reg_d';
init, run node istype 'com';
"set's"
minutent = [mint3,mint2,mint1,mint0];
minutene = [mine3,mine2,minte,mine0];
secondent = [sect3,sect2,sect1,sect0];
secondene = [sece3,sece2,sece1,sece0];
millisecondent = [milt3,milt2,milt1,milt0];
millisecondene = [mile3,mile2,mile1,mile0];
counter = [counter1,counter0];
disp =[disp1,disp2,disp3,disp4];
temp = [temp3,temp2,temp1,temp0];
c=.c.;
EQUATIONS
minutent.clk = clk1;
minutene.clk = clk1;
secondent.clk = clk1;
secondene.clk = clk1;
millisecondene.clk = clk1;
millisecondent.clk = clk1;
minutent.ar = init;
minutene.ar = init;
secondent.ar = init;
secondene.ar = init;
millisecondene.ar = init;
millisecondent.ar = init;
when ((start == 1)& (stop == 0) & (reset == 0)) then run = 1;
else when ((start == 0)& (stop == 1) & (reset == 0)) then run = 0;
else run = run;
when ((reset == 1) & (run == 0))then init = 1;
else init = 0;
"------------------------------------------------------------------------
when((run == 1)&(millisecondene<9)) then millisecondene := millisecondene + 1;
else when((1 == 1)&(millisecondene>=9)) then millisecondene := 0;
else millisecondene := millisecondene;
CoMIe = (millisecondene==9);
"------------------------------------------------------------------------
when((CoMIe == 1)&(millisecondent<9)) then millisecondent := millisecondent + 1;
else when((CoMIe == 1)&(millisecondent>=9)) then millisecondent:= 0;
else millisecondent := millisecondent;
CoMIt = CoMIe & (millisecondent==9);
"------------------------------------------------------------------------
when((CoMIt == 1)&(secondene<9)) then secondene := secondene + 1;
else when((CoMIt == 1)&(secondene>=9)) then secondene:= 0;
else secondene := secondene;
CoSe = CoMIt & (secondene==9);
"------------------------------------------------------------------------
when((CoSe == 1)&(secondent<5)) then secondent := secondent + 1;
else when((CoSe == 1)&(secondent>=5)) then secondent:= 0;
else secondent := secondent;
CoSt = CoSe & (secondent==5);
"------------------------------------------------------------------------
when((CoSt == 1)&(minutene<9)) then minutene := minutene + 1;
else when((CoSt == 1)&(minutene>=9)) then minutene:= 0;
else minutene := minutene;
CoMe = CoSt & (minutene==9);
"------------------------------------------------------------------------
when((CoMe == 1)&(minutent<5)) then minutent := minutent + 1;
else when((CoMe == 1)&(minutent>=5)) then minutent:= 0;
else minutent := minutent;
"------------------------------------------------------------------------
"Multiplex"
counter.clk = clk0;
counter := counter + 1;
when (counter == 0) then disp = 1;
else when (counter == 1) then disp = 2;
else when (counter == 2) then disp = 4;
else when (counter == 3) then disp = 8;
when (ms == 1) then{
when (counter == 0) then {temp = secondene;}
else when (counter == 1) then {temp = secondent;}
else when (counter == 2) then {temp = minutene;segmP = 1;}
else when (counter == 3) then {temp = minutent;}}
else {
when (counter == 0) then {temp = millisecondene;}
else when (counter == 1) then {temp = millisecondent;}
else when (counter == 2) then {temp = secondene;segmP = 1;}
else when (counter == 3) then {temp = secondent;}}
truth_table " aansturing voor de segmenten
([temp]->[segmA,segmB,segmC,segmD,segmE,segmF,segmG])
[0]->[1,1,1,1,1,1,0]; "0
[1]->[0,1,1,0,0,0,0]; "1
[2]->[1,1,0,1,1,0,1]; "2
[3]->[1,1,1,1,0,0,1]; "3
[4]->[0,1,1,0,0,1,1]; "4
[5]->[1,0,1,1,0,1,1]; "5
[6]->[0,0,1,1,1,1,1]; "6
[7]->[1,1,1,0,0,0,0]; "7
[8]->[1,1,1,1,1,1,1]; "8
[9]->[1,1,1,0,0,1,1]; "9
ENDfree_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
je kunt 2 flipflops wegsmijten....
secondentientallen loopt maar van 0 tot 5.... (60 seconden per minuut) dus daar kan je al iets weggooien...
ditto voor minuten tientallen...
Anders pak je beter een groter device.
maar waarom in godsnaam nog ABEL ... geen kat gebruikt dat nog. das al 10 jaar pieredood
Bedankt voor de reactie.
Wanneer ik die 2 fliplops wegdoe krijg ik een error omdat ik deze bij het multiplexen van de displays de 3bit node in een 4bit node wil steken.
Een andere device is geen optie we moeten een bepaalde cpld gebruiken.
edit: heb de 2 flipflops weggedaan en een 2de temp node gemaakt.
en dit compileerd
. morgen eens testen of het werkt.
[Bericht gewijzigd door kortsluiting op (20%)]
Jeroen Boere
IF you can't convince them, then confuse them!
Free: dit is omdat een docent, die niets van nieuwe technology weet, het ooit voor elkaar (of iemand het voor elkaar heb zien) heeft gekregen om de betreffende opdracht precies in dat type device met een prehistorische taal te frotten.
Arme studenten, tegenwoordig...
We krijgen vhdl in het 2de semester waarschijnlijk was dit een opwarmertje...
heb het nog steeds niet goed gekregen maar heb de minuten tientallen verwijderd en dan lukt het wel.
Ik heb nog een vraagje, wanneer ik mijn stop knop indruk gaat hij automatisch resetten. Als ik de knop zeer snel indruk en loslaat gaat hij niet in reset. Ik heb geen idee waar het fout loopt.