Verilog, FPGA, wykorzystanie rejestru jednostkowego

Mam pytanie dotyczące tego, co wydaje mi się dziwne zachowanie kontrolera AGC / SPI, nad którym pracuję. Zostało to zrobione w Verilog, a jego celem jest FPGA Xilinx Spartan 3e. Sterownik to FSM, który uruchamia zewnętrzne wejścia. Stan FSM jest przechowywany wstate_reg który nie jest jawnie zainicjowany, ponieważ myślałem, że niezainicjowany rejestr będzie domyślnie zerowy. Kiedy zaimplementowałem kontroler, FSM nie uruchomiłby się. Monitorując magistralę SPI nie zaobserwowałem żadnej aktywności. Aby monitorować FSM, skierowałemstate_reg do magistrali wyjściowej, która trafiła do banku LED. To jest ta liniaprzypisz data_out = state_reg to robi. Odkryłem jednak, że kiedy to zrobiłem, FSM kontroler AGC / SPI działał poprawnie, jak zaobserwowano na magistrali SPI. Wydaje się, że dzieje się takstate_reg jest w stanie nieokreślonym, kiedy inicjuje, a zatem FSM nigdy nie jest w żadnym stanie, więc nie działa. Ale przypisującstate_reg do wyjścia, które zostało zainicjowane00000000 tak jak oczekiwałem od początku. Więc moje pytanie brzmi, czy niezainicjowany rejestr powinien przyjmować wartość 0? Przez przypisanie niezainicjowanego rejestru do wyjścia, czy to wymusza na nim przyjęcie zera, jak się wydawało? Czy może dzieje się coś jeszcze, czego nie rozumiem? Poniżej znajduje się mój kod. Skomentowałem odpowiednią część, do której przypisano * state_reg **przewód wyjściowy [7: 0] data_out. Wiem, że to długie pytanie, ale naprawdę próbuję zrozumieć, jakiego rodzaju zachowania powinienem się spodziewać. Dzięki.

<code>  module agc_control
        (
            input wire [7:0] agc_data,
            input wire clk,
            input wire agc_start,
            input wire AMP_DO,
            output reg MOSI,
            output reg SCK,
            output reg CS_AMP,
            output wire inhibit_ADC,
            output wire [7:0] data_out  
         );

        //signals
        reg [4:0] state_reg,
        reg [2:

0] ampclkreg;
    reg ampclk;
    reg [7:0] agc_data_reg;
    reg agc_running;
    reg [7:0] data_out_reg;
    wire agc_done;




    //ampclk generation
    always @(posedge clk)
        begin
            ampclkreg = ampclkreg + 1;
            if (ampclkreg == 3)
                begin
                    ampclkreg = 0;
                    ampclk = ~ampclk;
                end
        end

    always @(posedge clk)
        begin
            if(agc_start == 1)
                begin
                    agc_running = 1'b1;
                    agc_data_reg = agc_data;
                end
            if(agc_done == 1)
                begin
                    agc_running = 1'b0;
                end
        end



    //FSM
    always @(posedge ampclk)
        begin
            if (agc_running == 0)
                begin
                    SCK = 0;
                    state_reg = 0;
                    CS_AMP = 1;
                end
            if (agc_running == 1)
                begin
                    case (state_reg)
                        0:  begin
                                CS_AMP = 1;
                                SCK = 0;
                                state_reg = 1;
                            end
                        1:  begin
                                CS_AMP = 0;
                                MOSI = agc_data_reg[7];
                                state_reg = 2;
                            end
                        2:  begin
                                SCK = 1;
                                state_reg = 3;
                            end
                        3:  begin
                                SCK = 0;
                                MOSI = agc_data_reg[6];
                                state_reg = 4;
                            end
                        4:  begin
                                SCK = 1;
                                state_reg = 5;
                            end
                        5:  begin
                                SCK = 0;
                                MOSI = agc_data_reg[5];
                                state_reg = 6;
                            end
                        6:  begin
                                SCK = 1;
                                state_reg = 7;
                            end
                        7:  begin
                                SCK = 0;
                                MOSI    = agc_data_reg[4];
                                state_reg = 8;
                            end
                        8:  begin
                                SCK = 1;
                                state_reg = 9;
                            end
                        9:  begin
                                SCK = 0;
                                MOSI = agc_data_reg[3];
                                state_reg = 10;
                            end
                        10:begin
                                SCK = 1;
                                state_reg = 11;
                            end
                        11:begin
                                SCK = 0;
                                MOSI = agc_data_reg[2];
                                state_reg = 12;
                            end
                        12:begin
                                SCK = 1;
                                state_reg = 13;
                            end
                        13:begin
                                SCK = 0;
                                MOSI = agc_data_reg[1];
                                state_reg = 14;
                            end
                        14:begin
                                SCK = 1;
                                state_reg = 15;
                            end
                        15:begin
                                SCK = 0;
                                MOSI = agc_data_reg[0];
                                state_reg = 16;
                            end
                        16:begin
                                SCK = 1;
                                state_reg = 17;
                            end
                        17:begin
                                CS_AMP = 1;
                                state_reg = 18;
                            end
                        18:begin
                                SCK = 0;
                                state_reg = 19;
                            end
                        19:begin
                                state_reg = 19;
                            end
                    default: state_reg = 19;
                endcase
            end
        end

    //retrieve previous vlaues
    always @(posedge clk)
    begin
        case(state_reg)
            2: begin
                    if (ampclkreg == 2)             
                        data_out_reg[7] = AMP_DO;
                end
            4: begin
                    if (ampclkreg == 2)
                        data_out_reg[6] = AMP_DO;
                end
            6: begin 
                    if (ampclkreg == 2)
                        data_out_reg[5] = AMP_DO;
                end
            8:  begin
                    if (ampclkreg == 2)
                        data_out_reg[4] = AMP_DO;
                end
            10:begin
                    if (ampclkreg == 2)
                        data_out_reg[3] = AMP_DO;
                end
            12:begin
                    if (ampclkreg == 2)
                        data_out_reg[2] = AMP_DO;
                end
            14:begin
                    if (ampclkreg == 2)
                        data_out_reg[1] = AMP_DO;
                end
            16:begin
                    if (ampclkreg == 2)
                        data_out_reg[0] = AMP_DO;
                end

        endcase
    end


    //output wire [7:0] data_out--to top module to drive 7 LEDs and display state_reg
    assign data_out =  state_reg;

    assign agc_done = (state_reg == 19);
    assign inhibit_ADC = (agc_running == 1);


    endmodule
</code>

questionAnswers(2)

yourAnswerToTheQuestion