【问题标题】:Don't right module of linear-feedback shift register on Verilog在 Verilog 上不要对线性反馈移位寄存器的模块
【发布时间】:2017-05-28 18:05:57
【问题描述】:

有我的模块:

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

我正在使用 Vivado 2017.1。当我运行综合时,结果是 0 LUT,0 FF。

警告列表:

[Synth 8-3936] 发现未连接的内部寄存器“polynomial_reg”并将其从“2”位修剪为“1”位。

[Synth 8-327] 推断变量“data_out_reg”的锁存器

[Synth 8-327] 推断变量“current_state_reg”的锁存器

[Synth 8-327] 推断变量“polynomial_reg”的锁存器

[Synth 8-3332] 序列元素 (data_out_reg) 未使用,将从模块 linear_feedback_shift_reg 中删除。

[Synth 8-3332] 顺序元素 (current_state_reg[1]) 未使用,将从模块 linear_feedback_shift_reg 中删除。

[Synth 8-3332] 顺序元素 (current_state_reg[0]) 未使用,将从模块 linear_feedback_shift_reg 中删除。

我的模块有什么逻辑错误?

【问题讨论】:

    标签: verilog fpga


    【解决方案1】:

    我认为您不知道如何在 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;
        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
    

    【讨论】:

    • 你计算 next_bit 但从不使用。
    • 啊,是的!感谢您发现错误。我现在已经更新了代码。
    • 非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多