From 9035cd4946cd0931e44d3c586f333c51f925fd26 Mon Sep 17 00:00:00 2001 From: David Banas Date: Sat, 26 Nov 2016 16:16:38 -0800 Subject: [PATCH] For DesignCon 2017 - rc1. Put 'doc/' back, because I mention it in my paper and presentation and I don't want to require that users run Doxygen. Added 'doc/*' to .gitignore; we'll see if that works. --- .gitignore | 3 + ToDo | 6 + branch_readme | 8 - doc/html/_r_e_a_d_m_e_8md.html | 101 ++ doc/html/_r_e_a_d_m_e_8md_source.html | 101 ++ doc/html/ami__rx_8cpp.html | 165 ++ doc/html/ami__rx_8cpp_source.html | 236 +++ doc/html/ami__rx_8h.html | 129 ++ doc/html/ami__rx_8h_source.html | 158 ++ doc/html/ami__tx_8cpp.html | 117 ++ doc/html/ami__tx_8cpp_source.html | 139 ++ doc/html/ami__tx_8h.html | 128 ++ doc/html/ami__tx_8h_source.html | 141 ++ doc/html/amimodel_8cpp.html | 163 ++ doc/html/amimodel_8cpp_source.html | 293 ++++ doc/html/amimodel_8h.html | 232 +++ doc/html/amimodel_8h_source.html | 281 ++++ doc/html/annotated.html | 119 ++ doc/html/class_a_m_i_model-members.html | 132 ++ doc/html/class_a_m_i_model.html | 1043 ++++++++++++ doc/html/class_ami_rx-members.html | 144 ++ doc/html/class_ami_rx.html | 645 ++++++++ doc/html/class_ami_tx-members.html | 137 ++ doc/html/class_ami_tx.html | 433 +++++ doc/html/class_d_f_e-members.html | 133 ++ doc/html/class_d_f_e.html | 893 ++++++++++ doc/html/class_digital_filter-members.html | 111 ++ doc/html/class_digital_filter.html | 331 ++++ doc/html/class_f_i_r_filter-members.html | 114 ++ doc/html/class_f_i_r_filter.html | 411 +++++ doc/html/class_my_rx-members.html | 146 ++ doc/html/class_my_rx.html | 356 ++++ doc/html/class_my_tx-members.html | 139 ++ doc/html/class_my_tx.html | 338 ++++ doc/html/classes.html | 121 ++ doc/html/dfe_8cpp.html | 164 ++ doc/html/dfe_8cpp_source.html | 236 +++ doc/html/dfe_8h.html | 128 ++ doc/html/dfe_8h_source.html | 170 ++ doc/html/digital__filter_8cpp.html | 117 ++ doc/html/digital__filter_8cpp_source.html | 164 ++ doc/html/digital__filter_8h.html | 126 ++ doc/html/digital__filter_8h_source.html | 131 ++ .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 125 ++ .../dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html | 113 ++ .../dir_d44c64559bbebec7f509842c48db8b23.html | 122 ++ doc/html/doxygen.css | 1449 +++++++++++++++++ doc/html/dynsections.js | 104 ++ doc/html/example__rx_8cpp.html | 251 +++ doc/html/example__rx_8cpp_source.html | 294 ++++ doc/html/example__rx_8py.html | 125 ++ doc/html/example__rx_8py_source.html | 302 ++++ doc/html/example__tx_8cpp.html | 187 +++ doc/html/example__tx_8cpp_source.html | 198 +++ doc/html/example__tx_8py.html | 125 ++ doc/html/example__tx_8py_source.html | 220 +++ doc/html/files.html | 126 ++ doc/html/fir__filter_8cpp.html | 118 ++ doc/html/fir__filter_8cpp_source.html | 160 ++ doc/html/fir__filter_8h.html | 126 ++ doc/html/fir__filter_8h_source.html | 137 ++ doc/html/functions.html | 493 ++++++ doc/html/functions_func.html | 279 ++++ doc/html/functions_vars.html | 374 +++++ doc/html/globals.html | 174 ++ doc/html/globals_defs.html | 139 ++ doc/html/globals_func.html | 122 ++ doc/html/globals_type.html | 109 ++ doc/html/globals_vars.html | 122 ++ doc/html/hierarchy.html | 119 ++ doc/html/ibisami__api_8cpp.html | 300 ++++ doc/html/ibisami__api_8cpp_source.html | 228 +++ doc/html/index.html | 110 ++ doc/html/jquery.js | 68 + doc/html/main_8dox.html | 99 ++ doc/html/md__r_e_a_d_m_e.html | 94 ++ doc/html/namespaceexample__rx.html | 191 +++ doc/html/namespaceexample__tx.html | 191 +++ doc/html/namespaceibisami.html | 144 ++ doc/html/namespacemembers.html | 132 ++ doc/html/namespacemembers_type.html | 107 ++ doc/html/namespacemembers_vars.html | 129 ++ doc/html/namespaces.html | 107 ++ doc/html/namespacetest.html | 154 ++ doc/html/pages.html | 98 ++ doc/html/search/all_0.html | 26 + doc/html/search/all_0.js | 20 + doc/html/search/all_1.html | 26 + doc/html/search/all_1.js | 7 + doc/html/search/all_10.html | 26 + doc/html/search/all_10.js | 16 + doc/html/search/all_11.html | 26 + doc/html/search/all_11.js | 9 + doc/html/search/all_12.html | 26 + doc/html/search/all_12.js | 5 + doc/html/search/all_13.html | 26 + doc/html/search/all_13.js | 4 + doc/html/search/all_14.html | 26 + doc/html/search/all_14.js | 4 + doc/html/search/all_15.html | 26 + doc/html/search/all_15.js | 11 + doc/html/search/all_2.html | 26 + doc/html/search/all_2.js | 12 + doc/html/search/all_3.html | 26 + doc/html/search/all_3.js | 23 + doc/html/search/all_4.html | 26 + doc/html/search/all_4.js | 12 + doc/html/search/all_5.html | 26 + doc/html/search/all_5.js | 7 + doc/html/search/all_6.html | 26 + doc/html/search/all_6.js | 13 + doc/html/search/all_7.html | 26 + doc/html/search/all_7.js | 4 + doc/html/search/all_8.html | 26 + doc/html/search/all_8.js | 12 + doc/html/search/all_9.html | 26 + doc/html/search/all_9.js | 5 + doc/html/search/all_a.html | 26 + doc/html/search/all_a.js | 7 + doc/html/search/all_b.html | 26 + doc/html/search/all_b.js | 15 + doc/html/search/all_c.html | 26 + doc/html/search/all_c.js | 12 + doc/html/search/all_d.html | 26 + doc/html/search/all_d.js | 5 + doc/html/search/all_e.html | 26 + doc/html/search/all_e.js | 15 + doc/html/search/all_f.html | 26 + doc/html/search/all_f.js | 5 + doc/html/search/classes_0.html | 26 + doc/html/search/classes_0.js | 8 + doc/html/search/classes_1.html | 26 + doc/html/search/classes_1.js | 5 + doc/html/search/classes_2.html | 26 + doc/html/search/classes_2.js | 4 + doc/html/search/classes_3.html | 26 + doc/html/search/classes_3.js | 5 + doc/html/search/classes_4.html | 26 + doc/html/search/classes_4.js | 4 + doc/html/search/classes_5.html | 26 + doc/html/search/classes_5.js | 4 + doc/html/search/classes_6.html | 26 + doc/html/search/classes_6.js | 4 + doc/html/search/defines_0.html | 26 + doc/html/search/defines_0.js | 5 + doc/html/search/defines_1.html | 26 + doc/html/search/defines_1.js | 6 + doc/html/search/defines_2.html | 26 + doc/html/search/defines_2.js | 4 + doc/html/search/defines_3.html | 26 + doc/html/search/defines_3.js | 4 + doc/html/search/defines_4.html | 26 + doc/html/search/defines_4.js | 5 + doc/html/search/defines_5.html | 26 + doc/html/search/defines_5.js | 4 + doc/html/search/defines_6.html | 26 + doc/html/search/defines_6.js | 4 + doc/html/search/files_0.html | 26 + doc/html/search/files_0.js | 9 + doc/html/search/files_1.html | 26 + doc/html/search/files_1.js | 7 + doc/html/search/files_2.html | 26 + doc/html/search/files_2.js | 7 + doc/html/search/files_3.html | 26 + doc/html/search/files_3.js | 5 + doc/html/search/files_4.html | 26 + doc/html/search/files_4.js | 4 + doc/html/search/files_5.html | 26 + doc/html/search/files_5.js | 4 + doc/html/search/files_6.html | 26 + doc/html/search/files_6.js | 4 + doc/html/search/files_7.html | 26 + doc/html/search/files_7.js | 4 + doc/html/search/files_8.html | 26 + doc/html/search/files_8.js | 5 + doc/html/search/functions_0.html | 26 + doc/html/search/functions_0.js | 7 + doc/html/search/functions_1.html | 26 + doc/html/search/functions_1.js | 4 + doc/html/search/functions_2.html | 26 + doc/html/search/functions_2.js | 5 + doc/html/search/functions_3.html | 26 + doc/html/search/functions_3.js | 4 + doc/html/search/functions_4.html | 26 + doc/html/search/functions_4.js | 10 + doc/html/search/functions_5.html | 26 + doc/html/search/functions_5.js | 5 + doc/html/search/functions_6.html | 26 + doc/html/search/functions_6.js | 4 + doc/html/search/functions_7.html | 26 + doc/html/search/functions_7.js | 6 + doc/html/search/functions_8.html | 26 + doc/html/search/functions_8.js | 4 + doc/html/search/functions_9.html | 26 + doc/html/search/functions_9.js | 7 + doc/html/search/functions_a.html | 26 + doc/html/search/functions_a.js | 9 + doc/html/search/functions_b.html | 26 + doc/html/search/functions_b.js | 11 + doc/html/search/namespaces_0.html | 26 + doc/html/search/namespaces_0.js | 5 + doc/html/search/namespaces_1.html | 26 + doc/html/search/namespaces_1.js | 4 + doc/html/search/namespaces_2.html | 26 + doc/html/search/namespaces_2.js | 4 + doc/html/search/nomatches.html | 12 + doc/html/search/pages_0.html | 26 + doc/html/search/pages_0.js | 4 + doc/html/search/pages_1.html | 26 + doc/html/search/pages_1.js | 4 + doc/html/search/search.css | 271 +++ doc/html/search/search.js | 791 +++++++++ doc/html/search/searchdata.js | 39 + doc/html/search/typedefs_0.html | 26 + doc/html/search/typedefs_0.js | 5 + doc/html/search/variables_0.html | 26 + doc/html/search/variables_0.js | 6 + doc/html/search/variables_1.html | 26 + doc/html/search/variables_1.js | 6 + doc/html/search/variables_10.html | 26 + doc/html/search/variables_10.js | 6 + doc/html/search/variables_11.html | 26 + doc/html/search/variables_11.js | 4 + doc/html/search/variables_2.html | 26 + doc/html/search/variables_2.js | 10 + doc/html/search/variables_3.html | 26 + doc/html/search/variables_3.js | 13 + doc/html/search/variables_4.html | 26 + doc/html/search/variables_4.js | 5 + doc/html/search/variables_5.html | 26 + doc/html/search/variables_5.js | 4 + doc/html/search/variables_6.html | 26 + doc/html/search/variables_6.js | 6 + doc/html/search/variables_7.html | 26 + doc/html/search/variables_7.js | 4 + doc/html/search/variables_8.html | 26 + doc/html/search/variables_8.js | 7 + doc/html/search/variables_9.html | 26 + doc/html/search/variables_9.js | 5 + doc/html/search/variables_a.html | 26 + doc/html/search/variables_a.js | 6 + doc/html/search/variables_b.html | 26 + doc/html/search/variables_b.js | 11 + doc/html/search/variables_c.html | 26 + doc/html/search/variables_c.js | 11 + doc/html/search/variables_d.html | 26 + doc/html/search/variables_d.js | 4 + doc/html/search/variables_e.html | 26 + doc/html/search/variables_e.js | 6 + doc/html/search/variables_f.html | 26 + doc/html/search/variables_f.js | 10 + doc/html/struct_ami_pointers-members.html | 107 ++ doc/html/struct_ami_pointers.html | 167 ++ doc/html/structibisami_1_1_a_m_i_grammar.html | 116 ++ doc/html/structibisami_1_1_node-members.html | 110 ++ doc/html/structibisami_1_1_node.html | 189 +++ .../structibisami_1_1_param_tree-members.html | 110 ++ doc/html/structibisami_1_1_param_tree.html | 171 ++ doc/html/structibisami_1_1_value-members.html | 110 ++ doc/html/structibisami_1_1_value.html | 189 +++ doc/html/tabs.css | 60 + doc/html/test_8py.html | 123 ++ doc/html/test_8py_source.html | 122 ++ doc/html/util_8cpp.html | 173 ++ doc/html/util_8cpp_source.html | 109 ++ doc/html/util_8h.html | 199 +++ doc/html/util_8h_source.html | 117 ++ example/test_runs/tx/posttap1.run | 8 +- example/tests/freq_resp.em | 114 +- example/tests/step.em | 120 +- 270 files changed, 23820 insertions(+), 125 deletions(-) delete mode 100644 branch_readme create mode 100644 doc/html/_r_e_a_d_m_e_8md.html create mode 100644 doc/html/_r_e_a_d_m_e_8md_source.html create mode 100644 doc/html/ami__rx_8cpp.html create mode 100644 doc/html/ami__rx_8cpp_source.html create mode 100644 doc/html/ami__rx_8h.html create mode 100644 doc/html/ami__rx_8h_source.html create mode 100644 doc/html/ami__tx_8cpp.html create mode 100644 doc/html/ami__tx_8cpp_source.html create mode 100644 doc/html/ami__tx_8h.html create mode 100644 doc/html/ami__tx_8h_source.html create mode 100644 doc/html/amimodel_8cpp.html create mode 100644 doc/html/amimodel_8cpp_source.html create mode 100644 doc/html/amimodel_8h.html create mode 100644 doc/html/amimodel_8h_source.html create mode 100644 doc/html/annotated.html create mode 100644 doc/html/class_a_m_i_model-members.html create mode 100644 doc/html/class_a_m_i_model.html create mode 100644 doc/html/class_ami_rx-members.html create mode 100644 doc/html/class_ami_rx.html create mode 100644 doc/html/class_ami_tx-members.html create mode 100644 doc/html/class_ami_tx.html create mode 100644 doc/html/class_d_f_e-members.html create mode 100644 doc/html/class_d_f_e.html create mode 100644 doc/html/class_digital_filter-members.html create mode 100644 doc/html/class_digital_filter.html create mode 100644 doc/html/class_f_i_r_filter-members.html create mode 100644 doc/html/class_f_i_r_filter.html create mode 100644 doc/html/class_my_rx-members.html create mode 100644 doc/html/class_my_rx.html create mode 100644 doc/html/class_my_tx-members.html create mode 100644 doc/html/class_my_tx.html create mode 100644 doc/html/classes.html create mode 100644 doc/html/dfe_8cpp.html create mode 100644 doc/html/dfe_8cpp_source.html create mode 100644 doc/html/dfe_8h.html create mode 100644 doc/html/dfe_8h_source.html create mode 100644 doc/html/digital__filter_8cpp.html create mode 100644 doc/html/digital__filter_8cpp_source.html create mode 100644 doc/html/digital__filter_8h.html create mode 100644 doc/html/digital__filter_8h_source.html create mode 100644 doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html create mode 100644 doc/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html create mode 100644 doc/html/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 doc/html/doxygen.css create mode 100644 doc/html/dynsections.js create mode 100644 doc/html/example__rx_8cpp.html create mode 100644 doc/html/example__rx_8cpp_source.html create mode 100644 doc/html/example__rx_8py.html create mode 100644 doc/html/example__rx_8py_source.html create mode 100644 doc/html/example__tx_8cpp.html create mode 100644 doc/html/example__tx_8cpp_source.html create mode 100644 doc/html/example__tx_8py.html create mode 100644 doc/html/example__tx_8py_source.html create mode 100644 doc/html/files.html create mode 100644 doc/html/fir__filter_8cpp.html create mode 100644 doc/html/fir__filter_8cpp_source.html create mode 100644 doc/html/fir__filter_8h.html create mode 100644 doc/html/fir__filter_8h_source.html create mode 100644 doc/html/functions.html create mode 100644 doc/html/functions_func.html create mode 100644 doc/html/functions_vars.html create mode 100644 doc/html/globals.html create mode 100644 doc/html/globals_defs.html create mode 100644 doc/html/globals_func.html create mode 100644 doc/html/globals_type.html create mode 100644 doc/html/globals_vars.html create mode 100644 doc/html/hierarchy.html create mode 100644 doc/html/ibisami__api_8cpp.html create mode 100644 doc/html/ibisami__api_8cpp_source.html create mode 100644 doc/html/index.html create mode 100644 doc/html/jquery.js create mode 100644 doc/html/main_8dox.html create mode 100644 doc/html/md__r_e_a_d_m_e.html create mode 100644 doc/html/namespaceexample__rx.html create mode 100644 doc/html/namespaceexample__tx.html create mode 100644 doc/html/namespaceibisami.html create mode 100644 doc/html/namespacemembers.html create mode 100644 doc/html/namespacemembers_type.html create mode 100644 doc/html/namespacemembers_vars.html create mode 100644 doc/html/namespaces.html create mode 100644 doc/html/namespacetest.html create mode 100644 doc/html/pages.html create mode 100644 doc/html/search/all_0.html create mode 100644 doc/html/search/all_0.js create mode 100644 doc/html/search/all_1.html create mode 100644 doc/html/search/all_1.js create mode 100644 doc/html/search/all_10.html create mode 100644 doc/html/search/all_10.js create mode 100644 doc/html/search/all_11.html create mode 100644 doc/html/search/all_11.js create mode 100644 doc/html/search/all_12.html create mode 100644 doc/html/search/all_12.js create mode 100644 doc/html/search/all_13.html create mode 100644 doc/html/search/all_13.js create mode 100644 doc/html/search/all_14.html create mode 100644 doc/html/search/all_14.js create mode 100644 doc/html/search/all_15.html create mode 100644 doc/html/search/all_15.js create mode 100644 doc/html/search/all_2.html create mode 100644 doc/html/search/all_2.js create mode 100644 doc/html/search/all_3.html create mode 100644 doc/html/search/all_3.js create mode 100644 doc/html/search/all_4.html create mode 100644 doc/html/search/all_4.js create mode 100644 doc/html/search/all_5.html create mode 100644 doc/html/search/all_5.js create mode 100644 doc/html/search/all_6.html create mode 100644 doc/html/search/all_6.js create mode 100644 doc/html/search/all_7.html create mode 100644 doc/html/search/all_7.js create mode 100644 doc/html/search/all_8.html create mode 100644 doc/html/search/all_8.js create mode 100644 doc/html/search/all_9.html create mode 100644 doc/html/search/all_9.js create mode 100644 doc/html/search/all_a.html create mode 100644 doc/html/search/all_a.js create mode 100644 doc/html/search/all_b.html create mode 100644 doc/html/search/all_b.js create mode 100644 doc/html/search/all_c.html create mode 100644 doc/html/search/all_c.js create mode 100644 doc/html/search/all_d.html create mode 100644 doc/html/search/all_d.js create mode 100644 doc/html/search/all_e.html create mode 100644 doc/html/search/all_e.js create mode 100644 doc/html/search/all_f.html create mode 100644 doc/html/search/all_f.js create mode 100644 doc/html/search/classes_0.html create mode 100644 doc/html/search/classes_0.js create mode 100644 doc/html/search/classes_1.html create mode 100644 doc/html/search/classes_1.js create mode 100644 doc/html/search/classes_2.html create mode 100644 doc/html/search/classes_2.js create mode 100644 doc/html/search/classes_3.html create mode 100644 doc/html/search/classes_3.js create mode 100644 doc/html/search/classes_4.html create mode 100644 doc/html/search/classes_4.js create mode 100644 doc/html/search/classes_5.html create mode 100644 doc/html/search/classes_5.js create mode 100644 doc/html/search/classes_6.html create mode 100644 doc/html/search/classes_6.js create mode 100644 doc/html/search/defines_0.html create mode 100644 doc/html/search/defines_0.js create mode 100644 doc/html/search/defines_1.html create mode 100644 doc/html/search/defines_1.js create mode 100644 doc/html/search/defines_2.html create mode 100644 doc/html/search/defines_2.js create mode 100644 doc/html/search/defines_3.html create mode 100644 doc/html/search/defines_3.js create mode 100644 doc/html/search/defines_4.html create mode 100644 doc/html/search/defines_4.js create mode 100644 doc/html/search/defines_5.html create mode 100644 doc/html/search/defines_5.js create mode 100644 doc/html/search/defines_6.html create mode 100644 doc/html/search/defines_6.js create mode 100644 doc/html/search/files_0.html create mode 100644 doc/html/search/files_0.js create mode 100644 doc/html/search/files_1.html create mode 100644 doc/html/search/files_1.js create mode 100644 doc/html/search/files_2.html create mode 100644 doc/html/search/files_2.js create mode 100644 doc/html/search/files_3.html create mode 100644 doc/html/search/files_3.js create mode 100644 doc/html/search/files_4.html create mode 100644 doc/html/search/files_4.js create mode 100644 doc/html/search/files_5.html create mode 100644 doc/html/search/files_5.js create mode 100644 doc/html/search/files_6.html create mode 100644 doc/html/search/files_6.js create mode 100644 doc/html/search/files_7.html create mode 100644 doc/html/search/files_7.js create mode 100644 doc/html/search/files_8.html create mode 100644 doc/html/search/files_8.js create mode 100644 doc/html/search/functions_0.html create mode 100644 doc/html/search/functions_0.js create mode 100644 doc/html/search/functions_1.html create mode 100644 doc/html/search/functions_1.js create mode 100644 doc/html/search/functions_2.html create mode 100644 doc/html/search/functions_2.js create mode 100644 doc/html/search/functions_3.html create mode 100644 doc/html/search/functions_3.js create mode 100644 doc/html/search/functions_4.html create mode 100644 doc/html/search/functions_4.js create mode 100644 doc/html/search/functions_5.html create mode 100644 doc/html/search/functions_5.js create mode 100644 doc/html/search/functions_6.html create mode 100644 doc/html/search/functions_6.js create mode 100644 doc/html/search/functions_7.html create mode 100644 doc/html/search/functions_7.js create mode 100644 doc/html/search/functions_8.html create mode 100644 doc/html/search/functions_8.js create mode 100644 doc/html/search/functions_9.html create mode 100644 doc/html/search/functions_9.js create mode 100644 doc/html/search/functions_a.html create mode 100644 doc/html/search/functions_a.js create mode 100644 doc/html/search/functions_b.html create mode 100644 doc/html/search/functions_b.js create mode 100644 doc/html/search/namespaces_0.html create mode 100644 doc/html/search/namespaces_0.js create mode 100644 doc/html/search/namespaces_1.html create mode 100644 doc/html/search/namespaces_1.js create mode 100644 doc/html/search/namespaces_2.html create mode 100644 doc/html/search/namespaces_2.js create mode 100644 doc/html/search/nomatches.html create mode 100644 doc/html/search/pages_0.html create mode 100644 doc/html/search/pages_0.js create mode 100644 doc/html/search/pages_1.html create mode 100644 doc/html/search/pages_1.js create mode 100644 doc/html/search/search.css create mode 100644 doc/html/search/search.js create mode 100644 doc/html/search/searchdata.js create mode 100644 doc/html/search/typedefs_0.html create mode 100644 doc/html/search/typedefs_0.js create mode 100644 doc/html/search/variables_0.html create mode 100644 doc/html/search/variables_0.js create mode 100644 doc/html/search/variables_1.html create mode 100644 doc/html/search/variables_1.js create mode 100644 doc/html/search/variables_10.html create mode 100644 doc/html/search/variables_10.js create mode 100644 doc/html/search/variables_11.html create mode 100644 doc/html/search/variables_11.js create mode 100644 doc/html/search/variables_2.html create mode 100644 doc/html/search/variables_2.js create mode 100644 doc/html/search/variables_3.html create mode 100644 doc/html/search/variables_3.js create mode 100644 doc/html/search/variables_4.html create mode 100644 doc/html/search/variables_4.js create mode 100644 doc/html/search/variables_5.html create mode 100644 doc/html/search/variables_5.js create mode 100644 doc/html/search/variables_6.html create mode 100644 doc/html/search/variables_6.js create mode 100644 doc/html/search/variables_7.html create mode 100644 doc/html/search/variables_7.js create mode 100644 doc/html/search/variables_8.html create mode 100644 doc/html/search/variables_8.js create mode 100644 doc/html/search/variables_9.html create mode 100644 doc/html/search/variables_9.js create mode 100644 doc/html/search/variables_a.html create mode 100644 doc/html/search/variables_a.js create mode 100644 doc/html/search/variables_b.html create mode 100644 doc/html/search/variables_b.js create mode 100644 doc/html/search/variables_c.html create mode 100644 doc/html/search/variables_c.js create mode 100644 doc/html/search/variables_d.html create mode 100644 doc/html/search/variables_d.js create mode 100644 doc/html/search/variables_e.html create mode 100644 doc/html/search/variables_e.js create mode 100644 doc/html/search/variables_f.html create mode 100644 doc/html/search/variables_f.js create mode 100644 doc/html/struct_ami_pointers-members.html create mode 100644 doc/html/struct_ami_pointers.html create mode 100644 doc/html/structibisami_1_1_a_m_i_grammar.html create mode 100644 doc/html/structibisami_1_1_node-members.html create mode 100644 doc/html/structibisami_1_1_node.html create mode 100644 doc/html/structibisami_1_1_param_tree-members.html create mode 100644 doc/html/structibisami_1_1_param_tree.html create mode 100644 doc/html/structibisami_1_1_value-members.html create mode 100644 doc/html/structibisami_1_1_value.html create mode 100644 doc/html/tabs.css create mode 100644 doc/html/test_8py.html create mode 100644 doc/html/test_8py_source.html create mode 100644 doc/html/util_8cpp.html create mode 100644 doc/html/util_8cpp_source.html create mode 100644 doc/html/util_8h.html create mode 100644 doc/html/util_8h_source.html diff --git a/.gitignore b/.gitignore index d35aad3..3f5a156 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,6 @@ # Testing results test_results.xml +# Documentation +doc/* + diff --git a/ToDo b/ToDo index 8b13789..f692db1 100644 --- a/ToDo +++ b/ToDo @@ -1 +1,7 @@ +- Create a Python model configurator, which: + 1. Automatically creates a *.AMI file, which is consistent with the model. + 2. Allow for GUI setting of model parameterization: + a. Tx tap weights + b. Rx CTLE options + b. Rx DFE options diff --git a/branch_readme b/branch_readme deleted file mode 100644 index 3921e0f..0000000 --- a/branch_readme +++ /dev/null @@ -1,8 +0,0 @@ -Branch 'configurator' goals: - -1. Automatically create a *.AMI file, which is consistent with the model. -2. Allow for GUI setting of model parameterization: - a. Tx tap weights - b. Rx CTLE options - b. Rx DFE options - diff --git a/doc/html/_r_e_a_d_m_e_8md.html b/doc/html/_r_e_a_d_m_e_8md.html new file mode 100644 index 0000000..f566f07 --- /dev/null +++ b/doc/html/_r_e_a_d_m_e_8md.html @@ -0,0 +1,101 @@ + + + + + + +ibisami: README.md File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
README.md File Reference
+
+
+ +

Go to the source code of this file.

+
+ + + + diff --git a/doc/html/_r_e_a_d_m_e_8md_source.html b/doc/html/_r_e_a_d_m_e_8md_source.html new file mode 100644 index 0000000..96e27e2 --- /dev/null +++ b/doc/html/_r_e_a_d_m_e_8md_source.html @@ -0,0 +1,101 @@ + + + + + + +ibisami: README.md Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
README.md
+
+
+Go to the documentation of this file.
1 # ibisami
+
2 A public domain IBIS-AMI model creation infrastructure for all to share.
+
+ + + + diff --git a/doc/html/ami__rx_8cpp.html b/doc/html/ami__rx_8cpp.html new file mode 100644 index 0000000..b3aa057 --- /dev/null +++ b/doc/html/ami__rx_8cpp.html @@ -0,0 +1,165 @@ + + + + + + +ibisami: src/ami_rx.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ami_rx.cpp File Reference
+
+
+ +

Implementation of AmiRx class. +More...

+
#include <string>
+#include <vector>
+#include <algorithm>
+#include <memory>
+#include "include/ami_rx.h"
+#include "include/util.h"
+
+

Go to the source code of this file.

+ + + + +

+Macros

#define MAX_INIT_ADAPT_BITS   10000
 
+ + + +

+Variables

std::ostringstream debug_stream
 
+

Detailed Description

+

Implementation of AmiRx class.

+

Original author: David Banas
+ Original date: May 20, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file ami_rx.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define MAX_INIT_ADAPT_BITS   10000
+
+ +

Definition at line 17 of file ami_rx.cpp.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
std::ostringstream debug_stream
+
+ +

Definition at line 17 of file amimodel.cpp.

+ +
+
+
+ + + + diff --git a/doc/html/ami__rx_8cpp_source.html b/doc/html/ami__rx_8cpp_source.html new file mode 100644 index 0000000..41db2b4 --- /dev/null +++ b/doc/html/ami__rx_8cpp_source.html @@ -0,0 +1,236 @@ + + + + + + +ibisami: src/ami_rx.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ami_rx.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <string>
+
11 #include <vector>
+
12 #include <algorithm>
+
13 #include <memory>
+
14 #include "include/ami_rx.h"
+
15 #include "include/util.h"
+
16 
+
17 #define MAX_INIT_ADAPT_BITS 10000
+
18 
+
19 extern std::ostringstream debug_stream;
+
20 
+
22 void AmiRx::init(double *impulse_matrix, const long number_of_rows,
+
23  const long aggressors, const double sample_interval,
+
24  const double bit_time, const std::string& AMI_parameters_in) {
+
25  // Let our base class do its thing.
+
26  inherited::init(impulse_matrix, number_of_rows, aggressors, sample_interval, bit_time, AMI_parameters_in);
+
27 
+
28  // Initialize our own state.
+
29  delete ctle_;
+
30  delete dfe_;
+
31  ctle_ = nullptr;
+
32  dfe_ = nullptr;
+ + +
35  sig_tap_ = 0;
+
36  init_adapt_tap_ = 0;
+
37 
+
38  // Grab debugging related parameters and configure things accordingly.
+
39  std::vector<std::string> node_names; node_names.clear();
+
40  node_names.push_back("debug");
+
41  node_names.push_back("enable");
+
42  int dbg_enable = get_param_int(node_names, 0);
+
43  node_names.pop_back();
+
44  node_names.push_back("sig_tap");
+
45  int sig_tap = get_param_int(node_names, 0);
+
46  node_names.pop_back();
+
47  node_names.push_back("init_adapt_tap");
+
48  int init_adapt_tap = get_param_int(node_names, 0);
+
49  node_names.pop_back();
+
50  node_names.pop_back();
+
51  if (dbg_enable) {
+
52  sig_tap_ = sig_tap;
+
53  init_adapt_tap_ = init_adapt_tap;
+
54  }
+
55  std::ostringstream msg_stream;
+
56  msg_stream << "Debugging parameters:\n";
+
57  msg_stream << "\tenable: " << dbg_enable << "\n";
+
58  msg_stream << "\tsig_tap: " << sig_tap << "\n";
+
59  msg_stream << "\tinit_adapt_tap: " << init_adapt_tap << "\n";
+
60  msg_ += msg_stream.str();
+
61 }
+
62 
+
64 bool AmiRx::proc_sig(double *sig, long len, double *clock_times) {
+
65  if (ctle_) {
+
66  ctle_->apply(sig, len);
+
67  }
+
68  if (dfe_) {
+
69  return dfe_->apply(sig, len, clock_times);
+
70  } else {
+
71  return true;
+
72  }
+
73 }
+
74 
+ +
77  std::ostringstream params;
+
78  params.flush();
+
79  params << "(example_rx ";
+
80 
+
81  if (sig_tap_ == 1) // Return input unmodified.
+
82  return;
+
83 
+
84  // Apply our filter.
+
85  if (ctle_)
+ +
87  if (sig_tap_ == 2) // Return post-CTLE signal.
+
88  return;
+
89  if (dfe_) {
+
90  unsigned long offset = 0;
+
91  double max_imp = 0.0;
+
92  for (unsigned long i = 0; i < number_of_rows_; i++)
+
93  if (impulse_matrix_[i] > max_imp) {
+
94  offset = i;
+
95  max_imp = impulse_matrix_[i];
+
96  }
+
97  int tap_num = 1;
+
98  for (auto weight : dfe_->get_weights()) {
+
99  offset += samples_per_bit_;
+
100  double sum = 0;
+
101  for (unsigned long j = 0; j < offset; j++)
+
102  sum += impulse_matrix_[j];
+
103  sum *= sample_interval_;
+
104  if (dfe_->mode > 1) { // Emulate adaptation.
+
105  impulse_matrix_[offset] = -(sum - dfe_->slicer_mag()) / sample_interval_;
+
106  weight = -impulse_matrix_[offset] * sum / dfe_->slicer_mag() * sample_interval_;
+
107  params << " (dfe_tap" << tap_num++ << " " << weight << ")";
+
108  } else {
+
109  impulse_matrix_[offset] = -(weight * dfe_->slicer_mag() / sum) / sample_interval_;
+
110  }
+
111  }
+
112  }
+
113 
+
114  params << ")\n";
+
115  param_str_ = params.str();
+
116 
+
117  msg_ += debug_stream.str();
+
118 }
+
119 
+
double * impulse_matrix_
Definition: amimodel.h:172
+
std::vector< double > get_weights()
Definition: dfe.h:28
+
bool dump_dfe_adaptation_
Definition: ami_rx.h:39
+
double sample_interval_
Definition: amimodel.h:172
+
void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
Initializer.
Definition: ami_rx.cpp:22
+
int mode
Definition: dfe.h:27
+
long samples_per_bit_
Definition: amimodel.h:173
+
long number_of_rows_
Definition: amimodel.h:173
+
long get_param_int(const std::vector< std::string > &node_names, long default_val) const
Get the value of an integer parameter.
Definition: amimodel.cpp:80
+
bool proc_sig(double *sig, long len, double *clock_times) override
Override of AMIModel::proc_sig() specific to Rx models.
Definition: ami_rx.cpp:64
+
int sig_tap_
Definition: ami_rx.h:41
+
std::ostringstream debug_stream
Definition: amimodel.cpp:17
+
Small, generally useful utilities.
+
int init_adapt_tap_
Definition: ami_rx.h:41
+
Interface to AmiRx class.
+
void proc_imp() override
Override of AMIModel::proc_imp() specific to Rx models.
Definition: ami_rx.cpp:76
+
void apply(double *sig, const long len)
Filter application.
+
std::string msg_
Definition: amimodel.h:171
+
double slicer_mag()
Definition: dfe.h:31
+
virtual void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
Initialize the model.
Definition: amimodel.cpp:20
+
virtual bool apply(double *sig, const long len, double *clock_times)
Filter application.
Definition: dfe.cpp:48
+
DigitalFilter * ctle_
Definition: ami_rx.h:36
+
DFE * dfe_
Definition: ami_rx.h:37
+
bool dump_adaptation_input_
Definition: ami_rx.h:39
+
std::string param_str_
Definition: amimodel.h:171
+
+ + + + diff --git a/doc/html/ami__rx_8h.html b/doc/html/ami__rx_8h.html new file mode 100644 index 0000000..24014d7 --- /dev/null +++ b/doc/html/ami__rx_8h.html @@ -0,0 +1,129 @@ + + + + + + +ibisami: include/ami_rx.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ami_rx.h File Reference
+
+
+ +

Interface to AmiRx class. +More...

+
#include <string>
+#include <vector>
+#include "include/amimodel.h"
+#include "include/digital_filter.h"
+#include "include/dfe.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  AmiRx
 A generic IBIS-AMI Rx model implementation. More...
 
+

Detailed Description

+

Interface to AmiRx class.

+

Original author: David Banas
+ Original date: May 20, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file ami_rx.h.

+
+ + + + diff --git a/doc/html/ami__rx_8h_source.html b/doc/html/ami__rx_8h_source.html new file mode 100644 index 0000000..2164add --- /dev/null +++ b/doc/html/ami__rx_8h_source.html @@ -0,0 +1,158 @@ + + + + + + +ibisami: include/ami_rx.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ami_rx.h
+
+
+Go to the documentation of this file.
1 
+
10 #ifndef INCLUDE_AMI_RX_H_
+
11 #define INCLUDE_AMI_RX_H_
+
12 
+
13 #include <string>
+
14 #include <vector>
+
15 #include "include/amimodel.h"
+
16 #include "include/digital_filter.h"
+
17 #include "include/dfe.h"
+
18 
+
20 
+
24 class AmiRx : public AMIModel {
+
25  typedef AMIModel inherited;
+
26  public:
+
27  AmiRx() {}
+
28  virtual ~AmiRx() {delete ctle_; delete dfe_;}
+
29  void init(double *impulse_matrix, const long number_of_rows,
+
30  const long aggressors, const double sample_interval,
+
31  const double bit_time, const std::string& AMI_parameters_in) override;
+
32  void proc_imp() override;
+
33  bool proc_sig(double *sig, long len, double *clock_times) override;
+
34 
+
35  protected:
+ + + + + + +
42 };
+
43 
+
44 #endif // INCLUDE_AMI_RX_H_
+
45 
+
std::ofstream dfe_dump_stream_
Definition: ami_rx.h:38
+
bool dump_dfe_adaptation_
Definition: ami_rx.h:39
+
Interface to AMIModel class.
+
void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
Initializer.
Definition: ami_rx.cpp:22
+
A generic digital filter implementation, using "Direct Form 2" processing.
+
bool proc_sig(double *sig, long len, double *clock_times) override
Override of AMIModel::proc_sig() specific to Rx models.
Definition: ami_rx.cpp:64
+
int sig_tap_
Definition: ami_rx.h:41
+
A generic DFE implementation.
Definition: dfe.h:20
+
AmiRx()
Definition: ami_rx.h:27
+
std::ofstream dfe_input_stream_
Definition: ami_rx.h:38
+
int init_adapt_tap_
Definition: ami_rx.h:41
+
Interface to DigitalFilter class.
+
void proc_imp() override
Override of AMIModel::proc_imp() specific to Rx models.
Definition: ami_rx.cpp:76
+
Interface to DFE class.
+
virtual ~AmiRx()
Definition: ami_rx.h:28
+
std::string dfe_input_file_
Definition: ami_rx.h:40
+
std::string dfe_dump_file_
Definition: ami_rx.h:40
+
DigitalFilter * ctle_
Definition: ami_rx.h:36
+
DFE * dfe_
Definition: ami_rx.h:37
+
Abstract class providing the base functionality required by all IBIS-AMI models.
Definition: amimodel.h:121
+
bool dump_adaptation_input_
Definition: ami_rx.h:39
+
A generic IBIS-AMI Rx model implementation.
Definition: ami_rx.h:24
+
+ + + + diff --git a/doc/html/ami__tx_8cpp.html b/doc/html/ami__tx_8cpp.html new file mode 100644 index 0000000..d08a1dd --- /dev/null +++ b/doc/html/ami__tx_8cpp.html @@ -0,0 +1,117 @@ + + + + + + +ibisami: src/ami_tx.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ami_tx.cpp File Reference
+
+
+ +

Implementation of AmiTx class. +More...

+
#include <string>
+#include "include/ami_tx.h"
+
+

Go to the source code of this file.

+

Detailed Description

+

Implementation of AmiTx class.

+

Original author: David Banas
+ Original date: May 7, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file ami_tx.cpp.

+
+ + + + diff --git a/doc/html/ami__tx_8cpp_source.html b/doc/html/ami__tx_8cpp_source.html new file mode 100644 index 0000000..fca48b3 --- /dev/null +++ b/doc/html/ami__tx_8cpp_source.html @@ -0,0 +1,139 @@ + + + + + + +ibisami: src/ami_tx.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ami_tx.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <string>
+
11 #include "include/ami_tx.h"
+
12 
+ +
15  // Set up the preemphasis filter, if appropriate.
+
16  if (have_preemph_) {
+
17  std::vector<double> den; den.clear(); den.push_back(1.0);
+ +
19  if (!filter_) {
+
20  std::ostringstream err;
+
21  err << "AmiTx::init() could not allocate a DigitalFilter with "
+
22  << num_taps_ << " taps having first weight: " << tap_weights_[0] << "\n";
+
23  std::string err_str = err.str();
+
24  throw std::runtime_error(err_str);
+
25  }
+ +
27  }
+
28 }
+
29 
+
30 bool AmiTx::proc_sig(double *sig, long len, double *clock_times) {
+
31  filter_->apply(sig, len);
+
32  return true;
+
33 }
+
34 
+
double * impulse_matrix_
Definition: amimodel.h:172
+
int num_taps_
Number of taps in my pre-emphasis filter.
Definition: ami_tx.h:33
+
DigitalFilter * filter_
Used for pre-emphasis.
Definition: ami_tx.h:31
+
long number_of_rows_
Definition: amimodel.h:173
+
Interface to AmiTx class.
+
A generic digital filter implementation, using "Direct Form 2" processing.
+
std::vector< double > tap_weights_
Tap weights for pre-emphasis filter.
Definition: ami_tx.h:34
+
void apply(double *sig, const long len)
Filter application.
+
void proc_imp() override
Process the channel impulse response.
Definition: ami_tx.cpp:14
+
bool have_preemph_
True, if I have a pre-emphasis filter.
Definition: ami_tx.h:32
+
bool proc_sig(double *sig, long len, double *clock_times) override
Process a signal.
Definition: ami_tx.cpp:30
+
+ + + + diff --git a/doc/html/ami__tx_8h.html b/doc/html/ami__tx_8h.html new file mode 100644 index 0000000..1623b33 --- /dev/null +++ b/doc/html/ami__tx_8h.html @@ -0,0 +1,128 @@ + + + + + + +ibisami: include/ami_tx.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ami_tx.h File Reference
+
+
+ +

Interface to AmiTx class. +More...

+
#include <string>
+#include <vector>
+#include "include/amimodel.h"
+#include "include/digital_filter.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  AmiTx
 A generic IBIS-AMI Tx model implementation. More...
 
+

Detailed Description

+

Interface to AmiTx class.

+

Original author: David Banas
+ Original date: May 6, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file ami_tx.h.

+
+ + + + diff --git a/doc/html/ami__tx_8h_source.html b/doc/html/ami__tx_8h_source.html new file mode 100644 index 0000000..56c116f --- /dev/null +++ b/doc/html/ami__tx_8h_source.html @@ -0,0 +1,141 @@ + + + + + + +ibisami: include/ami_tx.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ami_tx.h
+
+
+Go to the documentation of this file.
1 
+
10 #ifndef INCLUDE_AMI_TX_H_
+
11 #define INCLUDE_AMI_TX_H_
+
12 
+
13 #include <string>
+
14 #include <vector>
+
15 #include "include/amimodel.h"
+
16 #include "include/digital_filter.h"
+
17 
+
19 
+
23 class AmiTx : public AMIModel {
+
24  typedef AMIModel inherited;
+
25  public:
+
26  virtual ~AmiTx() {delete filter_;}
+
27  void proc_imp() override;
+
28  bool proc_sig(double *sig, long len, double *clock_times) override;
+
29 
+
30  protected:
+ + +
33  int num_taps_;
+
34  std::vector<double> tap_weights_;
+
35 };
+
36 
+
37 #endif // INCLUDE_AMI_TX_H_
+
38 
+
A generic IBIS-AMI Tx model implementation.
Definition: ami_tx.h:23
+
virtual ~AmiTx()
Definition: ami_tx.h:26
+
int num_taps_
Number of taps in my pre-emphasis filter.
Definition: ami_tx.h:33
+
DigitalFilter * filter_
Used for pre-emphasis.
Definition: ami_tx.h:31
+
Interface to AMIModel class.
+
A generic digital filter implementation, using "Direct Form 2" processing.
+
std::vector< double > tap_weights_
Tap weights for pre-emphasis filter.
Definition: ami_tx.h:34
+
Interface to DigitalFilter class.
+
void proc_imp() override
Process the channel impulse response.
Definition: ami_tx.cpp:14
+
bool have_preemph_
True, if I have a pre-emphasis filter.
Definition: ami_tx.h:32
+
Abstract class providing the base functionality required by all IBIS-AMI models.
Definition: amimodel.h:121
+
bool proc_sig(double *sig, long len, double *clock_times) override
Process a signal.
Definition: ami_tx.cpp:30
+
+ + + + diff --git a/doc/html/amimodel_8cpp.html b/doc/html/amimodel_8cpp.html new file mode 100644 index 0000000..0f2304f --- /dev/null +++ b/doc/html/amimodel_8cpp.html @@ -0,0 +1,163 @@ + + + + + + +ibisami: src/amimodel.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
amimodel.cpp File Reference
+
+
+ +

Implementation of AMIModel class. +More...

+
#include <string>
+#include <utility>
+#include <vector>
+#include "include/amimodel.h"
+
+

Go to the source code of this file.

+ + + + +

+Macros

#define EPS_REL   0.0001
 
+ + + +

+Variables

std::ostringstream debug_stream
 
+

Detailed Description

+

Implementation of AMIModel class.

+

Original author: David Banas
+ Original date: May 2, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file amimodel.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define EPS_REL   0.0001
+
+ +

Definition at line 15 of file amimodel.cpp.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
std::ostringstream debug_stream
+
+ +

Definition at line 17 of file amimodel.cpp.

+ +
+
+
+ + + + diff --git a/doc/html/amimodel_8cpp_source.html b/doc/html/amimodel_8cpp_source.html new file mode 100644 index 0000000..6c7b654 --- /dev/null +++ b/doc/html/amimodel_8cpp_source.html @@ -0,0 +1,293 @@ + + + + + + +ibisami: src/amimodel.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
amimodel.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <string>
+
11 #include <utility>
+
12 #include <vector>
+
13 #include "include/amimodel.h"
+
14 
+
15 #define EPS_REL 0.0001
+
16 
+
17 std::ostringstream debug_stream;
+
18 
+
20 void AMIModel::init(double *impulse_matrix, const long number_of_rows,
+
21  const long aggressors, const double sample_interval,
+
22  const double bit_time, const std::string& AMI_parameters_in) {
+
23  debug_stream.str("");
+
24  impulse_matrix_ = impulse_matrix;
+
25  number_of_rows_ = number_of_rows;
+
26  aggressors_ = aggressors;
+
27  sample_interval_ = sample_interval;
+
28  bit_time_ = bit_time;
+
29  samples_per_bit_ = long(bit_time / sample_interval + 0.5);
+
30  msg_ = "Input parameter string: " + AMI_parameters_in + "\n";
+
31  if (abs(samples_per_bit_ * sample_interval - bit_time) > (bit_time * EPS_REL))
+
32  msg_ += "WARN: Non-integral number of samples per bit detected!\n";
+
33  gen_data_cnt_ = 0;
+
34  shift_reg_[0] = 1;
+
35  for (auto i = 1; i < PRBS_LEN; i++)
+
36  shift_reg_[i] = 0;
+
37  gen_data_last_ = -1.0;
+
38  param_tree_.name = "";
+
39  param_tree_.children.clear();
+
40  ParseRes res = parse_params(AMI_parameters_in);
+
41  if (!res.first)
+
42  throw std::runtime_error(res.second);
+
43 }
+
44 
+
46 ParseRes AMIModel::parse_params(const std::string& AMI_parameters_in) {
+
47  using boost::spirit::ascii::space;
+
48  using boost::spirit::qi::phrase_parse;
+
49 
+ +
51  std::string::const_iterator iter(AMI_parameters_in.begin());
+
52  std::string::const_iterator end(AMI_parameters_in.end());
+
53 
+
54  bool res = phrase_parse(iter, end, the_grammar, space, param_tree_);
+
55  if (!res || iter != end)
+
56  return ParseRes(false, std::string(iter, end));
+
57 
+ +
59  return ParseRes(true, std::string(""));
+
60 }
+
61 
+
63 
+
80 long AMIModel::get_param_int(const std::vector<std::string>& node_names,
+
81  long default_val) const {
+
82  std::string param_val_str = get_param(node_names);
+
83  if (param_val_str == "")
+
84  return default_val;
+
85  long res;
+
86  int scans = sscanf(param_val_str.c_str(), "%ld", &res);
+
87  if (scans == 1) {
+
88  return res;
+
89  } else {
+
90  std::ostringstream err;
+
91  err << "AMIModel::get_param_int() could not scan an integer from '"
+
92  << param_val_str << "', while fetching parameter: ";
+
93  std::string err_str = err.str();
+
94  for (std::string node_name : node_names)
+
95  err_str += node_name + ".";
+
96  err_str += "\n";
+
97  throw std::runtime_error(err_str);
+
98  }
+
99 }
+
100 
+
102 
+
119 double AMIModel::get_param_float(const std::vector<std::string>& node_names,
+
120  double default_val) const {
+
121  std::string param_val_str = get_param(node_names);
+
122  if (param_val_str == "")
+
123  return default_val;
+
124  double res;
+
125  int scans = sscanf(param_val_str.c_str(), "%lg", &res);
+
126  if (scans == 1) {
+
127  return res;
+
128  } else {
+
129  std::ostringstream err;
+
130  err << "AMIModel::get_param_float() could not scan a double from '"
+
131  << param_val_str << "', while fetching parameter: ";
+
132  std::string err_str = err.str();
+
133  for (std::string node_name : node_names)
+
134  err_str += node_name + ".";
+
135  err_str += "\n";
+
136  throw std::runtime_error(err_str);
+
137  }
+
138 }
+
139 
+
141 
+
158 bool AMIModel::get_param_bool(const std::vector<std::string>& node_names,
+
159  bool default_val) const {
+
160  std::string param_val_str = get_param(node_names);
+
161  if (param_val_str == "")
+
162  return default_val;
+
163  if (param_val_str == "True")
+
164  return true;
+
165  else if (param_val_str == "False")
+
166  return false;
+
167  else {
+
168  std::ostringstream err;
+
169  err << "AMIModel::get_param_bool() could not scan a Boolean from '"
+
170  << param_val_str << "', while fetching parameter: ";
+
171  std::string err_str = err.str();
+
172  for (std::string node_name : node_names)
+
173  err_str += node_name + ".";
+
174  err_str += "\n";
+
175  throw std::runtime_error(err_str);
+
176  }
+
177 }
+
178 
+
180 
+
190 std::string AMIModel::get_param(const std::vector<std::string>& node_names) const {
+
191  return get_leaf(param_tree_, &node_names[0], node_names.size());
+
192 }
+
193 
+
195 
+
207 std::string AMIModel::get_leaf(const ibisami::ParamTree& param_tree,
+
208  const std::string* name_ptr,
+
209  size_t num_names) const {
+
210  const ibisami::ParamTree *next_subtree;
+
211  for (const ibisami::ParamNode& node : param_tree.children) {
+
212  next_subtree = boost::apply_visitor(ibisami::Node(), node);
+
213  if (next_subtree) {
+
214  if (next_subtree->name == *name_ptr) {
+
215  if (num_names == 1)
+
216  return boost::apply_visitor(ibisami::Value(), next_subtree->children[0]);
+
217  else
+
218  return get_leaf(*next_subtree, ++name_ptr, num_names - 1);
+
219  }
+
220  }
+
221  }
+
222  return "";
+
223 }
+
224 
+
226 
+
232 void AMIModel::gen_data(double *res_vec) {
+
233  unsigned long samples_written = 0;
+
234  while (samples_written++ < number_of_rows_) {
+
235  if (!(gen_data_cnt_++ % samples_per_bit_)) {
+
236  int feedback = (shift_reg_[PRBS_LEN - 1] + shift_reg_[PRBS_LEN - 2]) % 2;
+
237  for (auto i = PRBS_LEN - 1; i > 0; i--)
+
238  shift_reg_[i] = shift_reg_[i - 1];
+
239  shift_reg_[0] = feedback;
+
240  if (shift_reg_[PRBS_LEN - 1])
+
241  gen_data_last_ = 1.0;
+
242  else
+
243  gen_data_last_ = -1.0;
+
244  }
+
245  *res_vec++ = gen_data_last_;
+
246  }
+
247 }
+
248 
+
Used to access a branch node.
Definition: amimodel.h:63
+
long aggressors_
Definition: amimodel.h:173
+
double * impulse_matrix_
Definition: amimodel.h:172
+
std::string name
identifier
Definition: amimodel.h:46
+
ibisami::ParamTree param_tree_
Definition: amimodel.h:175
+
Interface to AMIModel class.
+
double get_param_float(const std::vector< std::string > &node_names, double default_val) const
Get the value of a floating point parameter.
Definition: amimodel.cpp:119
+
double sample_interval_
Definition: amimodel.h:172
+
std::string get_param(const std::vector< std::string > &node_names) const
Get the string value of a parameter.
Definition: amimodel.cpp:190
+
ParseRes parse_params(const std::string &AMI_parameters_in)
Parse the incoming AMI parameter string.
Definition: amimodel.cpp:46
+
boost::variant< boost::recursive_wrapper< ParamTree >, std::string > ParamNode
Definition: amimodel.h:35
+
std::string name_
Definition: amimodel.h:171
+
#define PRBS_LEN
Definition: amimodel.h:28
+
long samples_per_bit_
Definition: amimodel.h:173
+
long number_of_rows_
Definition: amimodel.h:173
+
unsigned long gen_data_cnt_
Definition: amimodel.h:174
+
long get_param_int(const std::vector< std::string > &node_names, long default_val) const
Get the value of an integer parameter.
Definition: amimodel.cpp:80
+
std::pair< bool, std::string > ParseRes
Definition: amimodel.h:118
+
int shift_reg_[PRBS_LEN]
Definition: amimodel.h:178
+
void gen_data(double *res_vec)
Generate random binary oversampled data.
Definition: amimodel.cpp:232
+
bool get_param_bool(const std::vector< std::string > &node_names, bool default_val) const
Get the value of a Boolean parameter.
Definition: amimodel.cpp:158
+
std::ostringstream debug_stream
Definition: amimodel.cpp:17
+
double gen_data_last_
Definition: amimodel.h:172
+
std::vector< ParamNode > children
node
Definition: amimodel.h:47
+
The parameter tree definition.
Definition: amimodel.h:45
+
std::string msg_
Definition: amimodel.h:171
+
Used to access a leaf node.
Definition: amimodel.h:58
+
virtual void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
Initialize the model.
Definition: amimodel.cpp:20
+
AMI parameter tree grammatical definition.
+
#define EPS_REL
Definition: amimodel.cpp:15
+
double bit_time_
Definition: amimodel.h:172
+
+ + + + diff --git a/doc/html/amimodel_8h.html b/doc/html/amimodel_8h.html new file mode 100644 index 0000000..f7bbadf --- /dev/null +++ b/doc/html/amimodel_8h.html @@ -0,0 +1,232 @@ + + + + + + +ibisami: include/amimodel.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
amimodel.h File Reference
+
+
+ +

Interface to AMIModel class. +More...

+
#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/qi_omit.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_fusion.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+#include <boost/variant.hpp>
+#include <boost/fusion/include/adapt_struct.hpp>
+#include <fstream>
+#include <string>
+#include <vector>
+#include <utility>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

struct  ibisami::ParamTree
 The parameter tree definition. More...
 
struct  ibisami::Value
 Used to access a leaf node. More...
 
struct  ibisami::Node
 Used to access a branch node. More...
 
class  AMIModel
 Abstract class providing the base functionality required by all IBIS-AMI models. More...
 
+ + + + +

+Namespaces

 ibisami
 Used to protect several complex custom types from potential name collisions.
 
+ + + +

+Macros

#define PRBS_LEN   7
 
+ + + + + +

+Typedefs

typedef boost::variant< boost::recursive_wrapper< ParamTree >, std::string > ibisami::ParamNode
 
typedef std::pair< bool, std::string > ParseRes
 
+ + + +

+Functions

 BOOST_FUSION_ADAPT_STRUCT (ibisami::ParamTree,(std::string, name)(std::vector< ibisami::ParamNode >, children)) namespace ibisami
 
+

Detailed Description

+

Interface to AMIModel class.

+

Original author: David Banas
+ Original date: May 1, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+

This abstract class provides the common base for all AMI models.

+ +

Definition in file amimodel.h.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define PRBS_LEN   7
+
+ +

Definition at line 28 of file amimodel.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef std::pair<bool, std::string> ParseRes
+
+ +

Definition at line 118 of file amimodel.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
BOOST_FUSION_ADAPT_STRUCT (ibisami::ParamTree ,
(std::string, name)(std::vector< ibisami::ParamNode >, children)  
)
+
+ +

Definition at line 76 of file amimodel.h.

+ +
+
+
+ + + + diff --git a/doc/html/amimodel_8h_source.html b/doc/html/amimodel_8h_source.html new file mode 100644 index 0000000..b9447dc --- /dev/null +++ b/doc/html/amimodel_8h_source.html @@ -0,0 +1,281 @@ + + + + + + +ibisami: include/amimodel.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
amimodel.h
+
+
+Go to the documentation of this file.
1 
+
12 #ifndef INCLUDE_AMIMODEL_H_
+
13 #define INCLUDE_AMIMODEL_H_
+
14 
+
15 #include <boost/spirit/include/qi.hpp>
+
16 #include <boost/spirit/include/qi_omit.hpp>
+
17 #include <boost/spirit/include/phoenix_core.hpp>
+
18 #include <boost/spirit/include/phoenix_fusion.hpp>
+
19 #include <boost/spirit/include/phoenix_operator.hpp>
+
20 #include <boost/spirit/include/phoenix_stl.hpp>
+
21 #include <boost/variant.hpp>
+
22 #include <boost/fusion/include/adapt_struct.hpp>
+
23 #include <fstream>
+
24 #include <string>
+
25 #include <vector>
+
26 #include <utility>
+
27 
+
28 #define PRBS_LEN 7
+
29 
+
30 // Define the recursive structure of an AMI parameter tree and import to boost.
+
31 // (This requires boost, as we don't yet have polymorphic recursion in C++.)
+
32 
+
34 namespace ibisami {
+
35 struct ParamTree;
+
36 typedef boost::variant<boost::recursive_wrapper<ParamTree>,
+
37  std::string> ParamNode;
+
38 //
+
45 struct ParamTree {
+
46  std::string name;
+
47  std::vector<ParamNode> children;
+
48 };
+
49 
+
50 // This is really clunky, but, as I read the examples and forum posts, is how
+
51 // we have to traverse polymorphic structures in C++, even when we're using
+
52 // Boost; yuk!
+
53 //
+
54 // IF ANYONE KNOWS A BETTER WAY, PLEASE, CONTACT ME. THANKS!
+
55 //
+
56 static std::string empty_str("");
+
58 struct Value : boost::static_visitor<const std::string&> {
+
59  const std::string& operator() (const ibisami::ParamTree& param_tree) const {return empty_str;}
+
60  const std::string& operator() (const std::string& val_str) const {return val_str;}
+
61 };
+
63 struct Node : boost::static_visitor<const ibisami::ParamTree*> {
+
64  const ibisami::ParamTree* operator() (const ibisami::ParamTree& param_tree) const {return &param_tree;}
+
65  const ibisami::ParamTree* operator() (const std::string& val_str) const {return nullptr;}
+
66 };
+
67 
+
74 } // namespace ibisami
+
75 
+ + +
78  (std::string, name)
+
79  (std::vector<ibisami::ParamNode>, children)
+
80 )
+
81 
+
82 namespace ibisami {
+
83  namespace phoenix = boost::phoenix;
+
84  namespace qi = boost::spirit::qi;
+
85  namespace ascii = boost::spirit::ascii;
+
86  namespace spirit = boost::spirit;
+
87 
+
88  template <typename Iterator>
+
89  struct AMIGrammar : qi::grammar<Iterator, ParamTree(), ascii::space_type> {
+
90  AMIGrammar() : AMIGrammar::base_type(branch) {
+
91  using qi::lit;
+
92  using qi::lexeme;
+
93  using ascii::char_;
+
94  using ascii::alnum;
+
95  using ascii::string;
+
96  using ascii::space;
+
97  using spirit::omit;
+
98  using phoenix::at_c;
+
99  using phoenix::push_back;
+
100 
+
101  quoted_string %= lexeme['"' >> +(char_ - '"') >> '"'];
+
102  comment = lexeme['|' >> *(char_ - '\n') >> '\n'];
+
103  value %= quoted_string | lexeme[+(char_ - ')')];
+
104  node %= comment || (branch | value);
+
105  branch %= '('
+
106  >> lexeme[+(alnum | char_('_'))]
+
107  >> *node
+
108  >> ')';
+
109  }
+
110  qi::rule<Iterator, ParamTree(), ascii::space_type> branch;
+
111  qi::rule<Iterator, ParamNode(), ascii::space_type> node;
+
112  qi::rule<Iterator, std::string(), ascii::space_type> value;
+
113  qi::rule<Iterator, void(), ascii::space_type> comment;
+
114  qi::rule<Iterator, std::string(), ascii::space_type> quoted_string;
+
115  };
+
116 } // namespace ibisami
+
117 
+
118 typedef std::pair<bool, std::string> ParseRes;
+
119 
+
121 class AMIModel {
+
122  public:
+
123  virtual ~AMIModel() {}
+
124 
+
126 
+
130  virtual void init(double *impulse_matrix, const long number_of_rows,
+
131  const long aggressors, const double sample_interval,
+
132  const double bit_time, const std::string& AMI_parameters_in);
+
133 
+
135 
+
142  virtual void proc_imp() = 0;
+
143 
+
145 
+
157  virtual bool proc_sig(double *sig, long len, double *clock_times) = 0;
+
158 
+
159  std::string& msg() {return msg_;}
+
160  std::string& param_str() {return param_str_;}
+
161 
+
162  protected:
+
163  ParseRes parse_params(const std::string& AMI_parameters_in);
+
164  std::string get_param(const std::vector<std::string>& node_names) const;
+
165  long get_param_int(const std::vector<std::string>& node_names, long default_val) const;
+
166  double get_param_float(const std::vector<std::string>& node_names, double default_val) const;
+
167  bool get_param_bool(const std::vector<std::string>& node_names, bool default_val) const;
+
168  void gen_data(double *res_vec);
+
169  void log(std::string msg) {if(log_ && clog_) {clog_ << msg << "\n";
+
170  flush(clog_);}}
+
171  std::string msg_, param_str_, name_;
+ + +
174  unsigned long gen_data_cnt_;
+ +
176  std::ofstream clog_;
+
177  bool log_;
+ +
179 
+
180  private:
+
181  std::string get_leaf(const ibisami::ParamTree& param_tree,
+
182  const std::string* name_ptr, size_t num_names) const;
+
183 };
+
184 
+
185 #endif // INCLUDE_AMIMODEL_H_
+
186 
+
Used to access a branch node.
Definition: amimodel.h:63
+
Used to protect several complex custom types from potential name collisions.
Definition: amimodel.h:34
+
long aggressors_
Definition: amimodel.h:173
+
double * impulse_matrix_
Definition: amimodel.h:172
+
void log(std::string msg)
Definition: amimodel.h:169
+
const std::string & operator()(const ibisami::ParamTree &param_tree) const
Definition: amimodel.h:59
+
std::string name
identifier
Definition: amimodel.h:46
+
ibisami::ParamTree param_tree_
Definition: amimodel.h:175
+
double get_param_float(const std::vector< std::string > &node_names, double default_val) const
Get the value of a floating point parameter.
Definition: amimodel.cpp:119
+
double sample_interval_
Definition: amimodel.h:172
+
std::string get_param(const std::vector< std::string > &node_names) const
Get the string value of a parameter.
Definition: amimodel.cpp:190
+
ParseRes parse_params(const std::string &AMI_parameters_in)
Parse the incoming AMI parameter string.
Definition: amimodel.cpp:46
+
boost::variant< boost::recursive_wrapper< ParamTree >, std::string > ParamNode
Definition: amimodel.h:35
+
std::string name_
Definition: amimodel.h:171
+
#define PRBS_LEN
Definition: amimodel.h:28
+
long samples_per_bit_
Definition: amimodel.h:173
+
long number_of_rows_
Definition: amimodel.h:173
+
bool log_
Definition: amimodel.h:177
+
std::string & msg()
Retrieve the model message.
Definition: amimodel.h:159
+
std::ofstream clog_
Definition: amimodel.h:176
+
unsigned long gen_data_cnt_
Definition: amimodel.h:174
+
long get_param_int(const std::vector< std::string > &node_names, long default_val) const
Get the value of an integer parameter.
Definition: amimodel.cpp:80
+
std::pair< bool, std::string > ParseRes
Definition: amimodel.h:118
+
BOOST_FUSION_ADAPT_STRUCT(ibisami::ParamTree,(std::string, name)(std::vector< ibisami::ParamNode >, children)) namespace ibisami
Definition: amimodel.h:76
+
const ibisami::ParamTree * operator()(const ibisami::ParamTree &param_tree) const
Definition: amimodel.h:64
+
int shift_reg_[PRBS_LEN]
Definition: amimodel.h:178
+
void gen_data(double *res_vec)
Generate random binary oversampled data.
Definition: amimodel.cpp:232
+
bool get_param_bool(const std::vector< std::string > &node_names, bool default_val) const
Get the value of a Boolean parameter.
Definition: amimodel.cpp:158
+
double gen_data_last_
Definition: amimodel.h:172
+
virtual ~AMIModel()
Definition: amimodel.h:123
+
std::vector< ParamNode > children
node
Definition: amimodel.h:47
+
The parameter tree definition.
Definition: amimodel.h:45
+
std::string msg_
Definition: amimodel.h:171
+
Used to access a leaf node.
Definition: amimodel.h:58
+
virtual void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
Initialize the model.
Definition: amimodel.cpp:20
+
std::string & param_str()
Retrieve the model parameter string.
Definition: amimodel.h:160
+
virtual void proc_imp()=0
Process an incoming impulse response.
+
Abstract class providing the base functionality required by all IBIS-AMI models.
Definition: amimodel.h:121
+
std::string param_str_
Definition: amimodel.h:171
+
double bit_time_
Definition: amimodel.h:172
+
virtual bool proc_sig(double *sig, long len, double *clock_times)=0
Process a signal.
+
+ + + + diff --git a/doc/html/annotated.html b/doc/html/annotated.html new file mode 100644 index 0000000..3773fc1 --- /dev/null +++ b/doc/html/annotated.html @@ -0,0 +1,119 @@ + + + + + + +ibisami: Class List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + +
 NibisamiUsed to protect several complex custom types from potential name collisions
 CAMIGrammarAMI parameter tree grammatical definition
 CNodeUsed to access a branch node
 CParamTreeThe parameter tree definition
 CValueUsed to access a leaf node
 CAMIModelAbstract class providing the base functionality required by all IBIS-AMI models
 CAmiPointersHolds the pointers, which we pass back to the AMI_Init() caller
 CAmiRxA generic IBIS-AMI Rx model implementation
 CAmiTxA generic IBIS-AMI Tx model implementation
 CDFEA generic DFE implementation
 CDigitalFilterA generic digital filter implementation, using "Direct Form 2" processing
 CFIRFilterA FIR (finite impulse response) filter implementation, with optional over-sampling
 CMyRxAn example device specific Rx model implementation
 CMyTxAn example device specific Tx model implementation
+
+
+ + + + diff --git a/doc/html/class_a_m_i_model-members.html b/doc/html/class_a_m_i_model-members.html new file mode 100644 index 0000000..265ee45 --- /dev/null +++ b/doc/html/class_a_m_i_model-members.html @@ -0,0 +1,132 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
AMIModel Member List
+
+
+ +

This is the complete list of members for AMIModel, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aggressors_AMIModelprotected
bit_time_AMIModelprotected
clog_AMIModelprotected
gen_data(double *res_vec)AMIModelprotected
gen_data_cnt_AMIModelprotected
gen_data_last_AMIModelprotected
get_param(const std::vector< std::string > &node_names) const AMIModelprotected
get_param_bool(const std::vector< std::string > &node_names, bool default_val) const AMIModelprotected
get_param_float(const std::vector< std::string > &node_names, double default_val) const AMIModelprotected
get_param_int(const std::vector< std::string > &node_names, long default_val) const AMIModelprotected
impulse_matrix_AMIModelprotected
init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)AMIModelvirtual
log(std::string msg)AMIModelinlineprotected
log_AMIModelprotected
msg()AMIModelinline
msg_AMIModelprotected
name_AMIModelprotected
number_of_rows_AMIModelprotected
param_str()AMIModelinline
param_str_AMIModelprotected
param_tree_AMIModelprotected
parse_params(const std::string &AMI_parameters_in)AMIModelprotected
proc_imp()=0AMIModelpure virtual
proc_sig(double *sig, long len, double *clock_times)=0AMIModelpure virtual
sample_interval_AMIModelprotected
samples_per_bit_AMIModelprotected
shift_reg_AMIModelprotected
~AMIModel()AMIModelinlinevirtual
+ + + + diff --git a/doc/html/class_a_m_i_model.html b/doc/html/class_a_m_i_model.html new file mode 100644 index 0000000..b91281b --- /dev/null +++ b/doc/html/class_a_m_i_model.html @@ -0,0 +1,1043 @@ + + + + + + +ibisami: AMIModel Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
AMIModel Class Referenceabstract
+
+
+ +

Abstract class providing the base functionality required by all IBIS-AMI models. + More...

+ +

#include <amimodel.h>

+
+Inheritance diagram for AMIModel:
+
+
+ + +AmiRx +AmiTx +MyRx +MyTx + +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~AMIModel ()
 
virtual void init (double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
 Initialize the model. More...
 
virtual void proc_imp ()=0
 Process an incoming impulse response. More...
 
virtual bool proc_sig (double *sig, long len, double *clock_times)=0
 Process a signal. More...
 
std::string & msg ()
 Retrieve the model message. More...
 
std::string & param_str ()
 Retrieve the model parameter string. More...
 
+ + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

ParseRes parse_params (const std::string &AMI_parameters_in)
 Parse the incoming AMI parameter string. More...
 
std::string get_param (const std::vector< std::string > &node_names) const
 Get the string value of a parameter. More...
 
long get_param_int (const std::vector< std::string > &node_names, long default_val) const
 Get the value of an integer parameter. More...
 
double get_param_float (const std::vector< std::string > &node_names, double default_val) const
 Get the value of a floating point parameter. More...
 
bool get_param_bool (const std::vector< std::string > &node_names, bool default_val) const
 Get the value of a Boolean parameter. More...
 
void gen_data (double *res_vec)
 Generate random binary oversampled data. More...
 
void log (std::string msg)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

std::string msg_
 
std::string param_str_
 
std::string name_
 
double sample_interval_
 
double bit_time_
 
double * impulse_matrix_
 
double gen_data_last_
 
long number_of_rows_
 
long aggressors_
 
long samples_per_bit_
 
unsigned long gen_data_cnt_
 
ibisami::ParamTree param_tree_
 
std::ofstream clog_
 
bool log_
 
int shift_reg_ [PRBS_LEN]
 
+

Detailed Description

+

Abstract class providing the base functionality required by all IBIS-AMI models.

+ +

Definition at line 121 of file amimodel.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual AMIModel::~AMIModel ()
+
+inlinevirtual
+
+ +

Definition at line 123 of file amimodel.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void AMIModel::gen_data (double * res_vec)
+
+protected
+
+ +

Generate random binary oversampled data.

+
Parameters
+ + +
res_vecA pointer to an array of doubles to be overwritten. (It is assumed that, at least, number_of_rows_ elements have been allocated.)
+
+
+

The default implementation uses PRBS-7, [7,6].

+ +

Definition at line 232 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
std::string AMIModel::get_param (const std::vector< std::string > & node_names) const
+
+protected
+
+ +

Get the string value of a parameter.

+

Returns the string value of a particular AMI parameter.

+

Inputs:

    +
  • node_names: A vector of strings containing the AMI parameter tree node names required to traverse our way to the parameter of interest. The root name should not be included.
  • +
+

Returns:

    +
  • the requested parameter's value string, if the parameter was found.
  • +
  • empty string, otherwise.
  • +
+ +

Definition at line 190 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool AMIModel::get_param_bool (const std::vector< std::string > & node_names,
bool default_val 
) const
+
+protected
+
+ +

Get the value of a Boolean parameter.

+

Returns the Boolean value of a particular Bool parameter.

+

Inputs:

    +
  • node_names: A vector of strings containing the AMI parameter tree node names required to traverse our way to the parameter of interest. The root name should not be included.
  • +
  • default_val: The value to return, if the parameter is not found in the tree.
  • +
+

Returns:

    +
  • the requested parameter's Boolean value, if the parameter was found and a Boolean was able to be scanned from its value string.
  • +
  • 'default_val', if the parameter was not found in the tree.
  • +
+

Throws:

    +
  • std::runtime_error, if the parameter was found and a Boolean could not be scanned from its value string.
  • +
+ +

Definition at line 158 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
double AMIModel::get_param_float (const std::vector< std::string > & node_names,
double default_val 
) const
+
+protected
+
+ +

Get the value of a floating point parameter.

+

Returns the floating point value of a particular Float parameter.

+

Inputs:

    +
  • node_names: A vector of strings containing the AMI parameter tree node names required to traverse our way to the parameter of interest. The root name should not be included.
  • +
  • default_val: The value to return, if the parameter is not found in the tree.
  • +
+

Returns:

    +
  • the requested parameter's floating point value, if the parameter was found and a double was able to be scanned from its value string.
  • +
  • 'default_val', if the parameter was not found in the tree.
  • +
+

Throws:

    +
  • std::runtime_error, if the parameter was found and a double could not be scanned from its value string.
  • +
+ +

Definition at line 119 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
long AMIModel::get_param_int (const std::vector< std::string > & node_names,
long default_val 
) const
+
+protected
+
+ +

Get the value of an integer parameter.

+

Returns the integer value of a particular Integer parameter.

+

Inputs:

    +
  • node_names: A vector of strings containing the AMI parameter tree node names required to traverse our way to the parameter of interest. The root name should not be included.
  • +
  • default_val: The value to return, if the parameter is not found in the tree.
  • +
+

Returns:

    +
  • the requested parameter's integer value, if the parameter was found and an integer was able to be scanned from its value string.
  • +
  • 'default_val', if the parameter was not found in the tree.
  • +
+

Throws:

    +
  • std::runtime_error, if the parameter was found and an integer could not be scanned from its value string.
  • +
+ +

Definition at line 80 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void AMIModel::init (double * impulse_matrix,
const long number_of_rows,
const long aggressors,
const double sample_interval,
const double bit_time,
const std::string & AMI_parameters_in 
)
+
+virtual
+
+ +

Initialize the model.

+

(See AMI_Init() for parameter descriptions.)

See also
AMI_Init()
+ +

Reimplemented in MyRx, AmiRx, and MyTx.

+ +

Definition at line 20 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void AMIModel::log (std::string msg)
+
+inlineprotected
+
+ +

Definition at line 169 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string& AMIModel::msg ()
+
+inline
+
+ +

Retrieve the model message.

+ +

Definition at line 159 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string& AMIModel::param_str ()
+
+inline
+
+ +

Retrieve the model parameter string.

+ +

Definition at line 160 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ParseRes AMIModel::parse_params (const std::string & AMI_parameters_in)
+
+protected
+
+ +

Parse the incoming AMI parameter string.

+ +

Definition at line 46 of file amimodel.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void AMIModel::proc_imp ()
+
+pure virtual
+
+ +

Process an incoming impulse response.

+

This function takes no arguments and returns nothing. It processes the array of doubles sent into init(), in place. The model already contains everything it needs to do this, via the init() call. The only reason this function isn't absorped into init() is to allow derived classes to add to the init() functionality, before the impulse response is processed.

+ +

Implemented in AmiRx, and AmiTx.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool AMIModel::proc_sig (double * sig,
long len,
double * clock_times 
)
+
+pure virtual
+
+ +

Process a signal.

+
Parameters
+ + + + +
sigA pointer to the array of doubles to be processed.
lenThe number of samples to process.
clock_timesA pointer to the array of doubles used for storing the clock times.
+
+
+
Returns
A Boolean flag, which is true if the model reached steady state, regarding any adaptation.
+

As per the IBIS standard, the user is allowed to presume that there has been enough storage allocated for clock_times, given the value of sig_len, sample_interval, and bit_time.

+
See also
init()
+ +

Implemented in AmiRx, and AmiTx.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
long AMIModel::aggressors_
+
+protected
+
+ +

Definition at line 173 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double AMIModel::bit_time_
+
+protected
+
+ +

Definition at line 172 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::ofstream AMIModel::clog_
+
+protected
+
+ +

Definition at line 176 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
unsigned long AMIModel::gen_data_cnt_
+
+protected
+
+ +

Definition at line 174 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double AMIModel::gen_data_last_
+
+protected
+
+ +

Definition at line 172 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double * AMIModel::impulse_matrix_
+
+protected
+
+ +

Definition at line 172 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool AMIModel::log_
+
+protected
+
+ +

Definition at line 177 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::string AMIModel::msg_
+
+protected
+
+ +

Definition at line 171 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::string AMIModel::name_
+
+protected
+
+ +

Definition at line 171 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
long AMIModel::number_of_rows_
+
+protected
+
+ +

Definition at line 173 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::string AMIModel::param_str_
+
+protected
+
+ +

Definition at line 171 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ibisami::ParamTree AMIModel::param_tree_
+
+protected
+
+ +

Definition at line 175 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double AMIModel::sample_interval_
+
+protected
+
+ +

Definition at line 172 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
long AMIModel::samples_per_bit_
+
+protected
+
+ +

Definition at line 173 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int AMIModel::shift_reg_[PRBS_LEN]
+
+protected
+
+ +

Definition at line 178 of file amimodel.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/doc/html/class_ami_rx-members.html b/doc/html/class_ami_rx-members.html new file mode 100644 index 0000000..3c89907 --- /dev/null +++ b/doc/html/class_ami_rx-members.html @@ -0,0 +1,144 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
AmiRx Member List
+
+
+ +

This is the complete list of members for AmiRx, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aggressors_AMIModelprotected
AmiRx()AmiRxinline
bit_time_AMIModelprotected
clog_AMIModelprotected
ctle_AmiRxprotected
dfe_AmiRxprotected
dfe_dump_file_AmiRxprotected
dfe_dump_stream_AmiRxprotected
dfe_input_file_AmiRxprotected
dfe_input_stream_AmiRxprotected
dump_adaptation_input_AmiRxprotected
dump_dfe_adaptation_AmiRxprotected
gen_data(double *res_vec)AMIModelprotected
gen_data_cnt_AMIModelprotected
gen_data_last_AMIModelprotected
get_param(const std::vector< std::string > &node_names) const AMIModelprotected
get_param_bool(const std::vector< std::string > &node_names, bool default_val) const AMIModelprotected
get_param_float(const std::vector< std::string > &node_names, double default_val) const AMIModelprotected
get_param_int(const std::vector< std::string > &node_names, long default_val) const AMIModelprotected
impulse_matrix_AMIModelprotected
init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) overrideAmiRxvirtual
init_adapt_tap_AmiRxprotected
log(std::string msg)AMIModelinlineprotected
log_AMIModelprotected
msg()AMIModelinline
msg_AMIModelprotected
name_AMIModelprotected
number_of_rows_AMIModelprotected
param_str()AMIModelinline
param_str_AMIModelprotected
param_tree_AMIModelprotected
parse_params(const std::string &AMI_parameters_in)AMIModelprotected
proc_imp() overrideAmiRxvirtual
proc_sig(double *sig, long len, double *clock_times) overrideAmiRxvirtual
sample_interval_AMIModelprotected
samples_per_bit_AMIModelprotected
shift_reg_AMIModelprotected
sig_tap_AmiRxprotected
~AMIModel()AMIModelinlinevirtual
~AmiRx()AmiRxinlinevirtual
+ + + + diff --git a/doc/html/class_ami_rx.html b/doc/html/class_ami_rx.html new file mode 100644 index 0000000..d1cf1cb --- /dev/null +++ b/doc/html/class_ami_rx.html @@ -0,0 +1,645 @@ + + + + + + +ibisami: AmiRx Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
AmiRx Class Reference
+
+
+ +

A generic IBIS-AMI Rx model implementation. + More...

+ +

#include <ami_rx.h>

+
+Inheritance diagram for AmiRx:
+
+
+ + +AMIModel +MyRx + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AmiRx ()
 
virtual ~AmiRx ()
 
void init (double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
 Initializer. More...
 
void proc_imp () override
 Override of AMIModel::proc_imp() specific to Rx models. More...
 
bool proc_sig (double *sig, long len, double *clock_times) override
 Override of AMIModel::proc_sig() specific to Rx models. More...
 
- Public Member Functions inherited from AMIModel
virtual ~AMIModel ()
 
std::string & msg ()
 Retrieve the model message. More...
 
std::string & param_str ()
 Retrieve the model parameter string. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

DigitalFilterctle_
 
DFEdfe_
 
std::ofstream dfe_dump_stream_
 
std::ofstream dfe_input_stream_
 
bool dump_dfe_adaptation_
 
bool dump_adaptation_input_
 
std::string dfe_dump_file_
 
std::string dfe_input_file_
 
int sig_tap_
 
int init_adapt_tap_
 
- Protected Attributes inherited from AMIModel
std::string msg_
 
std::string param_str_
 
std::string name_
 
double sample_interval_
 
double bit_time_
 
double * impulse_matrix_
 
double gen_data_last_
 
long number_of_rows_
 
long aggressors_
 
long samples_per_bit_
 
unsigned long gen_data_cnt_
 
ibisami::ParamTree param_tree_
 
std::ofstream clog_
 
bool log_
 
int shift_reg_ [PRBS_LEN]
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from AMIModel
ParseRes parse_params (const std::string &AMI_parameters_in)
 Parse the incoming AMI parameter string. More...
 
std::string get_param (const std::vector< std::string > &node_names) const
 Get the string value of a parameter. More...
 
long get_param_int (const std::vector< std::string > &node_names, long default_val) const
 Get the value of an integer parameter. More...
 
double get_param_float (const std::vector< std::string > &node_names, double default_val) const
 Get the value of a floating point parameter. More...
 
bool get_param_bool (const std::vector< std::string > &node_names, bool default_val) const
 Get the value of a Boolean parameter. More...
 
void gen_data (double *res_vec)
 Generate random binary oversampled data. More...
 
void log (std::string msg)
 
+

Detailed Description

+

A generic IBIS-AMI Rx model implementation.

+

This abstract class provides generic Rx model capability. Device specific Rx models should derive from this class.

+ +

Definition at line 24 of file ami_rx.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
AmiRx::AmiRx ()
+
+inline
+
+ +

Definition at line 27 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual AmiRx::~AmiRx ()
+
+inlinevirtual
+
+ +

Definition at line 28 of file ami_rx.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void AmiRx::init (double * impulse_matrix,
const long number_of_rows,
const long aggressors,
const double sample_interval,
const double bit_time,
const std::string & AMI_parameters_in 
)
+
+overridevirtual
+
+ +

Initializer.

+ +

Reimplemented from AMIModel.

+ +

Definition at line 22 of file ami_rx.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void AmiRx::proc_imp ()
+
+overridevirtual
+
+ +

Override of AMIModel::proc_imp() specific to Rx models.

+ +

Implements AMIModel.

+ +

Definition at line 76 of file ami_rx.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool AmiRx::proc_sig (double * sig,
long len,
double * clock_times 
)
+
+overridevirtual
+
+ +

Override of AMIModel::proc_sig() specific to Rx models.

+ +

Implements AMIModel.

+ +

Definition at line 64 of file ami_rx.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
DigitalFilter* AmiRx::ctle_
+
+protected
+
+ +

Definition at line 36 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
DFE* AmiRx::dfe_
+
+protected
+
+ +

Definition at line 37 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::string AmiRx::dfe_dump_file_
+
+protected
+
+ +

Definition at line 40 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::ofstream AmiRx::dfe_dump_stream_
+
+protected
+
+ +

Definition at line 38 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::string AmiRx::dfe_input_file_
+
+protected
+
+ +

Definition at line 40 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::ofstream AmiRx::dfe_input_stream_
+
+protected
+
+ +

Definition at line 38 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool AmiRx::dump_adaptation_input_
+
+protected
+
+ +

Definition at line 39 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool AmiRx::dump_dfe_adaptation_
+
+protected
+
+ +

Definition at line 39 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int AmiRx::init_adapt_tap_
+
+protected
+
+ +

Definition at line 41 of file ami_rx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int AmiRx::sig_tap_
+
+protected
+
+ +

Definition at line 41 of file ami_rx.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/doc/html/class_ami_tx-members.html b/doc/html/class_ami_tx-members.html new file mode 100644 index 0000000..a6afe3b --- /dev/null +++ b/doc/html/class_ami_tx-members.html @@ -0,0 +1,137 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
AmiTx Member List
+
+
+ +

This is the complete list of members for AmiTx, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aggressors_AMIModelprotected
bit_time_AMIModelprotected
clog_AMIModelprotected
filter_AmiTxprotected
gen_data(double *res_vec)AMIModelprotected
gen_data_cnt_AMIModelprotected
gen_data_last_AMIModelprotected
get_param(const std::vector< std::string > &node_names) const AMIModelprotected
get_param_bool(const std::vector< std::string > &node_names, bool default_val) const AMIModelprotected
get_param_float(const std::vector< std::string > &node_names, double default_val) const AMIModelprotected
get_param_int(const std::vector< std::string > &node_names, long default_val) const AMIModelprotected
have_preemph_AmiTxprotected
impulse_matrix_AMIModelprotected
init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)AMIModelvirtual
log(std::string msg)AMIModelinlineprotected
log_AMIModelprotected
msg()AMIModelinline
msg_AMIModelprotected
name_AMIModelprotected
num_taps_AmiTxprotected
number_of_rows_AMIModelprotected
param_str()AMIModelinline
param_str_AMIModelprotected
param_tree_AMIModelprotected
parse_params(const std::string &AMI_parameters_in)AMIModelprotected
proc_imp() overrideAmiTxvirtual
proc_sig(double *sig, long len, double *clock_times) overrideAmiTxvirtual
sample_interval_AMIModelprotected
samples_per_bit_AMIModelprotected
shift_reg_AMIModelprotected
tap_weights_AmiTxprotected
~AMIModel()AMIModelinlinevirtual
~AmiTx()AmiTxinlinevirtual
+ + + + diff --git a/doc/html/class_ami_tx.html b/doc/html/class_ami_tx.html new file mode 100644 index 0000000..f5c346b --- /dev/null +++ b/doc/html/class_ami_tx.html @@ -0,0 +1,433 @@ + + + + + + +ibisami: AmiTx Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
AmiTx Class Reference
+
+
+ +

A generic IBIS-AMI Tx model implementation. + More...

+ +

#include <ami_tx.h>

+
+Inheritance diagram for AmiTx:
+
+
+ + +AMIModel +MyTx + +
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~AmiTx ()
 
void proc_imp () override
 Process the channel impulse response. More...
 
bool proc_sig (double *sig, long len, double *clock_times) override
 Process a signal. More...
 
- Public Member Functions inherited from AMIModel
virtual ~AMIModel ()
 
virtual void init (double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
 Initialize the model. More...
 
std::string & msg ()
 Retrieve the model message. More...
 
std::string & param_str ()
 Retrieve the model parameter string. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

DigitalFilterfilter_
 Used for pre-emphasis. More...
 
bool have_preemph_
 True, if I have a pre-emphasis filter. More...
 
int num_taps_
 Number of taps in my pre-emphasis filter. More...
 
std::vector< double > tap_weights_
 Tap weights for pre-emphasis filter. More...
 
- Protected Attributes inherited from AMIModel
std::string msg_
 
std::string param_str_
 
std::string name_
 
double sample_interval_
 
double bit_time_
 
double * impulse_matrix_
 
double gen_data_last_
 
long number_of_rows_
 
long aggressors_
 
long samples_per_bit_
 
unsigned long gen_data_cnt_
 
ibisami::ParamTree param_tree_
 
std::ofstream clog_
 
bool log_
 
int shift_reg_ [PRBS_LEN]
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from AMIModel
ParseRes parse_params (const std::string &AMI_parameters_in)
 Parse the incoming AMI parameter string. More...
 
std::string get_param (const std::vector< std::string > &node_names) const
 Get the string value of a parameter. More...
 
long get_param_int (const std::vector< std::string > &node_names, long default_val) const
 Get the value of an integer parameter. More...
 
double get_param_float (const std::vector< std::string > &node_names, double default_val) const
 Get the value of a floating point parameter. More...
 
bool get_param_bool (const std::vector< std::string > &node_names, bool default_val) const
 Get the value of a Boolean parameter. More...
 
void gen_data (double *res_vec)
 Generate random binary oversampled data. More...
 
void log (std::string msg)
 
+

Detailed Description

+

A generic IBIS-AMI Tx model implementation.

+

This abstract class provides generic Tx model capability. Device specific Tx models should derive from this class.

+ +

Definition at line 23 of file ami_tx.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual AmiTx::~AmiTx ()
+
+inlinevirtual
+
+ +

Definition at line 26 of file ami_tx.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void AmiTx::proc_imp ()
+
+overridevirtual
+
+ +

Process the channel impulse response.

+ +

Implements AMIModel.

+ +

Definition at line 14 of file ami_tx.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool AmiTx::proc_sig (double * sig,
long len,
double * clock_times 
)
+
+overridevirtual
+
+ +

Process a signal.

+
Parameters
+ + + + +
sigA pointer to the array of doubles to be processed.
lenThe number of samples to process.
clock_timesA pointer to the array of doubles used for storing the clock times.
+
+
+
Returns
A Boolean flag, which is true if the model reached steady state, regarding any adaptation.
+

As per the IBIS standard, the user is allowed to presume that there has been enough storage allocated for clock_times, given the value of sig_len, sample_interval, and bit_time.

+
See also
init()
+ +

Implements AMIModel.

+ +

Definition at line 30 of file ami_tx.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
DigitalFilter* AmiTx::filter_
+
+protected
+
+ +

Used for pre-emphasis.

+ +

Definition at line 31 of file ami_tx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool AmiTx::have_preemph_
+
+protected
+
+ +

True, if I have a pre-emphasis filter.

+ +

Definition at line 32 of file ami_tx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int AmiTx::num_taps_
+
+protected
+
+ +

Number of taps in my pre-emphasis filter.

+ +

Definition at line 33 of file ami_tx.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> AmiTx::tap_weights_
+
+protected
+
+ +

Tap weights for pre-emphasis filter.

+ +

Definition at line 34 of file ami_tx.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/doc/html/class_d_f_e-members.html b/doc/html/class_d_f_e-members.html new file mode 100644 index 0000000..a98e1a1 --- /dev/null +++ b/doc/html/class_d_f_e-members.html @@ -0,0 +1,133 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
DFE Member List
+
+
+ +

This is the complete list of members for DFE, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
apply(double *sig, const long len, double *clock_times)DFEvirtual
backward_filter_DFEprotected
backward_filter_output_DFEprotected
cdr_locked_DFEprotected
clk_cntr_DFEprotected
clock_per_DFEprotected
clock_pers_DFEprotected
DFE(double slicer_output_mag, double error_gain, int adapt_mode, double sample_interval, double clock_per, const std::vector< double > &tap_weights)DFE
edge_sample_DFEprotected
err_gain_DFEprotected
get_weights()DFEinline
last_clk_sample_DFEprotected
last_summer_output_DFEprotected
max_weights_DFEprotected
min_weights_DFEprotected
modeDFE
next_backward_filter_output_DFEprotected
next_clock_DFEprotected
next_ui_edge_DFEprotected
sample_interval_DFEprotected
set_max_weights(std::vector< double > weights)DFEinline
set_min_weights(std::vector< double > weights)DFEinline
sim_time_DFEprotected
slicer_mag()DFEinline
slicer_mag_DFEprotected
tap_values_DFEprotected
tap_weights_DFEprotected
weights_DFEprotected
~DFE()DFEinlinevirtual
+ + + + diff --git a/doc/html/class_d_f_e.html b/doc/html/class_d_f_e.html new file mode 100644 index 0000000..f47aba7 --- /dev/null +++ b/doc/html/class_d_f_e.html @@ -0,0 +1,893 @@ + + + + + + +ibisami: DFE Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
DFE Class Reference
+
+
+ +

A generic DFE implementation. + More...

+ +

#include <dfe.h>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DFE (double slicer_output_mag, double error_gain, int adapt_mode, double sample_interval, double clock_per, const std::vector< double > &tap_weights)
 Constructor. More...
 
virtual ~DFE ()
 
virtual bool apply (double *sig, const long len, double *clock_times)
 Filter application. More...
 
std::vector< double > get_weights ()
 
void set_max_weights (std::vector< double > weights)
 
void set_min_weights (std::vector< double > weights)
 
double slicer_mag ()
 
+ + + +

+Public Attributes

int mode
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

FIRFilterbackward_filter_
 
std::vector< double > clock_pers_
 
std::vector< double > tap_weights_
 
std::vector< double > tap_values_
 
std::vector< double > min_weights_
 
std::vector< double > max_weights_
 
std::vector< std::vector< double > > weights_
 
unsigned long clk_cntr_
 
bool cdr_locked_
 
double sim_time_
 
double next_ui_edge_
 
double backward_filter_output_
 
double edge_sample_
 
double last_summer_output_
 
double sample_interval_
 
double clock_per_
 
double next_clock_
 
double last_clk_sample_
 
double slicer_mag_
 
double err_gain_
 
double next_backward_filter_output_
 
+

Detailed Description

+

A generic DFE implementation.

+ +

Definition at line 20 of file dfe.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DFE::DFE (double slicer_output_mag,
double error_gain,
int adapt_mode,
double sample_interval,
double clock_per,
const std::vector< double > & tap_weights 
)
+
+ +

Constructor.

+ +

Definition at line 21 of file dfe.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual DFE::~DFE ()
+
+inlinevirtual
+
+ +

Definition at line 25 of file dfe.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool DFE::apply (double * sig,
const long len,
double * clock_times 
)
+
+virtual
+
+ +

Filter application.

+ +

Definition at line 48 of file dfe.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::vector<double> DFE::get_weights ()
+
+inline
+
+ +

Definition at line 28 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void DFE::set_max_weights (std::vector< double > weights)
+
+inline
+
+ +

Definition at line 29 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void DFE::set_min_weights (std::vector< double > weights)
+
+inline
+
+ +

Definition at line 30 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double DFE::slicer_mag ()
+
+inline
+
+ +

Definition at line 31 of file dfe.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
FIRFilter* DFE::backward_filter_
+
+protected
+
+ +

Definition at line 34 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::backward_filter_output_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool DFE::cdr_locked_
+
+protected
+
+ +

Definition at line 38 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
unsigned long DFE::clk_cntr_
+
+protected
+
+ +

Definition at line 37 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::clock_per_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DFE::clock_pers_
+
+protected
+
+ +

Definition at line 35 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::edge_sample_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::err_gain_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::last_clk_sample_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::last_summer_output_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DFE::max_weights_
+
+protected
+
+ +

Definition at line 35 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DFE::min_weights_
+
+protected
+
+ +

Definition at line 35 of file dfe.h.

+ +
+
+ +
+
+ + + + +
int DFE::mode
+
+ +

Definition at line 27 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::next_backward_filter_output_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::next_clock_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::next_ui_edge_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::sample_interval_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::sim_time_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double DFE::slicer_mag_
+
+protected
+
+ +

Definition at line 39 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DFE::tap_values_
+
+protected
+
+ +

Definition at line 35 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DFE::tap_weights_
+
+protected
+
+ +

Definition at line 35 of file dfe.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<std::vector<double> > DFE::weights_
+
+protected
+
+ +

Definition at line 36 of file dfe.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/doc/html/class_digital_filter-members.html b/doc/html/class_digital_filter-members.html new file mode 100644 index 0000000..3341494 --- /dev/null +++ b/doc/html/class_digital_filter-members.html @@ -0,0 +1,111 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
DigitalFilter Member List
+
+
+ +

This is the complete list of members for DigitalFilter, including all inherited members.

+ + + + + + + + +
apply(double *sig, const long len)DigitalFilter
den_DigitalFilterprotected
DigitalFilter(const std::vector< double > &num, const std::vector< double > &den)DigitalFilter
num_DigitalFilterprotected
num_taps_DigitalFilterprotected
state_DigitalFilterprotected
~DigitalFilter()DigitalFilterinlinevirtual
+ + + + diff --git a/doc/html/class_digital_filter.html b/doc/html/class_digital_filter.html new file mode 100644 index 0000000..fb8ec45 --- /dev/null +++ b/doc/html/class_digital_filter.html @@ -0,0 +1,331 @@ + + + + + + +ibisami: DigitalFilter Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
DigitalFilter Class Reference
+
+
+ +

A generic digital filter implementation, using "Direct Form 2" processing. + More...

+ +

#include <digital_filter.h>

+ + + + + + + + + + +

+Public Member Functions

 DigitalFilter (const std::vector< double > &num, const std::vector< double > &den)
 Constructor. More...
 
virtual ~DigitalFilter ()
 
void apply (double *sig, const long len)
 Filter application. More...
 
+ + + + + + + + + +

+Protected Attributes

std::vector< double > num_
 
std::vector< double > den_
 
std::vector< double > state_
 
int num_taps_
 
+

Detailed Description

+

A generic digital filter implementation, using "Direct Form 2" processing.

+ +

Definition at line 18 of file digital_filter.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
DigitalFilter::DigitalFilter (const std::vector< double > & num,
const std::vector< double > & den 
)
+
+ +

Constructor.

+
Parameters
+ + + +
numA vector of doubles forming the numerator of the filter response.
denA vector of doubles forming the denominator of the filter response.
+
+
+ +

Definition at line 18 of file digital_filter.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual DigitalFilter::~DigitalFilter ()
+
+inlinevirtual
+
+ +

Definition at line 22 of file digital_filter.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void DigitalFilter::apply (double * sig,
const long len 
)
+
+ +

Filter application.

+
Parameters
+ + + +
sigA pointer to the vector of doubles to be processed.
lenThe number of samples to process.
+
+
+ +

Definition at line 49 of file digital_filter.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<double> DigitalFilter::den_
+
+protected
+
+ +

Definition at line 26 of file digital_filter.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DigitalFilter::num_
+
+protected
+
+ +

Definition at line 26 of file digital_filter.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int DigitalFilter::num_taps_
+
+protected
+
+ +

Definition at line 27 of file digital_filter.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> DigitalFilter::state_
+
+protected
+
+ +

Definition at line 26 of file digital_filter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/doc/html/class_f_i_r_filter-members.html b/doc/html/class_f_i_r_filter-members.html new file mode 100644 index 0000000..2750fd9 --- /dev/null +++ b/doc/html/class_f_i_r_filter-members.html @@ -0,0 +1,114 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
FIRFilter Member List
+
+
+ +

This is the complete list of members for FIRFilter, including all inherited members.

+ + + + + + + + + + + +
apply(double *sig, const long len)FIRFilter
delay_chain_FIRFilterprotected
FIRFilter(const std::vector< double > &weights, int oversample_factor=1)FIRFilterexplicit
get_values()FIRFilter
get_weights()FIRFilter
oversample_factor_FIRFilterprotected
set_weights(const std::vector< double > &new_weights)FIRFilterinline
step(double x)FIRFilter
weights_FIRFilterprotected
~FIRFilter()FIRFilterinlinevirtual
+ + + + diff --git a/doc/html/class_f_i_r_filter.html b/doc/html/class_f_i_r_filter.html new file mode 100644 index 0000000..33232fc --- /dev/null +++ b/doc/html/class_f_i_r_filter.html @@ -0,0 +1,411 @@ + + + + + + +ibisami: FIRFilter Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
FIRFilter Class Reference
+
+
+ +

A FIR (finite impulse response) filter implementation, with optional over-sampling. + More...

+ +

#include <fir_filter.h>

+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FIRFilter (const std::vector< double > &weights, int oversample_factor=1)
 Constructor. More...
 
virtual ~FIRFilter ()
 
void apply (double *sig, const long len)
 Filter application. More...
 
double step (double x)
 Filter single stepping. More...
 
void set_weights (const std::vector< double > &new_weights)
 
std::vector< double > get_weights ()
 
std::vector< double > get_values ()
 
+ + + + + + + +

+Protected Attributes

std::vector< double > weights_
 
std::vector< double > delay_chain_
 
int oversample_factor_
 
+

Detailed Description

+

A FIR (finite impulse response) filter implementation, with optional over-sampling.

+ +

Definition at line 18 of file fir_filter.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
FIRFilter::FIRFilter (const std::vector< double > & weights,
int oversample_factor = 1 
)
+
+explicit
+
+ +

Constructor.

+
Parameters
+ + + +
weightsA vector of doubles containing the desired filter tap weights.
oversample_factorAn integer giving the number of signal vector elements per weight.
+
+
+ +

Definition at line 19 of file fir_filter.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual FIRFilter::~FIRFilter ()
+
+inlinevirtual
+
+ +

Definition at line 21 of file fir_filter.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FIRFilter::apply (double * sig,
const long len 
)
+
+ +

Filter application.

+
Parameters
+ + + +
sigA pointer to the vector of doubles to be processed, in place.
lenThe number of samples to process.
+
+
+ +

Definition at line 30 of file fir_filter.cpp.

+ +
+
+ +
+
+ + + + + + + +
std::vector< double > FIRFilter::get_values ()
+
+ +

Definition at line 63 of file fir_filter.cpp.

+ +
+
+ +
+
+ + + + + + + +
std::vector< double > FIRFilter::get_weights ()
+
+ +

Definition at line 59 of file fir_filter.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void FIRFilter::set_weights (const std::vector< double > & new_weights)
+
+inline
+
+ +

Definition at line 24 of file fir_filter.h.

+ +
+
+ +
+
+ + + + + + + + +
double FIRFilter::step (double x)
+
+ +

Filter single stepping.

+
Parameters
+ + +
xThe input value to use, when stepping the filter.
+
+
+
Returns
The next output from the filter, after single stepping.
+ +

Definition at line 54 of file fir_filter.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<double> FIRFilter::delay_chain_
+
+protected
+
+ +

Definition at line 29 of file fir_filter.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int FIRFilter::oversample_factor_
+
+protected
+
+ +

Definition at line 30 of file fir_filter.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> FIRFilter::weights_
+
+protected
+
+ +

Definition at line 29 of file fir_filter.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/doc/html/class_my_rx-members.html b/doc/html/class_my_rx-members.html new file mode 100644 index 0000000..9bb53c7 --- /dev/null +++ b/doc/html/class_my_rx-members.html @@ -0,0 +1,146 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
MyRx Member List
+
+
+ +

This is the complete list of members for MyRx, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aggressors_AMIModelprotected
AmiRx()AmiRxinline
bit_time_AMIModelprotected
clog_AMIModelprotected
ctle_AmiRxprotected
dfe_AmiRxprotected
dfe_dump_file_AmiRxprotected
dfe_dump_stream_AmiRxprotected
dfe_input_file_AmiRxprotected
dfe_input_stream_AmiRxprotected
dump_adaptation_input_AmiRxprotected
dump_dfe_adaptation_AmiRxprotected
gen_data(double *res_vec)AMIModelprotected
gen_data_cnt_AMIModelprotected
gen_data_last_AMIModelprotected
get_param(const std::vector< std::string > &node_names) const AMIModelprotected
get_param_bool(const std::vector< std::string > &node_names, bool default_val) const AMIModelprotected
get_param_float(const std::vector< std::string > &node_names, double default_val) const AMIModelprotected
get_param_int(const std::vector< std::string > &node_names, long default_val) const AMIModelprotected
impulse_matrix_AMIModelprotected
init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) overrideMyRxinlinevirtual
init_adapt_tap_AmiRxprotected
log(std::string msg)AMIModelinlineprotected
log_AMIModelprotected
msg()AMIModelinline
msg_AMIModelprotected
MyRx()MyRxinline
name_AMIModelprotected
number_of_rows_AMIModelprotected
param_str()AMIModelinline
param_str_AMIModelprotected
param_tree_AMIModelprotected
parse_params(const std::string &AMI_parameters_in)AMIModelprotected
proc_imp() overrideAmiRxvirtual
proc_sig(double *sig, long len, double *clock_times) overrideAmiRxvirtual
sample_interval_AMIModelprotected
samples_per_bit_AMIModelprotected
shift_reg_AMIModelprotected
sig_tap_AmiRxprotected
~AMIModel()AMIModelinlinevirtual
~AmiRx()AmiRxinlinevirtual
~MyRx()MyRxinline
+ + + + diff --git a/doc/html/class_my_rx.html b/doc/html/class_my_rx.html new file mode 100644 index 0000000..419a680 --- /dev/null +++ b/doc/html/class_my_rx.html @@ -0,0 +1,356 @@ + + + + + + +ibisami: MyRx Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
MyRx Class Reference
+
+
+ +

An example device specific Rx model implementation. + More...

+
+Inheritance diagram for MyRx:
+
+
+ + +AmiRx +AMIModel + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MyRx ()
 Constructor. More...
 
 ~MyRx ()
 Destructor. More...
 
void init (double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
 Initializer. More...
 
- Public Member Functions inherited from AmiRx
 AmiRx ()
 
virtual ~AmiRx ()
 
void init (double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
 Initializer. More...
 
void proc_imp () override
 Override of AMIModel::proc_imp() specific to Rx models. More...
 
bool proc_sig (double *sig, long len, double *clock_times) override
 Override of AMIModel::proc_sig() specific to Rx models. More...
 
- Public Member Functions inherited from AMIModel
virtual ~AMIModel ()
 
std::string & msg ()
 Retrieve the model message. More...
 
std::string & param_str ()
 Retrieve the model parameter string. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from AMIModel
ParseRes parse_params (const std::string &AMI_parameters_in)
 Parse the incoming AMI parameter string. More...
 
std::string get_param (const std::vector< std::string > &node_names) const
 Get the string value of a parameter. More...
 
long get_param_int (const std::vector< std::string > &node_names, long default_val) const
 Get the value of an integer parameter. More...
 
double get_param_float (const std::vector< std::string > &node_names, double default_val) const
 Get the value of a floating point parameter. More...
 
bool get_param_bool (const std::vector< std::string > &node_names, bool default_val) const
 Get the value of a Boolean parameter. More...
 
void gen_data (double *res_vec)
 Generate random binary oversampled data. More...
 
void log (std::string msg)
 
- Protected Attributes inherited from AmiRx
DigitalFilterctle_
 
DFEdfe_
 
std::ofstream dfe_dump_stream_
 
std::ofstream dfe_input_stream_
 
bool dump_dfe_adaptation_
 
bool dump_adaptation_input_
 
std::string dfe_dump_file_
 
std::string dfe_input_file_
 
int sig_tap_
 
int init_adapt_tap_
 
- Protected Attributes inherited from AMIModel
std::string msg_
 
std::string param_str_
 
std::string name_
 
double sample_interval_
 
double bit_time_
 
double * impulse_matrix_
 
double gen_data_last_
 
long number_of_rows_
 
long aggressors_
 
long samples_per_bit_
 
unsigned long gen_data_cnt_
 
ibisami::ParamTree param_tree_
 
std::ofstream clog_
 
bool log_
 
int shift_reg_ [PRBS_LEN]
 
+

Detailed Description

+

An example device specific Rx model implementation.

+ +

Definition at line 21 of file example_rx.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
MyRx::MyRx ()
+
+inline
+
+ +

Constructor.

+ +

Definition at line 26 of file example_rx.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
MyRx::~MyRx ()
+
+inline
+
+ +

Destructor.

+ +

Definition at line 29 of file example_rx.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MyRx::init (double * impulse_matrix,
const long number_of_rows,
const long aggressors,
const double sample_interval,
const double bit_time,
const std::string & AMI_parameters_in 
)
+
+inlineoverridevirtual
+
+ +

Initializer.

+ +

Reimplemented from AMIModel.

+ +

Definition at line 32 of file example_rx.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/doc/html/class_my_tx-members.html b/doc/html/class_my_tx-members.html new file mode 100644 index 0000000..f386937 --- /dev/null +++ b/doc/html/class_my_tx-members.html @@ -0,0 +1,139 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
MyTx Member List
+
+
+ +

This is the complete list of members for MyTx, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aggressors_AMIModelprotected
bit_time_AMIModelprotected
clog_AMIModelprotected
filter_AmiTxprotected
gen_data(double *res_vec)AMIModelprotected
gen_data_cnt_AMIModelprotected
gen_data_last_AMIModelprotected
get_param(const std::vector< std::string > &node_names) const AMIModelprotected
get_param_bool(const std::vector< std::string > &node_names, bool default_val) const AMIModelprotected
get_param_float(const std::vector< std::string > &node_names, double default_val) const AMIModelprotected
get_param_int(const std::vector< std::string > &node_names, long default_val) const AMIModelprotected
have_preemph_AmiTxprotected
impulse_matrix_AMIModelprotected
init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) overrideMyTxinlinevirtual
log(std::string msg)AMIModelinlineprotected
log_AMIModelprotected
msg()AMIModelinline
msg_AMIModelprotected
MyTx()MyTxinline
name_AMIModelprotected
num_taps_AmiTxprotected
number_of_rows_AMIModelprotected
param_str()AMIModelinline
param_str_AMIModelprotected
param_tree_AMIModelprotected
parse_params(const std::string &AMI_parameters_in)AMIModelprotected
proc_imp() overrideAmiTxvirtual
proc_sig(double *sig, long len, double *clock_times) overrideAmiTxvirtual
sample_interval_AMIModelprotected
samples_per_bit_AMIModelprotected
shift_reg_AMIModelprotected
tap_weights_AmiTxprotected
~AMIModel()AMIModelinlinevirtual
~AmiTx()AmiTxinlinevirtual
~MyTx()MyTxinline
+ + + + diff --git a/doc/html/class_my_tx.html b/doc/html/class_my_tx.html new file mode 100644 index 0000000..1e30105 --- /dev/null +++ b/doc/html/class_my_tx.html @@ -0,0 +1,338 @@ + + + + + + +ibisami: MyTx Class Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
MyTx Class Reference
+
+
+ +

An example device specific Tx model implementation. + More...

+
+Inheritance diagram for MyTx:
+
+
+ + +AmiTx +AMIModel + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 MyTx ()
 
 ~MyTx ()
 
void init (double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
 Initialize the model. More...
 
- Public Member Functions inherited from AmiTx
virtual ~AmiTx ()
 
void proc_imp () override
 Process the channel impulse response. More...
 
bool proc_sig (double *sig, long len, double *clock_times) override
 Process a signal. More...
 
- Public Member Functions inherited from AMIModel
virtual ~AMIModel ()
 
std::string & msg ()
 Retrieve the model message. More...
 
std::string & param_str ()
 Retrieve the model parameter string. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from AMIModel
ParseRes parse_params (const std::string &AMI_parameters_in)
 Parse the incoming AMI parameter string. More...
 
std::string get_param (const std::vector< std::string > &node_names) const
 Get the string value of a parameter. More...
 
long get_param_int (const std::vector< std::string > &node_names, long default_val) const
 Get the value of an integer parameter. More...
 
double get_param_float (const std::vector< std::string > &node_names, double default_val) const
 Get the value of a floating point parameter. More...
 
bool get_param_bool (const std::vector< std::string > &node_names, bool default_val) const
 Get the value of a Boolean parameter. More...
 
void gen_data (double *res_vec)
 Generate random binary oversampled data. More...
 
void log (std::string msg)
 
- Protected Attributes inherited from AmiTx
DigitalFilterfilter_
 Used for pre-emphasis. More...
 
bool have_preemph_
 True, if I have a pre-emphasis filter. More...
 
int num_taps_
 Number of taps in my pre-emphasis filter. More...
 
std::vector< double > tap_weights_
 Tap weights for pre-emphasis filter. More...
 
- Protected Attributes inherited from AMIModel
std::string msg_
 
std::string param_str_
 
std::string name_
 
double sample_interval_
 
double bit_time_
 
double * impulse_matrix_
 
double gen_data_last_
 
long number_of_rows_
 
long aggressors_
 
long samples_per_bit_
 
unsigned long gen_data_cnt_
 
ibisami::ParamTree param_tree_
 
std::ofstream clog_
 
bool log_
 
int shift_reg_ [PRBS_LEN]
 
+

Detailed Description

+

An example device specific Tx model implementation.

+ +

Definition at line 18 of file example_tx.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
MyTx::MyTx ()
+
+inline
+
+ +

Definition at line 22 of file example_tx.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
MyTx::~MyTx ()
+
+inline
+
+ +

Definition at line 23 of file example_tx.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MyTx::init (double * impulse_matrix,
const long number_of_rows,
const long aggressors,
const double sample_interval,
const double bit_time,
const std::string & AMI_parameters_in 
)
+
+inlineoverridevirtual
+
+ +

Initialize the model.

+

(See AMI_Init() for parameter descriptions.)

See also
AMI_Init()
+ +

Reimplemented from AMIModel.

+ +

Definition at line 24 of file example_tx.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/doc/html/classes.html b/doc/html/classes.html new file mode 100644 index 0000000..78e859c --- /dev/null +++ b/doc/html/classes.html @@ -0,0 +1,121 @@ + + + + + + +ibisami: Class Index + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
A | D | F | M | N | P | V
+ + + + + + + + + + +
  A  
+
AmiTx   
  M  
+
  P  
+
  D  
+
AMIGrammar (ibisami)   MyRx   ParamTree (ibisami)   
AMIModel   DFE   MyTx   
  V  
+
AmiPointers   DigitalFilter   
  N  
+
AmiRx   
  F  
+
Value (ibisami)   
Node (ibisami)   
FIRFilter   
+
A | D | F | M | N | P | V
+
+ + + + diff --git a/doc/html/dfe_8cpp.html b/doc/html/dfe_8cpp.html new file mode 100644 index 0000000..e57a858 --- /dev/null +++ b/doc/html/dfe_8cpp.html @@ -0,0 +1,164 @@ + + + + + + +ibisami: src/dfe.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
dfe.cpp File Reference
+
+
+ +

Implementation of DFE class. +More...

+
#include <vector>
+#include <string>
+#include <sstream>
+#include "include/dfe.h"
+#include "include/util.h"
+
+

Go to the source code of this file.

+ + + + +

+Macros

#define CLKS_PER_ADAPTATION   1
 
+ + + +

+Variables

std::ostringstream debug_stream
 
+

Detailed Description

+

Implementation of DFE class.

+

Original author: David Banas
+ Original date: June 2, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file dfe.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define CLKS_PER_ADAPTATION   1
+
+ +

Definition at line 16 of file dfe.cpp.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
std::ostringstream debug_stream
+
+ +

Definition at line 17 of file amimodel.cpp.

+ +
+
+
+ + + + diff --git a/doc/html/dfe_8cpp_source.html b/doc/html/dfe_8cpp_source.html new file mode 100644 index 0000000..bffec7e --- /dev/null +++ b/doc/html/dfe_8cpp_source.html @@ -0,0 +1,236 @@ + + + + + + +ibisami: src/dfe.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
dfe.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <vector>
+
11 #include <string>
+
12 #include <sstream>
+
13 #include "include/dfe.h"
+
14 #include "include/util.h"
+
15 
+
16 #define CLKS_PER_ADAPTATION 1
+
17 
+
18 extern std::ostringstream debug_stream;
+
19 
+
21 DFE::DFE(double slicer_output_mag, double error_gain, int adapt_mode,
+
22  double sample_interval, double clock_per,
+
23  const std::vector<double>& tap_weights) {
+
24  // Capture the incoming configuration variables.
+
25  slicer_mag_ = slicer_output_mag;
+
26  err_gain_ = error_gain;
+
27  mode = adapt_mode;
+
28  tap_weights_ = tap_weights;
+
29  // Initialize our internal state.
+
30  clock_pers_.clear();
+
31  weights_.clear();
+
32  clk_cntr_ = 0L;
+
33  cdr_locked_ = true;
+
34  sim_time_ = 0.0;
+
35  next_ui_edge_ = 0.0;
+ + +
38  edge_sample_ = 0.0;
+
39  last_summer_output_ = 0.0;
+
40  sample_interval_ = sample_interval;
+
41  clock_per_ = clock_per;
+
42  next_clock_ = clock_per / 2.0;
+
43  last_clk_sample_ = 0.0;
+
44  backward_filter_ = new FIRFilter(tap_weights);
+
45 }
+
46 
+
48 bool DFE::apply(double *sig, const long len, double *clock_times) {
+
49  for (auto i = 0; i < len; i++) {
+
50  double summer_output = sig[i] - backward_filter_output_;
+
51  // Test if we're at a UI boundary, and act accordingly.
+
52  if (sim_time_ >= next_ui_edge_) {
+
53  backward_filter_output_ = next_backward_filter_output_;
+
54  summer_output = sig[i] - backward_filter_output_;
+ + +
57  }
+
58  // Test if we're at a clock instant, and act accordingly.
+
59  if (sim_time_ >= next_clock_) {
+
60  *clock_times++ = next_clock_;
+
61  double clk_sample = interp(last_summer_output_, summer_output, next_clock_, sim_time_, sample_interval_);
+
62  //clock_per_ = cdr_.adjust(last_clk_sample_, edge_sample_, clk_sample);
+
63  clock_pers_.push_back(clock_per_);
+ + +
66  double slicer_out = slicer_mag_ * sgn(clk_sample);
+
67  if ((mode > 1) && cdr_locked_ && !(clk_cntr_ % CLKS_PER_ADAPTATION)) {
+
68  double err = clk_sample - slicer_out;
+
69  std::vector<double> weights = backward_filter_->get_weights();
+
70  std::vector<double> values = backward_filter_->get_values();
+
71  int j = 0;
+
72  std::vector<double> new_weights;
+
73  for (auto weight : weights) {
+
74  double new_weight = weight + err * err_gain_ * values[j];
+
75  if (new_weight < min_weights_[j])
+
76  new_weight = min_weights_[j];
+
77  if (new_weight > max_weights_[j])
+
78  new_weight = max_weights_[j];
+
79  new_weights.push_back(new_weight);
+
80  j++;
+
81  }
+
82  backward_filter_->set_weights(new_weights);
+
83  weights_.push_back(new_weights);
+
84  }
+ +
86  last_clk_sample_ = clk_sample;
+
87  clk_cntr_++;
+
88  }
+ +
90  last_summer_output_ = summer_output;
+
91  sig[i] = summer_output;
+
92  }
+
93 
+
94  // Report on state of adaptation convergence, if appropriate.
+
95  if (mode > 1) {
+
96  // Divide the captured weights vector into 10 segments, for slope comparisons.
+
97  int slope_meas_interval = weights_.size() / 10;
+
98  double first_slope, last_slope;
+
99  for (auto i = 0; i < weights_[0].size(); i++) {
+
100  first_slope = abs(weights_[slope_meas_interval][i] - weights_[0][i]);
+
101  last_slope = abs(weights_.back()[i] - weights_[weights_.size() - slope_meas_interval][i]);
+
102  if (last_slope > 0.1 * first_slope)
+
103  return false; // We've not, yet, converged.
+
104  }
+
105  return true;
+
106  } else
+
107  return true;
+
108 }
+
109 
+
bool cdr_locked_
Definition: dfe.h:38
+
FIRFilter * backward_filter_
Definition: dfe.h:34
+
std::vector< double > clock_pers_
Definition: dfe.h:35
+
std::vector< double > get_weights()
Definition: fir_filter.cpp:59
+
double edge_sample_
Definition: dfe.h:39
+
A FIR (finite impulse response) filter implementation, with optional over-sampling.
Definition: fir_filter.h:18
+
double next_backward_filter_output_
Definition: dfe.h:39
+
double next_clock_
Definition: dfe.h:39
+
double clock_per_
Definition: dfe.h:39
+
unsigned long clk_cntr_
Definition: dfe.h:37
+
double last_clk_sample_
Definition: dfe.h:39
+
double last_summer_output_
Definition: dfe.h:39
+
std::ostringstream debug_stream
Definition: amimodel.cpp:17
+
int mode
Definition: dfe.h:27
+
std::vector< double > min_weights_
Definition: dfe.h:35
+
int sgn(T val)
The signum function.
Definition: util.h:17
+
double sim_time_
Definition: dfe.h:39
+
double sample_interval_
Definition: dfe.h:39
+
double next_ui_edge_
Definition: dfe.h:39
+
DFE(double slicer_output_mag, double error_gain, int adapt_mode, double sample_interval, double clock_per, const std::vector< double > &tap_weights)
Constructor.
Definition: dfe.cpp:21
+
double err_gain_
Definition: dfe.h:39
+
Small, generally useful utilities.
+
std::vector< double > get_values()
Definition: fir_filter.cpp:63
+
Interface to DFE class.
+
double backward_filter_output_
Definition: dfe.h:39
+
double interp(double last_x, double x, double ref_time, double time, double ref_period)
Linear interpolation.
Definition: util.cpp:11
+
double step(double x)
Filter single stepping.
Definition: fir_filter.cpp:54
+
void set_weights(const std::vector< double > &new_weights)
Definition: fir_filter.h:24
+
#define CLKS_PER_ADAPTATION
Definition: dfe.cpp:16
+
std::vector< std::vector< double > > weights_
Definition: dfe.h:36
+
std::vector< double > tap_weights_
Definition: dfe.h:35
+
virtual bool apply(double *sig, const long len, double *clock_times)
Filter application.
Definition: dfe.cpp:48
+
double slicer_mag_
Definition: dfe.h:39
+
std::vector< double > max_weights_
Definition: dfe.h:35
+
+ + + + diff --git a/doc/html/dfe_8h.html b/doc/html/dfe_8h.html new file mode 100644 index 0000000..a1d8ff3 --- /dev/null +++ b/doc/html/dfe_8h.html @@ -0,0 +1,128 @@ + + + + + + +ibisami: include/dfe.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
dfe.h File Reference
+
+
+ +

Interface to DFE class. +More...

+
#include <vector>
+#include <string>
+#include "include/fir_filter.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  DFE
 A generic DFE implementation. More...
 
+

Detailed Description

+

Interface to DFE class.

+

Original author: David Banas
+ Original date: June 4, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+

This class provides a decision feedback equalizer (DFE).

+ +

Definition in file dfe.h.

+
+ + + + diff --git a/doc/html/dfe_8h_source.html b/doc/html/dfe_8h_source.html new file mode 100644 index 0000000..5c99b83 --- /dev/null +++ b/doc/html/dfe_8h_source.html @@ -0,0 +1,170 @@ + + + + + + +ibisami: include/dfe.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
dfe.h
+
+
+Go to the documentation of this file.
1 
+
12 #ifndef INCLUDE_DFE_H_
+
13 #define INCLUDE_DFE_H_
+
14 
+
15 #include <vector>
+
16 #include <string>
+
17 #include "include/fir_filter.h"
+
18 
+
20 class DFE {
+
21  public:
+
22  DFE(double slicer_output_mag, double error_gain, int adapt_mode,
+
23  double sample_interval, double clock_per,
+
24  const std::vector<double>& tap_weights);
+
25  virtual ~DFE() {delete backward_filter_;}
+
26  virtual bool apply(double *sig, const long len, double *clock_times);
+
27  int mode;
+
28  std::vector<double> get_weights() {return backward_filter_->get_weights();}
+
29  void set_max_weights(std::vector<double> weights) {max_weights_ = weights;}
+
30  void set_min_weights(std::vector<double> weights) {min_weights_ = weights;}
+
31  double slicer_mag() {return slicer_mag_;}
+
32 
+
33  protected:
+ + +
36  std::vector<std::vector<double>> weights_;
+
37  unsigned long clk_cntr_;
+ + + + +
42 };
+
43 
+
44 #endif // INCLUDE_DFE_H_
+
45 
+
bool cdr_locked_
Definition: dfe.h:38
+
FIRFilter * backward_filter_
Definition: dfe.h:34
+
std::vector< double > clock_pers_
Definition: dfe.h:35
+
std::vector< double > get_weights()
Definition: fir_filter.cpp:59
+
double edge_sample_
Definition: dfe.h:39
+
A FIR (finite impulse response) filter implementation, with optional over-sampling.
Definition: fir_filter.h:18
+
double next_backward_filter_output_
Definition: dfe.h:39
+
void set_min_weights(std::vector< double > weights)
Definition: dfe.h:30
+
virtual ~DFE()
Definition: dfe.h:25
+
double next_clock_
Definition: dfe.h:39
+
std::vector< double > tap_values_
Definition: dfe.h:35
+
double clock_per_
Definition: dfe.h:39
+
std::vector< double > get_weights()
Definition: dfe.h:28
+
unsigned long clk_cntr_
Definition: dfe.h:37
+
double last_clk_sample_
Definition: dfe.h:39
+
double last_summer_output_
Definition: dfe.h:39
+
int mode
Definition: dfe.h:27
+
void set_max_weights(std::vector< double > weights)
Definition: dfe.h:29
+
std::vector< double > min_weights_
Definition: dfe.h:35
+
double sim_time_
Definition: dfe.h:39
+
Interface to FIRFilter class.
+
double sample_interval_
Definition: dfe.h:39
+
double next_ui_edge_
Definition: dfe.h:39
+
A generic DFE implementation.
Definition: dfe.h:20
+
DFE(double slicer_output_mag, double error_gain, int adapt_mode, double sample_interval, double clock_per, const std::vector< double > &tap_weights)
Constructor.
Definition: dfe.cpp:21
+
double err_gain_
Definition: dfe.h:39
+
double backward_filter_output_
Definition: dfe.h:39
+
double slicer_mag()
Definition: dfe.h:31
+
std::vector< std::vector< double > > weights_
Definition: dfe.h:36
+
std::vector< double > tap_weights_
Definition: dfe.h:35
+
virtual bool apply(double *sig, const long len, double *clock_times)
Filter application.
Definition: dfe.cpp:48
+
double slicer_mag_
Definition: dfe.h:39
+
std::vector< double > max_weights_
Definition: dfe.h:35
+
+ + + + diff --git a/doc/html/digital__filter_8cpp.html b/doc/html/digital__filter_8cpp.html new file mode 100644 index 0000000..4c4b74c --- /dev/null +++ b/doc/html/digital__filter_8cpp.html @@ -0,0 +1,117 @@ + + + + + + +ibisami: src/digital_filter.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
digital_filter.cpp File Reference
+
+
+ +

Implementation of DigitalFilter class. +More...

+
#include <vector>
+#include "include/digital_filter.h"
+
+

Go to the source code of this file.

+

Detailed Description

+

Implementation of DigitalFilter class.

+

Original author: David Banas
+ Original date: May 7, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file digital_filter.cpp.

+
+ + + + diff --git a/doc/html/digital__filter_8cpp_source.html b/doc/html/digital__filter_8cpp_source.html new file mode 100644 index 0000000..1454bd0 --- /dev/null +++ b/doc/html/digital__filter_8cpp_source.html @@ -0,0 +1,164 @@ + + + + + + +ibisami: src/digital_filter.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
digital_filter.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <vector>
+
11 #include "include/digital_filter.h"
+
12 
+
14 
+
18 DigitalFilter::DigitalFilter(const std::vector<double>& num,
+
19  const std::vector<double>& den) {
+
20  // Our "apply" function assumes den_[0] (i.e. - a0) = 1,
+
21  // and that num_ and den_ have the same length.
+
22  num_ = num;
+
23  den_ = den;
+
24  auto len = num_.size();
+
25  if (den_.size() > len) {
+
26  len = den_.size();
+
27  num_.resize(len, 0.0);
+
28  } else {
+
29  den_.resize(len, 0.0);
+
30  }
+
31  auto norm = den_[0];
+
32  auto i = 0;
+
33  for (auto dummy : num_) {
+
34  num_[i] /= norm;
+
35  den_[i] /= norm;
+
36  i++;
+
37  }
+
38  // Initialize our internal state.
+
39  state_.clear();
+
40  state_.resize(len, 0.0);
+
41  num_taps_ = len;
+
42 }
+
43 
+
45 
+
49 void DigitalFilter::apply(double *sig, const long len) {
+
50  double accum;
+
51 
+
52  // This "direct form 2" implementation comes from
+
53  // "Digital Signal Processing" by Mullis & Roberts.
+
54  for (auto i = 0; i < len; i++) {
+
55  // Advance the "w"s.
+
56  for (auto j = (num_taps_ - 1); j > 0; j--)
+
57  state_[j] = state_[j - 1];
+
58  // Calculate the new w[0] value.
+
59  accum = sig[i];
+
60  for (auto j = 1; j < num_taps_; j++)
+
61  accum -= state_[j] * den_[j];
+
62  state_[0] = accum;
+
63  // Calculate the next `y' value.
+
64  accum = 0;
+
65  for (auto j = 0; j < num_taps_; j++)
+
66  accum += state_[j] * num_[j];
+
67  sig[i] = accum;
+
68  }
+
69 }
+
70 
+ +
std::vector< double > num_
+
std::vector< double > den_
+
DigitalFilter(const std::vector< double > &num, const std::vector< double > &den)
Constructor.
+
Interface to DigitalFilter class.
+
void apply(double *sig, const long len)
Filter application.
+
std::vector< double > state_
+
+ + + + diff --git a/doc/html/digital__filter_8h.html b/doc/html/digital__filter_8h.html new file mode 100644 index 0000000..a2360ae --- /dev/null +++ b/doc/html/digital__filter_8h.html @@ -0,0 +1,126 @@ + + + + + + +ibisami: include/digital_filter.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
digital_filter.h File Reference
+
+
+ +

Interface to DigitalFilter class. +More...

+
#include <vector>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  DigitalFilter
 A generic digital filter implementation, using "Direct Form 2" processing. More...
 
+

Detailed Description

+

Interface to DigitalFilter class.

+

Original author: David Banas
+ Original date: May 7, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+

This class provides a generic digital filter.

+ +

Definition in file digital_filter.h.

+
+ + + + diff --git a/doc/html/digital__filter_8h_source.html b/doc/html/digital__filter_8h_source.html new file mode 100644 index 0000000..03d8226 --- /dev/null +++ b/doc/html/digital__filter_8h_source.html @@ -0,0 +1,131 @@ + + + + + + +ibisami: include/digital_filter.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
digital_filter.h
+
+
+Go to the documentation of this file.
1 
+
12 #ifndef INCLUDE_DIGITAL_FILTER_H_
+
13 #define INCLUDE_DIGITAL_FILTER_H_
+
14 
+
15 #include <vector>
+
16 
+ +
19  public:
+
20  DigitalFilter(const std::vector<double>& num,
+
21  const std::vector<double>& den);
+
22  virtual ~DigitalFilter() {}
+
23  void apply(double *sig, const long len);
+
24 
+
25  protected:
+
26  std::vector<double> num_, den_, state_;
+
27  int num_taps_;
+
28 };
+
29 
+
30 #endif // INCLUDE_DIGITAL_FILTER_H_
+
31 
+ +
virtual ~DigitalFilter()
+
std::vector< double > num_
+
A generic digital filter implementation, using "Direct Form 2" processing.
+
std::vector< double > den_
+
DigitalFilter(const std::vector< double > &num, const std::vector< double > &den)
Constructor.
+
void apply(double *sig, const long len)
Filter application.
+
std::vector< double > state_
+
+ + + + diff --git a/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..dcbe040 --- /dev/null +++ b/doc/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,125 @@ + + + + + + +ibisami: src Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  ami_rx.cpp [code]
 Implementation of AmiRx class.
 
file  ami_tx.cpp [code]
 Implementation of AmiTx class.
 
file  amimodel.cpp [code]
 Implementation of AMIModel class.
 
file  dfe.cpp [code]
 Implementation of DFE class.
 
file  digital_filter.cpp [code]
 Implementation of DigitalFilter class.
 
file  fir_filter.cpp [code]
 Implementation of FIRFilter class.
 
file  ibisami_api.cpp [code]
 Provides IBIS-AMI API and necessary bootstrapping.
 
file  util.cpp [code]
 Small, generally useful utilities.
 
+
+ + + + diff --git a/doc/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html b/doc/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html new file mode 100644 index 0000000..a347986 --- /dev/null +++ b/doc/html/dir_cfafba98a580ce4b62f8a6fa96d7cbb0.html @@ -0,0 +1,113 @@ + + + + + + +ibisami: example Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
example Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

file  example_rx.cpp [code]
 Example of using ibisami to build a Rx model.
 
file  example_rx.py [code]
 
file  example_tx.cpp [code]
 Example of using ibisami to build a Tx model.
 
file  example_tx.py [code]
 
file  test.py [code]
 
+
+ + + + diff --git a/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..550eaf0 --- /dev/null +++ b/doc/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,122 @@ + + + + + + +ibisami: include Directory Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  ami_rx.h [code]
 Interface to AmiRx class.
 
file  ami_tx.h [code]
 Interface to AmiTx class.
 
file  amimodel.h [code]
 Interface to AMIModel class.
 
file  dfe.h [code]
 Interface to DFE class.
 
file  digital_filter.h [code]
 Interface to DigitalFilter class.
 
file  fir_filter.h [code]
 Interface to FIRFilter class.
 
file  util.h [code]
 Small, generally useful utilities.
 
+
+ + + + diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css new file mode 100644 index 0000000..a000833 --- /dev/null +++ b/doc/html/doxygen.css @@ -0,0 +1,1449 @@ +/* The standard CSS for doxygen 1.8.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/doc/html/dynsections.js b/doc/html/dynsections.js new file mode 100644 index 0000000..1e6bf07 --- /dev/null +++ b/doc/html/dynsections.js @@ -0,0 +1,104 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +ibisami: example/example_rx.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_rx.cpp File Reference
+
+
+ +

Example of using ibisami to build a Rx model. +More...

+
#include <string>
+#include <vector>
+#include "include/ami_rx.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  MyRx
 An example device specific Rx model implementation. More...
 
+ + + + + + + + + + + +

+Macros

#define PI   3.14159
 
#define RX_BW   30.0e9
 
#define CTLE_DC_GAIN   1.0
 
#define DFE_DUMP_FILE   "example_rx_dfe_dump.csv"
 
#define DFE_INPUT_FILE   "example_rx_dfe_input.csv"
 
+ + + + + + +

+Variables

MyRx my_rx
 
AMIModelami_model = &my_rx
 The pointer required by the API implementation. More...
 
+

Detailed Description

+

Example of using ibisami to build a Rx model.

+

Original author: David Banas
+ Original date: May 20, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file example_rx.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define CTLE_DC_GAIN   1.0
+
+ +

Definition at line 16 of file example_rx.cpp.

+ +
+
+ +
+
+ + + + +
#define DFE_DUMP_FILE   "example_rx_dfe_dump.csv"
+
+ +

Definition at line 17 of file example_rx.cpp.

+ +
+
+ +
+
+ + + + +
#define DFE_INPUT_FILE   "example_rx_dfe_input.csv"
+
+ +

Definition at line 18 of file example_rx.cpp.

+ +
+
+ +
+
+ + + + +
#define PI   3.14159
+
+ +

Definition at line 14 of file example_rx.cpp.

+ +
+
+ +
+
+ + + + +
#define RX_BW   30.0e9
+
+ +

Definition at line 15 of file example_rx.cpp.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
AMIModel* ami_model = &my_rx
+
+ +

The pointer required by the API implementation.

+

Defined in our device-specific source code file.

+ +

Definition at line 171 of file example_rx.cpp.

+ +
+
+ +
+
+ + + + +
MyRx my_rx
+
+ +
+
+
+ + + + diff --git a/doc/html/example__rx_8cpp_source.html b/doc/html/example__rx_8cpp_source.html new file mode 100644 index 0000000..5672714 --- /dev/null +++ b/doc/html/example__rx_8cpp_source.html @@ -0,0 +1,294 @@ + + + + + + +ibisami: example/example_rx.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
example_rx.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <string>
+
11 #include <vector>
+
12 #include "include/ami_rx.h"
+
13 
+
14 #define PI 3.14159
+
15 #define RX_BW 30.0e9
+
16 #define CTLE_DC_GAIN 1.0
+
17 #define DFE_DUMP_FILE "example_rx_dfe_dump.csv"
+
18 #define DFE_INPUT_FILE "example_rx_dfe_input.csv"
+
19 
+
21 class MyRx : public AmiRx {
+
22  typedef AmiRx inherited;
+
23 
+
24  public:
+
26  MyRx() { }
+
27 
+
29  ~MyRx() { }
+
30 
+
32  void init(double *impulse_matrix, const long number_of_rows,
+
33  const long aggressors, const double sample_interval,
+
34  const double bit_time, const std::string& AMI_parameters_in) override {
+
35  // Let our base class do its thing.
+
36  inherited::init(impulse_matrix, number_of_rows, aggressors,
+
37  sample_interval, bit_time, AMI_parameters_in);
+
38 
+
39  // Grab our parameters and configure things accordingly.
+
40  std::vector<std::string> node_names; node_names.clear();
+
41  std::ostringstream msg;
+
42 
+
43  msg << "Initializing Rx...\n";
+
44 
+
45  node_names.push_back("ctle_mode");
+
46  int ctle_mode;
+
47  ctle_mode = get_param_int(node_names, 0);
+
48  node_names.pop_back();
+
49  node_names.push_back("ctle_freq");
+
50  float ctle_freq;
+
51  ctle_freq = get_param_float(node_names, 5000000000.0);
+
52  node_names.pop_back();
+
53  node_names.push_back("dfe_mode");
+
54  int dfe_mode;
+
55  dfe_mode = get_param_int(node_names, 0);
+
56  node_names.pop_back();
+
57  node_names.push_back("dfe_tap3");
+
58  int dfe_tap3;
+
59  dfe_tap3 = get_param_int(node_names, 0);
+
60  node_names.pop_back();
+
61  node_names.push_back("dfe_tap2");
+
62  int dfe_tap2;
+
63  dfe_tap2 = get_param_int(node_names, 0);
+
64  node_names.pop_back();
+
65  node_names.push_back("dfe_tap1");
+
66  int dfe_tap1;
+
67  dfe_tap1 = get_param_int(node_names, 0);
+
68  node_names.pop_back();
+
69  node_names.push_back("dfe_ntaps");
+
70  int dfe_ntaps;
+
71  dfe_ntaps = get_param_int(node_names, 5);
+
72  node_names.pop_back();
+
73  node_names.push_back("dfe_tap5");
+
74  int dfe_tap5;
+
75  dfe_tap5 = get_param_int(node_names, 0);
+
76  node_names.pop_back();
+
77  node_names.push_back("dfe_tap4");
+
78  int dfe_tap4;
+
79  dfe_tap4 = get_param_int(node_names, 0);
+
80  node_names.pop_back();
+
81  node_names.push_back("dfe_vout");
+
82  float dfe_vout;
+
83  dfe_vout = get_param_float(node_names, 1.0);
+
84  node_names.pop_back();
+
85  node_names.push_back("ctle_mag");
+
86  float ctle_mag;
+
87  ctle_mag = get_param_float(node_names, 0.0);
+
88  node_names.pop_back();
+
89  node_names.push_back("dfe_gain");
+
90  float dfe_gain;
+
91  dfe_gain = get_param_float(node_names, 0.1);
+
92  node_names.pop_back();
+
93  node_names.push_back("debug");
+
94  node_names.push_back("dump_adaptation_input");
+
95  bool dump_adaptation_input;
+
96  dump_adaptation_input = get_param_bool(node_names, false);
+
97  node_names.pop_back();
+
98  node_names.push_back("dump_dfe_adaptation");
+
99  bool dump_dfe_adaptation;
+
100  dump_dfe_adaptation = get_param_bool(node_names, false);
+
101  node_names.pop_back();
+
102  node_names.push_back("dbg_enable");
+
103  bool dbg_enable;
+
104  dbg_enable = get_param_bool(node_names, false);
+
105  node_names.pop_back();
+
106  node_names.pop_back();
+
107 
+
108 
+
109  if (ctle_mode) {
+
110  // Calculate the zero and poles needed to meet the response spec.
+
111  double p2 = -2. * PI * RX_BW;
+
112  double p1 = -2. * PI * ctle_freq;
+
113  double z = p1 / pow(10., ctle_mag / 20.);
+
114 
+
115  // Use matched-z transform to convert them to numerator/denominator of transfer function.
+
116  z = exp(z * sample_interval);
+
117  p1 = exp(p1 * sample_interval);
+
118  p2 = exp(p2 * sample_interval);
+
119  std::vector<double> num = {1.0, -z, 0.0};
+
120  for (auto i = 0; i < num.size(); i++)
+
121  num[i] *= (1 - p1) * (1 - p2) * CTLE_DC_GAIN / (1 - z);
+
122  std::vector<double> den = {1.0, -(p1 + p2), p1 * p2};
+
123  ctle_ = new DigitalFilter(num, den);
+
124  if (!ctle_)
+
125  throw std::runtime_error("ERROR: MyRx::init() could not allocate a DigitalFilter for its CTLE!");
+
126  }
+
127 
+
128  if (dfe_mode) {
+
129  std::vector<double> tap_weights; tap_weights.clear();
+
130  tap_weights.push_back(dfe_tap1);
+
131  tap_weights.push_back(dfe_tap2);
+
132  tap_weights.push_back(dfe_tap3);
+
133  tap_weights.push_back(dfe_tap4);
+
134  tap_weights.push_back(dfe_tap5);
+
135  dfe_ = new DFE(dfe_vout, dfe_gain, dfe_mode, sample_interval, bit_time, tap_weights);
+
136  if (!dfe_)
+
137  throw std::runtime_error("ERROR: MyRx::init() could not allocate a DFE!");
+
138  std::vector<double> max_weights {0.5, 0.4, 0.3, 0.2, 0.1};
+
139  std::vector<double> min_weights {-0.5, -0.4, -0.3, -0.2, -0.1};
+
140  dfe_->set_max_weights(max_weights);
+
141  dfe_->set_min_weights(min_weights);
+
142  }
+
143 
+
144  if (dbg_enable) {
+
145  if (dump_dfe_adaptation_) {
+ +
147  }
+ + +
150  }
+
151  }
+
152 
+
153  // Fill in message string.
+
154  msg << "ibisami example Rx model was configured successfully, as follows:\n";
+
155  if (ctle_mode)
+
156  msg << "\tCTLE: " << ctle_mag << " dB boost at " << ctle_freq / 1.0e9 << " GHz\n";
+
157  else
+
158  msg << "\tCTLE: not present\n";
+
159  if (dfe_mode) {
+
160  msg << "\tDFE: mode: " << dfe_mode << " vout: " << dfe_vout << " gain: " << dfe_gain << "\n";
+
161  std::vector<double> tmp_weights = dfe_->get_weights();
+
162  for (auto i = 0; i < dfe_ntaps; i++)
+
163  msg << "\t\ttap" << i + 1 << ": " << tmp_weights[i] << "\n";
+
164  }
+
165  else
+
166  msg << "\tDFE: not present\n";
+
167  msg_ += msg.str();
+
168  }
+
169 } my_rx;
+
170 
+ +
172 
+
void set_min_weights(std::vector< double > weights)
Definition: dfe.h:30
+
~MyRx()
Destructor.
Definition: example_rx.cpp:29
+
#define CTLE_DC_GAIN
Definition: example_rx.cpp:16
+
std::vector< double > get_weights()
Definition: dfe.h:28
+
bool dump_dfe_adaptation_
Definition: ami_rx.h:39
+
MyRx my_rx
+
double get_param_float(const std::vector< std::string > &node_names, double default_val) const
Get the value of a floating point parameter.
Definition: amimodel.cpp:119
+
void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
Initializer.
Definition: ami_rx.cpp:22
+
#define DFE_INPUT_FILE
Definition: example_rx.cpp:18
+
#define PI
Definition: example_rx.cpp:14
+
void set_max_weights(std::vector< double > weights)
Definition: dfe.h:29
+
std::string & msg()
Retrieve the model message.
Definition: amimodel.h:159
+
MyRx()
Constructor.
Definition: example_rx.cpp:26
+
#define RX_BW
Definition: example_rx.cpp:15
+
long get_param_int(const std::vector< std::string > &node_names, long default_val) const
Get the value of an integer parameter.
Definition: amimodel.cpp:80
+
A generic digital filter implementation, using "Direct Form 2" processing.
+
AMIModel * ami_model
The pointer required by the API implementation.
Definition: example_rx.cpp:171
+
A generic DFE implementation.
Definition: dfe.h:20
+
#define DFE_DUMP_FILE
Definition: example_rx.cpp:17
+
bool get_param_bool(const std::vector< std::string > &node_names, bool default_val) const
Get the value of a Boolean parameter.
Definition: amimodel.cpp:158
+
Interface to AmiRx class.
+
std::string dfe_input_file_
Definition: ami_rx.h:40
+
std::string msg_
Definition: amimodel.h:171
+
An example device specific Rx model implementation.
Definition: example_rx.cpp:21
+
std::string dfe_dump_file_
Definition: ami_rx.h:40
+
void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
Initializer.
Definition: example_rx.cpp:32
+
DigitalFilter * ctle_
Definition: ami_rx.h:36
+
DFE * dfe_
Definition: ami_rx.h:37
+
Abstract class providing the base functionality required by all IBIS-AMI models.
Definition: amimodel.h:121
+
bool dump_adaptation_input_
Definition: ami_rx.h:39
+
A generic IBIS-AMI Rx model implementation.
Definition: ami_rx.h:24
+
+ + + + diff --git a/doc/html/example__rx_8py.html b/doc/html/example__rx_8py.html new file mode 100644 index 0000000..28242ef --- /dev/null +++ b/doc/html/example__rx_8py.html @@ -0,0 +1,125 @@ + + + + + + +ibisami: example/example_rx.py File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_rx.py File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

 example_rx
 
+ + + + + + + + + +

+Variables

string example_rx.kFileBaseName = 'example_rx'
 
string example_rx.kDescription = 'Example Rx model from ibisami package.'
 
dictionary example_rx.ibis_params
 
dictionary example_rx.ami_params
 
+
+ + + + diff --git a/doc/html/example__rx_8py_source.html b/doc/html/example__rx_8py_source.html new file mode 100644 index 0000000..f1bc033 --- /dev/null +++ b/doc/html/example__rx_8py_source.html @@ -0,0 +1,302 @@ + + + + + + +ibisami: example/example_rx.py Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
example_rx.py
+
+
+Go to the documentation of this file.
1 #! /usr/bin/env python
+
2 
+
3 """
+
4 Model configurator for ibisami example Rx model.
+
5 
+
6 Original author: David Banas
+
7 Original date: March 24, 2016
+
8 
+
9 The intent is that this example configurator can be used as a starting
+
10 point for other custom models.
+
11 
+
12 Copyright (c) 2016 David Banas; all rights reserved World wide.
+
13 """
+
14 
+
15 kFileBaseName = 'example_rx'
+
16 kDescription = 'Example Rx model from ibisami package.'
+
17 
+
18 # These are used to configure the IBIS model.
+
19 #
+
20 # Lists should contain 3 values:
+
21 # typical, min/slow/weak, and max/fast/strong, in that order.
+
22 # (The singular exception is 'c_comp', which should contain 3 values,
+
23 # in NUMERICAL typ, min, max order.)
+
24 ibis_params = {
+
25  'file_name' : kFileBaseName + '.ibs',
+
26  'file_rev' : 'v0.1',
+
27  'copyright' : "Copyright (c) 2016 David Banas; all rights reserved World wide.",
+
28  'component' : "Example_Rx",
+
29  'manufacturer' : "(n/a)",
+
30  'r_pkg' : [0.1, 0.001, 0.5],
+
31  'l_pkg' : [10.e-9, 0.1e-9, 50.e-9],
+
32  'c_pkg' : [1.e-12, 0.01e-12, 5.e-12],
+
33  'model_name' : kFileBaseName,
+
34  'model_type' : 'Input',
+
35  'c_comp' : [1.e-12, 0.01e-12, 5.e-12],
+
36  'v_ref' : 0,
+
37  'r_ref' : 0,
+
38  'c_ref' : 0,
+
39  'slew_rate' : 0,
+
40  'v_meas' : 0.5,
+
41  'temperature_range' : [25, 0, 100],
+
42  'voltage_range' : [1.8, 1.62, 1.98],
+
43  'impedance' : [50., 45., 55.],
+
44 }
+
45 
+
46 # These are used to configure the AMI model.
+
47 ami_params = {
+
48  # These will go in the [Reserved_Parameters] section of the *.AMI file.
+
49  'reserved' : {
+
50  'AMI_Version' : {
+
51  'type' : 'STRING',
+
52  'usage' : 'Info',
+
53  'format' : 'Value',
+
54  'default' : '"5.1"',
+
55  'description' : '"Version of IBIS standard we comply with."',
+
56  },
+
57  'Init_Returns_Impulse' : {
+
58  'type' : 'BOOL',
+
59  'usage' : 'Info',
+
60  'format' : 'Value',
+
61  'default' : 'True',
+
62  'description' : '"In fact, this model is, currently, Init()-only."',
+
63  },
+
64  'GetWave_Exists' : {
+
65  'type' : 'BOOL',
+
66  'usage' : 'Info',
+
67  'format' : 'Value',
+
68  'default' : 'False',
+
69  'description' : '"This model is, currently, Init()-only."',
+
70  },
+
71  },
+
72 
+
73  # These will go in the [Model_Specific] section of the *.AMI file.
+
74  'model' : {
+
75  'ctle_mode' : {
+
76  'type' : 'INT',
+
77  'usage' : 'In',
+
78  'format' : 'List',
+
79  'values' : [ 0, 1],
+
80  'labels' : ['"Off"', '"Manual"'],
+
81  'default' : 0,
+
82  'description' : '"CTLE operating mode."',
+
83  },
+
84  'ctle_freq' : {
+
85  'type' : 'FLOAT',
+
86  'usage' : 'In',
+
87  'format' : 'Range',
+
88  'min' : 1.0e9,
+
89  'max' : 5.0e9,
+
90  'default' : 5.0e9,
+
91  'description' : '"CTLE peaking frequency."',
+
92  },
+
93  'ctle_mag' : {
+
94  'type' : 'FLOAT',
+
95  'usage' : 'In',
+
96  'format' : 'Range',
+
97  'min' : 0.0,
+
98  'max' : 12.0,
+
99  'default' : 0.0,
+
100  'description' : '"CTLE peaking frequency."',
+
101  },
+
102  'dfe_mode' : {
+
103  'type' : 'INT',
+
104  'usage' : 'In',
+
105  'format' : 'List',
+
106  'values' : [ 0, 1, 2],
+
107  'labels' : ['"Off"', '"Manual"', '"Adaptive"'],
+
108  'default' : 0,
+
109  'description' : '"DFE operating mode."',
+
110  },
+
111  'dfe_ntaps' : {
+
112  'type' : 'INT',
+
113  'usage' : 'In',
+
114  'format' : 'Value',
+
115  'default' : 5,
+
116  'description' : '"Number of DFE taps."',
+
117  },
+
118  'dfe_tap1' : {
+
119  'type' : 'INT',
+
120  'usage' : 'In',
+
121  'format' : 'Value',
+
122  'default' : 0,
+
123  'description' : '"DFE tap 1 initial value."',
+
124  },
+
125  'dfe_tap2' : {
+
126  'type' : 'INT',
+
127  'usage' : 'In',
+
128  'format' : 'Value',
+
129  'default' : 0,
+
130  'description' : '"DFE tap 2 initial value."',
+
131  },
+
132  'dfe_tap3' : {
+
133  'type' : 'INT',
+
134  'usage' : 'In',
+
135  'format' : 'Value',
+
136  'default' : 0,
+
137  'description' : '"DFE tap 3 initial value."',
+
138  },
+
139  'dfe_tap4' : {
+
140  'type' : 'INT',
+
141  'usage' : 'In',
+
142  'format' : 'Value',
+
143  'default' : 0,
+
144  'description' : '"DFE tap 4 initial value."',
+
145  },
+
146  'dfe_tap5' : {
+
147  'type' : 'INT',
+
148  'usage' : 'In',
+
149  'format' : 'Value',
+
150  'default' : 0,
+
151  'description' : '"DFE tap 5 initial value."',
+
152  },
+
153  'dfe_vout' : {
+
154  'type' : 'FLOAT',
+
155  'usage' : 'In',
+
156  'format' : 'Range',
+
157  'min' : 0.0,
+
158  'max' : 1.0,
+
159  'default' : 1.0,
+
160  'description' : '"DFE slicer output voltage magnitude."',
+
161  },
+
162  'dfe_gain' : {
+
163  'type' : 'FLOAT',
+
164  'usage' : 'In',
+
165  'format' : 'Range',
+
166  'min' : 0.0,
+
167  'max' : 1.0,
+
168  'default' : 0.1,
+
169  'description' : '"DFE error feedback gain."',
+
170  },
+
171  'debug' : {
+
172  'subs' : {
+
173  'dbg_enable' : {
+
174  'type' : 'BOOL',
+
175  'usage' : 'In',
+
176  'format' : 'Value',
+
177  'default' : 'False',
+
178  'description' : '"Master debug enable."',
+
179  },
+
180  'dump_dfe_adaptation' : {
+
181  'type' : 'BOOL',
+
182  'usage' : 'In',
+
183  'format' : 'Value',
+
184  'default' : 'False',
+
185  'description' : '"Dump the DFE adaptation results."',
+
186  },
+
187  'dump_adaptation_input' : {
+
188  'type' : 'BOOL',
+
189  'usage' : 'In',
+
190  'format' : 'Value',
+
191  'default' : 'False',
+
192  'description' : '"Dump the DFE summing node input."',
+
193  },
+
194  },
+
195  'description' : '"Debugging options."',
+
196  },
+
197  },
+
198 }
+
199 
+
+ + + + diff --git a/doc/html/example__tx_8cpp.html b/doc/html/example__tx_8cpp.html new file mode 100644 index 0000000..2ef91aa --- /dev/null +++ b/doc/html/example__tx_8cpp.html @@ -0,0 +1,187 @@ + + + + + + +ibisami: example/example_tx.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_tx.cpp File Reference
+
+
+ +

Example of using ibisami to build a Tx model. +More...

+
#include <string>
+#include <vector>
+#include "include/ami_tx.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  MyTx
 An example device specific Tx model implementation. More...
 
+ + + +

+Macros

#define TAP_SCALE   0.047
 
+ + + + + + +

+Variables

MyTx my_tx
 
AMIModelami_model = &my_tx
 The pointer required by the API implementation. More...
 
+

Detailed Description

+

Example of using ibisami to build a Tx model.

+

Original author: David Banas
+ Original date: May 8, 2015 Initial conversion to EmPy template format: Feb 25, 2016

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file example_tx.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define TAP_SCALE   0.047
+
+ +

Definition at line 11 of file example_tx.cpp.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
AMIModel* ami_model = &my_tx
+
+ +

The pointer required by the API implementation.

+

Defined in our device-specific source code file.

+ +

Definition at line 87 of file example_tx.cpp.

+ +
+
+ +
+
+ + + + +
MyTx my_tx
+
+ +
+
+
+ + + + diff --git a/doc/html/example__tx_8cpp_source.html b/doc/html/example__tx_8cpp_source.html new file mode 100644 index 0000000..771dcd9 --- /dev/null +++ b/doc/html/example__tx_8cpp_source.html @@ -0,0 +1,198 @@ + + + + + + +ibisami: example/example_tx.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
example_tx.cpp
+
+
+Go to the documentation of this file.
1 
+
11 #define TAP_SCALE 0.047
+
12 
+
13 #include <string>
+
14 #include <vector>
+
15 #include "include/ami_tx.h"
+
16 
+
18 class MyTx : public AmiTx {
+
19  typedef AmiTx inherited;
+
20 
+
21  public:
+
22  MyTx() {}
+
23  ~MyTx() {}
+
24  void init(double *impulse_matrix, const long number_of_rows,
+
25  const long aggressors, const double sample_interval,
+
26  const double bit_time, const std::string& AMI_parameters_in) override {
+
27 
+
28  // Let our base class do its thing.
+
29  inherited::init(impulse_matrix, number_of_rows, aggressors,
+
30  sample_interval, bit_time, AMI_parameters_in);
+
31 
+
32  // Grab our parameters and configure things accordingly.
+
33  std::vector<std::string> node_names; node_names.clear();
+
34  std::ostringstream msg;
+
35 
+
36  msg << "Initializing Tx...\n";
+
37 
+
38  int taps[4];
+
39  int tx_tap_nm2 ;
+
40  node_names.push_back("tx_tap_nm2");
+
41  tx_tap_nm2 = get_param_int(node_names, 0 );
+
42  taps[3] = tx_tap_nm2;
+
43  node_names.pop_back();
+
44  int tx_tap_np1 ;
+
45  node_names.push_back("tx_tap_np1");
+
46  tx_tap_np1 = get_param_int(node_names, 0 );
+
47  taps[0] = tx_tap_np1;
+
48  node_names.pop_back();
+
49  int tx_tap_units ;
+
50  node_names.push_back("tx_tap_units");
+
51  tx_tap_units = get_param_int(node_names, 27 );
+
52  node_names.pop_back();
+
53  int tx_tap_nm1 ;
+
54  node_names.push_back("tx_tap_nm1");
+
55  tx_tap_nm1 = get_param_int(node_names, 0 );
+
56  taps[2] = tx_tap_nm1;
+
57  node_names.pop_back();
+
58 
+
59  taps[1] = tx_tap_units - 2 * (taps[0] + taps[2] + taps[3]);
+
60  if (taps[1] < 0)
+
61  msg << "WARNING: Illegal Tx pre-emphasis tap configuration!\n";
+
62 
+
63  // Fill in params_.
+
64  std::ostringstream params;
+
65  params << "(example_tx";
+
66  params << " (tx_tap_units " << tx_tap_units << ")";
+
67  params << " (taps[0] " << taps[0] << ")";
+
68  params << " (taps[1] " << taps[1] << ")";
+
69  params << " (taps[2] " << taps[2] << ")";
+
70  params << " (taps[3] " << taps[3] << ")";
+
71 
+
72  tap_weights_.clear();
+
73  int samples_per_bit = int(bit_time / sample_interval);
+
74  int tap_signs[] = {-1, 1, -1, -1};
+
75  have_preemph_ = true;
+
76  for (auto i = 0; i <= 3; i++) {
+
77  tap_weights_.push_back(taps[i] * TAP_SCALE * tap_signs[i]);
+
78  params << " (tap_weights_[" << i << "] " << tap_weights_.back() << ")";
+
79  for (auto j = 1; j < samples_per_bit; j++)
+
80  tap_weights_.push_back(0.0);
+
81  }
+
82  param_str_ = params.str() + "\n";
+
83  msg_ = msg.str() + "\n";
+
84  }
+
85 } my_tx;
+
86 
+ +
88 
+
A generic IBIS-AMI Tx model implementation.
Definition: ami_tx.h:23
+
#define TAP_SCALE
Definition: example_tx.cpp:11
+
std::string & msg()
Retrieve the model message.
Definition: amimodel.h:159
+
Interface to AmiTx class.
+
long get_param_int(const std::vector< std::string > &node_names, long default_val) const
Get the value of an integer parameter.
Definition: amimodel.cpp:80
+
MyTx()
Definition: example_tx.cpp:22
+
std::vector< double > tap_weights_
Tap weights for pre-emphasis filter.
Definition: ami_tx.h:34
+
~MyTx()
Definition: example_tx.cpp:23
+
An example device specific Tx model implementation.
Definition: example_tx.cpp:18
+
AMIModel * ami_model
The pointer required by the API implementation.
Definition: example_tx.cpp:87
+
std::string msg_
Definition: amimodel.h:171
+
virtual void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
Initialize the model.
Definition: amimodel.cpp:20
+
MyTx my_tx
+
void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in) override
Initialize the model.
Definition: example_tx.cpp:24
+
bool have_preemph_
True, if I have a pre-emphasis filter.
Definition: ami_tx.h:32
+
Abstract class providing the base functionality required by all IBIS-AMI models.
Definition: amimodel.h:121
+
std::string param_str_
Definition: amimodel.h:171
+
+ + + + diff --git a/doc/html/example__tx_8py.html b/doc/html/example__tx_8py.html new file mode 100644 index 0000000..fb1c84d --- /dev/null +++ b/doc/html/example__tx_8py.html @@ -0,0 +1,125 @@ + + + + + + +ibisami: example/example_tx.py File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
example_tx.py File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

 example_tx
 
+ + + + + + + + + +

+Variables

string example_tx.kFileBaseName = 'example_tx'
 
string example_tx.kDescription = 'Example Tx model from ibisami package.'
 
dictionary example_tx.ibis_params
 
dictionary example_tx.ami_params
 
+
+ + + + diff --git a/doc/html/example__tx_8py_source.html b/doc/html/example__tx_8py_source.html new file mode 100644 index 0000000..ff2e39f --- /dev/null +++ b/doc/html/example__tx_8py_source.html @@ -0,0 +1,220 @@ + + + + + + +ibisami: example/example_tx.py Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
example_tx.py
+
+
+Go to the documentation of this file.
1 #! /usr/bin/env python
+
2 
+
3 """
+
4 Model configurator for ibisami example Tx model.
+
5 
+
6 Original author: David Banas
+
7 Original date: August 19, 2015
+
8 
+
9 The intent is that this example configurator can be used as a starting
+
10 point for other custom models.
+
11 
+
12 Copyright (c) 2015 David Banas; all rights reserved World wide.
+
13 """
+
14 
+
15 kFileBaseName = 'example_tx'
+
16 kDescription = 'Example Tx model from ibisami package.'
+
17 
+
18 # These are used to configure the IBIS model.
+
19 #
+
20 # Lists should contain 3 values:
+
21 # typical, min/slow/weak, and max/fast/strong, in that order.
+
22 # (The singular exception is 'c_comp', which should contain 3 values,
+
23 # in NUMERICAL typ, min, max order.)
+
24 ibis_params = {
+
25  'file_name' : kFileBaseName + '.ibs',
+
26  'file_rev' : 'v0.1',
+
27  'copyright' : "Copyright (c) 2016 David Banas; all rights reserved World wide.",
+
28  'component' : "Example_Tx",
+
29  'manufacturer' : "(n/a)",
+
30  'r_pkg' : [0.1, 0.001, 0.5],
+
31  'l_pkg' : [10.e-9, 0.1e-9, 50.e-9],
+
32  'c_pkg' : [1.e-12, 0.01e-12, 5.e-12],
+
33  'model_name' : kFileBaseName,
+
34  'model_type' : 'Output',
+
35  'c_comp' : [1.e-12, 0.01e-12, 5.e-12],
+
36  'c_ref' : 0,
+
37  'v_ref' : 0.5,
+
38  'v_meas' : 0.5,
+
39  'r_ref' : 50,
+
40  'temperature_range' : [25, 0, 100],
+
41  'voltage_range' : [1.8, 1.62, 1.98],
+
42  'impedance' : [50., 45., 55.],
+
43  'slew_rate' : [5.e9, 1.e9, 10.e9],
+
44 }
+
45 
+
46 # These are used to configure the AMI model.
+
47 ami_params = {
+
48  # These will go in the [Reserved_Parameters] section of the *.AMI file.
+
49  'reserved' : {
+
50  'AMI_Version' : {
+
51  'type' : 'STRING',
+
52  'usage' : 'Info',
+
53  'format' : 'Value',
+
54  'default' : '"5.1"',
+
55  'description' : '"Version of IBIS standard we comply with."',
+
56  },
+
57  'Init_Returns_Impulse' : {
+
58  'type' : 'BOOL',
+
59  'usage' : 'Info',
+
60  'format' : 'Value',
+
61  'default' : 'True',
+
62  'description' : '"In fact, this model is, currently, Init-only."',
+
63  },
+
64  'GetWave_Exists' : {
+
65  'type' : 'BOOL',
+
66  'usage' : 'Info',
+
67  'format' : 'Value',
+
68  'default' : 'False',
+
69  'description' : '"This model is, currently, Init-only."',
+
70  },
+
71  },
+
72 
+
73  # These will go in the [Model_Specific] section of the *.AMI file.
+
74  'model' : {
+
75  'tx_tap_units' : {
+
76  'type' : 'INT',
+
77  'usage' : 'In',
+
78  'format' : 'Range',
+
79  'min' : 6, # Check this.
+
80  'max' : 27,
+
81  'default' : 27,
+
82  'tap_pos' : -1, # Pre-emph. FIR tap position; '-1' means "n/a".
+
83  'description' : '"Total current available to FIR filter."',
+
84  },
+
85  'tx_tap_np1' : {
+
86  'type' : 'INT',
+
87  'usage' : 'In',
+
88  'format' : 'Range',
+
89  'min' : 0,
+
90  'max' : 10,
+
91  'default' : 0,
+
92  'tap_pos' : 0,
+
93  'description' : '"First (and only) pre-tap."',
+
94  },
+
95  'tx_tap_nm1' : {
+
96  'type' : 'INT',
+
97  'usage' : 'In',
+
98  'format' : 'Range',
+
99  'min' : 0,
+
100  'max' : 10,
+
101  'default' : 0,
+
102  'tap_pos' : 2,
+
103  'description' : '"First post-tap."',
+
104  },
+
105  'tx_tap_nm2' : {
+
106  'type' : 'INT',
+
107  'usage' : 'In',
+
108  'format' : 'Range',
+
109  'min' : 0,
+
110  'max' : 10,
+
111  'default' : 0,
+
112  'tap_pos' : 3,
+
113  'description' : '"Second post-tap."',
+
114  },
+
115  },
+
116 }
+
117 
+
+ + + + diff --git a/doc/html/files.html b/doc/html/files.html new file mode 100644 index 0000000..2b95758 --- /dev/null +++ b/doc/html/files.html @@ -0,0 +1,126 @@ + + + + + + +ibisami: File List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + +
  example
 example_rx.cppExample of using ibisami to build a Rx model
 example_rx.py
 example_tx.cppExample of using ibisami to build a Tx model
 example_tx.py
 test.py
  include
 ami_rx.hInterface to AmiRx class
 ami_tx.hInterface to AmiTx class
 amimodel.hInterface to AMIModel class
 dfe.hInterface to DFE class
 digital_filter.hInterface to DigitalFilter class
 fir_filter.hInterface to FIRFilter class
 util.hSmall, generally useful utilities
  src
 ami_rx.cppImplementation of AmiRx class
 ami_tx.cppImplementation of AmiTx class
 amimodel.cppImplementation of AMIModel class
 dfe.cppImplementation of DFE class
 digital_filter.cppImplementation of DigitalFilter class
 fir_filter.cppImplementation of FIRFilter class
 ibisami_api.cppProvides IBIS-AMI API and necessary bootstrapping
 util.cppSmall, generally useful utilities
+
+
+ + + + diff --git a/doc/html/fir__filter_8cpp.html b/doc/html/fir__filter_8cpp.html new file mode 100644 index 0000000..a7dbdd4 --- /dev/null +++ b/doc/html/fir__filter_8cpp.html @@ -0,0 +1,118 @@ + + + + + + +ibisami: src/fir_filter.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
fir_filter.cpp File Reference
+
+
+ +

Implementation of FIRFilter class. +More...

+
#include <vector>
+#include <algorithm>
+#include "include/fir_filter.h"
+
+

Go to the source code of this file.

+

Detailed Description

+

Implementation of FIRFilter class.

+

Original author: David Banas
+ Original date: June 8, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file fir_filter.cpp.

+
+ + + + diff --git a/doc/html/fir__filter_8cpp_source.html b/doc/html/fir__filter_8cpp_source.html new file mode 100644 index 0000000..1142b0f --- /dev/null +++ b/doc/html/fir__filter_8cpp_source.html @@ -0,0 +1,160 @@ + + + + + + +ibisami: src/fir_filter.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
fir_filter.cpp
+
+
+Go to the documentation of this file.
1 
+
10 #include <vector>
+
11 #include <algorithm>
+
12 #include "include/fir_filter.h"
+
13 
+
15 
+
19 FIRFilter::FIRFilter(const std::vector<double>& weights, int oversample_factor) {
+
20  weights_ = weights;
+
21  oversample_factor_ = oversample_factor;
+
22  delay_chain_ = std::vector<double>(weights.size() * oversample_factor, 0.0);
+
23 }
+
24 
+
26 
+
30 void FIRFilter::apply(double *sig, const long len) {
+
31  std::vector<double> tmp_weights = weights_;
+
32  std::reverse(tmp_weights.begin(), tmp_weights.end());
+
33  for (auto i = 0; i < len; i++) {
+
34  // Shift next sample into delay chain.
+
35  std::rotate(delay_chain_.begin(), delay_chain_.begin() + 1, delay_chain_.end());
+
36  delay_chain_.pop_back();
+
37  delay_chain_.push_back(sig[i]);
+
38  // Calculate next output.
+
39  double accum = 0.0;
+
40  int j = 0;
+
41  for (auto weight : tmp_weights) {
+
42  accum += weight * delay_chain_[j];
+
43  j += oversample_factor_;
+
44  }
+
45  sig[i] = accum;
+
46  }
+
47 }
+
48 
+
50 
+
54 double FIRFilter::step(double x) {
+
55  apply(&x, 1L);
+
56  return x;
+
57 }
+
58 
+
59 std::vector<double> FIRFilter::get_weights() {
+
60  return weights_;
+
61 }
+
62 
+
63 std::vector<double> FIRFilter::get_values() {
+
64  std::vector<double> tmp_values = delay_chain_;
+
65  std::reverse(tmp_values.begin(), tmp_values.end());
+
66  return tmp_values;
+
67 }
+
68 
+
std::vector< double > get_weights()
Definition: fir_filter.cpp:59
+
std::vector< double > delay_chain_
Definition: fir_filter.h:29
+
std::vector< double > weights_
Definition: fir_filter.h:29
+
Interface to FIRFilter class.
+
int oversample_factor_
Definition: fir_filter.h:30
+
std::vector< double > get_values()
Definition: fir_filter.cpp:63
+
FIRFilter(const std::vector< double > &weights, int oversample_factor=1)
Constructor.
Definition: fir_filter.cpp:19
+
double step(double x)
Filter single stepping.
Definition: fir_filter.cpp:54
+
void apply(double *sig, const long len)
Filter application.
Definition: fir_filter.cpp:30
+
+ + + + diff --git a/doc/html/fir__filter_8h.html b/doc/html/fir__filter_8h.html new file mode 100644 index 0000000..0a944d0 --- /dev/null +++ b/doc/html/fir__filter_8h.html @@ -0,0 +1,126 @@ + + + + + + +ibisami: include/fir_filter.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
fir_filter.h File Reference
+
+
+ +

Interface to FIRFilter class. +More...

+
#include <vector>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  FIRFilter
 A FIR (finite impulse response) filter implementation, with optional over-sampling. More...
 
+

Detailed Description

+

Interface to FIRFilter class.

+

Original author: David Banas
+ Original date: June 7, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+

This class provides a finite impulse response digital filter with optional over-sampling.

+ +

Definition in file fir_filter.h.

+
+ + + + diff --git a/doc/html/fir__filter_8h_source.html b/doc/html/fir__filter_8h_source.html new file mode 100644 index 0000000..193059e --- /dev/null +++ b/doc/html/fir__filter_8h_source.html @@ -0,0 +1,137 @@ + + + + + + +ibisami: include/fir_filter.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
fir_filter.h
+
+
+Go to the documentation of this file.
1 
+
12 #ifndef INCLUDE_FIR_FILTER_H_
+
13 #define INCLUDE_FIR_FILTER_H_
+
14 
+
15 #include <vector>
+
16 
+
18 class FIRFilter {
+
19  public:
+
20  explicit FIRFilter(const std::vector<double>& weights, int oversample_factor=1);
+
21  virtual ~FIRFilter() {}
+
22  void apply(double *sig, const long len);
+
23  double step(double x);
+
24  void set_weights(const std::vector<double>& new_weights) {weights_ = new_weights;}
+
25  std::vector<double> get_weights();
+
26  std::vector<double> get_values();
+
27 
+
28  protected:
+
29  std::vector<double> weights_, delay_chain_;
+ +
31 };
+
32 
+
33 #endif // INCLUDE_FIR_FILTER_H_
+
34 
+
std::vector< double > get_weights()
Definition: fir_filter.cpp:59
+
A FIR (finite impulse response) filter implementation, with optional over-sampling.
Definition: fir_filter.h:18
+
std::vector< double > delay_chain_
Definition: fir_filter.h:29
+
std::vector< double > weights_
Definition: fir_filter.h:29
+
int oversample_factor_
Definition: fir_filter.h:30
+
std::vector< double > get_values()
Definition: fir_filter.cpp:63
+
FIRFilter(const std::vector< double > &weights, int oversample_factor=1)
Constructor.
Definition: fir_filter.cpp:19
+
double step(double x)
Filter single stepping.
Definition: fir_filter.cpp:54
+
void set_weights(const std::vector< double > &new_weights)
Definition: fir_filter.h:24
+
void apply(double *sig, const long len)
Filter application.
Definition: fir_filter.cpp:30
+
virtual ~FIRFilter()
Definition: fir_filter.h:21
+
+ + + + diff --git a/doc/html/functions.html b/doc/html/functions.html new file mode 100644 index 0000000..79eca99 --- /dev/null +++ b/doc/html/functions.html @@ -0,0 +1,493 @@ + + + + + + +ibisami: Class Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+ + +

- b -

    +
  • backward_filter_ +: DFE +
  • +
  • backward_filter_output_ +: DFE +
  • +
  • bit_time_ +: AMIModel +
  • +
+ + +

- c -

+ + +

- d -

+ + +

- e -

    +
  • edge_sample_ +: DFE +
  • +
  • err_gain_ +: DFE +
  • +
+ + +

- f -

+ + +

- g -

+ + +

- h -

    +
  • have_preemph_ +: AmiTx +
  • +
+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- s -

+ + +

- t -

    +
  • tap_values_ +: DFE +
  • +
  • tap_weights_ +: AmiTx +, DFE +
  • +
+ + +

- w -

+ + +

- ~ -

+
+ + + + diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html new file mode 100644 index 0000000..eae7d4a --- /dev/null +++ b/doc/html/functions_func.html @@ -0,0 +1,279 @@ + + + + + + +ibisami: Class Members - Functions + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- d -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- s -

+ + +

- ~ -

+
+ + + + diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html new file mode 100644 index 0000000..004d9aa --- /dev/null +++ b/doc/html/functions_vars.html @@ -0,0 +1,374 @@ + + + + + + +ibisami: Class Members - Variables + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

    +
  • backward_filter_ +: DFE +
  • +
  • backward_filter_output_ +: DFE +
  • +
  • bit_time_ +: AMIModel +
  • +
+ + +

- c -

+ + +

- d -

+ + +

- e -

    +
  • edge_sample_ +: DFE +
  • +
  • err_gain_ +: DFE +
  • +
+ + +

- f -

+ + +

- g -

+ + +

- h -

    +
  • have_preemph_ +: AmiTx +
  • +
+ + +

- i -

+ + +

- l -

    +
  • last_clk_sample_ +: DFE +
  • +
  • last_summer_output_ +: DFE +
  • +
  • log_ +: AMIModel +
  • +
+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- s -

+ + +

- t -

    +
  • tap_values_ +: DFE +
  • +
  • tap_weights_ +: AmiTx +, DFE +
  • +
+ + +

- w -

+
+ + + + diff --git a/doc/html/globals.html b/doc/html/globals.html new file mode 100644 index 0000000..e2bfc73 --- /dev/null +++ b/doc/html/globals.html @@ -0,0 +1,174 @@ + + + + + + +ibisami: File Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+
+ + + + diff --git a/doc/html/globals_defs.html b/doc/html/globals_defs.html new file mode 100644 index 0000000..1507e14 --- /dev/null +++ b/doc/html/globals_defs.html @@ -0,0 +1,139 @@ + + + + + + +ibisami: File Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html new file mode 100644 index 0000000..3e0e52c --- /dev/null +++ b/doc/html/globals_func.html @@ -0,0 +1,122 @@ + + + + + + +ibisami: File Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/html/globals_type.html b/doc/html/globals_type.html new file mode 100644 index 0000000..89990a7 --- /dev/null +++ b/doc/html/globals_type.html @@ -0,0 +1,109 @@ + + + + + + +ibisami: File Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/html/globals_vars.html b/doc/html/globals_vars.html new file mode 100644 index 0000000..43ff453 --- /dev/null +++ b/doc/html/globals_vars.html @@ -0,0 +1,122 @@ + + + + + + +ibisami: File Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html new file mode 100644 index 0000000..2dc89a7 --- /dev/null +++ b/doc/html/hierarchy.html @@ -0,0 +1,119 @@ + + + + + + +ibisami: Class Hierarchy + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + +
 Cibisami::AMIGrammarAMI parameter tree grammatical definition
 CAMIModelAbstract class providing the base functionality required by all IBIS-AMI models
 CAmiRxA generic IBIS-AMI Rx model implementation
 CMyRxAn example device specific Rx model implementation
 CAmiTxA generic IBIS-AMI Tx model implementation
 CMyTxAn example device specific Tx model implementation
 CAmiPointersHolds the pointers, which we pass back to the AMI_Init() caller
 CDFEA generic DFE implementation
 CDigitalFilterA generic digital filter implementation, using "Direct Form 2" processing
 CFIRFilterA FIR (finite impulse response) filter implementation, with optional over-sampling
 Cibisami::ParamTreeThe parameter tree definition
 Cstatic_visitor
 Cibisami::NodeUsed to access a branch node
 Cibisami::ValueUsed to access a leaf node
+
+
+ + + + diff --git a/doc/html/ibisami__api_8cpp.html b/doc/html/ibisami__api_8cpp.html new file mode 100644 index 0000000..000738b --- /dev/null +++ b/doc/html/ibisami__api_8cpp.html @@ -0,0 +1,300 @@ + + + + + + +ibisami: src/ibisami_api.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ibisami_api.cpp File Reference
+
+
+ +

Provides IBIS-AMI API and necessary bootstrapping. +More...

+
#include <stdexcept>
+#include <string>
+#include "include/amimodel.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

struct  AmiPointers
 Holds the pointers, which we pass back to the AMI_Init() caller. More...
 
+ + + +

+Macros

#define DLL_EXPORT
 
+ + + + + + + +

+Functions

DLL_EXPORT long AMI_Init (double *impulse_matrix, long number_of_rows, long aggressors, double sample_interval, double bit_time, char *AMI_parameters_in, char **AMI_parameters_out, void **AMI_memory_handle, char **msg)
 IBIS-AMI model initialization and impulse response processing. (Required) More...
 
DLL_EXPORT long AMI_Close (void *AMI_memory)
 Clean-up. (Required) More...
 
+ + + + +

+Variables

AMIModelami_model
 Defined in our device-specific source code file. More...
 
+

Detailed Description

+

Provides IBIS-AMI API and necessary bootstrapping.

+

Original author: David Banas
+ Original date: April 29, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+

Provides the API (application programming interface) to the *.SO (shared object) or *.DLL (dynamically linked library) file.

+

Note: The required API for a IBIS-AMI model is defined by the IBIS standard, which is available here: http://www.eda.org/ibis/

+ +

Definition in file ibisami_api.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define DLL_EXPORT
+
+ +

Definition at line 37 of file ibisami_api.cpp.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
DLL_EXPORT long AMI_Close (void * AMI_memory)
+
+ +

Clean-up. (Required)

+
Parameters
+ + +
AMI_memoryA pointer to the model memory structure.
+
+
+
Returns
'1'
+ +

Definition at line 133 of file ibisami_api.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DLL_EXPORT long AMI_Init (double * impulse_matrix,
long number_of_rows,
long aggressors,
double sample_interval,
double bit_time,
char * AMI_parameters_in,
char ** AMI_parameters_out,
void ** AMI_memory_handle,
char ** msg 
)
+
+ +

IBIS-AMI model initialization and impulse response processing. (Required)

+
Parameters
+ + + + + + + + + + +
impulse_matrixA matrix of doubles containing, at least, the impulse response to be processed (i.e. - the victim), in place.
number_of_rowsThe length of all impulse responses provided (victim and aggressors).
aggressorsThe number of aggressors included in impulse_matrix.
sample_intervalThe time interval between adjacent elements of the vectors contained in impulse_matrix.
bit_timeThe unit interval.
AMI_parameters_inA pointer to a char array containing the input AMI parameter string.
AMI_parameters_outA handle to be updated with the pointer to the output AMI parameter string.
AMI_memory_handleA handle to be updated with the pointer to the model memory structure.
msgA handle to be updated with the pointer to the message being returned by the model.
+
+
+
Returns
'1' for success, '0' for failure.
+ +

Definition at line 53 of file ibisami_api.cpp.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
AMIModel* ami_model
+
+ +

Defined in our device-specific source code file.

+

Defined in our device-specific source code file.

+ +

Definition at line 171 of file example_rx.cpp.

+ +
+
+
+ + + + diff --git a/doc/html/ibisami__api_8cpp_source.html b/doc/html/ibisami__api_8cpp_source.html new file mode 100644 index 0000000..9963a8c --- /dev/null +++ b/doc/html/ibisami__api_8cpp_source.html @@ -0,0 +1,228 @@ + + + + + + +ibisami: src/ibisami_api.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ibisami_api.cpp
+
+
+Go to the documentation of this file.
1 
+
16 #include <stdexcept>
+
17 #include <string>
+
18 #include "include/amimodel.h"
+
19 
+
20 extern AMIModel *ami_model;
+
21 
+
23 struct AmiPointers {
+ +
25  char *msg;
+
26  char *params;
+
27 };
+
28 
+
29 static char panic_msg[] = "ERROR: Failed to initialize!";
+
30 
+
31 extern "C" {
+
32 // The following is to accomodate Windows and make this file OS agnostic.
+
33 // It is taken directly from the Microsoft Visual Studio header file examples.
+
34 #ifdef _MSC_VER // Gets defined, only when the MSVS compiler is invoked.
+
35 #define DLL_EXPORT __declspec(dllexport)
+
36 #else
+
37 #define DLL_EXPORT
+
38 #endif
+
39 
+
41 
+ +
54  double * impulse_matrix,
+
55  long number_of_rows,
+
56  long aggressors,
+
57  double sample_interval,
+
58  double bit_time,
+
59  char * AMI_parameters_in,
+
60  char ** AMI_parameters_out,
+
61  void ** AMI_memory_handle,
+
62  char ** msg
+
63  ) {
+
64  // Even though it seems silly to use new for such a small structure,
+
65  // we must do this, in order to remain reentrant.
+
66  AmiPointers *self = new AmiPointers;
+
67  if (self) {
+
68  self->model = nullptr;
+
69  self->msg = nullptr;
+
70  self->params = nullptr;
+
71  *AMI_memory_handle = self;
+
72  } else {
+
73  *msg = panic_msg;
+
74  return 0;
+
75  }
+
76 
+
77  // Attempt to initialize the device-specific model.
+
78  try {
+
79  ami_model->init(impulse_matrix, number_of_rows, aggressors,
+
80  sample_interval, bit_time, AMI_parameters_in);
+
81  ami_model->proc_imp();
+
82  } catch(std::runtime_error err) {
+
83  std::string tmp_str = err.what();
+
84  self->msg = new char[tmp_str.length() + 1];
+
85  if (!self->msg) {
+
86  *msg = panic_msg;
+
87  return 0;
+
88  }
+
89  strcpy(self->msg, tmp_str.c_str());
+
90  *msg = self->msg;
+
91  return 0;
+
92  }
+
93  self->model = ami_model;
+
94 
+
95  // Attempt to create storage for message returned by model maker.
+
96  self->msg = new char[self->model->msg().length() + 1];
+
97  if (!self->msg) {
+
98  *msg = panic_msg;
+
99  return 0;
+
100  }
+
101  strcpy(self->msg, self->model->msg().c_str());
+
102  *msg = self->msg;
+
103 
+
104  // Attempt to create storage for parameters returned by model maker.
+
105  self->params = new char[self->model->param_str().length() + 1];
+
106  if (!self->params) {
+
107  *msg = panic_msg;
+
108  return 0;
+
109  }
+
110  strcpy(self->params, self->model->param_str().c_str());
+
111  *AMI_parameters_out = self->params;
+
112 
+
113  return 1;
+
114 }
+
115 
+
116 #ifdef AMI_GETWAVE
+
117 // Time domain signal processing. (Optional)
+
118 DLL_EXPORT long AMI_GetWave(
+
119  double * wave,
+
120  long wave_size,
+
121  double * clock_times,
+
122  char ** AMI_parameters_out,
+
123  void * AMI_memory
+
124  ) {
+
125 }
+
126 #endif
+
127 
+
129 
+ +
134  void * AMI_memory
+
135  ) {
+
136  AmiPointers *self = (AmiPointers *)AMI_memory;
+
137  delete self->msg;
+
138  delete self->params;
+
139  delete self;
+
140  return 1L;
+
141 }
+
142 }
+
143 
+
char * params
Definition: ibisami_api.cpp:26
+
DLL_EXPORT long AMI_Close(void *AMI_memory)
Clean-up. (Required)
+
Interface to AMIModel class.
+
DLL_EXPORT long AMI_Init(double *impulse_matrix, long number_of_rows, long aggressors, double sample_interval, double bit_time, char *AMI_parameters_in, char **AMI_parameters_out, void **AMI_memory_handle, char **msg)
IBIS-AMI model initialization and impulse response processing. (Required)
Definition: ibisami_api.cpp:53
+
AMIModel * model
Definition: ibisami_api.cpp:24
+ +
#define DLL_EXPORT
Definition: ibisami_api.cpp:37
+
std::string & msg()
Retrieve the model message.
Definition: amimodel.h:159
+
Holds the pointers, which we pass back to the AMI_Init() caller.
Definition: ibisami_api.cpp:23
+
virtual void init(double *impulse_matrix, const long number_of_rows, const long aggressors, const double sample_interval, const double bit_time, const std::string &AMI_parameters_in)
Initialize the model.
Definition: amimodel.cpp:20
+
virtual void proc_imp()=0
Process an incoming impulse response.
+
Abstract class providing the base functionality required by all IBIS-AMI models.
Definition: amimodel.h:121
+
AMIModel * ami_model
Defined in our device-specific source code file.
Definition: example_rx.cpp:171
+
+ + + + diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000..351beec --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,110 @@ + + + + + + +ibisami: Developer Documentation for the *ibisami* Project + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
Developer Documentation for the *ibisami* Project
+
+
+

Note: This is NOT the user's guide! For help getting started, please, visit the Getting Started page of the Wiki, here: https://github.com/capn-freako/ibisami/wiki/Getting-Started

+

Note: This documentation was generated, using Doxygen.

+

Introduction

+

ibisami is a public domain package of C++ code, and associated support files, intended to provide a common public code base for the generic portion of an IBIS-AMI model.

+

The ibisami code base is hosted by GitHub and is available, here: https://github.com/capn-freako/ibisami

+

The original commit was posted by David Banas on April 29, 2015.

+

The code is released under the BSD3 license, specifically, in order to avoid any concerns of "virality". That is, it is intended that this code be usable by all, and that no one making modifications to it is under any obligation to share those modifications with anyone for any reason. This holds, regardless of whether or not those modifications are used for commercial purposes.

+

MAKING IMPROVEMENTS TO THIS CODE, USING THOSE IMPROVEMENTS FOR COMMERCIAL PURPOSES, AND KEEPING THOSE IMPROVEMENTS ENTIRELY TO YOURSELF IS TOTALLY ACCEPTABLE.

+

(Of course, we hope you'll share with us, but if you don't that's our problem, not yours. ;-) )

+

Contributing to ibisami development

+

If you would like to help out in maintaining/improving this code:

    +
  • That is great! Thank you!
  • +
  • Please, fork your own version of the GitHub repository, ON GITHUB. Instructions
  • +
  • Please, DO NOT clone my ibisami repository to your working machine. (You won't be able to push your improvements up to my GitHub repository, if you do this.)
  • +
  • When you have something you'd like me to include, send me a pull request. Instructions I will pull your changes into a separate branch, which I keep expressly for this purpose, test your code, and, if all goes well, incorporate your changes into a new release of ibisami without delay.
  • +
+

Note: It may seem a little clunky to do things this way, but it makes collaborative project management MUCH easier. Thanks, in advance, for your cooperation.

+
+ + + + diff --git a/doc/html/jquery.js b/doc/html/jquery.js new file mode 100644 index 0000000..1f4d0b4 --- /dev/null +++ b/doc/html/jquery.js @@ -0,0 +1,68 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + +
+
+
main.dox File Reference
+
+
+
+ + + + diff --git a/doc/html/md__r_e_a_d_m_e.html b/doc/html/md__r_e_a_d_m_e.html new file mode 100644 index 0000000..1087fc8 --- /dev/null +++ b/doc/html/md__r_e_a_d_m_e.html @@ -0,0 +1,94 @@ + + + + + + +ibisami: ibisami + + + + + + + + + + +
+
+
+ + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
ibisami
+
+
+

A public domain IBIS-AMI model creation infrastructure for all to share.

+
+ + + + diff --git a/doc/html/namespaceexample__rx.html b/doc/html/namespaceexample__rx.html new file mode 100644 index 0000000..92f6615 --- /dev/null +++ b/doc/html/namespaceexample__rx.html @@ -0,0 +1,191 @@ + + + + + + +ibisami: example_rx Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
example_rx Namespace Reference
+
+
+ + + + + + + + + + +

+Variables

string kFileBaseName = 'example_rx'
 
string kDescription = 'Example Rx model from ibisami package.'
 
dictionary ibis_params
 
dictionary ami_params
 
+

Variable Documentation

+ +
+
+ + + + +
dictionary example_rx.ami_params
+
+ +

Definition at line 47 of file example_rx.py.

+ +
+
+ +
+
+ + + + +
dictionary example_rx.ibis_params
+
+Initial value:
1 = {
+
2  'file_name' : kFileBaseName + '.ibs',
+
3  'file_rev' : 'v0.1',
+
4  'copyright' : "Copyright (c) 2016 David Banas; all rights reserved World wide.",
+
5  'component' : "Example_Rx",
+
6  'manufacturer' : "(n/a)",
+
7  'r_pkg' : [0.1, 0.001, 0.5],
+
8  'l_pkg' : [10.e-9, 0.1e-9, 50.e-9],
+
9  'c_pkg' : [1.e-12, 0.01e-12, 5.e-12],
+
10  'model_name' : kFileBaseName,
+
11  'model_type' : 'Input',
+
12  'c_comp' : [1.e-12, 0.01e-12, 5.e-12],
+
13  'v_ref' : 0,
+
14  'r_ref' : 0,
+
15  'c_ref' : 0,
+
16  'slew_rate' : 0,
+
17  'v_meas' : 0.5,
+
18  'temperature_range' : [25, 0, 100],
+
19  'voltage_range' : [1.8, 1.62, 1.98],
+
20  'impedance' : [50., 45., 55.],
+
21 }
+
+

Definition at line 24 of file example_rx.py.

+ +
+
+ +
+
+ + + + +
string example_rx.kDescription = 'Example Rx model from ibisami package.'
+
+ +

Definition at line 16 of file example_rx.py.

+ +
+
+ +
+
+ + + + +
string example_rx.kFileBaseName = 'example_rx'
+
+ +

Definition at line 15 of file example_rx.py.

+ +
+
+
+ + + + diff --git a/doc/html/namespaceexample__tx.html b/doc/html/namespaceexample__tx.html new file mode 100644 index 0000000..9e13fd4 --- /dev/null +++ b/doc/html/namespaceexample__tx.html @@ -0,0 +1,191 @@ + + + + + + +ibisami: example_tx Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
example_tx Namespace Reference
+
+
+ + + + + + + + + + +

+Variables

string kFileBaseName = 'example_tx'
 
string kDescription = 'Example Tx model from ibisami package.'
 
dictionary ibis_params
 
dictionary ami_params
 
+

Variable Documentation

+ +
+
+ + + + +
dictionary example_tx.ami_params
+
+ +

Definition at line 47 of file example_tx.py.

+ +
+
+ +
+
+ + + + +
dictionary example_tx.ibis_params
+
+Initial value:
1 = {
+
2  'file_name' : kFileBaseName + '.ibs',
+
3  'file_rev' : 'v0.1',
+
4  'copyright' : "Copyright (c) 2016 David Banas; all rights reserved World wide.",
+
5  'component' : "Example_Tx",
+
6  'manufacturer' : "(n/a)",
+
7  'r_pkg' : [0.1, 0.001, 0.5],
+
8  'l_pkg' : [10.e-9, 0.1e-9, 50.e-9],
+
9  'c_pkg' : [1.e-12, 0.01e-12, 5.e-12],
+
10  'model_name' : kFileBaseName,
+
11  'model_type' : 'Output',
+
12  'c_comp' : [1.e-12, 0.01e-12, 5.e-12],
+
13  'c_ref' : 0,
+
14  'v_ref' : 0.5,
+
15  'v_meas' : 0.5,
+
16  'r_ref' : 50,
+
17  'temperature_range' : [25, 0, 100],
+
18  'voltage_range' : [1.8, 1.62, 1.98],
+
19  'impedance' : [50., 45., 55.],
+
20  'slew_rate' : [5.e9, 1.e9, 10.e9],
+
21 }
+
+

Definition at line 24 of file example_tx.py.

+ +
+
+ +
+
+ + + + +
string example_tx.kDescription = 'Example Tx model from ibisami package.'
+
+ +

Definition at line 16 of file example_tx.py.

+ +
+
+ +
+
+ + + + +
string example_tx.kFileBaseName = 'example_tx'
+
+ +

Definition at line 15 of file example_tx.py.

+ +
+
+
+ + + + diff --git a/doc/html/namespaceibisami.html b/doc/html/namespaceibisami.html new file mode 100644 index 0000000..8aa888a --- /dev/null +++ b/doc/html/namespaceibisami.html @@ -0,0 +1,144 @@ + + + + + + +ibisami: ibisami Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
ibisami Namespace Reference
+
+
+ +

Used to protect several complex custom types from potential name collisions. +More...

+ + + + + + + + + + + + + + +

+Classes

struct  AMIGrammar
 AMI parameter tree grammatical definition. More...
 
struct  Node
 Used to access a branch node. More...
 
struct  ParamTree
 The parameter tree definition. More...
 
struct  Value
 Used to access a leaf node. More...
 
+ + + +

+Typedefs

typedef boost::variant< boost::recursive_wrapper< ParamTree >, std::string > ParamNode
 
+

Detailed Description

+

Used to protect several complex custom types from potential name collisions.

+

Typedef Documentation

+ +
+
+ + + + +
typedef boost::variant<boost::recursive_wrapper<ParamTree>, std::string> ibisami::ParamNode
+
+

The actual node definition.

+ +

Definition at line 35 of file amimodel.h.

+ +
+
+
+ + + + diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html new file mode 100644 index 0000000..35b7038 --- /dev/null +++ b/doc/html/namespacemembers.html @@ -0,0 +1,132 @@ + + + + + + +ibisami: Namespace Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+
+ + + + diff --git a/doc/html/namespacemembers_type.html b/doc/html/namespacemembers_type.html new file mode 100644 index 0000000..ccaab24 --- /dev/null +++ b/doc/html/namespacemembers_type.html @@ -0,0 +1,107 @@ + + + + + + +ibisami: Namespace Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/html/namespacemembers_vars.html b/doc/html/namespacemembers_vars.html new file mode 100644 index 0000000..8310389 --- /dev/null +++ b/doc/html/namespacemembers_vars.html @@ -0,0 +1,129 @@ + + + + + + +ibisami: Namespace Members + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html new file mode 100644 index 0000000..1d329ae --- /dev/null +++ b/doc/html/namespaces.html @@ -0,0 +1,107 @@ + + + + + + +ibisami: Namespace List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all namespaces with brief descriptions:
+ + + + + +
 Nexample_rx
 Nexample_tx
 NibisamiUsed to protect several complex custom types from potential name collisions
 Ntest
+
+
+ + + + diff --git a/doc/html/namespacetest.html b/doc/html/namespacetest.html new file mode 100644 index 0000000..d619e64 --- /dev/null +++ b/doc/html/namespacetest.html @@ -0,0 +1,154 @@ + + + + + + +ibisami: test Namespace Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
test Namespace Reference
+
+
+ + + + + + + + +

+Variables

string gDLLName = './example_tx_x86_amd64.so'
 
tuple the_model = ami.AMIModel(gDLLName)
 
tuple init_data = ami.AMIModelInitializer({'root_name': "exampleTx"})
 
+

Variable Documentation

+ +
+
+ + + + +
string test.gDLLName = './example_tx_x86_amd64.so'
+
+ +

Definition at line 11 of file test.py.

+ +
+
+ +
+
+ + + + +
tuple test.init_data = ami.AMIModelInitializer({'root_name': "exampleTx"})
+
+ +

Definition at line 14 of file test.py.

+ +
+
+ +
+
+ + + + +
tuple test.the_model = ami.AMIModel(gDLLName)
+
+ +

Definition at line 13 of file test.py.

+ +
+
+
+ + + + diff --git a/doc/html/pages.html b/doc/html/pages.html new file mode 100644 index 0000000..d11eb8b --- /dev/null +++ b/doc/html/pages.html @@ -0,0 +1,98 @@ + + + + + + +ibisami: Related Pages + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + +
+ +
+
+ + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+ + +
 ibisami
+
+
+ + + + diff --git a/doc/html/search/all_0.html b/doc/html/search/all_0.html new file mode 100644 index 0000000..c491fd8 --- /dev/null +++ b/doc/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_0.js b/doc/html/search/all_0.js new file mode 100644 index 0000000..5d36bf6 --- /dev/null +++ b/doc/html/search/all_0.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['aggressors_5f',['aggressors_',['../class_a_m_i_model.html#aab3a042b2459b4b838cb61bf92a50d03',1,'AMIModel']]], + ['ami_5fclose',['AMI_Close',['../ibisami__api_8cpp.html#a5290351461f5a1fdf0e8cf061b306b2a',1,'ibisami_api.cpp']]], + ['ami_5finit',['AMI_Init',['../ibisami__api_8cpp.html#a2518d31187e06bed6023ec23657faab9',1,'ibisami_api.cpp']]], + ['ami_5fmodel',['ami_model',['../example__rx_8cpp.html#aa0c4a4f61a9cc689992be1759eb7041a',1,'ami_model(): example_rx.cpp'],['../example__tx_8cpp.html#aa0c4a4f61a9cc689992be1759eb7041a',1,'ami_model(): example_tx.cpp'],['../ibisami__api_8cpp.html#aa0c4a4f61a9cc689992be1759eb7041a',1,'ami_model(): example_rx.cpp']]], + ['ami_5fparams',['ami_params',['../namespaceexample__rx.html#a4831c9bdcc98a8eee58424fe9191202c',1,'example_rx.ami_params()'],['../namespaceexample__tx.html#a794df1fee452f02247313e65b27080db',1,'example_tx.ami_params()']]], + ['ami_5frx_2ecpp',['ami_rx.cpp',['../ami__rx_8cpp.html',1,'']]], + ['ami_5frx_2eh',['ami_rx.h',['../ami__rx_8h.html',1,'']]], + ['ami_5ftx_2ecpp',['ami_tx.cpp',['../ami__tx_8cpp.html',1,'']]], + ['ami_5ftx_2eh',['ami_tx.h',['../ami__tx_8h.html',1,'']]], + ['amigrammar',['AMIGrammar',['../structibisami_1_1_a_m_i_grammar.html',1,'ibisami']]], + ['amimodel',['AMIModel',['../class_a_m_i_model.html',1,'']]], + ['amimodel_2ecpp',['amimodel.cpp',['../amimodel_8cpp.html',1,'']]], + ['amimodel_2eh',['amimodel.h',['../amimodel_8h.html',1,'']]], + ['amipointers',['AmiPointers',['../struct_ami_pointers.html',1,'']]], + ['amirx',['AmiRx',['../class_ami_rx.html',1,'AmiRx'],['../class_ami_rx.html#a025faccfe2a5c56888da32370050b46e',1,'AmiRx::AmiRx()']]], + ['amitx',['AmiTx',['../class_ami_tx.html',1,'']]], + ['apply',['apply',['../class_d_f_e.html#a699c915b3b85b1b8c7f6c4dde2276f3b',1,'DFE::apply()'],['../class_digital_filter.html#ab9e95357beb9cca85546dfa6714a0fb2',1,'DigitalFilter::apply()'],['../class_f_i_r_filter.html#a5f79d32e1ebec3ffc79f623fb4cd4061',1,'FIRFilter::apply()']]] +]; diff --git a/doc/html/search/all_1.html b/doc/html/search/all_1.html new file mode 100644 index 0000000..89fd5f8 --- /dev/null +++ b/doc/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_1.js b/doc/html/search/all_1.js new file mode 100644 index 0000000..ea111da --- /dev/null +++ b/doc/html/search/all_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['backward_5ffilter_5f',['backward_filter_',['../class_d_f_e.html#aa6953c7cf764551e2f4b14f7ea1759a9',1,'DFE']]], + ['backward_5ffilter_5foutput_5f',['backward_filter_output_',['../class_d_f_e.html#a76d12aa6b5972a1d7aade0202c855699',1,'DFE']]], + ['bit_5ftime_5f',['bit_time_',['../class_a_m_i_model.html#ad0b6751b3b3a69fb8951fde0fcdf4f27',1,'AMIModel']]], + ['boost_5ffusion_5fadapt_5fstruct',['BOOST_FUSION_ADAPT_STRUCT',['../amimodel_8h.html#a3b6210648aa742440c6393c5c5ff64b3',1,'amimodel.h']]] +]; diff --git a/doc/html/search/all_10.html b/doc/html/search/all_10.html new file mode 100644 index 0000000..2abed7b --- /dev/null +++ b/doc/html/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_10.js b/doc/html/search/all_10.js new file mode 100644 index 0000000..dce3cbd --- /dev/null +++ b/doc/html/search/all_10.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['sample_5finterval_5f',['sample_interval_',['../class_a_m_i_model.html#a4d4c286b04668c22f2e3f315715a6d5b',1,'AMIModel::sample_interval_()'],['../class_d_f_e.html#ae99b54abc902423f71f31f7d37e86b78',1,'DFE::sample_interval_()']]], + ['samples_5fper_5fbit_5f',['samples_per_bit_',['../class_a_m_i_model.html#ac664a9c24d4fdc43ab15df7023ab04bc',1,'AMIModel']]], + ['set_5fmax_5fweights',['set_max_weights',['../class_d_f_e.html#acc351ad844da9fc180f27f71eae0dcb7',1,'DFE']]], + ['set_5fmin_5fweights',['set_min_weights',['../class_d_f_e.html#af44c7fec6b03d7786ca0dc2006bd2f08',1,'DFE']]], + ['set_5fweights',['set_weights',['../class_f_i_r_filter.html#afa7d746246050f6af4e8958d46763a9f',1,'FIRFilter']]], + ['sgn',['sgn',['../util_8h.html#a1ab31b90bc584c635ec159468ceed9b2',1,'util.h']]], + ['shift_5freg_5f',['shift_reg_',['../class_a_m_i_model.html#a68e4cdd12afbc4eb60dbefa4cce82a61',1,'AMIModel']]], + ['sig_5ftap_5f',['sig_tap_',['../class_ami_rx.html#a93343b91ac17149bce7ef0a971512507',1,'AmiRx']]], + ['sim_5ftime_5f',['sim_time_',['../class_d_f_e.html#a0d576f9f42246365b5be98add1fe21d8',1,'DFE']]], + ['slicer_5fmag',['slicer_mag',['../class_d_f_e.html#a39837607d789fc9b65b7fadfab441f1f',1,'DFE']]], + ['slicer_5fmag_5f',['slicer_mag_',['../class_d_f_e.html#a6cf2fe347ce67ef6522c916cbba0ecb5',1,'DFE']]], + ['state_5f',['state_',['../class_digital_filter.html#a0fe7f91edef50acb1d8fb68957b71129',1,'DigitalFilter']]], + ['step',['step',['../class_f_i_r_filter.html#a8c04ad8d144f3edbe769ae069cb54ecc',1,'FIRFilter']]] +]; diff --git a/doc/html/search/all_11.html b/doc/html/search/all_11.html new file mode 100644 index 0000000..0c414ce --- /dev/null +++ b/doc/html/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_11.js b/doc/html/search/all_11.js new file mode 100644 index 0000000..ad322dc --- /dev/null +++ b/doc/html/search/all_11.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['tap_5fscale',['TAP_SCALE',['../example__tx_8cpp.html#af1850df0d59f876e56124608d292faad',1,'example_tx.cpp']]], + ['tap_5fvalues_5f',['tap_values_',['../class_d_f_e.html#a863c529627c7b2b73fcff8bf1db03982',1,'DFE']]], + ['tap_5fweights_5f',['tap_weights_',['../class_ami_tx.html#ab4878fcf087a793ca120ab1e30cabed5',1,'AmiTx::tap_weights_()'],['../class_d_f_e.html#ae05f0b024c5cc05b0fb58c70c36e249a',1,'DFE::tap_weights_()']]], + ['test',['test',['../namespacetest.html',1,'']]], + ['test_2epy',['test.py',['../test_8py.html',1,'']]], + ['the_5fmodel',['the_model',['../namespacetest.html#a353d01c7c783fd0d6d6287c760facb41',1,'test']]] +]; diff --git a/doc/html/search/all_12.html b/doc/html/search/all_12.html new file mode 100644 index 0000000..96c8ac7 --- /dev/null +++ b/doc/html/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_12.js b/doc/html/search/all_12.js new file mode 100644 index 0000000..6b9e13d --- /dev/null +++ b/doc/html/search/all_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['util_2ecpp',['util.cpp',['../util_8cpp.html',1,'']]], + ['util_2eh',['util.h',['../util_8h.html',1,'']]] +]; diff --git a/doc/html/search/all_13.html b/doc/html/search/all_13.html new file mode 100644 index 0000000..539b000 --- /dev/null +++ b/doc/html/search/all_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_13.js b/doc/html/search/all_13.js new file mode 100644 index 0000000..d8aa499 --- /dev/null +++ b/doc/html/search/all_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['Value',['../structibisami_1_1_value.html',1,'ibisami']]] +]; diff --git a/doc/html/search/all_14.html b/doc/html/search/all_14.html new file mode 100644 index 0000000..8424e0c --- /dev/null +++ b/doc/html/search/all_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_14.js b/doc/html/search/all_14.js new file mode 100644 index 0000000..fdd23e2 --- /dev/null +++ b/doc/html/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['weights_5f',['weights_',['../class_d_f_e.html#af23a84b8ec9cf7d1c8d445b8a0427f32',1,'DFE::weights_()'],['../class_f_i_r_filter.html#a46bf99ae4424b44d144e7af652e93847',1,'FIRFilter::weights_()']]] +]; diff --git a/doc/html/search/all_15.html b/doc/html/search/all_15.html new file mode 100644 index 0000000..71dd105 --- /dev/null +++ b/doc/html/search/all_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_15.js b/doc/html/search/all_15.js new file mode 100644 index 0000000..240c3d7 --- /dev/null +++ b/doc/html/search/all_15.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_7eamimodel',['~AMIModel',['../class_a_m_i_model.html#a6c266bc8306cef0ed802c49c8847e8fc',1,'AMIModel']]], + ['_7eamirx',['~AmiRx',['../class_ami_rx.html#a93d8a169660a911021566682e02da75f',1,'AmiRx']]], + ['_7eamitx',['~AmiTx',['../class_ami_tx.html#a0a30ee85116e1f2ba7c4a8876c0b7b8e',1,'AmiTx']]], + ['_7edfe',['~DFE',['../class_d_f_e.html#ae7687b2e6ae9b8a357b1a7737efacd0f',1,'DFE']]], + ['_7edigitalfilter',['~DigitalFilter',['../class_digital_filter.html#a6d4f521ddcfaa2bfabc302cb590cc9e1',1,'DigitalFilter']]], + ['_7efirfilter',['~FIRFilter',['../class_f_i_r_filter.html#a00e4c24c3e9ee081cf69f5e7b38b743e',1,'FIRFilter']]], + ['_7emyrx',['~MyRx',['../class_my_rx.html#a7e347a66aec3f7f14f5b44659d9f98e6',1,'MyRx']]], + ['_7emytx',['~MyTx',['../class_my_tx.html#ab7d79dd462919d22f1ec7e33e448e0ff',1,'MyTx']]] +]; diff --git a/doc/html/search/all_2.html b/doc/html/search/all_2.html new file mode 100644 index 0000000..2c23ed4 --- /dev/null +++ b/doc/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_2.js b/doc/html/search/all_2.js new file mode 100644 index 0000000..b55acc6 --- /dev/null +++ b/doc/html/search/all_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['cdr_5flocked_5f',['cdr_locked_',['../class_d_f_e.html#aa50b830d84b9003160731dc0a0caa5c2',1,'DFE']]], + ['children',['children',['../structibisami_1_1_param_tree.html#a512771aaec7a303ebcafd7c66812dd7f',1,'ibisami::ParamTree']]], + ['clk_5fcntr_5f',['clk_cntr_',['../class_d_f_e.html#aea5a17495cf769abac1ef67221500a4c',1,'DFE']]], + ['clks_5fper_5fadaptation',['CLKS_PER_ADAPTATION',['../dfe_8cpp.html#ae31ec868389f1446158cbd9770069d46',1,'dfe.cpp']]], + ['clock_5fper_5f',['clock_per_',['../class_d_f_e.html#a0d12f483bb415b2fcb48849287bed8f2',1,'DFE']]], + ['clock_5fpers_5f',['clock_pers_',['../class_d_f_e.html#ad7db74a287762cdc91d572a1c5345e69',1,'DFE']]], + ['clog_5f',['clog_',['../class_a_m_i_model.html#a9b1c44767e4e81c4dfcff9bc23907b6c',1,'AMIModel']]], + ['ctle_5f',['ctle_',['../class_ami_rx.html#a64fc9d9aac458b2f6b398c2f7d9f7fb2',1,'AmiRx']]], + ['ctle_5fdc_5fgain',['CTLE_DC_GAIN',['../example__rx_8cpp.html#ae0557c1c5ba957bba97d29da820ea782',1,'example_rx.cpp']]] +]; diff --git a/doc/html/search/all_3.html b/doc/html/search/all_3.html new file mode 100644 index 0000000..7ddb0cf --- /dev/null +++ b/doc/html/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_3.js b/doc/html/search/all_3.js new file mode 100644 index 0000000..3cacb59 --- /dev/null +++ b/doc/html/search/all_3.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['debug_5fstream',['debug_stream',['../ami__rx_8cpp.html#adaacc26a963cc85987b4b356b24c707c',1,'debug_stream(): amimodel.cpp'],['../amimodel_8cpp.html#adaacc26a963cc85987b4b356b24c707c',1,'debug_stream(): amimodel.cpp'],['../dfe_8cpp.html#adaacc26a963cc85987b4b356b24c707c',1,'debug_stream(): amimodel.cpp']]], + ['delay_5fchain_5f',['delay_chain_',['../class_f_i_r_filter.html#ab3084e783d752a4595dc580b555c04e1',1,'FIRFilter']]], + ['den_5f',['den_',['../class_digital_filter.html#aff805e69237ae6c450221f0d4c253bf9',1,'DigitalFilter']]], + ['dfe',['DFE',['../class_d_f_e.html',1,'DFE'],['../class_d_f_e.html#a805ef1fae96f5e865c13948c9fb53cb3',1,'DFE::DFE()']]], + ['dfe_2ecpp',['dfe.cpp',['../dfe_8cpp.html',1,'']]], + ['dfe_2eh',['dfe.h',['../dfe_8h.html',1,'']]], + ['dfe_5f',['dfe_',['../class_ami_rx.html#a68a79c0882e2c3a5bf2850578481bc2b',1,'AmiRx']]], + ['dfe_5fdump_5ffile',['DFE_DUMP_FILE',['../example__rx_8cpp.html#abe3b32bc1a5be479cd2c61677f2a28d9',1,'example_rx.cpp']]], + ['dfe_5fdump_5ffile_5f',['dfe_dump_file_',['../class_ami_rx.html#a3c8f710b6bdaedb0c35918aac0d99038',1,'AmiRx']]], + ['dfe_5fdump_5fstream_5f',['dfe_dump_stream_',['../class_ami_rx.html#a7498677c54b51e987e00b5e692ecedaf',1,'AmiRx']]], + ['dfe_5finput_5ffile',['DFE_INPUT_FILE',['../example__rx_8cpp.html#aec9402fd6f9901dab8080ffb55214677',1,'example_rx.cpp']]], + ['dfe_5finput_5ffile_5f',['dfe_input_file_',['../class_ami_rx.html#a57786bfc4be423b3cfccc03081b6bb50',1,'AmiRx']]], + ['dfe_5finput_5fstream_5f',['dfe_input_stream_',['../class_ami_rx.html#a4032ef1f57bf4b5aef5cb481ea65622c',1,'AmiRx']]], + ['digital_5ffilter_2ecpp',['digital_filter.cpp',['../digital__filter_8cpp.html',1,'']]], + ['digital_5ffilter_2eh',['digital_filter.h',['../digital__filter_8h.html',1,'']]], + ['digitalfilter',['DigitalFilter',['../class_digital_filter.html',1,'DigitalFilter'],['../class_digital_filter.html#aa3d504c14a3dd71c0a8384e03fb9a3b8',1,'DigitalFilter::DigitalFilter()']]], + ['dll_5fexport',['DLL_EXPORT',['../ibisami__api_8cpp.html#a1ca888bd091694c05472e1b91df1a97b',1,'ibisami_api.cpp']]], + ['dump_5fadaptation_5finput_5f',['dump_adaptation_input_',['../class_ami_rx.html#a2bda560b4aa1312dcd9654294b1d7e76',1,'AmiRx']]], + ['dump_5fdfe_5fadaptation_5f',['dump_dfe_adaptation_',['../class_ami_rx.html#a985a6dc41e2c65429ad773a6c04a356b',1,'AmiRx']]], + ['developer_20documentation_20for_20the_20_2aibisami_2a_20project',['Developer Documentation for the *ibisami* Project',['../index.html',1,'']]] +]; diff --git a/doc/html/search/all_4.html b/doc/html/search/all_4.html new file mode 100644 index 0000000..eab9eb1 --- /dev/null +++ b/doc/html/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_4.js b/doc/html/search/all_4.js new file mode 100644 index 0000000..a3d3050 --- /dev/null +++ b/doc/html/search/all_4.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['edge_5fsample_5f',['edge_sample_',['../class_d_f_e.html#a67ee30ee356638ea41589e47adf74b02',1,'DFE']]], + ['eps_5frel',['EPS_REL',['../amimodel_8cpp.html#a62c40728b469a0a6e1f696793569835a',1,'amimodel.cpp']]], + ['err_5fgain_5f',['err_gain_',['../class_d_f_e.html#a124c61874816baa299e8f212772ef1be',1,'DFE']]], + ['example_5frx',['example_rx',['../namespaceexample__rx.html',1,'']]], + ['example_5frx_2ecpp',['example_rx.cpp',['../example__rx_8cpp.html',1,'']]], + ['example_5frx_2epy',['example_rx.py',['../example__rx_8py.html',1,'']]], + ['example_5ftx',['example_tx',['../namespaceexample__tx.html',1,'']]], + ['example_5ftx_2ecpp',['example_tx.cpp',['../example__tx_8cpp.html',1,'']]], + ['example_5ftx_2epy',['example_tx.py',['../example__tx_8py.html',1,'']]] +]; diff --git a/doc/html/search/all_5.html b/doc/html/search/all_5.html new file mode 100644 index 0000000..4dfd1d5 --- /dev/null +++ b/doc/html/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_5.js b/doc/html/search/all_5.js new file mode 100644 index 0000000..8a724a2 --- /dev/null +++ b/doc/html/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['filter_5f',['filter_',['../class_ami_tx.html#a1eb407f2a0aa1010c5d381c172f8425d',1,'AmiTx']]], + ['fir_5ffilter_2ecpp',['fir_filter.cpp',['../fir__filter_8cpp.html',1,'']]], + ['fir_5ffilter_2eh',['fir_filter.h',['../fir__filter_8h.html',1,'']]], + ['firfilter',['FIRFilter',['../class_f_i_r_filter.html',1,'FIRFilter'],['../class_f_i_r_filter.html#a74231f691b8cb9a51eb159d324891a06',1,'FIRFilter::FIRFilter()']]] +]; diff --git a/doc/html/search/all_6.html b/doc/html/search/all_6.html new file mode 100644 index 0000000..b98d731 --- /dev/null +++ b/doc/html/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_6.js b/doc/html/search/all_6.js new file mode 100644 index 0000000..5c82968 --- /dev/null +++ b/doc/html/search/all_6.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['gdllname',['gDLLName',['../namespacetest.html#a80f837d5da2fad005c3ba8151a77ff62',1,'test']]], + ['gen_5fdata',['gen_data',['../class_a_m_i_model.html#a1a12d71ed89870b9d6d07fc1370b3c85',1,'AMIModel']]], + ['gen_5fdata_5fcnt_5f',['gen_data_cnt_',['../class_a_m_i_model.html#ad8680b8371b9c476d046ff87d843fbe9',1,'AMIModel']]], + ['gen_5fdata_5flast_5f',['gen_data_last_',['../class_a_m_i_model.html#aa9cacd5650a194a6f08552f2748bab7a',1,'AMIModel']]], + ['get_5fparam',['get_param',['../class_a_m_i_model.html#a62437e97ce61c76f4b9af78144385416',1,'AMIModel']]], + ['get_5fparam_5fbool',['get_param_bool',['../class_a_m_i_model.html#a490212d1e0db4a5ec7b786b5bd65f354',1,'AMIModel']]], + ['get_5fparam_5ffloat',['get_param_float',['../class_a_m_i_model.html#a2c2413b8658ec23c211cb993dc680fae',1,'AMIModel']]], + ['get_5fparam_5fint',['get_param_int',['../class_a_m_i_model.html#a55b68d8a68be34f672d53968484225e1',1,'AMIModel']]], + ['get_5fvalues',['get_values',['../class_f_i_r_filter.html#ab3e87fa9bb550d3eb109227b8345a4ee',1,'FIRFilter']]], + ['get_5fweights',['get_weights',['../class_d_f_e.html#a07107eb59a0da47d0f18f9b8d27e8063',1,'DFE::get_weights()'],['../class_f_i_r_filter.html#ab15b9d936df370fbb4d3d3e84f08c27d',1,'FIRFilter::get_weights()']]] +]; diff --git a/doc/html/search/all_7.html b/doc/html/search/all_7.html new file mode 100644 index 0000000..ef20222 --- /dev/null +++ b/doc/html/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_7.js b/doc/html/search/all_7.js new file mode 100644 index 0000000..ed525f0 --- /dev/null +++ b/doc/html/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['have_5fpreemph_5f',['have_preemph_',['../class_ami_tx.html#a8e07817524a3626aaa432bcbe7cad30f',1,'AmiTx']]] +]; diff --git a/doc/html/search/all_8.html b/doc/html/search/all_8.html new file mode 100644 index 0000000..12e5aff --- /dev/null +++ b/doc/html/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_8.js b/doc/html/search/all_8.js new file mode 100644 index 0000000..7cd09ed --- /dev/null +++ b/doc/html/search/all_8.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['ibis_5fparams',['ibis_params',['../namespaceexample__rx.html#a00eee5588370bfc22c66f85ab394007d',1,'example_rx.ibis_params()'],['../namespaceexample__tx.html#a3e404ca44bed97340e08746839a1c9ae',1,'example_tx.ibis_params()']]], + ['ibisami',['ibisami',['../namespaceibisami.html',1,'']]], + ['ibisami_5fapi_2ecpp',['ibisami_api.cpp',['../ibisami__api_8cpp.html',1,'']]], + ['impulse_5fmatrix_5f',['impulse_matrix_',['../class_a_m_i_model.html#a26c35bff12c048655bdbd8663a2f0f58',1,'AMIModel']]], + ['init',['init',['../class_my_rx.html#a3e517d6be1e6a475bd97ae75b2bd0afc',1,'MyRx::init()'],['../class_my_tx.html#a4166bdab63c2366409998b2e606f55d2',1,'MyTx::init()'],['../class_ami_rx.html#afb9c0d0efb4722c09529a05e3fb2b263',1,'AmiRx::init()'],['../class_a_m_i_model.html#a8f45652e216686d0efa8db7e9dc0e915',1,'AMIModel::init()']]], + ['init_5fadapt_5ftap_5f',['init_adapt_tap_',['../class_ami_rx.html#a20d036e33d3690b8274fb5e338ce4d53',1,'AmiRx']]], + ['init_5fdata',['init_data',['../namespacetest.html#aebc7edb91e3546a519a0954d1fc0130d',1,'test']]], + ['interp',['interp',['../util_8h.html#a29365382ffc73abb7e51cd6584f40f27',1,'interp(double last_x, double x, double ref_time, double time, double ref_period): util.cpp'],['../util_8cpp.html#a29365382ffc73abb7e51cd6584f40f27',1,'interp(double last_x, double x, double ref_time, double time, double ref_period): util.cpp']]], + ['ibisami',['ibisami',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/doc/html/search/all_9.html b/doc/html/search/all_9.html new file mode 100644 index 0000000..7e10007 --- /dev/null +++ b/doc/html/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_9.js b/doc/html/search/all_9.js new file mode 100644 index 0000000..1eda5f4 --- /dev/null +++ b/doc/html/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kdescription',['kDescription',['../namespaceexample__rx.html#a43bcb97f4b8e21304071af59c8cfc3cb',1,'example_rx.kDescription()'],['../namespaceexample__tx.html#a36e32d86fc22536b157c3490436349d2',1,'example_tx.kDescription()']]], + ['kfilebasename',['kFileBaseName',['../namespaceexample__rx.html#aa79767a896c8628952f2d6eb4e282610',1,'example_rx.kFileBaseName()'],['../namespaceexample__tx.html#ab93d13d5e183d0d18f399041d08798cf',1,'example_tx.kFileBaseName()']]] +]; diff --git a/doc/html/search/all_a.html b/doc/html/search/all_a.html new file mode 100644 index 0000000..95b4c8f --- /dev/null +++ b/doc/html/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_a.js b/doc/html/search/all_a.js new file mode 100644 index 0000000..cc8b049 --- /dev/null +++ b/doc/html/search/all_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['last_5fclk_5fsample_5f',['last_clk_sample_',['../class_d_f_e.html#aab8957a2469ba78fda1e92f855b6fc1a',1,'DFE']]], + ['last_5fsummer_5foutput_5f',['last_summer_output_',['../class_d_f_e.html#af9c9a6e000775b9c20dfb78b80b77025',1,'DFE']]], + ['log',['log',['../class_a_m_i_model.html#a1e8cbd58a09b712dcf76a12f439bce30',1,'AMIModel']]], + ['log_5f',['log_',['../class_a_m_i_model.html#ae701c08f6c4b0d962df4a2f2dcb6196b',1,'AMIModel']]] +]; diff --git a/doc/html/search/all_b.html b/doc/html/search/all_b.html new file mode 100644 index 0000000..1f1beb5 --- /dev/null +++ b/doc/html/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_b.js b/doc/html/search/all_b.js new file mode 100644 index 0000000..3262128 --- /dev/null +++ b/doc/html/search/all_b.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['main_2edox',['main.dox',['../main_8dox.html',1,'']]], + ['max_5finit_5fadapt_5fbits',['MAX_INIT_ADAPT_BITS',['../ami__rx_8cpp.html#ae71bb1d376faff4ef65ff271f2a1bc90',1,'ami_rx.cpp']]], + ['max_5fweights_5f',['max_weights_',['../class_d_f_e.html#a469a8b4a5abe34c8fc769676a9c9ffbf',1,'DFE']]], + ['min_5fweights_5f',['min_weights_',['../class_d_f_e.html#a9ccbe12d16eb4fb19dc69235fddd89c3',1,'DFE']]], + ['mode',['mode',['../class_d_f_e.html#a0202ee4a4e6bc6ad385e7885383691c6',1,'DFE']]], + ['model',['model',['../struct_ami_pointers.html#a382ab778612377867999da1da37eb970',1,'AmiPointers']]], + ['msg',['msg',['../struct_ami_pointers.html#a4922e9e0eb86e7515c5d60a4be512657',1,'AmiPointers::msg()'],['../class_a_m_i_model.html#ae65d47400fd3736682c229dab31392ad',1,'AMIModel::msg()']]], + ['msg_5f',['msg_',['../class_a_m_i_model.html#acc9d4703088b0a69f649c84a1e134cfd',1,'AMIModel']]], + ['my_5frx',['my_rx',['../example__rx_8cpp.html#af5340cd727dbeb2e639398e8f2b5abee',1,'example_rx.cpp']]], + ['my_5ftx',['my_tx',['../example__tx_8cpp.html#a7477fa3c6e307f34f7d51829b16bb839',1,'example_tx.cpp']]], + ['myrx',['MyRx',['../class_my_rx.html',1,'MyRx'],['../class_my_rx.html#a15ae23287355c2bfbdb192da7af7f043',1,'MyRx::MyRx()']]], + ['mytx',['MyTx',['../class_my_tx.html',1,'MyTx'],['../class_my_tx.html#a1fe85e2eeacfdc9fb6b1bf77702243be',1,'MyTx::MyTx()']]] +]; diff --git a/doc/html/search/all_c.html b/doc/html/search/all_c.html new file mode 100644 index 0000000..ec9a0c8 --- /dev/null +++ b/doc/html/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_c.js b/doc/html/search/all_c.js new file mode 100644 index 0000000..374ab2e --- /dev/null +++ b/doc/html/search/all_c.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['name',['name',['../structibisami_1_1_param_tree.html#a6776eb67c955420e87360ed764bc5cf3',1,'ibisami::ParamTree']]], + ['name_5f',['name_',['../class_a_m_i_model.html#a42e00992da9baf93d81d1d9fcd32d8e6',1,'AMIModel']]], + ['next_5fbackward_5ffilter_5foutput_5f',['next_backward_filter_output_',['../class_d_f_e.html#aad542a71162acadaa9cf2ea783bcd1b7',1,'DFE']]], + ['next_5fclock_5f',['next_clock_',['../class_d_f_e.html#a2fd951edceae312dfae55c5708905798',1,'DFE']]], + ['next_5fui_5fedge_5f',['next_ui_edge_',['../class_d_f_e.html#a3b73aff8ad9982b1585697d51dbeb038',1,'DFE']]], + ['node',['Node',['../structibisami_1_1_node.html',1,'ibisami']]], + ['num_5f',['num_',['../class_digital_filter.html#abf0263de2d7837bdc002615d3d7ca365',1,'DigitalFilter']]], + ['num_5ftaps_5f',['num_taps_',['../class_ami_tx.html#a166891685483a94632bbcd4e2afebf88',1,'AmiTx::num_taps_()'],['../class_digital_filter.html#ad9099f4f1da3f23988591b9e733861d7',1,'DigitalFilter::num_taps_()']]], + ['number_5fof_5frows_5f',['number_of_rows_',['../class_a_m_i_model.html#aaaf94b76a519e60318e1874bb190e9a8',1,'AMIModel']]] +]; diff --git a/doc/html/search/all_d.html b/doc/html/search/all_d.html new file mode 100644 index 0000000..654d198 --- /dev/null +++ b/doc/html/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_d.js b/doc/html/search/all_d.js new file mode 100644 index 0000000..7f9b05e --- /dev/null +++ b/doc/html/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_28_29',['operator()',['../structibisami_1_1_value.html#ac3233a56bec33b072bc669cb617a0f4b',1,'ibisami::Value::operator()(const ibisami::ParamTree &param_tree) const '],['../structibisami_1_1_value.html#aa74e1ca6fe4abdbe048cc58deacbefed',1,'ibisami::Value::operator()(const std::string &val_str) const '],['../structibisami_1_1_node.html#a138863b6b5304b1daeb7453e6c191900',1,'ibisami::Node::operator()(const ibisami::ParamTree &param_tree) const '],['../structibisami_1_1_node.html#a0ca5b7bc333470b4772b7bc88434f4c2',1,'ibisami::Node::operator()(const std::string &val_str) const ']]], + ['oversample_5ffactor_5f',['oversample_factor_',['../class_f_i_r_filter.html#aeafbfb79d318c87385f37b906d214a2f',1,'FIRFilter']]] +]; diff --git a/doc/html/search/all_e.html b/doc/html/search/all_e.html new file mode 100644 index 0000000..812aced --- /dev/null +++ b/doc/html/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_e.js b/doc/html/search/all_e.js new file mode 100644 index 0000000..499576a --- /dev/null +++ b/doc/html/search/all_e.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['param_5fstr',['param_str',['../class_a_m_i_model.html#abb8b57f839746e955774d7bc8f1b5d02',1,'AMIModel']]], + ['param_5fstr_5f',['param_str_',['../class_a_m_i_model.html#ab7aeef08245acc654271341cdf0139f9',1,'AMIModel']]], + ['param_5ftree_5f',['param_tree_',['../class_a_m_i_model.html#a4da53456e13a1224f2bb47396ab0ecbd',1,'AMIModel']]], + ['paramnode',['ParamNode',['../namespaceibisami.html#a56481565abb44593a678738f57c04109',1,'ibisami']]], + ['params',['params',['../struct_ami_pointers.html#a4a71183d01dde25a4cb9fabb89ee6d01',1,'AmiPointers']]], + ['paramtree',['ParamTree',['../structibisami_1_1_param_tree.html',1,'ibisami']]], + ['parse_5fparams',['parse_params',['../class_a_m_i_model.html#ad99c8cb946fe1d0b2197253130969368',1,'AMIModel']]], + ['parseres',['ParseRes',['../amimodel_8h.html#a5fbe8bcd249e7070ded2dadafa23ec1f',1,'amimodel.h']]], + ['pi',['PI',['../example__rx_8cpp.html#a598a3330b3c21701223ee0ca14316eca',1,'example_rx.cpp']]], + ['prbs_5flen',['PRBS_LEN',['../amimodel_8h.html#ab851168a21246c759c23a126c192360f',1,'amimodel.h']]], + ['proc_5fimp',['proc_imp',['../class_ami_rx.html#a74a1a6c1ac9a46634cb0d0ab56b83c4e',1,'AmiRx::proc_imp()'],['../class_ami_tx.html#a94649674c8e8442c1d5434d509165594',1,'AmiTx::proc_imp()'],['../class_a_m_i_model.html#a52d1f23607e7f12fa1ab61d809231c11',1,'AMIModel::proc_imp()']]], + ['proc_5fsig',['proc_sig',['../class_ami_rx.html#aac00499d02f5e4a3f2ddce49c5b1599f',1,'AmiRx::proc_sig()'],['../class_ami_tx.html#a8f326f6dfa875c00800491ff2104f248',1,'AmiTx::proc_sig()'],['../class_a_m_i_model.html#abb1d05835230a1b0e8f6b98002d8f4ef',1,'AMIModel::proc_sig()']]] +]; diff --git a/doc/html/search/all_f.html b/doc/html/search/all_f.html new file mode 100644 index 0000000..c395a47 --- /dev/null +++ b/doc/html/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/all_f.js b/doc/html/search/all_f.js new file mode 100644 index 0000000..8b66f1d --- /dev/null +++ b/doc/html/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['readme_2emd',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]], + ['rx_5fbw',['RX_BW',['../example__rx_8cpp.html#a4a4e7a01439b700bd3a6becd6dd122e0',1,'example_rx.cpp']]] +]; diff --git a/doc/html/search/classes_0.html b/doc/html/search/classes_0.html new file mode 100644 index 0000000..8888fa8 --- /dev/null +++ b/doc/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_0.js b/doc/html/search/classes_0.js new file mode 100644 index 0000000..c408a3c --- /dev/null +++ b/doc/html/search/classes_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['amigrammar',['AMIGrammar',['../structibisami_1_1_a_m_i_grammar.html',1,'ibisami']]], + ['amimodel',['AMIModel',['../class_a_m_i_model.html',1,'']]], + ['amipointers',['AmiPointers',['../struct_ami_pointers.html',1,'']]], + ['amirx',['AmiRx',['../class_ami_rx.html',1,'']]], + ['amitx',['AmiTx',['../class_ami_tx.html',1,'']]] +]; diff --git a/doc/html/search/classes_1.html b/doc/html/search/classes_1.html new file mode 100644 index 0000000..a402bbe --- /dev/null +++ b/doc/html/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_1.js b/doc/html/search/classes_1.js new file mode 100644 index 0000000..8d517b6 --- /dev/null +++ b/doc/html/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dfe',['DFE',['../class_d_f_e.html',1,'']]], + ['digitalfilter',['DigitalFilter',['../class_digital_filter.html',1,'']]] +]; diff --git a/doc/html/search/classes_2.html b/doc/html/search/classes_2.html new file mode 100644 index 0000000..003214b --- /dev/null +++ b/doc/html/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_2.js b/doc/html/search/classes_2.js new file mode 100644 index 0000000..9eeffc7 --- /dev/null +++ b/doc/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['firfilter',['FIRFilter',['../class_f_i_r_filter.html',1,'']]] +]; diff --git a/doc/html/search/classes_3.html b/doc/html/search/classes_3.html new file mode 100644 index 0000000..fadcfc8 --- /dev/null +++ b/doc/html/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_3.js b/doc/html/search/classes_3.js new file mode 100644 index 0000000..dddae11 --- /dev/null +++ b/doc/html/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['myrx',['MyRx',['../class_my_rx.html',1,'']]], + ['mytx',['MyTx',['../class_my_tx.html',1,'']]] +]; diff --git a/doc/html/search/classes_4.html b/doc/html/search/classes_4.html new file mode 100644 index 0000000..6056b20 --- /dev/null +++ b/doc/html/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_4.js b/doc/html/search/classes_4.js new file mode 100644 index 0000000..86ec8d9 --- /dev/null +++ b/doc/html/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['node',['Node',['../structibisami_1_1_node.html',1,'ibisami']]] +]; diff --git a/doc/html/search/classes_5.html b/doc/html/search/classes_5.html new file mode 100644 index 0000000..ca7c947 --- /dev/null +++ b/doc/html/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_5.js b/doc/html/search/classes_5.js new file mode 100644 index 0000000..571a063 --- /dev/null +++ b/doc/html/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['paramtree',['ParamTree',['../structibisami_1_1_param_tree.html',1,'ibisami']]] +]; diff --git a/doc/html/search/classes_6.html b/doc/html/search/classes_6.html new file mode 100644 index 0000000..eb8935e --- /dev/null +++ b/doc/html/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/classes_6.js b/doc/html/search/classes_6.js new file mode 100644 index 0000000..d8aa499 --- /dev/null +++ b/doc/html/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['Value',['../structibisami_1_1_value.html',1,'ibisami']]] +]; diff --git a/doc/html/search/defines_0.html b/doc/html/search/defines_0.html new file mode 100644 index 0000000..27eaf8c --- /dev/null +++ b/doc/html/search/defines_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_0.js b/doc/html/search/defines_0.js new file mode 100644 index 0000000..68f3a3d --- /dev/null +++ b/doc/html/search/defines_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['clks_5fper_5fadaptation',['CLKS_PER_ADAPTATION',['../dfe_8cpp.html#ae31ec868389f1446158cbd9770069d46',1,'dfe.cpp']]], + ['ctle_5fdc_5fgain',['CTLE_DC_GAIN',['../example__rx_8cpp.html#ae0557c1c5ba957bba97d29da820ea782',1,'example_rx.cpp']]] +]; diff --git a/doc/html/search/defines_1.html b/doc/html/search/defines_1.html new file mode 100644 index 0000000..b0d10dd --- /dev/null +++ b/doc/html/search/defines_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_1.js b/doc/html/search/defines_1.js new file mode 100644 index 0000000..8c40ee8 --- /dev/null +++ b/doc/html/search/defines_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['dfe_5fdump_5ffile',['DFE_DUMP_FILE',['../example__rx_8cpp.html#abe3b32bc1a5be479cd2c61677f2a28d9',1,'example_rx.cpp']]], + ['dfe_5finput_5ffile',['DFE_INPUT_FILE',['../example__rx_8cpp.html#aec9402fd6f9901dab8080ffb55214677',1,'example_rx.cpp']]], + ['dll_5fexport',['DLL_EXPORT',['../ibisami__api_8cpp.html#a1ca888bd091694c05472e1b91df1a97b',1,'ibisami_api.cpp']]] +]; diff --git a/doc/html/search/defines_2.html b/doc/html/search/defines_2.html new file mode 100644 index 0000000..89e5956 --- /dev/null +++ b/doc/html/search/defines_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_2.js b/doc/html/search/defines_2.js new file mode 100644 index 0000000..7f0c119 --- /dev/null +++ b/doc/html/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eps_5frel',['EPS_REL',['../amimodel_8cpp.html#a62c40728b469a0a6e1f696793569835a',1,'amimodel.cpp']]] +]; diff --git a/doc/html/search/defines_3.html b/doc/html/search/defines_3.html new file mode 100644 index 0000000..0d686ae --- /dev/null +++ b/doc/html/search/defines_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_3.js b/doc/html/search/defines_3.js new file mode 100644 index 0000000..678276a --- /dev/null +++ b/doc/html/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['max_5finit_5fadapt_5fbits',['MAX_INIT_ADAPT_BITS',['../ami__rx_8cpp.html#ae71bb1d376faff4ef65ff271f2a1bc90',1,'ami_rx.cpp']]] +]; diff --git a/doc/html/search/defines_4.html b/doc/html/search/defines_4.html new file mode 100644 index 0000000..ee960c9 --- /dev/null +++ b/doc/html/search/defines_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_4.js b/doc/html/search/defines_4.js new file mode 100644 index 0000000..5698733 --- /dev/null +++ b/doc/html/search/defines_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['pi',['PI',['../example__rx_8cpp.html#a598a3330b3c21701223ee0ca14316eca',1,'example_rx.cpp']]], + ['prbs_5flen',['PRBS_LEN',['../amimodel_8h.html#ab851168a21246c759c23a126c192360f',1,'amimodel.h']]] +]; diff --git a/doc/html/search/defines_5.html b/doc/html/search/defines_5.html new file mode 100644 index 0000000..69f944e --- /dev/null +++ b/doc/html/search/defines_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_5.js b/doc/html/search/defines_5.js new file mode 100644 index 0000000..94db8bd --- /dev/null +++ b/doc/html/search/defines_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rx_5fbw',['RX_BW',['../example__rx_8cpp.html#a4a4e7a01439b700bd3a6becd6dd122e0',1,'example_rx.cpp']]] +]; diff --git a/doc/html/search/defines_6.html b/doc/html/search/defines_6.html new file mode 100644 index 0000000..26f6099 --- /dev/null +++ b/doc/html/search/defines_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/defines_6.js b/doc/html/search/defines_6.js new file mode 100644 index 0000000..3b5d36d --- /dev/null +++ b/doc/html/search/defines_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tap_5fscale',['TAP_SCALE',['../example__tx_8cpp.html#af1850df0d59f876e56124608d292faad',1,'example_tx.cpp']]] +]; diff --git a/doc/html/search/files_0.html b/doc/html/search/files_0.html new file mode 100644 index 0000000..0457853 --- /dev/null +++ b/doc/html/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_0.js b/doc/html/search/files_0.js new file mode 100644 index 0000000..c944b5b --- /dev/null +++ b/doc/html/search/files_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['ami_5frx_2ecpp',['ami_rx.cpp',['../ami__rx_8cpp.html',1,'']]], + ['ami_5frx_2eh',['ami_rx.h',['../ami__rx_8h.html',1,'']]], + ['ami_5ftx_2ecpp',['ami_tx.cpp',['../ami__tx_8cpp.html',1,'']]], + ['ami_5ftx_2eh',['ami_tx.h',['../ami__tx_8h.html',1,'']]], + ['amimodel_2ecpp',['amimodel.cpp',['../amimodel_8cpp.html',1,'']]], + ['amimodel_2eh',['amimodel.h',['../amimodel_8h.html',1,'']]] +]; diff --git a/doc/html/search/files_1.html b/doc/html/search/files_1.html new file mode 100644 index 0000000..ce0a3a7 --- /dev/null +++ b/doc/html/search/files_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_1.js b/doc/html/search/files_1.js new file mode 100644 index 0000000..c173933 --- /dev/null +++ b/doc/html/search/files_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['dfe_2ecpp',['dfe.cpp',['../dfe_8cpp.html',1,'']]], + ['dfe_2eh',['dfe.h',['../dfe_8h.html',1,'']]], + ['digital_5ffilter_2ecpp',['digital_filter.cpp',['../digital__filter_8cpp.html',1,'']]], + ['digital_5ffilter_2eh',['digital_filter.h',['../digital__filter_8h.html',1,'']]] +]; diff --git a/doc/html/search/files_2.html b/doc/html/search/files_2.html new file mode 100644 index 0000000..d188d98 --- /dev/null +++ b/doc/html/search/files_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_2.js b/doc/html/search/files_2.js new file mode 100644 index 0000000..7ec817d --- /dev/null +++ b/doc/html/search/files_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['example_5frx_2ecpp',['example_rx.cpp',['../example__rx_8cpp.html',1,'']]], + ['example_5frx_2epy',['example_rx.py',['../example__rx_8py.html',1,'']]], + ['example_5ftx_2ecpp',['example_tx.cpp',['../example__tx_8cpp.html',1,'']]], + ['example_5ftx_2epy',['example_tx.py',['../example__tx_8py.html',1,'']]] +]; diff --git a/doc/html/search/files_3.html b/doc/html/search/files_3.html new file mode 100644 index 0000000..7fa556e --- /dev/null +++ b/doc/html/search/files_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_3.js b/doc/html/search/files_3.js new file mode 100644 index 0000000..2346532 --- /dev/null +++ b/doc/html/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fir_5ffilter_2ecpp',['fir_filter.cpp',['../fir__filter_8cpp.html',1,'']]], + ['fir_5ffilter_2eh',['fir_filter.h',['../fir__filter_8h.html',1,'']]] +]; diff --git a/doc/html/search/files_4.html b/doc/html/search/files_4.html new file mode 100644 index 0000000..192383b --- /dev/null +++ b/doc/html/search/files_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_4.js b/doc/html/search/files_4.js new file mode 100644 index 0000000..0274e6f --- /dev/null +++ b/doc/html/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ibisami_5fapi_2ecpp',['ibisami_api.cpp',['../ibisami__api_8cpp.html',1,'']]] +]; diff --git a/doc/html/search/files_5.html b/doc/html/search/files_5.html new file mode 100644 index 0000000..af3aaba --- /dev/null +++ b/doc/html/search/files_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_5.js b/doc/html/search/files_5.js new file mode 100644 index 0000000..c969798 --- /dev/null +++ b/doc/html/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2edox',['main.dox',['../main_8dox.html',1,'']]] +]; diff --git a/doc/html/search/files_6.html b/doc/html/search/files_6.html new file mode 100644 index 0000000..4f7e395 --- /dev/null +++ b/doc/html/search/files_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_6.js b/doc/html/search/files_6.js new file mode 100644 index 0000000..66a27ec --- /dev/null +++ b/doc/html/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_2emd',['README.md',['../_r_e_a_d_m_e_8md.html',1,'']]] +]; diff --git a/doc/html/search/files_7.html b/doc/html/search/files_7.html new file mode 100644 index 0000000..65578c2 --- /dev/null +++ b/doc/html/search/files_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_7.js b/doc/html/search/files_7.js new file mode 100644 index 0000000..d40bb98 --- /dev/null +++ b/doc/html/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['test_2epy',['test.py',['../test_8py.html',1,'']]] +]; diff --git a/doc/html/search/files_8.html b/doc/html/search/files_8.html new file mode 100644 index 0000000..105d31d --- /dev/null +++ b/doc/html/search/files_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/files_8.js b/doc/html/search/files_8.js new file mode 100644 index 0000000..6b9e13d --- /dev/null +++ b/doc/html/search/files_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['util_2ecpp',['util.cpp',['../util_8cpp.html',1,'']]], + ['util_2eh',['util.h',['../util_8h.html',1,'']]] +]; diff --git a/doc/html/search/functions_0.html b/doc/html/search/functions_0.html new file mode 100644 index 0000000..88c8a26 --- /dev/null +++ b/doc/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_0.js b/doc/html/search/functions_0.js new file mode 100644 index 0000000..6734b21 --- /dev/null +++ b/doc/html/search/functions_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ami_5fclose',['AMI_Close',['../ibisami__api_8cpp.html#a5290351461f5a1fdf0e8cf061b306b2a',1,'ibisami_api.cpp']]], + ['ami_5finit',['AMI_Init',['../ibisami__api_8cpp.html#a2518d31187e06bed6023ec23657faab9',1,'ibisami_api.cpp']]], + ['amirx',['AmiRx',['../class_ami_rx.html#a025faccfe2a5c56888da32370050b46e',1,'AmiRx']]], + ['apply',['apply',['../class_d_f_e.html#a699c915b3b85b1b8c7f6c4dde2276f3b',1,'DFE::apply()'],['../class_digital_filter.html#ab9e95357beb9cca85546dfa6714a0fb2',1,'DigitalFilter::apply()'],['../class_f_i_r_filter.html#a5f79d32e1ebec3ffc79f623fb4cd4061',1,'FIRFilter::apply()']]] +]; diff --git a/doc/html/search/functions_1.html b/doc/html/search/functions_1.html new file mode 100644 index 0000000..215c1bf --- /dev/null +++ b/doc/html/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_1.js b/doc/html/search/functions_1.js new file mode 100644 index 0000000..7ce150a --- /dev/null +++ b/doc/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['boost_5ffusion_5fadapt_5fstruct',['BOOST_FUSION_ADAPT_STRUCT',['../amimodel_8h.html#a3b6210648aa742440c6393c5c5ff64b3',1,'amimodel.h']]] +]; diff --git a/doc/html/search/functions_2.html b/doc/html/search/functions_2.html new file mode 100644 index 0000000..f17abff --- /dev/null +++ b/doc/html/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_2.js b/doc/html/search/functions_2.js new file mode 100644 index 0000000..ca55d98 --- /dev/null +++ b/doc/html/search/functions_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dfe',['DFE',['../class_d_f_e.html#a805ef1fae96f5e865c13948c9fb53cb3',1,'DFE']]], + ['digitalfilter',['DigitalFilter',['../class_digital_filter.html#aa3d504c14a3dd71c0a8384e03fb9a3b8',1,'DigitalFilter']]] +]; diff --git a/doc/html/search/functions_3.html b/doc/html/search/functions_3.html new file mode 100644 index 0000000..8a4bbe1 --- /dev/null +++ b/doc/html/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_3.js b/doc/html/search/functions_3.js new file mode 100644 index 0000000..7fb95bb --- /dev/null +++ b/doc/html/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['firfilter',['FIRFilter',['../class_f_i_r_filter.html#a74231f691b8cb9a51eb159d324891a06',1,'FIRFilter']]] +]; diff --git a/doc/html/search/functions_4.html b/doc/html/search/functions_4.html new file mode 100644 index 0000000..cce7ce9 --- /dev/null +++ b/doc/html/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_4.js b/doc/html/search/functions_4.js new file mode 100644 index 0000000..6d30514 --- /dev/null +++ b/doc/html/search/functions_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['gen_5fdata',['gen_data',['../class_a_m_i_model.html#a1a12d71ed89870b9d6d07fc1370b3c85',1,'AMIModel']]], + ['get_5fparam',['get_param',['../class_a_m_i_model.html#a62437e97ce61c76f4b9af78144385416',1,'AMIModel']]], + ['get_5fparam_5fbool',['get_param_bool',['../class_a_m_i_model.html#a490212d1e0db4a5ec7b786b5bd65f354',1,'AMIModel']]], + ['get_5fparam_5ffloat',['get_param_float',['../class_a_m_i_model.html#a2c2413b8658ec23c211cb993dc680fae',1,'AMIModel']]], + ['get_5fparam_5fint',['get_param_int',['../class_a_m_i_model.html#a55b68d8a68be34f672d53968484225e1',1,'AMIModel']]], + ['get_5fvalues',['get_values',['../class_f_i_r_filter.html#ab3e87fa9bb550d3eb109227b8345a4ee',1,'FIRFilter']]], + ['get_5fweights',['get_weights',['../class_d_f_e.html#a07107eb59a0da47d0f18f9b8d27e8063',1,'DFE::get_weights()'],['../class_f_i_r_filter.html#ab15b9d936df370fbb4d3d3e84f08c27d',1,'FIRFilter::get_weights()']]] +]; diff --git a/doc/html/search/functions_5.html b/doc/html/search/functions_5.html new file mode 100644 index 0000000..e2f6e31 --- /dev/null +++ b/doc/html/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_5.js b/doc/html/search/functions_5.js new file mode 100644 index 0000000..97f29f6 --- /dev/null +++ b/doc/html/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['init',['init',['../class_my_rx.html#a3e517d6be1e6a475bd97ae75b2bd0afc',1,'MyRx::init()'],['../class_my_tx.html#a4166bdab63c2366409998b2e606f55d2',1,'MyTx::init()'],['../class_ami_rx.html#afb9c0d0efb4722c09529a05e3fb2b263',1,'AmiRx::init()'],['../class_a_m_i_model.html#a8f45652e216686d0efa8db7e9dc0e915',1,'AMIModel::init()']]], + ['interp',['interp',['../util_8h.html#a29365382ffc73abb7e51cd6584f40f27',1,'interp(double last_x, double x, double ref_time, double time, double ref_period): util.cpp'],['../util_8cpp.html#a29365382ffc73abb7e51cd6584f40f27',1,'interp(double last_x, double x, double ref_time, double time, double ref_period): util.cpp']]] +]; diff --git a/doc/html/search/functions_6.html b/doc/html/search/functions_6.html new file mode 100644 index 0000000..342a076 --- /dev/null +++ b/doc/html/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_6.js b/doc/html/search/functions_6.js new file mode 100644 index 0000000..0093f02 --- /dev/null +++ b/doc/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['log',['log',['../class_a_m_i_model.html#a1e8cbd58a09b712dcf76a12f439bce30',1,'AMIModel']]] +]; diff --git a/doc/html/search/functions_7.html b/doc/html/search/functions_7.html new file mode 100644 index 0000000..04db8a6 --- /dev/null +++ b/doc/html/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_7.js b/doc/html/search/functions_7.js new file mode 100644 index 0000000..eaeea31 --- /dev/null +++ b/doc/html/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['msg',['msg',['../class_a_m_i_model.html#ae65d47400fd3736682c229dab31392ad',1,'AMIModel']]], + ['myrx',['MyRx',['../class_my_rx.html#a15ae23287355c2bfbdb192da7af7f043',1,'MyRx']]], + ['mytx',['MyTx',['../class_my_tx.html#a1fe85e2eeacfdc9fb6b1bf77702243be',1,'MyTx']]] +]; diff --git a/doc/html/search/functions_8.html b/doc/html/search/functions_8.html new file mode 100644 index 0000000..6bab2c8 --- /dev/null +++ b/doc/html/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_8.js b/doc/html/search/functions_8.js new file mode 100644 index 0000000..6180675 --- /dev/null +++ b/doc/html/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_28_29',['operator()',['../structibisami_1_1_value.html#ac3233a56bec33b072bc669cb617a0f4b',1,'ibisami::Value::operator()(const ibisami::ParamTree &param_tree) const '],['../structibisami_1_1_value.html#aa74e1ca6fe4abdbe048cc58deacbefed',1,'ibisami::Value::operator()(const std::string &val_str) const '],['../structibisami_1_1_node.html#a138863b6b5304b1daeb7453e6c191900',1,'ibisami::Node::operator()(const ibisami::ParamTree &param_tree) const '],['../structibisami_1_1_node.html#a0ca5b7bc333470b4772b7bc88434f4c2',1,'ibisami::Node::operator()(const std::string &val_str) const ']]] +]; diff --git a/doc/html/search/functions_9.html b/doc/html/search/functions_9.html new file mode 100644 index 0000000..e32df63 --- /dev/null +++ b/doc/html/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_9.js b/doc/html/search/functions_9.js new file mode 100644 index 0000000..99859f6 --- /dev/null +++ b/doc/html/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['param_5fstr',['param_str',['../class_a_m_i_model.html#abb8b57f839746e955774d7bc8f1b5d02',1,'AMIModel']]], + ['parse_5fparams',['parse_params',['../class_a_m_i_model.html#ad99c8cb946fe1d0b2197253130969368',1,'AMIModel']]], + ['proc_5fimp',['proc_imp',['../class_ami_rx.html#a74a1a6c1ac9a46634cb0d0ab56b83c4e',1,'AmiRx::proc_imp()'],['../class_ami_tx.html#a94649674c8e8442c1d5434d509165594',1,'AmiTx::proc_imp()'],['../class_a_m_i_model.html#a52d1f23607e7f12fa1ab61d809231c11',1,'AMIModel::proc_imp()']]], + ['proc_5fsig',['proc_sig',['../class_ami_rx.html#aac00499d02f5e4a3f2ddce49c5b1599f',1,'AmiRx::proc_sig()'],['../class_ami_tx.html#a8f326f6dfa875c00800491ff2104f248',1,'AmiTx::proc_sig()'],['../class_a_m_i_model.html#abb1d05835230a1b0e8f6b98002d8f4ef',1,'AMIModel::proc_sig()']]] +]; diff --git a/doc/html/search/functions_a.html b/doc/html/search/functions_a.html new file mode 100644 index 0000000..1ae07c7 --- /dev/null +++ b/doc/html/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_a.js b/doc/html/search/functions_a.js new file mode 100644 index 0000000..d2d856c --- /dev/null +++ b/doc/html/search/functions_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['set_5fmax_5fweights',['set_max_weights',['../class_d_f_e.html#acc351ad844da9fc180f27f71eae0dcb7',1,'DFE']]], + ['set_5fmin_5fweights',['set_min_weights',['../class_d_f_e.html#af44c7fec6b03d7786ca0dc2006bd2f08',1,'DFE']]], + ['set_5fweights',['set_weights',['../class_f_i_r_filter.html#afa7d746246050f6af4e8958d46763a9f',1,'FIRFilter']]], + ['sgn',['sgn',['../util_8h.html#a1ab31b90bc584c635ec159468ceed9b2',1,'util.h']]], + ['slicer_5fmag',['slicer_mag',['../class_d_f_e.html#a39837607d789fc9b65b7fadfab441f1f',1,'DFE']]], + ['step',['step',['../class_f_i_r_filter.html#a8c04ad8d144f3edbe769ae069cb54ecc',1,'FIRFilter']]] +]; diff --git a/doc/html/search/functions_b.html b/doc/html/search/functions_b.html new file mode 100644 index 0000000..6848eb5 --- /dev/null +++ b/doc/html/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/functions_b.js b/doc/html/search/functions_b.js new file mode 100644 index 0000000..240c3d7 --- /dev/null +++ b/doc/html/search/functions_b.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['_7eamimodel',['~AMIModel',['../class_a_m_i_model.html#a6c266bc8306cef0ed802c49c8847e8fc',1,'AMIModel']]], + ['_7eamirx',['~AmiRx',['../class_ami_rx.html#a93d8a169660a911021566682e02da75f',1,'AmiRx']]], + ['_7eamitx',['~AmiTx',['../class_ami_tx.html#a0a30ee85116e1f2ba7c4a8876c0b7b8e',1,'AmiTx']]], + ['_7edfe',['~DFE',['../class_d_f_e.html#ae7687b2e6ae9b8a357b1a7737efacd0f',1,'DFE']]], + ['_7edigitalfilter',['~DigitalFilter',['../class_digital_filter.html#a6d4f521ddcfaa2bfabc302cb590cc9e1',1,'DigitalFilter']]], + ['_7efirfilter',['~FIRFilter',['../class_f_i_r_filter.html#a00e4c24c3e9ee081cf69f5e7b38b743e',1,'FIRFilter']]], + ['_7emyrx',['~MyRx',['../class_my_rx.html#a7e347a66aec3f7f14f5b44659d9f98e6',1,'MyRx']]], + ['_7emytx',['~MyTx',['../class_my_tx.html#ab7d79dd462919d22f1ec7e33e448e0ff',1,'MyTx']]] +]; diff --git a/doc/html/search/namespaces_0.html b/doc/html/search/namespaces_0.html new file mode 100644 index 0000000..6d5853b --- /dev/null +++ b/doc/html/search/namespaces_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/namespaces_0.js b/doc/html/search/namespaces_0.js new file mode 100644 index 0000000..037e28c --- /dev/null +++ b/doc/html/search/namespaces_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['example_5frx',['example_rx',['../namespaceexample__rx.html',1,'']]], + ['example_5ftx',['example_tx',['../namespaceexample__tx.html',1,'']]] +]; diff --git a/doc/html/search/namespaces_1.html b/doc/html/search/namespaces_1.html new file mode 100644 index 0000000..8392b75 --- /dev/null +++ b/doc/html/search/namespaces_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/namespaces_1.js b/doc/html/search/namespaces_1.js new file mode 100644 index 0000000..5efcc0c --- /dev/null +++ b/doc/html/search/namespaces_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ibisami',['ibisami',['../namespaceibisami.html',1,'']]] +]; diff --git a/doc/html/search/namespaces_2.html b/doc/html/search/namespaces_2.html new file mode 100644 index 0000000..6fc2dd8 --- /dev/null +++ b/doc/html/search/namespaces_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/namespaces_2.js b/doc/html/search/namespaces_2.js new file mode 100644 index 0000000..f0c003f --- /dev/null +++ b/doc/html/search/namespaces_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['test',['test',['../namespacetest.html',1,'']]] +]; diff --git a/doc/html/search/nomatches.html b/doc/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/doc/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/doc/html/search/pages_0.html b/doc/html/search/pages_0.html new file mode 100644 index 0000000..4b85b34 --- /dev/null +++ b/doc/html/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/pages_0.js b/doc/html/search/pages_0.js new file mode 100644 index 0000000..3ab9e4e --- /dev/null +++ b/doc/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['developer_20documentation_20for_20the_20_2aibisami_2a_20project',['Developer Documentation for the *ibisami* Project',['../index.html',1,'']]] +]; diff --git a/doc/html/search/pages_1.html b/doc/html/search/pages_1.html new file mode 100644 index 0000000..8c53f61 --- /dev/null +++ b/doc/html/search/pages_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/pages_1.js b/doc/html/search/pages_1.js new file mode 100644 index 0000000..4f76403 --- /dev/null +++ b/doc/html/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ibisami',['ibisami',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/doc/html/search/search.css b/doc/html/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/doc/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/doc/html/search/search.js b/doc/html/search/search.js new file mode 100644 index 0000000..dedce3b --- /dev/null +++ b/doc/html/search/search.js @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/typedefs_0.js b/doc/html/search/typedefs_0.js new file mode 100644 index 0000000..6045dcd --- /dev/null +++ b/doc/html/search/typedefs_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['paramnode',['ParamNode',['../namespaceibisami.html#a56481565abb44593a678738f57c04109',1,'ibisami']]], + ['parseres',['ParseRes',['../amimodel_8h.html#a5fbe8bcd249e7070ded2dadafa23ec1f',1,'amimodel.h']]] +]; diff --git a/doc/html/search/variables_0.html b/doc/html/search/variables_0.html new file mode 100644 index 0000000..2837a57 --- /dev/null +++ b/doc/html/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_0.js b/doc/html/search/variables_0.js new file mode 100644 index 0000000..a4c1f78 --- /dev/null +++ b/doc/html/search/variables_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['aggressors_5f',['aggressors_',['../class_a_m_i_model.html#aab3a042b2459b4b838cb61bf92a50d03',1,'AMIModel']]], + ['ami_5fmodel',['ami_model',['../example__rx_8cpp.html#aa0c4a4f61a9cc689992be1759eb7041a',1,'ami_model(): example_rx.cpp'],['../example__tx_8cpp.html#aa0c4a4f61a9cc689992be1759eb7041a',1,'ami_model(): example_tx.cpp'],['../ibisami__api_8cpp.html#aa0c4a4f61a9cc689992be1759eb7041a',1,'ami_model(): example_rx.cpp']]], + ['ami_5fparams',['ami_params',['../namespaceexample__rx.html#a4831c9bdcc98a8eee58424fe9191202c',1,'example_rx.ami_params()'],['../namespaceexample__tx.html#a794df1fee452f02247313e65b27080db',1,'example_tx.ami_params()']]] +]; diff --git a/doc/html/search/variables_1.html b/doc/html/search/variables_1.html new file mode 100644 index 0000000..6a866b1 --- /dev/null +++ b/doc/html/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_1.js b/doc/html/search/variables_1.js new file mode 100644 index 0000000..0881346 --- /dev/null +++ b/doc/html/search/variables_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['backward_5ffilter_5f',['backward_filter_',['../class_d_f_e.html#aa6953c7cf764551e2f4b14f7ea1759a9',1,'DFE']]], + ['backward_5ffilter_5foutput_5f',['backward_filter_output_',['../class_d_f_e.html#a76d12aa6b5972a1d7aade0202c855699',1,'DFE']]], + ['bit_5ftime_5f',['bit_time_',['../class_a_m_i_model.html#ad0b6751b3b3a69fb8951fde0fcdf4f27',1,'AMIModel']]] +]; diff --git a/doc/html/search/variables_10.html b/doc/html/search/variables_10.html new file mode 100644 index 0000000..552cc46 --- /dev/null +++ b/doc/html/search/variables_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_10.js b/doc/html/search/variables_10.js new file mode 100644 index 0000000..1a55cbc --- /dev/null +++ b/doc/html/search/variables_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['tap_5fvalues_5f',['tap_values_',['../class_d_f_e.html#a863c529627c7b2b73fcff8bf1db03982',1,'DFE']]], + ['tap_5fweights_5f',['tap_weights_',['../class_ami_tx.html#ab4878fcf087a793ca120ab1e30cabed5',1,'AmiTx::tap_weights_()'],['../class_d_f_e.html#ae05f0b024c5cc05b0fb58c70c36e249a',1,'DFE::tap_weights_()']]], + ['the_5fmodel',['the_model',['../namespacetest.html#a353d01c7c783fd0d6d6287c760facb41',1,'test']]] +]; diff --git a/doc/html/search/variables_11.html b/doc/html/search/variables_11.html new file mode 100644 index 0000000..166f676 --- /dev/null +++ b/doc/html/search/variables_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_11.js b/doc/html/search/variables_11.js new file mode 100644 index 0000000..fdd23e2 --- /dev/null +++ b/doc/html/search/variables_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['weights_5f',['weights_',['../class_d_f_e.html#af23a84b8ec9cf7d1c8d445b8a0427f32',1,'DFE::weights_()'],['../class_f_i_r_filter.html#a46bf99ae4424b44d144e7af652e93847',1,'FIRFilter::weights_()']]] +]; diff --git a/doc/html/search/variables_2.html b/doc/html/search/variables_2.html new file mode 100644 index 0000000..3115f99 --- /dev/null +++ b/doc/html/search/variables_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_2.js b/doc/html/search/variables_2.js new file mode 100644 index 0000000..8f81526 --- /dev/null +++ b/doc/html/search/variables_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cdr_5flocked_5f',['cdr_locked_',['../class_d_f_e.html#aa50b830d84b9003160731dc0a0caa5c2',1,'DFE']]], + ['children',['children',['../structibisami_1_1_param_tree.html#a512771aaec7a303ebcafd7c66812dd7f',1,'ibisami::ParamTree']]], + ['clk_5fcntr_5f',['clk_cntr_',['../class_d_f_e.html#aea5a17495cf769abac1ef67221500a4c',1,'DFE']]], + ['clock_5fper_5f',['clock_per_',['../class_d_f_e.html#a0d12f483bb415b2fcb48849287bed8f2',1,'DFE']]], + ['clock_5fpers_5f',['clock_pers_',['../class_d_f_e.html#ad7db74a287762cdc91d572a1c5345e69',1,'DFE']]], + ['clog_5f',['clog_',['../class_a_m_i_model.html#a9b1c44767e4e81c4dfcff9bc23907b6c',1,'AMIModel']]], + ['ctle_5f',['ctle_',['../class_ami_rx.html#a64fc9d9aac458b2f6b398c2f7d9f7fb2',1,'AmiRx']]] +]; diff --git a/doc/html/search/variables_3.html b/doc/html/search/variables_3.html new file mode 100644 index 0000000..b2941ee --- /dev/null +++ b/doc/html/search/variables_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_3.js b/doc/html/search/variables_3.js new file mode 100644 index 0000000..8945d0d --- /dev/null +++ b/doc/html/search/variables_3.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['debug_5fstream',['debug_stream',['../ami__rx_8cpp.html#adaacc26a963cc85987b4b356b24c707c',1,'debug_stream(): amimodel.cpp'],['../amimodel_8cpp.html#adaacc26a963cc85987b4b356b24c707c',1,'debug_stream(): amimodel.cpp'],['../dfe_8cpp.html#adaacc26a963cc85987b4b356b24c707c',1,'debug_stream(): amimodel.cpp']]], + ['delay_5fchain_5f',['delay_chain_',['../class_f_i_r_filter.html#ab3084e783d752a4595dc580b555c04e1',1,'FIRFilter']]], + ['den_5f',['den_',['../class_digital_filter.html#aff805e69237ae6c450221f0d4c253bf9',1,'DigitalFilter']]], + ['dfe_5f',['dfe_',['../class_ami_rx.html#a68a79c0882e2c3a5bf2850578481bc2b',1,'AmiRx']]], + ['dfe_5fdump_5ffile_5f',['dfe_dump_file_',['../class_ami_rx.html#a3c8f710b6bdaedb0c35918aac0d99038',1,'AmiRx']]], + ['dfe_5fdump_5fstream_5f',['dfe_dump_stream_',['../class_ami_rx.html#a7498677c54b51e987e00b5e692ecedaf',1,'AmiRx']]], + ['dfe_5finput_5ffile_5f',['dfe_input_file_',['../class_ami_rx.html#a57786bfc4be423b3cfccc03081b6bb50',1,'AmiRx']]], + ['dfe_5finput_5fstream_5f',['dfe_input_stream_',['../class_ami_rx.html#a4032ef1f57bf4b5aef5cb481ea65622c',1,'AmiRx']]], + ['dump_5fadaptation_5finput_5f',['dump_adaptation_input_',['../class_ami_rx.html#a2bda560b4aa1312dcd9654294b1d7e76',1,'AmiRx']]], + ['dump_5fdfe_5fadaptation_5f',['dump_dfe_adaptation_',['../class_ami_rx.html#a985a6dc41e2c65429ad773a6c04a356b',1,'AmiRx']]] +]; diff --git a/doc/html/search/variables_4.html b/doc/html/search/variables_4.html new file mode 100644 index 0000000..e14a4ff --- /dev/null +++ b/doc/html/search/variables_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_4.js b/doc/html/search/variables_4.js new file mode 100644 index 0000000..78cb8b9 --- /dev/null +++ b/doc/html/search/variables_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['edge_5fsample_5f',['edge_sample_',['../class_d_f_e.html#a67ee30ee356638ea41589e47adf74b02',1,'DFE']]], + ['err_5fgain_5f',['err_gain_',['../class_d_f_e.html#a124c61874816baa299e8f212772ef1be',1,'DFE']]] +]; diff --git a/doc/html/search/variables_5.html b/doc/html/search/variables_5.html new file mode 100644 index 0000000..ee6461c --- /dev/null +++ b/doc/html/search/variables_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_5.js b/doc/html/search/variables_5.js new file mode 100644 index 0000000..6cd9e4d --- /dev/null +++ b/doc/html/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['filter_5f',['filter_',['../class_ami_tx.html#a1eb407f2a0aa1010c5d381c172f8425d',1,'AmiTx']]] +]; diff --git a/doc/html/search/variables_6.html b/doc/html/search/variables_6.html new file mode 100644 index 0000000..9b457a2 --- /dev/null +++ b/doc/html/search/variables_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_6.js b/doc/html/search/variables_6.js new file mode 100644 index 0000000..d01bf25 --- /dev/null +++ b/doc/html/search/variables_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['gdllname',['gDLLName',['../namespacetest.html#a80f837d5da2fad005c3ba8151a77ff62',1,'test']]], + ['gen_5fdata_5fcnt_5f',['gen_data_cnt_',['../class_a_m_i_model.html#ad8680b8371b9c476d046ff87d843fbe9',1,'AMIModel']]], + ['gen_5fdata_5flast_5f',['gen_data_last_',['../class_a_m_i_model.html#aa9cacd5650a194a6f08552f2748bab7a',1,'AMIModel']]] +]; diff --git a/doc/html/search/variables_7.html b/doc/html/search/variables_7.html new file mode 100644 index 0000000..aae170d --- /dev/null +++ b/doc/html/search/variables_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_7.js b/doc/html/search/variables_7.js new file mode 100644 index 0000000..ed525f0 --- /dev/null +++ b/doc/html/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['have_5fpreemph_5f',['have_preemph_',['../class_ami_tx.html#a8e07817524a3626aaa432bcbe7cad30f',1,'AmiTx']]] +]; diff --git a/doc/html/search/variables_8.html b/doc/html/search/variables_8.html new file mode 100644 index 0000000..7d96ca3 --- /dev/null +++ b/doc/html/search/variables_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_8.js b/doc/html/search/variables_8.js new file mode 100644 index 0000000..10931dc --- /dev/null +++ b/doc/html/search/variables_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ibis_5fparams',['ibis_params',['../namespaceexample__rx.html#a00eee5588370bfc22c66f85ab394007d',1,'example_rx.ibis_params()'],['../namespaceexample__tx.html#a3e404ca44bed97340e08746839a1c9ae',1,'example_tx.ibis_params()']]], + ['impulse_5fmatrix_5f',['impulse_matrix_',['../class_a_m_i_model.html#a26c35bff12c048655bdbd8663a2f0f58',1,'AMIModel']]], + ['init_5fadapt_5ftap_5f',['init_adapt_tap_',['../class_ami_rx.html#a20d036e33d3690b8274fb5e338ce4d53',1,'AmiRx']]], + ['init_5fdata',['init_data',['../namespacetest.html#aebc7edb91e3546a519a0954d1fc0130d',1,'test']]] +]; diff --git a/doc/html/search/variables_9.html b/doc/html/search/variables_9.html new file mode 100644 index 0000000..29d1092 --- /dev/null +++ b/doc/html/search/variables_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_9.js b/doc/html/search/variables_9.js new file mode 100644 index 0000000..1eda5f4 --- /dev/null +++ b/doc/html/search/variables_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kdescription',['kDescription',['../namespaceexample__rx.html#a43bcb97f4b8e21304071af59c8cfc3cb',1,'example_rx.kDescription()'],['../namespaceexample__tx.html#a36e32d86fc22536b157c3490436349d2',1,'example_tx.kDescription()']]], + ['kfilebasename',['kFileBaseName',['../namespaceexample__rx.html#aa79767a896c8628952f2d6eb4e282610',1,'example_rx.kFileBaseName()'],['../namespaceexample__tx.html#ab93d13d5e183d0d18f399041d08798cf',1,'example_tx.kFileBaseName()']]] +]; diff --git a/doc/html/search/variables_a.html b/doc/html/search/variables_a.html new file mode 100644 index 0000000..b4a88a8 --- /dev/null +++ b/doc/html/search/variables_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_a.js b/doc/html/search/variables_a.js new file mode 100644 index 0000000..5af1e4e --- /dev/null +++ b/doc/html/search/variables_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['last_5fclk_5fsample_5f',['last_clk_sample_',['../class_d_f_e.html#aab8957a2469ba78fda1e92f855b6fc1a',1,'DFE']]], + ['last_5fsummer_5foutput_5f',['last_summer_output_',['../class_d_f_e.html#af9c9a6e000775b9c20dfb78b80b77025',1,'DFE']]], + ['log_5f',['log_',['../class_a_m_i_model.html#ae701c08f6c4b0d962df4a2f2dcb6196b',1,'AMIModel']]] +]; diff --git a/doc/html/search/variables_b.html b/doc/html/search/variables_b.html new file mode 100644 index 0000000..3eb3a39 --- /dev/null +++ b/doc/html/search/variables_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_b.js b/doc/html/search/variables_b.js new file mode 100644 index 0000000..f6e2e8d --- /dev/null +++ b/doc/html/search/variables_b.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['max_5fweights_5f',['max_weights_',['../class_d_f_e.html#a469a8b4a5abe34c8fc769676a9c9ffbf',1,'DFE']]], + ['min_5fweights_5f',['min_weights_',['../class_d_f_e.html#a9ccbe12d16eb4fb19dc69235fddd89c3',1,'DFE']]], + ['mode',['mode',['../class_d_f_e.html#a0202ee4a4e6bc6ad385e7885383691c6',1,'DFE']]], + ['model',['model',['../struct_ami_pointers.html#a382ab778612377867999da1da37eb970',1,'AmiPointers']]], + ['msg',['msg',['../struct_ami_pointers.html#a4922e9e0eb86e7515c5d60a4be512657',1,'AmiPointers']]], + ['msg_5f',['msg_',['../class_a_m_i_model.html#acc9d4703088b0a69f649c84a1e134cfd',1,'AMIModel']]], + ['my_5frx',['my_rx',['../example__rx_8cpp.html#af5340cd727dbeb2e639398e8f2b5abee',1,'example_rx.cpp']]], + ['my_5ftx',['my_tx',['../example__tx_8cpp.html#a7477fa3c6e307f34f7d51829b16bb839',1,'example_tx.cpp']]] +]; diff --git a/doc/html/search/variables_c.html b/doc/html/search/variables_c.html new file mode 100644 index 0000000..525eaaa --- /dev/null +++ b/doc/html/search/variables_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_c.js b/doc/html/search/variables_c.js new file mode 100644 index 0000000..b1d9731 --- /dev/null +++ b/doc/html/search/variables_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['name',['name',['../structibisami_1_1_param_tree.html#a6776eb67c955420e87360ed764bc5cf3',1,'ibisami::ParamTree']]], + ['name_5f',['name_',['../class_a_m_i_model.html#a42e00992da9baf93d81d1d9fcd32d8e6',1,'AMIModel']]], + ['next_5fbackward_5ffilter_5foutput_5f',['next_backward_filter_output_',['../class_d_f_e.html#aad542a71162acadaa9cf2ea783bcd1b7',1,'DFE']]], + ['next_5fclock_5f',['next_clock_',['../class_d_f_e.html#a2fd951edceae312dfae55c5708905798',1,'DFE']]], + ['next_5fui_5fedge_5f',['next_ui_edge_',['../class_d_f_e.html#a3b73aff8ad9982b1585697d51dbeb038',1,'DFE']]], + ['num_5f',['num_',['../class_digital_filter.html#abf0263de2d7837bdc002615d3d7ca365',1,'DigitalFilter']]], + ['num_5ftaps_5f',['num_taps_',['../class_ami_tx.html#a166891685483a94632bbcd4e2afebf88',1,'AmiTx::num_taps_()'],['../class_digital_filter.html#ad9099f4f1da3f23988591b9e733861d7',1,'DigitalFilter::num_taps_()']]], + ['number_5fof_5frows_5f',['number_of_rows_',['../class_a_m_i_model.html#aaaf94b76a519e60318e1874bb190e9a8',1,'AMIModel']]] +]; diff --git a/doc/html/search/variables_d.html b/doc/html/search/variables_d.html new file mode 100644 index 0000000..7891ec7 --- /dev/null +++ b/doc/html/search/variables_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_d.js b/doc/html/search/variables_d.js new file mode 100644 index 0000000..dc601d0 --- /dev/null +++ b/doc/html/search/variables_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['oversample_5ffactor_5f',['oversample_factor_',['../class_f_i_r_filter.html#aeafbfb79d318c87385f37b906d214a2f',1,'FIRFilter']]] +]; diff --git a/doc/html/search/variables_e.html b/doc/html/search/variables_e.html new file mode 100644 index 0000000..c957c0c --- /dev/null +++ b/doc/html/search/variables_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_e.js b/doc/html/search/variables_e.js new file mode 100644 index 0000000..fb0bf52 --- /dev/null +++ b/doc/html/search/variables_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['param_5fstr_5f',['param_str_',['../class_a_m_i_model.html#ab7aeef08245acc654271341cdf0139f9',1,'AMIModel']]], + ['param_5ftree_5f',['param_tree_',['../class_a_m_i_model.html#a4da53456e13a1224f2bb47396ab0ecbd',1,'AMIModel']]], + ['params',['params',['../struct_ami_pointers.html#a4a71183d01dde25a4cb9fabb89ee6d01',1,'AmiPointers']]] +]; diff --git a/doc/html/search/variables_f.html b/doc/html/search/variables_f.html new file mode 100644 index 0000000..15a2fd5 --- /dev/null +++ b/doc/html/search/variables_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/doc/html/search/variables_f.js b/doc/html/search/variables_f.js new file mode 100644 index 0000000..b810096 --- /dev/null +++ b/doc/html/search/variables_f.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['sample_5finterval_5f',['sample_interval_',['../class_a_m_i_model.html#a4d4c286b04668c22f2e3f315715a6d5b',1,'AMIModel::sample_interval_()'],['../class_d_f_e.html#ae99b54abc902423f71f31f7d37e86b78',1,'DFE::sample_interval_()']]], + ['samples_5fper_5fbit_5f',['samples_per_bit_',['../class_a_m_i_model.html#ac664a9c24d4fdc43ab15df7023ab04bc',1,'AMIModel']]], + ['shift_5freg_5f',['shift_reg_',['../class_a_m_i_model.html#a68e4cdd12afbc4eb60dbefa4cce82a61',1,'AMIModel']]], + ['sig_5ftap_5f',['sig_tap_',['../class_ami_rx.html#a93343b91ac17149bce7ef0a971512507',1,'AmiRx']]], + ['sim_5ftime_5f',['sim_time_',['../class_d_f_e.html#a0d576f9f42246365b5be98add1fe21d8',1,'DFE']]], + ['slicer_5fmag_5f',['slicer_mag_',['../class_d_f_e.html#a6cf2fe347ce67ef6522c916cbba0ecb5',1,'DFE']]], + ['state_5f',['state_',['../class_digital_filter.html#a0fe7f91edef50acb1d8fb68957b71129',1,'DigitalFilter']]] +]; diff --git a/doc/html/struct_ami_pointers-members.html b/doc/html/struct_ami_pointers-members.html new file mode 100644 index 0000000..b00610b --- /dev/null +++ b/doc/html/struct_ami_pointers-members.html @@ -0,0 +1,107 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+
+
AmiPointers Member List
+
+
+ +

This is the complete list of members for AmiPointers, including all inherited members.

+ + + + +
modelAmiPointers
msgAmiPointers
paramsAmiPointers
+ + + + diff --git a/doc/html/struct_ami_pointers.html b/doc/html/struct_ami_pointers.html new file mode 100644 index 0000000..1040c64 --- /dev/null +++ b/doc/html/struct_ami_pointers.html @@ -0,0 +1,167 @@ + + + + + + +ibisami: AmiPointers Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
AmiPointers Struct Reference
+
+
+ +

Holds the pointers, which we pass back to the AMI_Init() caller. + More...

+ + + + + + + + +

+Public Attributes

AMIModelmodel
 
char * msg
 
char * params
 
+

Detailed Description

+

Holds the pointers, which we pass back to the AMI_Init() caller.

+ +

Definition at line 23 of file ibisami_api.cpp.

+

Member Data Documentation

+ +
+
+ + + + +
AMIModel* AmiPointers::model
+
+ +

Definition at line 24 of file ibisami_api.cpp.

+ +
+
+ +
+
+ + + + +
char* AmiPointers::msg
+
+ +

Definition at line 25 of file ibisami_api.cpp.

+ +
+
+ +
+
+ + + + +
char* AmiPointers::params
+
+ +

Definition at line 26 of file ibisami_api.cpp.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/html/structibisami_1_1_a_m_i_grammar.html b/doc/html/structibisami_1_1_a_m_i_grammar.html new file mode 100644 index 0000000..e69078d --- /dev/null +++ b/doc/html/structibisami_1_1_a_m_i_grammar.html @@ -0,0 +1,116 @@ + + + + + + +ibisami: ibisami::AMIGrammar Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ibisami::AMIGrammar Struct Reference
+
+
+ +

AMI parameter tree grammatical definition. + More...

+ +

#include <amimodel.h>

+

Detailed Description

+

AMI parameter tree grammatical definition.

+

Defines the grammatical structure of an AMI parameter tree, so that a completely generic parser can be implemented.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/html/structibisami_1_1_node-members.html b/doc/html/structibisami_1_1_node-members.html new file mode 100644 index 0000000..393fb69 --- /dev/null +++ b/doc/html/structibisami_1_1_node-members.html @@ -0,0 +1,110 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ibisami::Node Member List
+
+
+ +

This is the complete list of members for ibisami::Node, including all inherited members.

+ + + +
operator()(const ibisami::ParamTree &param_tree) const ibisami::Nodeinline
operator()(const std::string &val_str) const ibisami::Nodeinline
+ + + + diff --git a/doc/html/structibisami_1_1_node.html b/doc/html/structibisami_1_1_node.html new file mode 100644 index 0000000..0d32b8d --- /dev/null +++ b/doc/html/structibisami_1_1_node.html @@ -0,0 +1,189 @@ + + + + + + +ibisami: ibisami::Node Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ibisami::Node Struct Reference
+
+
+ +

Used to access a branch node. + More...

+ +

#include <amimodel.h>

+
+Inheritance diagram for ibisami::Node:
+
+
+ + + +
+ + + + + + +

+Public Member Functions

const ibisami::ParamTreeoperator() (const ibisami::ParamTree &param_tree) const
 
const ibisami::ParamTreeoperator() (const std::string &val_str) const
 
+

Detailed Description

+

Used to access a branch node.

+ +

Definition at line 63 of file amimodel.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
const ibisami::ParamTree* ibisami::Node::operator() (const ibisami::ParamTreeparam_tree) const
+
+inline
+
+ +

Definition at line 64 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const ibisami::ParamTree* ibisami::Node::operator() (const std::string & val_str) const
+
+inline
+
+ +

Definition at line 65 of file amimodel.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/html/structibisami_1_1_param_tree-members.html b/doc/html/structibisami_1_1_param_tree-members.html new file mode 100644 index 0000000..d27cc75 --- /dev/null +++ b/doc/html/structibisami_1_1_param_tree-members.html @@ -0,0 +1,110 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ibisami::ParamTree Member List
+
+
+ +

This is the complete list of members for ibisami::ParamTree, including all inherited members.

+ + + +
childrenibisami::ParamTree
nameibisami::ParamTree
+ + + + diff --git a/doc/html/structibisami_1_1_param_tree.html b/doc/html/structibisami_1_1_param_tree.html new file mode 100644 index 0000000..0c53a83 --- /dev/null +++ b/doc/html/structibisami_1_1_param_tree.html @@ -0,0 +1,171 @@ + + + + + + +ibisami: ibisami::ParamTree Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ibisami::ParamTree Struct Reference
+
+
+ +

The parameter tree definition. + More...

+ +

#include <amimodel.h>

+ + + + + + + + +

+Public Attributes

std::string name
 identifier More...
 
std::vector< ParamNodechildren
 node More...
 
+

Detailed Description

+

The parameter tree definition.

+

A parameter tree has two fields:

    +
  • an identifier string, and
  • +
  • a node, which may be either:
      +
    • a string value (in the case of a leaf), or
    • +
    • a parameter tree (in the case of a branch).
    • +
    +
  • +
+ +

Definition at line 45 of file amimodel.h.

+

Member Data Documentation

+ +
+
+ + + + +
std::vector<ParamNode> ibisami::ParamTree::children
+
+ +

node

+ +

Definition at line 47 of file amimodel.h.

+ +
+
+ +
+
+ + + + +
std::string ibisami::ParamTree::name
+
+ +

identifier

+ +

Definition at line 46 of file amimodel.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/html/structibisami_1_1_value-members.html b/doc/html/structibisami_1_1_value-members.html new file mode 100644 index 0000000..cf6f472 --- /dev/null +++ b/doc/html/structibisami_1_1_value-members.html @@ -0,0 +1,110 @@ + + + + + + +ibisami: Member List + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ibisami::Value Member List
+
+
+ +

This is the complete list of members for ibisami::Value, including all inherited members.

+ + + +
operator()(const ibisami::ParamTree &param_tree) const ibisami::Valueinline
operator()(const std::string &val_str) const ibisami::Valueinline
+ + + + diff --git a/doc/html/structibisami_1_1_value.html b/doc/html/structibisami_1_1_value.html new file mode 100644 index 0000000..b980487 --- /dev/null +++ b/doc/html/structibisami_1_1_value.html @@ -0,0 +1,189 @@ + + + + + + +ibisami: ibisami::Value Struct Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ibisami::Value Struct Reference
+
+
+ +

Used to access a leaf node. + More...

+ +

#include <amimodel.h>

+
+Inheritance diagram for ibisami::Value:
+
+
+ + + +
+ + + + + + +

+Public Member Functions

const std::string & operator() (const ibisami::ParamTree &param_tree) const
 
const std::string & operator() (const std::string &val_str) const
 
+

Detailed Description

+

Used to access a leaf node.

+ +

Definition at line 58 of file amimodel.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
const std::string& ibisami::Value::operator() (const ibisami::ParamTreeparam_tree) const
+
+inline
+
+ +

Definition at line 59 of file amimodel.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const std::string& ibisami::Value::operator() (const std::string & val_str) const
+
+inline
+
+ +

Definition at line 60 of file amimodel.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/doc/html/tabs.css b/doc/html/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/doc/html/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/doc/html/test_8py.html b/doc/html/test_8py.html new file mode 100644 index 0000000..67c9d62 --- /dev/null +++ b/doc/html/test_8py.html @@ -0,0 +1,123 @@ + + + + + + +ibisami: example/test.py File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
test.py File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Namespaces

 test
 
+ + + + + + + +

+Variables

string test.gDLLName = './example_tx_x86_amd64.so'
 
tuple test.the_model = ami.AMIModel(gDLLName)
 
tuple test.init_data = ami.AMIModelInitializer({'root_name': "exampleTx"})
 
+
+ + + + diff --git a/doc/html/test_8py_source.html b/doc/html/test_8py_source.html new file mode 100644 index 0000000..8cf708d --- /dev/null +++ b/doc/html/test_8py_source.html @@ -0,0 +1,122 @@ + + + + + + +ibisami: example/test.py Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
test.py
+
+
+Go to the documentation of this file.
1 #! /usr/bin/env python
+
2 # A quick test of the ibisami example Tx model.
+
3 #
+
4 # Original author: David Banas
+
5 # Original date: May 18, 2015
+
6 #
+
7 # Copyright (c) 2015 David Banas; all rights reserved World wide.
+
8 
+
9 import pyibisami.amimodel as ami
+
10 
+
11 gDLLName = './example_tx_x86_amd64.so'
+
12 
+
13 the_model = ami.AMIModel(gDLLName)
+
14 init_data = ami.AMIModelInitializer({'root_name': "exampleTx"})
+
15 the_model.initialize(init_data)
+
16 
+
17 print "Model returned message:", the_model.msg
+
18 print "Model returned parameters:", the_model.ami_params_out
+
19 
+
+ + + + diff --git a/doc/html/util_8cpp.html b/doc/html/util_8cpp.html new file mode 100644 index 0000000..b38d63a --- /dev/null +++ b/doc/html/util_8cpp.html @@ -0,0 +1,173 @@ + + + + + + +ibisami: src/util.cpp File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
util.cpp File Reference
+
+
+ +

Small, generally useful utilities. +More...

+ +

Go to the source code of this file.

+ + + + + +

+Functions

double interp (double last_x, double x, double ref_time, double time, double ref_period)
 Linear interpolation. More...
 
+

Detailed Description

+

Small, generally useful utilities.

+

Original author: David Banas
+ Original date: June 23, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file util.cpp.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double interp (double last_x,
double x,
double ref_time,
double time,
double ref_period 
)
+
+ +

Linear interpolation.

+ +

Definition at line 11 of file util.cpp.

+ +
+
+
+ + + + diff --git a/doc/html/util_8cpp_source.html b/doc/html/util_8cpp_source.html new file mode 100644 index 0000000..35d3a28 --- /dev/null +++ b/doc/html/util_8cpp_source.html @@ -0,0 +1,109 @@ + + + + + + +ibisami: src/util.cpp Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
util.cpp
+
+
+Go to the documentation of this file.
1 
+
10 double interp(double last_x, double x, double ref_time, double time, double ref_period) {
+
12  return last_x + (x - last_x) * (1 - (time - ref_time) / ref_period);
+
13 }
+
14 
+
double interp(double last_x, double x, double ref_time, double time, double ref_period)
Linear interpolation.
Definition: util.cpp:11
+
+ + + + diff --git a/doc/html/util_8h.html b/doc/html/util_8h.html new file mode 100644 index 0000000..d50d527 --- /dev/null +++ b/doc/html/util_8h.html @@ -0,0 +1,199 @@ + + + + + + +ibisami: include/util.h File Reference + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
util.h File Reference
+
+
+ +

Small, generally useful utilities. +More...

+ +

Go to the source code of this file.

+ + + + + + + + + +

+Functions

double interp (double last_x, double x, double ref_time, double time, double ref_period)
 Linear interpolation. More...
 
template<typename T >
int sgn (T val)
 The signum function. More...
 
+

Detailed Description

+

Small, generally useful utilities.

+

Original author: David Banas
+ Original date: June 23, 2015

+

Copyright (c) 2015 David Banas; all rights reserved World wide.

+ +

Definition in file util.h.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double interp (double last_x,
double x,
double ref_time,
double time,
double ref_period 
)
+
+ +

Linear interpolation.

+ +

Definition at line 11 of file util.cpp.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
int sgn (val)
+
+ +

The signum function.

+ +

Definition at line 17 of file util.h.

+ +
+
+
+ + + + diff --git a/doc/html/util_8h_source.html b/doc/html/util_8h_source.html new file mode 100644 index 0000000..5578646 --- /dev/null +++ b/doc/html/util_8h_source.html @@ -0,0 +1,117 @@ + + + + + + +ibisami: include/util.h Source File + + + + + + + + + + +
+
+ + + + + + +
+
ibisami +  0.8 +
+
Public domain IBIS-AMI model creation infrastructure.
+
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
util.h
+
+
+Go to the documentation of this file.
1 
+
10 #ifndef INCLUDE_UTIL_H_
+
11 #define INCLUDE_UTIL_H_
+
12 
+
14 double interp(double last_x, double x, double ref_time, double time, double ref_period);
+
15 
+
17 template <typename T> int sgn(T val) {
+
18  return (T(0) < val) - (val < T(0));
+
19 }
+
20 
+
21 #endif // INCLUDE_UTIL_H_
+
22 
+
int sgn(T val)
The signum function.
Definition: util.h:17
+
double interp(double last_x, double x, double ref_time, double time, double ref_period)
Linear interpolation.
Definition: util.cpp:11
+
+ + + + diff --git a/example/test_runs/tx/posttap1.run b/example/test_runs/tx/posttap1.run index 49d9656..88344e0 100644 --- a/example/test_runs/tx/posttap1.run +++ b/example/test_runs/tx/posttap1.run @@ -8,8 +8,9 @@ Sweep of Tx pre-emphasis filter posttap1 values. }, \ {'channel_response' : [2.0e11] + [0.]*127, \ 'sample_interval' : 5.0e-12, \ - } \ - ) \ + }, \ + ), \ + 'example_tx_x86_amd64.so' \ ) ('Posttap1 = 2', \ @@ -21,7 +22,8 @@ Sweep of Tx pre-emphasis filter posttap1 values. {'channel_response' : [2.0e11] + [0.]*127, \ 'sample_interval' : 5.0e-12, \ } \ - ) \ + ), \ + 'example_tx_x86_amd64.so' \ ) ('Posttap1 = 4', \ diff --git a/example/tests/freq_resp.em b/example/tests/freq_resp.em index 8858539..2145454 100644 --- a/example/tests/freq_resp.em +++ b/example/tests/freq_resp.em @@ -1,57 +1,57 @@ -@# Example input file for `run_tests.py'. -@# -@# Original Author: David Banas -@# Original Date: July 20, 2012 -@# -@# Copyright (c) 2012 David Banas; All rights reserved World wide. - - - @(name) - Visual - Model frequency response for: @(description) - -@{ -from pylab import * -import pyibisami.amimodel as ami -cla() -for cfg in data: - cfg_name = cfg[0] - params = cfg[1] - if(len(cfg) > 2): - reference = cfg[2] - else: - reference = None - initializer = ami.AMIModelInitializer(params[0]) - items = params[1].items() - items.sort(reverse=True) - for item in items: - exec ('initializer.' + item[0] + ' = ' + repr(item[1])) - model.initialize(initializer) - print ' ' - print model.msg - print model.ami_params_out - print ' ' - h = model.initOut - H = fft(h) - H /= abs(H[0]) # Normalize to d.c. = 1. - T = model.sample_interval - f = array([i * 1.0 / (T * len(h)) for i in range(len(h) / 2)]) - rgb_main, rgb_ref = plot_colors.next() - color_main = "#%02X%02X%02X" % (rgb_main[0] * 0xFF, rgb_main[1] * 0xFF, rgb_main[2] * 0xFF) - color_ref = "#%02X%02X%02X" % (rgb_ref[0] * 0xFF, rgb_ref[1] * 0xFF, rgb_ref[2] * 0xFF) - semilogx(f / 1.e9, 20. * log10(abs(H[:len(H)/2])), label=cfg_name, color=color_main) - """if(reference): - r = ami.getImpulse(reference, T) - plot(f, r, label=cfg_name+'_ref', color=color_ref)""" -title('Model Frequency Response') -xlabel('Frequency (GHz)') -ylabel('|H(f)| (dB)') -axis(xmax=40) -legend() -filename = plot_names.next() -savefig(filename) -} - @(filename) - - - +@# Example input file for `run_tests.py'. +@# +@# Original Author: David Banas +@# Original Date: July 20, 2012 +@# +@# Copyright (c) 2012 David Banas; All rights reserved World wide. + + + @(name) + Visual + Model frequency response for: @(description) + +@{ +from pylab import * +import pyibisami.amimodel as ami +cla() +for cfg in data: + cfg_name = cfg[0] + params = cfg[1] + if(len(cfg) > 2): + reference = cfg[2] + else: + reference = None + initializer = ami.AMIModelInitializer(params[0]) + items = params[1].items() + items.sort(reverse=True) + for item in items: + exec ('initializer.' + item[0] + ' = ' + repr(item[1])) + model.initialize(initializer) + print ' ' + print model.msg + print model.ami_params_out + print ' ' + h = model.initOut + H = fft(h) + H /= abs(H[0]) # Normalize to d.c. = 1. + T = model.sample_interval + f = array([i * 1.0 / (T * len(h)) for i in range(len(h) / 2)]) + rgb_main, rgb_ref = plot_colors.next() + color_main = "#%02X%02X%02X" % (rgb_main[0] * 0xFF, rgb_main[1] * 0xFF, rgb_main[2] * 0xFF) + color_ref = "#%02X%02X%02X" % (rgb_ref[0] * 0xFF, rgb_ref[1] * 0xFF, rgb_ref[2] * 0xFF) + semilogx(f / 1.e9, 20. * log10(abs(H[:len(H)/2])), label=cfg_name, color=color_main) + """if(reference): + r = ami.interpFile(reference, T) + plot(f, r, label=cfg_name+'_ref', color=color_ref)""" +title('Model Frequency Response') +xlabel('Frequency (GHz)') +ylabel('|H(f)| (dB)') +axis(xmax=40) +legend() +filename = plot_names.next() +savefig(filename) +} + @(filename) + + + diff --git a/example/tests/step.em b/example/tests/step.em index 7a02bb1..a7a0a53 100644 --- a/example/tests/step.em +++ b/example/tests/step.em @@ -1,57 +1,63 @@ -@# Example input file for `run_tests.py'. -@# -@# This tests the step response of the model and channel. -@# -@# Original Author: David Banas -@# Original Date: July 20, 2012 -@# -@# Copyright (c) 2012 David Banas; All rights reserved World wide. - - - @(name) - Visual - Step response for: @(description) - -@{ -from pylab import * -from numpy import cumsum -import pyibisami.amimodel as ami -cla() -for cfg in data: - cfg_name = cfg[0] - params = cfg[1] - if(len(cfg) > 2): - reference = ref_dir + '/' + name.split()[0] + '/' + cfg[2] - else: - reference = None - initializer = ami.AMIModelInitializer(params[0]) - items = params[1].items() - items.sort(reverse=True) - for item in items: - exec ('initializer.' + item[0] + ' = ' + repr(item[1])) - model.initialize(initializer) - print ' ' - print model.msg - print model.ami_params_out - print ' ' - h = model.initOut - T = model.sample_interval - s = cumsum(h) * T - t = [i * T for i in range(len(h))] - rgb_main, rgb_ref = plot_colors.next() - color_main = "#%02X%02X%02X" % (rgb_main[0] * 0xFF, rgb_main[1] * 0xFF, rgb_main[2] * 0xFF) - color_ref = "#%02X%02X%02X" % (rgb_ref[0] * 0xFF, rgb_ref[1] * 0xFF, rgb_ref[2] * 0xFF) - plot(t, s, label=cfg_name, color=color_main) - if(reference): - r = ami.getImpulse(reference, T) - plot(t, r, label=cfg_name+'_ref', color=color_ref) -title('Step Response (V)') -xlabel('Time (sec.)') -legend() -filename = plot_names.next() -savefig(filename) -} - @(filename) - - - +@# Example input file for `run_tests.py'. +@# +@# This tests the step response of the model and channel. +@# +@# Original Author: David Banas +@# Original Date: July 20, 2012 +@# +@# Copyright (c) 2012 David Banas; All rights reserved World wide. + + + @(name) + Visual + Step response for: @(description) + +@{ +from pylab import * +from numpy import cumsum +import pyibisami.amimodel as ami +cla() +for cfg in data: + cfg_name = cfg[0] + params = cfg[1] + if(len(cfg) > 2): + reference = ref_dir + '/' + name.split()[0] + '/' + cfg[2] + else: + reference = None + initializer = ami.AMIModelInitializer(params[0]) + items = params[1].items() + items.sort(reverse=True) + for item in items: + exec ('initializer.' + item[0] + ' = ' + repr(item[1])) + model.initialize(initializer) + print ' ' + print model.msg + print model.ami_params_out + print ' ' + h = model.initOut + T = model.sample_interval + s = cumsum(h) * T + t = [i * T for i in range(len(h))] + rgb_main, rgb_ref = plot_colors.next() + color_main = "#%02X%02X%02X" % (rgb_main[0] * 0xFF, rgb_main[1] * 0xFF, rgb_main[2] * 0xFF) + color_ref = "#%02X%02X%02X" % (rgb_ref[0] * 0xFF, rgb_ref[1] * 0xFF, rgb_ref[2] * 0xFF) + plot(t, s, label=cfg_name, color=color_main) + if(reference): + try: + ref = ami.AMIModel(reference) + ref.initialize(initializer) + href = ref.initOut + r = cumsum(href) * T * 0.95 # The '0.95' is temporary, for development purposes. + except: + r = ami.interpFile(reference, T) + plot(t, r, label=cfg_name+'_ref', color=color_ref) +title('Step Response (V)') +xlabel('Time (sec.)') +legend() +filename = plot_names.next() +savefig(filename) +} + @(filename) + + +