如何在Chisel中禁用`ifdef FIRRTL_BEFORE_INITIAL`宏?
如何禁用Chisel/Firrtl生成的冗余初始化宏代码?
问题描述
我在使用Chisel生成SystemVerilog代码时,得到了大量冗余的初始化宏代码:
`ifdef ENABLE_INITIAL_REG_ `ifdef FIRRTL_BEFORE_INITIAL `FIRRTL_BEFORE_INITIAL `endif // FIRRTL_BEFORE_INITIAL initial begin automatic logic [31:0] _RANDOM[0:0]; `ifdef INIT_RANDOM_PROLOG_ `INIT_RANDOM_PROLOG_ `endif // INIT_RANDOM_PROLOG_ `ifdef RANDOMIZE_REG_INIT _RANDOM[/*Zero width*/ 1'b0] = `RANDOM; shifter_0 = _RANDOM[/*Zero width*/ 1'b0][1:0]; shifter_1 = _RANDOM[/*Zero width*/ 1'b0][3:2]; shifter_2 = _RANDOM[/*Zero width*/ 1'b0][5:4]; `endif // RANDOMIZE_REG_INIT if (reset) begin shifter_0 = 2'h0; shifter_1 = 2'h0; shifter_2 = 2'h0; end end // initial
当前使用的生成参数如下:
ChiselStage.emitSystemVerilog( gen = new top(0.U(2.W), 3), firtoolOpts = Array( "-disable-all-randomization", "-strip-debug-info", "-o", folderPath.toString + "/top.sv" ) )
请问有没有方法禁用这些宏,生成更简洁的代码?
解决方案
你需要添加两个关键的firtool选项来彻底移除这些冗余代码:
- 添加
-no-initial:直接禁止生成所有initial块,从根源上消除包含宏的初始化代码框架 - 添加
-disable-initialization:配合已有选项,彻底关闭寄存器初始化相关的逻辑生成
修改后的生成参数代码如下:
ChiselStage.emitSystemVerilog( gen = new top(0.U(2.W), 3), firtoolOpts = Array( "-disable-all-randomization", "-disable-initialization", "-no-initial", "-strip-debug-info", "-o", folderPath.toString + "/top.sv" ) )
选项说明
-no-initial:移除所有生成的initial块,直接去掉冗余的宏包裹代码-disable-initialization:禁止生成任何寄存器初始化逻辑,包括复位初始化相关的宏定义- 原有的
-disable-all-randomization仅关闭随机初始化,需要前两个选项配合才能完全清除初始化相关的冗余代码
修改后生成的SystemVerilog代码将不再包含这些冗余的宏和初始化块,代码结构会更简洁。
内容的提问来源于stack exchange,提问作者Саша Коваленко
相关产品推荐
相关产品推荐

