Forum: FPGA, VHDL & Co. Verilog Assembler (a<n) Abfrage durchführen


von user0009 (Gast)


Lesenswert?

Hallo!

Ich habe folgende Frage:

Ich möchte ein Assemblerprogramm schreiben, welches in Verilog 
inkludiert wird. Da ich mit dem Assemblerprogramm die PHI Funktion 
berechnen möchte,
muss ich am Anfang eine Abfrage (a<n) machen.
Jetzt möchte ich wissen, wie mache ich diese Abfrage am besten. Es wäre 
nicht so ein Problem, wenn ich mehr Befehle zur Verfügung hätte, aber 
die Vorgabe ist, dass es nur 8 Befehle gibt. Darunter: read, write, 
write indirect, jump, increment, complement, return from interrrupt and 
skip if zero.

Es gebe die Möglichkeit die beiden Variablen zu komplenetieren und dann 
solange 1 dazu zuählen, bis man durch erneutes komplementieren bei einer 
der beiden Zahlen bei 0 angelangt ist oder auch beiden. Dann hat man ein 
Resultat.

Allerdings weiß ich das das ganze etwas lange dauert und möchte nun eine 
einfacher Lösung verwenden. Leider fällt mir keine ein.

Kann mir jemand helfen?

lg user0009

von Günter -. (guenter)


Lesenswert?

user0009 wrote:
> Hallo!
>
> Ich habe folgende Frage:
>
> Ich möchte ein Assemblerprogramm schreiben, welches in Verilog
> inkludiert wird. Da ich mit dem Assemblerprogramm die PHI Funktion
> berechnen möchte,
> muss ich am Anfang eine Abfrage (a<n) machen.
> Jetzt möchte ich wissen, wie mache ich diese Abfrage am besten. Es wäre
> nicht so ein Problem, wenn ich mehr Befehle zur Verfügung hätte, aber
> die Vorgabe ist, dass es nur 8 Befehle gibt. Darunter: read, write,
> write indirect, jump, increment, complement, return from interrrupt and
> skip if zero.

Wenn dein Prozessor in Verilog implementiert ist, kannst du dann Logik 
dazupacken? Also, z.B. du scheinst Assemblerbefehle zu haben um auf 
Speicher zu zugreifen. Was wenn du den Wert von a in Speicherstelle  0 
und n in Speicherstelle 1 schreibst. Dann aus Speicherstelle 2 kannst du 
das Ergebnis a<n auslesen?

von user0009 (Gast)


Lesenswert?

Die Abfrage muss mit den Befehlen erfolgen. Ich darf keine Befehle dazu 
packen. Für die Ausführung des Algorithmus Abfrage ob a<n ist darf man 
nur die genannten Assemblerbefehle verwenden.

Derzeit mache ich es so, dass ich a und n komplementiere, 1 addiere, 
wieder komplementiere und dann schaue ob a schon 0 ist, wenn ja dann 
auch bei n wenn n nicht null ist, arbeitet der algorithmus weiter, 
ansonst wird mit a und n komplementieren wieder von vorne begonnen, bis 
er das 255 mal gemacht hat.

Das dauert eben viel zu lange. Daher möchte ich gerne wissen, wie man es 
schneller machen kann.

von Chris (Gast)


Lesenswert?

> Jetzt möchte ich wissen, wie mache ich diese Abfrage am besten. Es wäre
> nicht so ein Problem, wenn ich mehr Befehle zur Verfügung hätte, aber
> die Vorgabe ist, dass es nur 8 Befehle gibt. Darunter: read, write,
> write indirect, jump, increment, complement, return from interrrupt and
> skip if zero.

Mit diesen acht Befehlen hast du IMHO keine signifikant bessere 
Möglichkeit als die von dir beschriebene. Der Grund ist, dass du keinen 
einzigen Befehl zur Verfügung hast, der irgendwas mit zwei Operanden 
macht, wie Addition.

Deine einzige Chance könnte noch selbstmodifizierender Code sein, aber 
auch damit fällt mir gerade keine Lösung in weniger als O(n) ein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.