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

Post on 26-Jun-2020

9 views 0 download

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

Introducción a la programaciónen Verilog

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

* mluda@citedef.gob.ar

Desarrollo de aplicaciones conDummy System FPGA para

Red Pitaya

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

Diseño de circuitos en FPGA

Diseño de circuito de lógica digital

AND

NOT

OR

XOR

Circuito sumador

Diseño de circuitos en FPGA

Diseño de circuito de lógica digital

LUT LUT

LUT LUT

CLB

LUT LUT

LUT LUT

CLB

FPGA

FPGA

FPGA

FPGA

FPGA

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

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

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

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

Diseño de aplicaciones en Red Pitaya

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

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

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

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

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

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

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

¿Cómo acceder a la Red Pitaya?

http://rp-XXXXXX.local

ssh -l root rp-XXXXXX.local

/opt/redpitaya/www/apps/

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

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

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

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

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"

Actividad propuesta

Señal de Amplitud Modulada (AM)

Portadora en 1 MHz

Interferencia en 100 Hz

Información: (?)

Actividad propuesta

in1

pasaaltos

in

tau

off

out signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

out2

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

Actividad propuesta

in1

signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

out2

Actividad propuesta

in1

pasaaltos

in

tau

off

out signoin

out

+pasabajos

in

tau

off

out+

+

comboA

checkboxA

checkboxB

comboB

numberA

numberB

Demodulación

out2

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