Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo...

33
I n t r o d u c c i ó n a l a p r o g r a m a c i ó n e n V e r i l o g Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * [email protected] D e s a r r o l l o d e a p l i c a c i o n e s c o n D u m m y S y s t e m F P G A p a r a R e d P i t a y a

Transcript of Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo...

Page 1: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Introducción a la programaciónen Verilog

Marcelo Luda*, Matías Risaro, Jorge CodniaLáseres moleculares - Citedef

* [email protected]

Desarrollo de aplicaciones conDummy System FPGA para

Red Pitaya

Page 2: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Resumen

Diseño de electrónica programable FPGASíntesis e implementaciónTecnología FPGA

Programación de aplicación para Red PitayaEstructura de las aplicacionesDummy System

Introducción a programación en VerilogLenguaje básicoEjemplos y demostraciones

Page 3: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de circuitos en FPGA

Diseño de circuito de lógica digital

AND

NOT

OR

XOR

Circuito sumador

Page 4: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de circuitos en FPGA

Diseño de circuito de lógica digital

LUT LUT

LUT LUT

CLB

LUT LUT

LUT LUT

CLB

Page 5: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

FPGA

Page 6: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

FPGA

Page 7: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

FPGA

Page 8: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

FPGA

Page 9: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

FPGA

Page 10: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Síntesis e implementación

Diseño RTLCódigo a lógica combinacional

SíntesisLógica combinacional a combinación de LUTS

ImplementaciónCableado según el hardware disponible

Page 11: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Síntesis e implementación

Diseño RTLCódigo a lógica combinacional

SíntesisLógica combinacional a combinación de LUTS

ImplementaciónCableado según el hadware disponible

Para saber qué entendió el intérprete de verilog.Chequeo de sintaxis.

Muchas formas de impementar lo mismo (equivalenvias Morgan)

Tiempos de estabilizacionUso de superficie (recursos)Consumo de energíaLíneas de relojes

Page 12: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Producción del archivo de

programación .bit

LUT LUT

LUT LUT

CLB

LUT LUT

LUT LUT

CLB

Síntesis e implementación

red_pitaya.bit

1101100010010

1111100011010

0100111100110

0001000110001

0100110100010

0110100111010

1010001010100

0010000000001

0101000111001

Page 13: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Producción del archivo de

programación .bit

LUT LUT

LUT LUT

CLB

LUT LUT

LUT LUT

CLB

Síntesis e implementación

red_pitaya.bit

1101100010010

1111100011010

0100111100110

0001000110001

0100110100010

0110100111010

1010001010100

0010000000001

0101000111001

Page 14: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de aplicaciones en Red Pitaya

Page 15: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de aplicaciones en Red Pitaya

Página Web en navegador

HTML5+CSS+JS

Servidor Web + C

Controlador en C y Servidor Nginx

Uso más simple

Dispositivo de usuario

Notebook, tablet, celular, etc

Red Pitaya (micro)

Sistema Operativo GNU/Linux

FPGA

Circuito diseñado en lenguaje Verilog

Entradas y salidas cableadas a lo módulos / control por registros

Red Pitaya (firmware)

Electrónica programable

Red Pitaya (hardware)

Periféricos y componentes soldadosin1, in2 out1, out2 Extension

modules

Donde ocurrecada parte

CL

IEN

TE

SE

RV

IDO

R

Page 16: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de aplicaciones en Red Pitaya

Página Web en navegador

HTML5+CSS+JS

Servidor Web + C

Controlador en C y Servidor Nginx

Uso más simple

Dispositivo de usuario

Notebook, tablet, celular, etc

Red Pitaya (micro)

Sistema Operativo GNU/Linux

FPGA

Circuito diseñado en lenguaje Verilog

Entradas y salidas cableadas a lo módulos / control por registros

Red Pitaya (firmware)

Electrónica programable

Red Pitaya (hardware)

Periféricos y componentes soldadosin1, in2 out1, out2 Extension

modules

Donde ocurrecada parte

CL

IEN

TE

SE

RV

IDO

R

Cliente: Navegador

Page 17: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de aplicaciones en Red Pitaya

Página Web en navegador

HTML5+CSS+JS

Servidor Web + C

Controlador en C y Servidor Nginx

Uso más simple

Dispositivo de usuario

Notebook, tablet, celular, etc

Red Pitaya (micro)

Sistema Operativo GNU/Linux

FPGA

Circuito diseñado en lenguaje Verilog

Entradas y salidas cableadas a lo módulos / control por registros

Red Pitaya (firmware)

Electrónica programable

Red Pitaya (hardware)

Periféricos y componentes soldadosin1, in2 out1, out2 Extension

modules

Donde ocurrecada parte

CL

IEN

TE

SE

RV

IDO

R

Servidor: GNU/Linux Red Pitaya

Page 18: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de aplicaciones en Red Pitaya

Página Web en navegador

HTML5+CSS+JS

Servidor Web + C

Controlador en C y Servidor Nginx

Uso más simple

Dispositivo de usuario

Notebook, tablet, celular, etc

Red Pitaya (micro)

Sistema Operativo GNU/Linux

FPGA

Circuito diseñado en lenguaje Verilog

Entradas y salidas cableadas a lo módulos / control por registros

Red Pitaya (firmware)

Electrónica programable

Red Pitaya (hardware)

Periféricos y componentes soldadosin1, in2 out1, out2 Extension

modules

Donde ocurrecada parte

CL

IEN

TE

SE

RV

IDO

R

FPGA + Hardware

Page 19: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Diseño de aplicaciones en Red Pitaya

Página Web en navegador Programa de usuario Dispositivo de usuario

HTML5+CSS+JS Python, Matlab, etc Notebook, tablet, celular, etc

Servidor Web + C API de bajo nivel Red Pitaya (micro)

Controlador en C y Servidor Nginx Python Sistema Operativo GNU/Linux

Programa de usuario

Python, C++, Bash, etc

FPGA

Circuito diseñado en lenguaje Verilog

Entradas y salidas cableadas a lo módulos / control por registros

Red Pitaya (firmware)

Electrónica programable

Red Pitaya (hardware)

Periféricos y componentes soldados

BUSES

Bus AXI para comunicación con periféricos

in1, in2 out1, out2 Extensionmodules

Ethernet USB Micro USB

Uso más simple Adquisiciónremota/programada

Uso avanzado y/oautónomo

Donde ocurrecada parte

CL

IEN

TE

SE

RV

IDO

R

Page 20: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Dummy System

Sólo diseñamos FPGAAutomatización de creación y vinculación de controles web

RequisitosLinaro + GCC + MakeXilinx 2015.2

marceluda.github.io/rp_dummy

git clone https://github.com/marceluda/rp_dummy.git

Page 21: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Dummy System

Editamos archivo config.iniPara configurar los controles web

Creamos proyecto nuevosource settings.sh./new_project.py NOMBRE

Editamos el archivo dummy.vcd dummy_NOMBREgeany fpga/rtl/dummy.v

Compilamos y subimos a la Red Pitaya./config_tool.py -amake./upload_app.sh rp-XXXXXX.local

Page 22: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

¿Cómo acceder a la Red Pitaya?

http://rp-XXXXXX.local

ssh -l root rp-XXXXXX.local

/opt/redpitaya/www/apps/

Page 23: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Introducción a Verilog

Diseño de cableadoNo es procedimental

Sintaxis parecida a C

// Esto es un comenrario de una línea/* Esto es un comentario de varias líneas */

wire cableA ;wire cableB, cableC;assign cableC = cableA && (~cableB) ;

cableA

cableBcableC

Page 24: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Introducción a Verilog

wire cable_simple; _wire [7:0] bus_de_8_bits_A; // sin signowire [ 7 : 0] bus_de_8_bits_B ; // lo mismo _wire signed [14-1:0] bus_14_bits_A ; // con signowire signed [ 13:0] bus_14_bits_B ; // con signowire [14-1:0] bus_14_bits_C ; // SIN signo

assign cable_simple = 1'b0 ; _assign bus_de_8_bits_A = 8'b01101011 ;assign bus_de_8_bits_B = 8'd85 ; _assign bus_14_bits_A = - 14'd24 ;assign bus_14_bits_C = $signed(8'b11010011010110);assign bus_14_bits_D = 14'd10 ;

Definiciones de cables

Asignaciones de valores

Page 25: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Introducción a Verilog

wire [4-1:0] A,B,C,D;wire [8-1:0] E,F; _assign A = 4'b0100 ; // 4assign B = 4'd7 ; // 0111assign C = A && B ; // 0100 and 0111 = 0100 = 4assign D = A || B ; // 0100 or 0111 = 0111 = 7 _assign E = { A , B }; // 01000111 = 71assign D = { E[6:3] , |A , &B , 2'b01 };/* 1000 , 1 , 0 , 01 */

Ejemplos

Page 26: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Introducción a Verilog

// NOT~A // cocatenacion{A, ..., B} // aritméticosA*B A+B A-B// shiftA<<B A>>B// comparacionA>B A<B A>=B A<=BA==B A!=B// Bit-wiseA&BA^B A~^BA|B// LogicosA&&BA||B// CondicionalA ? B : C

Operadores Binario con signo

0 000 1 001 2 010 3 011-1 111-2 110-3 101-4 100

- A == (~ A) + 1

Page 27: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Introducción a Verilog

// Probamos un pasaaltosfiltro_pasaaltos #(.R(14)) NOMBRE ( .clk(clk), .rst(rst), // inputs .tau( comboA ), .dis( checkboxA ), .in( in1 ), // outputs .out( salida_pasaaltos )

);

Módulos

Los módulos no son funcionesSe instancian: se replica el cableado

Parámetros en tiempo de diseñoE/S en tiempo de "ejecución"

Page 28: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Actividad propuesta

Señal de Amplitud Modulada (AM)

Portadora en 1 MHz

Interferencia en 100 Hz

Información: (?)

Page 29: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Actividad propuesta

in1

pasaaltos

in

tau

off

out signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

out2

Page 30: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Actividad propuesta

in1

pasaaltos

in

tau

off

out signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

out2

Puntos de inspección

Page 31: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Actividad propuesta

in1

signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

out2

Page 32: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Actividad propuesta

in1

pasaaltos

in

tau

off

out signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

Demodulación

out2

Page 33: Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo Luda*, Matías Risaro, Jorge Codnia Láseres moleculares - Citedef * mluda@citedef.gob.ar

Actividad propuesta

in1

pasaaltos

in

tau

off

out signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

out2

Puntos de inspección