|
|
Line 27: |
Line 27: |
| = '''Mes petites bidouilles avec l'armadeus''' = | | = '''Mes petites bidouilles avec l'armadeus''' = |
| | | |
− | == Une led qui clignote avec le spartan 3 ==
| + | - [[Une led qui clignote avec le spartan 3]] |
− | | + | |
− | Pour me faire la main avec le kit et surtout avec le fpga je me suis mis en tête de faire clignoter le une led du fpga. Pour cela je me suis un peu inspiré du montage proposé [[FPGA_and_led]] que j'ai modifié pour pouvoir tester ensuite [http://www.hackaday.com/2007/12/16/diy-led-multi-touch-panel/ la led en capteur de lumière].
| + | |
− | | + | |
− | [[Image:diode.png]]
| + | |
− | | + | |
− | L'intérêt du clignotement d'une led est relativement limité, cependant il permet de prendre en main la totalité de la chaine de développement sur la carte Armadeus.
| + | |
− | | + | |
− | Après avoir installé le Xilinx Web Pack généreusement offert par Xilinx, il suffit de réaliser un compteur qui divisera la fréquence de l'horloge de manière à avoir un clignotement de quelques Hertz (La fréquence du spartan3 étant de 96MHz nous diviserons par 48000000 !).
| + | |
− | | + | |
− | <source lang="VHDL">
| + | |
− | library IEEE;
| + | |
− | use IEEE.STD_LOGIC_1164.ALL;
| + | |
− | use IEEE.numeric_std.all;
| + | |
− | | + | |
− | entity Clk_div_led is
| + | |
− | Port ( Clk : in std_logic;
| + | |
− | led_cathode : out std_logic;
| + | |
− | led_anode : out std_logic);
| + | |
− | end Clk_div_led;
| + | |
− | | + | |
− | architecture RTL of Clk_div_led is
| + | |
− | constant max_count : natural := 48000000;
| + | |
− | signal count : natural range 0 to max_count;
| + | |
− | signal Rst_n : std_logic;
| + | |
− | begin
| + | |
− | | + | |
− | Rst_n <= '1';
| + | |
− | | + | |
− | -- compteur de 0 à max_count
| + | |
− | compteur : process(Clk)
| + | |
− | begin
| + | |
− | if Rst_n = '0' then
| + | |
− | count := 0;
| + | |
− | led_anode <= '1';
| + | |
− | led_cathode <= '0';
| + | |
− | elsif rising_edge(Clk) then
| + | |
− | if count < max_count/2 then
| + | |
− | led_anode <='1';
| + | |
− | led_cathode <='0';
| + | |
− | count <= count + 1;
| + | |
− | elsif count < max_count then
| + | |
− | led_anode <='0';
| + | |
− | led_cathode <='0';
| + | |
− | count <= count + 1;
| + | |
− | else
| + | |
− | count <= 0;
| + | |
− | led_anode <='1';
| + | |
− | led_cathode <='0';
| + | |
− | end if;
| + | |
− | end if;
| + | |
− | end process compteur;
| + | |
− | end RTL;
| + | |
− | </source>
| + | |
− | | + | |
− | | + | |
− | Pour que ISE puisse savoir sur quels pins brancher chaque signal, il est nécessaire de lui fournir un fichier de contraintes en *.ucf :
| + | |
− | | + | |
− | NET "Clk" LOC = "P55";
| + | |
− | NET "Clk" TNM_NET = "Clk";
| + | |
− | TIMESPEC "TS_Clk" = PERIOD "Clk" 10 ns HIGH 50 %;
| + | |
− | NET "led_cathode" LOC = "P119"| IOSTANDARD = LVCMOS33 ;
| + | |
− | NET "led_anode" LOC = "P118"| IOSTANDARD = LVCMOS33 ;
| + | |
− | | + | |
− | Des exemples de ucf peuvent être trouvés dans le répertoire firmware du projet Armadeus.
| + | |
− | | + | |
− | Une fois que ces deux fichiers sont écrits il suffit de générer le bitstream en double cliquant sur "Synthetize - XST" puis sur "Implement Design" et enfin "Generate Programming File". Si ces opérations se sont bien passées, on se retrouve avec un fichier Clk_div_led.bit (du nom du vhdl).
| + | |
− | | + | |
− | C'est à partir de maintenant que les ennuis commencent (ou les choses intéressante c'est selon). Il faut télécharger le bitstream dans le fpga. Pour cela j'ai utilisé UBoot, en ayant bien pris soin de configurer le réseau correctement comme expliqué sur la page [[Connection_with_U-Boot_on_Linux]].
| + | |
− | | + | |
− | il faut donc mettre le bitstream dans le répertoire tftpboot :
| + | |
− | cp Clk_div_led.bit /tftpboot
| + | |
− | | + | |
− | Puis via la carte armadeus, le télécharger en ram :
| + | |
− | BIOS> tftpboot 08000000 Clk_div_led.bit
| + | |
− | dm9000 i/o: 0x15c00000, id: 0x90000a46
| + | |
− | MAC: 00:0e:32:00:00:01
| + | |
− | operating at 10M half duplex mode
| + | |
− | TFTP from server 192.168.0.143; our IP address is 192.168.0.10
| + | |
− | Filename 'Clk_div_led.bit'.
| + | |
− | Load address: 0x8000000
| + | |
− | Loading: T ##########################
| + | |
− | done
| + | |
− | Bytes transferred = 131029 (1ffd5 hex)
| + | |
− | | + | |
− | L'enregistrer en flash :
| + | |
− | BIOS> run flash_firmware
| + | |
− | .. done
| + | |
− | Erased 2 sectors
| + | |
− | Copy to Flash... done
| + | |
− | Flashing Firmware succeed
| + | |
− | | + | |
− | Puis le lancer en utilisant l'adresse du fpga mappée en 0x10060000 (voir [[Target_Software_Installation]]) et la taille du bitstream donnée au moment du téléchargement (Bytes transferred = 131029 (1ffd5 hex)) :
| + | |
− | BIOS> fpga load 0 010060000 1ffd5
| + | |
− | | + | |
− | Et voila, si tout c'est bien passé, la led clignote ...
| + | |
Fabien Marteau, Électronicien/Informaticien en dernière année d'école d'ingé spécialisée en systèmes embarqués (ENSEIRB)
J'ai toujours fait de l'électronique/informatique, depuis les magnétoscopes et réveils que j'ai démonté en passant par la filière SI du Bac S ainsi que le DUT GEII et l'ENSEIRB. J'aime bidouiller des petits circuits électroniques avec des applications plus ou moins utiles comme ma station météo.
- Faire de l'embarqué sur des platforme autre que x86 avec les vrais contraintes de l'embarqué
- créer ...