Verilog 八位除法器:商和余数

Verilog 八位除法器:商和余数,verilog,system-verilog,Verilog,System Verilog,我正在调试下面显示的代码。我是SystemVerilog的新手,希望我能从中学习。让我知道任何建议 我收到的错误有: Error-[ICPD] Invalid procedural driver combination "divide.v", 2 Variable "Q" is driven by an invalid combination of procedural drivers. Variables written on left-hand of "always_comb" canno

我正在调试下面显示的代码。我是SystemVerilog的新手,希望我能从中学习。让我知道任何建议

我收到的错误有:

Error-[ICPD] Invalid procedural driver combination
"divide.v", 2
Variable "Q" is driven by an invalid combination of procedural drivers. 
Variables written on left-hand of "always_comb" cannot be written to by any 
other processes, including other "always_comb" processes.
"divide.v", 2: logic [7:0] Q;
"divide.v", 8: always_comb  begin
if (x <= R) begin
...
"divide.v", 5: Q = 8'b0;

Error-[ICPD] Invalid procedural driver combination 
"divide.v", 2
Variable "R" is driven by an invalid combination of procedural drivers. 
Variables written on left-hand of "always_comb" cannot be written to by any 
other processes, including other "always_comb" processes.
"divide.v", 2: logic [7:0] R;
"divide.v", 8: always_comb  begin
if (x <= R) begin
...
"divide.v",6: R = y;
错误-[ICPD]程序驱动程序组合无效
“除法,v”,2
变量“Q”由无效的程序驱动程序组合驱动。
写在“always_comb”左侧的变量不能被任何
其他流程,包括其他“始终”流程。
“divide.v”,2:logic[7:0]Q;
“除法”,第8条:总是从开始

if(x写系统Verilog(或任何HDL)和用任何软件语言(C/C++、Java等)写之间的重要区别系统Verilog的设计是为了便于描述硬件结构,同时允许测试台等软件,而软件语言的设计是为了允许用户向解释器、虚拟机或实际硬件发出指令。也就是说,您需要首先考虑您试图描述的硬件,然后编写相关的HDL代码。有许多文章描述了HDL和软件语言之间的差异(例如:)

查看给出的代码和流程图,您似乎试图将System Verilog用作编程语言,而不是HDL。例如,初始块通常仅用于测试台,而不用于模块本身。此外,由于您的算法是顺序的,您可能需要时钟信号和寄存器,但就像你的代码缺少两者一样


理想情况下,在尝试编写任何HDL之前,您应该对如何设计数字硬件系统有一个很好的想法,因为这是您使用HDL时应该具备的心态。目标通常是将硬件设计转换为HDL,因此理解数字设计将有助于澄清许多问题。

编写系统Verilog的重要区别(或任何HDL)并用任何软件语言(C/C++、Java等)编写系统Verilog的设计是为了便于描述硬件结构,同时允许测试台等软件,而软件语言的设计是为了允许用户向解释器、虚拟机或实际硬件发出指令。也就是说,您需要首先考虑您试图描述的硬件,然后编写相关的HDL代码。有许多文章描述了HDL和软件语言之间的差异(例如:)

查看给出的代码和流程图,您似乎试图将System Verilog用作编程语言,而不是HDL。例如,初始块通常仅用于测试台,而不用于模块本身。此外,由于您的算法是顺序的,您可能需要时钟信号和寄存器,但就像你的代码缺少两者一样


理想情况下,在尝试编写任何HDL之前,您应该对如何设计数字硬件系统有一个很好的想法,因为这是您使用HDL时应该具备的心态。目标通常是将硬件设计转换为HDL,因此理解数字设计将有助于澄清许多问题。

编写系统Verilog的重要区别(或任何HDL)并用任何软件语言(C/C++、Java等)编写系统Verilog的设计是为了便于描述硬件结构,同时允许测试台等软件,而软件语言的设计是为了允许用户向解释器、虚拟机或实际硬件发出指令。也就是说,您需要首先考虑您试图描述的硬件,然后编写相关的HDL代码。有许多文章描述了HDL和软件语言之间的差异(例如:)

查看给出的代码和流程图,您似乎试图将System Verilog用作编程语言,而不是HDL。例如,初始块通常仅用于测试台,而不用于模块本身。此外,由于您的算法是顺序的,您可能需要时钟信号和寄存器,但就像你的代码缺少两者一样


理想情况下,在尝试编写任何HDL之前,您应该对如何设计数字硬件系统有一个很好的想法,因为这是您使用HDL时应该具备的心态。目标通常是将硬件设计转换为HDL,因此理解数字设计将有助于澄清许多问题。

编写系统Verilog的重要区别(或任何HDL)并用任何软件语言(C/C++、Java等)编写系统Verilog的设计是为了便于描述硬件结构,同时允许测试台等软件,而软件语言的设计是为了允许用户向解释器、虚拟机或实际硬件发出指令。也就是说,您需要首先考虑您试图描述的硬件,然后编写相关的HDL代码。有许多文章描述了HDL和软件语言之间的差异(例如:)

查看给出的代码和流程图,您似乎试图将System Verilog用作编程语言,而不是HDL。例如,初始块通常仅用于测试台,而不用于模块本身。此外,由于您的算法是顺序的,您可能需要时钟信号和寄存器,但就像你的代码缺少两者一样


理想情况下,在尝试编码任何HDL之前,您应该对如何设计数字硬件系统有一个很好的想法,因为这是您使用HDL时应该具备的心态。目标通常是将硬件设计转换为HDL,因此理解数字设计将有助于澄清很多问题。

一般来说,在Verilog/SystemVerilog中,您不能将来自两个平行块的变量(有些例外)。您从两个位置分配到
R
Q
:初始
块和
始终梳

虽然
initial
块只运行一次,但它与
module divider(input  logic [7:0] x,y,
               output logic [7:0] Q,R);
  initial
    begin
      Q = 8'd0;
      R = y;
    end
  always_comb
    begin
      if (x<=R)
        begin R <= R - x; Q <= Q + 8'd1; end
    end
endmodule

module test1; 

  logic [7:0] x,y,Q,R;

  divider Divider1 (x,y,Q,R);

  initial 
    begin
      x = 8'd2;
      y = 8'd8;
    end
endmodule
   always_comb
    begin
      Q = 8'd0;     // set initial value of Q
      R = y;        // set initial value of R
      ....          //THE REST OF THE ALGORITHM
    end