source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_declaration.cpp @ 116

Last change on this file since 116 was 116, checked in by moulu, 15 years ago

1) added a generic multiplier (systemC isn't working with 8bits)
2) added a partial functionnal unit vhdl.

  • Property svn:keywords set to Id
File size: 6.9 KB
Line 
1#ifdef VHDL
2/*
3 * $Id: Functionnal_unit_vhdl_declaration.cpp 116 2009-04-30 13:51:41Z moulu $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_execute_loop {
15namespace execute_loop {
16namespace multi_execute_unit {
17namespace execute_unit {
18namespace functionnal_unit {
19
20
21#undef  FUNCTION
22#define FUNCTION "Functionnal_unit::vhdl_declaration"
23  void Functionnal_unit::vhdl_declaration (Vhdl * & vhdl)
24  {
25    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
26    vhdl->set_signal ("sig_EXECUTE_IN_ACK",1);
27
28    vhdl->set_signal ("reg_BUSY_IN",1);
29
30    if(_param->_have_port_context_id)
31      vhdl->set_signal ("reg_EXECUTE_IN_CONTEXT_ID", _param->_size_context_id);
32    if(_param->_have_port_front_end_id)
33      vhdl->set_signal ("reg_EXECUTE_IN_FRONT_END_ID", _param->_size_front_end_id);
34    if(_param->_have_port_ooo_engine_id)
35      vhdl->set_signal ("reg_EXECUTE_IN_OOO_ENGINE_ID", _param->_size_ooo_engine_id);
36    if(_param->_have_port_rob_ptr)
37      vhdl->set_signal ("reg_EXECUTE_IN_PACKET_ID",  _param->_size_rob_ptr);
38    vhdl->set_signal ("reg_EXECUTE_IN_OPERATION", _param->_size_operation);
39    vhdl->set_signal ("reg_EXECUTE_IN_TYPE", _param->_size_type);
40    vhdl->set_signal ("reg_EXECUTE_IN_HAS_IMMEDIAT", 1);
41    vhdl->set_signal ("reg_EXECUTE_IN_IMMEDIAT", _param->_size_general_data);
42    vhdl->set_signal ("reg_EXECUTE_IN_DATA_RA", _param->_size_general_data);
43    vhdl->set_signal ("reg_EXECUTE_IN_DATA_RB", _param->_size_general_data);
44    vhdl->set_signal ("reg_EXECUTE_IN_DATA_RC", _param->_size_special_data);
45    vhdl->set_signal ("reg_EXECUTE_IN_WRITE_RD", 1);
46    vhdl->set_signal ("reg_EXECUTE_IN_NUM_REG_RD", _param->_size_general_register);
47    vhdl->set_signal ("reg_EXECUTE_IN_WRITE_RE", 1);
48    vhdl->set_signal ("reg_EXECUTE_IN_NUM_REG_RE", _param->_size_special_register);
49
50    vhdl->set_signal ("sig_B_OPERAND",_param->_size_general_data);
51
52    vhdl->set_signal ("sig_IS_ARITH",1);
53    vhdl->set_signal ("sig_IS_LOGIC",1);
54    vhdl->set_signal ("sig_CIN_ARITH",1);
55    vhdl->set_signal ("sig_ARITH_B_OPERAND",_param->_size_general_data);
56    vhdl->set_signal ("sig_RES_ARITH",_param->_size_general_data+1);
57    vhdl->set_signal ("sig_A_AND_B",_param->_size_general_data);
58    vhdl->set_signal ("sig_A_OR_B",_param->_size_general_data);
59    vhdl->set_signal ("sig_A_XOR_B",_param->_size_general_data);
60    vhdl->set_signal ("sig_RES_LOGIC",_param->_size_general_data);
61    vhdl->set_signal ("sig_RES_ALU",_param->_size_general_data);
62    vhdl->set_signal ("sig_OVR_ALU",1);
63    vhdl->set_signal ("sig_COUT_ALU",1);
64
65    vhdl->set_signal ("sig_RES_MOVE",_param->_size_general_data);
66    vhdl->set_signal ("sig_CMOV",_param->_size_general_data);
67    vhdl->set_signal ("sig_MOVHI",_param->_size_general_data);
68
69    vhdl->set_signal ("sig_RES_BRANCH",_param->_size_general_data);
70    vhdl->set_signal ("sig_ADDR_BRANCH",_param->_size_instruction_address);
71    vhdl->set_signal ("sig_NOSQ_BRANCH",1);
72
73    vhdl->set_signal ("sig_RES_SHIFTER",_param->_size_general_data);
74
75    vhdl->set_signal ("sig_EXT_BYTE_S",_param->_size_general_data);
76    vhdl->set_signal ("sig_EXT_BYTE_Z",_param->_size_general_data);
77    vhdl->set_signal ("sig_EXT_HALF_WORD_S",_param->_size_general_data);
78    vhdl->set_signal ("sig_EXT_HALF_WORD_Z",_param->_size_general_data);
79    vhdl->set_signal ("sig_EXT_WORD_S",_param->_size_general_data);
80    vhdl->set_signal ("sig_EXT_WORD_Z",_param->_size_general_data);
81    vhdl->set_signal ("sig_EXT_S",_param->_size_general_data);
82    vhdl->set_signal ("sig_EXT_Z",_param->_size_general_data);
83    vhdl->set_signal ("sig_RES_EXTEND",_param->_size_general_data);
84
85    vhdl->set_signal ("sig_FF1",log2(_param->_size_general_data)+1);
86    vhdl->set_signal ("sig_FL1",log2(_param->_size_general_data)+1);
87    vhdl->set_signal ("sig_RES_FIND",_param->_size_general_data);
88
89    vhdl->set_signal ("sig_SPR_IS_HERE",1);
90    vhdl->set_signal ("sig_MFSPR",_param->_size_spr);
91    vhdl->set_signal ("sig_MTSPR",_param->_size_spr);
92
93    vhdl->set_signal ("sig_RES_SPECIAL",_param->_size_general_data);
94
95
96    vhdl->set_signal ("sig_EXECUTE_OUT_VAL", 1);
97    vhdl->set_signal ("sig_EXECUTE_OUT_UPDATE", 1);
98
99    vhdl->set_signal ("reg_BUSY_OUT",1);
100
101    if(_param->_have_port_context_id){
102      vhdl->set_signal ("reg_EXECUTE_OUT_CONTEXT_ID", _param->_size_context_id);
103      vhdl->set_signal ("sig_EXECUTE_OUT_CONTEXT_ID", _param->_size_context_id);}
104    if(_param->_have_port_front_end_id){
105      vhdl->set_signal ("reg_EXECUTE_OUT_FRONT_END_ID", _param->_size_front_end_id);
106      vhdl->set_signal ("sig_EXECUTE_OUT_FRONT_END_ID", _param->_size_front_end_id);}
107    if(_param->_have_port_ooo_engine_id){
108      vhdl->set_signal ("reg_EXECUTE_OUT_OOO_ENGINE_ID", _param->_size_ooo_engine_id);
109      vhdl->set_signal ("sig_EXECUTE_OUT_OOO_ENGINE_ID", _param->_size_ooo_engine_id);}
110    if(_param->_have_port_rob_ptr){
111      vhdl->set_signal ("reg_EXECUTE_OUT_PACKET_ID",  _param->_size_rob_ptr);
112      vhdl->set_signal ("sig_EXECUTE_OUT_PACKET_ID",  _param->_size_rob_ptr);}
113    vhdl->set_signal ("reg_EXECUTE_OUT_WRITE_RD", 1);
114    vhdl->set_signal ("sig_EXECUTE_OUT_WRITE_RD", 1);
115    vhdl->set_signal ("reg_EXECUTE_OUT_NUM_REG_RD", _param->_size_general_register);
116    vhdl->set_signal ("sig_EXECUTE_OUT_NUM_REG_RD", _param->_size_general_register);
117    vhdl->set_signal ("reg_EXECUTE_OUT_DATA_RD", _param->_size_general_data);
118    vhdl->set_signal ("sig_EXECUTE_OUT_DATA_RD", _param->_size_general_data);
119    vhdl->set_signal ("reg_EXECUTE_OUT_WRITE_RE", 1);
120    vhdl->set_signal ("sig_EXECUTE_OUT_WRITE_RE", 1);
121    vhdl->set_signal ("reg_EXECUTE_OUT_NUM_REG_RE", _param->_size_special_register);
122    vhdl->set_signal ("sig_EXECUTE_OUT_NUM_REG_RE", _param->_size_special_register);
123    vhdl->set_signal ("reg_EXECUTE_OUT_DATA_RE", _param->_size_special_data);
124    vhdl->set_signal ("sig_EXECUTE_OUT_DATA_RE", _param->_size_special_data);
125    vhdl->set_signal ("reg_EXECUTE_OUT_EXCEPTION", _param->_size_exception);
126    vhdl->set_signal ("sig_EXECUTE_OUT_EXCEPTION", _param->_size_exception);
127    vhdl->set_signal ("reg_EXECUTE_OUT_NO_SEQUENCE", 1);
128    vhdl->set_signal ("sig_EXECUTE_OUT_NO_SEQUENCE", 1);
129    vhdl->set_signal ("reg_EXECUTE_OUT_ADDRESS", _param->_size_instruction_address);
130    vhdl->set_signal ("sig_EXECUTE_OUT_ADDRESS", _param->_size_instruction_address);
131
132    vhdl->set_type    ("Tmac","array ("+toString(_param->_nb_context)+" downto 0) of "+std_logic(_param->_size_spr));
133    vhdl->set_signal  ("reg_MACLO             ", "Tmac");
134    vhdl->set_signal  ("reg_MACHI             ", "Tmac");
135
136    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
137  };
138
139}; // end namespace functionnal_unit
140}; // end namespace execute_unit
141}; // end namespace multi_execute_unit
142}; // end namespace execute_loop
143}; // end namespace multi_execute_loop
144}; // end namespace core
145
146}; // end namespace behavioural
147}; // end namespace morpheo             
148#endif
Note: See TracBrowser for help on using the repository browser.