Jump to content

    

Дружить с синтезатором стоит ?

Извините меня за нубский вопрос. А что такое мажоритирование?

Если из 3-х выборок бита хотя бы две находятся в состоянии "1", принимается решение, что бит равен "1". На основе "большинства проголосовавших".

Share this post


Link to post
Share on other sites

Если честно, я такое давно использовал на сдвиговых регистрах... но не знал, что у этого процесса есть такое гламурное название :blush:

Share this post


Link to post
Share on other sites

Строка в моём тексте

use IEEE.std_logic_arith.all;

тоже является лишней (рудимент от прежней попытки на счётчиках). И её отсутствие никак не меняет быстродействие.

Если честно, я такое давно использовал на сдвиговых регистрах... но не знал, что у этого процесса есть такое гламурное название :blush:

Тут у меня голосование( в одном бите) 2 из 3-х. Американцы любят 3 из 5-ти. Встречается 4 из 7.

 

PS/Советую обратить внимание на выходной сигнал rxd_data_ready

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

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity syn is
 port(
	 clk : in STD_LOGIC;
	 in_level : in STD_LOGIC;
	 reset : in STD_LOGIC;
	 imp : out STD_LOGIC
	 );
end syn;


architecture syn_body of syn is
signal qqq : STD_LOGIC;
signal ddd : STD_LOGIC;

begin
tg: process (clk)
begin
if clk'event and clk = '1' then
	if  reset='1' then	
	qqq <= '0';
	ddd <= '0';
	else
	qqq <= ddd;
	ddd <= in_level;
end if;
end if;
end process;
imp <= ddd xor qqq;

end syn_body;

Edited by Мур

Share this post


Link to post
Share on other sites
Тут у меня голосование( в одном бите) 2 из 3-х. Американцы любят 3 из 5-ти. Встречается 4 из 7.

 

А зачем в uarte мажоритарность. Это ж не микроконтроллер.

Share this post


Link to post
Share on other sites
PS/Советую обратить внимание на выходной сигнал rxd_data_ready

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

ИМХО зря, я бы так не делал

 

Share this post


Link to post
Share on other sites
А зачем в uarte мажоритарность. Это ж не микроконтроллер.

Странная позиция. Значит внутри микроконтроллера это считается нормальным, а методы повышения достоверности в ПЛИС неуместны? Борьба с помехами, несоответствие скоростей передачи-приёма всегда будут актуальны!

 

ИМХО зря, я бы так не делал

"Ну не томи!".. Народ ждёт выхода мастера с сольным номером!

 

Трюк взят из статьи Иосифа Каршенбойма в журнале "Компоненты и технологии" №2 2009 стр 102.

Краткий курс HDL.

Часть 11. Асинхронные частоты,

пересечение клоковых доменов

и синхронизация

Там на рис 8 всё можно рассмотреть....

Edited by Мур

Share this post


Link to post
Share on other sites
Странная позиция...

Нет, если у вас передающий блок работает от той же частоты что и ваш уарт. Усложнять легко, а вот упрощать сложно (ЦЕ)

Share this post


Link to post
Share on other sites
Нет, если у вас передающий блок работает от той же частоты что и ваш уарт. Усложнять легко, а вот упрощать сложно (ЦЕ)

Согласен. Только "теория, мой друг сера, но вечно зелено дерево жизни".

... Это я к тому, что эксплуатация в жестских условиях выявляет помехи в линии. (Вот, кстати, почему так тщательно идёт оценка старт-бита!)

Share this post


Link to post
Share on other sites
... Это я к тому, что эксплуатация в жестских условиях выявляет помехи в линии. (Вот, кстати, почему так тщательно идёт оценка старт-бита!)

Верно-верно. Дело не в микроконтроллере или ПЛИС, а в линии передачи. По RS-232 сигналы на сотни метров передаются. Мало ли что по дороге случится. И тактовые генераторы у передатчика и приемника разные.

А если устройства рядом, тогда лучше по SPI послать.

Share this post


Link to post
Share on other sites

я ещё не встречал 25МГц уарт в кабелях.. ;)

Share this post


Link to post
Share on other sites
я ещё не встречал 25МГц уарт в кабелях.. ;)

Когда есть гальваническая развязка между системами, работающими с разными источниками и мощностями, то даже 1 метр удаления стрёмен!

 

Верно-верно. Дело не в микроконтроллере или ПЛИС, а в линии передачи. По RS-232 сигналы на сотни метров передаются. Мало ли что по дороге случится. И тактовые генераторы у передатчика и приемника разные.

А если устройства рядом, тогда лучше по SPI послать.

Добавлю, что ложный или битый старт-бит искажает весь побитный отсчёт.

Edited by Мур

Share this post


Link to post
Share on other sites
"Ну не томи!"..

потому что это не правильно с точки зрения построения системы. Отделяйте мух от котлет. Модуль с положительно активными сигналами отдельно, синхронизатор отдельно. Это более наглядно, понятно, легче констрейнить и повторно использовать. А цена вопроса пара лишних триггеров.

 

Share this post


Link to post
Share on other sites
я ещё не встречал 25МГц уарт в кабелях.. ;)

 

lvds легко.

 

Добавлю, что ложный или битый старт-бит искажает весь побитный отсчёт.

 

А что мешает до uarta почистить. Вы ж за скорость боретесь.

`timescale 1 ns / 1 ps
module digital_filter
#(parameter delay_filter = 4)
(
input  clk, 
input  in_data,
output out_data
);

//
function integer clogb2 (input [31:0] value);
begin
value = value-1;
for (clogb2=0; value>0; clogb2=clogb2+1)
value = value >> 1;
end
endfunction
//

reg                         [2:0] in_data_meta = 3'h0;
reg [clogb2(delay_filter)-1:0] ct_filter   = {clogb2(delay_filter){1'b0}};
reg                               out_data_rg = 1'b0;


always @(posedge clk)
begin
in_data_meta        <= {in_data_meta[1:0], in_data};

if(in_data_meta[2] == 1'b0)
    begin
    if(ct_filter != {clogb2(delay_filter){1'b0}})            ct_filter <= ct_filter - 1'b1;
    end
else
    begin
    if(ct_filter != delay_filter-1)                            ct_filter <= ct_filter + 1'b1;
    end

if(ct_filter == {clogb2(delay_filter){1'b0}})            out_data_rg <= 1'b0;
else if (ct_filter == delay_filter-1)                    out_data_rg <= 1'b1;
end

assign out_data = out_data_rg;

endmodule

 

Share this post


Link to post
Share on other sites

2 sazh

знамо, только там делали не уарт :laughing:

Share this post


Link to post
Share on other sites
потому что это не правильно с точки зрения построения системы. Отделяйте мух от котлет. Модуль с положительно активными сигналами отдельно, синхронизатор отдельно. Это более наглядно, понятно, легче констрейнить и повторно использовать. А цена вопроса пара лишних триггеров.

Я не понял. Синхронизатор и есть те самые пара триггеров.

Либо мне спрятать его в Усарт и добавить ножку другой частоты?

Смена уровня как сигнал( хоть положительного, хоть отрицательного) трудно описать констрейном?

Если глянуть в статью, там искусственно создаётся эта ситуация из "положительно активных сигналов" , а я просто выбросил, как лишний этот фрагмент...

 

2 sazh

знамо, только там делали не уарт :laughing:

У меня RS422

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this