======documentation doxygen======
https://bvdp.inetdoc.net/docvhdl/index.html
===== syntaxe vhdl=====
http://amouf.chez.com/syntaxe.htm
======liste de cartes de développement======
http://tristesse.org/FPGA/CheapFPGADevelopmentBoards
=====Memory Interface Generator=====
http://www.xilinx.com/products/intellectual-property/MIG.htm
http://www.xilinx.com/products/technology/memory-interfacing/index.htm
http://tristesse.org/FPGA/XilinxMIGTutorial
===tableau types de mémoires===
http://www.commentcamarche.net/contents/764-ram-memoire-vive
=== timing VGA pour différentes résolutions===
http://hamsterworks.co.nz/mediawiki/index.php/VGA_timings
=== carte avec usb et pleins d'ip===
http://www.freerangefactory.org/site/index.php
http://www.freerangefactory.org/cores/
cordic:
http://www.freerangefactory.org/cores/arithmetic_core/cordic_core/index.html
fpu:
http://www.freerangefactory.org/cores/arithmetic_core/floating_point_adder_and_multiplier/index.html
=== super cours ===
http://hamsterworks.co.nz/mediawiki/index.php/FPGA_course
vga:
http://hamsterworks.co.nz/mediawiki/index.php/Module_11
http://hamsterworks.co.nz/mediawiki/index.php/Main_Page
=====carte spartan3 de Pierre=====
http://www.digilentinc.com/Products/Detail.cfm?Prod=S3BOARD
=====Licence ISE=====
copier le fichier Xilinx.lic dans ~/.Xilinx
===serveur de licences au laas===
https://sysadmin.laas.fr/cgi-bin/intranet/SYSADMIN/flexlm/status.cgi
=====Installation ise sous ubuntu=====
récupérés sur http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools/v2012_4---14_7.html
cd /local/users/bvandepo
wget -c https://xilinx-ax-dl.entitlenow.com/dl/ul/2013/10/18/R209855202/Xilinx_ISE_DS_Lin_14.7_1015_1.tar/49210d32505ebdabeded7d2d7e0a82d8/5671CD1C/Xilinx_ISE_DS_Lin_14.7_1015_1.tar?akdm=1&filename=Xilinx_ISE_DS_Lin_14.7_1015_1.tar
mv Xilinx_ISE_DS_Lin_14.7_1015_1.tar\?akdm\=1 Xilinx_ISE_DS_Lin_14.7_1015_1.tar
tar xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar
cd Xilinx_ISE_DS_Lin_14.7_1015_1
xhost +local:root
sudo ./xsetup
xhost -local:root
Selectionner tout,
pour voir le log d'installation:
gedit /opt/Xilinx/14.7/ISE_DS/.xinstall/install.log
===installation driver digilent cable jtag-usb===
cd /local/users/bvandepo/Xilinx/14.7/ISE_DS/ISE/bin/lin/digilent/digilent.adept.runtime_2.13.1-i686
===installation librairies 32 bits sur machine 64 bits===
nécessaire par exemple pour l'executable data2mem qui est 32 bits et ne peut donc pas utiliser les libs 64 bits installées par défaut
sudo apt-get install ia32-libs-multiarch
===pour lancer ise===
cd /local/users/bvandepo/Xilinx/14.7/ISE_DS
source settings32.csh
ise
=== configuration carte spartan 3 pierre lacroix===
le connecteur série se branche directement sur adaptateur USB/serie ou alors avec cable droit au port série du PC
pour pouvoir charger le .bit directement dans le fpga sans passer par la flash, ne laisser que le jumper M1 sur le connecteur de mode JP8
pour pouvoir charger le .bit dans le fpga depuis la flash, laisser tous les jumpers sur le connecteur de mode JP8
=====simulation avec ghdl et gtkwave=====
http://gna.org/projects/ghdl/
http://ghdl.free.fr/download.html
http://gna.org/projects/ghdl/
http://ghdl.free.fr/download.html
===Version 0.29 sur linux 32 bits===
wget http://ghdl.free.fr/ghdl-0.29-i686-pc-linux.tar
tar -vxf ghdl-0.29-i686-pc-linux.tar
cd ghdl-0.29-i686-pc-linux/
sudo tar -C / -jxvf ghdl-0.29-i686-pc-linux.tar.bz2
s'installe dans /usr/local
===Version 0.33 sur linux 64 bits===
wget https://github.com/tgingold/ghdl/releases/download/v0.33/ghdl-0.33-x86_64-linux.tgz
sudo tar -C /usr/local/ -vxf ghdl-0.33-x86_64-linux.tgz
===Gtkwave===
sudo apt-get install gtkwave
===erreur===
ghdl -e deco7seg_tb1
/usr/bin/ld: cannot find -lz
collect2: ld a retourné 1 code d'état d'exécution
ghdl: compilation error
ldd -v /usr/local/bin/ghdl
linux-gate.so.1 => (0x00b49000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x004e6000)
/lib/ld-linux.so.2 (0x00f29000)
Version information:
/usr/local/bin/ghdl:
libc.so.6 (GLIBC_2.2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libc.so.6:
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
il faut installer le paquet:
sudo apt-get install libghc-zlib-dev
===installation===
sudo apt-get install gtkwave
mkdir ~/ghdlbin
cd ~/ghdlbin
wget ghdl.free.fr/site/uploads/Main/ghdl-i686-linux-latest.tar
tar xvf ghdl-i686-linux-latest.tar
cd ghdl-0.29-i686-pc-linux
sudo tar -C / -jxvf ghdl-0.29-i686-pc-linux.tar.bz2
ghdl s'installe dans /usr/local, ce qui pose problème au laas car ce dossier est un montage réseau, et même sudo ne peut pas y créer de dossier (/usr/local/info), mais ce n'est pas grave, les binaires et librairies sont installées correctement
il faut aussi installer le paquet:
sudo apt-get install libghc-zlib-dev
===fichier clean.sh===
#!/bin/sh
rm *.o *.cf *.vcd *~
ghdl --clean
===fichier pour lancer le test===
#!/bin/sh
echo "ghdl -a --ieee=synopsys -fexplicit cptgn.vhd"
ghdl -a --ieee=synopsys -fexplicit cptgn.vhd
echo "ghdl -a --ieee=synopsys -fexplicit tb_cptgn2.vhd"
ghdl -a --ieee=synopsys -fexplicit tb_cptgn2.vhd
echo "ghdl -e --ieee=synopsys -fexplicit tb_cptgn2"
ghdl -e --ieee=synopsys -fexplicit tb_cptgn2
echo "ghdl -r --ieee=synopsys -fexplicit tb_cptgn2 --vcd=tb_cptgn2.vcd"
ghdl -r --ieee=synopsys -fexplicit tb_cptgn2 --vcd=tb_cptgn2.vcd --stop-time=10us
echo "gtkwave tb_cptgn2.vcd sp3_cptgn2.sav &"
gtkwave tb_cptgn2.vcd sp3_cptgn2.sav &
#le .sav sert à conserver les paramètres d'affichage , ctrl-s dans gtkwave pour sauver
ATTENTION, au cas ou certains VHD utilisés dans le projet manquent, il y a juste un warning du type:
../uart/gh_uart_Tx_8bit.vhd:126:1:warning: component instance "u1" is not bound
../uart/gh_uart_Tx_8bit.vhd:44:14:warning: (in default configuration of gh_uart_tx_8bit(a))
TODO: Idéalement, on doit pouvoir générer ces scripts shell ou des makefiles à partir du fichier .xise qui décrit les différents fichiers du projet.
#!/bin/bash
COMPONENT_FILES="../src/histogram_byte"
TB_DIR="../tb/"
TB_FILE="tb_histo"
GHDL_OPTIONS="--std=02 --ieee=synopsys -fexplicit --warn-no-vital-generic --workdir=./"
for CURRENT_FILES in $COMPONENT_FILES
do
echo ------------------------ Processing $CURRENT_FILES.vhd ------------------------
ghdl -a $GHDL_OPTIONS $CURRENT_FILES.vhd
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
done
echo ------------------------ Analysis of $TB_DIR$TB_FILE.vhd ------------------------
ghdl -a $GHDL_OPTIONS $TB_DIR$TB_FILE.vhd
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
echo ------------------------ Elaboration of $TB_FILE ------------------------
ghdl -e $GHDL_OPTIONS $TB_FILE
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
echo ------------------------ Running simulation of $TB_FILE ------------------------
ghdl -r $GHDL_OPTIONS $TB_FILE --vcd=$TB_FILE.vcd --stop-time=10us
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
echo ------------------------ Display simulation of $TB_FILE.vcd ------------------------
gtkwave $TB_FILE.vcd $TB_FILE.sav
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
#le .sav sert à conserver les paramètres d'affichage , ctrl-s dans gtkwave pour sauver
===prise en charge librairie arith===
ghdl -a --std=02 --ieee=synopsys afficheur.vhd
ou
ghdl -a --std=02 --ieee=mentor afficheur.vhd
en fonction du logiciel utilisé (mentor ou synopsys)
# Voir GHDL guide p16 pour explication sur "--ieee=synopsys -fexplicit"
SUPER DOC DANS /usr/local/info/ghdl.info
=====exemple de testbench avec liste de stimuli=====
http://vhdl33.free.fr/wp-content/fichiers/test_modulo.vhd
=====makefile pour vhdl=====
http://excamera.com/sphinx/fpga-makefile.html
=====bus wishbone====
exemple interface FLASH: http://8085projects.info/flash-memory-based-wishbone-bus-interface-design-circuit.html
http://fr.wikipedia.org/wiki/Wishbone_%28bus_informatique%29
http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29
====OpenCores====
===uart avec wrapper wishbone===
http://opencores.com/websvn,listing?repname=a_vhd_16550_uart&path=%2Fa_vhd_16550_uart%2Fweb_uploads%2F#path_a_vhd_16550_uart_web_uploads_
doc:
http://opencores.com/websvn,filedetails?repname=a_vhd_16550_uart&path=%2Fa_vhd_16550_uart%2Fweb_uploads%2Fvhdl_16550_uart_2_2.pdf
===librairie gh===
http://opencores.org/project,gh_vhdl_library
http://opencores.org/websvn,filedetails?repname=gh_vhdl_library&path=%2Fgh_vhdl_library%2Fweb_uploads%2Fgh_vhdl_lib_v3_48.zip
doc: http://opencores.org/websvn,filedetails?repname=gh_vhdl_library&path=%2Fgh_vhdl_library%2Fweb_uploads%2Fgh_vhdl_lib_3_48.pdf
===sram controler with wishbone wrapper===
http://opencores.org/project,zbt_sram_controller
===controleur de carte sd===
http://opencores.org/project,sdcard_mass_storage_controller
=====File Naming Conventions=====
http://www.xilinx.com/itp/xilinx10/isehelp/ise_r_file_names.htm
Filenames for ISE® projects and for project source files must adhere to the following conventions:
Filenames must start with a letter (A-Z, a-z) and must contain only alphanumeric characters (A-Z, a-z, 0-9) and underscores (_).
===state machines===
http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_working_with_state_machines.htm
graphviz: visualisation de graphe de machine à état:
http://www.graphviz.org/
statecad:
http://www.xilinx.com/itp/xilinx10/help/iseguide/mergedProjects/state/whnjs.htm
ragel:
Ragel compiles executable finite state machines from regular languages. Ragel targets C, C++, Objective-C, C#, D, Java, Ruby, OCaml and Go
http://www.complang.org/ragel/
===doxygen===
https://bvdp.inetdoc.net/docvhdl
===xlogiccircuit===
http://conter.perso.enseeiht.fr/xlogicintro.html
sudo apt-get install openjdk-7-jre
=====Licences Xilinx au LAAS=====
https://wiki.laas.fr/sysadmin/Xilinx?highlight=%28XILINX%29
=====Logic Analyser with spartan 3 board=====
http://www.sump.org/projects/analyzer/
remarque à tester:
fishfish (Thu, 21 Jan 2010):
For anyone else trying to compile for an S3Board with ISE 11.1, change d9 to n8 in la.ucf to get rid of the \"This will not allow the use of the fast path between the IO and the Clock buffer\" error. From what I can tell from the datasheets, this is the only global clock site able to be connected to a clock mux with t9 which isn\'t used for something else on the board.
http://oakmicros.com/content/downloads/Download-document/Logic-Analyzer-Files.html
This package includes all of the required source and binary files in a 3M byte file in ZIP format:
http://oakmicros.com/content/downloads/Download-document/Logic-Analyzer-User-Guide.html
carte bas cout: http://gadgetforge.gadgetfactory.net/gf/project/butterflylogic/
===vmagic===
http://sourceforge.net/projects/vmagic/
Description
vMAGIC is a Java-API which helps creating VHDL generators and analyzers. vMAGIC comprises three parts: 1st a VHDL'93 compliant parser, 2nd a programming model to easily create and modify VHDL constructs, and 3rd a VHDL Writer to generate code.
http://aigamedev.com/open/article/fsm-age-is-over/
=====terminaux émulation série=====
http://doc.ubuntu-fr.org/gtkterm
simple: http://doc.ubuntu-fr.org/serialclient
===== softcore 8051 en vhdl =====
http://www.codeforge.com/article/211068
===== Organisation des dossiers pour dépot git=====
structure dossier projet vhdl/c/c++/system C
Définir une politique;
que met on sur le dépot git
que NE met on PAS sur le dépot git
imposer des entêtes de fichiers et des fichiers descripteurs de dossiers (par exemple README)
Dans les entêtes, indiquer l'état du fichier, est ce que c'est en test, quelle version, ce qu'il reste à tester, si c'est validé, dans quel projet c'est utilisé etc...
organisation des dossiers
=> permet automatiser des taches (par exemple simu)
eviter de mettre des fichiers avec le même nom à différents endroits=> comme ca on peut faire des find . pour rechercher un .vhd d'après le nom d'un composant par exemple
fournit un ensemble d'outils (intégrer par exemple ghdl, comme ca il n'y a pas besoin de l'installer manuellement) et des scripts associés
interfaces de communication avec cartes =>softs
comment gérer les testbenchs; 1 dossier à part pour les tb_.vhd?
1 script shell pour lancer la simu par tb
fichiers resultats non enregistrés sous git mais il faut prévoir les dossiers et ne pas pourrir les dossiers de sources
===gestion de doxygen===
1 grosse doc commune à tout
===organisation du dossier harddev===
components contains descriptions of components organised in packages
components/packagesimage
components/packagessram
components/packagesddrram
components/packagesgh
datasheets
courses syntax example etc...
platform contains top level entity vhdl file and ucf etc... for specific cards
platform/DIGILENT-spartan3
platform/DIGILENT-nexys
tools /tools for automatic code generation, or script to automatize process (eg: testbench with ghdl, or synthesis with ise line command binaries)
tools/src
tools/bin
data contains data such as images etc...
data/images
data/sounds
data/schematics/ contains schematics and pcb of electronic boards
===== softcore 32 bit zpu=====
doc et jeu d'instruction: http://repo.or.cz/w/zpu.git?a=blob_plain;f=zpu/docs/zpu_arch.html;hb=HEAD#implementations
site web: http://repo.or.cz/w/zpu.git
cd ~/FPGA/zpu
wget http://opensource.zylin.com/zpu/zpugcclinux.tar.bz2
tar -jxvf zpugcclinux.tar.bz2
git clone git://repo.or.cz/zpu.git
fichier de programme helloworld, contient la définition d'une ram double port avec un contenu correspondant aux opcodes etc...
gedit ../../hdl/example/helloworld.vhd
convertisseur:
zpu/hdl/example> cat zpuromgen.c
// zpuromgen.c
// Program to turn a binary file into a VHDL lookup table.
// by Adam Pierce
// 29-Feb-2008
zpu/hdl/zpu4/test/hello
doc: http://repo.or.cz/w/zpu.git?a=blob_plain;f=zpu/docs/zpu_arch.html;hb=HEAD#instructionset
voir " Working with the tools and core "
cd ~/FPGA/zpu/zpu/zpu/sw/helloworld
export PATH="/home/bvandepo/FPGA/zpu/install/bin:$PATH"
# zpu-elf-gcc hello.c -o hello.elf -phi #NON CA NE GENERE PAS UN BON FICHIER
zpu-elf-gcc -Os -phi hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
zpu-elf-objcopy -O binary hello.elf hello.bin
java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
sudo apt-get install dos2unix
cd ~/FPGA/zpu/zpu/zpu/hdl/example_ghdl
cat README
chmod +x *.sh
dos2unix *.sh
./ghdl_import.sh
./ghdl_make.sh
./fpga_top --stop-time=2100us --wave=zpu.ghw
gtkwave zpu.ghw zpu.sav &
pour faire le test helloworld, éditer
gedit ghdl_import.sh
et commenter l177 a 182 de
gedit ../../hdl/example/sim_small_fpga_top.vhd
analyse de la trace en texte:
cat trace.txt | more
#pc,opcode,sp,top_of_stack
#----------
0x0000000 0x0B 0x0001FFF8 0x00000000 0x00000000 0x?u 0x0000000000000006
0x0000001 0x0B 0x0001FFF8 0x00000000 0x00000000 0x?u 0x000000000000000A
0x0000002 0x0B 0x0001FFF8 0x00000000 0x00000000 0x?u 0x000000000000000E
0x0000003 0x0B 0x0001FFF8 0x00000000 0x00000000 0x?u 0x0000000000000012
0x0000004 0x82 0x0001FFF8 0x00000000 0x00000000 0x?u 0x0000000000000016
0x0000005 0x70 0x0001FFF4 0x00000002 0x00000000 0x?u 0x000000000000001A
0x0000006 0x0B 0x0001FFF0 0x00000002 0x00000002 0x?u 0x000000000000001E
0x0000007 0x0B 0x0001FFF0 0x00000002 0x00000002 0x?u 0x0000000000000022
0x0000008 0x80 0x0001FFF0 0x00000002 0x00000002 0x?u 0x0000000000000026
0x0000009 0xCF 0x0001FFEC 0x00000000 0x00000002 0x?u 0x000000000000002A
0x000000A 0xD8 0x0001FFEC 0x0000004F 0x00000002 0x?u 0x000000000000002E
0x000000B 0x0C 0x0001FFEC 0x000027D8 0x00000002 0x?u 0x0000000000000032
0x000000C 0x3A 0x0001FFF4 0x00000002 0x00000000 0x?u 0x0000000000000038
0x0000340 0x81 0x0001FFF0 0x0000000D 0x00000002 0x?u 0x000000000000003C
0x0000341 0x0B 0x0001FFEC 0x00000001 0x0000000D 0x?u 0x0000000000000040
0x0000342 0x0B 0x0001FFEC 0x00000001 0x0000000D 0x?u 0x0000000000000044
0x0000343 0x0B 0x0001FFEC 0x00000001 0x0000000D 0x?u 0x0000000000000048
0x0000344 0x80 0x0001FFEC 0x00000001 0x0000000D 0x?u 0x000000000000004C
0x0000345 0xCF 0x0001FFE8 0x00000000 0x00000001 0x?u 0x0000000000000050
0x0000346 0xD4 0x0001FFE8 0x0000004F 0x00000001 0x?u 0x0000000000000054
0x0000347 0x0C 0x0001FFE8 0x000027D4 0x00000001 0x?u 0x0000000000000058
0x0000348 0x51 0x0001FFF0 0x0000000D 0x00000002 0x?u 0x000000000000005E
0x0000349 0x04 0x0001FFF4 0x0000000D 0x00000000 0x?u 0x0000000000000063
0x000000D 0x0B 0x0001FFF8 0x00000000 0x00000000 0x?u 0x0000000000000068
0x000000E 0x0B 0x0001FFF8 0x00000000 0x00000000 0x?u 0x000000000000006C
0x000000F 0x80 0x0001FFF8 0x00000000 0x00000000 0x?u 0x0000000000000070
0x0000010 0xC6 0x0001FFF4 0x00000000 0x00000000 0x?u 0x0000000000000074
0x0000011 0xD0 0x0001FFF4 0x00000046 0x00000000 0x?u 0x0000000000000078
0x0000012 0x04 0x0001FFF4 0x00002350 0x00000000 0x?u 0x000000000000007C
0x0002350 0xFD 0x0001FFF8 0x00000000 0x00000000 0x?u 0x0000000000000081
0x0002351 0x3D 0x0001FFF4 0xFFFFFFFD 0x00000000 0x?u 0x0000000000000085
0x00003A0 0x02 0x0001FFF0 0x00002352 0xFFFFFFFD 0x?u 0x0000000000000089
0x00003A1 0x84 0x0001FFEC 0x0001FFF0 0x00002352 0x?u 0x000000000000008D
0x00003A2 0x05 0x0001FFE8 0x00000004 0x0001FFF0 0x?u 0x0000000000000091
0x00003A3 0x72 0x0001FFEC 0x0001FFF4 0x00002352 0x?u 0x0000000000000096
0x00003A4 0x10 0x0001FFE8 0xFFFFFFFD 0x0001FFF4 0x?u 0x000000000000009A
0x00003A5 0x10 0x0001FFE8 0xFFFFFFFA 0x0001FFF4 0x?u 0x00000000000000A0
0x00003A6 0x05 0x0001FFE8 0xFFFFFFF4 0x0001FFF4 0x?u 0x00000000000000A6
0x00003A7 0x52 0x0001FFEC 0x0001FFE8 0x00002352 0x?u 0x00000000000000AB
0x00003A8 0x04 0x0001FFF0 0x00002352 0x0001FFE8 0x?u 0x00000000000000B0
0x0002352 0x0D 0x0001FFF4 0x0001FFE8 0x00000000 0x?u 0x00000000000000B5
0x0002353 0x80 0x0001FFE8 0xFFFFFFF4 0x0001FFE8 0x?u 0x00000000000000BA
0x0002354 0x0B 0x0001FFE4 0x00000000 0xFFFFFFF4 0x?u 0x00000000000000BE
fichier log.txt visualise les sorties sur le port série
=====exemple zpu+wishbone sur fpga spartan 3=====
http://embdev.net/articles/ZPU:_Softcore_implementation_on_a_Spartan-3_FPGA
wget http://embdev.net/wikifiles_en/a/a1/ZPU_Softcore_Implementierung_auf_Spartan-3_FPGA.zip
ouvrir avec ise 14.7
convertir le projet en .xise
changer le device de XC3S200 -5 vers XC3S1000 -4
enlever le fichier .bmm du projet (il sert à refabriquer le .bit sans refaire toute la synthèse quand on change le programme C)
idéalement, il faut faire un moniteur qui permet de charger depuis la liaison série vers les block ram
===acces au perif en C===
The absolute hardware address can be set with a pointer of volatile int.
As an example the definition of the switches and LEDs addresses on the board.
The value is the address and it will be checked by the hardware multiplexer in the file softcore_top.vhd.
volatile int* intIOSW = (volatile int*)0x80080001;
volatile int* intIOLED = (volatile int*)0x80080002;
By dereferencing the pointer intIOSW the state of the switches can be read, in the same way the LEDs can be set with the intIOLED.
while(1) { *intIOLED = *intIOSW; // Reads the value of the switches and sets // the LEDs. //The while loop is used to mirror the // of the switches at all times at the LEDs
===modif du code du softcore===
www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/ise_n_data2mem_user_guide.htm
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/data2mem.pdf
These informations are still not enough for Data2MEM to transform the .bmm file because the information of the exact BlockRAM is still missing. It is recommended to give this task to the ISE (more exactly Bitgen). The .bmm file is included in the ISE project and during the Generate Programming File process the .bmm file will be automatically completed. Now is a new .bmm file existing in the project folder and its name is extended by „_bd“ and it's containing the location for all instances like shown below: ADDRESS_MAP softcore_top PPC405 0 ADDRESS_SPACE memory1 RAMB16 [0x00000000:0x00003FFF] BUS_BLOCK core/zpu_core/memory/RAMB16_S4_S4_inst7 [31:28] PLACED = X0Y1; core/zpu_core/memory/RAMB16_S4_S4_inst6 [27:24] PLACED = X0Y5; core/zpu_core/memory/RAMB16_S4_S4_inst5 [23:20] PLACED = X1Y3; core/zpu_core/memory/RAMB16_S4_S4_inst4 [19:16] PLACED = X0Y3; core/zpu_core/memory/RAMB16_S4_S4_inst3 [15:12] PLACED = X0Y0; core/zpu_core/memory/RAMB16_S4_S4_inst2 [11:8] PLACED = X0Y2; core/zpu_core/memory/RAMB16_S4_S4_inst1 [7:4] PLACED = X0Y4; core/zpu_core/memory/RAMB16_S4_S4_inst0 [3:0] PLACED = X1Y2; END_BUS_BLOCK; END_ADDRESS_SPACE; END_ADDRESS_MAP; Data2MEM will need besides of the new generated .bmm file also the .bit and the .elf file. The .bit file is normally located in the top level of the project folder and has the same name as the project. The following command transforms the .bit file: C:\Programme\Xilinx\[program version, e.g. 10.1]\ISE\bin\nt\data2mem -bm [absolute path name]\[file name].bmm -bd [absolute path name]\[file name].elf -bt [absolute path name]\[file name].bit -o b [absolute path name]\[destination file name].bit For my project the file names:
softcore.bmm
main.elf
softcore_top.bit
softcore_top_fw.bit
cd ~/FPGA/zpuWB/ZPU/C
cat build.sh
adresse des periphs dans
cat ~/FPGA/zpuWB/ZPU/C/main.h
cd ~/FPGA/zpuWB/ZPU/C
PATH="/home/bvandepo/FPGA/zpu/install/bin:$PATH"
setenv PATH "/home/bvandepo/FPGA/zpu/install/bin:$PATH"
zpu-elf-gcc -Os -phi main.c -o main.elf -Wl,--relax -Wl,--gc-sections -g
zpu-elf-strip main.elf
./data2mem -bm '..\VHDL\BMM\softcore_bd.bmm' -bd '..\C\main.elf' -bt '..\ISE_PROJECT\softcore_top.bit' -o b '..\ISE_PROJECT\softcore_top_fw.bit'
data2mem a été copié depuis /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin/data2mem
=== visualisation des différences entre 2 fichiers binaires===
http://www.man-linux-magique.net/man1/hexdiff.html
sudo apt-get install hexdiff
hexdiff softcore_top.bit softcore_top_fw.bit
touche n pour passer à la différence suivante
===exemple zpu+wishbone sur fpga de2 ===
http://retroramblings.net/?m=201304
http://retroramblings.net/?p=511#more-511
=== autre zpu===
zpuino avec ide arduino et bootloader, différentes cartes supportées:
http://www.alvie.com/zpuino/releasenotes.html
zylin.com/pipermail/zylin-zpu_zylin.com/2010-September/001485.html
spi,bootloader,
http://sourceforge.net/apps/phpbb/welecw2000a/viewtopic.php?f=6&t=9
http://code.ettus.com/redmine/ettus/projects/uhd/repository/revisions/03a609173ac90bf518b645893bd8211f02209846/show/firmware/zpu/usrp2p/bootloader
=====impact en ligne de commande=====
doc dans la gui de impact; help->help topics
pour entrer en mode batch et saisir les commandes dans la console impact
impact -batch
pour enchainer des commandes définies dans un fichier .cmd
impact -batch fichier.cmd
mettre cette ligne à la fin d'un script shell qui déclare les variables d'environnement (par ex ~/ise2)
le fichier cmd contient
setMode -bs
setCable -port auto
Identify
identifyMPM
assignFile -p 1 -file "/home/bvandepo/FPGA/vga/Spartan3VGATest/vgatest.bit"
Program -p 1
quit
pour générer le .cmd, utiliser impact en mode graphique 1 fois et voir le fichier _impact.log dans le dossier projet et reperer les lignes commencant par / / *** BATCH CMD :
autres commandes éventuellement utiles:
readIdcode -p 1
bypass -p 2
avec la commande addDevice -p 1 -file FPGA/vga/Spartan3VGATest/vgatest.bit , j'ai des problèmes sur les IDcode
dans la gui, pour ne pas avoir à tout reconfigurer à chaque utilisation,
Edit->preferences->project settings control-> cocher automatically create et Automatically load
=====ZPU pour pierre=====
récupérer: https://bvdp.inetdoc.net/files/ZPU/ZPU.sav2_FONCTIONNEL_SPARTAN3.tar.gz
installer dans ton home dans ~/FPGA/zpu . C'est un ensemble de fichiers qui te permetteNT de faire la synthèse d'un ZPU plus pleins de périphériques sur un bus wishbone. Tu as donc une bonne base pour un système complet (uart etc...)
j'ai fait la synthèse pour la carte que tu m'as prétée avec le xc3S1000. tu peux programmer le ZPU sans refaire la syntèse, juste en recompilant le .c et en updatant le .bit
récupérer: https://bvdp.inetdoc.net/files/ZPU/install.tar.gz et installer dans ton home dans ~/FPGA/zpu tu dois avoir un sous dossier install/ . Ce sont les binaires du compilateur pour ZPU.
=====Ressources langage VHDL=====
https://webdocs.cs.ualberta.ca/~amaral/courses/329/labs/VHDL_Guideline.html
dans le script C/build.sh, modifie le PATH pour avoir les binaires du compilateur pour ZPU, qqchose comme:
export PATH="/home/bvandepo/FPGA/zpu/install/bin:$PATH"
ce script compile le fichier C/main.c et génère le binaire .elf. puis patch le .bit pour mettre à jour le contenu des blocks ram avec le nouveau programme puis lance un script impact pour programmer la carte.
tu dois avoir "ABC01234" qui defile sur les 4 afficheurs 7 segments.