Advanced Boolean Equation Language (ABEL)



  • Hallo,

    wollte mal fragen ob jemand diese Programmiersprache kann und mir vielleicht weiter helfen kann?

    Es würde um den folgenden Code gehen. Ich muss wissen ob es so richtig ist von 0-15 zu Zählen? Und das nach 9 ein Übertrag auf die 1. 7-Segment-Anzeige gibt und da dann eine 1 dargestellt wird.

    MODULE zaehler15
    
    TITLE 'zaehler15'
    
    DECLARATION
    
    s1			PIN15;						// Zählen
    s2			PIN16;
    reset			PIN18;						// Asynchroner Reset
    v			PIN28;						//Variable für Vor-/Rückwärts zählen
    Q3,Q2,Q1,Q0		NODE ISTYPE'BUFFER,REG';			// D-FlipFlop Ausgänge
    a,b,c,d,e,f,g		PIN 38,37,40,41,42,43,44 ISTYPE'BUFFER,COM';	// 2. 7-Segment-Anzeige
    aa,bb,cc,dd,ee,ff,gg	PIN 4,3,6,7,8,9,10 ISTYPE'BUFFER,COM';		// 1. 7-Segment-Anzeige
    ctr = [Q3,Q2,Q1,Q0];							// Takt
    taktaus			NODE;						// Hilfsausgang
    
    EQUATIONS
    
    ctr.clk = taktaus;
    taktaus = (s2 & taktaus) # !s1;						// Taste PIN15 und PIN16 entprellen
    ctr.ar = reset;
    
    // Zählen von 0-9
    
    TRUTH_TABLE
    ([v,Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0])
    0:>1;
    1:>2;
    2:>3;
    3:>4;
    4:>5;
    5:>6;
    6:>7;
    7:>8;
    8:>9;
    9:>10;
    10:>11;
    11:>12;
    12:>13;
    13:>14;
    14:>15;
    15:>0;
    
    35:>34;		// 15 -> 14
    34:>33;		// 14 -> 13
    33:>32;		// 13 -> 12
    32:>31;		// 12 -> 11
    31:>30;		// 11 -> 10
    30:>29;		// 10 ->  9
    29:>28;		//  9 ->  8
    28:>27;		//  8 ->  7
    27:>26;		//  7 ->  6
    26:>25;		//  6 ->  5
    25:>24;		//  5 ->  4
    24:>23;		//  4 ->  3
    23:>22;		//  3 ->  2
    22:>21;		//  2 ->  1
    21:>20;		//  1 ->  0
    20:>35;		//  0 -> 15
    
    // Anzeige der Zahlen auf den 7-Segment Anzeigen
    
    TRUTH_TABLE
    ([v,Q3,Q2,Q1,Q0]->[aa,bb,cc,dd,ee,ff,gg,a,b,c,d,e,f,g])
    	      0 ->[0,0,0,0,0,0,0,1,1,1,1,1,1,0];
    	      1 ->[0,0,0,0,0,0,0,0,1,1,0,0,0,0];
    	      2 ->[0,0,0,0,0,0,0,1,1,0,1,1,0,1];
    	      3 ->[0,0,0,0,0,0,0,1,1,1,1,0,0,1];
    	      4 ->[0,0,0,0,0,0,0,0,1,1,0,0,1,1];
    	      5 ->[0,0,0,0,0,0,0,1,0,1,1,0,1,1];
    	      6 ->[0,0,0,0,0,0,0,1,0,1,1,1,1,1];
    	      7 ->[0,0,0,0,0,0,0,1,1,1,0,0,0,0];
    	      8 ->[0,0,0,0,0,0,0,1,1,1,1,1,1,1];
    	      9 ->[0,0,0,0,0,0,0,1,1,1,1,0,1,1];
    	      10->[0,1,1,0,0,0,0,1,1,1,1,1,1,0];
    	      11->[0,1,1,0,0,0,0,0,1,1,0,0,0,0];
    	      12->[0,1,1,0,0,0,0,1,1,0,1,1,0,1];
                  13->[0,1,1,0,0,0,0,1,1,1,1,0,0,1];
    	      14->[0,1,1,0,0,0,0,0,1,1,0,0,1,1];
    	      15->[0,1,1,0,0,0,0,1,0,1,1,0,1,1];
    
    END
    

    EDIT:
    Hab noch schnell etwas verbessert 😉



  • unwahrscheinlich, dass hier jemand mit sowas rumfummelt. frag doch mal da: http://www.mikrocontroller.net/forum/fpga-vhdl-cpld
    🙂



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ;fricky schrieb:

    unwahrscheinlich, dass hier jemand mit sowas rumfummelt. frag doch mal da: http://www.mikrocontroller.net/forum/fpga-vhdl-cpld
    🙂

    Ich fummle auch nur unfreiwillig dran rum 😉 gehört zu meiner Ausbildung und ist Thema im 3. Ausbildungsjahr



  • Shona schrieb:

    ;fricky schrieb:

    unwahrscheinlich, dass hier jemand mit sowas rumfummelt. frag doch mal da: http://www.mikrocontroller.net/forum/fpga-vhdl-cpld

    Ich fummle auch nur unfreiwillig dran rum gehört zu meiner Ausbildung und ist Thema im 3. Ausbildungsjahr

    oh, als was lässte dich denn ausbilden?
    also, 'abel', ist so'ne hardwarebeschreibungssprache, die m.e. mehr ein schattendasein fristet. du könntest dir z.b. das xilinx 'webpack' und 'modelsim' runterladen. damit kannste auch abel-code synthetisieren und im simulator laufen lassen. zur '(un)freiwilligkeit': freu dich doch, wenn du eine hw-sprache lernen kannst. dem verständnis von digitaltechnik und computern ist das jedenfalls zuträglicher, als wenn du eine 'normale' programmiersprache lernen würdest (ausser vielleicht C oder assembler).
    🙂



  • ;fricky schrieb:

    oh, als was lässte dich denn ausbilden?
    also, 'abel', ist so'ne hardwarebeschreibungssprache, die m.e. mehr ein schattendasein fristet. du könntest dir z.b. das xilinx 'webpack' und 'modelsim' runterladen. damit kannste auch abel-code synthetisieren und im simulator laufen lassen. zur '(un)freiwilligkeit': freu dich doch, wenn du eine hw-sprache lernen kannst. dem verständnis von digitaltechnik und computern ist das jedenfalls zuträglicher, als wenn du eine 'normale' programmiersprache lernen würdest (ausser vielleicht C oder assembler).
    🙂

    Elektronikerin für Geräte und Systeme 😉

    was abel ist weiß ich ja und wir haben auch schon einiges gemacht, sogar ein zähler von 0-99 (der definitiv einfacher ist). nur der zähler von 0-15 zerbricht mir den kopf weil ich nicht weiß wie ich den übertrag von einer zur anderen 7-segmentanzeige machen soll bzw. wie das geht.

    klar ist es super programmiersprachen zu lernen wir lernen auch noch assembler und/oder c um ic's zu programmieren.

    leider ist abel aber ein prüfungs thema und wir müssen dann da ein kleines programm schreiben 😞

    die programme schaue ich mir mal an, danke dafür suche schon seit 2 wochen nach einem programm



  • Shona schrieb:

    nur der zähler von 0-15 zerbricht mir den kopf weil ich nicht weiß wie ich den übertrag von einer zur anderen 7-segmentanzeige machen soll bzw. wie das geht.

    nach der '15' geht beim nächsten takt das bit 3 eines 4-bit zählers von 1 auf 0. diese flanke könnteste z.b. dafür nutzen.
    ...
    1101 -> 13
    1110 -> 14
    1111 -> 15
    0000 -> bit3 hat von 1 nach 0 gewechselt
    🙂



  • ;fricky schrieb:

    Shona schrieb:

    nur der zähler von 0-15 zerbricht mir den kopf weil ich nicht weiß wie ich den übertrag von einer zur anderen 7-segmentanzeige machen soll bzw. wie das geht.

    nach der '15' geht beim nächsten takt das bit 3 eines 4-bit zählers von 1 auf 0. diese flanke könnteste z.b. dafür nutzen.
    ...
    1101 -> 13
    1110 -> 14
    1111 -> 15
    0000 -> bit3 hat von 1 nach 0 gewechselt
    🙂

    Nene so einfach geht das nicht. Das Zählen habe ich festgelegt (so zählt der auch nach 15 kommt 0) und das ist auch kein Problem nur die Anzeige auf der 7-Segment-Anzeige ist das Problem.

    Auf der Zeiten (rechte) soll von 0-9 gezählt werden bzw. diese Zahlen angezeigt werden. Auf der Ersten (linke) soll nur eine 1 angezeigt werden, wenn ich von 10-15 zähle.

    Nun soll laut meinem Lehrer nach der 9 (auf der Zweiten) ein übertrag (auf die Erste) kommen und somit dann eine 1 dargsetllt werden. Die Zweite anzeige zählt egal wie immer von 0-9.

    Habe auch ModelSim runtergeladen aber das Progamm kann nur VHDL und kein ABEL-HDL somit funktioniert das nicht 😞 (http://www.xilinx.com/tools/mxe.htm <--- diese Version habe ich genommen, weil ich sonst keine Lizenz bekomme)

    MFG Shona



  • ^^achso, 10 ist ja binär 1010, also nimmste diese bitkombination um 'nen überlauf zu erkennen (diesen zähler wieder auf 0 setzen und den nächsten eins zeiterzählen), also: überlauf = bit3 and not bit2 and bit1 and not bit0. dann haste mod 10 zähler, der überlauf des ersten tickert den zweiten an und schon zählts sogar bis 99.
    🙂



  • auch nicht ganz bis 99 kann ich zählen (hab den zähler auch hier) weil ich zwei Takte bzw zwei Zähler verwende, wie du ja geschrieben hast.

    Zähler von 0-99 (vorwärts und rückwärts)

    MODULE zaehler99
    
    TITLE 'zaehler99'
    
    DECLARATIONS
    
    takt	PIN 15;
    s1	PIN 16;
    reset	PIN 18;
    Q3,Q2,Q1,Q0		NODE ISTYPE'BUFFER,REG';
    Q7,Q6,Q5,Q4		NODE ISTYPE'BUFFER,REG';
    a,b,c,d,e,f,g		PIN 38,37,40,41,42,43,44 	ISTYPE'BUFFER,COM';
    a1,b1,c1,d1,e1,f1,g1	PIN 4,3,6,7,8,9,10 		ISTYPE'BUFFER,COM';
    ctr = [Q3,Q2,Q1,Q0];
    ctr1 = [Q7,Q6,Q5,Q4];
    v	PIN 28;
    taktaus NODE;
    
    EQUATIONS
    
    ctr.clk = taktaus;
    ctr1.clk = !Q0&!Q1&!Q2&!Q3;
    taktaus = (s1 & taktaus) # !takt;
    ctr.ar = reset;
    ctr1.ar = reset;
    
    TRUTH_TABLE
    ([v,Q3,Q2,Q1,Q0]:>[Q3,Q2,Q1,Q0])
    0:>1;
    1:>2;
    2:>3;
    3:>4;
    4:>5;
    5:>6;
    6:>7;
    7:>8;
    8:>9;
    9:>0;
    
    25:>24;
    24:>23;
    23:>22;
    22:>21;
    21:>20;
    20:>19;
    19:>18;
    18:>17;
    17:>16;
    16:>25;
    
    TRUTH_TABLE
    ([v,Q7,Q6,Q5,Q4]:>[Q7,Q6,Q5,Q4])
    0:>1;
    1:>2;
    2:>3;
    3:>4;
    4:>5;
    5:>6;
    6:>7;
    7:>8;
    8:>9;
    9:>0;
    
    25:>24;
    24:>23;
    23:>22;
    22:>21;
    21:>20;
    20:>19;
    19:>18;
    18:>17;
    17:>16;
    16:>25;
    
    TRUTH_TABLE
    ([Q3,Q2,Q1,Q0]->[a,b,c,d,e,f,g])
    	0     ->[1,1,1,1,1,1,0];
    	1     ->[0,1,1,0,0,0,0];
    	2     ->[1,1,0,1,1,0,1];
    	3     ->[1,1,1,1,0,0,1];
    	4     ->[0,1,1,0,0,1,1];
    	5     ->[1,0,1,1,0,1,1];
    	6     ->[1,0,1,1,1,1,1];
    	7     ->[1,1,1,0,0,0,0];
    	8     ->[1,1,1,1,1,1,1];
    	9     ->[1,1,1,1,0,1,1];
    
    TRUTH_TABLE
    ([Q7,Q6,Q5,Q4]->[a1,b1,c1,d1,e1,f1,g1])
    	0     ->[1,1,1,1,1,1,0];
    	1     ->[0,1,1,0,0,0,0];
    	2     ->[1,1,0,1,1,0,1];
    	3     ->[1,1,1,1,0,0,1];
    	4     ->[0,1,1,0,0,1,1];
    	5     ->[1,0,1,1,0,1,1];
    	6     ->[1,0,1,1,1,1,1];
    	7     ->[1,1,1,0,0,0,0];
    	8     ->[1,1,1,1,1,1,1];
    	9     ->[1,1,1,1,0,1,1];
    END
    

    Das hilft mir aber beim 0-15 Zähler nicht weiter denn dieser soll mit nur einem einzigsen Zählen funktionieren. ich muss nur die letzte Truth_Table im 0-15 Zähler erweitern und das funktioniert bei mir nicht.

    Naja dann muss ich wohl bis nächste woche warten dann hab ich wieder berufsschule und kann meinen lehrer fragen



  • also das funktioniert bei dir nicht: ?

    TRUTH_TABLE
    ([bcd,ena] -> [a,b,c,d,e,f,g])
    [0,1] -> [ON,ON,ON,ON,ON,ON,OFF];
    [1,1] -> [OFF,ON,ON,OFF,OFF,OFF,OFF];
    [2,1] -> [ON,ON,OFF,ON,ON,OFF,ON];
    [3,1] -> [ON,ON,ON,ON,OFF,OFF,ON];
    [4,1] -> [OFF,ON,ON,OFF,OFF,ON,ON];
    [5,1] -> [ON,OFF,ON,ON,OFF,ON,ON];
    [6,1] -> [ON,OFF,ON,ON,ON,ON,ON];
    [7,1] -> [ON,ON,ON,OFF,OFF,OFF,OFF];
    [8,1] -> [ON,ON,ON,ON,ON,ON,ON];
    [9,1] -> [ON,ON,ON,ON,OFF,ON,ON];
    [10,1] -> [ON,ON,ON,OFF,ON,ON,ON];
    [11,1] -> [OFF,OFF,ON,ON,ON,ON,ON];
    [12,1] -> [ON,OFF,OFF,ON,ON,ON,OFF];
    [13,1] -> [OFF,ON,ON,ON,ON,OFF,ON];
    [14,1] -> [ON,OFF,OFF,ON,ON,ON,ON];
    [15,1] -> [ON,OFF,OFF,OFF,ON,ON,ON];
    

    nur halt anstelle von A-F das 2te 7segment


Anmelden zum Antworten