verilog - 模加法器输出显示没有变化

标签 verilog

输出波形显示 sumdifburrowout 没有变化。即使增加延迟时间后,输出仍然没有变化。这应该像 mod 加法器一样工作,例如 add 10 和 2,并且 mod 3 给出输出零。

代码

module Mod_adder(a,b,p,out);
input [3:0] a;
input [3:0] b;
input [3:0] p;
output [3:0] out;
wire [3:0] sum;
wire cout;
wire burrow;
wire [3:0] dif;
ripple_carry_adder r1(a,b,sum,cout,1'b0);
ripple_carry_adder r2(sum,~p,dif,burrow,1'b1); 
repeat_sum rs1(dif,burrow,sum);
outval o1(sum,burrow,out);
endmodule

module full_adder(in0, in1, cin, out, cout);
input in0, in1, cin;
output out, cout;
assign out = in0 ^ in1 ^ cin;
assign cout = ((in0 ^ in1) & cin) | (in0 & in1);
endmodule


module ripple_carry_adder(in0, in1, out, cout,cin);
input [3:0] in0;
input [3:0] in1;
output [3:0] out;
output cout;
input cin;
wire c1, c2, c3;
full_adder fa0(in0[0], in1[0], cin, out[0], c1);
full_adder fa1(in0[1], in1[1], c1, out[1], c2);
full_adder fa2(in0[2], in1[2], c2, out[2], c3);
full_adder fa3(in0[3], in1[3], c3, out[3], cout);
endmodule

module repeat_sum(dif,burrow,sum);
input [3:0] dif;
input burrow;
output [3:0] sum;
assign sum = (burrow == 1'b0) ? dif:sum;
endmodule

module outval(sum,burrow,out);
input [3:0] sum;
input burrow;
output [3:0] out;
assign out = (burrow == 1'b1) ? sum:out;
endmodule

测试台

 ` include "MOD_ADDER.V"
   module Mod_adder_tb; 

   reg [3:0] a; 
   reg [3:0] b;
   reg [3:0] p;
   wire [3:0] out;  // wires

 // Instantiate the module to be tested
  Mod_adder MA1(a,b,p,out);

  initial begin    // initial block
   $dumpfile("Test_Full_Adder.vcd");
   $dumpvars(1, MA1);
    a=4'b1010; 
    b=4'b0100; 
    p=4'b0011; 
    #100;
    end // end of initial block
    endmodule

最佳答案

我发现两个主要问题。

由于驱动程序争用,您的 out 测试平台信号未知 (X)。例如,Mod_adder 中的 sum 信号有多个驱动程序:来自 r1 实例和来自 rs1 实例。 r1out 输出和 rs1sum 输出均驱动 sum 电线。您不应从 2 个不同的模块实例驱动相同的信号。您可以将其中一个 sum 信号重命名为唯一的名称,例如 sum_rs1 并声明一条新的 wire

wire [3:0] sum, sum_rs1;

此外,您还有组合反馈循环。例如:

assign out = (burrow == 1'b1) ? sum:out;

out 信号不应同时位于连续分配的左侧和右侧。

关于verilog - 模加法器输出显示没有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68161442/

相关文章:

verilog - 伊卡洛斯 Verilog 警告 $readmemh : Standard inconsistency, 以下 1364-2005

verilog - FPGA 语言的编译器是否执行优化?

Verilog LRM 非确定性

slice - (System)从任意位置切出的Verilog位

arrays - 未封装端口中尺寸说明符的顺序

tcl - 如何使用 verilog 运行 tcl proc 函数?

verilog - 在 verilog 中四舍五入一个数字

verilog - 如何使用Verilog和Altera DE2板的VGA打印数字?

arrays - UVM : How to connect multi dimensional arrays in virtual interface?

verilog - Verilog 中的简单状态机是什么样的?