Forum: FPGA, VHDL & Co. custom instruction einbinden


von Fox X. (mr-fox)


Angehängte Dateien:

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_custom_instruction.pdf

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Fox X. (mr-fox)


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?

von Läubi .. (laeubi) Benutzerseite


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!

von Fox X. (mr-fox)


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

von Sören (Gast)


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

von Fox X. (mr-fox)


Lesenswert?

hmm, wenn ich diese Instruction einbinde, steht da immernoch 
Combinatorial

von Sören (Gast)


Lesenswert?

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

von Fox X. (mr-fox)


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

von Läubi .. (laeubi) Benutzerseite


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...

von Fox X. (mr-fox)


Lesenswert?

1
entity custominstruction is
2
port(
3
  clk: in std_logic;        -- CPU system clock (always required)
4
  reset: in std_logic;        -- CPU master asynchronous active high reset (always required)
5
  clk_en: in std_logic;        -- Clock-qualifier (always required)
6
  start: in std_logic;        -- Active high signal used to specify that inputs are valid (always required)
7
  done: out std_logic;        -- Active high signal used to notify the CPU that result is valid (required for variable multi-cycle)
8
  dataa: in std_logic_vector(31 downto 0);    -- Operand A (always required)
9
  datab: in std_logic_vector(31 downto 0);    -- Operand B (optional)
10
  result: out std_logic_vector(31 downto 0)    -- result (always required)  
11
);
12
end entity custominstruction;

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

1
  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.

von Fox X. (mr-fox)


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

von Fox X. (mr-fox)


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?

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.