En 2023, OLIMEX sortait une carte de développement à base de FPGA GateMate (CologneChip):
La GateMateA1-EVB est une carte bien moins cher que le kit de développement officiel et propose tout un tas d’interfaces intéressantes.
Elle était dans mes cartons depuis un certain temps et je n’avais pas encore pris le temps de la tester.
Le site officiel donne la liste de caractéristiques complètes:
- CCGM1A1 FPGA with 20480 logic cells
- PSRAM 64Mbit
- RP2040 processor for programing and debugging
- 2MB configuration Flash for RP2040
- 4 buttons
- USB-C for power supply and programming
- PS2 connector
- VGA connector
- 4 Banks with signals with selectable levels 1.2V 1.8V 2.5V
- PMOD with level shifters
- UEXT with level shifters
- Power LED
- User LED
- 4 sections configuration slide switch
- Dimensions: 120 x 80 mm
Et le pilotage (communication, programmation alimentation debug) se fait via un connecteur USB-C connecté sur un microcontrôleur RP2040.
La plupart des signaux qui sortent sur les connecteurs sont branchés directement sur les bank du FPGA. Ils sont donc à la tension du bank : 1v2, 1v8 ou 2v5. Se sont des tensions assez faible dans les montages. Si l’on veut du 3v3 il faudra se rabattre sur les connecteurs Uext1 et Pmod1 qui possèdent des transformateurs de niveaux de tension bidirectionnels.
Les fichiers de développement de la carte (Kicad) ainsi que le code source d’exemple sont fournis sur un dépot git.
Bref, une belle carte libérée en perspective.
Mise en route
Sous Linux, au branchement de l’usb le message noyau suivant s’affiche:
[fabien:~/projets] $ sudo dmesg -ce
[janv.17 20:57] usb 1-1.3.3: new full-speed USB device number 38 using ehci-pci
[ +0,111290] usb 1-1.3.3: New USB device found, idVendor=1209, idProduct=c0ca, bcdDevice= 1.10
[ +0,000005] usb 1-1.3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ +0,000002] usb 1-1.3.3: Product: DirtyJTAG
[ +0,000001] usb 1-1.3.3: Manufacturer: Jean THOMAS
[ +0,000001] usb 1-1.3.3: SerialNumber: 2600942311111956
[ +0,018771] cdc_acm 1-1.3.3:1.1: ttyACM0: USB ACM device
[ +0,000018] usbcore: registered new interface driver cdc_acm
[ +0,000002] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
Nous voyons que le RP2040 nous expose un firmware DirtyJTAG ainsi qu’une UART ttyACM0.
Exemple : un analyseur logique
L’exemple qui est donné dans le manuel de référence de la carte est un analyseur logique open source développé par CologneChip : Gatemate ILA (Integrated Logic Analyser).
On va commencer par installer gatemate ILA :
cd /opt/gatemate/
git clone https://github.com/colognechip/gatemate_ila.git
cd gatemate_ila/app
python3 -m pip install -r requirements.txt
Il faut bien sur installer également la chaîne de développement de cologne chip. Et modifier le fichier app/config.py pour y inscrir les paths complet des utilitaires suivants:
- yosys
- p_r
- openFPGALoader
- gtkwave
S’ils ne se trouvent pas dans le path général du projet. Pour ma part il n’y a que p_r qui est spécifique au gatemate et que je n’ai pas installé globalement. J’ai donc téléchargé le kit de dev sur le site de colognechip (10.01.2025) et modifié la ligne suivante dans app/config.py
PR = '/opt/gatemate/cc-toolchain-linux/bin/p_r/p_r'
Les modes de programmation du gatemate avec openFPGALoader sont donnés dans la doc.
Dans le même fichier, on modifie également les flags pour utiliser la sonde DirtyJTAG flashée dans le RP2040 :
UPLOAD_FLAGS = ' -b olimex_gatemateevb '
CON_DEVICE = 'oli' # O.L.I. France inter, je suis pas petit ...
Dans un premier temps on va rester sur le bug du firmware qui oblige à appuyer sur le bouton reset à chaque fois qu’on configure le FPGA.
Le script qui contrôle l’ILA se nomme ILAcop pour ILA COntrol Program:
python3 ILAcop.py --help
usage: ILAcop.py [-h] [--version] [--clean] [--showdev] [-wd WORK_DIR] {config,start,reconfig} ...
GateMate ILA control program. With this script, you can configure and execute the ILA with a design under test (DUT).
options:
-h, --help show this help message and exit
--version show program's version number and exit
--clean Deletes all output files created by the program.
--showdev Outputs all found FTDI ports.
-wd WORK_DIR Folder from which Yosys should be started for the synthesis of the Design Under Test.
main_actions:
{config,start,reconfig}
example usage:
python3 ILAcop.py [Commands]
Commands:
config: Configure the ILA.
-vlog SOURCE Paths to the Verilog source code files.
-vhd SOURCE Paths to the VHDL source code files.
-t NAME Top level entity of the design under test.
-ccf SOURCE Folder containing the .ccf file of the design under test.
-s SPEED Configure ILA for best performance. Max Sample Width = 40, the number of samples depends on the sample width.
-f MHz Defines the external clock frequency in MHz (default is 10.0 MHz).
-sync LEVEL Number of register levels via which the SUT are synchronised (default: 2)
-d DELAY ILA PLL Phase shift of sampling frequency. 0=0°, 1=90°, 2=180°, 3=270° (default: 2).
-opt Optimizes the design by deleting all unused signals before design evaluation.
(optional) Subcommands config:
-create_json: Creates a JSON file in which the logic analyzer can be configured.
NOTE: Without the subcommand the configurations are requested step by step via the terminal.
reconfig: Configures the ILA based on a JSON file. With this option you have to specify a JSON file with -l [filename].json.
start Starts the communication to the ILA with the last uploaded config
-s The -s parameter prevents the FPGA from being reconfigured on restart.
Pour configurer le FPGA il semble devoir lancer la commande suivante (dans app/):
$ python3 ILAcop.py config -vlog ../example_dut/blink/src/ -t blink
#################################################################################################
# Cologne Chip GateMate ILA control program (ILAcop) #
# ********************************************************************************************* #
# Copyright (C) 2023 Cologne Chip AG <support@colognechip.com> #
# Developed by Dave Fohrn #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ********************************************************************************************* #
#################################################################################################
################# ccf File ##################
# #
# blink.ccf #
# #
#############################################
############### verilog Files ###############
# #
# blink.v #
# #
#############################################
Examine DUT ...
An error has occurred:
ERROR: Module `\CC_USR_RSTN' referenced in module `\blink' in cell `\usr_rstn_inst' is not part of the design.
yosys cmd:
yosys -l /opt/gatemate/gatemate_ila/log/yosys_DUT.log -p " read -sv /opt/gatemate/gatemate_ila/example_dut/blink/src/blink.v; read_verilog -lib -specify +/gatemate/cells_sim.v +/gatemate/cells_bb.v; hierarchy -check -top blink; proc; flatten; tribuf -logic; deminout; write_verilog /opt/gatemate/gatemate_ila/app/config_design/blink_25-01-17_22-08-52_flat.v ; check; alumacc; opt; memory -nomap; opt_clean; memory_libmap -lib +/gatemate/brams.txt; techmap -map +/gatemate/brams_map.v; stat -width"
Mais pour le moment ça ne marche pas. Un mysterieux module CC_USR_RSTN n’est pas référencé.
Si on essais l’exemple en VHDL c’est pas beaucoup mieux, même si l’erreur est différente (pourtant j’ai bien ghdl installé sur ma machine):
$ python3 ILAcop.py config -vhd ../example_dut/blink/src/ -t blink
#################################################################################################
# Cologne Chip GateMate ILA control program (ILAcop) #
# ********************************************************************************************* #
# Copyright (C) 2023 Cologne Chip AG <support@colognechip.com> #
# Developed by Dave Fohrn #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
# #
# ********************************************************************************************* #
#################################################################################################
################# ccf File ##################
# #
# blink.ccf #
# #
#############################################
################ vhdl Files #################
# #
# blink.vhd #
# #
#############################################
Examine DUT ...
An error has occurred:
ERROR: No such command: ghdl (type 'help' for a command overview)
yosys cmd:
yosys -l /opt/gatemate/gatemate_ila/log/yosys_DUT.log -p " ghdl --warn-no-binding -C --ieee=synopsys /opt/gatemate/gatemate_ila/example_dut/blink/src/blink.vhd -e blink; hierarchy -check -top blink; proc; flatten; tribuf -logic; deminout; write_verilog /opt/gatemate/gatemate_ila/app/config_design/blink_25-01-17_22-12-24_flat.v ; check; alumacc; opt; memory -nomap; opt_clean; memory_libmap -lib +/gatemate/brams.txt; techmap -map +/gatemate/brams_map.v; stat -width"
Suite au prochain épisode.