Перейти к содержанию
    

Всем доброго времени суток!

Прошу у гуру верилога помощи по прилагаемому файлу async_transmitter.v (прилигается)

 

Всё нормально работает, но судя по этому (написанному не мною) исходнику, автомат формирует два стоповых бита.

Что и где можно подправить для того, чтобы перейти к одному стоп-биту?

 

Всем спасибо!

async_transmitter.v

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 eugen_pcad_ru

А зачем вам править - на сколько я понял, это просто дополнительная задержка на отработку.

Поставите 1 стоповый бит - будет шустрее конечно пулять, но т.к вы используете родные частоты то думаю вам особо выигрыша то и не получить (да и зачем гнаться за ним на UART-е?)..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем вам править - на сколько я понял, это просто дополнительная задержка на отработку.

 

Должно соблюдаться условие TxD_ready & TxD_start

Реализация конечно умиляет своей крутизной.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что и где можно подправить для того, чтобы перейти к одному стоп-биту?

Перескочить через состояние конечного автомата, задающее первый стоп

  // 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2ViKo:

Спасибо!

2Kuzmi4:

Да, действительно, это просто дополнительная задержка и ИМХО устранять ее, по большому счету, нет смысла.

Проблема в том, что на другой стороне стоит микроконтроллер, разработчик котрого слёзно просит режим именно с одним стоп-битом. Так как разбираться еще и с программой микроконтроллера у меня нет ни малейшего желания, а по уверениям разработчика режим работы уарт порта микроконтроллера должен быть именно таким, то проще "подсунуть" ему именно такой режим. В общем больше по политическим соображениям:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в том, что на другой стороне стоит микроконтроллер, разработчик котрого слёзно просит режим именно с одним стоп-битом.

 

Нормальному передатчику должно быть безразлично, сколько стоповых он должен выдавать.

Потому как, что стоповый, что пауза в линии - это одно и тоже по уровню. Поэтому актуальным может быть только стартовый бит и данные ( с битом или без бита паритета). Более того, передатчик не нуждается в контроле конца посылки, ибо сам знает когда загружать следующий байт. Проще надо быть. Чтоб сходу читалось.

`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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нормальному передатчику должно быть безразлично, сколько стоповых он должен выдавать.

Считаю, два стоповых бита дают большую помехозащищенность. Потому что состояния stop-stop-start случайно в коде будут встречаться реже, чем stop-start. И все эти состояния можно отслеживать. Конечно, паритет вместо первого стопа даст еще большую помехозащищенность. Но его нужно вычислять. В PIC16, к примеру, это займет несколько команд. Поэтому там я делал именно два стопа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считаю, два стоповых бита дают большую помехозащищенность.

я имел ввиду, что количество стоповых битов (хоть 1.5) реализуется на более высоком уровне периодом tx_load

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как показывает практика, лучше всего - когда между каждыми двумя байтами очень неплохо делать паузу в 1 байт (10-11 бит) :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как показывает практика, лучше всего - когда между каждыми двумя байтами очень неплохо делать паузу в 1 байт (10-11 бит) :).

 

Ошибка кадрирования? Так это у Вас "костыли".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считаю, два стоповых бита дают большую помехозащищенность.

 

А вот моя практика показывает, что большую помехозащищенность дает режим работы на 16-ти кратной частоте и при этом надо брать по 3 отсчета за битовый интервал и их мажоритировать. Дело нехитрое, но при этом обмен идет значителдьно лучше... Ну и конечно, не надо забывать о CDC на входных битах. Иначе автомат приемника будет клинить...

Удачи!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот моя практика показывает

 

Это раздел программированной логики, а не микроконтроллеров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот моя практика показывает, что большую помехозащищенность дает режим работы на 16-ти кратной частоте и при этом надо брать по 3 отсчета за битовый интервал и их мажоритировать. Дело нехитрое, но при этом обмен идет значителдьно лучше... Ну и конечно, не надо забывать о CDC на входных битах. Иначе автомат приемника будет клинить...

Удачи!

Все верно. Так это - на приемной стороне. Оно так в микроконтроллерах и делается (в 8051-й, например). И в ПЛИСах можно (нужно).

Одно другому не помеха.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибка кадрирования? Так это у Вас "костыли".

В случае сбоев синхронизации или, например, включения приемопередатчика посередине принимаемого байта гарантировано быстрое восстановление синхронизации.

Да, этого можно добиваться по-другому. Но можно и так, особенно если быстродействие не слишком парит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И в ПЛИСах можно (нужно).

 

И где Вы эту кратность имеете?

Кварцевые генераторы от 20 до 100 мГц например. Или pci шина.

Никому эта кратность не нужна для уверенного приема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...