Я хочу реализовать сумматор модулей, когда sel=0
, и вычитатель модуля при sel=1
. Я узнал, что генерация может использоваться для условного вызова модуля внутри другого модуля.условно вызывать модуль с использованием case 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 бит в ширину. и необходимо выполнить сложение или умножение с плавающей запятой на основе case case (то есть условно, как при sel == 0, добавление F.P и при выполнении умножения sel == 1 F.P)! – Neha
надеюсь, что вы поняли, о чем я прошу! – Neha
@Neha Это 'sel' _static_ или _dynamic_? Если он был статичным, вы можете использовать оператор 'generate', как вы пытались сделать. Но похоже, что 'sel' является динамическим, потому что это вход в' checker'. В этом случае, как сказал @rahulcodesinverilog, вы не можете использовать оператор 'generate'; вместо этого вы _have_ в _instantiate_ (не «вызываете») оба модуля и используете мультиплексор для переключения между их выходами (как я сделал). Я не совсем понимаю, зачем нужно использовать оператор 'case', но если вы должны использовать statememt' case', тогда замените мой 'assign' блоком' always', содержащим один. –