реклама на сайте
подробности

 
 
> Безглитчевый мультиплексор клоков, Как правильно описывать, когда клоков больше чем 2
des00
сообщение Jan 18 2010, 16:54
Сообщение #1


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Добрый день господа!
Нужно сделать переключение 4-х клоков, без глитча во время переключения. Это можно сделать с помощью одного мультиплексора 4-в-1 вида
CODE

module clock_switcher4clock
(
clkina ,
clkinb ,
clkinc ,
clkind ,
sel , // clkout = (sel == 0/1/2/3) -> clkina/clkinb/clkinc/clkind
clkout
);

//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------

input logic clkina;
input logic clkinb;
input logic clkinc;
input logic clkind;
input logic [1 : 0] sel ; // clkout = (sel == 0/1/2/3) -> clkina/clkinb/clkinc/clkind
output logic clkout;

//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------

logic ctrla;
logic ctrlb;
logic ctrlc;
logic ctrld;

logic [1:0] muxa;
logic [1:0] muxb;
logic [1:0] muxc;
logic [1:0] muxd;

//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------
// synthesis translate_off
initial begin : ini
muxa = '0;
muxb = '0;
muxc = '0;
muxd = '0;
end
// synthesis translate_on
//------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------

assign ctrla = ~sel[1] & ~sel[0] & ~muxb[1] & ~muxc[1] & ~muxd[1];
assign ctrlb = ~sel[1] & sel[0] & ~muxa[1] & ~muxc[1] & ~muxd[1];
assign ctrlc = sel[1] & ~sel[0] & ~muxa[1] & ~muxb[1] & ~muxd[1] ;
assign ctrld = sel[1] & sel[0] & ~muxa[1] & ~muxb[1] & ~muxc[1];


always_ff @(negedge clkina) begin
muxa <= {muxa[0], ctrla};
end

always_ff @(negedge clkinb) begin
muxb <= {muxb[0], ctrlb};
end

always_ff @(negedge clkinc) begin
muxc <= {muxc[0], ctrlc};
end

always_ff @(negedge clkind ) begin
muxd <= {muxd[0], ctrld};
end

assign clkout = (muxa[1] & clkina) | (muxb[1] & clkinb) | (muxc[1] & clkinc) | (muxd[1] & clkind);

endmodule

или с помошью четырех мультиплексоров 2-в-1 вида
CODE

assign ctrla = ~sel & ~muxb[1];
assign ctrlb = sel & ~muxa[1];

always_ff @(negedge clkina) begin
muxa <= {muxa[0], ctrla};
end

always_ff @(negedge clkinb) begin
muxb <= {muxb[0], ctrlb};
end

assign clkout = (muxa[1] & clkina) | (muxb[1] & clkinb);

Мне кажеться что оба варианта должны быть работоспособны, но может быть я ошибаюсь. Подскажите какой вариант является более правильным?
ЗЫ. Вариант использовать альтеровскую корку не предлагать, она не может покрыть всех вариантов используемых клоков %)


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016