Ce eroare în VHDL codul meu? de ce atât de mult de blocare?

L

lzh08

Guest
bibliotecă IEEE;
utilizarea ieee.std_logic_1164.all;

ENTITY MCU ESTE
PORT
(
nDataStrobe: IN Std_Logic;
nAddrStrobe: IN Std_Logic;
nWri: IN Std_Logic;
nReset: IN Std_Logic;
Date: Std_Logic_Vector INOUT (7 DOWNTO 0);
nWait: OUT Std_Logic;
Nack: OUT Std_Logic;

SysClk: în Std_Logic;
Resetare: în Std_Logic
);
END MCU;

Acţiunea MCU ESTE DE ARHITECTURA
TIP stat IS (Repaus, DataRead, DataWrite, AddrRead, AddrWrite,
DataReadEnd, DataWriteEnd, AddrReadEnd, AddrWriteEnd);
SIGNAL Cur_State, Next_State: de stat: = inactiv;
SIGNAL RegDataTemp: std_logic_vector (7 downto 0);
SIGNAL RegAddrTemp: std_logic_vector (7 downto 0);

BEGIN
PROCES (Cur_State, nDataStrobe, nWri, nAddrStrobe, RegDataTemp, RegAddrTemp, date)
începe
<NWait = '0 ';
este cazul Cur_State
atunci când Idle => <= nWait '0 ';
dacă ((nWri = '1 ') si (nDataStrobe = "0")), apoi
Next_State <= DataRead;
elsif ((nWri = "0") şi (nDataStrobe = "0")), apoi
Next_State <= DataWrite;
elsif ((nWri = '1 ') şi (nAddrStrobe = "0")), apoi
Next_State <= AddrRead;
elsif ((nWri = "0") şi (nAddrStrobe = "0")), apoi
Next_State <= AddrWrite;
altfel
Next_State <= inactiv;
final, dacă;
atunci când DataRead => de date <= RegDataTemp;
<NWait = '1 ';
Next_State <= DataReadEnd;
atunci când DataWrite => RegDataTemp <= date;
<NWait = '1 ';
Next_State <= DataWriteEnd;
când AddrRead => de date <= RegAddrTemp;
<NWait = '1 ';
Next_State <= AddrReadEnd;
atunci când AddrWrite => RegAddrTemp <= date;
<NWait = '1 ';
Next_State <= AddrWriteEnd;
atunci când DataReadEnd => dacă (nDataStrobe = '1 '), apoi
<NWait = '0 ';
Next_State <= inactiv;
altfel
Next_State <= DataReadEnd;
final, dacă;
când AddrReadEnd => dacă (nAddrStrobe = '1 '), apoi
<NWait = '0 ';
Next_State <= inactiv;
altfel
Next_State <= AddrReadEnd;
final, dacă;
atunci când DataWriteEnd => dacă ((nWri = '1 ') şi (nDataStrobe = '1')), apoi
<NWait = '0 ';
Next_State <= inactiv;
altfel
Next_State <= DataWriteEnd;
final, dacă;
atunci când AddrWriteEnd => dacă ((nWri = '1 ') şi (nAddrStrobe = '1')), apoi
<NWait = '0 ';
Next_State <= inactiv;
altfel
Next_State <= AddrWriteEnd;
final, dacă;
atunci când alţii => Next_State <= inactiv;
sfârşitul caz;
sfârşitul procesului;

proces (nu putea suporta, SysClk)
începe
în cazul în care nu putea suporta = '0 ', atunci
Cur_State <= inactiv;
elsif Rising_Edge (SysClk), apoi
Cur_State <= Next_State;
final, dacă;
sfârşitul procesului;
sfârşitul de acţiune;
Atenţie: VHDL Procesul de avertizare Declaratie de la MCU.VHD (2

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Răcoros" border="0" />

: Semnal sau variabila "date" nu poate fi atribuită o valoare nouă în fiecare cale posibilă prin Declaraţia de proces.Semnal sau variabila "date" are precedente valoarea sa în fiecare cale cu nici o misiune noua valoare, care poate crea o bucla combinaţionale în proiectul actual.
Atenţie: VHDL Procesul de avertizare Declaratie de la MCU.VHD (2

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Răcoros" border="0" />

: Semnal sau variabila "RegDataTemp" nu poate fi atribuită o valoare nouă în fiecare cale posibilă prin Declaraţia de proces.Semnal sau variabila "RegDataTemp" deţine anterioare valoarea sa în fiecare cale cu nici o misiune noua valoare, care poate crea o bucla combinaţionale în proiectul actual.
Atenţie: VHDL Procesul de avertizare Declaratie de la MCU.VHD (2

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Răcoros" border="0" />

: Semnal sau variabila "RegAddrTemp" nu poate fi atribuită o valoare nouă în fiecare cale posibilă prin Declaraţia de proces.Semnal sau variabila "RegAddrTemp" deţine anterioare valoarea sa în fiecare cale cu nici o misiune noua valoare, care poate crea o bucla combinaţionale în proiectul actual.
Atenţie: port de iesire "Nack" la MCU.VHD (13) nu are nici conducătorul auto
Atenţie: blocare de date [0] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt hrănite de către acelaşi semnal Cur_State.addrread
Atenţie: blocare de date [1] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt hrănite de către acelaşi semnal Cur_State.addrread
Atenţie: blocare de date [2] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt alimentate de acelaşi semnal Cur_State.addrread
Atenţie: de blocare a datelor [3] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt hrănite de către acelaşi semnal Cur_State.addrread
Atenţie: blocare de date [4] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt hrănite de către acelaşi semnal Cur_State.addrread
Atenţie: blocare de date [5] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt hrănite de către acelaşi semnal Cur_State.addrread
Atenţie: blocare de date [6] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe dispozitivul de blocare sunt hrănite de către acelaşi semnal Cur_State.addrread
Atenţie: blocare de date [7] $ dispozitivul de blocare a comportamentului nesigur
Atenţie: Porturi D şi ENA pe declicul sunt alimentate de acelaşi semnal Cur_State.addrread
Atenţie: TRI sau OPNDRN tampoane permanent activat
Atenţie: Nod "Datele [0] ~ 8"
Atenţie: nod "date [1] ~ 9"
Atenţie: Nod "date [2] ~ 10"
Atenţie: Nod "date [3] ~ 11"
Atenţie: Nod "date [4] ~ 12"
Atenţie: Nod "date [5] ~ 13"
Atenţie: Nod "date [6] ~ 14"
Atenţie: Nod "date [7] ~ 15"
Atenţie: pini de ieşire sunt blocate la VCC sau GND
Atenţie: Pin "Nack" stuck la GND
Atenţie: Design conţine 1 pini de intrare (e) care nu conduce logica
Atenţie: Nu ieşire dependente de aportul de pini "nReset"
Atenţie: următoarele 8 pini de ieşire nu au nici o permite sau o GND sau de ieşire VCC permite - modificări ulterioare la prezenta conectivitate pot modifica rezultatele de amenajare
Info: Pin de date [0] are un permis de ieşire permanent permite
Info: Pin de date [1] are un permis de ieşire permanent permite
Info: Pin de date [2] are un permis de ieşire permanent permite
Info: Pin de date [3] are un permis de ieşire permanent permite
Info: Pin de date [4] are un permis de ieşire permanent permite
Info: Pin de date [5] are un permis de ieşire permanent permite
Info: Pin de date [6] are un permis de ieşire permanent permite
Info: Pin de date [7] are un permis de ieşire permanent permite
Atenţie: după 1 ace nu au nimic, GND, VCC sau de conducere datain port - modificări la prezenta conectivitate pot modifica rezultatele de amenajare
Info: Nack PIN a GND de conducere datain portul
Atenţie: Analiza Calendarul găsit unul sau mai multe oarba puse în aplicare de bucle combinaţionale
Atenţie: Nod "RegDataTemp [0]" este o broască
Atenţie: Nod "RegAddrTemp [0]" este o broască
Atenţie: Nod "Datele [0] $ declicul" este o broască
Atenţie: Nod "RegDataTemp [1]" este o broască
Atenţie: Nod "RegAddrTemp [1]" este o broască
Atenţie: Nod "date [1] $ declicul" este o broască
Atenţie: Nod "RegDataTemp [2]" este o broască
Atenţie: Nod "RegAddrTemp [2]" este o broască
Atenţie: Nod "date [2] $ declicul" este o broască
Atenţie: Nod "RegDataTemp [3]" este o broască
Atenţie: Nod "RegAddrTemp [3]" este o broască
Atenţie: Nod "date [3] $ declicul" este o broască
Atenţie: Nod "RegAddrTemp [4]" este o broască
Atenţie: Nod "RegDataTemp [4]" este o broască
Atenţie: Nod "date [4] $ declicul" este o broască cu declic
Atenţie: Nod "RegAddrTemp [5]" este o broască
Atenţie: Nod "RegDataTemp [5]" este o broască
Atenţie: Nod "date [5] $ declicul" este o broască
Atenţie: Nod "RegDataTemp [6]" este o broască
Atenţie: Nod "RegAddrTemp [6]" este o broască

Atenţie: Nod "date [6] $ declicul" este o broască
Atenţie: Nod "RegAddrTemp [7]" este o broască
Atenţie: Nod "RegDataTemp [7]" este o broască
Atenţie: Nod "date [7] $ declicul" este o broască
Atenţie: ace Găsit funcţionează ca ceasuri nedefinit şi / sau de memorie permite
Info: nod Presupunând că "SysClk" este un ceas nedefinitCod:

 
Bună, te codul este dificil de citit.Vă rugăm să editaţi mesajul, selectaţi secţiunea de cod, apăsaţi "Cod" buton, apoi butonul "Trimite".Că etichetele insertii care păstrează formatarea dumneavoastră.

 
Se pare ca esti încercarea de a actualiza un registru într-un, proces asincron unclocked.Care duce la un design actionate.

 
Doar introduceţi cele trei linii de cod scrise la începutul procesului de prima dumneavoastră dacă u dont doriţi să aveţi oarba in proiectare ur:

RegDataTemp <= (altele => '0 ');
RegAddrTemp <= (altele => '0 ');
Date <= (altele => '0 ');

Ceea ce priveşte,
dcreddy1980

 
dcreddy1980 a scris:

Doar introduceţi cele trei linii de cod scrisă, la începutul procesului de prima dvs. dacă u dont doriţi să aveţi oarba in proiectare ur:RegDataTemp <= (altele => '0 ');

RegAddrTemp <= (altele => '0 ');

Date <= (altele => '0 ');

 
Ce vrei sa corect?
Vrei pentru a elimina oarba, precum şi a face munca de proiectare?
Sau tu nu vrei doar să funcţioneze?

 
Aş sugera eliminarea acestor actualizări registru de la FSM şi punerea lor într-un proces diferit.

RegDataTemp <= date;
RegAddrTemp <= date;

Puteţi apoi să le condiţie cu un eveniment ceas, astfel încât acestea nu sunt actionate, dar rapid.Creaţi un ceas permite semnal pentru fiecare dintre acestea, precum şi controlul permit semnalul de la FSM.

Am pus în mod normal, fiecare înregistreze într-un proces separat, dar ele pot fi combinate într-o singură.Şablon Eu folosesc pentru un registru cronometrat cu o permite semnalul este ...

Cod:

U_REGISTER_NAME: proces (clock_name)

începe

în cazul în care rising_edge (clock_name), apoi

în cazul în care register_clock_enable_signal_name = '1 ', apoi

<= Register_output_signal_name signal_name_or_expression;

final, dacă;

final, dacă;

sfârşitul procesului;

 

Welcome to EDABoard.com

Sponsor

Back
Top