|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 mysoul 于 2017-11-28 15:01 编辑
- `timescale 1ns / 1ps
- module swtich(CTR,reset,tck,
- s1,s2
- );
- input CTR;
- input reset;
- input tck;
- //input rstn;
- output s1;
- output s2;
- reg s1;
- reg s2;
- reg [1:0]cnt;
- always@(posedge tck /*or negedge rstn*/ or negedge reset)
- //if(!rstn)
- // cnt = 2'b0;
- if(!reset)
- cnt = 2'b0;
- else if(cnt == 2'b10)
- cnt = 2'b0;
- else
- cnt = cnt + 1'b1;
- always@(*)
- if(!reset)
- begin
- s1 = 1'b0;
- s2 = 1'b0;
- end
- else if(CTR)
- begin
- s1 = s1;
- s2 = s2;
- end
- else if(cnt == 2'b01)
- begin
- s1 = 1'b1;
- s2 = s2;
- end
- else if(cnt == 2'b10)
- begin
- s1 = s1;
- s2 = 1'b1;
- end
- 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
出现该问题的原因是什么? |
|