在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2005|回复: 1

[解决] 请问数据缓冲之后综合频率下降的原因

[复制链接]
发表于 2012-11-28 16:18:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位,我写了一段代码,发现RD[29:0]缓冲一个时钟到User_Area_data[29:0]之后综合的平率下降的很多,我想知道原因是什么,谢谢。

没有经过一个时钟延迟的代码





  1. module test(RD,pclk,CMOS_VS,CMOS_HS,y,x,Inter_Use_Area,User_Area_Active,User_Area_Addr);
  2. input [29:0]RD;
  3. input pclk,CMOS_VS,CMOS_HS,User_Area_Active;
  4. input [9:0]y,x;
  5. output reg Inter_Use_Area;
  6. output reg [9:0]User_Area_Addr;
  7. reg [9:0]User_Area_Addr_temp;
  8. reg User_Area_state,Left_IN,Left_OUT;
  9. parameter User_Area_idle=1'b0,User_Area_compare=1'b1;
  10. always @(posedge pclk or negedge CMOS_VS)
  11. if(~CMOS_VS)
  12.   begin
  13.    User_Area_Addr<=0;
  14.    User_Area_state<=User_Area_idle;
  15.   end
  16. else
  17.   case(User_Area_state)
  18.    User_Area_idle:
  19.     begin
  20.      if(CMOS_HS&&(y==RD[9:0]))
  21.       begin
  22.        User_Area_state<=User_Area_compare;
  23.        User_Area_Addr<=User_Area_Addr_temp;
  24.       end
  25.      else
  26.       User_Area_state<=User_Area_idle;
  27.     end
  28.    User_Area_compare:
  29.     if(x==RD[29:20])
  30.      User_Area_state<=User_Area_idle;
  31.     else
  32.      User_Area_state<=User_Area_compare;
  33.   endcase
  34. always @(posedge pclk or negedge CMOS_VS)
  35. if(~CMOS_VS)
  36.   begin
  37.    User_Area_Addr_temp<=0;
  38.    Left_IN<=0;
  39.    Left_OUT<=0;
  40.    Inter_Use_Area<=0;
  41.   end
  42. else
  43.   begin
  44.    User_Area_Addr_temp<=User_Area_Addr+1;
  45.    Left_IN<=x<RD[29:20];
  46.    Left_OUT<=x>RD[19:10];
  47.    Inter_Use_Area<=Left_IN&&Left_OUT&&User_Area_Active;
  48.   end
  49. endmodule


复制代码

综合结果
test|pclk          252.9 MHz     215.0 MHz     3.954         4.652         -0.698     inferred     Autoconstr_clkgroup_0
把RD缓冲到User_Area_data的代码





  1. module test(RD,pclk,CMOS_VS,CMOS_HS,y,x,Inter_Use_Area,User_Area_Active,User_Area_Addr);
  2. input [29:0]RD;
  3. input pclk,CMOS_VS,CMOS_HS,User_Area_Active;
  4. input [9:0]y,x;
  5. output reg Inter_Use_Area;
  6. reg [29:0]User_Area_data;
  7. output reg [9:0]User_Area_Addr;
  8. reg [9:0]User_Area_Addr_temp;
  9. reg User_Area_state,Left_IN,Left_OUT;
  10. parameter User_Area_idle=1'b0,User_Area_compare=1'b1;
  11. always @(posedge pclk or negedge CMOS_VS)
  12. if(~CMOS_VS)
  13.   begin
  14.    User_Area_data<=0;
  15.    User_Area_Addr<=0;
  16.    User_Area_state<=User_Area_idle;
  17.   end
  18. else
  19.   case(User_Area_state)
  20.    User_Area_idle:
  21.     begin
  22.      User_Area_data<=RD;
  23.      if(CMOS_HS&&(y==User_Area_data[9:0]))
  24.       begin
  25.        User_Area_state<=User_Area_compare;
  26.        User_Area_Addr<=User_Area_Addr_temp;
  27.       end
  28.      else
  29.       User_Area_state<=User_Area_idle;
  30.     end
  31.    User_Area_compare:
  32.     if(x==User_Area_data[29:20])
  33.      User_Area_state<=User_Area_idle;
  34.     else
  35.      User_Area_state<=User_Area_compare;
  36.   endcase
  37. always @(posedge pclk or negedge CMOS_VS)
  38. if(~CMOS_VS)
  39.   begin
  40.    User_Area_Addr_temp<=0;
  41.    Left_IN<=0;
  42.    Left_OUT<=0;
  43.    Inter_Use_Area<=0;
  44.   end
  45. else
  46.   begin
  47.    User_Area_Addr_temp<=User_Area_Addr+1;
  48.    Left_IN<=x<User_Area_data[29:20];
  49.    Left_OUT<=x>User_Area_data[19:10];
  50.    Inter_Use_Area<=Left_IN&&Left_OUT&&User_Area_Active;
  51.   end
  52. endmodule


复制代码

综合结果
test|pclk          206.7 MHz     175.7 MHz     4.837         5.691         -0.854     inferred     Autoconstr_clkgroup_0
发表于 2012-11-28 17:03:59 | 显示全部楼层
你用来做缓存,应该是串行引起的关键路径被延迟.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 09:45 , Processed in 0.017436 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表