Академический Документы
Профессиональный Документы
Культура Документы
Para que diferentes circuitos se puedan comunicar entre ellos, las velocidades estn
normalizadas. Pueden tener los siguientes valores: 115200, 56700, 38400, 19200, 9600,
4800, 2400, 1200, 600 y 300 baudios. Nosotros la fijaremos a la mxima: 115200 baudios
Para transmitir a una velocidad de X baudios, necesitamos generar una seal cuadrada cuya
frecuencia sea igual a X. Cada flanco de subida de esta seal indica cundo enviar el
siguiente bit:
Lo primero que necesitamos para transmitir datos es generar la seal de reloj con la
frecuencia adecuada. Esto ya lo sabemos hacer: usaremos un divisor de frecuencias.
Cuando trabajamos con la placa iCEstick, el divisor para conseguir una velocidad de B
baudiosviene dado por la ecuacin: M = 12000000 / B
Por tanto, para transmitir a 115200 baudios necesitamos un divisor de: M = 12000000 /
115200 = 104.16 -> M = 104
Los valores de los divisores para transmitir a las velocidades estndares estn calculados
con la frmula anterior y se encuentran en el fichero baudgen.vh:
Para generar la seal de reloj para transmitir a una velocidad (por ejemplo 115200 baudios)
es tan sencillo como instanciar el divisor que ya conocemos usando las constantes
anteriores:
divider #(`B115200)
BAUD0 (
.clk_in(clk),
.clk_out(clk_baud)
);
Este primer ejemplo enva el carcter "K" desde la FPGA al ordenador cada vez que la seal
dtr pasa de 0 a 1, a la velocidad de 115200 baudios
Funcionamiento
Para realizar una transmisin del dato usaremos un registro de desplazamiento, con carga
paralela. La salida serie se conecta directamente a la linea de transmisin tx, a travs de un
multiplexor. Cuando la seal de load est a 0, el registro se carga con un valor de 10 bits: el
dato "K", seguido de los bits 01 (bit de start y bit de reposo).
Para hacer las pruebas, load est conectada a la seal dtr, por lo que la podremos controlar
manualmente desde el pc. Al ponerla a 1 se empieza la transmisin. Cuando se haya enviado
el carcter K, el registro de desplazamiento tendr todos sus bits a 1 y lo que sale por tx ser
siempre un 1. Es decir, que no habr transmisin. Al poner load a 0, se carga con el nuevo
valor, y cuando pase a 1 se enviar el nuevo dato.
`include "baudgen.vh"
endmodule
`default_nettype none
Por defecto en Verilog, si aparecen etiquetas no declaras se asumen que son cables (tipo
wire). Esto podra parecer muy til pero es una fuente de problemas en la depuracin. Cuando
el diseo es complejo y se tienen muchos cables, puede ocurrir que uno de ellos se escriba
mal. El compilador, en vez de dar un error, supondr que se trata de un cable nuevo. Este
comportamiento se puede cambiar con la instruccin anterior. Al definir el tipo de cable a none,
cada vez que se detecte un identificador no declarado, saltar un mensaje de error
En el componente se instancia el divisor para generar la seal de reloj para transmitir a 115200
baudios. Esta seal se usa como reloj para el registro de desplazamiento
Simulacin
Para simular
El resultado es:
La primera seal es el reloj para la transmisin de los bits a 115200 baudios. Cuando dtr se
pone a cero se carga el registro. Al ponerse a 1 se empieza a enviar el dato en serie. En el
pantallazo se observan 2 pulsos en dtr y cmo despues de ellos se comienza a enviar el dato
en serie
Sntesis y pruebas
$ make sint
Los recursos ocupados son:
Recurso ocupacin
PIOs 6 / 96
8 / 160
BRAMs 0 / 16