capítulo 29 puertas triestado.pdf
TRANSCRIPT
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
1/11
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 registros14 Registro de N bits con resetsíncrono
15 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ómatasfinitos24 Unidad de transmisión serieasíncrona25 Unidad de recepción serie
asíncrona26 Memoria ROM27 Memoria ROM genérica28 Memoria RAM29 Puertas triestado30 Hacia el microprocesador y másallá
Clone this wiki locally
Capítulo 29: Puertas triestadoJuan Gonzalez-Gomez edited this page Dec 31, 2015 · 31 revisions
Ejemplos de este capítulo en github
Introduc ciónLas puertas triestado (También conocidas como Buffers triestado ) nos permiten desconetar lassalidas de nuestros circuitos , impidiendo que vuelquen su tensión (0 ó 1) en el cable al que seconectan.
Las describiremos en Verilog, las simularemos y documentaremos las LIMITACIONES QUEPRESENTAN al ser sintetizadas con las herramientas libres del proyecto icestorm. El soportede Yosys, Arachne y Icestorm para puertas triestado es muy limitado todavía al día de hoy (Nov -2015)
Puertas triestadoDescribiremos cómo funcionan y cómo se modelan en verilog
Funcionamiento
Las puertas triestado se comportan como interruptores que conectan la entrada con la salidacuando su señal de habilitación está activada. Su símbolo es el siguiente:
Tiene 3 puertos de 1 bit:
13 31 15Watch Star ForkObijuan / open-fpga-verilog-tutorial
Code Issues 0 Pull requests 0 Wiki Pulse Graphs
Pages 40
https://github.com/Obiju
Personal Open source Business Explore Pricing Blog Support This repository Search Sign upSign in
https://github.com/http://localhost/var/www/apps/conversion/tmp/scratch_4/personalhttp://localhost/var/www/apps/conversion/tmp/scratch_4/open-sourcehttp://localhost/var/www/apps/conversion/tmp/scratch_4/businesshttp://localhost/var/www/apps/conversion/tmp/scratch_4/explorehttps://es.wikipedia.org/wiki/Buffer_triestadohttps://github.com/Obijuan/open-fpga-verilog-tutorial/tree/master/tutorial/ICESTICK/T29-tristatehttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-30%3A-Hacia-el-microprocesador-y-m%C3%A1s-all%C3%A1http://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-28%3A-Memoria-RAMhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-27%3A-Memoria-ROM-gen%C3%A9ricahttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-26%3A-Memoria-ROMhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-25%3A-Unidad-de-recepci%C3%B3n-serie-as%C3%ADncronahttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-24%3A-Unidad-de-transmisi%C3%B3n-serie-as%C3%ADncronahttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-23%3A-Controladores-y-aut%C3%B3matas-finitoshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-22%3A-Reglas-de-dise%C3%B1o-s%C3%ADncronohttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-21%3A-Baudios-y-transmisi%C3%B3nhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-20%3A-Comunicaciones-serie-as%C3%ADncronashttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-19%3A-Secuenciando-notashttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-18%3A-Tocando-notashttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-17%3A-Generando-tonos-audibleshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-16%3A-Contador-de-segundoshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-15%3A-Divisor-de-frecuenciashttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-14%3A-Registro-de-N-bits-con-reset-s%C3%ADncronohttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-13%3A-Inicializando-registroshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-12%3A-Multiplexor-de-M-a-1http://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-11%3A-Multiplexor-de-2-a-1http://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-10%3A-Registro-de-desplazamientohttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-9%3A-Inicializadorhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-8%3A-registro-de-4-bitshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-7%3A-Contador-de-4-bits-con-prescalerhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-6%3A-Multiples-prescalershttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-5%3A-N-bit-prescalerhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-5%3A-Prescaler-de-N-bitshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-4%3A-26-bit-counterhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-4%3A-Contador-de-26-bitshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-3%3A-NOT-Gate.-Invhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-3%3A-Puerta-NOT.-Invhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-2%3A-From-bit-to-data.-Fporthttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-2%3A-De-un-bit-a-datos.-Fporthttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-1%3A-%C2%A1Hello-world%21-Setbithttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-1%3A-%C2%A1Hola-mundo%21-Setbithttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Chapter-0%3A-you-are-leaving-the-privative-sectorhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-0%3A-you-are-leaving-the-privative-sectorhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Home_ENhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Homehttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wiki/Cap%C3%ADtulo-29:-Puertas-triestado/_historyhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/graphshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/pulsehttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/wikihttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/pullshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/issueshttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorialhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorialhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuanhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/networkhttp://localhost/var/www/apps/conversion/tmp/scratch_4/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/stargazershttp://localhost/var/www/apps/conversion/tmp/scratch_4/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttp://localhost/var/www/apps/conversion/tmp/scratch_4/Obijuan/open-fpga-verilog-tutorial/watchershttp://localhost/var/www/apps/conversion/tmp/scratch_4/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorialhttps://help.github.com/http://localhost/var/www/apps/conversion/tmp/scratch_4/bloghttp://localhost/var/www/apps/conversion/tmp/scratch_4/pricinghttp://localhost/var/www/apps/conversion/tmp/scratch_4/login?return_to=%2FObijuan%2Fopen-fpga-verilog-tutorial%2Fwiki%2FCap%25C3%25ADtulo-29%3A-Puertas-triestadohttp://localhost/var/www/apps/conversion/tmp/scratch_4/join?source=header-repohttp://localhost/var/www/apps/conversion/tmp/scratch_4/explorehttp://localhost/var/www/apps/conversion/tmp/scratch_4/businesshttp://localhost/var/www/apps/conversion/tmp/scratch_4/open-sourcehttp://localhost/var/www/apps/conversion/tmp/scratch_4/personalhttps://github.com/
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
2/11
entrada : Señal de entradasalida : Señal de salidaenable : Señal de habilitación
Cuando la señal de habilitacion está a 1, la entrada está conectada directamente a la salida .Sin embargo, cuando está a 0, la salida queda desconectada . Se considera que está en untercer estado, denominado alta impedancia , y se representa con la letra Z. Así, la salida de unapuerta triestado puede encontrarse en los estados 0 , 1 ó Z
Descripción en VerilogUna puerta triestado se modela de la siguiente forma:
assign salida = (enable) ? entrada : 1'bz ;
El sintetizador reconoce que es una puerta triestado porque se le asigna el valor z cuando enablees 0
Ejemplo 1: conexión de un ledEl primer ejemplo es un hola mundo: conexión de un led a través de una puerta triestado
Diagrama de bloques
Se coloca un biestable con un 1 a su entrada, para que se cargue en el primer flanco de subida .Su salida se conecta al led a través de una puerta triestado . La señal de enable se conecta a undivisor de frecuencia que genera un pulso cuadrado de 1 segundo , de manera que el leddeberá estar medio segundo encendido y medio segundo apagado
Descripción en verilog
El código verilog es el siguiente:
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
3/11
`default_nettype none
`include "divider.vh"
module tristate1 ( input wire clk, //-- Entrada de reloj output wire led0); //-- Led a controlar
//-- Parametro: periodo de parpadeoparameter DELAY = ̀ T_1s;
//-- Cable con la señal de tiempowire clk_delay;
//-- Biestable que está siempre a 1reg reg1;always @( posedge clk) reg1
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
4/11
La simulación se realiza con el siguiente comando:
$ make sim
Y la simulación en gtkwave es:
Se puede ver cómo la señal del led permanece a 1 durante 2 ciclos de reloj, y luego a altaimpedancia (color amarillo) durante los otros 2 ciclos
Síntesis y pruebas
La síntesis se realiza con el comando:
$ make sint
Los recursos empleados son:
Recurso ocupación
PIOs 3 / 96
PLBs 10 / 160
BRAMs 0 / 16
El diseño se carga con:
$ sudo iceprog tristate1.bin
Al ejecutarse se verá cómo parpadea el led a la frecuencia de 1 Hz
Ejemplo 2: Conexión de un led a un busde 1 bitEn este ejemplo conectaremos la salida de tres registros de 1 bit a un bus de 1 bit , mediantepuertas triestado
Diagrama de bloques
El bus de un bit está conectado a un led de salida para poder visualizar lo que ocurre. Los tresbiestables están conectados al bus a través de puertas triestado . Se inicializan con los valoresiniciales 1, 0 y 1 respectivamente.
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
5/11
Las puertas triestado están habilitadas por los bits 0, 1 y 2 de un registro de desplazamiento ,que inicialmente tiene el valor binario 0001, y va tomando los valores 0010, 0100 y 1000 por cadapulso de la señal clk_delay (de 1 segundo). De esta forma, primero se vuelca al bus el registro 0,luego el 1, luego el 2 y después ninguno. Al cabo de 4 ciclos de clk_delay se vuelve a comenzar
Descripción en verilog
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
6/11
`default_nettype none
`include "divider.vh"
module tristate2 ( input wire clk, //-- Entrada de reloj output wire led0); //-- Led a controlar
//-- Parametro: periodo de parpadeoparameter DELAY = ̀ T_1s;
//-- Cable con la señal de tiempowire clk_delay;
//-- Bus de 1 bitwire bus;
//-- Señal de resetreg rstn = 0;
//-- Registro de desplazamientoreg [ 3: 0] sreg;
//-- Definir los 3 bistables a conectar al bus, cada uno con un
//-- valor inicial cualquierareg reg0;always @( posedge clk) reg0
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
7/11
Simulación
El banco de pruebas es similar al del ejemplo anterior.
Para simular ejecutamos el comando:
$ make sim2
En gtkwave obtenemos lo siguiente:
Observamos cómo primero se vuelca el registro 0, que saca un 1 por el led. Luego el registro 1,que vuelca un 0, después el 2, que vuelve a volcar un 1 y finalmente todos desconectados,visualizándose la línea amarilla que indica alta impedancia . El ciclo se repite indefinidamente
Síntesis y pruebas
La síntesis se realiza con el comando:
$ make sint2
Los recursos empleados son:
Recurso ocupación
PIOs 3 / 96
PLBs 13 / 160
BRAMs 0 / 16
El diseño se carga con:
$ sudo iceprog tristate2.bin
Al ejecutarse se verá cómo parpadea el led a la frecuencia de 1 Hz
Limitaciones en síntesisLa versión actual del sintetizador usado en el proyecto icestorm (Yosys) tiene un soporte parapuertas triestado MUY LIMITADO . Por ello, de momento conviene NO USARLAS ENNUESTROS DISEÑOS
Mostraremos una serie de ejemplos que sí funcionan en simulación , pero que al sintetizarsecon las herramientas libres obtenemos errores . Se incluyen aquí como documentación, parapoder comprobar en las versiones futuras y si ya está solucionado
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
8/11
Versión de las herramientas
$ yosys -VYosys 0.5+385 (git sha1 ddf3e2d, clang 3.6.0-2ubuntu1 -fPIC -Os)
$ arachne-pnr -varachne-pnr 0.1+134+0 (git sha1 788cf79, g++ 4.9.2-10ubuntu13 -O2)
Error1.v: Conexión de un registro de 2 bitsEn este ejemplo conectaremos un registro de 2 bits a dos leds mediante una puerta triestado de 2bits. El diagrama es el siguiente:
La descripción en verilog:
`default_nettype none
module error1 ( input wire clk, //-- Entrada de reloj output wire [ 1: 0] leds); //-- Leds a controlar
wire ena = 1'b1 ;
//-- Registro de 2 bitsreg [ 1: 0] reg1;
//-- Cargar el registro con valor inicialalways @( posedge clk) reg1
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
9/11
Sin embargo, al sintetizar obtenemos el siguiente mensaje de error:
$ make sint3
...2.12.2. Executing Verilog-2005 frontend.Parsing Verilog input from ̀ /usr/local/bin/../share/yosys/ice40/arith_map.v' to AGenerating RTLIL representation for module ̀ \_80_ice40_alu'.Successfully finished Verilog frontend.Mapping error1.$ternary$error1.v:42$2 ($tribuf) with simplemap.
terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check: __n (which is 1) >= this->size() (which is 1)Aborted (core dumped)Makefile:143: recipe for target 'error1.bin' failedmake: *** [error1.bin] Error 134
Error2.v: Dos puertas con la misma señal dehabilitación
En este ejemplo se conectan dos registros de un bit a un bus de 2 bits mediante dos puertas
triestado que usan la misma señal de habilitación:
La descripción en verilog es:
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
10/11
`default_nettype none
module error2 ( input wire clk, //-- Entrada de reloj output wire [ 1: 0] leds); //-- Leds a controlar
//-- Senal de habilitacion para las puertaswire ena = 1'b1 ;
//-- Registro de 1 bit
reg reg0;always @( posedge clk) reg0
-
8/17/2019 Capítulo 29 Puertas triestado.pdf
11/11
La alternativa es sustituir las puertas triestado por un multiplexor de 4 a 1 , con una señal deselección de 2 bits:
EjerciciosTodo
ConclusionesTODO
FPGA Libres: [ Wiki] [Repo ]
Status API Training Shop Blog About© 2016 GitHub,Inc. Terms Privacy Security Contact Help
https://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