FPGA:Verilog HDL 4ビット加算回路のFPGAへの実装(フルアド)
前回、FPGA:Verilog HDL 4ビット加算回路のFPGAへの実装をしてみた。
入門Verilog HDL記述―ハードウェア記述言語の速習&実践の本では、次に同じ回路だが、フルアダーにより加算回路の実現が扱われている。実際にこれもVivado上でやってみた。
詳細は前回と手順が同じで、Creatするファイルが、fulladd.vと本体のadder.vの2つになる点以外は同じなので詳細は割愛する。
fulladd.vは以下
module fulladd (A, B, CIN, Q, COUT);
input A, B, CIN;
output Q, COUT;
assign Q = A^B^CIN;
assign COUT = (A&B) | (B&CIN)|(CIN &A);
endmodule
また、adder.vは以下となる
module adder2(a,b,q);
input [3:0] a,b;
output [3:0] q;
wire [3:0] cout;
fulladd add0 ( a[0],b[0], 1'b0,q[0],cout[0]);
fulladd add1 ( a[1],b[1],cout[0],q[1],cout[1]);
fulladd add2 ( a[2],b[2],cout[1],q[2],cout[2]);
fulladd add3 ( a[3],b[3],cout[2],q[3],cout[3]);
endmodule
これを前回と同じくRTL ANALYSIS-Open Elaborated Designを押し、Schematicを見てみると
これもXDCファイル(これは前回と同じ)を用意し、上位モジュールのaをswにbをbtnにqをledに変更し、FPGAにbitファイルを書き込んでやると同じ動作をする。
fulladd add0 ( sw[0],btn[0], 1'b0,led[0],cout[0]);
fulladd add1 ( sw[1],btn[1],cout[0],led[1],cout[1]);
fulladd add2 ( sw[2],btn[2],cout[1],led[2],cout[2]);
fulladd add3 ( sw[3],btn[3],cout[2],led[3],cout[3]);
わざわざこれをしているのは名前による呼び出しについて勉強するためで、
fulladd add1 ( sw[1],btn[1],cout[0],led[1],cout[1]);
この時は、
module fulladd (A, B, CIN, Q, COUT);
の引数の順番を守らないといけないが、名前での呼び出しの場合は、順番は関係なく任意になる。
fulladd add1 ( .A(sw[1]),.B(btn[1]),.CIN(cout[0]),.Q(led[1]),.COUT(cout[1]));
これだと順番は変わっていないけど、変えてもOK.実質的には、抜けがあるといやらしいので順番にすると思うけど・・・
コメント
コメントを投稿