verilog - altera fpga “error pin x tiene varios controladores debido al controlador no tri-estatal”

0

Tengo una interfaz IO en paralelo de 32 bits (PIO) definida en un procesador NIOS II. Es para un conector de 32 pines en una placa.

He creado una instancia del NIOS en un módulo de nivel superior de verilog denominado test a continuación.

En los conectores, los pines 0: 4 son pines JTAG y los 5:31 son pines bidireccionales que quiero que puedan establecer la dirección y el estado.

Los pines FT_ADB0-4 van a un chip FDTI para el jtag.

Mi pregunta es cómo puedo escribir correctamente verilog para esto.

Quiero que todas las 32 ubicaciones en CON_0 estén disponibles para el PIO de 32 bits en el NIOS. De modo que cuando establezco, por ejemplo, el bit 10 en el PIO, estoy controlando el pin 10 en el conector.

En el código de abajo recibo el error

Error (13076): The pin "CON_0[0]" has multiple drivers due to the non-tri-state driver "FT_ADB1"

module test2 (  CLOCK_50B, CON_0, FT_ADB0, FT_ADB1, FT_ADB2, FT_ADB3, FT_ADB4);

// Basic clocks
input  CLOCK_50B;

// CON_0 parallel ports
inout  [31:0]  CON_0;

// FT2332.. used for JTAG !
input  FT_ADB0; //TCK
input  FT_ADB1; //TDI
output FT_ADB2; //TDO
input  FT_ADB3; //TMS
input  FT_ADB4; //NRESET 

assign CON_0[2] = (1) ? FT_ADB0 : 'bz; //TCK
assign CON_0[0] = (1) ? FT_ADB1 : 'bz; //TDI
assign FT_ADB2 = CON_0[1]; //TDO output from DUT drives FTDI
assign CON_0[3] = (1) ? FT_ADB3 : 'bz; //TMS

assign CON_0[4] = 'bz;


// Instantiate the Nios II system module generated by the Qsys tool:

    nios2 u0 (
        .clk_clk       (CLOCK_50B),       //  clk.clk
        .CON_0_export   (CON_0)            //  CON_0.in_port

    );

endmodule
    
pregunta horizon

1 respuesta

0

Cree una señal interna CON_0_nios que se asigna al puerto NIOS y es controlada por CON_0, mientras que solo controla CON_0 bits 5 a 31 con CON_0 bits 0 a 4 controlados por pines FTDI como se desee.

Esta es una forma de hacerlo:

module test2 (  CLOCK_50B, CON_0, FT_ADB0, FT_ADB1, FT_ADB2, FT_ADB3, FT_ADB4);

// Basic clocks
input  CLOCK_50B;

// CON_0 parallel ports
inout  [31:0]  CON_0;

// FT2332.. used for JTAG !
input  FT_ADB0; //TCK
input  FT_ADB1; //TDI
output FT_ADB2; //TDO
input  FT_ADB3; //TMS
input  FT_ADB4; //NRESET 

// NIOS mapping signal
wire   [31:0]   CON_0_nios; 

//CON_0 FTDI Assignments
assign CON_0[2] = (1) ? FT_ADB0 : 1'bz; //TCK
assign CON_0[0] = (1) ? FT_ADB1 : 1'bz; //TDI
assign FT_ADB2 = CON_0[1]; //TDO output from DUT drives FTDI
assign CON_0[3] = (1) ? FT_ADB3 : 1'bz; //TMS
assign CON_0[4] = 1'bz;

//CON_0 NIOS Assignments
assign CON_0[31:5] = CON_0_nios[31:5]; 

//CON_0_nios Inputs - not required as covered by port mapping
//assign CON_0_nios[31:0] = CON_0[31:0];

// Instantiate the Nios II system module generated by the Qsys tool:
nios2 u0 (
    .clk_clk       (CLOCK_50B),       //  clk.clk
    .CON_0_export  (CON_0_nios)       //  CON_0.in_port
);
    
respondido por el dst

Lea otras preguntas en las etiquetas