Verilog 八位除法器:商和余数
我正在调试下面显示的代码。我是SystemVerilog的新手,希望我能从中学习。让我知道任何建议 我收到的错误有: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
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