|
发表于 2007-4-5 16:34:58
|
显示全部楼层
看看我的异步时钟切换逻辑
module DCS ( nrst, clk, sel, dclk );
input nrst;
input [ 3 : 0 ] clk;
input [ 1 : 0 ] sel;
output dclk;
reg [ 3 : 0 ] ena;
always @ ( negedge clk [ 0 ] or negedge nrst )
if ( ~ nrst )
ena [ 0 ] <= 0;
else
casex ( sel )
0 : ena [ 0 ] <= ~ ( ena [ 1 ] | ena [ 2 ] | ena [ 3 ] );
default : ena [ 0 ] <= 0;
endcase
always @ ( negedge clk [ 1 ] or negedge nrst )
if ( ~ nrst )
ena [ 1 ] <= 0;
else
casex ( sel )
1 : ena [ 1 ] <= ~ ( ena [ 0 ] | ena [ 2 ] | ena [ 3 ] );
default : ena [ 1 ] <= 0;
endcase
always @ ( negedge clk [ 2 ] or negedge nrst )
if ( ~ nrst )
ena [ 2 ] <= 0;
else
casex ( sel )
2 : ena [ 2 ] <= ~ ( ena [ 0 ] | ena [ 1 ] | ena [ 3 ] );
default : ena [ 2 ] <= 0;
endcase
always @ ( negedge clk [ 3 ] or negedge nrst )
if ( ~ nrst )
ena [ 3 ] <= 0;
else
casex ( sel )
3 : ena [ 3 ] <= ~ ( ena [ 0 ] | ena [ 1 ] | ena [ 2 ] );
default : ena [ 3 ] <= 0;
endcase
assign dclk =| ( clk & ena );
endmodule |
|