时钟分频处理的问题,请大家帮忙看看
时间:10-02
整理:3721RD
点击:
下面是我时钟部分的代码always@(negedge OSC_CLK or negedge CLR_X) begin
if(CLR_X==0)
OSC_CLK2 <= 0;
else
OSC_CLK2 <= ~OSC_CLK2;
end
always@(negedge OSC_CLK2 or negedge CLR_X) begin
if(CLR_X==0)
OSC_CLK4 <= 0;
else
OSC_CLK4 <= ~OSC_CLK4;
end
always@(negedge OSC_CLK4 or negedge CLR_X) begin
if(CLR_X==0)
OSC_CLK8 <= 0;
else
OSC_CLK8 <= ~OSC_CLK8;
end
always@(*) begin
if(ALS_enable==1)
case(ADC_TIME)
2'b00: CLK = OSC_CLK;
2'b00: CLK = OSC_CLK2;
2'b00: CLK = OSC_CLK4;
2'b00: CLK = OSC_CLK8;
endcase
else
CLK = OSC_CLK;
end
CLK是我实际的工作时钟,由于设计需要,在ALS_enable为1时,CLK需要根据ADC_TIME选择降频后的时钟
ALS_enable是工作中反馈回来的信号,在工作期间会变化;ADC_TIME是配置信息,设定好就不会变了
我想问的是,在综合时,对这几个时钟该怎么约束才是可靠的呢?
我是对OSC_CLK2、OSC_CLK4、OSC_CLK8约束为generate clock
然后OSC_CLK、OSC_CLK2、OSC_CLK4、OSC_CLK8之间设faulse path
不知道有什么不对或需要补充的,请大家指点一下,谢谢
if(CLR_X==0)
OSC_CLK2 <= 0;
else
OSC_CLK2 <= ~OSC_CLK2;
end
always@(negedge OSC_CLK2 or negedge CLR_X) begin
if(CLR_X==0)
OSC_CLK4 <= 0;
else
OSC_CLK4 <= ~OSC_CLK4;
end
always@(negedge OSC_CLK4 or negedge CLR_X) begin
if(CLR_X==0)
OSC_CLK8 <= 0;
else
OSC_CLK8 <= ~OSC_CLK8;
end
always@(*) begin
if(ALS_enable==1)
case(ADC_TIME)
2'b00: CLK = OSC_CLK;
2'b00: CLK = OSC_CLK2;
2'b00: CLK = OSC_CLK4;
2'b00: CLK = OSC_CLK8;
endcase
else
CLK = OSC_CLK;
end
CLK是我实际的工作时钟,由于设计需要,在ALS_enable为1时,CLK需要根据ADC_TIME选择降频后的时钟
ALS_enable是工作中反馈回来的信号,在工作期间会变化;ADC_TIME是配置信息,设定好就不会变了
我想问的是,在综合时,对这几个时钟该怎么约束才是可靠的呢?
我是对OSC_CLK2、OSC_CLK4、OSC_CLK8约束为generate clock
然后OSC_CLK、OSC_CLK2、OSC_CLK4、OSC_CLK8之间设faulse path
不知道有什么不对或需要补充的,请大家指点一下,谢谢
求指点啊,没经验,不知道自己弄的对不对
我觉得应该用计数器做分频器
不推荐使用这种分频方法,
所有分频后时钟基于同一个时钟源较好,比如
源为clk,可以用一个计数器分频得到clk_div2/clk_div4/clk_div8
谢谢你,已修改为计数器分频,请问我的CLK在综合时该怎么约束呢?因为CLK的频率在工作中会变化,不知道怎么约束才合理
谢谢,已修改为计数器分频,能不能说下在综合时如何约束CLK呢?CLK的频率会变化
要是最高频率不是很高的话,就按最高的约束,要是太高,请教高手吧
时钟用最高约束
分频这样写,以二分频为例:
create_generated_clock -name clk_div2 -source [get_ports clk] -divede_by 2 [get_pins U/Q]
U/Q代表clk_div2的输出dff的q端。
LZ的这个分频很高端啊,这种分频有什么好处不,虽然约束,DFT会麻烦点
非常感谢你的细心回答,那对最高频率约束,我用下面的语句对吗?
set_case_analysis 0 [get_ports ADC_TIME[0]]
set_case_analysis 0 [get_ports ADC_TIME[1]]
我觉得可以,你就是让mux选择最高频信号接入dff。
具体不太懂了,不能瞎说,只能帮到这了。
好的,感谢
