Chisel 3でVerilog inoutのサポートをいくつか行っていますが、そのAPIが完全に完成するまでは、inoutから入力、出力、およびある方向に変換するVerilogラッパーを作成する必要があります。私が使用していない別のインターフェイスを公開することができ、単純なラッパーで
module Inout(
input clock,
input write,
inout [31:0] data
);
reg [31:0] value;
assign data = (write) ? 32'dz : value;
always @(posedge clock) begin
if (write)
value <= data;
else
value <= value;
end
endmodule
:たとえば
は、私はいくつかのレジスタから設定するために使用されるか、または読み取ることができinoutのピンでいくつかのVerilogを持っていると言いますINOUT:このラッパーインタフェースはBlackBoxのようにチゼルの設計に使用することができる
module InoutWrapper(
input clock,
input write,
input [31:0] dataIn,
output [31:0] dataOut
);
wire [31:0] bus;
assign bus = (write)? dataIn : 32'dz;
assign dataOut = bus;
Inout mod (
.clock(clock),
.write(write),
.data(bus)
);
endmodule
:
class InoutWrapper extends BlackBox {
val io = IO(new Bundle {
val clock = Input(Clock())
val write = Input(Bool())
val dataIn = Input(UInt(32.W))
val dataOut = Output(UInt(32.W))
})
}
そして、ここではそれが機能することを示すためにボーナスの簡単な健全性テストです:
class InoutTester extends BasicTester {
val mod = Module(new InoutWrapper)
val (cycle, done) = Counter(true.B, 4)
when (done) { stop(); stop() }
mod.io.clock := this.clock // BlackBoxes require explicit clock assignment
mod.io.write := false.B // default assignments
mod.io.dataIn := "hdeadbeef".U
when (cycle === 1.U) {
mod.io.write := true.B
mod.io.dataIn := 123.U
}
when (cycle === 2.U) {
assert(mod.io.dataOut === 123.U)
}
}
inoutのポートは、デザインの一番上にある場合、あなたは、デザインのトップのラッパーの似たようなものを作成することができます。