Jump to content

    
Sign in to follow this  
Мур

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

Recommended Posts

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

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

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МГц уарт в кабелях.. ;)

Когда есть гальваническая развязка между системами, работающими с разными источниками и мощностями, то даже 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:

У меня RS422

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this