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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3948|回复: 11

[求助] 关于数字滤波器中求和逻辑采用阻塞赋值还是非阻塞赋值的问题

[复制链接]
发表于 2016-5-14 15:45:47 | 显示全部楼层 |阅读模式

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

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

x
最近在做优化数字滤波器代码的工作,然后遇到了下面这个问题:       如下图滤波器。此滤波器是一个半带滤波器,结构如下图1所示:
截图00.png


       现在遇到的问题是——
1。求和部分的代码是采用组合逻辑(阻塞赋值)实现好些还是采用时序逻辑(非阻塞赋值)实现好些呢?哪个更省资源和功耗?
    (阻塞赋值和非阻塞赋值的代码如下:
截图02.png 截图01.png
2。经过Modelsim功能仿真,我发现两种方式从功能上而言都能显示滤波器的功能,但是当采用时序逻辑时,我发现一个问题是刚开始的几个周期     恢复出的正弦波和后面的波形不一致,这是什么原因导致的?
    Modelsim功能仿真结果如下:

Modelsim仿真结果图

Modelsim仿真结果图

     求大神解答,谢谢!
 楼主| 发表于 2016-5-14 15:47:36 | 显示全部楼层
代码部分图的顺序反了,抱歉
 楼主| 发表于 2016-5-16 09:48:23 | 显示全部楼层
帖子要沉了吗?求助,再顶一下……
发表于 2016-5-16 10:12:32 | 显示全部楼层
从你的滤波器实现原理看,应该采用阻塞赋值,即滤波器中的延迟单元每打一拍就要求出累加和,要评估在你的系统时钟频率下,能否在一个周期内完成这个乘累加运算,具体可以放到FPGA内跑一下STA。

采用非阻塞赋值,相当于流水操作,刚开始的几拍,由于后面的寄存器还没有接收到输入的值,所以最终的输出响应也会延迟几拍。
这种操作相当于在系统内增加了10拍的延迟,即对于输入in,要等10拍以后,滤波器才能响应这个in,如果你的设计能容忍这个响应速度也可以。
发表于 2016-5-16 12:04:50 | 显示全部楼层
1. 这个问题和coeffN的位宽有关,如果位宽小,4~14放到一级里面加了也没有timing 问题,打一拍就好
   always@(xxxx)
  sum<= coeff4 + ...+ coeffN;
   如果timing meet不了,拆成两级或者多级。
  另外对于如果按照组合逻辑的写法,reset也不需要写的到处都是, reset复位coeffN就可以了,你那样写会引入不必要的mux.

2. 第一种方式有10个cycle的延时
 楼主| 发表于 2016-5-17 20:24:08 | 显示全部楼层
回复 4# atomdust
恩恩,受教啦,谢谢!
另外还有一个问题,请问下面这两种方式是一样的吗?(从硬件资源消耗和功耗上)
方式一:   reg signed [45:0] sum0,sum1,sum2,……
              always@(*)
                   begin
                        sum0 = coeff4 + coeff5;
                        sum1 = sum0 + coeff6;
                        sum2 = sum1 + coeff7;
                        ……
                   end
方式二:   wire signed [45:0] sum0,sum1,sum2,……

              assign sum0 = coeff4 + coeff5;
              assign sum1 = sum0 + coeff6;
              assign sum2 = sum1 + coeff7;
              ……
       经过Modelsim仿真,我发现这两种方式的功能是一样的,然后我分析了一下功耗,发现两者也相差无几,基本相同。
但是从硬件资源的的消耗上,理论上reg型应该比wire型的功耗要高吧,使用硬件资源更多吧???
 楼主| 发表于 2016-5-17 20:32:01 | 显示全部楼层
回复 5# yaya126
大神,您好,谢谢你的回答。
回答中你说组合逻辑的reset不要写得到处都是,从而可以减少MUX的使用,从而减少硬件资源的消耗,这点我非常赞同。但是我在想,如果求和部分的每个sumN都不加复位reset,那么在没有数据传过来时,sumN中的值岂不是都是不定态x了???不定态x有可能改变sumN的值,从而造成错误数据。另外,如果求和中不加复位,那么在复位时,此部分不受影响,那样岂不是增加了泄露功耗??
发表于 2016-5-19 12:16:05 | 显示全部楼层
本帖最后由 yaya126 于 2016-5-19 12:17 编辑

回复 7# 艾克0928
同步时序逻辑(reg)可以加异步复位,功耗也不会增加多少,组合逻辑就没有必要了,它的source有确定的值,计算结果就有。
如果你想对功耗分析有更深刻的理解,你把代码综合出来,带上仿真波形,用PTPX跑跑功耗分析。
发表于 2016-5-19 13:58:04 | 显示全部楼层
这么多级的加法不用流水?你设计的时钟频率是多少?
 楼主| 发表于 2016-5-19 17:50:39 | 显示全部楼层
回复 9# huster
我设计的clk=78.125KHz,不可以吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-30 01:20 , Processed in 0.026343 second(s), 11 queries , Gzip On, MemCached On.

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