BCD сумматор в Verilog (с воротами) - PullRequest
1 голос
/ 08 мая 2020

Моя цель - кодировать сумматор 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


1 Ответ

1 голос
/ 08 мая 2020

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

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

Для входа B 2-го сумматора я объединяю 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
...