www.mikrocontroller.net

Forum: FPGA, VHDL & Co. custom instruction einbinden


Autor: Fox Xx (mr-fox)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich versuche eine "multi-cycle custom instruction" einzubinden, aber 
irgendwie kann ich den "clock-cycle" nicht ändern.
In dem User Guide:
http://www.altera.com/literature/ug/ug_nios2_custo...

steht auf der Seite 25:

"The Clock Cycles field indicates the type of custom instruction:
combinational logic, multi-cycle, extended, internal register file,
or external interface. If the custom instruction is a fixed length,
multi-cycle custom instruction, you must edit this field to
specify the number of clocks. You must determine this number
based on knowledge of the custom instruction state machine. In
the case of a variable length multi-cycle custom instruction, the
Clock Cycles field displays Variable."

aber ich kann es nicht ändern, es steht da immer "cominational".
In den Custom Instruction Einstellungen unter der Rubrik, Tab, Interface 
habe ich die Option Clock-Cycle auf 15 gesetzt, aber irgendwie 
intressiert ihm das nicht.

Muss ich da überhaupt den Typ ändern, oder muss ich das irgendwo anders 
einstellen?
Und wenn ich den Typ da ändern soll, wie geht das?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein Nios Version benuzt du denn? Hast du auch das korekte 
Interface implementiert?

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups sorry, vergessen zu erwähnen

Quartus 2 9.0 mit sp2
Nios II 9.0
SOPC Builder 9.0
Prozessor: EP1S10F780C6

(bei der 8.0 version geht das auch nicht)

was meinst du mit korekten interface?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal welche Nios Version (economic/standard/fast) du nuzt.

Hast du den shcon eine Custom Instruction erstellt? Die muß für 
Multicycle ein bestimmtes Interface implementieren!

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi .. schrieb:
> Schau mal welche Nios Version (economic/standard/fast) du nuzt.

standard


> Hast du den shcon eine Custom Instruction erstellt? Die muß für
> Multicycle ein bestimmtes Interface implementieren!

was für ein interface meinst du, kannst du mal bitte ein bsp bringen?
wenn ich die bsp custom instruction, zb bitswap, einbinde gehen die, 
aber die sind auch nicht als multi-cycle gedacht.


danke

Autor: Sören (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du erstellst über den Component Editor (New - Button unten links im SOPC 
Builder) ein CI Interface. Wenn du dies korrekt definierst kannst du im 
CI CPU Menu auch multi-cycle CIs einbinden. Gruss, Sören

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, wenn ich diese Instruction einbinde, steht da immernoch 
Combinatorial

Autor: Sören (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es gerade noch mal probiert. Klappt ohne Probleme ! Poste mal 
deinen CI Code. Da liegt wahrscheinlich der Hund begraben

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den würde keiner versteher,
aber in der simulation (modelsim) läuft der ohne probleme, das timing 
stimmt und result und done liegen an

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fox Xx schrieb:
> den würde keiner versteher,
> aber in der simulation (modelsim) läuft der ohne probleme, das timing
> stimmt und result und done liegen an
Quartus scheinbar auch nicht... poste dan n doch wenigstens das 
Interface/entity
done wird meiner Meinung nach doch für fixed cycle garnicht benötigt...

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entity custominstruction is
port(
  clk: in std_logic;        -- CPU system clock (always required)
  reset: in std_logic;        -- CPU master asynchronous active high reset (always required)
  clk_en: in std_logic;        -- Clock-qualifier (always required)
  start: in std_logic;        -- Active high signal used to specify that inputs are valid (always required)
  done: out std_logic;        -- Active high signal used to notify the CPU that result is valid (required for variable multi-cycle)
  dataa: in std_logic_vector(31 downto 0);    -- Operand A (always required)
  datab: in std_logic_vector(31 downto 0);    -- Operand B (optional)
  result: out std_logic_vector(31 downto 0)    -- result (always required)  
);
end entity custominstruction;

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  done: out std_logic;        -- Active high signal used to notify the CPU that result is valid (required for variable multi-cycle)
Würd ich rausnehmen wenn du eine fixed cycle instruction haben möchtest.

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
so ich habe das jetzt mal getestet,
also wenn ich das done rausnehme, zeigt er mir die cyklen an die ich 
engestellt habe,
wenn ich done drin lasse, zeigt er mir, nicht immer, "variable" an

was jetzt aber noch ein problem ist,
er kriegt irgendwie kein clk signal und gibt daher nur den im rest 
gesetzten result zurück...
ext und int clock bringen beide nix

Autor: Fox Xx (mr-fox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich habe jetzt verschiedene untersuchungen gemacht
wenn ich eine konstante zurück gebe also
result <= x"12345678";
dann macht er dies,
wenn ich aber irgendwas anderes zurück gebe
zb den übergabe wert, gibt er mir irgendwas zurück,
zwar immer die selbe zahl, nach dem compilieren aber sie scheint 
zufällig zu sein, vieleicht irgend eine speicher adresse...
ob ich done gleich auf 1 setze, oder ein takt nach dem schreiben in 
result, warte und dann auf 1 setze, ist egal

hat jemand eine idee?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.