2017-11-19 1 views
0

GCD 알고리즘 (빼기 메서드)을위한 상태 시스템을 만들려고하고 있고, 내 수의 값 (전선)을 레지스터에 집어 넣어야합니다. 알고리즘을 사용하지만 각 값 변경이 레지스터에 동화되기를 원하지 않습니다.Verilog의 GCD FSM의 값에 동화화

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의 값을 변경하는 경우,이 레지스터에 모든 시간을 이동하고 나는 그것을하지 않기 때문에 문제가 기본적으로 좀 필요합니다 즉
초기화시에만 값을 레지스터로 옮기는 조건. 어떻게해야합니까?

답변

0

일반적으로 이러한 문제에 대해서는 시계가 사용됩니다. 당신은 심지어 그것을 매개 변수로 가지고 있습니다. 그래서, 그것을 사용 등 디자인에 대한 일반적

always @(posedge clk) begin 
    A_reg<=A 
    B_reg<=B 
end 
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