在verilog中将值同化到GCD FSM中的寄存器
assimilating values to registers in GCD FSM in verilog
我正在尝试为 GCD 算法创建一个状态机(减法),我需要将我的数字的值(线)放入寄存器以使用该算法,但我没有希望每个值的变化都吸收到寄存器中。
换句话说:
module GCD_R (u,v,out,nrst,act,clk);
input [31:0] A,B;
input clk,act,rst;
output reg [31:0] out;
reg[4:0] state,next_state;
reg[31:0] A_reg,B_reg,Aint_reg,Bint_reg;
parameter IDLE = 4'b0001;
parameter ABIG = 4'b0010;
parameter BBIG = 4'b0100;
always @(A,B)
begin
A_reg<=A
B_reg<=B
end
always @*
case (state)
IDLE: begin
但是这个定义是有问题的,因为如果有人改变了 A 或 B 的值,它每次都会将它们移动到寄存器中,而我不希望这样,基本上我需要一些条件将值移动到仅在初始化时注册,我该怎么做?
通常使用时钟解决此类问题。您甚至可以在参数中使用它。所以,使用它:
always @(posedge clk) begin
A_reg<=A
B_reg<=B
end
通常对于此类设计,Clock Edges
与 reset
信号一起使用。
always @ (posedge clk, negedge rst)
begin
if (!rst)
begin
// For initialisation
A_reg<=A
B_reg<=B
end
else
begin
// For non initialisation operation to retail value
A_reg<=A_reg;
B_reg<=B_reg;
end
end
我正在尝试为 GCD 算法创建一个状态机(减法),我需要将我的数字的值(线)放入寄存器以使用该算法,但我没有希望每个值的变化都吸收到寄存器中。
换句话说:
module GCD_R (u,v,out,nrst,act,clk);
input [31:0] A,B;
input clk,act,rst;
output reg [31:0] out;
reg[4:0] state,next_state;
reg[31:0] A_reg,B_reg,Aint_reg,Bint_reg;
parameter IDLE = 4'b0001;
parameter ABIG = 4'b0010;
parameter BBIG = 4'b0100;
always @(A,B)
begin
A_reg<=A
B_reg<=B
end
always @*
case (state)
IDLE: begin
但是这个定义是有问题的,因为如果有人改变了 A 或 B 的值,它每次都会将它们移动到寄存器中,而我不希望这样,基本上我需要一些条件将值移动到仅在初始化时注册,我该怎么做?
通常使用时钟解决此类问题。您甚至可以在参数中使用它。所以,使用它:
always @(posedge clk) begin
A_reg<=A
B_reg<=B
end
通常对于此类设计,Clock Edges
与 reset
信号一起使用。
always @ (posedge clk, negedge rst)
begin
if (!rst)
begin
// For initialisation
A_reg<=A
B_reg<=B
end
else
begin
// For non initialisation operation to retail value
A_reg<=A_reg;
B_reg<=B_reg;
end
end