在案例陈述系统Verilog中生成块

问题描述 投票:0回答:1

我想选择性地在系统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

这是正确的做法吗?综合会删除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

我希望以上代码的输出在合成后如下所示。

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

是否有使用generate 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
verilog system-verilog synthesis
1个回答
0
投票

您没有使用generate块来尝试合成的内容。当您要实例化多个模块时,最好使用生成块。

这里是理解如何使用case语句生成的很好参考,但是您也可以使用简单的for循环来进行此操作。

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

© www.soinside.com 2019 - 2024. All rights reserved.