简体   繁体   English

Verilog 中的 BCD 加法器(带门)

[英]BCD adder in Verilog (with gates)

My goal is coding a BCD adder in Verilog with gates.我的目标是用门在 Verilog 中编写 BCD 加法器。 I have some issues:我有一些问题:

1- How can I select bits from first "four bit adders" outputs. 1-如何从第一个“四位加法器”输出中获得 select 位。 My sum is S .我的总和是S After I used S in first adder, can I select bits like S[0] or is there another way?在第一个加法器中使用S后,我可以使用 select 位,如S[0]还是有其他方法?

2- How can I specify inputs, especially if I have a module for four_bit_adder and it takes one element like A (4 bits)? 2- 如何指定输入,特别是如果我有一个用于four_bit_adder的模块并且它需要一个像A (4 位)这样的元素? I tried to specify some bits, but I couldn't handle it.我试图指定一些位,但我无法处理它。

For example, A[3] and A[1] needed to be 0 or 1 regarding the some situations, but my module takes one element.例如,对于某些情况, A[3]A[1]需要为 0 或 1,但我的模块需要一个元素。

My trial is below:我的试验如下:


`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


I added a Cout output to your bcd_adder , driven by your or gate.我在您的 bcd_adder 中添加了一个Cout bcd_adder ,由您的or门驱动。 I changed connectors to [1:0] .我将connectors更改为[1:0]

I created a wire for the binary sum ( sumb ), driven by your 1st 4-bit adder.我为二进制和 ( sumb ) 创建了一条线,由您的第一个 4 位加法器驱动。 This is different from your BCD sum S .这与您的 BCD 总和S不同。 sumb is connected to the A input of the 2nd 4-bit adder. sumb连接到第二个 4 位加法器的A输入。

For the B input to the 2nd adder, I concatenate 4 bits like this:对于第二个加法器的B输入,我像这样连接 4 位:

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

Here is the completed module:这是完成的模块:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM