Hello,

J'essaie de faire de la détection de contours sur une vidéo.

En théorie, c'est simple :
coté HPS :
lire / décoder une vidéo avec openCV (c'est compatible ARM je crois).
copier la vidéo: sdram -> sram (par block de x ko, ou ligne par ligne, ou frame par frame); DMA synchro avec des interruptions.

coté FPGA
:
traitement des données.

FPGA ou HPS (je sais pas trop, un peu perdu) :
copier le résultat : sram -> sdram (pareil, par block de x ko, ou ligne par ligne, ou frame par frame); DMA synchro avec des interruptions.

En pratique par contre je suis complètement perdu.
Le traitement des données coté FPGA ne pose pas de problèmes (c'est juste de l'algorithmie), et de toutes façons j'en suis pas encore là.
Par contre les copies, ou rien que l’interaction HPS <-> FPGA, je bloque.

Qsys reste assez obsur mais je vois le principe et j'ai testé quelques systèmes avec un soft core NIOS II qui ont marchés du premier coup (presque ).

Du coup j'essaie juste la première partie : copier des données de la sdram vers le FPGA.

Mon système (Qsys) :


Bridges de l'HPS :


Et les périphériques :

J'ai aucune idée de que qu'est cet énorme tableau excel "Periph Mux Table", j'ai laissé tout par défaut.

Niveau config HPS clock / DDR3, pas de problèmes. Normalement ce que j'ai est bon.

Avec ça, je devrais pouvoir copier des données de la ram vers un buffer sur le FPGA, puis lire la sram en debug via la connexion JTAG / UART. (Je crois ?)

Pour l'instant ça compile (avec 200 warnings, mais ça compile ). Il me reste le placement des pins à faire et je pourrais tester ça.

Mais j'ai un problème à ce niveau là.

Mon entité principale :
Code VHDL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
entity vid is
	port(
		-- ...
		CONNECTED_TO_memory_mem_ck                : out   std_logic;                                        -- mem_ck
		CONNECTED_TO_memory_mem_ck_n              : out   std_logic;                                        -- mem_ck_n
		-- ...
	);
end entity vid;
-- ...
mem_ck et mem_ck_n forment une paire différentielle.

J'ai des warnings parce que j'ai pas attribué les pins encore (normal).
Au niveau des warnings mem_ck et mem_ck_n sont listés 1 fois.


Mais, ces signaux apparaissent en double dans le pin planner, et sont non assignables


Du coup, j'y comprend pas grand chose et Google est pas très bavard là dessus.

Si quelqu'un à une piste je prend !

Mon code complet, si jamais c'est utile : j'ai simplement copier / coller le template d’instanciation de Qsys
Code VHDL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity vid is
	port(
		CONNECTED_TO_clk_clk                      : in    std_logic                     := 'X';             -- clk
		CONNECTED_TO_reset_reset_n                : in    std_logic                     := 'X';             -- reset_n
		CONNECTED_TO_memory_mem_a                 : out   std_logic_vector(12 downto 0);                    -- mem_a
		CONNECTED_TO_memory_mem_ba                : out   std_logic_vector(2 downto 0);                     -- mem_ba
		CONNECTED_TO_memory_mem_ck                : out   std_logic;                                        -- mem_ck
		CONNECTED_TO_memory_mem_ck_n              : out   std_logic;                                        -- mem_ck_n
		CONNECTED_TO_memory_mem_cke               : out   std_logic;                                        -- mem_cke
		CONNECTED_TO_memory_mem_cs_n              : out   std_logic;                                        -- mem_cs_n
		CONNECTED_TO_memory_mem_ras_n             : out   std_logic;                                        -- mem_ras_n
		CONNECTED_TO_memory_mem_cas_n             : out   std_logic;                                        -- mem_cas_n
		CONNECTED_TO_memory_mem_we_n              : out   std_logic;                                        -- mem_we_n
		CONNECTED_TO_memory_mem_reset_n           : out   std_logic;                                        -- mem_reset_n
		CONNECTED_TO_memory_mem_dq                : inout std_logic_vector(7 downto 0)  := (others => 'X'); -- mem_dq
		CONNECTED_TO_memory_mem_dqs               : inout std_logic                     := 'X';             -- mem_dqs
		CONNECTED_TO_memory_mem_dqs_n             : inout std_logic                     := 'X';             -- mem_dqs_n
		CONNECTED_TO_memory_mem_odt               : out   std_logic;                                        -- mem_odt
		CONNECTED_TO_memory_mem_dm                : out   std_logic;                                        -- mem_dm
		CONNECTED_TO_memory_oct_rzqin             : in    std_logic                     := 'X';             -- oct_rzqin
		CONNECTED_TO_hps_io_hps_io_sdio_inst_CMD  : inout std_logic                     := 'X';             -- hps_io_sdio_inst_CMD
		CONNECTED_TO_hps_io_hps_io_sdio_inst_D0   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D0
		CONNECTED_TO_hps_io_hps_io_sdio_inst_D1   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D1
		CONNECTED_TO_hps_io_hps_io_sdio_inst_CLK  : out   std_logic;                                        -- hps_io_sdio_inst_CLK
		CONNECTED_TO_hps_io_hps_io_sdio_inst_D2   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D2
		CONNECTED_TO_hps_io_hps_io_sdio_inst_D3   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D3
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D0   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D0
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D1   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D1
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D2   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D2
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D3   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D3
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D4   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D4
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D5   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D5
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D6   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D6
		CONNECTED_TO_hps_io_hps_io_usb1_inst_D7   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D7
		CONNECTED_TO_hps_io_hps_io_usb1_inst_CLK  : in    std_logic                     := 'X';             -- hps_io_usb1_inst_CLK
		CONNECTED_TO_hps_io_hps_io_usb1_inst_STP  : out   std_logic;                                        -- hps_io_usb1_inst_STP
		CONNECTED_TO_hps_io_hps_io_usb1_inst_DIR  : in    std_logic                     := 'X';             -- hps_io_usb1_inst_DIR
		CONNECTED_TO_hps_io_hps_io_usb1_inst_NXT  : in    std_logic                     := 'X';             -- hps_io_usb1_inst_NXT
		CONNECTED_TO_hps_io_hps_io_uart0_inst_RX  : in    std_logic                     := 'X';             -- hps_io_uart0_inst_RX
		CONNECTED_TO_hps_io_hps_io_uart0_inst_TX  : out   std_logic;                                        -- hps_io_uart0_inst_TX
		CONNECTED_TO_hps_io_hps_io_uart0_inst_CTS : in    std_logic                     := 'X';             -- hps_io_uart0_inst_CTS
		CONNECTED_TO_hps_io_hps_io_uart0_inst_RTS : out   std_logic                                         -- hps_io_uart0_inst_RTS
	);
end entity vid;
 
architecture arch_vid of vid is
 
	component vid_system is
        port (
            clk_clk                      : in    std_logic                     := 'X';             -- clk
            reset_reset_n                : in    std_logic                     := 'X';             -- reset_n
            memory_mem_a                 : out   std_logic_vector(12 downto 0);                    -- mem_a
            memory_mem_ba                : out   std_logic_vector(2 downto 0);                     -- mem_ba
            memory_mem_ck                : out   std_logic;                                        -- mem_ck
            memory_mem_ck_n              : out   std_logic;                                        -- mem_ck_n
            memory_mem_cke               : out   std_logic;                                        -- mem_cke
            memory_mem_cs_n              : out   std_logic;                                        -- mem_cs_n
            memory_mem_ras_n             : out   std_logic;                                        -- mem_ras_n
            memory_mem_cas_n             : out   std_logic;                                        -- mem_cas_n
            memory_mem_we_n              : out   std_logic;                                        -- mem_we_n
            memory_mem_reset_n           : out   std_logic;                                        -- mem_reset_n
            memory_mem_dq                : inout std_logic_vector(7 downto 0)  := (others => 'X'); -- mem_dq
            memory_mem_dqs               : inout std_logic                     := 'X';             -- mem_dqs
            memory_mem_dqs_n             : inout std_logic                     := 'X';             -- mem_dqs_n
            memory_mem_odt               : out   std_logic;                                        -- mem_odt
            memory_mem_dm                : out   std_logic;                                        -- mem_dm
            memory_oct_rzqin             : in    std_logic                     := 'X';             -- oct_rzqin
            hps_io_hps_io_sdio_inst_CMD  : inout std_logic                     := 'X';             -- hps_io_sdio_inst_CMD
            hps_io_hps_io_sdio_inst_D0   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D0
            hps_io_hps_io_sdio_inst_D1   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D1
            hps_io_hps_io_sdio_inst_CLK  : out   std_logic;                                        -- hps_io_sdio_inst_CLK
            hps_io_hps_io_sdio_inst_D2   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D2
            hps_io_hps_io_sdio_inst_D3   : inout std_logic                     := 'X';             -- hps_io_sdio_inst_D3
            hps_io_hps_io_usb1_inst_D0   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D0
            hps_io_hps_io_usb1_inst_D1   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D1
            hps_io_hps_io_usb1_inst_D2   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D2
            hps_io_hps_io_usb1_inst_D3   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D3
            hps_io_hps_io_usb1_inst_D4   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D4
            hps_io_hps_io_usb1_inst_D5   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D5
            hps_io_hps_io_usb1_inst_D6   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D6
            hps_io_hps_io_usb1_inst_D7   : inout std_logic                     := 'X';             -- hps_io_usb1_inst_D7
            hps_io_hps_io_usb1_inst_CLK  : in    std_logic                     := 'X';             -- hps_io_usb1_inst_CLK
            hps_io_hps_io_usb1_inst_STP  : out   std_logic;                                        -- hps_io_usb1_inst_STP
            hps_io_hps_io_usb1_inst_DIR  : in    std_logic                     := 'X';             -- hps_io_usb1_inst_DIR
            hps_io_hps_io_usb1_inst_NXT  : in    std_logic                     := 'X';             -- hps_io_usb1_inst_NXT
            hps_io_hps_io_uart0_inst_RX  : in    std_logic                     := 'X';             -- hps_io_uart0_inst_RX
            hps_io_hps_io_uart0_inst_TX  : out   std_logic;                                        -- hps_io_uart0_inst_TX
            hps_io_hps_io_uart0_inst_CTS : in    std_logic                     := 'X';             -- hps_io_uart0_inst_CTS
            hps_io_hps_io_uart0_inst_RTS : out   std_logic                                         -- hps_io_uart0_inst_RTS
        );
    end component vid_system;
 
begin
 
	u0 : component vid_system
        port map (
            clk_clk                      => CONNECTED_TO_clk_clk,                      --    clk.clk
            reset_reset_n                => CONNECTED_TO_reset_reset_n,                --  reset.reset_n
            memory_mem_a                 => CONNECTED_TO_memory_mem_a,                 -- memory.mem_a
            memory_mem_ba                => CONNECTED_TO_memory_mem_ba,                --       .mem_ba
            memory_mem_ck                => CONNECTED_TO_memory_mem_ck,                --       .mem_ck
            memory_mem_ck_n              => CONNECTED_TO_memory_mem_ck_n,              --       .mem_ck_n
            memory_mem_cke               => CONNECTED_TO_memory_mem_cke,               --       .mem_cke
            memory_mem_cs_n              => CONNECTED_TO_memory_mem_cs_n,              --       .mem_cs_n
            memory_mem_ras_n             => CONNECTED_TO_memory_mem_ras_n,             --       .mem_ras_n
            memory_mem_cas_n             => CONNECTED_TO_memory_mem_cas_n,             --       .mem_cas_n
            memory_mem_we_n              => CONNECTED_TO_memory_mem_we_n,              --       .mem_we_n
            memory_mem_reset_n           => CONNECTED_TO_memory_mem_reset_n,           --       .mem_reset_n
            memory_mem_dq                => CONNECTED_TO_memory_mem_dq,                --       .mem_dq
            memory_mem_dqs               => CONNECTED_TO_memory_mem_dqs,               --       .mem_dqs
            memory_mem_dqs_n             => CONNECTED_TO_memory_mem_dqs_n,             --       .mem_dqs_n
            memory_mem_odt               => CONNECTED_TO_memory_mem_odt,               --       .mem_odt
            memory_mem_dm                => CONNECTED_TO_memory_mem_dm,                --       .mem_dm
            memory_oct_rzqin             => CONNECTED_TO_memory_oct_rzqin,             --       .oct_rzqin
            hps_io_hps_io_sdio_inst_CMD  => CONNECTED_TO_hps_io_hps_io_sdio_inst_CMD,  -- hps_io.hps_io_sdio_inst_CMD
            hps_io_hps_io_sdio_inst_D0   => CONNECTED_TO_hps_io_hps_io_sdio_inst_D0,   --       .hps_io_sdio_inst_D0
            hps_io_hps_io_sdio_inst_D1   => CONNECTED_TO_hps_io_hps_io_sdio_inst_D1,   --       .hps_io_sdio_inst_D1
            hps_io_hps_io_sdio_inst_CLK  => CONNECTED_TO_hps_io_hps_io_sdio_inst_CLK,  --       .hps_io_sdio_inst_CLK
            hps_io_hps_io_sdio_inst_D2   => CONNECTED_TO_hps_io_hps_io_sdio_inst_D2,   --       .hps_io_sdio_inst_D2
            hps_io_hps_io_sdio_inst_D3   => CONNECTED_TO_hps_io_hps_io_sdio_inst_D3,   --       .hps_io_sdio_inst_D3
            hps_io_hps_io_usb1_inst_D0   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D0,   --       .hps_io_usb1_inst_D0
            hps_io_hps_io_usb1_inst_D1   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D1,   --       .hps_io_usb1_inst_D1
            hps_io_hps_io_usb1_inst_D2   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D2,   --       .hps_io_usb1_inst_D2
            hps_io_hps_io_usb1_inst_D3   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D3,   --       .hps_io_usb1_inst_D3
            hps_io_hps_io_usb1_inst_D4   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D4,   --       .hps_io_usb1_inst_D4
            hps_io_hps_io_usb1_inst_D5   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D5,   --       .hps_io_usb1_inst_D5
            hps_io_hps_io_usb1_inst_D6   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D6,   --       .hps_io_usb1_inst_D6
            hps_io_hps_io_usb1_inst_D7   => CONNECTED_TO_hps_io_hps_io_usb1_inst_D7,   --       .hps_io_usb1_inst_D7
            hps_io_hps_io_usb1_inst_CLK  => CONNECTED_TO_hps_io_hps_io_usb1_inst_CLK,  --       .hps_io_usb1_inst_CLK
            hps_io_hps_io_usb1_inst_STP  => CONNECTED_TO_hps_io_hps_io_usb1_inst_STP,  --       .hps_io_usb1_inst_STP
            hps_io_hps_io_usb1_inst_DIR  => CONNECTED_TO_hps_io_hps_io_usb1_inst_DIR,  --       .hps_io_usb1_inst_DIR
            hps_io_hps_io_usb1_inst_NXT  => CONNECTED_TO_hps_io_hps_io_usb1_inst_NXT,  --       .hps_io_usb1_inst_NXT
            hps_io_hps_io_uart0_inst_RX  => CONNECTED_TO_hps_io_hps_io_uart0_inst_RX,  --       .hps_io_uart0_inst_RX
            hps_io_hps_io_uart0_inst_TX  => CONNECTED_TO_hps_io_hps_io_uart0_inst_TX,  --       .hps_io_uart0_inst_TX
            hps_io_hps_io_uart0_inst_CTS => CONNECTED_TO_hps_io_hps_io_uart0_inst_CTS, --       .hps_io_uart0_inst_CTS
            hps_io_hps_io_uart0_inst_RTS => CONNECTED_TO_hps_io_hps_io_uart0_inst_RTS  --       .hps_io_uart0_inst_RTS
        );
 
end architecture arch_vid;