eugen_pcad_ru 0 25 ноября, 2011 Опубликовано 25 ноября, 2011 · Жалоба Всем доброго времени суток! Прошу у гуру верилога помощи по прилагаемому файлу async_transmitter.v (прилигается) Всё нормально работает, но судя по этому (написанному не мною) исходнику, автомат формирует два стоповых бита. Что и где можно подправить для того, чтобы перейти к одному стоп-биту? Всем спасибо! async_transmitter.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 25 ноября, 2011 Опубликовано 25 ноября, 2011 · Жалоба 2 eugen_pcad_ru А зачем вам править - на сколько я понял, это просто дополнительная задержка на отработку. Поставите 1 стоповый бит - будет шустрее конечно пулять, но т.к вы используете родные частоты то думаю вам особо выигрыша то и не получить (да и зачем гнаться за ним на UART-е?).. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 25 ноября, 2011 Опубликовано 25 ноября, 2011 · Жалоба А зачем вам править - на сколько я понял, это просто дополнительная задержка на отработку. Должно соблюдаться условие TxD_ready & TxD_start Реализация конечно умиляет своей крутизной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 ноября, 2011 Опубликовано 25 ноября, 2011 · Жалоба Что и где можно подправить для того, чтобы перейти к одному стоп-биту? Перескочить через состояние конечного автомата, задающее первый стоп // 4'b1111: if(BaudTick) state <= 4'b0010; // bit 7 4'b1111: if(BaudTick) state <= 4'b0011; // bit 7 4'b0010: if(BaudTick) state <= 4'b0011; // stop1 4'b0011: if(BaudTick) state <= 4'b0000; // stop2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба 2ViKo: Спасибо! 2Kuzmi4: Да, действительно, это просто дополнительная задержка и ИМХО устранять ее, по большому счету, нет смысла. Проблема в том, что на другой стороне стоит микроконтроллер, разработчик котрого слёзно просит режим именно с одним стоп-битом. Так как разбираться еще и с программой микроконтроллера у меня нет ни малейшего желания, а по уверениям разработчика режим работы уарт порта микроконтроллера должен быть именно таким, то проще "подсунуть" ему именно такой режим. В общем больше по политическим соображениям:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Проблема в том, что на другой стороне стоит микроконтроллер, разработчик котрого слёзно просит режим именно с одним стоп-битом. Нормальному передатчику должно быть безразлично, сколько стоповых он должен выдавать. Потому как, что стоповый, что пауза в линии - это одно и тоже по уровню. Поэтому актуальным может быть только стартовый бит и данные ( с битом или без бита паритета). Более того, передатчик не нуждается в контроле конца посылки, ибо сам знает когда загружать следующий байт. Проще надо быть. Чтоб сходу читалось. `timescale 1 ns / 1 ps module txd_232 #( parameter xtal_clk = 20_000_000, baud = 115_200 ) ( input clk, input load_tx, // период clk input [7:0] tx_data, // без бита паритета output tx_out ); localparam clk_div = xtal_clk / baud, ct_width = $clog2(clk_div); reg [ct_width-1:0] ct = {ct_width{1'b0}}; reg [8:0] tx_right = 9'h1ff; always @(posedge clk) begin if (load_tx) ct <= {ct_width{1'b0}}; else if (ct == clk_div-1) ct <= {ct_width{1'b0}}; else ct <= ct + 1'b1; if (load_tx) tx_right <= {tx_data, 1'b0}; else if (ct == clk_div-1) tx_right <= {1'b1, tx_right[8:1]}; end assign tx_out = tx_right[0]; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Нормальному передатчику должно быть безразлично, сколько стоповых он должен выдавать. Считаю, два стоповых бита дают большую помехозащищенность. Потому что состояния stop-stop-start случайно в коде будут встречаться реже, чем stop-start. И все эти состояния можно отслеживать. Конечно, паритет вместо первого стопа даст еще большую помехозащищенность. Но его нужно вычислять. В PIC16, к примеру, это займет несколько команд. Поэтому там я делал именно два стопа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Считаю, два стоповых бита дают большую помехозащищенность. я имел ввиду, что количество стоповых битов (хоть 1.5) реализуется на более высоком уровне периодом tx_load Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Как показывает практика, лучше всего - когда между каждыми двумя байтами очень неплохо делать паузу в 1 байт (10-11 бит) :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Как показывает практика, лучше всего - когда между каждыми двумя байтами очень неплохо делать паузу в 1 байт (10-11 бит) :). Ошибка кадрирования? Так это у Вас "костыли". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Считаю, два стоповых бита дают большую помехозащищенность. А вот моя практика показывает, что большую помехозащищенность дает режим работы на 16-ти кратной частоте и при этом надо брать по 3 отсчета за битовый интервал и их мажоритировать. Дело нехитрое, но при этом обмен идет значителдьно лучше... Ну и конечно, не надо забывать о CDC на входных битах. Иначе автомат приемника будет клинить... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба А вот моя практика показывает Это раздел программированной логики, а не микроконтроллеров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба А вот моя практика показывает, что большую помехозащищенность дает режим работы на 16-ти кратной частоте и при этом надо брать по 3 отсчета за битовый интервал и их мажоритировать. Дело нехитрое, но при этом обмен идет значителдьно лучше... Ну и конечно, не надо забывать о CDC на входных битах. Иначе автомат приемника будет клинить... Удачи! Все верно. Так это - на приемной стороне. Оно так в микроконтроллерах и делается (в 8051-й, например). И в ПЛИСах можно (нужно). Одно другому не помеха. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба Ошибка кадрирования? Так это у Вас "костыли". В случае сбоев синхронизации или, например, включения приемопередатчика посередине принимаемого байта гарантировано быстрое восстановление синхронизации. Да, этого можно добиваться по-другому. Но можно и так, особенно если быстродействие не слишком парит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 ноября, 2011 Опубликовано 28 ноября, 2011 · Жалоба И в ПЛИСах можно (нужно). И где Вы эту кратность имеете? Кварцевые генераторы от 20 до 100 мГц например. Или pci шина. Никому эта кратность не нужна для уверенного приема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться