de

M

Mitsubishi

Guest
Hola a todos,

Tengo cuatro reloj (osc, osc / 2, osc / 4, osc /

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

.
i MUX entonces utilizar para seleccionarlo.
pero me falla la manera de evitar pasar?thx.

 
Siga las MUX D pestillo con un reloj que es de la más alta velocidad de reloj.

 
Si el reloj de la forma más rápida de dominio es posible que tenga que seguir el MUX con un syncronizer para evitar metastability.Usted sólo hafta tener en cuenta el retraso a través de la syncronizer.

jelydonut

 
Otra forma es utilizar un divisor sincrónica reloj y después de la división de carga de N diferentes valores.El divisor de cambio sólo en el estado de sincronismo con el reloj de conducción.Esto sólo funcionará si sólo una de las frecuencias y no se utiliza en el caso de que se van a otras partes del sistema.

 
selección de reloj debe utilizar puerta
de reloj símbolo.

 
uso libre de error de selección de reloj.
La idea es cambiar el reloj cuando el reloj seleccionado originalmente se encuentran en línea lógica 0, esperar para 2 ciclo de reloj o algo así, entonces la rampa hasta el recién seleccionados reloj.

 
2 FDF muestra selecter
posedge es una muestra, es una muestra negedge.

 
Creo que depende de la fuente de seleccionar la señal de la MUX.

BTY, no me parece que es suficientemente seguro como por la adición de un reloj más alta siguiente MUX D pestillo.

 
usted puede probar el método en el archivo adjunto.

este método es muy confiable.Mitsubishi escribió:

Hola a todos,Tengo cuatro reloj (osc, osc / 2, osc / 4, osc /
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" /> .

i MUX entonces utilizar para seleccionarlo.

pero me falla la manera de evitar pasar?
thx.
 
módulo clk_gen (
DCK,

pg_en,
en1ch,
lvds_dck,
lvds_dck_div2,
osc_dck,
rst_n
);

DCK salida;

pg_en de entrada;
en1ch de entrada;
lvds_dck de entrada;
lvds_dck_div2 de entrada;
osc_dck de entrada;
rst_n de entrada;

reg sel_a;
reg sel_b;
reg sel_c;
reg mux_sel_1_d;
reg mux_sel_0_d;
reg mux_sel_0_d2;
reg DCK;
alambre [2:0] mux_sel;

siempre @ (mux_sel o lvds_dck o lvds_dck_div2 o osc_dck)
empezar
caso (mux_sel [2:0])
3'b001: DCK = lvds_dck;
3'b010: DCK = lvds_dck_div2;
3'b100: DCK = osc_dck;
por defecto: DCK = 0;
endcase
final

//--------------------------------------------
siempre @ (negedge lvds_dck o negedge rst_n)
empezar
if (! rst_n)
sel_a <= # 1 1'b0;
algo más
sel_a <= # 1 (pg_en | en1ch);
final

siempre @ (negedge lvds_dck o negedge rst_n)
empezar
if (! rst_n)
mux_sel_1_d <= # 1 1'b0;
algo más
mux_sel_1_d <= # 1 (| mux_sel [2:1]);
final

asignar mux_sel [0] = ~ (sel_a | mux_sel_1_d);

//--------------------------------------------
siempre @ (negedge lvds_dck_div2 o negedge rst_n)
empezar
if (! rst_n)
sel_b <= # 1 1'b0;
algo más
sel_b <= # 1 (! pg_en & & en1ch);
final

siempre @ (negedge lvds_dck_div2 o negedge rst_n)
empezar
if (! rst_n)
mux_sel_0_d <= # 1 1'b0;
algo más
mux_sel_0_d <= # 1 (mux_sel [2] | mux_sel [0]);
final

asignar mux_sel [1] = ~ (~ sel_b | mux_sel_0_d);

//--------------------------------------------
siempre @ (negedge osc_dck o negedge rst_n)
empezar
if (! rst_n)
sel_c <= # 1 1'b0;
algo más
sel_c <= # 1 pg_en;
final

siempre @ (negedge osc_dck o negedge rst_n)
empezar
if (! rst_n)
mux_sel_0_d2 <= # 1 1'b0;
algo más
mux_sel_0_d2 <= # 1 (| mux_sel [1:0]);
final

asignar mux_sel [2] = ~ (~ sel_c | mux_sel_0_d2);endmodule

 

Welcome to EDABoard.com

Sponsor

Back
Top