微波EDA网,见证研发工程师的成长! 2025年03月11日 星期二
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求教,关于同步问题!

求教,关于同步问题!

时间:10-02 整理:3721RD 点击:
有这样一个模块,
module Mux(
input   clk_1,
input   data_clk1,
input   clk_2,
input   data_clk2,
input   clk_3,
input   select_clk3,
output  data_out
);
endmodule
data_clk1,在clk_1时钟域,data_clk2在clk_2时钟域,select_clk3在clk_3时钟域,该模块的功能是当select_clk3为1时,data_out输出为data_clk1(自然也为clk_1时钟域),当select_clk3为0时,data_out输出为data_clk2(自然也为clk_2时钟域)。clk_1和clk_2频率比较接近,但相位不同,clk_3的频率大致为clk_1或clk_2的2倍。
现在的问题是,怎样才能保证输出data_out不会出现毛刺,亚稳态?
新手,不太清楚要怎样做比较好,望高手指教!

do clk1,clk2,clk3 synch or asynch ?if synch, you can use register triggered by clk3 because the output of comb is glitch possible.

module MUX();
input clk1,clk2,clk3,select_clk3;
input data_clk1,data_clk2;
output data_out;
reg data_out;
reg data1,data_clk1_r, data_clk1_rr;
reg data2,data_clk2_r, data_clk2_rr;
always@(posedge[/email] clk1)
  data1<=data_clk1;
always@(posedge[/email] clk2)
data2<=data_clk2;
always@(posedge[/email]  clk3)
begin
        data_clk1_r<=data1;
       data_clk1_rr<=data_clk1_r;
end
always@(posedge[/email] clk3)
begin
        data_clk2_r<=data2;
        data_clk2_rr<=data_clk2_r;
end
assign   data_out=(select_clk3==1'b1)?data_clk1_rr:data_clk2_rr;
endmodule

没碰到过这种问题,不懂。

我也想知道

根据你所说,选择信号频率是被选择信号的2倍左右,那么怎么可能输出完整的clk1或clk2呢?
感觉你说的不够清楚,能否把画个图,把信号之间的关系表述的清楚具体点,这样高手们也好帮到你啊?!

过来看看



加载中...


个人觉得这种同步问题的关键是时钟域的切换,不同的时钟域选择相应时钟域的数据值。
用visio画了下电路图,大家讨论下是否可行

加载中...

先有电路再有代码,代码是描述电路的,并不是有代码而有电路。

XIEXIE !

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top