Verilog 中的 BCD 加法器(带门)
BCD adder in Verilog (with gates)
我的目标是使用门在 Verilog 中编写 BCD 加法器。我有一些问题:
1- 我如何从第一个 "four bit adders" 输出中 select 位。我的总和是S
。在第一个加法器中使用 S
后,我可以 select 位像 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
我向您的 bcd_adder
添加了一个 Cout
输出,由您的 or
门驱动。我把 connectors
改成 [1:0]
.
我为二进制和 (sumb
) 创建了一条线路,由您的第一个 4 位加法器驱动。这与您的 BCD 和 S
不同。 sumb
连接到第 2 个 4 位加法器的 A
输入。
对于第二个加法器的 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
我的目标是使用门在 Verilog 中编写 BCD 加法器。我有一些问题:
1- 我如何从第一个 "four bit adders" 输出中 select 位。我的总和是S
。在第一个加法器中使用 S
后,我可以 select 位像 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
我向您的 bcd_adder
添加了一个 Cout
输出,由您的 or
门驱动。我把 connectors
改成 [1:0]
.
我为二进制和 (sumb
) 创建了一条线路,由您的第一个 4 位加法器驱动。这与您的 BCD 和 S
不同。 sumb
连接到第 2 个 4 位加法器的 A
输入。
对于第二个加法器的 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