8 8 biţi resgister

T

TSS

Guest
bibliotecă IEEE;
utilizare ieee.std_logic_1164.all;
utilizare ieee.std_logic_unsigned.all;
utilizare ieee.std_logic_arith.all;

ENTITATE alu8bit este
port (A, B: in std_logic_vector (7 downto 0);
op: in std_logic_vector (2 downto 0);
zero: out std_logic;
C: afară std_logic_vector (7 downto 0));
END alu8bit;

arhitectura de alu8bit de comportament este
începe
proces (PO)
variabilă temp: std_logic_vector (7 downto 0);
începe
op este cazul
atunci când "000" =>
temp: = A şi B;
atunci când "100" =>
temp: = A şi B;
atunci când "001" =>
temp: = A sau B;
atunci când "101" =>
temp: = A sau B;
atunci când "010" =>
temp: = a b;
atunci când "110" =>
temp: = a - b;
atunci când "111" =>
dacă a <b atunci
temp: = "11111111";
alt
temp: = "00000000";
sfârşit dacă;
atunci când alţii =>
temp: = a - b;
sfârşitul cazul;
dacă temp = "00000000", atunci
zero <='1 ';
alt
zero <='0 ';
sfârşit dacă;
c <= temp;
sfârşitul procesului;
sfârşitul comportamentale;oricine ştie cum să se schimbe de codare de mai sus pentru a 8 8 biţi registru?

 
Z eksperymentu, który F-Secure przeprowadził wspólnie z Europolem, wynika, że konsumenci beztrosko narażają swoje dane osobiste i lekkomyślnie akceptują absurdalne warunki korzystania z sieci.

Read more...
 
Ce ai nevoie este un port matrice.Ceva de genul:
Cod:port_array este de tip array (7 downto 0) de std_logic_vector (7 downto 0);

semnal my_signal: port_array;
 
Poti explica cu mai multe detalii?
Vreau proiectarea conţine 8 8-bit registre, care poate fi încărcat de la o extern de intrare şi încărcate înapoi în unul din cele opt registre interne, sau de citit extern.

 
Aici este o "componentă", care are 8 * 8 registre şi poate fi citit / scris la / de la.
Este nu este clocked şi, ca atare, nu este de obicei utilizat.Cod:bibliotecă IEEE;

utilizare ieee.std_logic_1164.all;

utilizare ieee.std_logic_unsigned.all;

utilizare ieee.std_logic_arith.all;ENTITATE alu8bit este

port (

indexin: naturale în intervalul 0 - 7;

datain: in std_logic_vector (7 downto 0);

indexout: naturale în intervalul 0 - 7;

dataout: out std_logic_vector (7 downto 0)

);

END alu8bit;arhitectura de alu8bit de comportament este

portarray este de tip array (7 downto 0) de std_logic_vector (7 downto 0);

semnal internalregisters: portarray;începe

internalregisters (indexin) <= datain;

dataout <= internalregisters (indexout);

sfârşitul comportamentale;

 
Marcel Majoor mersi.i se va întoarce din nou în cazul în care există o îndoială.

 
Nu înţeleg această linie >>>>>>>>> indexin: naturale în intervalul 0
- 7;

poate cineva sa-mi spui?

 
hai .. te bun student ahAdăugat după 46 secunde:Cine esti tu?Vă rugăm să vii la mine în birou!!

 
..naturale în intervalul 0
- 7;

Aceasta înseamnă că vom defini un "natural", care pot avea o gamă largă de la "0" la "7".
Un "natural" este definit de utilizator integer tip, care are o gamă implicit 0
- 2147483647.
Dacă nu am include interval (în intervalul de la 0 la 7), apoi ne-am fi implicit al "naturale".

Practic am putea avea, de asemenea, "indexin" şi "indexout" este definit ca o std_logic_vector (2 downto 0), care se întâmplă să aibă de asemenea, 8 valori posibile, dar cu ajutorul unui naturale (şi care definesc interval) nu prea.
Ne lasă-l, până la compilator de a "aloca" corect numărul de biţi pentru el.
Uneori este chiar mai convenabil să se utilizeze un întreg / naturale, în loc de o std_logic_vector.Unele operaţiuni, cum ar fi, folosind ca index pentru o serie, se poate face fără suplimentare de conversie / 'typecasting ".

 
bibliotecă IEEE;
utilizare ieee.std_logic_1164.all;
utilizare ieee.std_logic_unsigned.all;
utilizare ieee.std_logic_arith.all;

ENTITATE alu8bit este
port (
A: naturale în intervalul 0
- 7;
b: in std_logic_vector (7 downto 0);
c: naturale în intervalul 0
- 7;
op: out std_logic_vector (2 downto 0)
);
END alu8bit;

arhitectura de alu8bit de comportament este
începe
proces (PO)
variabilă temp: std_logic_vector (7 downto 0);
începe
op este cazul
atunci când "000" =>
temp: = A şi B;
atunci când "100" =>
temp: = A şi B;
atunci când "001" =>
temp: = A sau B;
atunci când "101" =>
temp: = A sau B;
atunci când "010" =>
temp: = a b;
atunci când "110" =>
temp: = a - b;
atunci când "111" =>
dacă a <b atunci
temp: = "11111111";
alt
temp: = "00000000";
sfârşit dacă;
atunci când alţii =>
temp: = a - b;
sfârşitul cazul;
dacă temp = "00000000", atunci
zero <='1 ';
alt
zero <='0 ';
sfârşit dacă;
c <= temp;
sfârşitul procesului;sfârşitul comportamentale;

Am incercat acest lucru, dar am primit următoarele erros.
Info: Rularea qu (at) rtus II & Analiza de sinteza
Info: Version 9.0 Build 184
04/29/2009 Service Pack 1 SJ Web Edition
Info: Prelucrarea inceput: Sam 18 iulie 00:55:36 2009
Info: Command: quartus_map - read_settings_files = pe - write_settings_files = off alu8bit-c alu8bit
Info: găsite 2 unitati de proiectare, inclusiv 1 entităţi, în fişierul sursă alu8bit.vhd
Info: Found design unitate 1: alu8bit-comportamentale
Info: Found entitate 1: alu8bit
Eroare (10309): VHDL Interface Declaraţia de eroare în alu8bit.vhd (20): interfaţă obiect "op" din modul de afară nu pot fi citite.Modificare obiect modul de a-tampon.
Eroare (10309): VHDL Interface Declaraţia de eroare în alu8bit.vhd (17): interfaţă obiect "op" din modul de afară nu pot fi citite.Modificare obiect modul de a-tampon.
Eroare: qu (at) rtus Analiza
si sinteza II nu a reuşit.2 erori, 0 Atenţionări
Eroare: Varful virtual memorie: 215 megaocteţi
Eroare: Prelucrarea încheiat: Sam 18 iulie 00:55:38 2009
Eroare: scurs Ora: 00:00:02
Eroare: Total procesor de timp (de pe toate procesoarele): 00:00:01
Eroare: qu (at) rtus II Full Compilation nu a reuşit.4 erori, 0 Atenţionări

 
dacă scrie = "1", apoi ....
dacă citiţi = "1", apoi .....

ce funcţia pentru două linii de mai sus?
Ne pare rău dor, eu sunt de aici, de asemenea, de învăţare.Vă rugăm să nu-mi spui la birou.

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Plâns sau foarte trist" border="0" />
 
Eroare (10309): VHDL Interface Declaraţia de eroare în alu8bit.vhd (20): interfaţă obiect "op" din modul de afară nu pot fi citite.Modificare obiect modul de a-tampon.

The 'op "este definită în entitate ca o ieşire, aşa încât aceasta poate fi o" intrare "pentru acest proces.
Parerea 'op ", cel mai probabil, trebuie să fie o" în "în loc de un" afară ".Şi dumneavoastră, probabil, c port trebuie să fie "out" în loc de "în".

Aici este codul
dvs., dar uşor modificat pentru a fi compilable:
Modificat piese sunt:
port A / B: -> std_logic_vector (7 downto 0)
port c: afară
op: în
semnal de zero adăugată

Cod:

bibliotecă IEEE;

utilizare ieee.std_logic_1164.all;

utilizare ieee.std_logic_unsigned.all;

utilizare ieee.std_logic_arith.all;ENTITATE alu8bit este

port (

R: In std_logic_vector (7 downto 0);

b: in std_logic_vector (7 downto 0);

c: out std_logic_vector (7 downto 0);

op: in std_logic_vector (2 downto 0)

);

END alu8bit;arhitectura de alu8bit de comportament este

semnal de zero: std_logic;începeproces (PO)

variabilă temp: std_logic_vector (7 downto 0);

începe

op este cazul

atunci când "000" => temp: = A şi B;

atunci când "100" => temp: = A şi B;

atunci când "001" => temp: = A sau B;

atunci când "101" => temp: = A sau B;

atunci când "010" => temp: = a b;

atunci când "110" => temp: = a - b;

atunci când "111" => daca a <b atunci

temp: = "11111111";

alt

temp: = "00000000";

sfârşit dacă;

atunci când alţii => temp: = a - b;

sfârşitul cazul;

dacă temp = "00000000", atunci

zero <='1 ';

alt

zero <='0 ';

sfârşit dacă;

c <= temp;

sfârşitul procesului;sfârşitul comportamentale;
 
hai mersi pentru coding.i au testat şi sa working.does această codificare conţine 8 * 8-bit register_ALU?

 
Am luat-o, mulţumesc Marcel Majoor.
aici am unul şi ultimul lucru Nu înţeleg.
internalregisters (indexin) <= datain;
datain păstra în indexin sau internalregisters?

dacă nu mă greşit "internalregisters" este o matrice care conţine 8 * 8 biţi registru nu-i asa?
Ultima editare de TSS pe 18 iulie 2009 13:46; edited 1 time in total

 
TSS a scris:

Am luat-o, mulţumesc Marcel Majoor.

aici am unul şi ultimul lucru Nu înţeleg.

internalregisters (indexin) <= datain;

datain păstra în indexin sau internalregisters?
 
mar mar lwin a scris:TSS a scris:

Am luat-o, mulţumesc Marcel Majoor.

aici am unul şi ultimul lucru Nu înţeleg.

internalregisters (indexin) <= datain;

datain păstra în indexin sau internalregisters?
 
Cum se modifică Prezentul cod pentru a face 8 * 8 REGISTRUL??SĂ HV vreo idee?

 
Cod:bibliotecă IEEE;

utilizare ieee.std_logic_1164.all;

utilizare ieee.std_logic_unsigned.all;

utilizare ieee.std_logic_arith.all;ENTITATE alu8bit este

port (

indexin: in std_logic_vector (7 downto 0);

datain: in std_logic_vector (7 downto 0);

A: in std_logic_vector (7 downto 0);

B: in std_logic_vector (7 downto 0);

op: in std_logic_vector (2 downto 0);

zero: out std_logic;

C: afară std_logic_vector (7 downto 0)

);

END alu8bit;arhitectura de alu8bit de comportament este

începe

proces (clk)

portarray este de tip array (7 downto 0) de std_logic_vector (7 downto 0); - matrice este de a face 1 * 8 biţi registru până la 8 * 8 biţi registre

semnal internalregisters: portarray; - 8 * 8 biţi registre

începe

dacă rising_edge (clk), apoi

internalregisters (indexin) <= datain; - "datain" păstra în 8 * 8 biţi registre

o <= internalregisters (indexin); - "a" obţine date de la 8 * 8 biţi registre

b <= internalregisters (indexin); - "B" a obţine date de la 8 * 8 biţi registre

sfârşit dacă;

sfârşitul procesului;

proces (PO)

variabilă temp: std_logic_vector (7 downto 0);

începe

op este cazul

atunci când "000" =>

temp: = A şi B;

atunci când "100" =>

temp: = A şi B;

atunci când "001" =>

temp: = A sau B;

atunci când "101" =>

temp: = A sau B;

atunci când "010" =>

temp: = a b;

atunci când "110" =>

temp: = a - b;

atunci când "111" =>

dacă a <b atunci

temp: = "11111111";

alt

temp: = "00000000";

sfârşit dacă;

atunci când alţii =>

temp: = a - b;

sfârşitul cazul;

dacă temp = "00000000", atunci

zero <='1 ';

alt

zero <='0 ';

sfârşit dacă;

c <= temp;

sfârşitul procesului;sfârşitul comportamentale;
 
1.Adăugat clk entitate în parte
2."Tip" şi "semnal" aparţine în "arhitectura" parte a proiectului
3.IndexIn este prea "mare".Acesta permite un index care variază de la 0 .. 255 (8 biţi), şi portarray numai este de 8 adâncime (3 biţi).
Am făcut portarray "variabila", deci foloseste dimensiunea din IndexIn semnal.
4.Adăugat "conv_integer" atât de diferite "tipuri" meci (std_logic_vector () -> naturale)
5.Comentat faptul A / B, în acest proces.Ele sunt intrările în entitate, astfel încât acestea să nu poate fi scris de.Numai un "afară" sau "inout" poate fi scris la (aceasta se aplică în cazul în care entitatea semnale numai).Local semnale (în conformitate cu arhitectură) sunt întotdeauna "inout", după cum ştiţi, dar ele pot fi scrise în singur proces.

entitate parte: de "afara" lume
arhitectură: la "locale" semnale / definiţie

Aici este o "compilable" versiune.
Vă rugăm să reţineţi că, folosind "corecta" indentations face codul de mai mult de citit şi,
prin urmare, mai uşor de înţeles.

Cod:

bibliotecă IEEE;

utilizare ieee.std_logic_1164.all;

utilizare ieee.std_logic_unsigned.all;

utilizare ieee.std_logic_arith.all;ENTITATE alu8bit este

port (

clk: in std_logic;

indexin: in std_logic_vector (2 downto 0);

datain: in std_logic_vector (7 downto 0);

A: in std_logic_vector (7 downto 0);

B: in std_logic_vector (7 downto 0);

op: in std_logic_vector (2 downto 0);

zero: out std_logic;

C: afară std_logic_vector (7 downto 0)

);

END alu8bit;arhitectura de alu8bit de comportament este

portarray este de tip array (indexin'HIGH downto indexin'LOW) din std_logic_vector (7 downto 0); - matrice de octet pe bază de registre

semnal internalregisters: portarray; - byte registreîncepe

proces (clk)

începe

dacă rising_edge (clk), apoi

internalregisters (conv_integer (indexin)) <= datain; - "datain" păstra în matrice de byte registre

- Imposibil -> "A" este definit ca fiind "în" în entitate! A <= internalregisters (conv_integer (indexin)); - "a" obţine datele din registrele de array de byte

- Imposibil -> "B" este definit ca fiind "în" în entitate! B <= internalregisters (conv_integer (indexin)); - "B" obţine datele din registrele de array de byte

sfârşit dacă;

sfârşitul procesului;proces (PO)

variabilă temp: std_logic_vector (7 downto 0);

începe

op este cazul

atunci când "000" => temp: = A şi B;

atunci când "100" => temp: = A şi B;

atunci când "001" => temp: = A sau B;

atunci când "101" => temp: = A sau B;

atunci când "010" => temp: = a b;

atunci când "110" => temp: = a - b;

atunci când "111" => daca a <b atunci

temp: = "11111111";

alt

temp: = "00000000";

sfârşit dacă;

atunci când alţii => temp: = a - b;

sfârşitul cazul;

dacă temp = "00000000", atunci

zero <='1 ';

alt

zero <='0 ';

sfârşit dacă;

c <= temp;

sfârşitul procesului;sfârşitul comportamentale;
 
Cod:

bibliotecă IEEE;

utilizare ieee.std_logic_1164.all;

utilizare ieee.std_logic_unsigned.all;

utilizare ieee.std_logic_arith.all;ENTITATE alu8bit este

port (

clk: in std_logic;

indexin: in std_logic_vector (2 downto 0);

datain: in std_logic_vector (7 downto 0);

R: în std_logic_vector (7 downto 0);

B: în std_logic_vector (7 downto 0);

op: in std_logic_vector (2 downto 0);

zero: out std_logic;

C: afară std_logic_vector (7 downto 0)

);

END alu8bit;arhitectura de alu8bit de comportament este

portarray este de tip array (indexin'HIGH downto indexin'LOW) din std_logic_vector (7 downto 0); - matrice de octet pe bază de registre

semnal internalregisters: portarray; - byte registreîncepe

proces (clk)

începe

dacă rising_edge (clk), apoi

internalregisters (conv_integer (indexin)) <= datain; - "datain" păstra în matrice de byte registre

- Imposibil -> "A" este definit ca fiind "în" în entitate!

o <= internalregisters (conv_integer (indexin)); - "a" obţine datele din registrele de array de byte

- Imposibil -> "B" este definit ca fiind "în" în entitate!

b <= internalregisters (conv_integer (indexin)); - "B" obţine datele din registrele de array de byte

sfârşit dacă;

sfârşitul procesului;proces (PO)

variabilă temp: std_logic_vector (7 downto 0);

începe

op este cazul

atunci când "000" => temp: = A şi B;

atunci când "100" => temp: = A şi B;

atunci când "001" => temp: = A sau B;

atunci când "101" => temp: = A sau B;

atunci când "010" => temp: = a b;

atunci când "110" => temp: = a - b;

atunci când "111" => daca a <b atunci

temp: = "11111111";

alt

temp: = "00000000";

sfârşit dacă;

atunci când alţii => temp: = a - b;

sfârşitul cazul;

dacă temp = "00000000", atunci

zero <='1 ';

alt

zero <='0 ';

sfârşit dacă;

c <= temp;

sfârşitul procesului;sfârşitul comportamentale;Am incercat acest lucru, dar după cum se arată în eroare de mai jos:

Eroare (10309): VHDL Interface Declaraţia de eroare în alu8bit.vhd (39): interfaţă obiect "A" de modul de afară nu pot fi citite.
Modificare obiect modul de a-tampon.

Eroare (10309): VHDL Interface Declaraţia de eroare în alu8bit.vhd (39): interfaţă obiect "B" de modul de afară nu pot fi citite.
Modificare obiect modul de a-tampon.

Eroare: qu (at) rtus Analiza si sinteza II nu a reuşit.
2 erori, 0 Atenţionări

Eroare: Varful virtual memorie: 183 megaocteţi

Eroare: Prelucrarea încheiat: Dum iul 19 21:50:21 2009

Eroare: scurs Ora: 00:00:02

Eroare: Total procesor de timp (de pe toate procesoarele): 00:00:02

Eroare: qu (at) rtus II Full Compilation nu a reuşit.
4 erori, 0 Atenţionări
 

Welcome to EDABoard.com

Sponsor

Back
Top