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_