Generate kelvin_simulator library and clean-ups
Generate a library (libkelvin_simulator.so) for kelvin core_mini_axi_simulator.
It will be used for Synpu. Also some minor clean-ups.
Change-Id: I847bedd7e4ee3d77ad58dc5fd4e51a50c963585d
diff --git a/hw_sim/BUILD b/hw_sim/BUILD
index 29432a8..e79024f 100644
--- a/hw_sim/BUILD
+++ b/hw_sim/BUILD
@@ -70,6 +70,8 @@
":core_mini_axi_wrapper",
":kelvin_simulator_headers",
],
+ linkstatic = True,
+ alwayslink = True,
)
cc_shared_library(
@@ -97,7 +99,13 @@
deps = [
":core_mini_axi_simulator",
"//tests/verilator_sim:elf",
- "//hdl/chisel/src/kelvin:core_mini_axi_cc_library_cc",
"@com_google_absl//absl/types:span",
],
)
+
+cc_binary(
+ name = "libkelvin_simulator.so",
+ linkshared = 1,
+ visibility = ["//visibility:public"],
+ deps = [":core_mini_axi_simulator"],
+)
diff --git a/hw_sim/core_mini_axi_simulator.cc b/hw_sim/core_mini_axi_simulator.cc
index a71c485..d1f181e 100644
--- a/hw_sim/core_mini_axi_simulator.cc
+++ b/hw_sim/core_mini_axi_simulator.cc
@@ -33,9 +33,9 @@
~CoreMiniAxiSimulator() final = default;
void ReadTCM(uint32_t addr, size_t size, char* data) final;
- const Mailbox& ReadMailbox(void) final;
+ const KelvinMailbox& ReadMailbox(void) final;
void WriteTCM(uint32_t addr, size_t size, const char* data) final;
- void WriteMailbox(const Mailbox& mailbox) final;
+ void WriteMailbox(const KelvinMailbox& mailbox) final;
void Run(uint32_t start_addr) final;
bool WaitForTermination(int timeout) final;
@@ -52,7 +52,7 @@
memcpy(data, read_result.data(), size);
}
-const Mailbox& CoreMiniAxiSimulator::ReadMailbox(void) {
+const KelvinMailbox& CoreMiniAxiSimulator::ReadMailbox(void) {
return wrapper_.ReadMailbox();
}
@@ -61,7 +61,7 @@
wrapper_.Write(addr, size, data);
}
-void CoreMiniAxiSimulator::WriteMailbox(const Mailbox& mailbox) {
+void CoreMiniAxiSimulator::WriteMailbox(const KelvinMailbox& mailbox) {
wrapper_.WriteMailbox(mailbox);
}
@@ -77,7 +77,7 @@
AxiWResp CoreMiniAxiSimulator::WriteCallback(const AxiAddr& addr,
const AxiWData& data) {
- Mailbox& mailbox = wrapper_.mailbox();
+ KelvinMailbox& mailbox = wrapper_.mailbox();
uint8_t* mailbox_data = reinterpret_cast<uint8_t*>(mailbox.message);
const uint8_t* write_data =
reinterpret_cast<const uint8_t*>(&data.write_data_bits_data[0]);
@@ -94,7 +94,7 @@
}
AxiRData CoreMiniAxiSimulator::ReadCallback(const AxiAddr& addr) {
- const Mailbox& mailbox = wrapper_.mailbox();
+ const KelvinMailbox& mailbox = wrapper_.mailbox();
const uint8_t* mailbox_data =
reinterpret_cast<const uint8_t*>(mailbox.message);
AxiRData data;
diff --git a/hw_sim/core_mini_axi_simulator_example.cc b/hw_sim/core_mini_axi_simulator_example.cc
index 090c584..73c9f43 100644
--- a/hw_sim/core_mini_axi_simulator_example.cc
+++ b/hw_sim/core_mini_axi_simulator_example.cc
@@ -15,6 +15,7 @@
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
+#include <unistd.h>
#include <bitset>
#include <cstdint>
@@ -25,7 +26,6 @@
#include <queue>
#include <vector>
-#include "VCoreMiniAxi.h"
#include "absl/types/span.h"
#include "hw_sim/kelvin_simulator.h"
#include "tests/verilator_sim/elf.h"
@@ -70,7 +70,7 @@
std::cout << "Didn't halt" << std::endl;
}
- Mailbox m = simulator->ReadMailbox();
+ KelvinMailbox m = simulator->ReadMailbox();
std::cout << "Mailbox value[0]=0x" << std::hex << m.message[0] << std::endl;
std::cout << "Mailbox value[1]=0x" << std::hex << m.message[1] << std::endl;
diff --git a/hw_sim/core_mini_axi_wrapper.h b/hw_sim/core_mini_axi_wrapper.h
index fc69344..16efc56 100644
--- a/hw_sim/core_mini_axi_wrapper.h
+++ b/hw_sim/core_mini_axi_wrapper.h
@@ -117,13 +117,13 @@
void Step() { clock_.Step(); }
- Mailbox& mailbox() { return mailbox_; }
+ KelvinMailbox& mailbox() { return mailbox_; }
- const Mailbox& mailbox() const { return mailbox_; }
+ const KelvinMailbox& mailbox() const { return mailbox_; }
- const Mailbox& ReadMailbox(void) { return mailbox_; }
+ const KelvinMailbox& ReadMailbox(void) { return mailbox_; }
- void WriteMailbox(const Mailbox& mailbox) {
+ void WriteMailbox(const KelvinMailbox& mailbox) {
for (int i = 0; i < 4; i++) {
mailbox_.message[i] = mailbox.message[i];
}
@@ -207,7 +207,7 @@
private:
VerilatedContext* const context_;
- Mailbox mailbox_;
+ KelvinMailbox mailbox_;
VCoreMiniAxi core_;
Clock clock_;
AxiSlaveWriteDriver slave_write_driver_;
diff --git a/hw_sim/core_mini_axi_wrapper_example.cc b/hw_sim/core_mini_axi_wrapper_example.cc
index acb8081..740f6cd 100644
--- a/hw_sim/core_mini_axi_wrapper_example.cc
+++ b/hw_sim/core_mini_axi_wrapper_example.cc
@@ -12,6 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
#include <bitset>
#include <cstdint>
#include <future>
@@ -21,16 +26,9 @@
#include <queue>
#include <vector>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-
-#include "hw_sim/core_mini_axi_wrapper.h"
-
#include "absl/types/span.h"
+#include "hw_sim/core_mini_axi_wrapper.h"
#include "tests/verilator_sim/elf.h"
-#include "VCoreMiniAxi.h"
-
int main() {
VerilatedContext context;
@@ -75,4 +73,4 @@
}
return 0;
-}
\ No newline at end of file
+}
diff --git a/hw_sim/kelvin_simulator.h b/hw_sim/kelvin_simulator.h
index a48da57..f512490 100644
--- a/hw_sim/kelvin_simulator.h
+++ b/hw_sim/kelvin_simulator.h
@@ -27,9 +27,9 @@
// Functions for reading/writing TCMs and Mailbox.
virtual void ReadTCM(uint32_t addr, size_t size, char* data) = 0;
- virtual const Mailbox& ReadMailbox(void) = 0;
+ virtual const KelvinMailbox& ReadMailbox(void) = 0;
virtual void WriteTCM(uint32_t addr, size_t size, const char* data) = 0;
- virtual void WriteMailbox(const Mailbox& mailbox) = 0;
+ virtual void WriteMailbox(const KelvinMailbox& mailbox) = 0;
// Wait for interrupt
virtual bool WaitForTermination(int timeout) = 0;
diff --git a/hw_sim/mailbox.h b/hw_sim/mailbox.h
index 730c5ea..7e62ee0 100644
--- a/hw_sim/mailbox.h
+++ b/hw_sim/mailbox.h
@@ -15,8 +15,8 @@
#ifndef HW_SIM_MAILBOX_H_
#define HW_SIM_MAILBOX_H_
-struct Mailbox {
+struct KelvinMailbox {
uint32_t message[4] = {0, 0, 0, 0};
};
-#endif // HW_SIM_MAILBOX_H_
\ No newline at end of file
+#endif // HW_SIM_MAILBOX_H_