2016-10-28 4 views
2

J'écris un noyau de bande passante normale en C++ pour FPGA, qui lit quelque chose à partir de la mémoire de l'hôte et l'écrit à différents endroits dans l'hôte. J'utilise des structures, dont l'un des éléments est des adresses pour les tampons d'entrée et de sortie. L'outil de synthèse de haut niveau donne une erreur pour la dernière ligne du code suivant.Erreur: L'expression n'est pas assignable C++ struct

struct addr_struct { 
       ap_uint<64> address; 
       ap_uint<32> size; 
       ap_uint<16> type; 
       ap_uint<16> flags; 
     }; 
    struct addr_struct CA_INPUT; 
    struct addr_struct CA_OUTPUT; 
    din_mem = 0x00; 
    dout_mem = 0x00; 
    ap_uint<32> i; 
    ap_uint<512> temp; 
    ap_uint<512> *din_mem; 
    ap_uint<512> *dout_mem; 
    for(i=0; i<2048; i++){ 
    temp= (ap_uint<512> *)(din_mem + CA_INPUT.address + i*64); 
    (ap_uint<512> *)(dout_mem + CA_OUTPUT.address + i*64) = temp;} 

Répondre

3

Je suppose que vous voulez attribuer au pointeur dans dout_mem, donc il y a déréférencer manque avant (ap_uint<512> *) (note l'étoile au début):

*(ap_uint<512> *)(dout_mem + CA_OUTPUT.address + i*64) = temp; 
+0

note, ceci est une violation stricte aliasing –