Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 程序块和Systemverilog测试台出错:_Debugging_Verilog_Verification_System Verilog - Fatal编程技术网

Debugging 程序块和Systemverilog测试台出错:

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

我已经粘贴了我的verilog设计、systemverilog测试台和错误。您可以将它们粘贴到edaplayder.com上并进行模拟。请给我建议,以消除错误。 我认为问题在程序块中,但对我来说似乎并没有问题

//########################## 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