Ich habe Probleme herauszufinden, warum ich Probleme mit meiner Uhr enable Timer in einem UART-Controller bekomme. Der Zähler ist cntR. Es sollte das Zählen von Null zu starten, nachdem eine Bedingung erfüllt ist, aber es beginnt bei Null und schaltet dann auf eine Zufallszahl anstelle von 0 auf 1 erhöht wird hier der Prozess Code, wo etwas Schlimmes passiert:VHDL Altera Qartus Zufallsdaten im vorzeichenlosen Register nach (andere => 0) + 1
process(reset, clock)
begin
if reset = '1' then
cntR <= (others => '0');
elsif rising_edge(clock) then
if rcv_reg = r_idle and rxd = '1' then
cntR <= (others => '0');
else
if cntR = DIVVALUE then
cntR <= (others => '0');
else
cntR <= cntR + 1;
end if;
end if;
end if;
end process;
hier sind Erklärungen (wahrscheinlich nicht so wichtig):
entity SART is
generic(
INCLK : natural := 50000000;
BAUDRATE : natural := 9600;
CNT_WIDTH : natural := 14
);
port(
clock : in std_logic;
reset : in std_logic;
send : in std_logic;
rxd : in std_logic;
data_in : in std_logic_vector(7 downto 0);
data_ready : out std_logic;
clear_to_send : out std_logic;
txd : out std_logic;
data_out : out std_logic_vector(7 downto 0)
);
end SART;
-- Receiver FSM states
type RCV_STATE_TYPE is (
r_idle,
r_start,
r_data1,r_data2,r_data3,r_data4,r_data5,r_data6,r_data7,r_data8,
r_stop1
);
signal rcv_reg, rcv_next : RCV_STATE_TYPE;
signal cntR : unsigned(CNT_WIDTH-1 downto 0);
das ist, was ich von Signal Tap erhalten:
Für die aufnehmen, verwende ich Altera Quartus 13.0.0 und einen DE0-Nano mit einem Cyclone IV FPGA.
Vielen Dank im Voraus für Ihre Eingabe.
Ihr Signal Tap Wellenform zeigt weder die Signale, die ein Reset verursachen, noch die Uhr. Ich war neugierig auf den Reset. Siehe [SART - transmisja szeregowa z wykorzystaniem RS ...] (http://rawski.zpt.tele.pw.edu.pl/pl/system/files/Projekt_simpleUART (kolor) .pdf) und [kod vhdl] (http : //burza.hapay.pl/code/uart.vhd) haben so aufwändige Reset-Bedingungen. Ich nehme es cntR wird verwendet, um Baud Sample RXD zu zentrieren. Sie scheinen ein Problem mit der Taktrate und der Setup- oder Haltezeit zu haben. Die DIVVALUE-Deklaration ist nicht sichtbar, kann die cntR-Breite reduziert werden? Ihre Uhr ist 50 Mhz im Gegensatz zu 25. – user1155120
Dies ist ein Hardware-Debugging und keine spezielle Software-Frage. Erwägen Sie es in [Elektrotechnik Stack Exchange] (https://electronics.stackexchange.com/questions/tagged/vhdl). – user1155120
Vielen Dank für Ihren Kommentar. Wie Sie wahrscheinlich herausgefunden haben, benutzte ich die Präsentation in Ihrem ersten Link, um einen UART-Controller zu schreiben. Ich bekomme nach einem Reset einen Ruhezustand und einen Nullzähler. –