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?
Was für ein Nios Version benuzt du denn? Hast du auch das korekte Interface implementiert?
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?
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!
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
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
hmm, wenn ich diese Instruction einbinde, steht da immernoch Combinatorial
Habe es gerade noch mal probiert. Klappt ohne Probleme ! Poste mal deinen CI Code. Da liegt wahrscheinlich der Hund begraben
den würde keiner versteher, aber in der simulation (modelsim) läuft der ohne probleme, das timing stimmt und result und done liegen an
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...
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; |
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.