使用 4 位全加器除法并在需要时调用模块
Division using 4-bit Full Adder and Calling the module whenever it is required
我正在尝试构建 ALU。
我分别使用半加器和半减器构建了一个 4 位全加器和一个 4 位全减器。
module fullAdder4bit(output [3:0] sum, output c_out, input [3:0] a, b, input c_in);
wire [2:0] c;
fullAdder FA1(sum[0], c[0], a[0], b[0], c_in);
----
----
----
----
endmodule
而且,同样地,我为 Full Subtractor 写作。
使用这些,我试图构建一个分区,但我不知道如何使用上面的全加器编写分区。如果有人知道如何为 Division 写作,请告诉我。
当用户给出A+B或A-B时,应该显示相应的输出。所以我在需要的时候调用相应的模块,就像这样
module logic(
output [3:0] AdderSum,
output AdderC_out,
input [3:0] AdderO1, AdderO2,
input AdderC_in, AdderClk
);
always@(posedge AdderClk)
begin
fullAdder4bit FAbit (AdderSum[3:0] , AdderC_out , AdderO1[3:0] , AdderO2[3:0] , AdderC_in);
end
endmodule
// 4-bit Full ADDER Syntax
// module fullAdder4bit(output [3:0] sum, output c_out, input [3:0] a, b, input c_in);
但是它给出了错误:
Instantiation is not allowed in sequential area except checker instantiation
实例化应该在 always 块之外。在 AdderClk
的每个上升沿,您可以将结果从全加器加载到寄存器。
module logic(
output [3:0] AdderSum,
output AdderC_out,
input [3:0] AdderO1, AdderO2,
input AdderC_in, AdderClk
);
reg [3:0] sum_r = 4'd0;
reg c_r = 1'b0;
wire [3:0] sum_b;
wire c_b;
fullAdder4bit FAbit (sum_b, c_b, AdderO1, AdderO2, AdderC_in);
always@(posedge AdderClk)
begin
sum_r <= sum_b;
c_r <= c_b;
end
assign AdderSum = sum_r;
assign AdderC_out = c_r;
endmodule
代码可以简化。我想展示它背后的想法。使用logic described @Math.
可以实现除法运算
PS 我会更改模块名称,因为 logic
是 SystemVerilog 中的关键字。
我正在尝试构建 ALU。
我分别使用半加器和半减器构建了一个 4 位全加器和一个 4 位全减器。
module fullAdder4bit(output [3:0] sum, output c_out, input [3:0] a, b, input c_in);
wire [2:0] c;
fullAdder FA1(sum[0], c[0], a[0], b[0], c_in);
----
----
----
----
endmodule
而且,同样地,我为 Full Subtractor 写作。
使用这些,我试图构建一个分区,但我不知道如何使用上面的全加器编写分区。如果有人知道如何为 Division 写作,请告诉我。
当用户给出A+B或A-B时,应该显示相应的输出。所以我在需要的时候调用相应的模块,就像这样
module logic(
output [3:0] AdderSum,
output AdderC_out,
input [3:0] AdderO1, AdderO2,
input AdderC_in, AdderClk
);
always@(posedge AdderClk)
begin
fullAdder4bit FAbit (AdderSum[3:0] , AdderC_out , AdderO1[3:0] , AdderO2[3:0] , AdderC_in);
end
endmodule
// 4-bit Full ADDER Syntax
// module fullAdder4bit(output [3:0] sum, output c_out, input [3:0] a, b, input c_in);
但是它给出了错误:
Instantiation is not allowed in sequential area except checker instantiation
实例化应该在 always 块之外。在 AdderClk
的每个上升沿,您可以将结果从全加器加载到寄存器。
module logic(
output [3:0] AdderSum,
output AdderC_out,
input [3:0] AdderO1, AdderO2,
input AdderC_in, AdderClk
);
reg [3:0] sum_r = 4'd0;
reg c_r = 1'b0;
wire [3:0] sum_b;
wire c_b;
fullAdder4bit FAbit (sum_b, c_b, AdderO1, AdderO2, AdderC_in);
always@(posedge AdderClk)
begin
sum_r <= sum_b;
c_r <= c_b;
end
assign AdderSum = sum_r;
assign AdderC_out = c_r;
endmodule
代码可以简化。我想展示它背后的想法。使用logic described @Math.
可以实现除法运算PS 我会更改模块名称,因为 logic
是 SystemVerilog 中的关键字。