Debugging 程序块和Systemverilog测试台出错:
我已经粘贴了我的verilog设计、systemverilog测试台和错误。您可以将它们粘贴到edaplayder.com上并进行模拟。请给我建议,以消除错误。 我认为问题在程序块中,但对我来说似乎并没有问题Debugging 程序块和Systemverilog测试台出错:,debugging,verilog,verification,system-verilog,Debugging,Verilog,Verification,System Verilog,我已经粘贴了我的verilog设计、systemverilog测试台和错误。您可以将它们粘贴到edaplayder.com上并进行模拟。请给我建议,以消除错误。 我认为问题在程序块中,但对我来说似乎并没有问题 //########################## D E S I G N ########################################## `timescale 1 ns / 1 ns module addsub_cy ( opa_i, opb_i
//########################## D E S I G N ##########################################
`timescale 1 ns / 1 ns
module addsub_cy (
opa_i,
opb_i,
addsub_i,
cy_i,
cy_o,
rslt_o);
parameter DWIDTH = 4;
input [DWIDTH - 1:0] opa_i;
input [DWIDTH - 1:0] opb_i;
input addsub_i; // It will decide addition or subtracton. 1 for addition and 0 for subtraction.
input cy_i; // carry_input
output cy_o;
output [DWIDTH - 1:0] rslt_o;
// --
reg cy_o;
reg [DWIDTH - 1:0] rslt_o;
reg [DWIDTH:0] p_addsub_v_a; //temporary register to store input a Extra one bit will be used to prepend carry bit.
reg [DWIDTH:0] p_addsub_v_b; //temporary register to store input b
reg [DWIDTH + 1:0] p_addsub_v_result; //temporary register to store result.
// process p_addsub
always @(opa_i or opb_i or addsub_i or cy_i)
begin : p_addsub
p_addsub_v_a[DWIDTH:1] = opa_i;
p_addsub_v_b[DWIDTH:1] = opb_i;
if (addsub_i === 1'b 1)
begin
p_addsub_v_a[0] = 1'b 1;
p_addsub_v_b[0] = cy_i;
p_addsub_v_result = p_addsub_v_a + p_addsub_v_b;
end
else
begin
p_addsub_v_a[0] = 1'b 0;
p_addsub_v_b[0] = cy_i;
p_addsub_v_result = p_addsub_v_a - p_addsub_v_b;
end
cy_o <= p_addsub_v_result[DWIDTH + 1];
rslt_o <= p_addsub_v_result[DWIDTH:1];
end
// purpose: Simple adder/subtractor with carry/borrow
// type : combinational
// inputs : opa_i, opb_i, addsub_i
// outputs: cy_o, rslt_o
// --
endmodule // module addsub_cy
//###############################################################################
//########################## T E S T B E N C H ##########################################
`timescale 1 ns / 1 ns
module addsub_cy_tb ();
parameter DWIDTH = 4;
reg [DWIDTH - 1:0] opa_i;
reg [DWIDTH - 1:0] opb_i;
reg addsub_i;
reg cy_i;
wire cy_o;
wire [DWIDTH - 1:0] rslt_o;
//int count = 100;
addsub_cy u0 (
.opa_i(opa_i),
.opb_i(opb_i),
.addsub_i(addsub_i),
.cy_i(cy_i),
.cy_o(cy_o),
.rslt_o(rslt_o)
);
//Instantiating program block
test test_instance (addsub_i, opa_i, opb_i, cy_o, rslt_o);
endmodule
parameter DWIDTH = 4;
program test(input logic addsub_i, input logic [DWIDTH - 1:0] opa_i, input logic [DWIDTH - 1:0] opb_i, output wire cy_o, output wire [DWIDTH - 1:0] rslt_o );
//ADD CARRY INPUT cy_i
initial begin
opa_i = 4'h0;
opb_i = 4'h5;
//static int count = 100;
$display ("ADD=1/SUB=0 INPUT_A INPUT_B CARRY_OUT RESULT");
//end
//initial begin
repeat (100) begin
#5 opa_i = opa_i + 10;
opb_i = opb_i + 5;
$display ("%t %b \t %b \t %b \t %b \t %b \t %b", $time, addsub_i, opa_i, opb_i, cy_o, rslt_o);
end
end
endprogram
//#######################################################################################
//代码##########################################
`时间刻度1纳秒/1纳秒
模块地址(
奥帕尤一世,
opb_i,
addsub_i,
西一,
西澳,
rslt_o);
参数DWIDTH=4;
输入[DWIDTH-1:0]opa_i;
输入[DWIDTH-1:0]opb_i;
输入addsub_i;//它将决定加法或减法。1表示加法,0表示减法。
输入cy_i;//进位输入
输出电流;
输出[DWIDTH-1:0]rslt\u o;
// --
雷格西奥;
注册[DWIDTH-1:0]rslt\U o;
注册[DWIDTH:0]p_addsub_v_a//临时寄存器用于存储输入,额外的一位将用于前置进位。
reg[DWIDTH:0]p_addsub_v_b//用于存储输入b的临时寄存器
reg[DWIDTH+1:0]p_addsub_v_结果//用于存储结果的临时寄存器。
//过程p_addsub
始终@(opa_i或opb_i或addsub_i或cy_i)
开始:p_addsub
p_addsub_v_a[DWIDTH:1]=opa_i;
p_addsub_v_b[DWIDTH:1]=opb_i;
if(addsub_i==1'b1)
开始
p_addsub_v_a[0]=1'b1;
p_addsub_v_b[0]=cy_i;
p_addsub_v_result=p_addsub_v_a+p_addsub_v_b;
结束
其他的
开始
p_addsub_v_a[0]=1'b0;
p_addsub_v_b[0]=cy_i;
p_addsub_v_result=p_addsub_v_a-p_addsub_v_b;
结束
ModelSim正在分配的错误表单opa\u i
是非法引用。这是因为程序测试
中的输入/输出方向相反CYU i
需要添加到程序测试和display语句中addsub_i
和cy_i
需要一个驱动程序
仅供参考,ModelSim不支持程序
,因此我将其更改为模块
**错误:testbench.sv(35):(vlog-2110)非法引用网络“opa_I”。**错误:testbench.sv(36):(vlog-2110)对网络“opb_i”的非法引用**错误:testbench.sv(43):(vlog-2110)非法引用网络“opa_i”。**错误:testbench.sv(44):(vlog-2110)对网络“opb_i”的非法引用。应为退出代码:0,收到代码:255