|  | 
 
 楼主|
发表于 2016-6-17 17:18:26
|
显示全部楼层 
| 本帖最后由 杰克淡定 于 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
 | 
 |