【问题标题】:assimilating values to registers in GCD FSM in verilog在verilog中将值同化到GCD FSM中的寄存器
【发布时间】:2018-05-02 20:40:00
【问题描述】:

我正在尝试为 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 的值,它每次都会将它们移动到寄存器中,我不希望这样,基本上我需要一些条件来将值移动到寄存器中在初始化时,我该怎么做?

【问题讨论】:

    标签: verilog fsm greatest-common-divisor


    【解决方案1】:

    通常使用时钟来解决此类问题。您甚至可以在参数中使用它。所以,使用它:

    always @(posedge clk) begin
        A_reg<=A
        B_reg<=B
    end
    

    【讨论】:

      【解决方案2】:

      对于此类设计,通常使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-01
        • 2022-01-04
        • 1970-01-01
        相关资源
        最近更新 更多