Download - Capítulo 1 ¡Hola Mundo! Setbit
-
8/17/2019 Capítulo 1 ¡Hola Mundo! Setbit
1/6
Inicio (EN)
Capítulos
0 You are leaving the privativesector (EN)1 ¡Hola mundo! (EN)2 De un bit a datos (EN)3 Puerta NOT (EN)4 Contador de 26 bits (EN)5 Prescaler de N bits (EN)6 Múltiples prescalers7 Contador de 4 bits con prescaler 8 Registro de 4 bits9 Inicializador 10 Registro de desplazamiento11 Multiplexor de 2 a 112 Multiplexor de M a 113 Inicializando registros
14 Registro de N bits con resetsíncrono15 Divisor de frecuencias16 Contador de segundos17 Generando tonos audibles18 Tocando notas19 Secuenciando notas20 Comunicaciones serieasíncronas21 Baudios y transmisión22 Reglas de diseño síncrono23 Controladores y autómatasfinitos
24 Unidad de transmisión serieasíncrona25 Unidad de recepción serieasíncrona26 Memoria ROM27 Memoria ROM genérica28 Memoria RAM29 Puertas triestado30 Hacia el microprocesador y másallá
Clone this wiki locally
Capítulo 1: ¡Hola mundo! SetbitManuel F. Jaimes edited this page Feb 13, 2016 · 30 revisions
Ejemplos de este capítulo en github
Antes de empezar No olvides clonar los tutoriales en tu ordenador, para tener acceso a todos los programas deejemplo:
https://github.com/Obijuan/open-fpga-verilog-tutorial.git
Entra en el directorio de trabajo del tutorial 1:
cd o pen-fpga-verilog- tutorial/tutorial/ICESTI CK/T01-s etbit /
¡Estás listo para hacer el tutorial!
IntroducciónEl circuito digital más sencillo es simplemente un cable que está conectado a un nivel lógicoconocido, por ejemplo 1. De esta forma al conectar un led se iluminará (1) o se apagará (0)
La salida de este circuito la hemos denominado A.
setbit.v: Descripción del hardware
Para sintetizar este circuito en la FPGA, primero lo tenemos que describir usando un lenguaje dedescripción hardware (HDL). En este tutorial utilizaremos Verilog, ya que tenemos todas lasherramientas libres para su simulación / síntesis.
Verilog es un lenguaje que sirve para describir hardware... pero ¡Cuidado! ¡NO ES UN LENGUAJEDE PROGRAMACIÓN! ¡Es un lenguaje de descripción! Nos permite describir las conexiones y los
13 31 15Watch Star ForkObijuan / open-fpga-verilog-tutorial
Code Issues 0 Pull requests 0 Wiki Pulse G raphs
Pages 40
https://github.com/Obijua
Clone in Desktop
Personal Open source Business Explore Pricing Blog S upport This repository Search Sign upSign upSign inSign in
converted by Web2PDFConvert.com
https://github.com/Obijuanhttps://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/watchershttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/stargazershttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-30%3A-Hacia-el-microprocesador-y-m%C3%A1s-all%C3%A1http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttps://github.com/Obijuan/open-fpga-verilog-tutorial/tree/master/tutorial/ICESTICK/T01-setbithttps://windows.github.com/https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-30%3A-Hacia-el-microprocesador-y-m%C3%A1s-all%C3%A1https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-29%3A-Puertas-triestadohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-28%3A-Memoria-RAMhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-27%3A-Memoria-ROM-gen%C3%A9ricahttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-26%3A-Memoria-ROMhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-25%3A-Unidad-de-recepci%C3%B3n-serie-as%C3%ADncronahttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-24%3A-Unidad-de-transmisi%C3%B3n-serie-as%C3%ADncronahttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-23%3A-Controladores-y-aut%C3%B3matas-finitoshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-22%3A-Reglas-de-dise%C3%B1o-s%C3%ADncronohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-21%3A-Baudios-y-transmisi%C3%B3nhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-20%3A-Comunicaciones-serie-as%C3%ADncronashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-19%3A-Secuenciando-notashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-18%3A-Tocando-notashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-17%3A-Generando-tonos-audibleshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-16%3A-Contador-de-segundoshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-15%3A-Divisor-de-frecuenciashttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-14%3A-Registro-de-N-bits-con-reset-s%C3%ADncronohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-13%3A-Inicializando-registroshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-12%3A-Multiplexor-de-M-a-1https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-11%3A-Multiplexor-de-2-a-1https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-10%3A-Registro-de-desplazamientohttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-9%3A-Inicializadorhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-8%3A-registro-de-4-bitshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-7%3A-Contador-de-4-bits-con-prescalerhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-6%3A-Multiples-prescalershttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-5%3A-N-bit-prescalerhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-5%3A-Prescaler-de-N-bitshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-4%3A-26-bit-counterhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-4%3A-Contador-de-26-bitshttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-3%3A-NOT-Gate.-Invhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-3%3A-Puerta-NOT.-Invhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-2%3A-From-bit-to-data.-Fporthttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-2%3A-De-un-bit-a-datos.-Fporthttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-1%3A-%C2%A1Hello-world%21-Setbithttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-1%3A-%C2%A1Hola-mundo%21-Setbithttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-0%3A-you-are-leaving-the-privative-sectorhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-0%3A-you-are-leaving-the-privative-sectorhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Home_ENhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Homehttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-1:-%C2%A1Hola-mundo!-Setbit/_historyhttps://github.com/Obijuan/open-fpga-verilog-tutorial/graphshttps://github.com/Obijuan/open-fpga-verilog-tutorial/pulsehttps://github.com/Obijuan/open-fpga-verilog-tutorial/wikihttps://github.com/Obijuan/open-fpga-verilog-tutorial/pullshttps://github.com/Obijuan/open-fpga-verilog-tutorial/issueshttps://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/Obijuanhttps://github.com/Obijuan/open-fpga-verilog-tutorial/networkhttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/stargazershttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/watchershttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://help.github.com/https://github.com/bloghttps://github.com/pricinghttps://github.com/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorial%2Fwiki%2FCap%25c3%25adtulo-1%3A-%25c2%25a1Hola-mundo%21-Setbithttps://github.com/join?source=header-repohttps://github.com/explorehttps://github.com/businesshttps://github.com/open-sourcehttps://github.com/personalhttps://github.com/
-
8/17/2019 Capítulo 1 ¡Hola Mundo! Setbit
2/6
elementos de un sistema digital.
El código verilog que implementa este circuito "hola mundo" se encuentra en el fichero setbit.v . Tiene
esta pinta:
//-- Fichero setbit.vmodule setbit ( output A);wire A;
assign A = 1;
endmodule
Síntesis en la FPGA Además del fichero en verilog del componente, necesitamos indicar a qué pin de la FPGA queremosconectar la salida A de nuestro componente. Este mapeo se realiza en el fichero setbit.pcf (pcf =Physical Constraint file). Lo sacaremos por el pin 99 que se corresponde con el led D1 de la placaICEStick. Pero podría ser cualquier otro :
set_io A 99
Sólo consta de una línea, en la que se asocia la etiqueta A del componente al pin 99 de la FPGA
En la figura 2 se muestra gráficamente esta idea. Como lo que estamos describiendo es hardware,
siempre es interesante hacerse esquemas y dibujos para comprenderlo mejor:
Para hacer la síntesis completa nos vamos al directorio tutorial/T01-setbit y ejecutamos el comandosudo make sint desde la consola:
$ sudo make sint
yosys -p "synth_ice40 -blif setbit.blif" setbit.v
/----------------------------------------------------------------------------\| || yosys -- Yosys Open SYnthesis Suite |
| || Copyright (C) 2012 - 2015 Clifford Wolf || || Permission to use, copy, modify, and/or distribute this software for any || purpose with or without fee is hereby granted, provided that the above |...
converted by Web2PDFConvert.com
http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttps://github.com/Obijuan/open-fpga-verilog-tutorial/blob/master/tutorial/ICESTICK/T01-setbit/setbit.v
-
8/17/2019 Capítulo 1 ¡Hola Mundo! Setbit
3/6
Saldrán muchos más mensajes. En mi portátil tarda en sintetizar menos de 1 segundo . Losmensajes finales que se obtienen son:
...After placement:PIOs 1 / 96PLBs 1 / 160BRAMs 0 / 16
place time 0.00sroute...pass 1, 0 shared.route time 0.00swrite_txt setbit.txt...#-- Generar binario final, listo para descargar en fgpaicepack setbit.txt setbit.bin$
Al terminar se habrá generado el fichero setbit.bin que es el que cargaremos en la FPGA paraconfigurarla. Introducimos la iCEStick en el USB y ejecutamos este comando:
$ sudo iceprog setbit.bin
NOTA: Si tenemos configurada la ICEStick como se indica en el capítulo 0, la carga se puedehacer sin necesidad de usar sudo
El proceso dura aproximadamente 3 segundos . Los mensajes que aparecen son:
[sudo] password for obijuan:init..cdone: highreset..cdone: lowflash ID: 0x20 0xBA 0x16 0x10 0x00 0x00 0x23 0x12 0x67 0x21 0x23 0x00 0x21 0x00 0x43file size: 32216erase 64kB sector at 0x000000..programming..reading..VERIFY OKcdone: highBye.$
El led D1 de la ICEStick se encenderá :
Nota: Puede que los otros LED se enciendan parcialmente; esto es normal y debido a que no leshemos asignado ninguna señal (internamente están conectados "al aire").
SimulaciónPrimero simulamos, luego sintetizamosEl ejemplo anterior lo hemos cargado directamente en la FPGA porque el diseño ya ESTABA
converted by Web2PDFConvert.com
http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF
-
8/17/2019 Capítulo 1 ¡Hola Mundo! Setbit
4/6
PROBADO PREVIAMENTE. Cuando trabajamos con FPGAs estamos haciendo hardware ytenemos que tener siempre mucho cuidado. Podemos escribir un código que por ejemplo tenga un
cortocircuito. Y podría ocurrir que las herramientas de síntesis no nos avisen con un warning (sobretodo con estas primeras versiones que todavía están en estado alfa). Si lo cargamos en la FPGA la
podríamos estropear parcialmente.
Por ello, SIEMPRE hay que simular el código que hagamos. Y una vez que estamos lo bastanteseguros de que funciona (o que no tiene error gordos) es cuando lo cargamos en la FPGA.
Probando componentes: banco de trabajoSi compramos un chip y lo queremos probar, ¿Qué hacemos?. Hombre, normalmente lo soldamos
directamente en el PCB o lo introducimos en un zócalo. Pero también lo podemos pinchar en una
placa entrendora y colocar nosotros los cables de conexión a la alimentación, señales y resto de
componentes.
En verilog (y resto de lenguajes HDL) hacemos lo mismo. Un componente descrito en Veri log (como
por ejemplo setbi t.v) no se puede simular directamente . Es necesario escribir un banco depruebas que indique qué cables conectar a sus pines, qué valores de prueba enviar y comprobar que por sus salidas salen resultados correctos. Este banco de pruebas es un fichero también en
Verilog.
¿Cómo comprobamos el componente setbit? Se trata de un chip que sólo tiene un pin de salidaque siempre está a '1'. En la vida real lo pondríamos en su placa de puntos, lo alimentaríamos,
conectaríamos un cable en su pin de salida (A) y usando un polímetro comprobaríamos que sale una
tensión igual a la de alimentación (un '1'). Haremos exactamente eso, pero describiéndolo en Verilog.
Gráficamente tendríamos lo siguiente:
El fichero se llama setbit_tb.v . Siempre usaremos el sufijo _tb para indicar que se trata de unbanco de pruebas (TestBench) y ¡No de hardware real!. Este banco de pruebas NO ESSINTETIZABLE. Es un código que sólo vale para la SIMULACIÓN. Lo que sintetizamos es el
componente setbit.v. Por eso, a la hora de hacer bancos de pruebas, estamos empleando Verilog nocomo una herramienta de descripción hardware sino como un programa. Aquí sí podemos pensar en Verilog como un lenguaje de programación tradicional .
El banco de pruebas tiene 3 elementos: el componente setbit, un cable que hemos llamado A y unbloque de comprobación (que sería el equivalente al polímetro en el mundo real). El código es elsiguiente:
converted by Web2PDFConvert.com
http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF
-
8/17/2019 Capítulo 1 ¡Hola Mundo! Setbit
5/6
//-- Fichero setbit_tb.v//-- Modulo para el test benchmodule setbit_tb ;
//-- Cable para conectar al pin de salida de setbit//-- Le podemos dar CUALQUIER nombre. Pero le llamamos A (igual que el pin de setbit)wire A;
//-- Colocar el componente (se denomina "Instanciar") y//-- Conectar en el pin A el cable Asetbit SB1 ( .A (A));
//-- Comenzamos las pruebas (bloque de comprobacion)initial begin
//-- Definir el fichero donde volcar los datos $dumpfile ( "setbit_tb.vcd" );
//-- Volcar todos los datos a ese fichero (al finalizar la simulacion) $dumpvars ( 0, setbit_tb);
//-- Pasadas 10 unidades de tiempo comprobamos si el cable está a '1' //-- En caso de no estar a 1, se informa del problema, pero la //-- simulacion no se detiene # 10 if (A != 1) $display ( "---->¡ERROR! Salida no esta a 1" ); else $display ( "Componente ok!" );
//-- Terminar la simulacion tras 10 unidades de tiempo desde la comprobacion # 10 $finish ;endendmodule
¡Simulando!Para simular utilizamos las herramientas Icarus Verilog y GTKwave. Ejecutamos el comando:
$ make sim
y automáticamente se nos abrirá una ventana con el resultado de la simulación:
A un golpe de vista comprobamos que se comporta como esperábamos: la señal del cable A está
siempre a '1'. Ignoramos las unidades de tiempo que pone, que por defecto está en segundos. Para
nosotros serán unidades de tiempo. Tras 20 unidades, la simulación termina.
En la consola veremos que han aparecido los siguientes mensajes:
converted by Web2PDFConvert.com
http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDF
-
8/17/2019 Capítulo 1 ¡Hola Mundo! Setbit
6/6
#-- Compilariverilog setbit.v setbit_tb.v -o setbit_tb.out#-- Simular./setbit_tb.outVCD info: dumpfile setbit_tb.vcd opened for output.Componente ok!#-- Ver visualmente la simulacion con gtkwavegtkwave setbit_tb.vcd setbit_tb.gtkw &
El que pone " Componente ok! " es el que hemos puesto nosotros en el banco de pruebas cuando lasalida estaba a '1'
Ejercicios propuestosCambiar el componente para que saque un 0. Descargarlo en la FPGA. Comprobar que el LED
está ahora apagado
Cambiar el ejemplo original para que se encienda el LED D2 en vez el D1 (está asociado al pin
98 en vez de al 99)
ConclusionesHemos creado nuestro primer circuito en verilog , un "hola mundo" formado por 1 cable . Lohemos sintetizado y cargado en la FPGA. También hemos programado un banco de pruebas enverilog para simularlo. Ya tenemos todas las herramientas instaladas, configuradas y hemos
comprobado que funcionan. Estamos listos para abordar diseños más complejos e ir aprendiendo
más verilog
Conceptos introducidos:Conexión de cables son assignCreación de componentes con moduleDefinición de puertos de salida con outputDefinición de un cable con wireBanco de pruebas
FPGA Libres: [ Wiki] [Repo ]
Status API Training Shop Blog About© 2016 GitHub, Inc. Terms Privacy Security Contact Help
http://www.web2pdfconvert.com/?ref=PDFhttp://www.web2pdfconvert.com/?ref=PDFhttps://help.github.com/https://github.com/contacthttps://github.com/securityhttps://github.com/site/privacyhttps://github.com/site/termshttps://github.com/abouthttps://github.com/bloghttps://shop.github.com/https://training.github.com/https://developer.github.com/https://status.github.com/https://github.com/Obijuan/open-fpga-verilog-tutorialhttps://github.com/Obijuan/open-fpga-verilog-tutorial/wiki