Beispielaufgaben 3 d)

yokop
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 13. Apr 2016 12:49

Beispielaufgaben 3 d)

Beitrag von yokop »

Hallo,
ich habe gerade die die 3 d) der Beispielaufgaben bearbeitet.

Ich hatte zuerst versucht das ganze nur über die Methoden zu implementieren, dabei hat bei meiner Testbench (FSM) der Compiler gemeint, dass diese Aktionen nicht parallel ausführbar sind. Nun meine Frage, wieso ?

Danach hab ich es mit jeweils einer Regel für reset, down, up implementiert, wobei die Werte über die Methoden in extra Registern gespeichert werden, was auch funktioniert hat, mir jedoch etwas umständlich und lange erscheint, auch wenn man den Platz bei der Aufgabe bedenkt.

War das also so gedacht oder habe ich bei der Implementierung über die Methoden irgendetwas übersehen, oder ist das einfach nicht möglich ? :oops:

JHofmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 23. Apr 2015 10:43

Re: Beispielaufgaben 3 d)

Beitrag von JHofmann »

Hallo,

"Hinweis: Sie können das CReg Modul aus der Vorlesung verwenden."

Viele Grüße,

yokop
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 13. Apr 2016 12:49

Re: Beispielaufgaben 3 d)

Beitrag von yokop »

Diese hatte ich benutzt..

JHofmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 23. Apr 2015 10:43

Re: Beispielaufgaben 3 d)

Beitrag von JHofmann »

Hallo,

mit denen geht das auf jeden Fall :)

Achten Sie darauf die korrekten Stufen in der korrekten Reihenfolge zu verwenden.

Viele Grüße,

yokop
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 13. Apr 2016 12:49

Re: Beispielaufgaben 3 d)

Beitrag von yokop »

Okay, ich poste einfach mal was ich hatte, weil ich den Fehler nicht finde :cry:

Code: Alles auswählen

module mkCounter(Counter);
	Reg#(Int#(32)) counter[4] <- mkCReg(4,0);

	method Action down(Int#(32) v);
		counter[0] <= counter[0] - v;
	endmethod
	
	method Action up(Int#(32) v);
		counter[1] <= counter[1] + v;
	endmethod
	
	method Action reset();
		counter[2] <= 0;
	endmethod
	
	method Int#(32) getCounter();
		return counter[3];
	endmethod
endmodule
Als Fehlermeldung (mit Verweis auf die Zeilen in der Testbench, und verschiedenen Kombinationen der Ports) kommt immer: "rule x uses method that conflict in parallel", z.B. counter__counter.port0__read() and counter__counter.port1__read().

JHofmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 23. Apr 2015 10:43

Re: Beispielaufgaben 3 d)

Beitrag von JHofmann »

Ich nehme an Sie rufen in ihrer Testbench rufen Sie z.B.

Code: Alles auswählen

rule test;
	dut.down(42);
	dut.up(42);
endrule
auf?

Dies ist nicht möglich da Sie im Grunde als Rule folgendes machen:

Code: Alles auswählen

rule test;
	counter[0] <= counter[0] - 42;
	counter[1] <= counter[1] + 42;
endrule
was nicht gescheduled werden kann.

Teilen Sie stattdessen den Test in zwei separate Rules auf die im selben Takt ausgeführt werden können (z.B. mit einer par Umgebung in der FSM).

Viele Grüße,

yokop
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 13. Apr 2016 12:49

Re: Beispielaufgaben 3 d)

Beitrag von yokop »

Dankeschön für die schnelle Hilfe :D

Antworten

Zurück zu „Archiv“