cxxrtl: expose eval() and commit() via the C API.
authorwhitequark <whitequark@whitequark.org>
Sun, 12 Jul 2020 23:34:18 +0000 (23:34 +0000)
committerwhitequark <whitequark@whitequark.org>
Sun, 12 Jul 2020 23:34:18 +0000 (23:34 +0000)
backends/cxxrtl/cxxrtl_capi.cc
backends/cxxrtl/cxxrtl_capi.h

index e0566e152aed9a268d377b11c00ed708499f6014..b77e4c491413e5a0387b13f6f17cfd854f728bad 100644 (file)
@@ -43,6 +43,14 @@ void cxxrtl_destroy(cxxrtl_handle handle) {
        delete handle;
 }
 
+int cxxrtl_eval(cxxrtl_handle handle) {
+       return handle->module->eval();
+}
+
+int cxxrtl_commit(cxxrtl_handle handle) {
+       return handle->module->commit();
+}
+
 size_t cxxrtl_step(cxxrtl_handle handle) {
        return handle->module->step();
 }
index 599284898c00226e57dcdc0d5a81aca11dae4639..74257f0daa4754d14efec230f146a7216d4f7eb7 100644 (file)
@@ -55,6 +55,18 @@ cxxrtl_handle cxxrtl_create(cxxrtl_toplevel design);
 // Release all resources used by a design and its handle.
 void cxxrtl_destroy(cxxrtl_handle handle);
 
+// Evaluate the design, propagating changes on inputs to the `next` value of internal state and
+// output wires.
+//
+// Returns 1 if the design is known to immediately converge, 0 otherwise.
+int cxxrtl_eval(cxxrtl_handle handle);
+
+// Commit the design, replacing the `curr` value of internal state and output wires with the `next`
+// value.
+//
+// Return 1 if any of the `curr` values, 0 otherwise.
+int cxxrtl_commit(cxxrtl_handle handle);
+
 // Simulate the design to a fixed point.
 //
 // Returns the number of delta cycles.