找回密码
 注册
关于网站域名变更的通知
查看: 241|回复: 1
打印 上一主题 下一主题

【答疑】违反“时钟沿前看条件”原则的分析

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-26 16:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
【答疑】违反“时钟沿前看条件”原则的分析

& c! X4 s- d9 D* G( F' r" `
作者:肖肖肖

' d0 n2 X- o* p! w
本文为明德扬原创文章,转载请注明出处!
. `" L/ V: y8 h# t% [
       明德扬有一条非常重要的看波形技巧,即“时钟上升沿前看条件”的技巧,意思就是在时钟上升沿前,看条件信号,看到什么值就是值。

6 }9 `! T  h% V% {) ~9 @
       如下图所示:

5 Y( @' J" [' w( [/ Q! m8 \
       这一条技巧,对于刚学习FPGA的人来说,非常之实用。
2 \& Z7 S2 @# D$ n" z
       但是,部分工程师在做仿真时,有时候会出现违反这一原则的奇怪现象。例如下面这个案例:

# v1 T& A( r' d0 l' _
       关于在仿真软件中,为什么计数器的判定会在不满足加一条件的时候进行加一操作(如下图所示)。计数器cnt_col的加1条件是din_vld,按照原则,第4个时钟上升沿的时候,din_vld应该为0,计数器不应该加1,但事实上是加1了,这是怎么回事?我们举另一个例子来说明这个问题。
[img][/img]
       功能要求如下:复位后,din_vld 不定时等于1,当din_vld出现3个或超过3个周期的高电平脉冲时,将第三个周期时对应的din值赋给dout,其他时候dout保持不变。
) o8 t5 `) T2 M* `
       根据功能要求,写出代码后用modelsim进行仿真,效果如下图:
[img][/img]

1 W, v( Q9 f6 L9 |
       然后发现仿真的波形和我们预期的波形并不一致!!
[img][/img]
6 I! P7 B2 B! P7 B' |$ Y' L- T! q0 o
[img][/img]       计数器cnt在din_vld == 0 的时候就已经开始计数了。
6 h# K7 W8 r& c; x( Y
       查看代码,计数器cnt的加一条件是:add_cnt = din_vld == 1 && flag == 0 。

- A' ]5 ^. M( v3 L# |1 X+ Q6 r$ W0 h
       也就是说,信号din_vld在时钟上升沿处由0变1的时候,仿真软件把信号din_vld的值取为1了。
: r# u- e" ^1 \. `
那么会出现这种情况的原因是什么呢?

3 a. T: Z) Y7 ^( S7 ^) u3 s" B
       这里是软件仿真,是软件模拟真实的电路情况。但是,软件模拟是有缺陷的,无论软件如何模拟,本质上它都是串行执行的代码,是一条一条指令执行的。
8 v4 D( I# z5 [, S, E) z
       在仿真文件里,有两个initial语句,一个是产生时钟的,一个是产生din_vld的,如下图。  
[img][/img]
       按照verilog的语法,这两个initial是并行执行的。但事实上软件执行是有先后的。很有可能先执行了din_vld变1的代码,再执行了clk由0变1的代码,这种情况下,在时钟的上升沿就会采到din_vld为1,因此就会出现案例中的错误。

+ M& M7 |# O5 r$ @, P/ _
       这是与FPGA实际的电路是不符合的,也就是说这个其实是仿真缺陷的问题,而不是设计问题。

! F! e5 J# G" B( b) R/ c5 l  _1 T
       虽然不是设计问题,但仿真仍然要继续,我们需要避免这种情况。如何避免呢?

/ q* R8 X) h0 B' M, w' y) Z
       解决上述问题的方法

% [0 z$ n! g7 T! A
       我们可以在测试文件中给信号加上一个1ns 的延时,这样两个initial语句就绝对不会同时执行。

# Y) w; f; y) c( o; y' {1 U
       代码如下图:

2 Q8 N( U$ Y9 N) U& x+ ~
       用modelsim重新编译一下再仿真,此时的波形就是功能要求的正确结果。如下图:

4 \) T& o8 i1 L# e3 c
[img][/img]
$ B7 R; V: Z$ W: H
问题完美解决!
+ j5 d! x+ o( h3 ?5 W0 ~1 C" P
更多FPGA相关问题欢迎互相讨论!

$ R' b$ t! p$ R) J7 {
" T& R  g# d7 K; N7 q1 }+ I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-20 16:39 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表