2017-05-27 3 views
0

Il est mon module:Ne pas bon module de registre à décalage rebouclés sur Verilog

module linear_feedback_shift_reg(clk, reset, data_out); 

// PARAMETERS // 

parameter REGISTER_WIDTH = 2; // width of initial and current states 
parameter INIT_STATE = 0;  // initialization state when reset process 
parameter POLYNOMIAL = 3;  // 0x11 -- x^2 + x + 1 
parameter RESET_ACTIVE = 1;  // reset process when reset port is RESET_ACTIVE 
parameter CLK_ACTIVE = 1;  // clk process when clk port is CLK_ACTIVE 

// PORTS // 

input wire clk; 
input wire reset; 

output reg data_out; 

// VARIABLES // 

reg [REGISTER_WIDTH - 1 : 0] polynomial; 
reg [REGISTER_WIDTH - 1 : 0] current_state; 
reg next_bit; 

integer i; 

// BEHAVIORAL 

always @* begin 
    if(reset == RESET_ACTIVE) begin // reset process 
     current_state = INIT_STATE; 
     next_bit = 1'b0; 
     data_out = 1'b0; 
     polynomial = POLYNOMIAL; 
    end 
    else begin // clk process 
     if(clk == CLK_ACTIVE) begin 
      data_out = current_state[0]; 
      next_bit = current_state[REGISTER_WIDTH - 1]; 
      for(i = 0; i < REGISTER_WIDTH - 1; i = i + 1) begin 
       if(polynomial[i] == 1'b1) begin 
        next_bit = next_bit^current_state[i]; 
       end 
      end 
      current_state = current_state >> 1; 
      current_state[REGISTER_WIDTH - 1] = next_bit; 
     end 
    end 
end 
endmodule 

J'utilise Vivado 2017,1. Lorsque je lance la synthèse, le résultat est 0 LUT, 0 FF.

Liste des avertissements:

[Synth 8-3936] Trouvé registre interne non connecté 'polynomial_reg' et il est garni de '2' à des bits '1'.

[Synth 8-327] inférer de verrouillage pour la variable 'data_out_reg'

[Synth 8-327] verrou pour inférer variable 'current_state_reg'

[Synth 8-327] verrou pour inférer variable « polynomial_reg '

[Synth 8-3332] L'élément séquentiel (data_out_reg) est inutilisé et sera supprimé du module linear_feedback_shift_reg. [Synth 8-3332] L'élément séquentiel (current_state_reg [1]) est inutilisé et sera supprimé du module linear_feedback_shift_reg. [Synth 8-3332] L'élément séquentiel (current_state_reg [0]) est inutilisé et sera supprimé du module linear_feedback_shift_reg.

Quelle est l'erreur logique de mon module?

Répondre

0

Je pense que vous ne savez pas comment inférer la logique séquentielle dans Verilog. Si je devais écrire ce code je l'aurais écrit de la manière suivante -

module linear_feedback_shift_reg(clk, reset, data_out); 

// PARAMETERS // 

    parameter REGISTER_WIDTH = 2; // width of initial and current states 
    parameter INIT_STATE = 0;  // initialization state when reset process 
    parameter POLYNOMIAL = 3;  // 0x11 -- x^2 + x + 1 
    parameter RESET_ACTIVE = 1;  // reset process when reset port is RESET_ACTIVE 
    parameter CLK_ACTIVE = 1;  // clk process when clk port is CLK_ACTIVE 

    // PORTS // 

    input wire clk; 
    input wire reset; 

    output reg data_out; 

    // VARIABLES // 

    reg [REGISTER_WIDTH - 1 : 0] polynomial; 
    wire [REGISTER_WIDTH - 1 : 0] current_state; 
    reg next_bit; 

    reg [REGISTER_WIDTH - 1 : 0] current_state_q; 
    reg next_bit_q; 

    integer i; 

    // BEHAVIORAL 

    always @ (posedge clk or posedge reset) 
     if(reset == RESET_ACTIVE) begin // reset process 
      current_state_q <= INIT_STATE; 
      next_bit_q  <= 1'b0; 
      data_out  <= 1'b0; 
      polynomial  <= POLYNOMIAL; 
     end 
     else begin // clk process 
      data_out  <= current_state[0]; 
      next_bit_q  <= next_bit; 
      current_state_q <= current_state; 
     end 

    always @ (*) 
    begin 
     next_bit = current_state[REGISTER_WIDTH - 1]; 
     for(i = 0; i < REGISTER_WIDTH - 1; i = i + 1) begin 
      if(polynomial[i] == 1'b1) begin 
       next_bit = next_bit^current_state[i]; 
      end 
     end 
    end 

    assign current_state = {next_bit_q, current_state_q[REGISTER_WIDTH-1:1]}; 

endmodule 
+0

Vous calculez next_bit mais n'utilisez jamais. – Yahniukov

+0

Ah oui! Merci d'avoir repéré l'erreur. J'ai mis à jour le code maintenant. –

+0

Merci beaucoup pour l'aide – Yahniukov