Frage

Ich bin relativ neu in VHDL. Ich bin versucht, Code zu schreiben, ohne Vorzeichen Multiplikation zu tun, um eine Kombination von Volladdierer verwendet wird. Beim Kompilieren gibt sie an die Port-Mapping-up. Ich habe die Fehler in der ersten Karte gelöst, aber alle andere gibt mir Probleme.

Ich bekomme den gleichen Fehler für jeden: „Expression Istdaten in Port Karte Aspekt muss statisch sein“

Hier ist mein Code. Jede Hilfe ist willkommen. Darüber hinaus, wenn Sie allgemeine Tipps haben, basierend auf an meinem Code suchen würde ich dankbar sein.

Danke, Buzkie

library  ieee;
use  ieee.std_logic_1164.all;


entity fulladder is

     port (a, b, c: in std_logic;
           sout, cout: out std_logic);

     end fulladder;

architecture behav of fulladder is
begin

sout <= (a xor b) xor c ;
cout <= (a and b) or (c and (a xor b));

     end behav;

library ieee;
use ieee.std_logic_1164.all;

entity unsignedmult is 
port (a,b: in     std_logic_vector (3 downto 0);
       pro: out std_logic_vector (7 downto 0)); 

end unsignedmult;     


architecture synth of unsignedmult is

    --Declarations
    signal c1,c2,c3,c4,c5: std_logic_vector (3 downto 0);
    signal s1,s2,s3,s4: std_logic_vector (2 downto 0);
    component fulladder
        port (a,b,c:in std_logic;
           sout,cout:out std_logic);
    end component;

begin  

    --Row 0                    ----Sin-----A&B-------Cin--Sout---Cout
    Fand00: fulladder port map('0',(a(0) and b(0)),'0',pro(0),c1(0));   
    Fand01: fulladder port map('0',(a(1) and b(0)),'0',s1(0),c1(1));
    Fand02: fulladder port map('0',(a(2) and b(0)),'0',s1(1),c1(2));
    Fand03: fulladder port map('0',(a(3) and b(0)),'0',s1(2),c1(3));

    --Row 1
    Fand10: fulladder port map(s1(0),(a(0) and b(1)),c1(0),pro(1),c2(0));
    Fand11: fulladder port map(s1(1),(a(1) and b(1)),c1(1),s2(0),c2(1));
    Fand12: fulladder port map(s1(2),(a(2) and b(1)),c1(2),s2(1),c2(2));
    Fand13: fulladder port map('0',(a(3) and b(1)),c1(3),s2(2),c2(3));

    --Row 2
    Fand20: fulladder
         ----Sin------A&B------Cin-Sout-Cout
       port map(s2(0),(a(0) and b(2)),c2(0),pro(2),c3(0));
    Fand21: fulladder
         ----Sin--A&B------Cin-Sout-Cout
       port map(s2(1),(a(1) and b(2)),c2(1),s3(0),c3(1));
    Fand22: fulladder
         ----Sin--A&B------Cin-Sout-Cout
       port map(s2(2),(a(2) and b(2)),c2(2),s3(1),c3(2));
    Fand23: fulladder
         ----Sin--A&B------Cin-Sout-Cout
       port map('0',(a(3) and b(2)),c2(3),s3(2),c3(3));

    --Row 3
    Fand30: fulladder
         ----Sin------A&B------Cin-Sout-Cout
       port map(s3(0),(a(0) and b(3)),c3(0),pro(3),c4(0));
    Fand31: fulladder
         ----Sin--A&B------Cin-Sout-Cout
       port map(s3(1),(a(1) and b(3)),c3(1),s4(0),c4(1));
    Fand32: fulladder
         ----Sin--A&B------Cin-Sout-Cout
       port map(s3(2),(a(2) and b(3)),c3(2),s4(1),c4(2));
    Fand33: fulladder
         ----Sin--A&B------Cin-Sout-Cout
       port map('0',(a(3) and b(3)),c3(3),s4(2),c4(3));

    --Row 4
    F40: fulladder
       port map(s4(0),c4(0),'0',pro(4),c5(0));
    F41: fulladder
       port map(s4(1),c4(1),c5(0),pro(5),c5(1));
    F42: fulladder
       port map(s4(2),c4(2),c5(1),pro(6),c5(2));
    F43: fulladder
       port map('0',c4(3),c5(2),pro(7),c5(3));

end synth;
War es hilfreich?

Lösung

Ich bin rostig, aber Sie könnten explizite und Gates für die a(_) and b(_) Einträge haben müssen. Ich habe von Draht-OPs gehört, aber nicht draht ANDs (in positiver Logik zumindest).

Am allerwenigsten, versuchen Sie jeden dieser nur mit dem a(_) Teil zu ersetzen, und sehen, ob die Fehler verschwinden. Es wird nicht die richtige Schaltung sein, aber es wird bestätigt, wenn ich mich recht zu bin, was die Zusammenstellung Problem verursacht.

Andere Tipps

Wenn ich die Dinge richtig erinnere, man kann nicht einen logischen Ausdruck der Karte (zum Beispiel a (0) und b (0)) an einem Port (aber ich denke, Konstanten sind OK). Wenn dies richtig ist, müssen Sie für alle Ein- und Ausgänge explizite Signale erzeugen.

Sie auch: 1) Ich glaube nicht, dass die FULLADDER Architektur ist Verhaltens-, so würde ich ihm etwas anderes nennen. Ich habe verwendet (richtig oder nicht) den Namen rtl für diese Architekturen.

2) Es sollte möglich sein, den Volladdierer zu instanziiert, ohne die Komponente zu deklarieren. Verwenden Sie eine Syntax wie

Fand00: entity fulladder port map(...)

ich es auch üblich, finden immer die formalen Portnamen angeben (cout => c1 (0), mit einigem Vorbehalt für die Richtung des Pfeils, usw.)

3) Ich nehme an, Sie wissen, dass jeder vor kurzem neuen Synthesizer der Lage, eine Multiplikation synthisize und dass Sie tun dies nur für das Lernen, wie es funktioniert, sonst ich habe dir gesagt, nur:)

Einige Synthesizer haben Probleme mit Hafenkarten, die nicht statisch Ausdrücke sind.

Sie müssen möglicherweise mit einem Signal, wo auch immer der Synthesizer beklagt den Ausdruck im Hafen Karte ersetzen. Zum Beispiel:

Fand00: fulladder port map('0',(a(0) and b(0)),'0',pro(0),c1(0));

Mit:

signal t: std_logic;

...

t <= a(0) and b(0);

...

Fand00: fulladder port map('0',t,'0',pro(0),c1(0));

überhaupt möglich Wenn Sie bitte eine andere Synthesizer-Software. quälen Sie sich nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top