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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5829|回复: 18

[求助] 关于流水线设计的加法器输出异常,有问题请教大家。

[复制链接]
发表于 2011-7-10 22:22:01 | 显示全部楼层 |阅读模式

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

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

x
大家好,我用二级流水线设计了个16位加法器,这应该很简单了。
功能仿真么有问题,但是时序仿真最后出了问题,本来一个上升沿对应一个输出,结果却是一个上升沿产生了多个输出。
截图如下:
功能仿真(正确)
功能仿真.jpg
时序仿真(出错误了)
时序仿真1.jpg
时序仿真2.jpg
比如最后一幅图中,13的那个结果是正确的,但是前面又多出了好几个结果,不知道怎么来。
 楼主| 发表于 2011-7-10 22:23:49 | 显示全部楼层
程序附上
模块代码:




  1. module adder16(a,b,cin,clk,sum,cout);
  2. input[15:0] a,b;
  3. input cin;
  4. input clk;
  5. output[15:0] sum;
  6. output cout;
  7. reg[15:0] sum;
  8. reg cout;

  9. reg[15:0] temp_a,temp_b;
  10. reg temp_cin;
  11. reg[7:0] first_sum;
  12. reg first_cout;
  13. reg[7:0] first_a,first_b;


  14. always @(posedge clk)
  15. begin
  16. temp_a<=a;temp_b<=b;temp_cin<=cin;
  17. end

  18. always @(posedge clk)
  19. begin
  20. {first_cout,first_sum}<={1'b0,temp_a[7:0]}+{1'b0,temp_b[7:0]}+temp_cin;
  21. first_a<=temp_a[15:8];
  22. first_b<=temp_b[15:8];
  23. end

  24. always @(posedge clk)
  25. begin
  26. {cout,sum}<={first_a,8'b0}+{first_b,8'b0}+{first_cout,first_sum};
  27. end
  28. endmodule



复制代码
 楼主| 发表于 2011-7-10 22:24:53 | 显示全部楼层
激励代码:



  1. `timescale 1ns/1ns

  2. module adder16_tp;
  3. wire[15:0] sum;
  4. wire cout;
  5. reg[15:0] a,b;
  6. reg cin,clk;
  7. parameter cycle=10;

  8. adder16 my_adder16(a,b,cin,clk,sum,cout);

  9. always #(cycle/2) clk=~clk;

  10. initial
  11. begin
  12. clk=0;a=0;b=0;cin=0;
  13. #cycle a=1;b=1;
  14. #cycle a=5;b=8;
  15. #cycle a=10;b=20;
  16. #cycle a=25;b=9;
  17. #cycle a=128;b=200;
  18. #cycle a=4580;b=65530;
  19. #cycle a=50000;b=10000;
  20. #cycle a=24254;b=14242;
  21. #cycle a=58;b=52;
  22. #cycle a=11111;b=55555;
  23. #(cycle*10) $stop;
  24. end

  25. endmodule



复制代码
发表于 2011-7-10 23:15:23 | 显示全部楼层
你说的应该就是后仿吧,这个是因为组合逻辑到达寄存器的时间不同造成的,是正常的。
只要时序满足setup时间就没有问题
 楼主| 发表于 2011-7-11 09:53:25 | 显示全部楼层




    请教怎么知道时序是否满足steup时间,我用的是quartus II。
    不是说后仿是最接近实际的吗?
   不知道这个结果对不对?
发表于 2011-7-11 10:04:17 | 显示全部楼层
毛刺而已,计算结果各bit到达寄存器时间不同导致的,使用结果的时候用寄存器锁一拍再用。
发表于 2011-7-11 10:14:05 | 显示全部楼层
ripple问题,transition的时间不同造成的
发表于 2011-7-11 11:05:21 | 显示全部楼层


请教怎么知道时序是否满足steup时间,我用的是quartus II。
    不是说后仿是最接近实际的吗?
...
418478935 发表于 2011-7-11 09:53



稳定后的信号是正确值。带时序的仿真应该是正确的。
如果你还不知道是否满足setup,说明你还有许多要学习的。
发表于 2011-7-11 12:58:10 | 显示全部楼层
QUARTUS中有没有对时钟频率进行约束?
 楼主| 发表于 2011-7-11 13:27:16 | 显示全部楼层


毛刺而已,计算结果各bit到达寄存器时间不同导致的,使用结果的时候用寄存器锁一拍再用。
alenww 发表于 2011-7-11 10:04




    请教是用D触发器吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-1 13:29 , Processed in 0.022835 second(s), 8 queries , Gzip On, Redis On.

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