搜索
bottom↓
回复: 1

【FPGA】求助,请问VerilogHDL中的if和case的RTL结构有什么区别?谢谢了。

[复制链接]

出0入0汤圆

发表于 2011-2-5 20:48:08 | 显示全部楼层 |阅读模式
以下,是我改编的一段代码,其综合后生成的RTL结构相同。但是 ,按照书上的说法,if语句是指定了一个有优先级的编码逻辑,而case语句生成的逻辑是并行的,不具有优先级。那他们的RTL结构应该是有区别的。但是,在下面的代码中显示是一样的。
module sdata_if(clk,reset,x,s,y);
  input clk;
  input reset;
  input [3:0] x;
  input [1:0] s;
  output y;
  
  reg y;
  
  always @(posedge clk) begin
    if(!reset) begin
           y <= 0;
         end
         else begin
           if(s == 2'b00)y<=x[0];
                else if(s == 2'b01)y<=x[1];
                else if(s == 2'b10)y<=x[2];
                else y<=x[3];
         end
  end
endmodule


module sdata_case(clk,reset,x,s,y);
  input clk;
  input reset;
  input [3:0] x;
  input [1:0] s;
  output y;
  
  reg y;
  always @(posedge clk) begin
    if(!reset) begin
           y<=0;
         end
         else begin
           case(s)
                  2'b00: y <= x[0];
                  2'b01: y <= x[1];
                  2'b10: y <= x[2];
                  2'b11: y <= x[3];
                endcase
         end
  end
endmodule

这是为什么呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-4-3 13:09:11 | 显示全部楼层
现在的很多综合工具都智能化了,它能根据你列出的条件判决出电路是不是具有优先级,一般情况是,在条件全部列出的情况下,case和if综合出的效果是一样的。比如你的程序中,s总共只有四种情况,即00,01,10,11,不管是case程序还是if语句,你都把这四种情况列举出来了。所以综合出的电路应该是一样的,没有优先级的。
但是,如果你用老版本的综合工具综合,可能综合出的IF语句就有优先级了,还有,即使在所有条件都列出的情况下,也不是所有的综合工具都能将IF语句综合成没有优先级的电路的,这要看具体的综合工具,所以,建议你,如果电路是没有优先级的话,尽量用case语句实现
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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