domo5231 发表于 2011-2-5 20:48:08

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

以下,是我改编的一段代码,其综合后生成的RTL结构相同。但是 ,按照书上的说法,if语句是指定了一个有优先级的编码逻辑,而case语句生成的逻辑是并行的,不具有优先级。那他们的RTL结构应该是有区别的。但是,在下面的代码中显示是一样的。
module sdata_if(clk,reset,x,s,y);
input clk;
input reset;
input x;
input s;
output y;

reg y;

always @(posedge clk) begin
    if(!reset) begin
           y <= 0;
       end
       else begin
           if(s == 2'b00)y<=x;
                else if(s == 2'b01)y<=x;
                else if(s == 2'b10)y<=x;
                else y<=x;
       end
end
endmodule


module sdata_case(clk,reset,x,s,y);
input clk;
input reset;
input x;
input s;
output y;

reg y;
always @(posedge clk) begin
    if(!reset) begin
           y<=0;
       end
       else begin
           case(s)
                  2'b00: y <= x;
                  2'b01: y <= x;
                  2'b10: y <= x;
                  2'b11: y <= x;
                endcase
       end
end
endmodule

这是为什么呢?

gyc1204 发表于 2011-4-3 13:09:11

现在的很多综合工具都智能化了,它能根据你列出的条件判决出电路是不是具有优先级,一般情况是,在条件全部列出的情况下,case和if综合出的效果是一样的。比如你的程序中,s总共只有四种情况,即00,01,10,11,不管是case程序还是if语句,你都把这四种情况列举出来了。所以综合出的电路应该是一样的,没有优先级的。
但是,如果你用老版本的综合工具综合,可能综合出的IF语句就有优先级了,还有,即使在所有条件都列出的情况下,也不是所有的综合工具都能将IF语句综合成没有优先级的电路的,这要看具体的综合工具,所以,建议你,如果电路是没有优先级的话,尽量用case语句实现
页: [1]
查看完整版本: 【FPGA】求助,请问VerilogHDL中的if和case的RTL结构有什么区别?谢谢了。