Introducción a la programación en Verilog · Introducción a la programación en Verilog Marcelo...
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
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