trebate pomoć sa djelilo frekvencije

B

barzel

Guest
bok svi

Napisao sam VHDL kod za UART prijemnik, ali ja licemjerje dobiti 9600 bps sa mojim Altera kit.
koristim Altera cycloneII FPGA Development Kit [EP2C20F484C7N].
ima 3 vrste satova 24Mhz, 27MHz i 50MHz.
mog koda koristite UART counter koji broji satove i svakih 16 krpelja jedno malo.
thats znači trebam 16 * 9600 = 153600 [Hz] frekvencija.kako mogu to učiniti?

Sat / X = 153600 => X = 175,78125 [za 27MHz] ja za podjelu 176

Napisao sam jednostavnu kod:

što nije u redu ili kako mogu to učiniti bolje?
Šifra:library IEEE;

uporabu ieee.std_logic_1164.all;

entiteta uart_frq je

općenito (Nadkoljenica integer: = 176);luka (frqin: u std_logic;

frqout: out std_logic;

reset: in std_logic);

end uart_frq;arhitektura ponašaju se od uart_frq

signal HNK: cijeli broj od 0 do Bedra;

početiproces (frqin)

početi

ako reset = '1 'onda HNK <= 0; frqout <= '0';

elsif frqin'event i frqin = '1 'onda

HNK <= HNK 1;

ako je HNK <88 onda

frqout <= '1 ';

elsif HNK> = 88 onda

frqout <= '0 ';

elsif cnt = cnt onda 176 <= 0;

end if;

end if;

kraju procesa;

end ponašaju;
 
the code should work.

Osim za stvarni djelitelj omjer 177
broj bi trebao raditi.Prijedlog je obično koristiti sat omogućuju podijeljene
frekvencije, a ne takozvani "ripple satovi".153kHz sat omogućit će biti postavljen na '1 'samo za jedno razdoblje sysclk i koriste
zajedno s sysclk.

Na jednostavan primjer dizajn, razlika između MTU sat i sinkronog sat omogućiti ne smeta toliko, ali
sinkroni način uvelike olakšava sučelja UART komponenta sa drugim dijelovima dizajna bez stvaranja problema vremena.

Međutim, kao djelitelj u osnovi radi, problem (ako postoji) najvjerojatnije će sa svojim UART dizajna, koji je, naravno,
više izazovan dio.

 
ja iskorišten 2 UART različitih kodova ...

Šifra:-------------------------------------------------- -----------------------------

library IEEE;

uporabu IEEE.std_logic_1164.all;

uporabu IEEE.STD_LOGIC_UNSIGNED.all;

entiteta my_rX je

luka (RST, CLK: u bitni;

data_out: out bit_vector (7 downto 0);

rx_ser_in: u bitni;

rx_ready: out bit);end;

arhitektura ponašaju se od my_rX

signal HNK: cijeli broj od 0 do 160;

signal buf: bit_vector (7 downto 0);

signala starta, CLR, startb, stopb: malo;

početi

proces (rx_ser_in, RST, CLR)

početi

ako rst = '1 'ili CLR = '1 onda' Početak <= '0 ';

elsif rx_ser_in'event i rx_ser_in = '0 'onda

Početak <= '1 ';

end if;

kraju procesa;proces (CLK, CLR, rst)

početi

ako rst = '1 'ili CLR = '1' onda

HNK <= 0;

buf <= "00000000";

rx_ready <= '0 ';

elsif clk'event i CLK = '1 'onda

Ako start = '1 'onda

ako je HNK <160 tada HNK <= HNK 1; else HNK <= 0; kraj ako;

ako HNK = 8 onda startb <= rx_ser_in;

elsif CNT = 24 onda buf (0) <= rx_ser_in;

elsif CNT = 40 onda buf (1) <= rx_ser_in;

elsif CNT = 56 onda buf (2) <= rx_ser_in;

elsif CNT = 72 onda buf (3) <= rx_ser_in;

elsif CNT = 86 onda buf (4) <= rx_ser_in;

elsif cnt = 102 onda buf (5) <= rx_ser_in;

elsif cnt = 118 onda buf (6) <= rx_ser_in;

elsif cnt = 134 onda buf (7) <= rx_ser_in;

elsif cnt = 150 tada stopb <= rx_ser_in;

elsif CNT = 155 i startb = '0 ', a stopb = '1' onda data_out <= buf; rx_ready <= '1 ';

end if;

end if;

end if;

kraju procesa;

CLR <= '1 'ako cnt = 160 drugi '0';

end ponašaju;

 

Welcome to EDABoard.com

Sponsor

Back
Top