项目代码编译后打印如下信息:
Info: Clock “CLK48M” has Internal fmax of 67.47 MHz between source register “GLUE_LGC:glue|MCLK” and destination register “img_lgc:img|N2DSP” (period= 14.822 ns)
信号由MCLK到N2DSP这条通道限定了时针的最高速度只能到67.47MHz。
查看相关代码中存在如下代码段:
always @( posedge CLK48M )
begin
CLKDIV 《= CLKDIV + 1; //clock divider
end
always @(posedge CLKDIV[5])
begin
MCLKB3 《= MCLK_EXT;
MCLKB2 《= MCLKB3;
MCLKB 《= MCLKB2;
MCLK 《= MCLKB | MCLKB2 | MCLKB3;
End
该代码段是对MCLK_EXT做一个简单的防抖处理,相当于使用CLK48M衍生的一个时钟CLKDIV[5]。
MCLK在其它模块中又使用CLK48M系统时钟做了一次锁存,于是相当于在两个CLK48M时钟之间要完成CLKDIV[5]的转换,再用CLKDIV[5]的上升沿去触发MCLK的转换,再输出到目的寄存器。此过程占用时间较长,而CLKDIV[5]所耗的时间显然是多余的。
修改代码后如下:
always @( posedge CLK48M )
begin
CLKDIV 《= CLKDIV + 1; //clock divider
if (CLKDIV == 6‘b100000)
begin
MCLKB3 《= MCLK_EXT;
MCLKB2 《= MCLKB3;
MCLKB 《= MCLKB2;
MCLK 《= MCLKB | MCLKB2 | MCLKB3;
end
end
两个从逻辑功能上看是一样的,但修改后因为只使用CLK48M时钟,逻辑都是以CLK48M为触发时钟,省去了一级触发器的延时,于是大大缩短了从源到目的寄存器的延时。提高了最高时钟速率。编译后打印CLK48M系统时钟最高频率信息如下:
Info: Clock “CLK48M” has Internal fmax of 77.08 MHz between source register “img_lgc:img|DATABUF[13]” and destination register “img_lgc:img|CAM_D[6]” (period= 12.974 ns)
可以看到CLK48M最高频率可以达到77.08M,这个频率是由“img_lgc:img|DATABUF[13]”到“img_lgc:img|CAM_D[6]”之间的路径决定的。后面再继续针对该网络做优化。
这种使用衍生时钟的方法是很多人逻辑设计中存在的错误(因为对时序影响非常严重,所以这里称它为一个错误也不为过),因为比较有典型性,所以特意整理了一下,希望引起初级逻辑工程师的注意。
上一篇:新一代数位储存方案强化安全监控应用
下一篇:浅析信号回流及跨分割问题
推荐阅读最新更新时间:2023-10-12 20:48
- 在发送信号链设计中使用差分转单端射频放大器的优势
- 安森美CEO亮相慕尼黑Electronica展,推出Treo平台
- 安森美推出业界领先的模拟和混合信号平台
- 贸泽开售用于快速开发精密数据采集系统的 Analog Devices ADAQ7767-1 μModule DAQ解决方案
- 国产高精度、高速率ADC芯片,正在崛起
- 集Hi-Fi、智能和USB多通道等特征于一体的微控制器——迎接数字音频新时代
- 采用电容型PGA,纳芯微推出高精密多通道24/16位Δ-Σ型ADC
- 全差分放大器为精密数据采集信号链提供高压低噪声信号
- 意法半导体推出灵活、节省空间的车载音频 D类放大器,新增针对汽车应用优化的诊断功能