sel=0
とモジュール減算器を実装する場合、sel=1
の場合はモジュール加算器を実装します。条件付きで別のモジュール内のモジュールを呼び出すためにgenerateを使うことができることを知りました。case文を使用して条件付きでモジュールを呼び出す
3. module checker(o,a,b,sel);
4. output reg o;
5. input a,b,sel;
6. [email protected](*)
7. begin
8. generate
9. case (sel)
10. 1'b0 : adder a1(.sum(o),.a(a),.b(b));
11. 1'b1 : subtractor s1(.diff(o),.a(a),b(b));
12. endcase
13. endgenerate
14. end
15. endmodule
//errors shown are:
D:/FILES/verilog files/Neha/checker.v" Line 8: Syntax error near "generate".
D:/FILES/verilog files/Neha/checker.v" Line 11: Port connections cannot be mixed ordered and named.
D:/FILES/verilog files/Neha/checker.v" Line 13: Syntax error near "endgenerate".
D:/FILES/verilog files/Neha/checker.v" Line 10: Instantiation is not allowed in sequential area except checker instantiation.
D:/FILES/verilog files/Neha/checker.v" Line 11: Instantiation is not allowed in sequential area except checker instantiation
ありがとうございます!
これは単なる例で、32ビット幅の入力と出力が必要です。 (すなわち、sel == 0、F.P加算が実行され、かつ、sel == 1 F.P乗算が実行される場合のように条件付きで)浮動小数点加算または乗算をcase文に基づいて行う必要がある! – Neha
私は頼んでいることを理解しています! – Neha
@Nehaこれは 'sel'_static_か_dynamic_ですか?静的だった場合は、実行しようとしたときに 'generate'文を使用することができます。しかし、それは 'checker'への入力であるため、' sel'は動的であるように見えます。この場合、@rahulcodesinverilogは言ったように、 'generate'文を使うことはできません。代わりに、両方のモジュールを_have_ _instantiate_(呼び出していない)にし、マルチプレクサを使用して出力を切り替えます(これまでのように)。なぜ 'case'文を使う必要があるのかよく分かりませんが、' case'文を使う必要がある場合は、 'assign'を' always'ブロックに置き換えてください。 –