比较选择器

2019-07-16 01:39发布

比较选择器,  我的这个程序里面 要用到比较多的if语句,当满足某一条件时,执行某一句,因为用了比较多的比较器和 if 语句,导致逻辑电路比较复杂,导致RTL原理图只能看到最上层模块,底层的看不到。求大神指导一下,该怎么优化程序。
下面是我的部分代码:
  1. always @(posedge clock )begin
  2.       if (rst) begin
  3.          guassian_output <= 25'b0;
  4.                        
  5.       end else if (random>0   &&  random<=100) begin
  6.          guassian_output <= 731*(random-0)+447000 ;
  7.                        
  8.                  end else if(random>100 &&  random<=400) begin
  9.          guassian_output <= 684*(random-100)+520000;
  10. <span class="Apple-tab-span" style="white-space: pre; ">        </span>
  11. <blockquote><span class="Apple-tab-span" style="white-space:pre">                        </span>end else if (random>400  &&  random<=1900) begin
复制代码就这样一共弄了26个if语句!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
cleusewitz
1楼-- · 2019-07-16 01:55
用case语句试试? 不过估计逻辑不会减少 好像等同 但是语句结构会简洁明了
微风lin
2楼-- · 2019-07-16 02:22
 精彩回答 2  元偷偷看……
cleusewitz
3楼-- · 2019-07-16 07:18
状态机挺方便的其实……
微风lin
4楼-- · 2019-07-16 09:40
cleusewitz 发表于 2013-5-9 12:59
状态机挺方便的其实……

能不能给个提示 ,要怎么做呢
cleusewitz
5楼-- · 2019-07-16 13:41
仔细想了下,觉得你这个不适合用状态机做,可以用二叉树法减少比较器数量:
例:
   设每100为一档,共0~1000,则可从中间取区间值进行比较。
            if(a>500)
                 if (a>800)
                        if(a>900) ......
                         else ...........
                 else if(a>700)............
                        else if(a>600).........
                               else ...........
            else if(a>300)
                        if(a>400).........
                        else ............
                  else if (a>200).........
                         else if(a>100) .........
                                else.............

这样可以减少至少一半的比较器

一周热门 更多>