En esta entrada veremos como hacerlo.
En primer lugar hacemos clic en el siguiente enlace o link
(o copiar y pegar en el espacio de direcciones de tu navegador):
Con el anterior enlace se abre una página que nos da información muy valiosa:
Te aconsejo que copies todo el texto y lo pegues en un
documento Word, Bloc de Notas o similar.
En cualquier caso en el siguiente recuadro dejo toda esa información para que la copies y la pegues más fácilmente:
En cualquier caso en el siguiente recuadro dejo toda esa información para que la copies y la pegues más fácilmente:
##############################################Core3S250E################################################# NET "clk" LOC = "P129" ; NET "RST" LOC = "P69" ; NET "led[0]" LOC =" P52" ; NET "led[1]" LOC = "P53" ; NET "led[2]" LOC = "P54" ; NET "led[3]" LOC = "P58"; ############################################### Mother Board ######################################## NET "Buzzer" LOC = "p82" ; NET "DS18B20" LOC = "p83" ; #JOYSTICK NET "down" LOC = "p75" ; NET "up" LOC = "p70" ; NET "left" LOC = "p74" ; NET "right" LOC = "p71" ; NET "press" LOC = "p76" ; #8I/Os_1 NET "8I/Os_1_1" LOC = "p54" ; NET "8I/Os_1_2" LOC = "p58" ; NET "8I/Os_1_3" LOC = "p52" ; NET "8I/Os_1_4" LOC = "p53" ; NET "8I/Os_1_5" LOC = "p50" ; NET "8I/Os_1_6" LOC = "p51" ; NET "8I/Os_1_7" LOC = "p43" ; NET "8I/Os_1_8" LOC = "p44" ; #8I/Os_2 NET "8I/Os_2_1" LOC = "p94" ; NET "8I/Os_2_2" LOC = "p93" ; NET "8I/Os_2_3" LOC = "p92" ; NET "8I/Os_2_4" LOC = "p91" ; NET "8I/Os_2_5" LOC = "p88" ; NET "8I/Os_2_6" LOC = "p87" ; NET "8I/Os_2_7" LOC = "p86" ; NET "8I/Os_2_8" LOC = "p85" ; #16I/Os_2 NET "16I/Os_2_1" LOC = "p83" ; NET "16I/Os_2_2" LOC = "p82" ; NET "16I/Os_2_3" LOC = "p81" ; NET "16I/Os_2_4" LOC = "p77" ; NET "16I/Os_2_5" LOC = "p76" ; NET "16I/Os_2_6" LOC = "p75" ; NET "16I/Os_2_7" LOC = "p74" ; NET "16I/Os_2_8" LOC = "p71" ; NET "16I/Os_2_9" LOC = "p70" ; NET "16I/Os_2_10" LOC = "p68" ; NET "16I/Os_2_11" LOC = "p67" ; NET "16I/Os_2_12" LOC = "p66" ; NET "16I/Os_2_13" LOC = "p63" ; NET "16I/Os_2_14" LOC = "p62" ; NET "16I/Os_2_15" LOC = "p60" ; NET "16I/Os_2_16" LOC = "p59" ; #16I/Os_1 NET "16I/Os_1_1" LOC = "p126" ; NET "16I/Os_1_2" LOC = "p125" ; NET "16I/Os_1_3" LOC = "p124" ; NET "16I/Os_1_4" LOC = "p123" ; NET "16I/Os_1_5" LOC = "p122" ; NET "16I/Os_1_6" LOC = "p117" ; NET "16I/Os_1_7" LOC = "p116" ; NET "16I/Os_1_8" LOC = "p113" ; NET "16I/Os_1_9" LOC = "p112" ; NET "16I/Os_1_10" LOC = "p106" ; NET "16I/Os_1_11" LOC = "p105" ; NET "16I/Os_1_12" LOC = "p104" ; NET "16I/Os_1_13" LOC = "p103" ; NET "16I/Os_1_14" LOC = "p98" ; NET "16I/Os_1_15" LOC = "p97" ; NET "16I/Os_1_16" LOC = "p96" ; #32I/Os_1 NET "32I/Os_1_1" LOC ="p39"; NET "32I/Os_1_2" LOC ="p40"; NET "32I/Os_1_3" LOC ="p34"; NET "32I/Os_1_4" LOC ="p35"; NET "32I/Os_1_5" LOC ="p32"; NET "32I/Os_1_6" LOC ="p33"; NET "32I/Os_1_7" LOC ="p26"; NET "32I/Os_1_8" LOC ="p31"; NET "32I/Os_1_9" LOC ="p23"; NET "32I/Os_1_10" LOC ="p25"; NET "32I/Os_1_11" LOC ="p21"; NET "32I/Os_1_12" LOC ="p22"; NET "32I/Os_1_12" LOC ="p17"; NET "32I/Os_1_14" LOC ="p20"; NET "32I/Os_1_15" LOC ="p15"; NET "32I/Os_1_16" LOC ="p16"; NET "32I/Os_1_17" LOC ="p8"; NET "32I/Os_1_18" LOC ="p14"; NET "32I/Os_1_19" LOC ="p5"; NET "32I/Os_1_20" LOC ="p7"; NET "32I/Os_1_21" LOC ="p3"; NET "32I/Os_1_22" LOC ="p4"; NET "32I/Os_1_23" LOC ="p143"; NET "32I/Os_1_24" LOC ="p2"; NET "32I/Os_1_25" LOC ="p140"; NET "32I/Os_1_26" LOC ="p142"; NET "32I/Os_1_27" LOC ="p135"; NET "32I/Os_1_28" LOC ="p139"; NET "32I/Os_1_29" LOC ="p132"; NET "32I/Os_1_30" LOC ="p134"; NET "32I/Os_1_31" LOC ="p130"; NET "32I/Os_1_32" LOC ="p131"; #H1 NET "H1_1" LOC ="p131" ; NET "H1_2" LOC ="p130" ; NET "H1_3" LOC = "p134"; NET "H1_4" LOC = "p132"; NET "H1_5" LOC = "p139"; NET "H1_6" LOC = "p135"; NET "H1_7" LOC = "p142"; NET "H1_8" LOC = "p140"; NET "H1_9" LOC = "p2"; NET "H1_10" LOC = "P143"; NET "H1_11" LOC = "p4"; NET "H1_12" LOC ="p3" ; NET "H1_13" LOC = "p7"; NET "H1_14" LOC = "p5"; NET "H1_15" LOC = "p14"; NET "H1_16" LOC = "p8"; NET "H1_17" LOC = "p16"; NET "H1_18" LOC = "p15"; NET "H1_19" LOC = "p20"; NET "H1_20" LOC ="p17" ; NET "H1_21" LOC ="p22" ; NET "H1_22" LOC ="p21" ; NET "H1_23" LOC ="p25" ; NET "H1_24" LOC ="p23" ; NET "H1_25" LOC ="p31" ; NET "H1_26" LOC ="p26" ; NET "H1_27" LOC ="p33" ; NET "H1_28" LOC ="p32" ; NET "H1_29" LOC ="p35" ; NET "H1_30" LOC ="p34" ; NET "H1_31" LOC ="p40" ; NET "H1_32" LOC ="p39" ; NET "H1_33" LOC ="p44" ; NET "H1_34" LOC ="p43" ; NET "H1_35" LOC ="p51" ; NET "H1_36" LOC ="p50" ; NET "H1_37" LOC ="p53" ; NET "H1_38" LOC ="p52" ; NET "H1_39" LOC ="p58" ; NET "H1_40" LOC ="p54" ; #H2 NET "H2_1" LOC ="p126" ; NET "H2_2" LOC ="p125" ; NET "H2_3" LOC = "p124"; NET "H2_4" LOC = "p123"; NET "H2_5" LOC = "p122"; NET "H2_6" LOC = "p117"; NET "H2_7" LOC = "p116"; NET "H2_8" LOC = "p113"; NET "H2_9" LOC = "p112"; NET "H2_10" LOC = "P106"; NET "H2_11" LOC = "p105"; NET "H2_12" LOC ="p104" ; NET "H2_13" LOC = "p103"; NET "H2_14" LOC = "p98"; NET "H2_15" LOC = "p97"; NET "H2_16" LOC = "p96"; NET "H2_17" LOC = "p94"; NET "H2_18" LOC = "p93"; NET "H2_19" LOC = "p92"; NET "H2_20" LOC ="p91" ; NET "H2_21" LOC ="p88" ; NET "H2_22" LOC ="p87" ; NET "H2_23" LOC ="p86" ; NET "H2_24" LOC ="p85" ; NET "H2_25" LOC ="p83" ; NET "H2_26" LOC ="p82" ; NET "H2_27" LOC ="p81" ; NET "H2_28" LOC ="p77" ; NET "H2_29" LOC ="p76" ; NET "H2_30" LOC ="p75" ; NET "H2_31" LOC ="p74" ; NET "H2_32" LOC ="p71" ; NET "H2_33" LOC ="p70" ; NET "H2_34" LOC ="p68" ; NET "H2_35" LOC ="p67" ; NET "H2_36" LOC ="p66" ; NET "H2_37" LOC ="p63" ; NET "H2_38" LOC ="p62" ; NET "H2_39" LOC ="p60" ; NET "H2_40" LOC ="p59" ; #LCD1602 NET "RS" LOC = "p25" ; NET "R/W" LOC = "p31" ; NET "EN" LOC = "p26" ; NET "D0" LOC = "p33" ; NET "D1" LOC = "p32" ; NET "D2" LOC = "p35" ; NET "D3" LOC = "p34" ; NET "D4" LOC = "p40" ; NET "D5" LOC = "p39" ; NET "D6" LOC = "p44" ; NET "D7" LOC = "p43" ; NET "A" LOC = "p51" ; NET "K" LOC = "p50" ; #LCD12864 NET "RS" LOC ="p25" ; NET "R/W" LOC = "p31" ; NET "EN" LOC ="p26" ; NET "D0" LOC = "p33" ; NET "D1" LOC = "p32" ; NET "D2" LOC = "p35" ; NET "D3" LOC = "p34" ; NET "D4" LOC = "p40" ; NET "D5" LOC = "p39" ; NET "D6" LOC = "p44" ; NET "D7" LOC = "p43" ; NET "PSB" LOC ="p51" ; NET "RST" LOC ="p53" ; NET "A" LOC ="p58" ; NET "K" LOC ="p54" ;
Lo que nos muestra es a dónde
están conectados los pines de la FPGA en la placa Core3S250E, y a la DVK601
(una vez montadas correctamente ambas).
Lo
que vamos a utilizar aquí es la señal de reloj de entrada (la Core3S250E tiene
su propio reloj), y como salidas los 4 LEDs L4, L3, L2 y L1.
Si
observamos el principio del documento,
##############################################Core3S250E##############################
NET "clk" LOC = "P129" ;
NET "RST" LOC = "P69" ;
NET "led[0]" LOC =" P52" ;
NET "led[1]" LOC = "P53" ;
NET "led[2]" LOC = "P54" ;
NET "led[3]" LOC = "P58";
###############################################
Mother Board ########################################
Vemos
que el reloj “clk” va conectado al pin P129 de la FPGA, y que los LEDs van
conectados a los pines P52, P53, P54 y P58. Expresado de otra forma:
L4 -> P52
L3 -> P53
L3 -> P54
L4 -> P58
Clk -> P129
Esto
va a ser importante para establecer los USER CONSTRAINT (algo así como
“restricciones de usuario” en inglés).
En
el campo “Top Module”, escribimos LEDA_blog:
Tras
esto abrimos el desplegable USER CONSTRAINTS:
Dentro de las opciones en dicho desplagable, hacemos doble
clic en “I/O Pin Planning (PlanAhead)
Pre-Stnthesis“ (con LEDA_blog escrito en el campo Top Module como
acabamos de explicar),
A continuación pulsamos yes:
Lo que sucederá es que se abrirá la otra parte del paquete del software de XILINX, el PlanAhead (del cual en el proceso de
instalación se crea otro icono de acceso directo en el escritorio). Tarda un
poco en abrirse, por lo menos en mi caso, si es su caso también, paciencia, es normal.
Clic en “close”:
Clic en “No”.
Abrimos el desplegable led1:
Ahora nos vamos a la ventana “Package”:
y hacemos clic en el icono de la barra vertical izquierda
llamada “I/O ports in an I/O bank” (con led1[0] seleccionado por el clic que ya
hemos hecho en él),
Ahora es cuando tenemos que hacer uso de la asignación de
pines del diseño del Core3S250E anteriormente vista, la recordamos:
Led1[0] -> L4 -> P52
Led1[1] -> L3 -> P53
Led1[2] -> L3 -> P54
Led1[3] -> L4 -> P58
Clk -> P129
Y con el cursos vamos buscando el pin P52 en la
figura:
Hacemos doble clic en él y se obtiene:
En la ventana “Package”:
Y en la ventana “I/O ports”:
Repetimos el proceso para led1[1], led1[2] y led1[3],
Pero aún no hemos acabado. Recuerde el lector que aun hay
que asignar el puerto P129 a clk. Para ello hacemos uso del scroll (barra de
desplazamiento en este caso vertical) de la ventana I/O Ports a la derecha,
desplazando la hasta abajo del todo. Luego desplegamos los “Scalar ports”.
Una vez desplegado el “Scalar ports” volvemos a hacer uso
del scroll y seleccionamos clk:
Volvemos a repetir el proceso ya explicado para led1[0],
led1[1], led1[2] y led1[3], ahora para
clk:
Ahora damos al icono “Save Design”, y ya tenemos el USER
CONSTRAINT para este proyecto.
Y esto ya hemos configurado los USER CONSTRAINT, y estamos más cerca de programar la FPGA y hacer funcionar el hardware.
0 comentarios: