D
dadda007
Guest
Am scris un cod de a lua în datele de la un serial RS-232 link-ul şi îl poate păstra într-un registru.Intenţionez să genera 2 semnale, un semnal ack1 care merge de mare, după un pic valabil început a fost obţinut şi un alt semnal de ack2 după ce toate cele 8 biti de date au fost primite in mod corect.Pentru a verifica validitatea i s-au folosit un ceas cu supraeşantionare care probelor Fiecare durata de biţi la 16 ori mai mare decât ceasul Baud Rate si foloseste logica maxime pentru evaluarea la fel.Cu toate acestea, după ce am de simulare a fost obtinerea nici o valoare în registru şi valoarea, de asemenea, deteriorat pentru ack1 şi ack2 .... te rog ajuta !!!!!
Cod:IEEE biblioteca;
utilizarea IEEE.STD_LOGIC_1164.all;rs232_lport entitate esteport (de date: in BIT;
clk_rs232: inout std_logic;
baudrate: in std_logic;
- Lport_clk: out BIT: = '0 ';
ack1: out BIT;
ack2: out BIT;
- Verifica: out BIT;
- Lport_data: out BIT_VECTOR (3 downto 0);
input_reg: BIT_VECTOR tampon (7 downto 0): = "00000000");entitate scop;rs232_lport_behav arhitectura rs232_lport este deShared variabilă Med, med1: BIT_VECTOR (4 downto 0);
Shared I variabilă, lcount_16, dcount, nos_0, nos_1: integer;
Shared variabilă mari, big1, dbit: bit;
Shared first_4 variabil, last_4: BIT_VECTOR (3 downto 0);Tipul de state_rs232 este (S0, S1, S2);
state_lport tip este (inactiv, F4, L4);
l_state semnalului: state_lport;
rs_state semnal: state_rs232; - starea iniţială este S0.începeproces (date)începers_state caz esteatunci când s0 => - starea Idle de maşini de statîn cazul în care (date = '1 '), apoi - În cazul în care datele sunt o apoi setaţi tuturor parametrilor de la zero.ack1 <= '0 ';
rs_state <= S0; - Înapoi la mers în gol de stat .....altrs_state <= S1; - Dacă linia de date este zero, atunci du-te la starea S1.sfârşitul anului în cazul în care;atunci când S1 => - verifică validitatea biţi de start.- Să verifice <= '1 ';pentru lcount_16 la 1 la 16 bucla - controale valoarea biţi începe primul.ack2 <= '0 ';
ack1 <= '0 ';în cazul în care (clk_rs232'event) şi (clk_rs232 = '1 ') şi (clk_rs232'last_value = '0'), apoiîn cazul în care (lcount_16 = 7), atunci
med (0): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 8), atunci
med (1): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 9), apoi
med (2): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 10), apoi
med (3): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 11), apoi
med (4): = de date;
sfârşitul anului în cazul în care;sfârşitul anului în cazul în care;bucla scop;for i in 0 la 4 bucla - controale valoarea de biţi a începe să utilizaţi logica maxima.în cazul în care (med (i) = '0 '), apoi
nos_0: nos_0 = 1;
sfârşitul anului în cazul în care;bucla scop;for i in 0 la 4 buclaîn cazul în care (med (i) = '1 '), apoi
nos_1: nos_1 = 1;
sfârşitul anului în cazul în care;bucla scop;în cazul în care (nos_1> nos_0), apoi
mare: = '1 ';
alt
mare: = '0 ';
sfârşitul anului în cazul în care;în cazul în care (Big = '0 '), apoi - În cazul în care valoarea de biţi de start este zero, apoi setaţi valoarea de biţi ack1 la una .....
ack1 <= '1 ';
rs_state <= S2; - Du-te la starea S2altack1 <= '0 ';
rs_state <= S0; - În cazul în care începe de biţi este de 1 Du-te la starea inactiv.sfârşitul anului în cazul în care;atunci când S2 => - Această stare ia în valoarea în registru şi păstrează deplasarea acesteia.- În cazul în care (ack1 = '1 '), apoipentru dcount la 0 la 7 buclaîn cazul în care (baudrate'event şi baudrate = '1 '), apoidbit: = de date;
input_reg <= '0 '& input_reg (7 downto 1);
input_reg (7) <= dbit;sfârşitul anului în cazul în care;bucla scop;ack2 <= '1 '; - După toate 8 biţi s-au deplasat stabilit valoarea ack2 biţi de mare.rs_state <= S0; - Du-te la starea s0, adică statul inactiv .....cazul scop;Procesul de sfârşitul anului;rs232_lport_behav scop;
Cod:IEEE biblioteca;
utilizarea IEEE.STD_LOGIC_1164.all;rs232_lport entitate esteport (de date: in BIT;
clk_rs232: inout std_logic;
baudrate: in std_logic;
- Lport_clk: out BIT: = '0 ';
ack1: out BIT;
ack2: out BIT;
- Verifica: out BIT;
- Lport_data: out BIT_VECTOR (3 downto 0);
input_reg: BIT_VECTOR tampon (7 downto 0): = "00000000");entitate scop;rs232_lport_behav arhitectura rs232_lport este deShared variabilă Med, med1: BIT_VECTOR (4 downto 0);
Shared I variabilă, lcount_16, dcount, nos_0, nos_1: integer;
Shared variabilă mari, big1, dbit: bit;
Shared first_4 variabil, last_4: BIT_VECTOR (3 downto 0);Tipul de state_rs232 este (S0, S1, S2);
state_lport tip este (inactiv, F4, L4);
l_state semnalului: state_lport;
rs_state semnal: state_rs232; - starea iniţială este S0.începeproces (date)începers_state caz esteatunci când s0 => - starea Idle de maşini de statîn cazul în care (date = '1 '), apoi - În cazul în care datele sunt o apoi setaţi tuturor parametrilor de la zero.ack1 <= '0 ';
rs_state <= S0; - Înapoi la mers în gol de stat .....altrs_state <= S1; - Dacă linia de date este zero, atunci du-te la starea S1.sfârşitul anului în cazul în care;atunci când S1 => - verifică validitatea biţi de start.- Să verifice <= '1 ';pentru lcount_16 la 1 la 16 bucla - controale valoarea biţi începe primul.ack2 <= '0 ';
ack1 <= '0 ';în cazul în care (clk_rs232'event) şi (clk_rs232 = '1 ') şi (clk_rs232'last_value = '0'), apoiîn cazul în care (lcount_16 = 7), atunci
med (0): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 8), atunci
med (1): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 9), apoi
med (2): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 10), apoi
med (3): = de date;
sfârşitul anului în cazul în care;în cazul în care (lcount_16 = 11), apoi
med (4): = de date;
sfârşitul anului în cazul în care;sfârşitul anului în cazul în care;bucla scop;for i in 0 la 4 bucla - controale valoarea de biţi a începe să utilizaţi logica maxima.în cazul în care (med (i) = '0 '), apoi
nos_0: nos_0 = 1;
sfârşitul anului în cazul în care;bucla scop;for i in 0 la 4 buclaîn cazul în care (med (i) = '1 '), apoi
nos_1: nos_1 = 1;
sfârşitul anului în cazul în care;bucla scop;în cazul în care (nos_1> nos_0), apoi
mare: = '1 ';
alt
mare: = '0 ';
sfârşitul anului în cazul în care;în cazul în care (Big = '0 '), apoi - În cazul în care valoarea de biţi de start este zero, apoi setaţi valoarea de biţi ack1 la una .....
ack1 <= '1 ';
rs_state <= S2; - Du-te la starea S2altack1 <= '0 ';
rs_state <= S0; - În cazul în care începe de biţi este de 1 Du-te la starea inactiv.sfârşitul anului în cazul în care;atunci când S2 => - Această stare ia în valoarea în registru şi păstrează deplasarea acesteia.- În cazul în care (ack1 = '1 '), apoipentru dcount la 0 la 7 buclaîn cazul în care (baudrate'event şi baudrate = '1 '), apoidbit: = de date;
input_reg <= '0 '& input_reg (7 downto 1);
input_reg (7) <= dbit;sfârşitul anului în cazul în care;bucla scop;ack2 <= '1 '; - După toate 8 biţi s-au deplasat stabilit valoarea ack2 biţi de mare.rs_state <= S0; - Du-te la starea s0, adică statul inactiv .....cazul scop;Procesul de sfârşitul anului;rs232_lport_behav scop;