qüestió codi VHDL

J

jshroff

Guest
Hi All,

Estic intentant aprendre VHDL utilitzant un digilent bord i l'exemple i tenir una qüestió molt bàsica.

El codi és ...Codi:-------------------------------------------------- --------------------------------

- Empresa: Digilent Inc

- Enginyer: Claudia Goga

--

- Crear Data: 22:33:35 11/25/06

- Mòdul Nom: PS2_Reader - Comportament

- Els dispositius de destinació: CoolRunner2 CPLD

- Eina de versions: Xilinx ISE v7.1i

- Descripció:

- Aquest mòdul llegeix els codis d'exploració des del port PS2.
Cada vegada que un

- Nou codi d'exploració és completament rebut permet la FRD senyal per a un

- Període de rellotge principal.

--

- Revisió 0,01 - Arxiu Creat

- Comentaris addicionals:

--

-------------------------------------------------- --------------------------------IEEE biblioteca;

IEEE.STD_LOGIC_1164.ALL ús;

IEEE.STD_LOGIC_ARITH.ALL ús;

IEEE.STD_LOGIC_UNSIGNED.ALL ús;entitat és PS2_Reader

Port (mclk: a std_logic; - Rellotge del sistema

PS2C: a std_logic; - PS2 Rellotge

PS2D: a std_logic; - PS2 dades

primer: en std_logic; - Restablir BTN0

Ps2Dout: a std_logic_vector (7 downto 0); - les dades

FRD: a std_logic); - dades vàlides bandera

PS2_Reader final;Comportament de l'arquitectura és PS2_Reader-------------------------------------------------- ----------------------

- SIGNAL i CONSTANTS DECLARACIONS

-------------------------------------------------- ----------------------

- Les constants per sota dels codis per definir l'estat de teclat PS2

- Lector utilitzant una codificació CALENT.constant inactivitat: std_logic_vector (5 downto 0): = "000000";

constant shift_data: std_logic_vector (5 downto 0): = "000001";

constant check_parity: std_logic_vector (5 downto 0): = "000010";

constant check_stopbit: std_logic_vector (5 downto 0): = "000100";

constant frame_error: std_logic_vector (5 downto 0): = "001000";

constant parity_error: std_logic_vector (5 downto 0): = "010000";

constant end_char: std_logic_vector (5 downto 0): = "100000";- Registre d'estat i el proper registre d'estat per als Estats Federats de Micronèsia

senyal d'estat, next_state: std_logic_vector (5 downto 0): = inactiu;senyal D_PS2C: std_logic: ='0 '; - debounced PS2C

senyal de Q1, Q2: std_logic: ='0 ';- Canvi de registre; emmagatzema els bits rebuts

REG senyal: std_logic_vector (7 downto 0): = X "00";senyal ptysum: std_logic: ='0 '; - suma paritat

senyal ptycheck: std_logic: ='0 '; - comprovar la paritat de bitssenyal cnt: integer rang de 0 a 7: = 0; - comptador- Els atributs impedir la continuació de compilador ISE

- Optimització de la maquinària estatal.
Els estats es durà a terme com

- Descrits en les constants declaracions anteriorment.atribut fsm_extract: string;

fsm_extract atribut d'Estat: el senyal és "no";

fsm_extract atribut de next_state: el senyal és "no";atribut fsm_encoding: string;

fsm_encoding atribut d'Estat: el senyal és "usuari";

fsm_encoding atribut de next_state: el senyal és "usuari";atribut signal_encoding: string;

signal_encoding atribut d'Estat: el senyal és "usuari";

signal_encoding atribut de next_state: el senyal és "usuari";començar-------------------------------------------------- --------------------

- MÒDUL D'APLICACIÓ

-------------------------------------------------- --------------------Mostra les entrades de teclat ----------------- -----------------------------el rebot: procés (mclk, PS2C, Q1, Q2)

començar

si mclk'event i mclk ='1 'i després

P1 <= PS2C;

Q2 <= Q1;

END IF;

procés de cap de rebot;D_PS2C <= (NO Q1) i Q2;Sincronització de processos ----------------- ----------------------------regstate: procés (mclk, next_state, RST)

començar

si primer ='1 'i després

estat <= inactiu; - Resetear la màquina d'estats

elsif mclk'EVENT i mclk ='1 'i després

estat <= next_state;

END IF;

procés de cap de regstate;-------------------- Estat Transicions ---------------------------- ---transició: procés (estat, D_PS2C, PS2D, cnt, ptycheck)

començar

cas d'estat és

quan estigui inactiu => - ociós

si D_PS2C ='1 'i PS2D = "0" llavors - comprovar bit d'arrencada

next_state <= shift_data;

una mica més

next_state <= inactiu;

END IF;quan shift_data => - canvi en les dades

si D_PS2C ='1 'i després cnt = 7

next_state <= check_parity; - anar i comprovar la paritat

una mica més

next_state <= shift_data;

END IF;quan check_parity => - comprovar la paritat

si D_PS2C ='1 'i després PS2D = ptycheck

next_state <= check_stopbit; - bit de paritat vàlid

- Anar i comprovar stopbit

elsif D_PS2C ='1 'i després

next_state <= parity_error; - error de paritat

una mica més

next_state <= check_parity;

END IF;quan check_stopbit => - comprovar stopbit;

si D_PS2C ='1 'i PS2D ='1' i després

next_state <= end_char; - stopbit vàlid, final Caràcter

elsif D_PS2C ='1 'i després

next_state <= frame_error; - Carcassa d'error

una mica més

next_state <= check_stopbit;

END IF;quan frame_error => - Carcassa d'error

next_state <= inactiu;quan parity_error => - Error de paritat

next_state <= inactiu;quan end_char => - Caràcter final

next_state <= inactiu;quan els altres => next_state <= inactiu;

cas extrem;

procés de cap de transició;------ Comptar bits i el registre d'estat quan shift_data = ---------------Regina: procés (mclk, D_PS2C, PS2D, cnt, ptysum, estat)

començar

si estat / = shift_data llavors

cnt <= 0;

ptysum <='0 ';

elsif mclk'EVENT i mclk ='1 'i després

si D_PS2C ='1 'i després

ptysum <= ptysum XOR PS2D, - el càlcul de la suma de paritat

REG (7 downto 0) <= PS2D i REG (7 downto 1); - canvi de dades en el registresi cnt = 7 aleshores

cnt <= 0;

una mica més

cnt <= cnt 1;

END IF;

END IF;

END IF;

procés de cap de Regina;------------------------------ ------------------ PARITIY SUMA -------------parity_sum: procés (mclk, D_PS2C, PS2D, cnt, estatals ptysum)

començar

si mclk'EVENT i mclk ='1 'i després

si estat = shift_data i D_PS2C ='1 'i després cnt = 7

ptycheck <= (NO ptysum) XOR PS2D; - comprovar la paritat de bits

END IF;

END IF;

procés de cap de parity_sum;---------------- SORTIDA assignació -------------------------------- ------Ps2Dout <= REG;

FRD <='1 '= end_char quan altre estado'0';final del comportament;

 
Prawie 2000 zgłoszeń dotyczących zamieszczania i rozpowszechniania nielegalnych treści w Internecie trafiło w I kwartale 2014 r. do zespołu Dyżurnet.pl, który jest jedynym w Polsce punktem kontaktowym przyjmującym zgłoszenia o nadużyciach w sieci.

Read more...
 
Hola,

es tracta d'una detecció síncrona (falling_edge en aquest cas).Vostè ha de considerar les cessions en un senyal de rellotge sincrònica procés seqüencial com instanciación d'flipflops, el resultat té efecte en el proper cicle de rellotge.Per tant Q1 representa el valor actual PS2C, Q2 el valor anterior.

L'expressió (NO Q1) i Q2 és el cas d'un cicle de rellotge a la vora de la caiguda PS2C, quan Q1 está'0 'i Q2 todavía'1'.D'aquesta manera es crea un esdeveniment de PS2C falling_edge, però a mclk sincronitzat, el que és útil per processar dades de PS2 a mclk domini.

Records,
Frank

 
Per a algú que acaba d'entrar en VHDL no creu vostè que això és una mica per sobre del seu cap?Im no dient no pot fer-ho, però el seu nivell de frustració serà molt menys si
s'intenta codi / funcions que són poc més en línia amb l'aprenentatge dels pro i els contra de VHDL.

Si està buscant un gran tutorial de provar el mètode de Cypress Ordit kit.Ve amb un llibre VHDL i el programari.

E

 
sincronitzadors teoria es refereix a si vostè està realment interessat ..
es dóna en la bona
disseny digital d'john Wakerly.
google o simplement la forma de gestionar la senyal ASYNC a síncron de domini
següents es refereixen a ppt
Ho sentim, però necessita accés per veure aquest arxiu adjunt

 

Welcome to EDABoard.com

Sponsor

Back
Top