BCD сумматор в Verilog (с воротами)

Моя цель - написать сумматор BCD в Verilog с помощью ворот. У меня есть проблемы:

1- Как я могу выбрать биты из первых выходов «четырехбитного сумматора». Моя сумма S. После того, как я использовал S в первом сумматоре, могу ли я выбрать биты, такие как S[0], или есть другой способ?

2- Как я могу указать входные данные, особенно если у меня есть модуль для four_bit_adder, и он принимает один элемент, например A (4 бита)? Я пытался указать какие-то биты, но не смог.

Например, A[3] и A[1] в некоторых ситуациях должны быть 0 или 1, но мой модуль принимает один элемент.

Моя пробная версия ниже:


`include "four_bit_adder.v"

module bcd_adder(S,A,B,Cin);

input [3:0]A,B;
input Cin;
output [3:0]S;

wire [2:0]connectors;

//four_bit_adder(S,Cout,A,B,Cin);

four_bit_adder F_A1(S,Cout,A,B,Cin);

and(connectors[0],S[3],S[2]);

and(connectors[1],S[3],S[1]);

or(connectors[2],connectors[1],connectors[0],Cout);

//four_bit_adder F_A2();

endmodule



person Tolga    schedule 08.05.2020    source источник


Ответы (1)


Я добавил Cout выход к вашему bcd_adder, управляемый вашими or воротами. Я изменил connectors на [1:0].

Я создал провод для двоичной суммы (sumb), управляемый вашим 1-м 4-битным сумматором. Это отличается от вашей суммы BCD S. sumb подключен к A входу 2-го 4-битного сумматора.

Для входа B во второй сумматор я объединяю 4 бита следующим образом:

{1'b0,Cout,Cout,1'b0}

Вот завершенный модуль:

module bcd_adder(S,Cout,A,B,Cin);

input [3:0]A,B;
input Cin;
output [3:0]S;
output Cout;

wire [1:0]connectors;
wire [3:0]sumb;
wire coutb;
wire cout2; // floating

four_bit_adder F_A1 (sumb,coutb,A,B,Cin);
four_bit_adder F_A2 (S,cout2,sumb,{1'b0,Cout,Cout,1'b0},1'b0);

and(connectors[0],sumb[3],sumb[2]);
and(connectors[1],sumb[3],sumb[1]);
or (Cout,connectors[1],connectors[0],coutb);

endmodule
person toolic    schedule 08.05.2020