-
Notifications
You must be signed in to change notification settings - Fork 202
Capítulo 29: Puertas triestado
(dibujo)
Ejemplos de este capítulo en github
Las puertas triestado (También conocidas como Buffers triestado) nos permiten desconetar las salidas de nuestros circuitos, impidiendo que vuelquen su tensión (0 ó 1) en el cable al que se conectan.
Las describiremos en Verilog, las simularemos y documentaremos las LIMITACIONES QUE PRESENTAN al ser sintetizadas con las herramientas libres del proyecto icestorm. El soporte de Yosys, Arachne y Icestorm para puertas triestado es muy limitado todavía al día de hoy (Nov - 2015)
Describiremos cómo funcionan y cómo se modelan en verilog
Las puertas triestado se comportan como interruptores que conectan la entrada con la salida cuando su señal de habilitación está activada. Su símbolo es el siguiente:
Tiene 3 puertos de 1 bit:
- entrada: Señal de entrada
- salida: Señal de salida
- enable: 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 un tercer estado, denominado alta impedancia, y se representa con la letra Z. Así, la salida de una puerta triestado puede encontrarse en los estados 0, 1 ó Z
Una 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 enable es 0
El primer ejemplo es un hola mundo: conexión de un led a través de una puerta triestado
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 un divisor de frecuencia que genera un pulso cuadrado de 1 segundo, de manera que el led deberá estar medio segundo encendido y medio segundo apagado
El código verilog es el siguiente:
`default_nettype none
`include "divider.vh"
module tristate1 (
input wire clk, //-- Entrada de reloj
output wire led0); //-- Led a controlar
//-- Parametro: periodo de parpadeo
parameter DELAY = `T_1s;
//-- Cable con la señal de tiempo
wire clk_delay;
//-- Biestable que está siempre a 1
reg reg1;
always @(posedge clk)
reg1 <= 1'b1;
//-- Conectar el biestable al led a traves de la puerta tri-estado
assign led0 = (clk_delay) ? reg1 : 1'bz;
//-- Divisor para temporizacion
divider #(DELAY)
CH0 (
.clk_in(clk),
.clk_out(clk_delay)
);
endmodule
TODO
0 You are leaving the privative sector (EN)
1 ¡Hola mundo! (EN) (RU)
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 prescalers (EN)
7 Contador de 4 bits con prescaler (EN)
8 Registro de 4 bits (EN)
9 Inicializador (EN)
10 Registro de desplazamiento (EN)
11 Multiplexor de 2 a 1 (EN)
12 Multiplexor de M a 1 (EN)
13 Inicializando registros (EN)
14 Registro de N bits con reset síncrono
15 Divisor de frecuencias
16 Contador de segundos
17 Generando tonos audibles
18 Tocando notas
19 Secuenciando notas
20 Comunicaciones serie asíncronas
21 Baudios y transmisión
22 Reglas de diseño síncrono
23 Controladores y autómatas finitos
24 Unidad de transmisión serie asíncrona
25 Unidad de recepción serie asíncrona
26 Memoria ROM
27 Memoria ROM genérica
28 Memoria RAM
29 Puertas triestado
30 Hacia el microprocesador y más allá