Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Member Functions | Public Attributes | Friends | List of all members
libsnark::tinyram_architecture_params Class Reference

#include <tinyram_aux.hpp>

Public Member Functions

 tinyram_architecture_params ()
 
 tinyram_architecture_params (const reg_width_t w, const reg_count_t k)
 
size_t address_size () const
 
size_t value_size () const
 
size_t cpu_state_size () const
 
size_t initial_pc_addr () const
 
libff::bit_vector initial_cpu_state () const
 
memory_contents initial_memory_contents (const tinyram_program &program, const tinyram_input_tape &primary_input) const
 
size_t opcode_width () const
 
size_t reg_arg_width () const
 
size_t instruction_padding_width () const
 
size_t reg_arg_or_imm_width () const
 
size_t dwaddr_len () const
 
size_t subaddr_len () const
 
size_t bytes_in_word () const
 
size_t instr_size () const
 
bool operator== (const tinyram_architecture_params &other) const
 
void print () const
 

Public Attributes

reg_width_t w
 
reg_count_t k
 

Friends

std::ostream & operator<< (std::ostream &out, const tinyram_architecture_params &ap)
 
std::istream & operator>> (std::istream &in, tinyram_architecture_params &ap)
 

Detailed Description

Definition at line 126 of file tinyram_aux.hpp.

Constructor & Destructor Documentation

◆ tinyram_architecture_params() [1/2]

libsnark::tinyram_architecture_params::tinyram_architecture_params ( )
inline

Definition at line 132 of file tinyram_aux.hpp.

132 {};

◆ tinyram_architecture_params() [2/2]

libsnark::tinyram_architecture_params::tinyram_architecture_params ( const reg_width_t  w,
const reg_count_t  k 
)
inline

Definition at line 133 of file tinyram_aux.hpp.

134  : w(w), k(k)
135  {
136  assert(w == 1ul << libff::log2(w));
137  };

Member Function Documentation

◆ address_size()

size_t libsnark::tinyram_architecture_params::address_size ( ) const

Definition at line 143 of file tinyram_aux.cpp.

144 {
145  return dwaddr_len();
146 }
Here is the call graph for this function:

◆ bytes_in_word()

size_t libsnark::tinyram_architecture_params::bytes_in_word ( ) const

Definition at line 232 of file tinyram_aux.cpp.

232 { return w / 8; }

◆ cpu_state_size()

size_t libsnark::tinyram_architecture_params::cpu_state_size ( ) const

Definition at line 150 of file tinyram_aux.cpp.

151 {
152  // + flag + tape1_exhausted
153  return k * w + 2;
154 }
Here is the caller graph for this function:

◆ dwaddr_len()

size_t libsnark::tinyram_architecture_params::dwaddr_len ( ) const

Definition at line 222 of file tinyram_aux.cpp.

223 {
224  return w - (libff::log2(w) - 2);
225 }
Here is the caller graph for this function:

◆ initial_cpu_state()

libff::bit_vector libsnark::tinyram_architecture_params::initial_cpu_state ( ) const

Definition at line 163 of file tinyram_aux.cpp.

164 {
165  libff::bit_vector result(this->cpu_state_size(), false);
166  return result;
167 }
Here is the call graph for this function:

◆ initial_memory_contents()

memory_contents libsnark::tinyram_architecture_params::initial_memory_contents ( const tinyram_program program,
const tinyram_input_tape primary_input 
) const

Definition at line 169 of file tinyram_aux.cpp.

172 {
173  // remember that memory consists of 1ul<<dwaddr_len() double words (!)
174  memory_contents m;
175 
176  for (size_t i = 0; i < program.instructions.size(); ++i) {
177  m[i] = program.instructions[i].as_dword(*this);
178  }
179 
180  const size_t input_addr = 1ul << (dwaddr_len() - 1);
181  // the first word will contain 2^{w-1} + input_size (the
182  // location where the last input word was stored)
183 
184  size_t latest_double_word = (1ull << (w - 1)) + primary_input.size();
185  for (size_t i = 0; i < primary_input.size() / 2 + 1; ++i) {
186  if (2 * i < primary_input.size()) {
187  latest_double_word += (primary_input[2 * i] << w);
188  }
189 
190  m[input_addr + i] = latest_double_word;
191 
192  if (2 * i + 1 < primary_input.size()) {
193  latest_double_word = primary_input[2 * i + 1];
194  }
195  }
196 
197  return m;
198 }
Here is the call graph for this function:

◆ initial_pc_addr()

size_t libsnark::tinyram_architecture_params::initial_pc_addr ( ) const

Definition at line 156 of file tinyram_aux.cpp.

157 {
158  // the initial PC address is memory units for the RAM reduction
159  const size_t initial_pc_addr = generate_tinyram_prelude(*this).size();
160  return initial_pc_addr;
161 }
Here is the call graph for this function:

◆ instr_size()

size_t libsnark::tinyram_architecture_params::instr_size ( ) const

Definition at line 234 of file tinyram_aux.cpp.

234 { return 2 * w; }

◆ instruction_padding_width()

size_t libsnark::tinyram_architecture_params::instruction_padding_width ( ) const

Definition at line 211 of file tinyram_aux.cpp.

212 {
213  return 2 * w -
214  (opcode_width() + 1 + 2 * reg_arg_width() + reg_arg_or_imm_width());
215 }
Here is the call graph for this function:

◆ opcode_width()

size_t libsnark::tinyram_architecture_params::opcode_width ( ) const

Definition at line 200 of file tinyram_aux.cpp.

201 {
202  // assumption: answer is the last
203  return libff::log2(static_cast<size_t>(tinyram_opcode_ANSWER));
204 }
Here is the caller graph for this function:

◆ operator==()

bool libsnark::tinyram_architecture_params::operator== ( const tinyram_architecture_params other) const

Definition at line 236 of file tinyram_aux.cpp.

238 {
239  return (this->w == other.w && this->k == other.k);
240 }

◆ print()

void libsnark::tinyram_architecture_params::print ( ) const

Definition at line 287 of file tinyram_aux.cpp.

288 {
289  printf("* Number of registers (k): %zu\n", k);
290  printf("* Word size (w): %zu\n", w);
291 }

◆ reg_arg_or_imm_width()

size_t libsnark::tinyram_architecture_params::reg_arg_or_imm_width ( ) const

Definition at line 217 of file tinyram_aux.cpp.

218 {
219  return std::max(w, reg_arg_width());
220 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reg_arg_width()

size_t libsnark::tinyram_architecture_params::reg_arg_width ( ) const

Definition at line 206 of file tinyram_aux.cpp.

207 {
208  return libff::log2(k);
209 }
Here is the caller graph for this function:

◆ subaddr_len()

size_t libsnark::tinyram_architecture_params::subaddr_len ( ) const

Definition at line 227 of file tinyram_aux.cpp.

228 {
229  return libff::log2(w) - 2;
230 }

◆ value_size()

size_t libsnark::tinyram_architecture_params::value_size ( ) const

Definition at line 148 of file tinyram_aux.cpp.

148 { return 2 * w; }

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  out,
const tinyram_architecture_params ap 
)
friend

Definition at line 242 of file tinyram_aux.cpp.

244 {
245  out << ap.w << "\n";
246  out << ap.k << "\n";
247  return out;
248 }

◆ operator>>

std::istream& operator>> ( std::istream &  in,
tinyram_architecture_params ap 
)
friend

Definition at line 250 of file tinyram_aux.cpp.

251 {
252  in >> ap.w;
253  libff::consume_newline(in);
254  in >> ap.k;
255  libff::consume_newline(in);
256  return in;
257 }

Member Data Documentation

◆ k

reg_count_t libsnark::tinyram_architecture_params::k

Definition at line 130 of file tinyram_aux.hpp.

◆ w

reg_width_t libsnark::tinyram_architecture_params::w

Definition at line 129 of file tinyram_aux.hpp.


The documentation for this class was generated from the following files:
libsnark::tinyram_opcode_ANSWER
@ tinyram_opcode_ANSWER
Definition: tinyram_aux.hpp:63
libsnark::tinyram_architecture_params::dwaddr_len
size_t dwaddr_len() const
Definition: tinyram_aux.cpp:222
libsnark::generate_tinyram_prelude
std::vector< tinyram_instruction > generate_tinyram_prelude(const tinyram_architecture_params &ap)
Definition: tinyram_aux.cpp:111
libsnark::memory_contents
std::map< size_t, size_t > memory_contents
Definition: memory_interface.hpp:25
libsnark::tinyram_architecture_params::reg_arg_or_imm_width
size_t reg_arg_or_imm_width() const
Definition: tinyram_aux.cpp:217
libsnark::tinyram_architecture_params::w
reg_width_t w
Definition: tinyram_aux.hpp:129
libsnark::tinyram_architecture_params::cpu_state_size
size_t cpu_state_size() const
Definition: tinyram_aux.cpp:150
libsnark::tinyram_architecture_params::k
reg_count_t k
Definition: tinyram_aux.hpp:130
libsnark::tinyram_architecture_params::reg_arg_width
size_t reg_arg_width() const
Definition: tinyram_aux.cpp:206
libsnark::tinyram_architecture_params::initial_pc_addr
size_t initial_pc_addr() const
Definition: tinyram_aux.cpp:156
libsnark::tinyram_architecture_params::opcode_width
size_t opcode_width() const
Definition: tinyram_aux.cpp:200