[[ASAP Top]]

verilogのinout制御はメモリ制御に深くかかわるはず。
そこでここではわかっている範囲の使いかたを紹介します。
まちがっていれば、ばんばん指摘してくださいませ。

FPGA側はデータバスからデータを読み込む時はHi-Zにする。
一方ターゲット側はFPGAがデータバスに書き込みを行っている時に出力がHi-Zでなければいけない。

verilogでは以下のようにかけるはず。

module biDirection( bus, readWrite);
 module biDirection( bus, readWrite);
  inout bus;
  input readWrite; // 0 = Write, 1 = Read
 assign bus = (readWrite) ? 1'bz : 1'b1 // readWriteがHighならHi-Z,そうでなれば値を出力
 endmodule

inout bus;

input readWrite; // 0 = Write, 1 = Read

assign bus = (readWrite) ? 1'bz : 1'b1 // readWriteがHighならHi-Z,そうでなれば値を出力

endmodule

testベンチは次の感じ。

'timescale 1ns/1ps
 '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

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



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS