Datum:
Hallo, habe mal wieder eine kleine Frage, diesmal geht es um die Syntax in VHDL. Ich habe mehrere Vektoren in meinem Design und frage manche in einer IF-ELSE Verzweigung ab. Als Beispiel:
... signal Vector: std_logic_vector (9 downto 0); ... process(clk) begin if rising_edge(clk) then ... if Vector = "0000000000" then -- <----- Vektorabfrage ... end if; ... end if; ... end process; ... |
Es geht um die Vektor Abfrage. Wenn man einen Vektor mit 10 Bit hat ist die IF Abfrage einfach. Aber wenn man nun beispielsweise einen Vektor 100 Bits hat, wie sollte man dies am besten Abfragen? Alle Bits in der Abfrage ist mühselig (if "0000...0000"). Habe versucht dieses zu machen: if Vektor = (others => '0') oder if Vektor = (others = '0') doch hat leider nicht funkioniert. Hat jemand hier die Lösung? Danke im voraus. Gruß Cihan
Datum:
Cihan Kalayci schrieb: > if Vektor = (others => '0') oder if Vektor = (others = '0') Mach es so:
if Vektor = (Vektor'range => '0') |
Datum:
Dieses Thema wurde doch schon 100mal behandelt, einfach mal im forum suchen, bevor man fragt
Datum:
Ich habe natürlich schon vorher gesucht, das ist selbstverständlich. Doch leider die Antwort nicht gefunden. In der Suche hatte ich immer so nach "std_logic_vector if abfrage" gesucht, doch leider nicht die Antwort wie Marius es schrieb gefunden. Danke Marius, hat super geklappt. Auch ein Danke an dir Stachele. Cihan
Datum:
"If not vektor" müsste auch gehen, wenn es sich um Nullen dreht, oder "unsigned (vektor) = zahl"
Datum:
Cihan Kalayci schrieb: > Danke Marius, hat super geklappt. Zum Hintergrund: http://www.lothar-miller.de/s9y/archives/28-Vektor...
Datum:
Lothar Miller schrieb: > Cihan Kalayci schrieb: >> Danke Marius, hat super geklappt. > Zum Hintergrund: > http://www.lothar-miller.de/s9y/archives/28-Vektor... sehr interressanter Link, aufklärend und ganz einfach zum Verstehen. Danke dir. Cihan
Datum:
Oder so:
signal vector : std_logic_vector(100 downto 0); constant cNull : std_logic_vector(vector'range) := (others => '0'); process begin if vector = cNull then ... end process; |
Datum:
Oder die Konstante lokal im Prozess, dann kann man den Konstanten-Namen mehrfach verwenden ;-)
signal vector : std_logic_vector(100 downto 0); signal vector2 : std_logic_vector(7 downto 0); process constant cNull : std_logic_vector(vector'range) := (others => '0'); begin if vector = cNull then ... end process; process constant cNull : std_logic_vector(vector2'range) := (others => '0'); begin if vector2 = cNull then ... end process; |
Datum:
Oder noch eine kürzere Möglichkeit: Man verwendet eine Funktion.
function f_zeros ( vec : std_logic_vector) return std_logic_vector variable n : std_logic_vector(vec'range); begin n := (others => '0'); return n; end f_zeros; process begin if vector = f_zeros(vector) then ... end process; process begin if vector2 = f_zeros(vector2) then ... end process; |
Datum:
Stachele schrieb: > Oder noch eine kürzere Möglichkeit: Man verwendet eine Funktion. Na wenn schon eine Funktion, dann doch gleich so:
function isZero( vec : std_logic_vector) return boolean variable n : std_logic_vector(vec'range); begin n := (others => '0'); if vec = n then return true; else return false end isZero; process begin ifisZero(vector) then ... end process; |
