Reconfiguración de FPGA en la placa ML605- EL ICAP NO FUNCIONA

-1

El objetivo de mi proyecto es cargar 3 flujos de bits en la PROM; De acuerdo con nuestro requisito, cargamos el archivo 1 o segundo o 3 bits.

ENFOQUE DE PROBLEMAS: el problema es que no puedo saber si el módulo ICAP se está instanciando o no, si es así, el archivo de bits no se está cargando desde la dirección deseada ... ¿por qué? ¿Y hay algún proceso para depurar el módulo ICAP para saber qué dirección va al módulo ICAP?

La forma en que me acerqué a la declaración del problema es:

Inicialmente, tomé 2 entradas de activación, dependiendo de esto, el archivo de 2 o 3 bits se cargará .. como el predeterminado sería el primer archivo de bits (Lógica del usuario).

LÓGICA DEL USUARIO: Explicación

Primero he creado una instancia de la primitiva ICAP Virtex 6, en segundo lugar, he escrito una máquina de estado en la que estoy enviando pocas secuencias de comandos de IPROGRAM.

La secuencia de comandos de IPROGRAM consiste en una dirección de inicio de arranque en caliente y le he dado la dirección del segundo archivo de bits y también el tercero. y cargándolo.

Mi problema es que la máquina de estado está funcionando pero el archivo de 2 o 3 bits no se está cargando ... No estoy seguro de que incluso ICAP esté buscando en la PROM la segunda corriente de bits ... visto los archivos de diseño de ejemplo proporcionados por xilinx ... pero no sirvió de nada

Aquí, estoy agregando el código que he codificado ... Gracias

 module test_1(
     I0,
     I1,
     TRIGGER,
     status,
     A
        );
    input I0;
    input I1;
    input TRIGGER;
    output reg [7:0] status;
    output reg [3:0] A;


        wire clk;


        parameter[3:0] STATE_00 = 0;
        parameter[3:0] STATE_01 = 1;
        parameter[3:0] STATE_02 = 2;
        parameter[3:0] STATE_03 = 3;
        parameter[3:0] STATE_04 = 4;
        parameter[3:0] STATE_05 = 5;
        parameter[3:0] STATE_06 = 6;
        parameter[3:0] STATE_07 = 7;
        parameter[3:0] STATE_08 = 8;
        parameter[3:0] STATE_09 = 9;
        parameter[3:0] STATE_10 = 10;
        parameter[3:0] STATE_11 = 11;
        reg[3:0] NEXT_STATE = STATE_03;// STATE_00;
        reg CE =  1'b1;
        reg[31:0] I = 32'bZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ;;
        reg ICAP_WRITE = 1'b1;
       reg [1:0] counter;
        reg clock_2mhz_out;
        reg switch=1'b0;



    //      //---------Differential Clock---------------------------------------------

            // BUFGMUX: Global Clock Mux Buffer
            //          Virtex-6
            // Xilinx HDL Language Template, version 14.4

     IBUFGDS #(
          .DIFF_TERM("FALSE"), // Differential Termination
          .IOSTANDARD("DEFAULT") // Specifies the I/O standard for this buffer
       ) IBUFGDS_inst (
          .O(clk),  // Clock buffer output
          .I(I0),  // Diff_p clock buffer input
          .IB(I1) // Diff_n clock buffer input
       );


        //--------------------------------------------------------------------------

    //----------------ICAP PRIMITIVE--------------------------------------------
       // ICAP_VIRTEX6: Internal Configuration Access Port
       //               Virtex-6
       // Xilinx HDL Language Template, version 14.4

       ICAP_VIRTEX6 #(
          .DEVICE_ID(32'h04244093),                      // Specifies the pre-programmed Device ID value
          .ICAP_WIDTH("X32"),                  // Specifies the input and output data width to be used with the
                                                                // ICAP_VIRTEX6.
          .SIM_CFG_FILE_NAME("NONE")             // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation
                                              // model
       )
       ICAP_VIRTEX6_inst (
          .BUSY(),                                                           // 1-bit output: Busy/Ready output
          .O(),                                                              // 32-bit output: Configuration data output bus
          .CLK(clk),                                                        // 1-bit input: Clock Input
          .CSB(CE),                                                     // 1-bit input: Active-Low ICAP input Enable
          .I(I),                                                           // 32-bit input: Configuration data input bus
          .RDWRB(ICAP_WRITE)                                            // as of now the write operation is 0
                                                                                // 1-bit input: Read/Write Select input
       );

       // End of ICAP_VIRTEX6_inst instantiation

        always@(negedge clk)
        begin
         if(TRIGGER == 1'b1)
         begin
         switch<=1'b1;
         end
    end

        always@(negedge clk)
        begin
             if(switch == 1'b1)
          begin
            case(NEXT_STATE)

                STATE_03:
                    begin
                        ICAP_WRITE <= 1'b0;
                        CE <= 1'b0;
                        status <= 8'h4;
                        I <= 32'hFFFFFFFF;
                        NEXT_STATE <= STATE_04;
                    end
                STATE_04:
                    begin
                        ICAP_WRITE <= 1'b0;
                        CE <= 1'b0;
                        status <= 8'h5;
                         I  <= 32'h5599AA66;
                        NEXT_STATE <= STATE_05;
                    end
                STATE_05:
                    begin
                        ICAP_WRITE <= 1'b0;
                        CE <= 1'b0;
                        status <= 8'h6;
                        I <= 32'h0400_0000;
                        NEXT_STATE <= STATE_06;
                    end
                STATE_06:
                    begin
                        ICAP_WRITE <= 1'b0;
                        CE <= 1'b0;
                        status <= 8'h7;
                        I <= 32'h0C40_0080;
                        NEXT_STATE <= STATE_07;
                    end
    THE SECONF BIT FILE IS NOT BEING ADDED...SO THE OUTPUT IS NOT COMING...
 THE SECONG BIT FILE CONSISTS OF A 1'BIT LED...WHICH I CONNECTED IT TO A GPIO    
                    STATE_07:
                        begin
                            ICAP_WRITE <= 1'b0;
                            CE <= 1'b0;
                            status <= 8'hff;
                            I <= 32'h3062CE59; The address i got when I'm lOADING THE pROM FILE
                            A <= 4'b1010;
                            NEXT_STATE <= STATE_08;
                        end
                    STATE_08:
                        begin
                            ICAP_WRITE <= 1'b0;
                            CE <= 1'b0;
                            status <= 8'h9;
                            I <= 32'h0C00_0180;     
                            NEXT_STATE <= STATE_09;
                        end
                    STATE_09:
                        begin
                            ICAP_WRITE <= 1'b0;
                            CE <= 1'b0;
                            status <= 8'hA;
                            I <= 32'h000000F0;
                            NEXT_STATE <= STATE_10;
                        end
                    STATE_10:
                        begin
                            ICAP_WRITE <= 1'b0;
                            CE <= 1'b0;
                            status <= 8'hB;
                            I <= 32'h04000000;
                            NEXT_STATE <=STATE_00 ;
                        end
                    STATE_11:
                        begin
                            ICAP_WRITE <= 1'b0;
                            CE <= 1'b1;
                            status <= 8'hC;
                            I <= 32'h00000000;
                            NEXT_STATE <= STATE_11;
                        end
                    default:
                        begin
                        ICAP_WRITE <= 1'b1;
                            CE <= 1'b1;
                            status <= 8'hD;
                            I <= 32'hAAAAAAAA;
                            NEXT_STATE <= STATE_00;
                        end
                    endcase
              end
              end
              else
              begin
                    ICAP_WRITE <= 1'b1;
                    CE <= 1'b1;
                    status <= 8'hE;
                    I <= 32'hAAAABBBB;
                    NEXT_STATE <= STATE_00;
              end
            end

        endmodule
    
pregunta Akhil

1 respuesta

1

¿Existe un modelo de simulación del ICAP? Si es así, depúralo primero en la simulación.

De lo contrario, cuelgue un microscopio de las señales de ICAP para que pueda comprobar que están haciendo lo correcto. Y cuelgue un analizador de alcance / lógica de los pines del dispositivo flash externo para que pueda ver qué está haciendo el FPGA y si está intentando encontrar y cargar el código que espera.

Escriba por sí mismo lo que espera ver en cada una de esas interfaces y compárelo con la realidad.

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas