error de restricción y problema de carga ilegal en Virtex-2

2

Estoy tratando de probar un circuito de escritorio muy simple en un FPGA virtex-2pro (xc2vp30-fg676-5). Uso xilinx ISE y el IP de escritorio (dos DCM con un flop DDR) proporcionado por el generador de núcleo. También trato de observar las señales relacionadas en los pines GPIO. Pero tengo el siguiente error de traducción en mi diseño. Los detalles del error y el diseño se pegan a continuación. Por favor, dame algunos consejos.

Resolving constraint associations...
Checking Constraint Associations...
ERROR:ConstraintSystem:59 - Constraint <INST "rex_clk"  LOC="N3" |>
   [xc2vp30.ucf(14)]: INST "rex_clk" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.

ERROR:ConstraintSystem:59 - Constraint <IOSTANDARD="LVCMOS33" ;>
   [xc2vp30.ucf(14)]: INST "rex_clk" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.

Done...
Checking Partitions ...

Checking expanded design ...
ERROR:NgdBuild:809 - output pad net 'clk_o' has an illegal load:
     pin C on block cnt_0 with type FDC

módulo Verilog

module xc2vp30(
    //probing
    output rex_clk,
    output rex_rst,
    output rex_cnt_i,
    output rex_cnt_o,

    input rst,
    input clk,
    output clk_o,
    output rst_o,

    input cnt_i,
    output cnt_o
);

wire clk_ddr;
reg cnt;

assign rex_clk = clk_ddr;
assign rex_rst = rst;
assign rex_cnt_o = cnt;
assign rex_cnt_i = cnt_i;

assign clk_o = clk_ddr;
assign rst_o = rst;
assign cnt_o = cnt;


always @(posedge clk_ddr or posedge rst) begin
    if(rst)
        cnt <= 1'b0;
    else
        cnt <= cnt + 1'b1;
end

////////////////////Deskew/////////////////////

deskew deskew_0(
    .U1_CE_IN(1'b0),
        .U1_CLKFB_IN(clk_ddr),
        .U1_CLKIN_IN(clk),
        .U1_CLR_IN(rst),    //high reset
        .U1_PRE_IN(1'b0),
        .U1_RST_IN(rst),    //high reset
        .U2_RST_IN(rst),
        .DDR_CLK0_OUT(clk_ddr),
        .U1_CLKIN_IBUFG_OUT(),
        .U1_CLK0_OUT(),
        .U1_CLK180_OUT(),
        .U1_LOCKED_OUT(),
        .U2_CLK0_OUT(),
        .U2_LOCKED_OUT()
);
endmodule

archivo UCF

NET "clk" PERIOD = 40 ns HIGH 50%;
NET "clk" TNM_NET = clk;
#================================================ Pin assignment
#------------------------------------------------ Clock, reset, LED, and SW.
INST "clk"          LOC="B13" | IOSTANDARD="LVCMOS33";           # Clock input (X2)
INST "rst"             LOC="E21" | IOSTANDARD="LVCMOS33";           # Reset input

INST "clk_o"       LOC="AE1" | IOSTANDARD="LVCMOS33";              # Clock output
INST "rst_o"          LOC="Y26" | IOSTANDARD="LVCMOS33";               # Reset output
INST "cnt_o"          LOC="U2" | IOSTANDARD="LVCMOS33" | DRIVE=6;  # data output
INST "cnt_i"          LOC="V5" | IOSTANDARD="LVCMOS33" | DRIVE=6;  # data input

INST "rex_clk"     LOC="N3" | IOSTANDARD="LVCMOS33" ;           #  observe clk output
INST "rex_rst"     LOC="M4" | IOSTANDARD="LVCMOS33"| DRIVE=6; # observe Reset output

INST "rex_cnt_i"     LOC="L3" | IOSTANDARD="LVCMOS33"| DRIVE=6; # observe
INST "rex_cnt_o"     LOC="K3" | IOSTANDARD="LVCMOS33"| DRIVE=6; # observe
    
pregunta drdot

1 respuesta

1

Ese módulo Verilog es de alto nivel, ¿verdad? Asegúrese de que la cadena de herramientas intentará asignar el UCF al módulo de nivel superior. Si está utilizando una cadena de herramientas de terceros que "se asienta sobre" la cadena de herramientas de Xilinx, querrá investigar qué archivo de nivel superior está creando la cadena de herramientas de terceros.

Busqué en mis archivos UCF y no veo INST en absoluto. Uso NET en todas partes (con la excepción de un TIMESPEC en el reloj principal)

Otra cosa que noté ...

always @(posedge clk_ddr or posedge rst) begin
    if(rst)
        cnt <= 1'b0;

Estás utilizando posedge en dos señales diferentes. El pin C en FDC probablemente significa el pin "claro" de un D Flip Flop (por lo tanto, FDC). Es probable que realmente desee un FDCE (D Flip Flop con Async Clear y Clock-Enable), o un FDE (D Flip Flop con Clock-Enable). El sintetizador probablemente esté confundido porque los flip flops solo tienen una entrada sensible al borde y le estás pidiendo un flip flop con dos entradas sensibles al borde.

¿Deseaba un borrado asíncrono o un borrado de sincronización? Si es asíncrono, deshacerse de la "posición" en frente de la primera. Si está sincronizado, deshacerse de todo el "posedge rst". Async Clear (FDCE) es un problema a menos que sepa lo que está haciendo; Ir a la sincronización de borrado (FDE).

    
respondido por el ajs410

Lea otras preguntas en las etiquetas