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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1659|回复: 7

[求助] Verilog输出信号延时问题

[复制链接]
发表于 2022-1-6 19:59:31 | 显示全部楼层 |阅读模式

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

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

x

module test1_1(input clk,input in,output reg out1);

always @(posedge clk)
out1<=in;
endmodule
新人求教,在clk上升沿时输入in变化那么输出是延时一拍变化还是跟随in立即变化啊,我在modelsim和hdlbits仿真得到了两种结果,一直没搞懂这个问题
image.png image.png ,
 楼主| 发表于 2022-1-6 20:07:14 | 显示全部楼层
我理解的是由于in有一个上升/下降时间,所以在clk上升沿这一瞬间,它是将变化前的值赋给了out,所以out波形要延时一个clk,但是modelsim仿真下来确是两者却是同步的,求大佬指教,我的理解有什么不对的
发表于 2022-1-6 22:18:55 | 显示全部楼层


sktwo 发表于 2022-1-6 20:07
我理解的是由于in有一个上升/下降时间,所以在clk上升沿这一瞬间,它是将变化前的值赋给了out,所以out波形要 ...


你的理解本身没有错。但是需要继续往下理解

你在用modelsim仿真时,in信号应该不是由寄存器输出的,这个信号对你的out1寄存器来说,本质是异步信号,你强行将in信号与clk上升沿对齐,modelsim已经选择了一种最优的方式了,毕竟这个时候是在进行RTL仿真,故意淡化了电路的物理问题,否则,你这个仿真应该给你呈现亚稳态,你确定你不会崩溃?一个寄存器的D输入端是异步的,边沿又和本寄存器的时钟边沿对齐了,又不能给你按照亚稳态仿真,仿真软件必须选择一种实现方式,就是按照成功采样来实现,这无非是符合更多人的直观印象的选择,恰好你不习惯而已。

如果modelsim在RTL仿真阶段就给大家呈现组合逻辑的竞争冒险(毛刺满天飞)的话,再给你弄几个亚稳态看看的话,只有两个结果,要嘛你崩溃,要嘛你把modelsim骂到崩溃。

要看到寄存器一个clk节拍的延迟,不用修改你贴出来的out1寄存器的代码,把in信号的代码改为寄存器输出吧,或者把in信号上升沿相对clk上升沿往后延时错开哪怕是1ps,结果就是你想像的了。
 楼主| 发表于 2022-1-6 23:31:39 | 显示全部楼层


innovation 发表于 2022-1-6 22:18
你的理解本身没有错。但是需要继续往下理解

你在用modelsim仿真时,in信号应该不是由寄存器输出的,这个 ...


十分感谢,我检查了下产生in的module,确实是没有将其定义为reg型输出,
发表于 2022-1-6 23:58:03 | 显示全部楼层


sktwo 发表于 2022-1-6 23:31
十分感谢,我检查了下产生in的module,确实是没有将其定义为reg型输出,


呃,我不会verilog语法,我不知道定义为reg类型的信号是不是就行。我换个说法吧,你自己检查:
RTL仿真时,想看到一个信号在clk边沿变化,但以此信号为输入的flip-flop的输出延迟一个clk节拍输出,那么,你必须确保此flip-flop的D输入端来自于另一个flip-flop的Q输出端,那么,这个时候你再仿真,就可以看到in改变,out1延后一个clk节拍改变。
发表于 2022-1-7 09:27:01 | 显示全部楼层
受教了,以前没有写testbench的时候,都是把输入数据与时钟沿错开。
发表于 2022-1-7 20:34:13 | 显示全部楼层


sktwo 发表于 2022-1-6 23:31
十分感谢,我检查了下产生in的module,确实是没有将其定义为reg型输出,


和你的类型没有关系。
同步逻辑,那么输入也要同步给进去,才没有竞争问题。

你可以这样drive in
先生成clock
initial begin
   clk = 0;
   forever begin
      #5 clk=~clk;
   end
end
再根据clock 生成数据
initial begin
   in = 0;
   forever begin
      @(posedge clk);
      in = $random %2 ;
   end
end
发表于 2022-2-21 17:56:53 | 显示全部楼层
首先,你要保证你的in与时钟同步,不是单纯肉眼看着对齐,而是in产生时被clk采样过。保证这一点以后,所有仿真工具结果都应该一致,那就是错开一拍。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-28 22:57 , Processed in 0.025676 second(s), 8 queries , Gzip On, Redis On.

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