简体   繁体   English

在case语句系统verilog中生成块

[英]Generate block inside case statement system verilog

I want to selectively compile below code in system verilog:我想在系统verilog中选择性地编译以下代码:

always_comb begin
out = 0;
case(exp)
state_1: out = a*b;
state_2: out = b|c;
state_3: out = c^d;
endcase
end

Is this the right way of doing it?这是正确的做法吗? Will the state_3 code be removed in synthesis? state_3 代码会在综合中被移除吗?

parameter PARAM_1 = 1'b1;  
parameter PARAM_2 = 1'b1;
parameter PARAM_3 = 1'b0;

always_comb begin
out = 0;
case(exp)
state_1: if (PARAM_1 == 1'b1) out = a*b;
state_2: if (PARAM_2 == 1'b1) out = b|c;
state_3: if (PARAM_3 == 1'b1) out = c^d;
endcase
end

I want the output of the above code be like below after synthesis.我希望上述代码的 output 综合后如下所示。

always_comb begin
out = 0;
case(exp)
state_1: out = a*b;
state_2: out = b|c;
endcase
end

Is there a way of doing the same using generate block?有没有办法使用生成块做同样的事情? The below code won't work since there are multiple driver for out varaible in different block.下面的代码将不起作用,因为在不同的块中有多个驱动程序用于输出变量。

parameter PARAM_1 = 1'b1;  
parameter PARAM_2 = 1'b1;
parameter PARAM_3 = 1'b0;

generate 
if (PARAM_1 ==1'b1) begin
    always_comb begin
    case(exp)
    state_1: out = a*b;
    default : out = 0;
    endcase
 end
 endgenerate


generate 
if (PARAM_2 ==1'b1) begin
    always_comb begin
    case(exp)
    state_1: out = b|c;
    default : out = 0;
    endcase
 end
 endgenerate


generate 
if (PARAM_3 ==1'b1) begin
    always_comb begin
    case(exp)
    state_1: out = c^d;
    default : out = 0
    endcase
 end
 endgenerate

There is no use of using a generate block for what you are trying to synthesize.对于您尝试合成的内容,使用生成块是没有用的。 Generate blocks are used best when you want to instantiate multiple modules.当您想要实例化多个模块时,最好使用生成块。

Here is a good reference for understanding how you can use generate with case statements, but you can do this with simple for loop too.这是一个很好的参考,可以帮助您了解如何将 generate 与 case 语句一起使用,但您也可以使用简单的 for 循环来做到这一点。

https://www.verilogpro.com/verilog-generate-configurable-rtl/ https://www.verilogpro.com/verilog-generate-configurable-rtl/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM