メモリマスターになるにあたってverilogのinout制御は避けられないはず。 そこでここではわかっている範囲の使いかたを紹介します。 まちがっていれば、ばんばん指摘してくださいませ。
FPGA側はデータバスからデータを読み込む時はHi-Zにする。 一方ターゲット側はFPGAがデータバスに書き込みを行っている時に出力がHi-Zでなければいけない。
verilogでは以下のようにかけるはず。
module biDirection( bus, readWrite); inout bus; input readWrite; // 0 = Write, 1 = Read
assign bus = (readWrite) ? 1'bz : 1'b1 // readWriteがHighならHi-Z,そうでなれば値を出力
endmodule
testベンチは次の感じ。
'timescale 1ns/1ps module biDirection_test; wire bus; reg readWrite; reg bus_register;
parameter STEP=10
assign bus = bus_register;
initial begin readWrite=1; bus_register=1'b0;
#(STEP*10); bus_register=1'bz; readWrite=0;
#(STEP*10); bus_register=1'b0; readWrite = 1;
#(STEP * 10); $finish; end
biDirection BD( .bus( bus), .readWrite( readWrite));
endmodule