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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5293|回复: 24

[求助] modelsim仿真与实际功能不符问题?

[复制链接]
发表于 2017-6-7 16:36:11 | 显示全部楼层 |阅读模式

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

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

x

1.问题描述:从modelsim仿真图上看,标志信号没有被正确的采样到,但是该标志信号控制的信号却能够正确的执行。

以位计数器(bit_cnt)为例,相关verilog代码如下

always @(posedge MCLK or negedge rst)

     if(~rst)begin  

         sck_r3    <= 1'b 0;

         sck_r2    <= 1'b 0;      

         sck_r1    <= 1'b 0;

      end

    else if(RESET | reset_DRDY)begin   

         sck_r3    <= 1'b 0;

         sck_r2    <= 1'b 0;      

         sck_r1    <= 1'b 0;

      end

    else

      begin

         sck_r3    <= sck_r2;      // synchronizers

         sck_r2    <= sck_r1;     //  synchronizers

         sck_r1    <= sck ^ pol;        //  select the desired polarity ofthe slave clk

              end

assign  shift_clk_negedge = ~(sck ^ pol) & sck_r1; //pol= 0, SCK's negedge;pol = 1, SCK's posedge

assign  shift_clk_negedge_1 = ~sck_r1 & sck_r2;

always @(posedge MCLK or negedge rst)

             if(~rst)

                 bit_cnt   <= 3'b 111;

             else if(spi_state == idle)

                 bit_cnt   <= 3'b 111;

             else if(shift_clk_negedge == 1'b 1)

                 bit_cnt   <= bit_cnt - 3'h 1;

pol信号固定为1shift_clk_negedgeshift_clk_negedge_1信号为sck上升沿指示信号,高电平有效。bit_cnt应该是在MCLK的上升沿并且shift_clk_negedge1时,才会进行减1操作。


Modelsim仿真图如下(前仿真):

00.png


从该图上可以看出,仅有第四根黄线部分采样到shift_clk_negedge信号为1,其他地方都未采样到,但是bit_cnt却进行了减1操作。但是第一根黄线这里,没有采样到shift_clk_negedge信号为1,也没有进行减1操作。源文件,仿真文件和仿真设置都没有问题。


该问题产生的原因是什么?为何与verilog描述的功能不符合?

00.png
发表于 2017-6-8 15:17:50 | 显示全部楼层
1、第一个bit_cnt没有减1的可能,是不是spi_state还处于idle?这个信号能否拉出来看看?
2、第一个negedge是两个异步信号产生的结果,是否可以把第二个always里面判断negedge==1换成negedge_1==1,negedge_1是两个同步信号产生的结果,也许波形上看着更好分析。不知道你设计的意图是否可以允许这样?感觉这个问题也许是受到<=赋值的同一个时钟边沿的各种event区域处理的先后顺序所致,不过暂时没有分析出结果。你也可以根据这个思路去考虑一下。总觉得直接异步过来的信号,拿来做判断可能是有风险的。
 楼主| 发表于 2017-6-8 21:14:02 | 显示全部楼层
回复 2# gaurson

首先谢谢你的回复,由于这版设计,已经流片了,所以我就只能从代码角度分析哪里可能会出现问题。你刚刚提到的这个,确实是准备用这个negedge—1信号去做。目前芯片不知道会不会出现和波形图一样的这种采样问题。如果说,各个信号与时钟信号到来的时间不一致,会不会出现问题,导致芯片功能不正常。我现在就遇到对方公司表示,读数据不对,一直在分析原因。
发表于 2017-6-8 23:14:14 | 显示全部楼层
画电路图出来再认真分析比较好点,看看你的代码表达的意思是否和电路图一致。
发表于 2017-6-9 15:51:12 | 显示全部楼层
反正我是觉得采集第一个negedge存在风险,是异步的。
发表于 2017-6-9 16:09:54 | 显示全部楼层
sck_r2  ,sck_r3去做上/下沿有效信号,你这个用异步信号直接做逻辑,回来片子肯定废了,现在spi还要自己去写?
 楼主| 发表于 2017-6-13 15:30:47 | 显示全部楼层
回复 5# gaurson
我也认为用异步信号不好,不过这是上一届设计的,我和导师说这个地方有风险,他不让我改
 楼主| 发表于 2017-6-13 15:32:43 | 显示全部楼层
回复 6# jacky_mx

片子是有问题,好像数字后端没做好还是咋滴,不太清楚。那你们工作时,像SPI,IIC这种接口一般是怎么办呢?
发表于 2017-6-14 16:49:15 | 显示全部楼层
仿真的结果是对的,是你理解错了
发表于 2017-6-14 16:50:49 | 显示全部楼层
第二根黄线和第三根黄线后面的时钟沿都采到了shift_clk_negedge为1
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-20 04:08 , Processed in 0.051807 second(s), 8 queries , Gzip On, Redis On.

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