Difference between revisions of "MC Item"

From NaplesPU Documentation
Jump to: navigation, search
(Created page with "The item interface provides communication between the host and the many-core system. This module (named host_request_manager) fetches commands from the host, organized into it...")
 
Line 11: Line 11:
 
  } host_message_t;
 
  } host_message_t;
  
The target core receives the messages and its boot_manager un-marshalls the message and forwards it on the hi_* interface of the core.
+
The target core receives the messages and its boot_manager un-marshalls the message and forwards it on the hi_* interface of the core:
 +
 
 +
if ( message_from_net.message == BOOT_COMMAND ) begin
 +
    job_valid    <= message_from_net.hi_job_valid;
 +
    job_pc        <= message_from_net.hi_job_pc;
 +
    job_thread_id <= message_from_net.hi_job_thread_id;
 +
    next_state    <= NOTIFY_BOOT;
 +
 
 +
hi_job_valid            <= job_valid;
 +
hi_job_pc                <= job_pc;
 +
hi_job_thread_id        <= job_thread_id;
 +
 
 +
The boot_manager sends an ACK back to the host_request_manager, which forwards this ACK to the host and a new command can be evaluated.

Revision as of 22:50, 31 March 2019

The item interface provides communication between the host and the many-core system. This module (named host_request_manager) fetches commands from the host, organized into items (as described in Item interface), although it provides only two functionalities:

  • BOOT_COMMAND: sets a PC of a given thread in a given tile. After the command, the FSM waits for the tile ID where the core is located, then the thread ID, and finally the PC value to set. When those values are fetched the item interface sends a message on the service virtual channel (number 4), in a host_message_t format:
typedef struct packed {                       
   address_t hi_job_pc;                       
   logic hi_job_valid;                        
   thread_id_t hi_job_thread_id;              
   logic [`THREAD_NUMB - 1 : 0] hi_thread_en; 
   host_message_type_t message;               
} host_message_t;

The target core receives the messages and its boot_manager un-marshalls the message and forwards it on the hi_* interface of the core:

if ( message_from_net.message == BOOT_COMMAND ) begin
   job_valid     <= message_from_net.hi_job_valid;
   job_pc        <= message_from_net.hi_job_pc;
   job_thread_id <= message_from_net.hi_job_thread_id;
   next_state    <= NOTIFY_BOOT;
hi_job_valid             <= job_valid;
hi_job_pc                <= job_pc;
hi_job_thread_id         <= job_thread_id;

The boot_manager sends an ACK back to the host_request_manager, which forwards this ACK to the host and a new command can be evaluated.