source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_vhdl_declaration.cpp @ 113

Last change on this file since 113 was 113, checked in by rosiere, 15 years ago

1) Add modelsim simulation systemC
2) Modelsim cosimulation systemC / VHDL is not finish !!!! (cf execute_queue and write_unit)
3) Add multi architecture
5) Add template for comparator, multiplier and divider
6) Change Message
Warning) Various test macro have change, many selftest can't compile

  • Property svn:keywords set to Id
File size: 8.2 KB
Line 
1 #ifdef VHDL
2/*
3 * $Id: Write_queue_vhdl_declaration.cpp 113 2009-04-14 18:39:12Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Write_queue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_execute_loop {
15namespace execute_loop {
16namespace multi_write_unit {
17namespace write_unit {
18namespace write_queue {
19
20
21#undef  FUNCTION
22#define FUNCTION "Write_queue::vhdl_declaration"
23  void Write_queue::vhdl_declaration (Vhdl * & vhdl)
24  {
25    log_printf(FUNC,Write_queue,FUNCTION,"Begin");
26
27    vhdl->set_alias  ("sig_QUEUE_INSERT_VAL     ",1," in_WRITE_QUEUE_IN_VAL",std_logic_range(1));
28    vhdl->set_alias  ("sig_QUEUE_INSERT_ACK     ",1,"out_WRITE_QUEUE_IN_ACK",std_logic_range(1));
29    vhdl->set_signal ("sig_QUEUE_INSERT_DATA    ",_param->_size_internal_queue);
30    vhdl->set_signal ("sig_QUEUE_RETIRE_DATA    ",_param->_size_internal_queue);
31    vhdl->set_signal ("sig_QUEUE_RETIRE_VAL     ",1);
32    vhdl->set_signal ("sig_QUEUE_RETIRE_ACK     ",1);
33    for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
34      {
35        vhdl->set_signal ("sig_QUEUE_SLOT_"+toString(i)+"_VAL",1);
36        vhdl->set_signal ("sig_QUEUE_SLOT_"+toString(i)+"_DATA",_param->_size_internal_queue);
37      }
38    for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
39      {
40        vhdl->set_signal ("sig_BYPASS_WRITE_"+toString(i)+"_GPR_VAL",1);
41        vhdl->set_signal ("sig_BYPASS_WRITE_"+toString(i)+"_SPR_VAL",1);
42      }
43
44    vhdl->set_signal ("sig_GPR_WRITE_0_VAL",1);
45    vhdl->set_signal ("sig_SPR_WRITE_0_VAL",1);
46    vhdl->set_signal ("sig_DELETE_QUEUE_FRONT",1);
47    vhdl->set_signal ("sig_WRITE_QUEUE_OUT_VAL",1);
48    vhdl->set_signal ("reg_GPR_WRITE",1);
49    vhdl->set_signal ("reg_SPR_WRITE",1);
50    vhdl->set_signal ("sig_GPR_WRITE",1);
51    vhdl->set_signal ("sig_SPR_WRITE",1);
52    vhdl->set_signal ("reg_UPDATE",1);
53
54    uint32_t min = 0;
55    uint32_t max, size;
56    uint32_t min_ooo, max_ooo = 0;
57    uint32_t pos_write_rd, min_gpr_num_reg, max_gpr_num_reg, min_gpr_data, max_gpr_data;
58    uint32_t pos_write_re, min_spr_num_reg, max_spr_num_reg, min_spr_data, max_spr_data;
59
60    if(_param->_have_port_context_id   )
61      {
62        size = _param->_size_context_id;
63        max = min-1+size;
64        vhdl->set_alias ("sig_WRITE_QUEUE_OUT_CONTEXT_ID           ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
65        min = max+1;
66      }
67    if(_param->_have_port_front_end_id   )
68      {
69        size = _param->_size_front_end_id;
70        max = min-1+size;
71        vhdl->set_alias ("sig_WRITE_QUEUE_OUT_FRONT_END_ID         ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
72        min = max+1;
73      }
74    if(_param->_have_port_ooo_engine_id   )
75      {
76        size = _param->_size_ooo_engine_id;
77        max = min-1+size;
78        vhdl->set_alias ("sig_WRITE_QUEUE_OUT_OOO_ENGINE_ID        ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
79        vhdl->set_alias ("sig_GPR_WRITE_0_OOO_ENGINE_ID        ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
80        vhdl->set_alias ("sig_SPR_WRITE_0_OOO_ENGINE_ID        ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
81        min_ooo = min;
82        max_ooo = max;
83        min = max+1;
84      }
85    if(_param->_have_port_rob_ptr)
86      {
87        size = _param->_size_rob_ptr;
88        max = min-1+size;
89        vhdl->set_alias ("sig_WRITE_QUEUE_OUT_PACKET_ID            ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
90        min = max+1;
91      }
92
93    size = 1;
94    max = min-1+size;
95    vhdl->set_alias ("sig_WRITE_RD                         ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
96    pos_write_rd = max;
97    min = max+1;
98
99    size = _param->_size_general_register;
100    max = min-1+size;
101    vhdl->set_alias ("sig_GPR_WRITE_0_NUM_REG                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
102    min_gpr_num_reg = min;
103    max_gpr_num_reg = max;
104    min = max+1;
105
106    size = _param->_size_general_data;
107    max = min-1+size;
108    vhdl->set_alias ("sig_GPR_WRITE_0_DATA                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
109    vhdl->set_alias ("sig_WRITE_QUEUE_OUT_DATA                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
110    min_gpr_data = min;
111    max_gpr_data = max;
112    min = max+1;
113
114    size = 1;
115    max = min-1+size;
116    vhdl->set_alias ("sig_WRITE_RE                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
117    pos_write_re = max;
118    min = max+1;
119
120    size = _param->_size_special_register;
121    max = min-1+size;
122    vhdl->set_alias ("sig_SPR_WRITE_0_NUM_REG                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
123    min_spr_num_reg = min;
124    max_spr_num_reg = max;
125    min = max+1;
126
127    size = _param->_size_special_data;
128    max = min-1+size;
129    vhdl->set_alias ("sig_SPR_WRITE_0_DATA                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
130    vhdl->set_alias ("sig_WRITE_QUEUE_OUT_FLAGS                 ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
131    min_spr_data = min;
132    max_spr_data = max;
133    min = max+1;
134
135    size = _param->_size_exception;   
136    max = min-1+size;
137    vhdl->set_alias ("sig_WRITE_QUEUE_OUT_EXCEPTION            ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
138    min = max+1;
139
140    size = 1;
141    max = min-1+size;
142    vhdl->set_alias ("sig_WRITE_QUEUE_OUT_NO_SEQUENCE          ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
143    min = max+1;
144
145    size = _param->_size_instruction_address;
146    max = min-1+size;
147    vhdl->set_alias ("sig_WRITE_QUEUE_OUT_ADDRESS              ",std_logic(size),"sig_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
148    min = max+1;
149
150    for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
151      {
152        if(_param->_have_port_ooo_engine_id)
153        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_OOO_ENGINE_ID",std_logic(_param->_size_ooo_engine_id),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,max_ooo,min_ooo));
154        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_GPR_NUM_REG",std_logic(_param->_size_general_register),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,max_gpr_num_reg,min_gpr_num_reg));
155        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_GPR_DATA",std_logic(_param->_size_general_data),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,max_gpr_data,min_gpr_data));
156        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_SPR_NUM_REG",std_logic(_param->_size_special_register),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,max_spr_num_reg,min_spr_num_reg));
157        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_SPR_DATA",std_logic(_param->_size_special_data),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,max_spr_data,min_spr_data));
158
159        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_WRITE_RD",std_logic(1),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,pos_write_rd,pos_write_rd));
160        vhdl->set_alias ("sig_BYPASS_WRITE_"+toString(i)+"_WRITE_RE",std_logic(1),"sig_QUEUE_SLOT_"+toString(i)+"_DATA",std_logic_range(_param->_size_internal_queue,pos_write_re,pos_write_re));
161      }
162
163    log_printf(FUNC,Write_queue,FUNCTION,"End");
164  };
165
166}; // end namespace write_queue
167}; // end namespace write_unit
168}; // end namespace multi_write_unit
169}; // end namespace execute_loop
170}; // end namespace multi_execute_loop
171}; // end namespace core
172
173}; // end namespace behavioural
174}; // end namespace morpheo             
175#endif
Note: See TracBrowser for help on using the repository browser.