TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: bigluis en 09 de Octubre de 2010, 18:19:14
-
Este foro será utilizado para realizar los comentarios acerca de los ejemplitos en verilog (http://www.todopic.com.ar/foros/index.php?topic=32327.0) que iré posteando.
-
El SW[0] corresponde a P11, pero en la tarjeta dice "SW[0]-M4".
Es un error de impresión, asegurense de escribir:
NET "x" LOC = "P11";
que corresponde al SW[0].
-
Hola bigluis,
Solo quiero decirte que muchas gracias por compartir con todos tus avances con la FPGA.
SALUDOS!
-
:) Gracias a ustedes he adquirido muchos conocimientos en los ultimos años, este aporte es mi forma de agradecerles.
Luego seguiré poniendo más aportes.
:-/
-
Hola bigluis, tengo una pregunta. Es posible asignar los pines del dispositivo desde el codigo de programa ya sea para verilog o vhdl. Pasa que estoy usando ispLEVER y este no cuenta con el asistente para definir entradas y salidas en componentes de baja escala como las GALs. Quizas me explique mejor con un ejemplo:
En codigo ABEL tendria algo asi...
A,B,Y PIN 2,3,23 ISTYPE 'COM';
Para una GAL22V10 con esto estaria asignando las variables A, B y Y a los pines fisicos 2, 3 y 23 del chip. ¿Es posible hacer algo similar usando VERILOG o VHDL? te agradezco de antemano!!!
-
Como muestro en la parte inferior del mensaje http://www.todopic.com.ar/foros/index.php?topic=32327.msg269849#msg269849 (http://www.todopic.com.ar/foros/index.php?topic=32327.msg269849#msg269849) la asignacion de los pines la hago de manera manual sin utilizar el asistente. Para hacer esto es necesario crear un archivo *.ucf (universal constraint file) en el que se designa cada una de las entradas y salidas.
Para realizar esto debes dar clic en el menu Proyecto->New Source, y luego debes ejejir el universal constraint file y le das el nombre correspondiente.
En cada uno de los ejemplos que muestro se encuentra un archivo *.ucf, en los primeros ejemplos el archivo *.ucf lo cree manuelmente, pero luego utilice un archivo al que le llamao universal.ucf que me permite cambiar los pines a utilizar con mucha facilidad.
Si observas el mensaje http://www.todopic.com.ar/foros/index.php?topic=32327.msg269849#msg269849 (http://www.todopic.com.ar/foros/index.php?topic=32327.msg269849#msg269849) en la parte inferior aparece el siguiente codigo.
net "a" loc = "p11"; #net a conectada al pin P11 del FPGA
net "b" loc = "l3"; #net b conectada al pin l3 del FPGA
net "z0" loc = "m5"; #net z0 conectada al pin m5 del FPGA
net "z1" loc = "m11"; #net z1 conectada al pin m11 del FPGA
net "z2" loc = "p7"; #net z2 conectada al pin p7 del FPGA
net "z3" loc = "p6"; #net z3 conectada al pin p6 del FPGA
net "z4" loc = "n5"; #net z4 conectada al pin n5 del FPGA
net "z5" loc = "n4"; #net z5 conectada al pin n4 del FPGA
Este es el codigo ucf para este ejemplo.
-
Hola!
Estoy usando Verilog pero hay una cosa que no entiendo y no logro encontrar información sobre esto:
Esta bien que en el TOP yo declare absolutamente todos los pines de entrada y salida que uso en el integrado? de ahi al instanciar los modulos, los conecto a esos pines, no se si se entiende.
Por ejemplo, yo tengo un modulo que multiplexa los displays de 7 segmentos, que lo puedo instanciar de esta manera:
hex_to_sseg U1 (.data({4'b0000,SW}), .clock(CLK), .an(DISP_AN), .sseg(DISPLAY));
y yo en el top, tengo declarados estos puertos:
module top(
input [7:0] SW,
input CLK,
output [0:6] DISPLAY,
output [7:0] LEDS,
output [3:0] DISP_AN // Anodos de los displays
);
O sea, mientras mas complejo se hace el diseño, por ejemplo si el fpga tuviera 100 pines IO, en el top me quedarian declarados los 100 pines, esta bien eso?
gracias!!
-
Así es, una de las ventajas pricipales de utilizar un módulo superior es que puedas reutilizar los nombres de los pines en futuros proyectos.
Muchas veces se hace díficil realizar un módulo superior mediante código por que a medida que el proyecto se hace más complejo es necesario que utilices más módulos, para ello el ISE posee una forma de instanciar e interconectar los módulos mediante esquemáticos. En esta forma verás un poco más clara la declaración e interconección de los módulos, al principio es bastante tedioso aprender a utilizar los esquemáticos pero luego se hace más conveniente.
Otra ventaja de utilizar un módulo superior con el mismo nombre de pines es que puedes utilizar siempre el mismo archivo *.ucf o archivo de limitaciones, que es el que se encarga de realizar la interconexión de cada pin físico con cada pin del programa.
Lo que yo hago es utilizar un archivo al que llamamos universal.ucf y luego comentar o descomentar cada una de las líneas correspondiente a los pines si es que los voy a utilizar o no.
-
Así es, una de las ventajas pricipales de utilizar un módulo superior es que puedas reutilizar los nombres de los pines en futuros proyectos.
Muchas veces se hace díficil realizar un módulo superior mediante código por que a medida que el proyecto se hace más complejo es necesario que utilices más módulos, para ello el ISE posee una forma de instanciar e interconectar los módulos mediante esquemáticos. En esta forma verás un poco más clara la declaración e interconección de los módulos, al principio es bastante tedioso aprender a utilizar los esquemáticos pero luego se hace más conveniente.
Otra ventaja de utilizar un módulo superior con el mismo nombre de pines es que puedes utilizar siempre el mismo archivo *.ucf o archivo de limitaciones, que es el que se encarga de realizar la interconexión de cada pin físico con cada pin del programa.
Lo que yo hago es utilizar un archivo al que llamamos universal.ucf y luego comentar o descomentar cada una de las líneas correspondiente a los pines si es que los voy a utilizar o no.
Muchas gracias! yo hacia lo mismo del UCF y lo del top con todas las declaraciones, pero no sabia si lo estaba haciendo mal.
O sea, yo si tengo un diseño que use registros INOUT, yo se que estos solo se encuentran en los IOB, o sea que los buffers de alta impedancia se pueden usar solo en los pines (al menos en xilinx). Si yo declaro un modulo utilizando INOUT que no esta en el top, al interconectarlo por wires a los INOUT declarados en el top, el software lo entiende bien o estarias generando un error?
gracias!
-
Hola metalm.
:oops: No entiendo muy bien tu pregunta, lo que ocurre es que en la actualidad no he utilizado ningun pin como INOUT a la vez, unicamiente como entrada (input) o como salida (output) separadas.
Lo que si te puedo decir es que la unica forma de conectar los pines de un modulo interno con los pines del FPGA es que declares los pines del FPGA como "wire".
-
Hola metalm.
:oops: No entiendo muy bien tu pregunta, lo que ocurre es que en la actualidad no he utilizado ningun pin como INOUT a la vez, unicamiente como entrada (input) o como salida (output) separadas.
Lo que si te puedo decir es que la unica forma de conectar los pines de un modulo interno con los pines del FPGA es que declares los pines del FPGA como "wire".
gracias! actualmente me estoy volviendo completamente loco para hacer un shift register (SPI) jajaja
-
Por fin pude dar con la forma para asignacion de PINES en VHDL. Al parecer no hay una forma estandar de hacer esto, es decir, depende del fabricante del compilador. Por lo general he trabajado con WARP galaxy y despues migre a ispLEVER de Lattice Semiconductors. Pues bien los ejemplos de signacion de pines en el propio codigo VHDL que traigo son precisamente para estos compiladores (warp e isplever).
Esta seria la version en warp:
library ieee;
use ieee.std_logic_1164.all;
entity and2e is
port(
A,B: in std_logic;
F: out std_logic);
attribute pin_numbers of and2e: entity is
"A:2 B:3 F:23";
end and2e;
architecture comportamental of and2e is
begin
F <= B and A;
end comportamental;
attribute pin_numbers of and2e: entity is
"A:2 B:3 F:23";
end and2e;
En esta parte se aprecia la asignacion de A,B y F a los pines 2,3 y 23 respectivamente.
-
Ahora la version en isplever:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity and2e is
port(
A: in std_logic;
B: in std_logic;
F: out std_logic);
attribute LOC: string;
attribute LOC of A: signal is "P10";
attribute LOC of B: signal is "P11";
attribute LOC of F: signal is "P14";
end;
architecture comportamental of and2e is
begin
F <= B and A;
end comportamental;
attribute LOC: string;
attribute LOC of A: signal is "P10";
attribute LOC of B: signal is "P11";
attribute LOC of F: signal is "P14";
En este caso el mismo ejemplo asigna A,B y F a los pines 10,11 y 14 respectivamente.
Como pueden observar esta asignacion varia dependiendo del fabricante del compilador, xilinx tambien tiene su forma diferente. En algunos entornos de desarrollo se tiene asistentes que facilitan tremendamente esto, sobre todo en el caso de chips mas potentes como CPLDs o FPGAs. Espero que esto sea de utilidad.
saludos...