From d8be22f1c9a0baafb75f140c01c35b23d56e3f3a Mon Sep 17 00:00:00 2001 From: Obijuan Date: Tue, 21 May 2024 12:41:04 +0200 Subject: [PATCH] update readme --- README.md | 56 ++++- locale/translation.js | 539 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 593 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b1359cf..63f46e2 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,61 @@ For installing and using this colection in Icestudio follow these steps: * Select the collection: *Select > Collection* - +## Blocks +* **Bus** + * Join-lcd-bus-8bits + * LCD-BUS1-join + * LCD-BUS1-split + * Split-lcd-bus-8bits +* **Controllers** + * **4-bits** + * LCD-controller-busy-4-bits + * LCD-controller-open-4-bits + * **8-bits** + * LCD-controller-busy-8-bits + * LCD-controller-open-8-bits +* **Parts** + * LCD-config + * LCD-io-4-bits-ICE40 + * LCD-io-8-bits-ICE40 + * **Nivel-0** + * LCD-cycle-ns + * LCD-cycle + * **Nivel-1** + * **4-bits-busy** + * 0-LCD-cycle-busy-4-bits + * 1-LCD-cycle-rw-4-bits + * 2-LCD-wait-busy-4-bits + * 3-LCD-write-busy-4-bits + * **4-bits-open** + * LCD-write-open-4-bits + * **8-bits-busy** + * LCD-cycle-rw-8-bits + * LCD-wait-busy-8-bits + * LCD-write-busy-8-bits + * **8-bits-open** + * LCD-write-open-8-bits + +## Examples +* 00-Index +* **01-Controller-busy-4-bits** + * 01-print-A-button + * 02_print-HOLA-button + * 03-Display-BIT + * 04-Display-2xBIT + * 05-memory-string + * 06-user-chars + * 07-switch-on-off + * 08-user-chars +* **02-LCD-Shield** + * 01-print-A-button + * 02-print-HOLA-button + * 03-Display-BIT + * 04-Display-2xBIT + * 05-memory-string + * 06-user-chars-LCD-Shield + * 07-switch-on-off + * 08-user-chars ## Authors * [Carlos Venegas (Cavearr)](https://github.com/cavearr) diff --git a/locale/translation.js b/locale/translation.js index 0ad6c76..f98cabe 100644 --- a/locale/translation.js +++ b/locale/translation.js @@ -7,4 +7,541 @@ // 1. Open the PO file with Poedit // 2. Press "Update" to update from sources - +gettext('Bus'); +gettext('Controllers'); +gettext('Parts'); +gettext('Join-lcd-bus-8bits'); +gettext('Pack all the LCD signal into a bus. 8-bits data LCDs'); +gettext('Bus11-Join-3-8: Join the two buses into an 11-bits Bus'); +gettext('Bus3-Join-all: Joint three wires into a 3-bits Bus'); +gettext('LCD-BUS1-join'); +gettext('LCD-Bus-split: Get the LCD sub-buses'); +gettext('Bus12-Split-4-8: Split the 12-bits bus into two buses of 4 and 8 wires'); +gettext('Bus4-Split-all: Split the 4-bits bus into its wires'); +gettext('LCD-BUS1-split'); +gettext('LCD-Bus-Join: Join the lcd sub-buses into a BUS'); +gettext('Bus12-Join-4-8: Join the two buses into an 12-bits Bus'); +gettext('Bus4-Join-all: Join all the wires into a 4-bits Bus'); +gettext('Split-lcd-bus-8bits'); +gettext('UnPack the LCD bus into its isolated signals'); +gettext('Bus11-Split-3-8: Split the 11-bits bus into two buses of 3 and 8 wires'); +gettext('Bus3-Split-all: Split the 3-bits bus into three wires'); +gettext('4-bits'); +gettext('8-bits'); +gettext('LCD-controller-busy-4-bits'); +gettext('LCD-controller-busy-4-bits: Controlador de LCD en bucle cerrado con interfaz de 4-bits'); +gettext('Temporizador en milisegundos. La señal p está activa durante el tiempo indicado. Por tic se emite un tic al finalizar'); +gettext('Configuración del Pin de mayor peso como E/S. Permite leer el flag de Busy del LCD'); +gettext('InOut-Right_ICE40: InOut block, with the pin on the right side, for ICE40 FPGA Family'); +gettext('Bus4-Split-1-3: Split the 4-bits bus into two: 1-bit and 3-bits buses'); +gettext('Bus4-Join-1-3: Join the two buses into a 4-bits Bus'); +gettext('1-to-2 DeMultplexer (1-bit channels)'); +gettext('Two bits input And gate'); +gettext('NOT gate (Verilog implementation)'); +gettext('OR2: Two bits input OR gate'); +gettext('2-to-1 Multplexer (1-bit channels)'); +gettext('Constant bit 1'); +gettext('Constant bit 0'); +gettext('2-to-1 Multplexer (8-bit channels)'); +gettext('2-to-1 Multplexer (4-bit channels)'); +gettext('Bus8-Join-half: Join the two same halves into an 8-bits Bus'); +gettext('Bus8-Split-half: Split the 8-bits bus into two buses of the same size'); +gettext('LCD-config: Enviar los comandos de inicialización y configuración al controlador del LCD (de nivel 1)'); +gettext('Circuito combinacional de 3 entradas y 8 salidas'); +gettext('Comp1-x03: Comparator of 3-bits operand and parameter'); +gettext('Generic: 3-bits generic constant (0-7)'); +gettext('Comp2-3bit: Comparator of two 3-bit numbers'); +gettext('Comp2-1bit: Comparator of two 1-bit numbers'); +gettext('XOR gate: two bits input xor gate'); +gettext('Three bits input And gate'); +gettext('Comparador mayor que o igual, de un operando de 3 bits'); +gettext('Bus8-Join-6-2: Join the two buses into an 8-bits Bus'); +gettext('Generic: 6-bits generic constant (0-63)'); +gettext('Bus2-Join-all: Joint two wires into a 2-bits Bus'); +gettext('1-bit generic constant (0/1)'); +gettext('Máquina de contar, de 2 bits (cuenta hasta 4 ciclos)'); +gettext('Puerta AND'); +gettext('Puerta OR'); +gettext('Comparador de dos operandos de 3 bits'); +gettext('Valor genérico constante (menos 1), de 3 bits. Su valor se introduce como parámetro. Por defecto vale 0'); +gettext('Sumador de un operando de 3 bits con una constante pasada como parámetro (No hay accarreo)'); +gettext('Biestable de almacenamiento del estado de la máquina'); +gettext('Puerta NOT'); +gettext('RS-FF-set-verilog. RS Flip-flop with priority set. Implementation in verilog'); +gettext('Rising-edge detector. It generates a 1-period pulse (tic) when a rising edge is detected on the input. Block implementation'); +gettext('System - D Flip-flop. Capture data every system clock cycle. Verilog implementation'); +gettext('Falling-edge detector. It generates a 1-period pulse (tic) when a falling edge is detected on the input'); +gettext('03-Reg-rst: 3 bits Register with reset. Verilog implementation'); +gettext('LCD-write-busy-4-bits: Escritura de comandos/datos en el LCD (en bucle cerrado). Interfaz de 4 bits'); +gettext('1-to-2 DeMultiplexer (1-bit channels) (Flipped version)'); +gettext('LCD-wait-4-bits: Generar un ciclo de lectura/escritura. La lectura se realiza periodicametne hasta que el flag de busy se pone a 0'); +gettext('OR4: Four bits input OR gate'); +gettext('LCD-cycle-rw-4-bit: Generar un ciclo de lectura ó escritura en el LCD. En el de lectura se captura el valor del busy Flag (BF)'); +gettext('DFF. D Flip-flop. Verilog implementation'); +gettext('LCD-cycle-busy-4-bits: Generar un ciclo en la señal E del LCD, para una interfaz de 4 bits'); +gettext('Mach-count-1-bit: 1-bit count machine'); +gettext('TFF-verilog. System TFF with toggle input: It toogles on every system cycle if the input is active. Verilog implementation'); +gettext('LCD-cycle-ns: Generar un ciclo en la señal E del LCD'); +gettext('Unit-ns-4bits: ns to cycles converter. Max value: 1250 ns (15 cycles)'); +gettext('LCD-cycle: Generar un ciclo en la señal E del LCD'); +gettext('Bus2-Split-all: Split the 2-bits bus into two wires'); +gettext('Comp1-x02: Comparator of 2-bits operand and parameter'); +gettext('Comp2-2bit: Comparator of two 2-bit numbers'); +gettext('Generic: 2-bits generic constant (0,1,2,3)'); +gettext('Div4-unit-4bits: Divide a 4-bits uint number by 4'); +gettext('SR1-uint4: Shift a 4-bit value one bit right. MSB is filled with 0 (no sign used)'); +gettext('Mach-count-2-bit: 2-bit count machine'); +gettext('Counter-rst-x02: 2-bits counter with reset'); +gettext('Inc1-2bit: Increment a 2-bits number by one'); +gettext('AdderK-2bit: Adder of 2-bit operand and 2-bit constant'); +gettext('Adder-2bits: Adder of two operands of 2 bits'); +gettext('Adder-1bit: Adder of two operands of 1 bit'); +gettext('AdderC-1bit: Adder of two operands of 1 bit plus the carry in'); +gettext('02-Reg-rst: 2 bits Register with reset. Verilog implementation'); +gettext('Sys-Delay-xN-3bits: The input tic is delayed N cycles'); +gettext('Counter-M-x03: 3-bits M module counter with reset'); +gettext('Inc1-3bit: Increment a 3-bits number by one'); +gettext('AdderK-3bit: Adder of 3-bit operand and 3-bit constant'); +gettext('Adder-3bits: Adder of two operands of 3 bits'); +gettext('Sys-Delay-xN-32bits: The input tic is delayed N cycles'); +gettext('Counter-M-x32: 32-bits M module counter with reset'); +gettext('Inc1-32bit: Increment a 32-bits number by one'); +gettext('AdderK-32bit: Adder of 32-bit operand and 32-bit constant'); +gettext('Generic: 32-bits generic constant'); +gettext('Adder-32bits: Adder of two operands of 32 bits'); +gettext('Adder-8bits: Adder of two operands of 8 bits'); +gettext('Adder-4bits: Adder of two operands of 4 bits'); +gettext('AdderC-4bits: Adder of two operands of 4 bits and Carry in'); +gettext('AdderC-8bits: Adder of two operands of 8 bits and Carry in'); +gettext('Bus16-Join-half: Join the two same halves into an 16-bits Bus'); +gettext('Bus24-Join-8-16: Join the two buses into an 24-bits Bus'); +gettext('Bus32-Split-8-24: Split the 28-bits bus into two buses of 8 and 24 wires'); +gettext('Bus24-Split-16-8: Split the 24-bits bus into two buses of 16 and 8 wires'); +gettext('Bus16-Split-half: Split the 16-bits bus into two buses of the same size'); +gettext('Bus32-Join-8-24: Join the two buses into an 32-bits Bus'); +gettext('Geu-32-Bits_v: 32-bit Unsigned Greather than or equal comparator. Verilog implementation'); +gettext('32-Reg-rst: 32 bits Register with reset. Verilog implementation'); +gettext('Unit-ns-32bits: ns to cycles converter'); +gettext('Unit-ms-32bits: ms to cycles converter'); +gettext('08-Reg: 8 bits Register. Verilog implementation'); +gettext('start: Start signal: It goes from 1 to 0 when the system clock starts. 1 cycle pulse witch. Block implementation'); +gettext('Arrancar la inicialización!'); +gettext('**COMIENZO!**'); +gettext('## Retraso inicial\n\nSe deben esperar 15ms para que el LCD arranque'); +gettext('Comandos necesarios para inicializar \ny configurar el LCD'); +gettext('Escribir comando actual'); +gettext('Fin de Inicialización'); +gettext('Número de comandos \nde inicialización'); +gettext('Comandos totales'); +gettext('Cursor ON/OFF'); +gettext('Blink ON/OFF'); +gettext('Dirección donde está \nel cmd disp_ctrl'); +gettext('Comando a escribir en \nel LCD'); +gettext('Tipo de comando'); +gettext('LCD-write-busy-4-bits'); +gettext('Escribir un comando en el LCD'); +gettext('Siguiente \ncomando'); +gettext('Modo inicialización'); +gettext('Modo normal'); +gettext('Señal que indica si el controladore está \nen la fase de inicialización o no'); +gettext('## Seleccionar las entradas según el modo: Inicialización o normal\n\n'); +gettext('**Arranque del** \n**temporizador**'); +gettext('**Salida de pulso**'); +gettext('**Salida de tic**'); +gettext('**Parametro del timer** \nmilisegundos a esperar'); +gettext('Pines de datos del \nLCD (D7-D0)'); +gettext('Valor del pin DB7 (mayor peso) \ncuando es de entrada \n(Por aquí llega el BF)'); +gettext('El pin DB7 \nse configura como E/S'); +gettext('* oe=1: OUTPUT\n* oe=0: INPUT'); +gettext('InOut_Right_ICE40'); +gettext('Input'); +gettext('Output'); +gettext('Channel B'); +gettext('Channel A'); +gettext('Máquina de contador: \nSe envían los 7 comandos'); +gettext('La instrucción en la posición de memoria 5 es la \nde display control. Se \"mapea\" en esa dirección \nun valor diferente, formado a partir de los bits \n`C` y `B` que llegan como parámetross'); +gettext('Seleccionar dato: \n* 1: De memoria\n* 2: Comando DISPLAY-control'); +gettext('## Comando DISPLAY CONTROL \n\nConstruir el comando a partir de los parámetros `C` y `B`'); +gettext('A'); +gettext('B'); +gettext('**Reloj del sistema**'); +gettext('**Estado de** \n**la máquina**'); +gettext('Máquina encendida'); +gettext('Máquina apagada \n(rst = 1)'); +gettext('Tic de arranque'); +gettext('Tic de fin'); +gettext('**Contador de ciclos**'); +gettext('Número de ciclos \ncontados'); +gettext('Valor \nincrementado'); +gettext('### Salidas'); +gettext('Estado de la máquina'); +gettext('Ciclo actual'); +gettext('Cuenta finalizada'); +gettext('Ejecutar el ciclo'); +gettext('Número de ciclos \na contar'); +gettext('¿Estamos en el \nciclo k-1?'); +gettext('Solo se hace caso a la \nentrada next si la \nmáquina está encendida'); +gettext('Nuevo ciclo'); +gettext('Si es el ciclo k-1 y \nse pide un ciclo \nnuevo: Terminar'); +gettext('Apagar la \nmáquina'); +gettext('Ciclo nuevo: \nincrementar la cuenta'); +gettext('El tic de start se saca \npor exec para que se ejecute \nel primer ciclo'); +gettext('Si la máquina está \napagada, las señales \nde ejecución no pueden \nsalir!'); +gettext('Retrasar la señal un ciclo \nmientras que se detecta si \nla máquina ha finalizado o no'); +gettext('**Tic de apagado**'); +gettext('**Tic de encendido**'); +gettext('**Inicializar**'); +gettext('**Estado de la máquina**'); +gettext('## Rising edge detector\n\nIt generates a 1-period pulse (tic) when a rising edge is detected on the \ninput signal'); +gettext('Input signal'); +gettext('System clock'); +gettext('Current signal \nstate'); +gettext('Signal state in the previous \nclock cycle'); +gettext('If the current signal is 1 and its value in \nthe previous clock cycle was 0, it means \nthat a rising edge has been detected! \nThe output es 1\n\nIn any other case the output is 0'); +gettext('**Delay**: 0 clock cycles \n\nThere is no delay between the arrival of a rising edge \nand its detection'); +gettext('Parameter: Initial value'); +gettext('Input data'); +gettext('# D Flip-Flop (system)\n\nIt stores the input data that arrives at cycle n \nIts output is shown in the cycle n+1'); +gettext('Not connected'); +gettext('## Falling edge detector\n\nIt generates a 1-period pulse (tic) when a falling edge is detected on the \ninput signal'); +gettext('If the current signal is 0 and its value in \nthe previous clock cycle was 1, it means \nthat a falling edge has been detected! \nThe output es 1\n\nIn any other case the output is 0'); +gettext('**Delay**: 0 clock cycles \n\nThere is no delay between the arrival of a falling edge \nand its detection'); +gettext('EStado del bloque:\n* 0: OFF (libre)\n* 1: ON (ocupado)'); +gettext('Señal de validación de datos \npara el LCD'); +gettext('Ciclo completado'); +gettext('Tipo de comando: \n* 0: Inicializacion\n* 1: Normal'); +gettext('Registrar las señales para que `cmd` y `rs_in` \npermanezcan estables durante toda la ejecución \ndel controlador'); +gettext('Máquina de contar \nde 1 bit: cuanta 0-1 '); +gettext('* n=1: Ciclo de lectura \n* n=0: Ciclo de escritura'); +gettext('Si es un comando de inicialización \n(cmd=0) y es el primer ciclo (n=1) \nSaltar el wait (no se ejecuta)'); +gettext('SKIP'); +gettext('Dato a enviar al LCD'); +gettext('Multiplexación de los datos'); +gettext('Tipo de ciclo: \n* 0: Escritura\n* 1: Lectura'); +gettext('# Realizar un ciclo lectura o escritura con espera en la lectura\n\nEl ciclo de escritura se realiza normalmente \nEl ciclo de lectura se repite indefinidamente hasta que el flag de busy se pone a 0'); +gettext('Ciclo rw lectura'); +gettext('¿Es ciclo de lectura (rw=1) y \nel flag de busy está a 1?'); +gettext('Tomar una decisión'); +gettext('Ciclo de lectura y \nBF es 1 (Ocupado)'); +gettext('REPETIR: generar un \nnuevo ciclo'); +gettext('El biestable D se pone \npara evitar los bucles \ncombinacionales'); +gettext('Resto de casos'); +gettext('Añadir un retraso de \n8 ciclos'); +gettext('TERMINAR \n(Pasar a la fase 2)'); +gettext('Comando normal \nNo se hace nada adicional'); +gettext('Comando de inicializacion: \nRetraso de 15ms'); +gettext('Configurar el pin comm oentrada si es un \nciclo de lectura. De lo contrario está \nconfigurado como salida'); +gettext('Si es comando de inicialización \nsólo se hace escritura'); +gettext('Si se trata de un comando de inicialización, las señales `rs` y \n`rw` se ponen a 0'); +gettext('En caso de lectura, `rs` se debe \nponer a 0 (El flag de busy está \nsólo accesible para rs=0)'); +gettext('Si es ciclo de lectura \nCapturar el busy flag'); +gettext('Tic de lectura'); +gettext('Ejecutar 1 ciclo'); +gettext('No conectado'); +gettext('Frecuencia del reloj del \nsistema (en Hz)'); +gettext('Generación de 2 ciclos'); +gettext('Si cmd=0, saltar el \nsegundo ciclo'); +gettext('Tic para leer el flag de busy \nSólo se emite en el primer ciclo'); +gettext('n=0'); +gettext('Número de ciclo (0-1)'); +gettext('If the machine is active, no more start signals \nare allowed to enter'); +gettext('Execution tic: \n* One tic per state'); +gettext('1-bit counter'); +gettext('1-to-2 Demux'); +gettext('Turn off \nthe machine'); +gettext('n=1'); +gettext('The next signal can only go inside the machine \nif it is busy'); +gettext('The machine is busy from the very \nbegining in which the start_ok \nsignal arrives'); +gettext('Initial state cycle \n(n = 0)'); +gettext('When the next_ok signal is received \nthe initial cycles is finished'); +gettext('When the next_ok is received the counter is \nincreased'); +gettext('The machine is active: either in the first \nstate cycle (n=0) or the next cycles (n=1)'); +gettext('Wait one cycle for the \ncounter to be updated'); +gettext('The next_ok signal output either as the \nexec signal (when n=1) or as the done signal \nwhen (n = 0)'); +gettext('Then count machine has three states: \n\n* Idle: The machine is off, waiting to receive the start signal \n* n = 0: Initial state cycle. It goes from receiveing the start signal until \n the first next signal arrives\n* n = 1: second state cycle. Fron the first next signal to the second'); +gettext('Flanco de bajada \nen E'); +gettext('Periodo de E \nen ns'); +gettext('Input parameter: Nanoseconds \n* Max value: 1250 ns (15 cycles)'); +gettext('Input parameter: \nSystem Frequency'); +gettext('Ciclo completado!'); +gettext('Slots 1 y 2: Pulso E a 1 \n(En el resto de Slots E está a 0)'); +gettext('Flanco de bajada en el pulso \n(fin del Slot 2) '); +gettext('Máquina de contar \nde 2 bits \nSlot=0,1,2,3 '); +gettext('## Slots de T/4'); +gettext('Numero de slot'); +gettext('## Generar las señales de salida\n\nLas señales de salida se generan según el número de slot (h):\n\n* Slot 0: 250ns iniciales\n* Slots 1 y 2: Generar el pulso (500ns)\n* Slot 3: 250ns finales'); +gettext('Periodo en ciclos'); +gettext('Dividir entre 4'); +gettext('El bloque Sys-delay que usamos es de \nsólo 3 bits, para ahorrar espacio'); +gettext('Periodo de E \nen **ciclos** (T)'); +gettext('El tiempo de cada slot \nes T/4'); +gettext('It is implemented by shifthing 2 bits to the right'); +gettext('Machine state:\n* 0 --> OFF\n* 1 --> ON'); +gettext('### Protect the start signal: \nThis signal is only valid if the machine is \nOFF or if it comes in the last cycle \n(max=1 while busy=1)'); +gettext('Machine ON \nand Last cycle'); +gettext('Machine off'); +gettext('Enable the start \nsignal'); +gettext('### Protect the Next signal \nIt is only valid if the \nmachine is ON'); +gettext('Count cycle: n \n* 0: Initial cycle\n* 3: Last cycle'); +gettext('Last cycle\n(n=3)'); +gettext('Not the last cycle \n(n<3) '); +gettext('Current working cycle: 1-3'); +gettext('Cycles to delay'); +gettext('Delay finished!'); +gettext('Machine state: ON/OFF'); +gettext('RS Flip-Flop'); +gettext('Circuit state: \n* ON: working (1)\n* OFF: Not working (0)'); +gettext('2-bits counter'); +gettext('The counter has reached \nthe number of cycles \nto delay'); +gettext('Initial value'); +gettext('2-bits Comparator'); +gettext('Maximum count \nreached'); +gettext('2-bits register'); +gettext('If the max count is reached \nand the cnt tic is received, \nthe register is reset to 0'); +gettext('External reset'); +gettext('32-bits register'); +gettext('Input parameter: Nanoseconds '); +gettext('Input parameter: Milieconds '); +gettext('Initial value: 1'); +gettext('Initial value: 0'); +gettext('Falling edge'); +gettext('LCD-controller-open-4-bits'); +gettext('LCD-controller-open-4-bits: Controlador de LCD en bucle abierto con interfaz de 4-bits'); +gettext('LCD-write-open-4-bits: Controlador de escritura, en bucle abierto, de un LCD con interfaz de 4 bits'); +gettext('LCD-write-open-4-bits'); +gettext('Registrar la entrada rs, \npara que permanezca estable \ndurante todo el funcionamiento'); +gettext('Registrar el dato, \npara que permanezca estable \ndurante todo el funcionamiento'); +gettext('| n | cmd | sel |\n|----|-----|-----|\n| 0 | 0 | 1 |\n| 0 | 1 | 1 |\n| 1 | 0 | 0 |\n| 1 | 1 | 1 |\n'); +gettext('--> Caso especial'); +gettext('* n=0: Nibble más significativo seleccionado \n* n=1: Nibble menos significativo seleccionado'); +gettext('Máquina de contar: n=0, n=1 \n* Durante n=0 se envía el nibble más significativo \n* Durante n=1 se envía el menos significativo SI ES UN COMANDO normal (cmd=1). En \n caso de ser uno de inicialización durante n=1 no se envía nada'); +gettext('Esperar a que finalice el comando enviado \nanteriormente. El tiempo de espera debe ser \nel del COMANDO MÁS LENTO'); +gettext('Ejecutar un ciclo en para cada nibble...\nCuando n es 1 y es un comando de \ninicializacion (cmd=0) entonces ese \nnibble NO SE MANDA'); +gettext('Este biestable D es necesario \npara evitar los bucles combinacionales '); +gettext('Cmd indica el tipo de comando:\n* cmd=0: Es un valor especial de \n inicializacion (Un único nibble)\n* cmd=1: Es un comando/dato normal \n (Formado por 2 nibbles)'); +gettext('LCD-controller-busy-8-bits'); +gettext('LCD-controller-busy-8-bits'); +gettext('LCD-controller-busy-8-bits: Controlador de LCD en bucle cerrado con interfaz de 8-bits'); +gettext('Bus8-Split-half: Split the 8-bits bus into two buses of 1 and 7 wires'); +gettext('Bus7-Join-1-7: Join the two buses into an 8-bits Bus'); +gettext('LCD-write-busy-8-bits: Controlador en bucle cerrado de 8 bits'); +gettext('LCD-wait-busy-8-bits: Generar un ciclo de lectura/escritura. La lectura se realiza periodicametne hasta que el flag de busy se pone a 0'); +gettext('LCD-cycle-rw-8-bits: Generar un ciclo de lectura ó escritura en el LCD. En el de lectura se captura el valor del busy Flag (BF). Interfaz de 8 bits'); +gettext('LCD-write-busy-8-bits'); +gettext('Configurar el pin como **entrada** si es un **ciclo de lectura** \nDe lo contrario está configurado como salida'); +gettext('| rw2 | rs1 | rs2| Descripción |\n|----|-------|----|-------------|\n| 0 | 0 | 0 | Escritura |\n| 0 | 1 | 1 | Escritura |\n| 1 | 0 | 0 | Lectura: rs=0 |\n| 1 | 1 | 0 | Lectura: rs=0 |'); +gettext('Si es una lectura, rs se pone \nSIEMPRE a 0 (para leer BF) \nEn las escrituras rs se deje con \nsu valor inicial'); +gettext('Leer el Flag de Busy (BF) \ny almacenarlo'); +gettext('Si el comando es de inicialización (cmd=0), \nla señal rw se pone a 0 (escritura)'); +gettext('BF se captura sólo si se \ntrata de una lectura'); +gettext('Si el comando es de inicializacion (cmd=0), \nla señal rs se pone a 0 (instrucción)'); +gettext('LCD-controller-open-8-bits'); +gettext('LCD-controller-open-8-bits: Controlador de LCD en bucle abierto con interfaz de 4-bits'); +gettext('LCD-write-open-8-bits: Controlador de escritura, en bucle abierto, de un LCD con interfaz de 8 bits'); +gettext('Generar un ciclo \nen E'); +gettext('Esperar a que el comando \nse ejecute en el LCD'); +gettext('El controlador estará ocupado mientras \nse genera el ciclo o bien al esperar \na que se ejecute el comando'); +gettext('El tiempo de espera debe ser el del \nCOMANDO MAS LENTO'); +gettext('Nivel-0'); +gettext('Nivel-1'); +gettext('LCD-config'); +gettext('LCD-io-4-bits-ICE40'); +gettext('LCD-io-4-bits: Configuración del Pin de mayor peso como E/S. Permite leer el flag de Busy del LCD. Para FPGAs de la familia ICE40'); +gettext('LCD-io-8-bits-ICE40'); +gettext('LCD-io-8-bits-ICE40: Configuración del Pin de mayor peso como E/S. Permite leer el flag de Busy del LCD'); +gettext('LCD-cycle-ns'); +gettext('LCD-cycle'); +gettext('4-bits-busy'); +gettext('4-bits-open'); +gettext('8-bits-busy'); +gettext('8-bits-open'); +gettext('0-LCD-cycle-busy-4-bits'); +gettext('1-LCD-cycle-rw-4-bits'); +gettext('2-LCD-wait-busy-4-bits'); +gettext('3-LCD-write-busy-4-bits'); +gettext('LCD-write-open-4-bits'); +gettext('LCD-cycle-rw-8-bits'); +gettext('LCD-wait-busy-8-bits'); +gettext('LCD-write-busy-8-bits'); +gettext('LCD-write-open-8-bits'); +gettext('01-Controller-busy-4-bits'); +gettext('02-LCD-Shield'); +gettext('00-Index'); +gettext('# INDEX'); +gettext('## PARTS'); +gettext('LCD-Controller-busy-4-bits'); +gettext('## CONTROLLERS'); +gettext('### 4-bits'); +gettext('### 8-bits'); +gettext('LCD-Controller-open-4-bits'); +gettext('LCD-Controller-open-8-bits'); +gettext('LCD-Controller-busy-8-bits'); +gettext('LCD-Config'); +gettext('LCD-io-4-bits'); +gettext('LCD-io-8-bits'); +gettext('### Nivel 0'); +gettext('### Nivel 1'); +gettext('### 4-bits-busy'); +gettext('LCD-cycle-busy-4-bits'); +gettext('LCD-cycle-rw-4-bits'); +gettext('LCD-wait-4-bits'); +gettext('LCD-writec-busy-4-bits'); +gettext('### 4-bits-open'); +gettext('LCD-writec-open-4-bits'); +gettext('### 8-bits-busy'); +gettext('LCD-writec-busy-8-bits'); +gettext('### 8-bits-open'); +gettext('LCD-writec-open-8-bits'); +gettext('01-print-A-button'); +gettext('Generic: 8-bits generic constant (0-255)'); +gettext('Button-tic: Configurable button that emits a tic when it is pressed'); +gettext('Configurable button (pull-up on/off. Not on/off)'); +gettext('FPGA internal pull-up configuration on the input port'); +gettext('Select positive or negative logic for the input (0=positive, 1=negative)'); +gettext('Valor genérico constante, de 1 bits. Su valor se introduce como parámetro. Por defecto vale 0'); +gettext('Remove the rebound on a mechanical switch'); +gettext('Edges detector. It generates a 1-period pulse (tic) when either a rising edge or a falling edge is detected on the input. Block implementation'); +gettext('16-bits Syscounter with reset'); +gettext('Inc1-16bit: Increment a 16-bits number by one'); +gettext('AdderK-16bit: Adder of 16-bit operand and 16-bit constant'); +gettext('Generic: 16-bits generic constant'); +gettext('Adder-16bits: Adder of two operands of 16 bits'); +gettext('16-Sys-reg-rst: 16 bits system register with reset. Verilog implementation'); +gettext('Sync-x01: 1-bit input with the system clock domain (Verilog implementation)'); +gettext('## Ejemplo 1: Impresión de una 'A' con el pulsador \n\nAl apretar el pulsador `SW1` se imprime una `A` en el LCD \n**Controlador**: Bucle cerrado con Interfaz de 4 bits'); +gettext('## Interfaz con el LCD'); +gettext('E \n\nRS \n\nRW '); +gettext('Bus de Datos'); +gettext('Bus de Control'); +gettext('Button state signal'); +gettext('Tic: button pressed'); +gettext('Rising edge detector'); +gettext('Pull up on/off'); +gettext('Not on/off'); +gettext('Internal pull-up \n* 0: OFF\n* 1: ON'); +gettext('Synchronization stage'); +gettext('Normalization stage\n\n* 0: Wire\n* 1: signal inverted'); +gettext('Debouncing stage'); +gettext('### Pull-up parameter:\n\n0: No pull-up \n1: Pull-up activated'); +gettext('Only an FPGA pin can \nbe connected here!!!'); +gettext('The pull-up is connected \nby default'); +gettext('When k=0, it works like a wire \n(The output is equal to the input) \nWhen k=1, it act as a not gate\n(The output is the inverse of the input)'); +gettext('### Truth table for XOR\n\n| k | input | output | function |\n|---|-------|--------|----------|\n| 0 | 0 | 0 | wire |\n| 0 | 1 | 1 | wire |\n| 1 | 0 | 1 | Not |\n| 1 | 1 | 0 | Not |'); +gettext('Edge detector'); +gettext('Whenever there is a change in \nthe input, the counter is started'); +gettext('If the counter reaches it maximum \nvalue, the input is considered stable \nand it is captured'); +gettext('### Time calculation\n\nFor CLK=12MHZ, a 16-bit counter reaches its \nmaximum every 2 ** 16 * 1/F = 5.5ms aprox \nIF more time is needed for debouncing, \nuse a counter with more bits (17, 18...)'); +gettext('## Debouncer \n\nA value is considered stable when \nthere is no changes during 5.5ms \naprox. When a value is stable it is \ncaptured on the output flip-flop'); +gettext('Stable output'); +gettext('Counter'); +gettext('## Edges detector\n\nIt generates a 1-period pulse (tic) when an edge (Rising or falling) is detected on the \ninput signal'); +gettext('The output is 1 if the current value is 1 and the \nprevious 0, or if the current value is 0 and the \nprevious 1\n'); +gettext('In any other case the output is 0'); +gettext('02_print-HOLA-button'); +gettext('Sumador de un operando de 2 bits con una constante pasada como parámetro (No hay accarreo)'); +gettext('Comparador de dos operandos de 2 bits'); +gettext('Valor genérico constante (menos 1), de 2 bits. Su valor se introduce como parámetro. Por defecto vale 0'); +gettext('08-Reg-rst: 8 bits Register with reset. Verilog implementation'); +gettext('## Ejemplo 2: Impresión de \"HOLA\" con el pulsador \n\nCada vez que se aprieta el pulsador `SW1` se imprime la cadena `HOLA` \n**Controlador**: Bucle cerrado con Interfaz de 4 bits'); +gettext('Máquina de contar \n(0-3) '); +gettext('Realizar 4 impresiones'); +gettext('Inicializar los registros \npara volver al estado inicial'); +gettext('Fin de las impresiones'); +gettext('Siguiente carácter'); +gettext('03-Display-BIT'); +gettext('DFF-rst. D Flip-Flop with load and reset. Implemented in verilog'); +gettext('## Ejemplo 3: Mostrando el estado del pulsador SW1\n\nSe muestra el estado del pulsador `SW1` en el display: \n * 0: No apretado\n * 1: Apretado \n\n**Controlador**: Bucle cerrado con Interfaz de 4 bits\n'); +gettext('Máquina de contar (0-1) \nEnviar 2 comandos'); +gettext('Con ellos se muestra \nel estado del pulsador \nen la posición 0,0'); +gettext('Refresco completado \n'); +gettext('El estado se muestra automáticamente \nen cuanto se inicializa el LCD'); +gettext('Refresco continua: Al terminar \nse comienza uno nuevo'); +gettext('Siguiente comando'); +gettext('Comando 0: Locate (0,0)'); +gettext('Comando 1: PRINT'); +gettext('La primera escritura es de \nun comando (rs=0)'); +gettext('La segunda escritura es de \nun dato (rs=1)'); +gettext('04-Display-2xBIT'); +gettext('## Ejemplo 4: Mostrando los pulsadores `SW1` y `SW2` en el LCD\n\nEl estado de los dos pulsadores `SW1` y `SW2` se muestra en binario \nen el LCD \n**Controlador**: Bucle cerrado con Interfaz de 4 bits\n'); +gettext('Comando 0: \nLocate (0,0)'); +gettext('Las siguientes escrituras \nson de datos'); +gettext('Comando 1: \nEstado del pulsador `SW1`'); +gettext('Comando 2: \nCarácter `-`'); +gettext('Comando 3: \nEstado del pulsador `SW2`'); +gettext('Inicialmente selecciona `SW1` \ny luego el resto de comandos'); +gettext('Obtener el estado \ndel pulsador `SW1`: '0', '1'\n'); +gettext('Obtener el estado \ndel pulsador `SW2`: '0', '1'\n'); +gettext('05-memory-string'); +gettext('Bus9-Split-half: Split the 9-bits bus into two buses of 1 and 8 wires'); +gettext('Circuito combinacional de 5 entradas y 9 salidas'); +gettext('Máquina de contar, de 5 bits'); +gettext('5-bits adder. One operand is a constant (no carry)'); +gettext('two operand 5-bits comparator'); +gettext('Valor genérico constante (menos 1), de 5 bits. Su valor se introduce como parámetro. Por defecto vale 0'); +gettext('05-Reg-rst: 5 bits Register with reset. Verilog implementation'); +gettext('## Ejemplo 5: Enviando comandos desde memoria \n\nSe imprime un mensaje en el LCD, usando ambas líneas:\n\n```\nFPGAwars\nControlador de LCD\n``` \n**Controlador**: Bucle cerrado con Interfaz de 4 bits\n\n'); +gettext('Máquina de contar de \n5-bits (0-31)'); +gettext('06-user-chars'); +gettext('## Ejemplo 6: Imprimiendo un carácter definido por el usuario \n \nSe define el carácter 0 como un \"monigote\". Luego se imprimen dos monigotes separados \npor un espacio \n**Controlador**: Bucle cerrado con interfaz de 4 bits'); +gettext('Máquina de contar de \n5-bits. Ejecución 0-32'); +gettext('07-switch-on-off'); +gettext('Circuito combinacional de 7 entradas y 9 salidas'); +gettext('UINT8-1bit: Extend a 1-bit unsigned integer to 8-bits '); +gettext('Bus7-Join-7-1: Join the two buses into an 8-bits Bus'); +gettext('7bits constant value: 0'); +gettext('Generic: 7-bits generic constant (0-127)'); +gettext('Máquina de contar, de 7 bits'); +gettext('7-bits adder. One operand is a constant (no carry)'); +gettext('two operand 7-bits comparator'); +gettext('Valor genérico constante (menos 1), de 7 bits. Su valor se introduce como parámetro. Por defecto vale 0'); +gettext('07-Reg-rst: 7 bits Register with reset. Verilog implementation'); +gettext('## Ejemplo 7: Mostrar estado del pulsador \n \nSe definen dos caracteres (0 y 1) con el símbolo de una barra deslizante de dos posiciones \nSegún el estado del pulsador `SW1` se mueve hacia arriba/abajo \n**Controlador**: Bucle cerrado con Interfaz de 4 bits'); +gettext('**Fase 1**: Crear los caracteres definidos \npor el usuario'); +gettext('**Fase 2**: Pintar el estado \ndel pulsador'); +gettext('Primera escritura \nes un comando (rs=0) '); +gettext('Segunda escritura: \nun dato (rs=1)'); +gettext('Imprimir el caracter 0 \nó el 1 según el estado \ndel pulsador'); +gettext('En la fase 2 next hace que \nse pase al siguiente comando'); +gettext('Fase 2'); +gettext('Repetir la fase 2 \nen bucle'); +gettext('En la fase 1 se seleccionan las señales de la \nmáquina 1. En la fase 2 las de la fase 2'); +gettext('08-user-chars'); +gettext('## Ejemplo 8: Ejemplo 1 de la colección iceCrystal \n \nSe definen 8 caracteres que forman el logo \"FPGAwars\", que se imprimen junto al nombre \nEs el primer ejemplo mostrado en la colección iceCrystal, pero migrado al nuevo controlador \n**Controlador**: Bucle cerrado con Interfaz de 4 bits'); +gettext('01-print-A-button'); +gettext('02_print-HOLA-button'); +gettext('03-Display-BIT'); +gettext('04-Display-2xBIT'); +gettext('05-memory-string'); +gettext('06-user-chars'); +gettext('07-switch-on-off'); +gettext('08-user-chars'); +gettext('01-print-A-button'); +gettext('Bus3-Split-2-1: Split the 3-bits bus into two: 2-bit and 1-bits buses'); +gettext('## Ejemplo 1: Impresión de una 'A' con el pulsador (LCD-Shield) \n\nAl apretar el pulsador `SW1` se imprime una `A` en el LCD\n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('E \n\nRS \n'); +gettext('RW (no usado)'); +gettext('02-print-HOLA-button'); +gettext('## Ejemplo 2: Impresión de \"HOLA\" con el pulsador (LCD-Shield) \n\nCada vez que se aprieta el pulsador `SW1` se imprime la cadena `HOLA` \n**Controlador**: Bucle abierto con Interfaz de 4 bits'); +gettext('03-Display-BIT'); +gettext('## Ejemplo 3: Mostrando el estado del pulsador SW1 (LCD-shield)\n\nSe muestra el estado del pulsador `SW1` en el display: \n * 0: No apretado\n * 1: Apretado \n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('04-Display-2xBIT'); +gettext('## Ejemplo 4: Mostrando los pulsadores `SW1` y `SW2` en el LCD (LCD-shield)\n\nEl estado de los dos pulsadores `SW1` y `SW2` se muestra en binario \nen el LCD \n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('05-memory-string'); +gettext('## Ejemplo 5: Enviando comandos desde memoria (LCD-Shield) \n\nSe imprimen se mensaje en el LCD, usando ambas líneas:\n\n```\nFPGAwars\nControlador LCD\n```\n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('Número total de \nescrituras a realizar \nen el LC'); +gettext('Máquina de contar'); +gettext('06-user-chars-LCD-Shield'); +gettext('## Ejemplo 6: Imprimiendo un carácter definido por el usuario (LCD-Shield) \n \nSe define el carácter 0 como un \"monigote\". Luego se imprimen dos monigotes separados \npor un espacio \n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('07-switch-on-off'); +gettext('## Ejemplo 7: Mostrar estado del pulsador (LCD-Shield) \n \nSe definen dos caracteres (0 y 1) con el símbolo de una barra deslizante de dos posiciones \nSegún el estado del pulsador `SW1` se mueve hacia arriba/abajo \n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('08-user-chars'); +gettext('## Ejemplo 8: Ejemplo 1 de la colección iceCrystal (LCD Shield) \n \nSe definen 8 caracteres que forman el logo \"FPGAwars\", que se imprimen junto al nombre \nEs el primer ejemplo mostrado en la colección iceCrystal, pero migrado al nuevo controlador \n**Controlador**: Bucle abierto con interfaz de 4 bits'); +gettext('01-print-A-button'); +gettext('02-print-HOLA-button'); +gettext('03-Display-BIT'); +gettext('04-Display-2xBIT'); +gettext('05-memory-string'); +gettext('06-user-chars-LCD-Shield'); +gettext('07-switch-on-off'); +gettext('08-user-chars'); +gettext('00-Index');