CMS 3D CMS Logo

vhdl_functions.cc
Go to the documentation of this file.
2 
3 // "a la vhdl" functions
4 std::vector<int> vhdl_slice(std::vector<int> v, int upper, int lower) {
5  int final_value = lower;
6  if (final_value < 0)
7  final_value = 0;
8 
9  std::vector<int> v1;
10  for (int i = final_value; i <= upper; i++) {
11  v1.push_back(v[i]);
12  }
13  return v1;
14 }
15 
16 int vhdl_unsigned_to_int(std::vector<int> v) {
17  int res = 0;
18 
19  for (size_t i = 0; i < v.size(); i++) {
20  res = res + v[i] * std::pow(2, i);
21  }
22  return res;
23 }
24 
25 int vhdl_signed_to_int(std::vector<int> v) {
26  if (v[v.size() - 1] == 0)
27  return vhdl_unsigned_to_int(v);
28  else
29  return -(std::pow(2, v.size()) - vhdl_unsigned_to_int(v));
30 }
31 
32 void vhdl_int_to_unsigned(int value, std::vector<int> &v) {
33  if (value == 0) {
34  v.push_back(0);
35  } else if (value != 1) {
36  v.push_back(value % 2);
38  } else {
39  v.push_back(1);
40  }
41  return;
42 }
43 
44 void vhdl_int_to_signed(int value, std::vector<int> &v) {
45  if (value < 0) {
46  int val = 1;
47  int size = 1;
48  while (val < -value) {
49  val *= 2;
50  size += 1;
51  }
53  for (int i = v.size(); i < size - 1; i++) {
54  v.push_back(0);
55  }
56  v.push_back(1);
57  } else {
59  v.push_back(0);
60  }
61  return;
62 }
63 
64 void vhdl_resize_unsigned(std::vector<int> &v, int new_size) {
65  for (int i = v.size(); i < new_size; i++) {
66  v.push_back(0);
67  }
68 }
69 
70 void vhdl_resize_signed(std::vector<int> &v, int new_size) {
71  int elem = 0;
72  if (v[v.size() - 1] == 1)
73  elem = 1;
74  for (int i = v.size(); i < new_size; i++) {
75  v.push_back(elem);
76  }
77 }
78 
79 bool vhdl_resize_signed_ok(std::vector<int> v, int new_size) {
80  for (size_t i = v.size() - 1 - 1; i >= v.size() - 1 - (v.size() - new_size); i--) {
81  if (v[i] != v[v.size() - 1])
82  return false;
83  }
84  return true;
85 };
86 
87 bool vhdl_resize_unsigned_ok(std::vector<int> v, int new_size) {
88  for (size_t i = v.size() - 1; i >= v.size() - 1 + 1 - (v.size() - new_size); i--) {
89  if (v[i] != 0)
90  return false;
91  }
92  return true;
93 };
size
Write out results.
void vhdl_resize_signed(std::vector< int > &v, int new_size)
int vhdl_unsigned_to_int(std::vector< int > v)
void vhdl_resize_unsigned(std::vector< int > &v, int new_size)
Definition: Electron.h:6
bool vhdl_resize_unsigned_ok(std::vector< int > v, int new_size)
bool vhdl_resize_signed_ok(std::vector< int > v, int new_size)
Definition: value.py:1
int vhdl_signed_to_int(std::vector< int > v)
void vhdl_int_to_signed(int value, std::vector< int > &v)
void vhdl_int_to_unsigned(int value, std::vector< int > &v)
std::vector< int > vhdl_slice(std::vector< int > v, int upper, int lower)
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29