打印

full_case避免综合出锁存器?

[复制链接]
2966|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 笑溜溜+ 于 2012-7-27 21:42 编辑

各位路过的大虾,帮我指导一下。书中说“使用full_case避免综合出锁存器”,下面是我做的程序,一个没有synthesis full_case语句,另一个有。但是我用quartus综合后所用的逻辑单元依然一样,综合后的电路也是一样。不是synthesis full_case可避免综合出锁存器吗?怎么结果还是一样?
module datadistributor(datain,sel,enable,a,b,c,d);
input datain;
input[1:0] sel;
input enable;
output a;
output c;
output d;
output b;
reg a,b,c,d;
always @(datain or enable or sel)
   begin
      if(enable==1'b1)
          begin
             case(sel)
                2'b00:a<=datain;
                2'b01:b<=datain;
                2'b10:c<=datain;
                2'b11:d<=datain;
                default:a<=datain;
              endcase
          end
       else
          begin
             a<=1'bz;
             b<=1'bz;
             c<=1'bz;
             d<=1'bz;
          end
   end  
endmodule






module datadistributor_1(datain,sel,enable,a,b,c,d);

input datain;
input[1:0] sel;
input enable;
output a;
output c;
output d;
output b;

reg a,b,c,d;
always @(datain or enable or sel)
   begin
      if(enable==1'b1)
          begin
             case(sel)         //synthesis full_case
                2'b00:a<=datain;
                2'b01:b<=datain;
                2'b10:c<=datain;
                2'b11:d<=datain;
                default:a<=datain;
              endcase
          end
       else
          begin
             a<=1'bz;
             b<=1'bz;
             c<=1'bz;
             d<=1'bz;
          end
   end
   
   
endmodule

相关帖子

沙发
GoldSunMonkey| | 2012-7-27 22:23 | 只看该作者
2'b00:a<=datain;
                2'b01:b<=datain;
                2'b10:c<=datain;
                2'b11:d<=datain;
                default:a<=datain;
这个是4个变量赋值,没有全部赋值啊

使用特权

评论回复
板凳
笑溜溜+|  楼主 | 2012-7-28 22:05 | 只看该作者
2# GoldSunMonkey
对,是没有全部赋值。不是case语句中加入了synthesis full_case语句后会减少锁存器的产生。但我综合后综合电路依然一样

使用特权

评论回复
地板
GoldSunMonkey| | 2012-7-29 15:23 | 只看该作者
那就综合器不识别你的语句。

使用特权

评论回复
5
GoldSunMonkey| | 2012-7-29 15:24 | 只看该作者
不要什么事情都相信综合器

使用特权

评论回复
6
笑溜溜+|  楼主 | 2012-7-29 20:54 | 只看该作者
5# GoldSunMonkey
不是这样,我用的其它的例子,也是同样加了这一条语句,最后显示没有锁存器,逻辑单元比原来少了

使用特权

评论回复
7
GoldSunMonkey| | 2012-7-30 10:12 | 只看该作者
那我不知道了。

使用特权

评论回复
8
GoldSunMonkey| | 2012-7-30 10:14 | 只看该作者
你都说那么准确,代码本身没问题,综合器也没问题

反正我看不出来有什么问题。

使用特权

评论回复
9
笑溜溜+|  楼主 | 2012-7-31 10:55 | 只看该作者
8# GoldSunMonkey
谢谢,猴哥。各位路过大仙,帮忙给看看

使用特权

评论回复
10
GoldSunMonkey| | 2012-7-31 17:58 | 只看该作者
8# GoldSunMonkey  
谢谢,猴哥。各位路过大仙,帮忙给看看
笑溜溜+ 发表于 2012-7-31 10:55
不可能解决。这个问题,我都给你说了,你不信。

使用特权

评论回复
11
aikimi7| | 2012-12-24 10:45 | 只看该作者
第一个程序里面default:a<=datain去掉就能出现你要的效果了,赋值不全就会产生不必要的锁存器,然后你再增加full_case语句综合后会去掉锁存器。。。你的问题现在是会两个程序里都指定了default,考虑了所有的情况,那么增加full_case就没有意义了。

使用特权

评论回复
12
aikimi7| | 2012-12-24 10:45 | 只看该作者
本帖最后由 aikimi7 于 2012-12-24 16:13 编辑

我研究下了,发现我说的不正确。你这个例子产生的锁存器是没有办法用full_case来去掉的,猴哥说的也没错,原因你自己看下面的文献说的。

使用特权

评论回复
13
aikimi7| | 2012-12-24 16:24 | 只看该作者
Quartus中验证过了

使用特权

评论回复
14
GoldSunMonkey| | 2012-12-24 22:01 | 只看该作者
aikimi7 发表于 2012-12-24 16:24
Quartus中验证过了

希望在ISE或者VIVADO里面验证

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

89

帖子

0

粉丝