将值映射到verilog中的GCD FSM中的寄存器

时间:2017-11-19 14:58:59

标签: verilog fsm greatest-common-divisor

我正在尝试为GCD算法(减法方法)创建一个状态机,我需要将我的数字的值(线)放到寄存器中以使用算法,但我没有&#39 ; t希望每个值的变化都能融入寄存器 换句话说:

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的值,它每次都会将它们移动到寄存器而我不想要它,基本上我需要一些条件将值移动到只在初始化时注册,我该怎么做?

2 个答案:

答案 0 :(得分:1)

通常,对于此类设计,会使用Clock Edgesreset信号。

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

答案 1 :(得分:0)

通常对于这些问题使用时钟。你甚至可以在参数中使用它。所以,使用它:

fOut = io.open(sys.stdout.fileno(), mode="at", encoding="utf-8", newline="\n", closefd=False)