Pat vienkārša programma, es nevaru saņemt tiesības simulācija!

C

cutepotato

Guest
Šis ir īss kods, rakstīts VHDL, norisināsies Active-HDL.
tas apkopo veiksmīgi, taču modelēšanas rezultāti nepareizi.
ka ram šķiet, nedarbojas, jo es nevaru iegūt vērtību no RAM.

Jūs plz ir apskatīt to?Liels paldies!

----- 2D FDM
bibliotēkas IEEE;
izmantot IEEE.STD_LOGIC_1164.ALL;
izmantot IEEE.STD_LOGIC_ARITH.ALL;
izmantot IEEE.STD_LOGIC_UNSIGNED.ALL;
izmantot IEEE.numeric_std.all;vienība twoDfdm ir
ports (CLK: ar std_logic;
lv: ar std_logic - ļauj visu ķēdi, lai tā darbotos, kad "1"
din: ar std_logic_vector (15 downto 0);

reset: ar std_logic;
WR: ar std_logic;
dout: no std_logic_vector (15 downto 0));
beigās twoDfdm;arhitektūra Uzvedības un twoDfdm ir

- Tipa my_array ir masīvs (no 0 līdz 255) ar std_logic_vector (15 downto 0);
-
- Signāla u: my_array;
- Signāla v: my_array;signāls addr1: vesels skaitlis diapazonā no 0 līdz 15;
signāls addr2: vesels skaitlis diapazonā no 0 līdz 15;
signāls adrese: vesels skaitlis diapazonā no 0 līdz 255;
signāls address_up: vesels skaitlis diapazonā no 0 līdz 255;
signāls address_down: vesels skaitlis diapazonā no 0 līdz 255;
signāls address_right: vesels skaitlis diapazonā no 0 līdz 255;
signāls address_left: vesels skaitlis diapazonā no 0 līdz 255;

signāls data1: std_logic_vector (15 downto 0);
signāls data2: std_logic_vector (15 downto 0);
signāls data3: std_logic_vector (15 downto 0);
signāls data4: std_logic_vector (15 downto 0);
signāls data5: std_logic_vector (15 downto 0);
signāls data0: std_logic_vector (15 downto 0);
signāls data9: std_logic_vector (17 downto 0);

signāls zīme: std_logic_vector (11 downto 0);
signāls comp: std_logic;
signāls en_delay: std_logic;
signāls WE: std_logic: = '0 ';
signāls OE: std_logic: = '0 ';

komponents ram ir
osta (Adrese: ar INTEGER diapazonā no 0 līdz 255;
CLK: ar std_logic;
dati: inout std_logic_vector (15 downto 0);
CS, WE, OE: jo std_logic);
beigu daļa ram;

sākt- Atmiņa 16 * 16
process (reset, CLK), ir
- Mainīgais a1: vesels skaitlis diapazonā no 0 līdz 15;
- Mainīgā a2: vesels skaitlis diapazonā no 0 līdz 15;

sākt
ja (reset = "0"), tad
addr1 <= 0;
addr2 <= 0;

elsif rising_edge (CLK), tad
ja (addr2 = 13), tad
addr1 <= 0;
addr2 <= 0;
elsif addr1 = 13, tad
addr1 <= 0;
addr2 <= addr2 1;
elsif en = "1", tad
addr1 <= addr1 1;
- Beidzas, ja;
beidzas, ja;
beidzas, ja;

gala procesa;

- Adrese,
set_addr: process (addr1, addr2) ir
sākt
- WE <= "1";
adrese <= addr1 1 (addr2 1) * 16 pēc 5NS;

end process set_addr;

- LUT 1 * 4
LUT: process (addr1, addr2) ir
sākt

address_up <= 1 addr2 * 16 addr1 pēc 5NS;
address_down <= addr1 1 (addr2 2) * 16 pēc 5NS;
address_right <= addr1 2 (addr2 1) * 16 pēc 5NS;
address_left <= addr1 (addr2 1) * 16 pēc 5NS;
end process LUT;g1: ram osta karte (adrese => address_up, CLK => CLK, dati => data1, CS => en, WE => WE, OE => OE);
G2: ram osta karte (adrese => address_down, CLK => CLK, dati => data2, CS => en, WE => WE, OE => OE);
G3: ram osta karte (adrese => address_right, CLK => CLK, dati => data3, CS => en, WE => WE, OE => OE);
G4: ram osta karte (adrese => address_left, CLK => CLK, dati => data4, CS => en, WE => WE, OE => OE);
G5: ram osta karte (adrese => adresi, CLK => CLK, dati => data5, CS => en, WE => WE, OE => OE);

- Papildinātājs
aprēķināt: process (CLK, data1, data2, data3, data4) ir
sākt
ja reset = "0", tad
data9 <= (pārējie => '0 ');
elsif rising_edge (CLK), tad
data9 <= ("00" un data1) ("00" un data2) ("00" un data3) ("00" un data4);
beidzas, ja;
end process aprēķināt;- Ievade u datu
- Aprēķināt ierobežots atšķirība vērtības
set_array: process (reset, CLK), ir
sākt
ja reset = "0", tad
data1 <= (pārējie => '0 ');
data2 <= (pārējie => '0 ');
data3 <= (pārējie => '0 ');
data4 <= (pārējie => '0 ');
data5 <= (pārējie => '0 ');

elsif rising_edge (CLK), tad
ja (comp = "1" un en = "1"), tad
OE <= '0 ';
WE <= "1";
elsif (comp = "0", un en = "1"), tad
OE <= "1";
WE <= '0 ';
beidzas, ja;
beidzas, ja;

end process set_array;- Izvērtēt, vai jaunā vērtība ir vienāda ar sākotnējo vērtību
process (data9, data5, en, CLK), ir
sākt
ja (en = "0"), tad
parakstīt <= (pārējie => "1");
elsif rising_edge (CLK), tad
parakstīt <= data5 (15 downto 4) XOR data9 (17 downto 6);

beigām, ja;
gala procesa;

- Kavēšanās en pa pulksteni, ar kuru ļauj signālu comp
nodrošinātu, ka: process (reset, CLK), ir
sākt
ja (reset = "0"), tad
en_delay <= '0 ';
elsif rising_edge (CLK), tad
en_delay <= en;
beidzas, ja;
end process ļauj;

- Izejas salīdzināšanas rezultāts signālu comp
salīdziniet: process (en_delay, zīme) ir
sākt
ja en_delay = "0", tad
comp <= "1";
elsif zīme = "000000000000", tad
comp <= '0 ';
vēl
comp <= "1";
beidzas, ja;
end process salīdzināt;- Izejas gala datiem, kad darbība beidzas
jauda: process (reset, CLK), ir
sākt
ja reset = "0", tad
dout <= (pārējie => '0 ');
elsif rising_edge (CLK), tad
ja (comp = "0", un en = "1"), tad
- WE <= '0 ';
- OE <= "1";
data0 <= data9 (17 downto 2) pēc 5NS;
dout <= data0;
vēl
dout <= (pārējie => '0 ');
beigām, ja;
beigām, ja;
end process izejas;

g: ram osta karte (adrese => adresi, CLK => CLK, dati => data0, CS => en, WE => WE, OE => OE);

beigās Uzvedības;

-------- Tas RAM
bibliotēkas IEEE;
izmantot IEEE.std_logic_1164.all;
izmantot IEEE.std_logic_unsigned.all;

- Ram256x16
vienība ram ir
osta (Adrese: ar INTEGER diapazonā no 0 līdz 255;
dati: inout std_logic_vector (15 downto 0);
CS, WE, OE: ar std_logic;
CLK: jo std_logic
);
beigās uzņēmums ram;

arhitektūra RTL RAM ir

tips ram_array ir masīvs (no 0 līdz 255) ar std_logic_vector (15 downto 0);
signāls atm: ram_array;sākt

- P0: process (CS, WE, OE, dati) ir
- Tipa ram_array ir masīvs (no 0 līdz 255) ar std_logic_vector (15 downto 0);
- Mainīgais atm: ram_array;
set_array: process (CS, CLK), irpastāvīga prog: ram_array: = (
16 => "1000000000000000", 32 => "1000000000000000", 48 => "1000000000000000", 64 => "1000000000000000", 80 => "1000000000000000", 96 => "1000000000000000"
112 => "1000000000000000", 128 => "1000000000000000", 144 => "1000000000000000", 160 => "1000000000000000", 176 => "1000000000000000", 192 => "1000000000000000"
208 => "1000000000000000", 224 => "1000000000000000", 240 => "1000000000000000", citi => (pārējie => '0 '));
sākt

ja CS = '0 ', tad
ja falling_edge (CLK), tad
atmiņu <= prog;
beidzas, ja;
beigām, ja;
end process set_array;read_mem: process (adrese, OE)
sākt
ja OE = "0", tad

dati <= atm (adrese);

vēl
dati <= (pārējie => 'Z');
beidzas, ja;
end process read_mem;

write_mem: process (adrese, WE)
sākt
Ja mēs = "0", tad
atmiņu (adrese) <= datus;
beidzas, ja;
end process write_mem;beigu arhitektūras RTL;

 

Welcome to EDABoard.com

Sponsor

Back
Top