Capítulo 29 Puertas triestado.pdf

download Capítulo 29 Puertas triestado.pdf

of 11

Transcript of Capítulo 29 Puertas triestado.pdf

  • 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