Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

restructuring to support multiple boards (1K + 8K) #3

Merged
merged 1 commit into from
Dec 31, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
86 changes: 86 additions & 0 deletions tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#-----------------------------------------------------------------------------
#- (C) D. Cuartielles for Arduino, December 2015
#- GPLv3 License
#- based on previous work by Obijuan for BQ
#-----------------------------------------------------------------------------
#-- Este Makefile soporta las arquitecturas de 1K y 8K de Lattice
#-- se basa en la idea de que los ficheros estaran contenidos en una
#-- carpeta que se llamara como el programa a ejecutar (al igual que se
#-- hace en Arduino o Processing), de modo que el Makefile consultara
#-- el nombre de la carpeta para lanzar la compilacion
#--
#-- Ejemplos:
#-- make sint --> compila para el procesador de 1K
#-- make sint MEMORY=8k --> compila para el procesador de 8K
#-- make sint FILE=blabla --> compila el fichero blabla.v con blabla.pcf
#-----------------------------------------------------------------------------

#-------------------------------------------------------
#-- Declaracion de variables por defecto
#-- usamos el nombre de la carpeta como nombre del programa
#-- tal y como se hace en Arduino y Processing, de modo
#-- que se simplifique la forma de llamar al Makefile
#--
#-- por defecto compila para el procesador de 1K de memoria
#-------------------------------------------------------
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
CURRENT_DIR := $(notdir $(patsubst %/,%,$(dir $(MKFILE_PATH))))
FILE = $(CURRENT_DIR)
MEMORY = "1k"

#-------------------------------------------------------
#-- Objetivo por defecto: hacer simulacion y sintesis
#-------------------------------------------------------
all: sim sint

#----------------------------------------------
#-- make sim
#----------------------------------------------
#-- Objetivo para hacer la simulacion del
#-- banco de pruebas
#----------------------------------------------
sim: $(FILE)_tb.vcd

#-----------------------------------------------
#- make sint
#-----------------------------------------------
#- Objetivo para realizar la sintetis completa
#- y dejar el diseno listo para su grabacion en
#- la FPGA
#-----------------------------------------------
sint: $(FILE).bin

#-------------------------------
#-- Compilacion y simulacion
#-------------------------------
$(FILE)_tb.vcd: $(FILE).v $(FILE)_tb.v

#-- Compilar
iverilog $(FILE).v $(FILE)_tb.v -o $(FILE)_tb.out

#-- Simular
./$(FILE)_tb.out

#-- Ver visualmente la simulacion con gtkwave
gtkwave $(FILE)_tb.vcd $(FILE)_tb.gtkw &

#------------------------------
#-- Sintesis completa
#------------------------------
$(FILE).bin: $(FILE).v $(FILE).pcf

#-- Sintesis
yosys -p "synth_ice40 -blif $(FILE).blif" $(FILE).v

#-- Place & route
arachne-pnr -d $(MEMORY) -p $(FILE).pcf $(FILE).blif -o $(FILE).txt

#-- Generar binario final, listo para descargar en fgpa
icepack $(FILE).txt $(FILE).bin


#-- Limpiar todo
clean:
rm -f *.bin *.txt *.blif *.out *.vcd *~

.PHONY: all clean
23 changes: 23 additions & 0 deletions tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
## Descripción
Componente "hola mundo" con un pin de salida que siempre está a '1'.
Al cargarlo en la iCE40-HX8K se enciende el led LED1

## Simulación

Para realizar la simulacion entrar en el directorio y ejecutar:

$ make sim

Automaticamente se invocará al icarus verilog para hacer la compilacion / simulación y al gtkwave para ver el resultado de la simulacion gráficamente

## Síntesis

Para implementar el diseño en la FPGA ejecutamos el comando:

$ make sint MEMORY=8k

Se nos genera el fichero T01-setbit.bin que contiene la conguración de la FPGA para que se nos implemente nuestro circuito digital.

Lo descargamos en la fpga mediante el comando:

sudo iceprog T01-setbit.bin
18 changes: 18 additions & 0 deletions tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/T01-setbit.pcf
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# ##############################################################################
# iCEcube PCF
# Version: 2012.09SP1.22498
# File Generated: Sep 14 2013 17:36:59
# Tested by: D. Cuartielles
# Latest test: Dec 25 2015
# Family & Device: iCE40HX8K
# Package: CT256
# ##############################################################################

set_io LED1 B5
set_io LED2 B4
set_io LED3 A2
set_io LED4 A1
set_io LED5 C5
set_io LED6 C4
set_io LED7 B3
set_io LED8 C3
53 changes: 53 additions & 0 deletions tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/T01-setbit.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
//-----------------------------------------------------------------------------
// setbit.v
//-----------------------------------------------------------------------------
//- (C) D. Cuartielles for Arduino, December 2015
//- GPLv3 License
//- based on previous work by Obijuan for BQ
//-----------------------------------------------------------------------------
//-- Componente "hola mundo" que simplemente pone a '1' su salida
//-- Es el ejemplo mas sencillo que se puede sintetizar en
//-- la fpga. Su principal utilidad es comprobar que toda la cadena de
//-- compilacion/sintesis/simulacion funciona correctamente
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
//-- Modulo setbit
//--
//-- Definimos nuestro componente como un modulo que tiene solo una salida, que
//-- denominamos LED1. Este pin esta cableado a '1'
//-- para evitar que las otras salidas queden a nivel de voltaje incierto, hay
//-- que declararlas y asignarles una salida a nivel '0'
//-----------------------------------------------------------------------------
module setbit(
output LED1,
output LED2,
output LED3,
output LED4,
output LED5,
output LED6,
output LED7,
output LED8
);

wire LED1;
wire LED2;
wire LED3;
wire LED4;
wire LED5;
wire LED6;
wire LED7;
wire LED8;

//-- Implementacion: el pin deseado esta cableado a '1'
// los demas estan cableados a '0'
assign LED1 = 1;
assign LED2 = 0;
assign LED3 = 0;
assign LED4 = 0;
assign LED5 = 0;
assign LED6 = 0;
assign LED7 = 0;
assign LED8 = 0;

endmodule
22 changes: 22 additions & 0 deletions tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/T01-setbit_tb.gtkw
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*] Thu Dec 31 00:38:23 2015
[*]
[dumpfile] "/home/david/Dropbox/UbuntuOne/GITHUB/FPGA/open-fpga-verilog-tutorial/tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/T01-setbit_tb.vcd"
[dumpfile_mtime] "Thu Dec 31 00:37:59 2015"
[dumpfile_size] 450
[savefile] "/home/david/Dropbox/UbuntuOne/GITHUB/FPGA/open-fpga-verilog-tutorial/tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/T01-setbit_tb.gtkw"
[timestart] 0
[size] 1000 600
[pos] -1 -1
*-2.672039 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[treeopen] setbit_tb.
[sst_width] 225
[signals_width] 78
[sst_expanded] 1
[sst_vpaned_height] 160
@28
setbit_tb.SB1.LED1
setbit_tb.SB1.LED2
[pattern_trace] 1
[pattern_trace] 0
51 changes: 51 additions & 0 deletions tutorial/ICE40-HX8K_Breakout_Board/T01-setbit/T01-setbit_tb.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//-----------------------------------------------------------------------------
//-- Banco de prueba para setbit
//-- (c) BQ August 2015
//-- Written by Juan Gonzalez (obijuan)
//-- mods by D. Cuartielles for Arduino, 2015 December, GPLv3
//-----------------------------------------------------------------------------
//-- Para la simulacion del componente es necesario hacer un banco de pruebas
//-- que coloque el componente, asigne valor a las entradas y compruebe las
//-- salidas. En el caso del compoente setbit, es muy sencillo. Solo tiene
//-- una salida, así que colocamos un cable a su salida y comprobamos que
//-- efectivamente se encuentra a valor 1
//-----------------------------------------------------------------------------

//-- Modulo para el test bench
module setbit_tb;

//-- Cable para conectar al componente que pone
//-- el bit a uno
wire LED1;

//--Instanciar el componente. Conectado al cable A
setbit SB1 (
.LED1 (LED1)
);

//-- Comenzamos las pruebas
initial begin

//-- Definir el fichero donde volvar los datos
//-- para ver graficamente la salida
$dumpfile("T01-setbit_tb.vcd");

//-- Volcar todos los datos a ese fichero
$dumpvars(0, setbit_tb);

//-- Pasadas 10 unidades de tiempo comprobamos
//-- si el cable esta a 1
//-- En caso de no estar a 1, se informa del problema, pero la
//-- simulacion no se detiene
# 10 if (LED1 != 1)
$display("---->¡ERROR! Salida no esta a 1");
else
$display("Componente ok!");

//-- Terminar la simulacion 10 unidades de tiempo
//-- despues
# 10 $finish;
end


endmodule
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#IMPORTANTE

Estas imágenes han de ser actualizadas para la placa HX8K, actualmente son para el ICESTICK
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions tutorial/ICESTICK/T01-setbit/bitstreams/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Bitstreams ya generados listos para cargar en la fpga
(para hacer pruebas sin tener que sintetizar)

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tutorial/ICESTICK/T01-setbit/images/setbit-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
125 changes: 125 additions & 0 deletions tutorial/ICESTICK/T01-setbit/images/setbit-1.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tutorial/ICESTICK/T01-setbit/images/setbit-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading