外联RTL
class adder(width: Int) extends BlackBox { addGeneric("WIDTH", width) val io = new Bundle { val ain = in UInt(width bits) val bin = in UInt(width bits) val add_out = out UInt(width bits) } noIoPrefix() addRTLPath("rtl/adder.v") } class top extends Module { val io = new Bundle { val ain = in UInt(16 bits) val bin = in UInt(16 bits) val add_out = out UInt(16 bits) } noIoPrefix() var adder0 = new adder(16) io.ain <> adder0.io.ain io.bin <> adder0.io.bin io.add_out <> adder0.io.add_out }
module top ( input [15:0] ain, input [15:0] bin, output [15:0] add_out ); wire [15:0] adder0_add_out; adder #( .WIDTH(16) ) adder0 ( .ain (ain[15:0] ), //i .bin (bin[15:0] ), //i .add_out (adder0_add_out[15:0] ) //o ); assign add_out = adder0_add_out; endmodule
内联RTL
class adder(width: Int) extends BlackBox { addGeneric("WIDTH", width) val io = new Bundle { val ain = in UInt(width bits) val bin = in UInt(width bits) val add_out = out UInt(width bits) } noIoPrefix() setInlineVerilog( """module adder #( | parameter WIDTH = 16 |) ( | input [WIDTH-1:0] ain , | input [WIDTH-1:0] bin , | output reg [WIDTH-1:0] add_out |); | |always @(*) begin | add_out = ain + bin; |end | |endmodule """.stripMargin) } class top extends Module { val io = new Bundle { val ain = in UInt(16 bits) val bin = in UInt(16 bits) val add_out = out UInt(16 bits) } noIoPrefix() var adder0 = new adder(16) io.ain <> adder0.io.ain io.bin <> adder0.io.bin io.add_out <> adder0.io.add_out }
module adder #( parameter WIDTH = 16 ) ( input [WIDTH-1:0] ain , input [WIDTH-1:0] bin , output reg [WIDTH-1:0] add_out ); always @(*) begin add_out = ain + bin; end endmodule
module top ( input [15:0] ain, input [15:0] bin, output [15:0] add_out ); wire [15:0] adder0_add_out; adder #( .WIDTH(16) ) adder0 ( .ain (ain[15:0] ), //i .bin (bin[15:0] ), //i .add_out (adder0_add_out[15:0] ) //o ); assign add_out = adder0_add_out; endmodule
生活不止眼前的苟且,还有诗和远方
本文链接: https://dxsm.github.io/p/spinalhdl-blackbox.html
版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!