32 Bit

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1424
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Re: 32 Bit

Beitrag von davidvajda.de »

Ich probiere jetzt, den Registersatz zu machen. Das heisst, ich habe wieder 32 Register - und das selbe wie vorher. Jetzt brauche ich ein Addresskodierer. Das erste, was gut wäre, wäre an jedes Register erst Mal ein Write Enable zu machen

Dann brauche ein Addresskodierer. Und das sinnvollste - wäre - drei Enable zu machen

1.) Register Enable
2.) Write Enable
3.) Read Enable.


Ah, sie haben recht - das machen nur Anfänger, das ist schon klar - ausser Write Enable, ein Read Enable, ein Register Enable - was noch - natürlich macht das nachher unser Dekoder - Rückwirkend - kein gekauftes Register - TTL-744-Gatter - da kommt mir mein Wissen zu gut, hat ein Read Enable. Schon klar - lassen wir es - nur WE.

Code: Alles auswählen

architecture behaviour of reg32 is
    component dmsff
    port (
        q: out std_logic;
        d, c: in std_logic;
        we: in std_logic
    );
    end component;
    signal c1: std_logic;
begin
    c1 <= we and c;
    l1:
    for i in 0 to 31 generate
        sn: dmsff PORT MAP (q=>q(i), d=>d(i), c=>c1);
    end generate;
end;
Jetzt brauchen wir einen Addresskodierer für den Eingang.

Halt, halt, halt! Wir machen das gleich richtig. Wir definieren den Registersatz - der hat Lese-Register-1, Lese-Register-2. Das sind die 5 Bit zum Auswählen, dafür brauchen wir einen Addresskodierer. Gut - zwei brauchen wir - den machen wir als entity und architecture und dann als Komponente, und zwei Mal. Die 5 Bit gehen an den Addresskodierer, Lese-Register-1. Dann Lese-Daten 1/2. Das sind 32 bit, die gehen in das Register. Dann brauchen für den Register - ein WE und dann brauchen noch ein Addresskodierer - aber das umgekehrte - nämlich - das entspricht dem Lesen-Enable. Das wäre alles.

Das mit dem Addresskodierer - ist eine Suboptimale Idee - weil wir haben Lese-Daten-1, 2 und es ist besser, Multiplexer und Demultiplexer zu nehmen.

Code: Alles auswählen

-- gut package und type habe ich hingekriegt, für den 32x32 bit registersatz - bitte nichts denken, der Code nicht vollständig, aber ich habe es getestet, package und type funktioniert. Das braucht man wegen dem 32x32_1 multiplexer und wegen dem 32x1_32 demultiplexer

library ieee;
use ieee.std_logic_1164.all;

entity fulladder is
port (
    a, b, c: in std_logic;
    s, u: out std_logic
);
end;

architecture behaviour of fulladder is
begin
    s <= a xor b xor c;
    u <= (a and b) or ((a or b) and c);
end;

library ieee;
use ieee.std_logic_1164.all;

entity ripplecarryadder32 is
port (
    s: out std_logic_vector (31 downto 0);
    b, a: in std_logic_vector (31 downto 0)
);
end;

architecture behaviour of ripplecarryadder32 is
    component fulladder
    port (
        a, b, c: in std_logic;
        s, u: out std_logic
    );
    end component;
    signal c : std_logic_vector (31 downto 0);
    signal u : std_logic_vector (31 downto 0);
begin
    c(0) <= '0';
    add1: fulladder PORT MAP (c=>c(0),b=>b(0),a=>a(0),s=>s(0),u=>u(0));
    l1:
        for i in 1 to 31 generate
            sn: fulladder PORT MAP (c=>u(i-1),b=>b(i),a=>a(i),s=>s(i),u=>u(i));
        end generate;
end;

library ieee;
use ieee.std_logic_1164.all;

entity srlatch is
port (
    q: out std_logic;
    r, s: in std_logic
);
end;

architecture behaviour of srlatch is
    signal q1, q2: std_logic;
begin
    q1 <= s when q1 = 'U' else (q2 nor s);
    q2 <= not s when q2 = 'U' else (q1 nor r);
    q <= q1;
end;

library ieee;
use ieee.std_logic_1164.all;

entity csrlatch is
port (
    q: out std_logic;
    r, s, c: in std_logic
);
end;

architecture behaviour of csrlatch is
    component srlatch
    port (
        q: out std_logic;
        r, s: in std_logic
    );
    end component;
    signal s1, r1 : std_logic;
begin
    sn: srlatch PORT MAP (s=>s1, r=>r1, q=>q);
    s1 <= c and s;
    r1 <= c and r;
end;

library ieee;
use ieee.std_logic_1164.all;

entity dlatch is
port (
    q: out std_logic;
    d, c: in std_logic
);
end;

architecture behaviour of dlatch is
    component csrlatch
    port (
        q: out std_logic;
        s, r, c: in std_logic
    );
    end component;
    signal s1, r1 : std_logic;
begin
    sn: csrlatch PORT MAP (s=>s1, r=>r1, c=>c, q=>q);
    s1 <= d;
    r1 <= not d;
end;

library ieee;
use ieee.std_logic_1164.all;

entity dmsff is
port (
    q: out std_logic;
    d, c: in std_logic
);
end;

architecture behaviour of dmsff is
    component dlatch
    port (
        q: out std_logic;
        d, c: in std_logic
    );
    end component;
    signal c1, c2 : std_logic;
    signal q1 : std_logic;
begin
    sn1: dlatch PORT MAP (d=>d, c=>c1, q=>q1);
    sn2: dlatch PORT MAP (d=>q1, c=>c2, q=>q);
    c1 <= c;
    c2 <= not c;
end;

library ieee;
use ieee.std_logic_1164.all;

entity reg32 is
port (
    c: in std_logic;
    q: out std_logic_vector (31 downto 0);
    d: in std_logic_vector (31 downto 0);
    we: in std_logic
);
end;

architecture behaviour of reg32 is
    component dmsff
    port (
        q: out std_logic;
        d, c: in std_logic
    );
    end component;
    signal c1: std_logic;
begin
    c1 <= we and c;
    l1:
    for i in 0 to 31 generate
        sn: dmsff PORT MAP (q=>q(i), d=>d(i), c=>c1);
    end generate;
end;

library ieee;
use ieee.std_logic_1164.all;

library ieee;
use ieee.std_logic_1164.all;

package t_32x32 is
    type t_32x32 is array (31 downto 0) of std_logic_vector (31 downto 0);
end package t_32x32;

use t32_32;

entity mux32x32_1 is
port (
    data_in32: in t_32x32;
    data_out32: out std_logic_vector (31 downto 0)
);
end;

library ieee;
use ieee.std_logic_1164.all;

entity registerset32x32 is
port (
    we: in std_logic;
    read_register_1: in std_logic_vector (4 downto 0);
    read_register_2: in std_logic_vector (4 downto 0);
    write_register: in std_logic_vector (4 downto 0);
    read_data_1: in std_logic_vector (31 downto 0);
    read_data_2: in std_logic_vector (31 downto 0);
    write_data: out std_logic_vector (31 downto 0)
);
end;

architecture behaviour of registerset32x32 is
    component reg32
    port (
        c: in std_logic;
        q: out std_logic_vector (31 downto 0);
        d: in std_logic_vector (31 downto 0)
    );
    end component;
    component mux32x32_1
    port (

    );
    end component;
    component demux32x1_32
    port (

    );
    end component;
begin
    l1:
    for i in 0 to 31 generate
        sn: dmsff PORT MAP (q=>q(i), d=>d(i), c=>c1);
    end generate;
end;

library ieee;
use ieee.std_logic_1164.all;

entity counter32 is
port (
    q: inout std_logic_vector (31 downto 0)
);
end;

architecture behaviour of counter32 is
    component reg32
    port (
        c: in std_logic;
        q: out std_logic_vector (31 downto 0);
        d: in std_logic_vector (31 downto 0)
    );
    end component;
    component ripplecarryadder32
    port (
        s: out std_logic_vector (31 downto 0);
        b, a: in std_logic_vector (31 downto 0)
    );
    end component;
    signal d: std_logic_vector (31 downto 0);
    signal b: std_logic_vector (31 downto 0);
    signal a: std_logic_vector (31 downto 0);
    signal c: std_logic;
begin
    sn1: reg32 PORT MAP (q=>b, d=>d, c=>c);
    sn2: ripplecarryadder32 PORT MAP (b=>b, a=>a, s=>d);
    a <= ('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1') after 0 ns;
    q <= d;
    --b <= ('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0') after 0 ns;
    --d <= ('0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0') after 0 ns;
    c <= '0' after 0 ns, '1' after 1 ns, '0' after 2 ns, '1' after 3 ns, '0' after 4 ns, '1' after 5 ns, '0' after 6 ns, '1' after 7 ns;

end;

Es ist am Ende nicht mehr schwer, die Zeichen unseres computers auf hdmi darstellen

Also, erstens: es gibt ja ieee. Irgendwo im Netz steht beschrieben, wie das hdmi geht. So würde ich das nicht machen. Ich würde einen mda zu hdmi Adapter kaufen

Aber mda, cgs, hga, ist beschrieben. Na ja, sie haben ihren RAM und stellen "hallo" dar. Sie müssen nur den Standard zur Umwandlung auf das VGA Kabel. Umsetzen. Ich weiss nicht genau, wie mda, VGA, ... definiert ist. Ist egal, das lernt man, oder man setzt es zur nächst mit ieee, lesen, um

Gut, der Unterschied: ich weiss noch nicht genau, wie VGA genau definiert ist. Ich weiss es nicht so gut. Den MIPS zumindest, den einfachsten also CPU, den kann ich. Teilweise fehlt was. Das lerne ich zur Prüfung. Vollständig. Aber das ist die CPU. Die weiss ich wie sie geht. MDA nicht so. Wie und wie, sind zwei Teile

Der Rest sind RAM Datenspeicher und ROM prog speicher. Das kommt ohne Problem auf den fpga.

Das machen wir schon! Keine Panik! Das kriegen wir hin. Als erstes kommt der easyeste mips. Ich werde damit led's ansteuern. Ich ich möchte die Prüfung bestehen.
Antworten