V
vaibhav_sinha
Guest
Здрасти.
Аз писах този код за RS232 приемник с 8-N-1 протокол.Но код не е поведение, както се очаква.Може ли някой, моля, преминете през код и трасирате него?
Библиотеката IEEE;
използване ieee.std_logic_1164.all;
лице получава се
порт (нулиране: по-малко;
RX: по-малко;
outp: изложени bit_vector (7 downto 0);
clk: по-малко);
края получават;
архитектура арх получите на е
сигнал брои: цялото диапазона от 0 до 8000;
Тип състояние е (бездейства, започнете, спри, едно, две, три, четири, пет, шест, седем, осем);
сигнал pr_state: състояние;
сигнал nx_state: състояние;
сигнал флаг: битова;
започвам
процес (clk, RX)
започвам
ако нулиране = "1"
и след това
флаг <= "0";
край, ако;
ако pr_state = бездейства и RX ='0 'после
флаг <='1 ';
край, ако;
края процес;
процес (флаг, pr_state, нулиране)
започвам
ако нулиране = "1"
и след това
nx_state <= изчезнал;
край, ако;
случай pr_state е
когато бездейства =>, ако знамето ='0 'после
nx_state <= изчезнал;
в противен случай
nx_state <= проекта;
край, ако;
когато започнете => nx_state <= един;
когато една => nx_state <= два часа;
outp (7) <= RX;
Когато две => nx_state <= три часа;
outp (6) <= RX;
когато три часа => nx_state <= четири часа;
outp (5) <= RX;
при четири часа =>
nx_state <= пет;
outp (4) <= RX;
когато пет часа =>
nx_state <= шест;
outp (3) <= RX;
когато шест часа =>
nx_state <= седем часа;
outp (2) <= RX;
когато седем часа =>
nx_state <= осем души;
outp (1) <= RX;
когато осем часа =>
nx_state <= спре;
outp (0) <= RX;
когато спрат =>
nx_state <= изчезнал;
края случай;
края процес;процес (нулиране, clk)
започвам
ако (нулиране = "1"), тогава
броене <= 0;
pr_state <= изчезнал;
в противен случай
ако (clk'EVENT и clk = "1"), тогава
ако разчита = 0 тогава
pr_state <= nx_state;
ако pr_state = проекта тогава
броене <= 7812;
elsif pr_state = спре след това
броене <= 0;
elsif pr_state / = бездейства тогава
броене <= 5208;
край, ако;
в противен случай
броене <= брои-1;
край, ако;
край, ако;
край, ако;
края процес;
края арка;В този кодекс, когато нова байт е да се получи, трябва да нулирате първи.И на флага, когато се твърди битови проекта е открит.
Часовникът е използван 50MHz и baud процент е 9600.
Затова аз имам използван закъснение 50000000/9600 = 5208 часовник цикли.
За проекта битов, забавянето е 7812, така че да се достигне до центъра на малко.
Аз писах този код за RS232 приемник с 8-N-1 протокол.Но код не е поведение, както се очаква.Може ли някой, моля, преминете през код и трасирате него?
Библиотеката IEEE;
използване ieee.std_logic_1164.all;
лице получава се
порт (нулиране: по-малко;
RX: по-малко;
outp: изложени bit_vector (7 downto 0);
clk: по-малко);
края получават;
архитектура арх получите на е
сигнал брои: цялото диапазона от 0 до 8000;
Тип състояние е (бездейства, започнете, спри, едно, две, три, четири, пет, шест, седем, осем);
сигнал pr_state: състояние;
сигнал nx_state: състояние;
сигнал флаг: битова;
започвам
процес (clk, RX)
започвам
ако нулиране = "1"
и след това
флаг <= "0";
край, ако;
ако pr_state = бездейства и RX ='0 'после
флаг <='1 ';
край, ако;
края процес;
процес (флаг, pr_state, нулиране)
започвам
ако нулиране = "1"
и след това
nx_state <= изчезнал;
край, ако;
случай pr_state е
когато бездейства =>, ако знамето ='0 'после
nx_state <= изчезнал;
в противен случай
nx_state <= проекта;
край, ако;
когато започнете => nx_state <= един;
когато една => nx_state <= два часа;
outp (7) <= RX;
Когато две => nx_state <= три часа;
outp (6) <= RX;
когато три часа => nx_state <= четири часа;
outp (5) <= RX;
при четири часа =>
nx_state <= пет;
outp (4) <= RX;
когато пет часа =>
nx_state <= шест;
outp (3) <= RX;
когато шест часа =>
nx_state <= седем часа;
outp (2) <= RX;
когато седем часа =>
nx_state <= осем души;
outp (1) <= RX;
когато осем часа =>
nx_state <= спре;
outp (0) <= RX;
когато спрат =>
nx_state <= изчезнал;
края случай;
края процес;процес (нулиране, clk)
започвам
ако (нулиране = "1"), тогава
броене <= 0;
pr_state <= изчезнал;
в противен случай
ако (clk'EVENT и clk = "1"), тогава
ако разчита = 0 тогава
pr_state <= nx_state;
ако pr_state = проекта тогава
броене <= 7812;
elsif pr_state = спре след това
броене <= 0;
elsif pr_state / = бездейства тогава
броене <= 5208;
край, ако;
в противен случай
броене <= брои-1;
край, ако;
край, ако;
край, ако;
края процес;
края арка;В този кодекс, когато нова байт е да се получи, трябва да нулирате първи.И на флага, когато се твърди битови проекта е открит.
Часовникът е използван 50MHz и baud процент е 9600.
Затова аз имам използван закъснение 50000000/9600 = 5208 часовник цикли.
За проекта битов, забавянето е 7812, така че да се достигне до центъра на малко.