2016-07-22 20 views
2

Ich bin neu in VHDL. Ich habe versucht, Code für den Addierer-Subtrahierer zu schreiben. Einer meiner Eingangsbus für die Schaltung ist nach der Synthese mit Masse verbunden. Ich benutze Xilinx ISE 14.2 in Ubuntu 14.04 LTS 64 Bit.VHDL-Eingang zur Erde gezwungen

library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use IEEE.NUMERIC_STD.ALL; 

    entity examples is 
    Generic(n: Natural :=8); 
    port (
      A : in std_logic_vector(n-1 downto 0); 
      B : in std_logic_vector(n-1 downto 0); 
     subtract : in std_logic; 
     sum: out std_logic_vector(n-1 downto 0); 
     carry : out std_logic 
    ); 
    end examples; 

    architecture Behavioral of examples is 
     Signal result: std_logic_vector(n downto 0); 
    begin 

     my_adder_subtractor : process(A,B,subtract) 
      begin 
      if(subtract = '0') Then 
       result <= std_logic_vector(('0' & unsigned(A))+('0' & unsigned(B))); 

      else 
       result <= std_logic_vector(('0' & unsigned(A))-('0' & unsigned(B))); 
      end if; 
      sum <= result(n-1 downto 0); 
      carry <= result(n); 
     end process my_adder_subtractor; 

    end Behavioral; 

RTL Schema:

RTL schematic

+0

Was ist Ihre Frage? – lorond

+0

Meine Frage ist, warum Port A mit Masse verbunden ist? –

Antwort

1

Wie wäre es damit. Lass es mich wissen, wenn das funktioniert. Mein VHDL geht weit zurück.

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.NUMERIC_STD.ALL; 

entity examples is 
Generic(n: Natural :=8); 
port (
    A : in std_logic_vector(n-1 downto 0); 
    B : in std_logic_vector(n-1 downto 0); 
    subtract, clk : in std_logic; 
    sum: out std_logic_vector(n-1 downto 0); 
    carry : out std_logic_vector(0 downto 0) 
); 
end examples; 

    architecture Behavioral of examples is 
    begin 
     process(clk) 
      begin 
      if(subtract = '0') then 
       (carry, sum) <= ('0' & A)+('0' & B); 
      else 
       (carry, sum) <= ('0' & A)-('0' & B); 
      end if; 
     end process; 
    end Behavioral; 
+0

Meine Frage ist, warum Port A mit Masse verbunden ist? Auch versucht, 2 Signale zu addieren. Vielleicht vermisse ich etwas. Was sollten die Datentypen des Signals sein? Ich versuchte mit Std Logik Vektor –

+0

Nun, mehrere Dinge scheinen ein bisschen aus mit Ihrer Umsetzung. Es sollte keinen Prozess auf (A, B, Subtraktion) geben, da ein Prozess auf ein Speicherelement (D-Latch) verweist. Es scheint mir wierd, dass es den Zustand auf einen Auslöser von 3 verschiedenen Eingängen ändern würde, auf denen Sie auch Operationen machen. Außerdem verstehe ich nicht, warum Sie Ihre Eingaben als std_logic_vectors definieren, wenn Sie sie direkt nach unsigned und dann nach std_logic vektor umwandeln. Definieren Sie sie einfach zu Beginn als nicht signiert. Unisgned ist synthetisierbar, es ist nicht notwendig es zu werfen. – h3X3n

+0

Übrigens brauchen Sie nicht wirklich einen Prozess auf dem Taktsignal zu machen. Ich habe es einfach dort hingelegt, weil Sie anscheinend ein Speicherelement haben wollten, aber ich hatte Probleme damit, Zustände auf A, B umzuschalten (das Speicherelement praktisch nutzlos zu machen [Sie könnten den Vorgang entfernen, ohne etwas an Ihrem Verhalten zu ändern]). – h3X3n

-1

Nein A ist nicht geerdet. Die RTL-Schaltpläne in Xilinx ISE sind nicht gut ...

Eines der Eingangsbits der Eingänge Ihres Addierers ist Null. So wird A mit einem Grundbit verkettet. Bitte öffnen Sie das RTL-Technologie-Schaltbild, um die "echte" Schaltung zu sehen.

+0

Ich bekomme auch kein richtiges Ergebnis aus der Simulation. Zum Beispiel A 00110000 und B = 00100001 geben Sie mir Sum = 00000000 –

+0

Können Sie die RTL-Tech posten. schematisch? – Paebbels