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;
Gast
#2978217
Soll das mal eine Schaltung werden? Sieht irgendwie nach einer Portierung von C nach VHDL aus :|
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 !
Gast
#2979493
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...
Gast
#2980158
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
