mikrocontroller.net

Forum: FPGA, VHDL & Co. Bits von Bitvektoren die man nicht braucht


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ihr Lieben,

ich habe eine kurze Frage.

Wie geht man mit Bits von zum Beispiel einem std_logic_vector um, die 
man nicht benötigt, oder nur indirekt? Klingt komisch, ich weiß, ist 
aber bei mir der Fall. Ich gabe euch mal ein Beispiel.

Es wird eine Multiplikation durchgeführt. Beide Faktoren sind vom Typ 
std_logic_vector(22 downto 0) und werden als signed mit einander 
multipliziert. Damit muss das Ergebnis die doppelte Bitbreite der 
Faktoren besitzen und ist std_logic_vector (45 downto 0). Für meine 
Anwendung ist es nötig, das ich nur bestimmte Bits des Ergebnisses nutze 
und weiter verarbeite. Die Restlichen beachte ich nicht weiter und 
bekomme dadurch bei der Synthese immer Warnungen, dass diese Signale im 
Block unconnected sind. Das ist nicht schön. Also meine Frage, was mache 
ich am Besten mit den Bits die ich nur indirekt benötige, damit diese 
Meldungen nicht erscheinen.

Hier nochmal das Beispiel:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity Scale is
port (  clk : in std_logic;
  SUM_Adder_Matrix : in std_logic_vector (16 downto 0);
        Normierung : in std_logic_vector(7 downto 0);      
  Pixel_out : out std_logic_vector (7 downto 0)  
      );
end Scale;

architecture Behavioral of Scale is

Signal Scale : std_logic_vector (7 downto 0) := "00000001";
Signal Prod : std_logic_vector (45 downto 0);
Signal sig_SUM_Adder_Matrix : std_logic_vector (22 downto 0);
Signal sig_Scale : std_logic_vector (22 downto 0);


begin  
    Scale <= Normierung;
process(clk)  
begin
      
if (clk'event and clk = '1') then
      
  if Scale(7) = '1' then
    sig_Scale(22 downto 8)  <= (others => '1'); 
    sig_Scale(7 downto 0) <= Scale (7 downto 0);        
  else
    sig_Scale(22 downto 8)  <= (others => '0');
    sig_Scale(7 downto 0) <= Scale (7 downto 0);
  end if;  

  sig_SUM_Adder_Matrix(22 downto 6) <= SUM_Adder_Matrix(16 downto 0);
  sig_SUM_Adder_Matrix(5 downto 0) <= (others => '0');
      
          
end if;

end process;


process(clk)

constant Max_255 : std_logic_vector (33 downto 0) := "0000000000000000000000000011111111";
constant Min_0 : std_logic_vector (33 downto 0) := (others => '0');
constant Add_1 : std_logic_vector(7 downto 0) := "00000001";

begin    
    if (clk'event and clk = '1') then    
      Prod <= signed(sig_SUM_Adder_Matrix) * signed(sig_Scale);
      if (signed(Prod(45 downto 12)) >= signed(Max_255)) then
        Pixel_out <= (others => '1');
      elsif (signed(Prod(45 downto 12)) <= signed(Min_0)) then
        Pixel_out <= (others => '0');
      else  
        if Prod(11)= '1' then
          Pixel_out <= unsigned(Prod(19 downto 12)) + unsigned(Add_1);
        else
          Pixel_out <= Prod (19 downto 12);
        end if;
      end if;
    end if;


end process;
end Behavioral;

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Warnung sagt doch nur, daß Du Informatin hast, die Du nicht 
weiterverwendest. Wenn das so gewollt ist (was es ja ist) dann ist es 
ok.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.