差動IOバッファのインスタンシエート
FPGAのIOバッファはLVDSなどの差動信号も使える。RTL記述上は1つの信号のままにしておいても、ピンアサインのときに自動的にP,Nの2個のピンにアサインされるようであるが、RTL記述の入出力ポートと実際のピン名を1対1にするには、差動IOバッファをインスタンシエートする。
module (input din_p ,input din_n ,output dout_p ,output dout_n ...); /* Xilinxの差動IOバッファ */ IBUFDS ibufds_din(.O(din),.I(din_p),.IB(din_n)); OBUFDS obufds_dout(.O(dout_p),.OB(dout_n),.I(dout)); |
多ビットの場合はビット数分だけインスタンシエートしなければならないので、generate文を使うとよい。
genvar i; generate for(i=0; i<=7; i=i+1) begin: diff_din IBUFDS ibufds_din(.O(din[i]),.I(din_p[i]),.IB(din_n[i])); end endgenerate |
generate文は、たぶん論理合成の前処理としてコードを書き下してるのだと思う。
IBUFDS ibufds_din0(.O(din[0]),.I(din_p[0]),.IB(din_n[0])); IBUFDS ibufds_din1(.O(din[1]),.I(din_p[1]),.IB(din_n[1])); ... IBUFDS ibufds_din6(.O(din[6]),.I(din_p[6]),.IB(din_n[6])); IBUFDS ibufds_din7(.O(din[7]),.I(din_p[7]),.IB(din_n[7])); |