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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6903|回复: 30

[求助] 纯组合逻辑,仿真的结果与实际不符

[复制链接]
发表于 2017-11-28 15:00:27 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mysoul 于 2017-11-28 15:01 编辑




  1. `timescale 1ns / 1ps
  2. module swtich(CTR,reset,tck,
  3.                                         s1,s2
  4.     );

  5. input CTR;
  6. input reset;
  7. input tck;
  8. //input rstn;

  9. output s1;
  10. output s2;

  11. reg s1;
  12. reg s2;
  13. reg [1:0]cnt;

  14. always@(posedge tck /*or negedge rstn*/ or negedge reset)
  15. //if(!rstn)
  16. //        cnt = 2'b0;
  17. if(!reset)
  18.         cnt = 2'b0;
  19. else if(cnt == 2'b10)
  20.         cnt = 2'b0;
  21. else
  22.         cnt = cnt + 1'b1;

  23. always@(*)
  24. if(!reset)
  25.         begin
  26.                 s1 = 1'b0;
  27.                 s2 = 1'b0;
  28.         end
  29. else if(CTR)
  30.         begin
  31.                 s1 = s1;
  32.                 s2 = s2;
  33.         end
  34. else if(cnt == 2'b01)
  35.         begin
  36.                 s1 = 1'b1;
  37.                 s2 = s2;
  38.         end
  39. else if(cnt == 2'b10)
  40.         begin
  41.                 s1 = s1;
  42.                 s2 = 1'b1;
  43.         end

  44. endmodule



复制代码


该设计主要完成如下功能:
1.reset是外部的一个周期性复位信号,用于将开关s1,s2复位。
2.tck是前级电路的一个脉冲信号,脉冲持续时间只有几百ps,芯片主时钟64M的情况下,没办法去检测。
3.tck在一个周期内有一个脉冲时,s1打开,s2保持;
  tck在一个周期内有两个脉冲时,则s1在第一个脉冲来临时打开,s2在第二个脉冲来临时打开

在modelsim中仿真正确,但是在cadence中进行仿真时出现了如下问题:
1.当本周期无脉冲信号,reset信号下降沿到来时,s1和s2会有一个0到的1跳变,reset恢复到1后,s1和s2也恢复到0。此处姑且认为是毛刺吧
2.当本周期有一个脉冲信号或两个脉冲信号时,s1在第一个脉冲信号上升沿跳变,但是s2在第一个脉冲信号下降沿跳变,导致无法响应第二个脉冲的上升沿。

在cadence中仿真,reset信号的上升和下降都有一个transition time ,不是为0

出现该问题的原因是什么?
发表于 2017-11-28 15:28:08 | 显示全部楼层
請小心 blocking and non-blocking assignment 的用法.
发表于 2017-11-29 09:43:31 | 显示全部楼层
回复 1# mysoul


    cadence仿真是网表后仿吗
 楼主| 发表于 2017-11-29 20:26:03 | 显示全部楼层
回复 3# sdlyyuxi
不是,没有提取寄生参数,在cadence中做的数模混合仿真,tck是模拟电路的输出
 楼主| 发表于 2017-11-29 20:27:48 | 显示全部楼层
回复 2# kuolifeng
计数器这个地方,我仔细想过,认为还是阻塞赋值更好一点。因为tck在一个周期内最多只有两个,如果用非阻塞赋值,那么这个清零操作将会在下一个周期才会进行
发表于 2017-11-29 21:38:12 | 显示全部楼层
回复 4# mysoul

      那数字的部分是工具综合出来的网表还是RTL?
发表于 2017-11-30 13:26:16 | 显示全部楼层
本帖最后由 y23angchen 于 2017-11-30 13:30 编辑

111
发表于 2017-11-30 13:29:52 | 显示全部楼层
回复 5# mysoul


   不知道谁教你用阻塞赋值语句对时序逻辑进行赋值的。  还大言不惭觉得这样写更合理的。
   写代码之前先想想电路是怎样的。
   而下面那个组合逻辑,最后的else没有赋值, 明显会综合出latch。




   verilog是硬件   描述   语言。
发表于 2017-11-30 14:19:12 | 显示全部楼层
支持8楼的说法
发表于 2017-11-30 14:35:44 | 显示全部楼层
回复 8# y23angchen


    从楼主的描述,其实tck不是一个时钟,它这两段逻辑在它理解来看都是组合逻辑,只不过一般的逻辑中不会这么去处理,都会有时序逻辑来进行信号的采样或者输出的。这么用always去实现组合逻辑,是有点问题的。正如你所说,verilog是描述语言,楼主还是应该按照底层电路的结构来写代码哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-28 20:44 , Processed in 0.028585 second(s), 6 queries , Gzip On, Redis On.

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