本帖最后由 杰克淡定 于 2016-6-17 17:20 编辑
回复 12# yaya126
你的意思是说,你要求用一个两bit的select【1:0】信号,实现2'b01选clka, 2'b10选clkb, 2‘b00和2'b11不输出时钟,是这样吗?灵活变通一下嘛,主体切换电路直接调用我的模块,外围信号再简单处理一下先得到sel_clkb,最后输出时钟做个门控关断即可。
always@(posedge clkx or negedge rst_n)
begin
if (~rst_n)
sel_clkb <= 1'b0;
else
sel_clkb <= (select==2'b10);
end
clk_switch clk_switch (
.rst_n (rst_n ) , //
.clka (clka ), //
.clkb (clkb ), //
.sel_clkb (sel_clkb), //
.clk_o (clk_tmp ) //
);
always@(posedge clkx or negedge rst_n)
begin
if (~rst_n)
clk_en <= 1'b0;
else
clk_en <= (^select);
end
clk_gate_xxx clk_gate_o ( .CP(clk_tmp ), .EN(clk_en ), .Q(clk_o) .TE(1'b0) );
clk_o就是最后你需要的时钟了。select是哪个时钟域的信号,上面的两个always中的clkx就用哪个时钟。如果想使用与门代替上面的clk_gate_xxx,用clk_tmp下降沿把clk_en抓两拍后再跟clk_tmp做与逻辑得到最后的clk_o |