Hallo, bin ein Anfänger in VHDL, und versuche 32 werte (jeweils 4 bits) zu quadrieren und die Summe davon zu bilden. Nach ewigen Versuche klappt das einfach nicht ! mein Ansatz (ganz simple mit einer For-schleife !) : Ich bitte euch um Hilfe ! Vielen Dank ! library IEEE; library work; library std; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; --use ieee.std_logic_arith.all; use IEEE.numeric_std.all; use ieee.math_real; entity main is Port ( EIN : in std_logic; AUS : out std_logic_vector(7 downto 0)); end main; architecture Behaviour of main is ---********************************************************************* ***************************************************-- Signal tmpOut1 : std_logic_vector(7 downto 0); --Array type MessSignal is array (0 to 31) of std_logic_vector(3 downto 0); type Cosinus is array (0 to 31) of std_logic_vector(3 downto 0); type CosinusQuadrat is array (0 to 31 ) of std_logic_vector(7 downto 0 ); begin main : process(Ein) variable Cos : MessSignal; variable Cos2 :CosinusQuadrat ; -- sum(cos^2) variable SummeCos :std_logic_vector(7 downto 0); begin if Ein = '1' then Cos(0) := "0101"; Cos(1) := "1001"; Cos(2) := "1110"; Cos(3) := "0000"; Cos(4) := "0101"; Cos(5) := "1010"; Cos(6) := "0011"; Cos(7) := "1011"; Cos(8) := "1110"; Cos(9) := "0101"; Cos(10) :="0010"; Cos(11) :="0101"; Cos(12) :="0110"; Cos(13) :="0011"; Cos(14) := "0000"; Cos(15) :="1101"; Cos(17) :="0010"; Cos(18) :="0110"; Cos(19) :="1101"; Cos(20) :="1011"; Cos(21) :="0100"; Cos(22) :="0011"; Cos(23) :="1110"; Cos(24) := "1111"; Cos(25) :="0110"; Cos(26) :="0011"; Cos(27) :="0101"; Cos(28) :="0110"; Cos(29) :="0010"; Cos(30) :="0001"; Cos(31) := "0010"; for n in 0 to 31 loop Cos2(n) := Cos(n)*Cos(n); SummeCos := SummeCos + Cos2(n); end loop; tmpOut1 <= SummeCos; else Cos(0) := "0000"; Cos(1) := "0000"; Cos(2) := "0000"; Cos(3) := "0000"; Cos(4) := "0000"; Cos(5) := "0000"; Cos(6) := "0000"; Cos(7) := "0000"; Cos(8) := "0000"; Cos(9) := "0000"; Cos(10) :="0000"; Cos(11) :="0000"; Cos(12) :="0000"; Cos(13) :="0000"; Cos(14) :="0000"; Cos(15) :="0000"; Cos(17) :="0000"; Cos(18) :="0000"; Cos(19) :="0000"; Cos(20) :="0000"; Cos(21) :="0000"; Cos(22) :="0000"; Cos(23) :="0000"; Cos(24) :="0000"; Cos(25) :="0000"; Cos(26) :="0000"; Cos(27) :="0000"; Cos(28) :="0000"; Cos(29) :="0000"; Cos(30) :="0000"; Cos(31) :="0000"; for n in 0 to 31 loop Cos2(n) := Cos(n)*Cos(n); SummeCos := SummeCos + Cos2(n); end loop; tmpOut1 <= SummeCos; end if; end process; AUS <= tmpOut1; end Behaviour;
Mal vom Sinn oder oder Unsinn abgesehen, fehlt irgendwo eine Initialisierung der Summe auf 0 oder so.... So schleppen sich die U(ndefined) durch alle Berechnungen. Und wenn du schon numeric_std nimmst, kannst/SOLLST du IEEE.STD_LOGIC_UNSIGNED rauswerfen und dir auch signed statt den anonymen std_logic_vector leisten. Ist kürzer zu schreiben und vor allem immer korrekt. STD_LOGIC_UNSIGED/SIGNED ist tabu, selbst wenn es mit STD_ anfängt.
Hii, Der Sinn dahinter ist die Berechnung der Determinanten von diesem Matrix(siehe Anhang). Vielen Dank Geoge für die Hinweise !
nimm's mir nicht uebel, aber ein Code der bzgl. Einruecken (==Tabulator) grausam ist, keine Kommentare enthaelt und dann noch ueber ca. 3 Bildschirmseiten geht: Sowas gucke ich mir nicht wirklich an! Vielleicht verstehst du das Kauderwelsch da oben, ich jedenfalls verstehs nicht...
Jihad Alayan schrieb: > mein Ansatz (ganz simple mit einer For-schleife !) : Willst Du das nur simulieren oder soll Dein Code auch in einem FPGA laufen? Duke
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.