- sync_rtl/common/: skid_buffer, pipeline_reg, defines (valid/ready) - sync_rtl/mod_add/: modular adder example with Verilator C++ TB - test_framework/: Python-driven Verilator compile/sim/compare pipeline - test_framework/modules/mod_add/: 50-vector test plan, full鏈路 PASS - .trellis/spec/: RTL and test_framework conventions documented
211 lines
10 KiB
C++
211 lines
10 KiB
C++
// Verilated -*- C++ -*-
|
|
// DESCRIPTION: Verilator output: Design implementation internals
|
|
// See Vmod_add_sync.h for the primary calling header
|
|
|
|
#include "Vmod_add_sync__pch.h"
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___eval_static(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_static\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Body
|
|
vlSelfRef.__Vtrigprevexpr___TOP__clk__0 = vlSelfRef.clk;
|
|
vlSelfRef.__Vtrigprevexpr___TOP__rst_n__0 = vlSelfRef.rst_n;
|
|
}
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___eval_initial(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_initial\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
}
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___eval_final(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_final\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
}
|
|
|
|
#ifdef VL_DEBUG
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___dump_triggers__stl(const VlUnpacked<QData/*63:0*/, 1> &triggers, const std::string &tag);
|
|
#endif // VL_DEBUG
|
|
VL_ATTR_COLD bool Vmod_add_sync___024root___eval_phase__stl(Vmod_add_sync___024root* vlSelf);
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___eval_settle(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_settle\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Locals
|
|
IData/*31:0*/ __VstlIterCount;
|
|
// Body
|
|
__VstlIterCount = 0U;
|
|
vlSelfRef.__VstlFirstIteration = 1U;
|
|
do {
|
|
if (VL_UNLIKELY(((0x00000064U < __VstlIterCount)))) {
|
|
#ifdef VL_DEBUG
|
|
Vmod_add_sync___024root___dump_triggers__stl(vlSelfRef.__VstlTriggered, "stl"s);
|
|
#endif
|
|
VL_FATAL_MT("sync_rtl/mod_add/mod_add_sync.v", 14, "", "DIDNOTCONVERGE: Settle region did not converge after '--converge-limit' of 100 tries");
|
|
}
|
|
__VstlIterCount = ((IData)(1U) + __VstlIterCount);
|
|
vlSelfRef.__VstlPhaseResult = Vmod_add_sync___024root___eval_phase__stl(vlSelf);
|
|
vlSelfRef.__VstlFirstIteration = 0U;
|
|
} while (vlSelfRef.__VstlPhaseResult);
|
|
}
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___eval_triggers_vec__stl(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_triggers_vec__stl\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Body
|
|
vlSelfRef.__VstlTriggered[0U] = ((0xfffffffffffffffeULL
|
|
& vlSelfRef.__VstlTriggered[0U])
|
|
| (IData)((IData)(vlSelfRef.__VstlFirstIteration)));
|
|
}
|
|
|
|
VL_ATTR_COLD bool Vmod_add_sync___024root___trigger_anySet__stl(const VlUnpacked<QData/*63:0*/, 1> &in);
|
|
|
|
#ifdef VL_DEBUG
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___dump_triggers__stl(const VlUnpacked<QData/*63:0*/, 1> &triggers, const std::string &tag) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___dump_triggers__stl\n"); );
|
|
// Body
|
|
if ((1U & (~ (IData)(Vmod_add_sync___024root___trigger_anySet__stl(triggers))))) {
|
|
VL_DBG_MSGS(" No '" + tag + "' region triggers active\n");
|
|
}
|
|
if ((1U & (IData)(triggers[0U]))) {
|
|
VL_DBG_MSGS(" '" + tag + "' region trigger index 0 is active: Internal 'stl' trigger - first iteration\n");
|
|
}
|
|
}
|
|
#endif // VL_DEBUG
|
|
|
|
VL_ATTR_COLD bool Vmod_add_sync___024root___trigger_anySet__stl(const VlUnpacked<QData/*63:0*/, 1> &in) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___trigger_anySet__stl\n"); );
|
|
// Locals
|
|
IData/*31:0*/ n;
|
|
// Body
|
|
n = 0U;
|
|
do {
|
|
if (in[n]) {
|
|
return (1U);
|
|
}
|
|
n = ((IData)(1U) + n);
|
|
} while ((1U > n));
|
|
return (0U);
|
|
}
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___stl_sequent__TOP__0(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___stl_sequent__TOP__0\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Body
|
|
vlSelfRef.valid_o = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r;
|
|
vlSelfRef.sum = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r;
|
|
vlSelfRef.mod_add_sync__DOT__add_raw = (0x00001fffU
|
|
& ((IData)(vlSelfRef.a)
|
|
+ (IData)(vlSelfRef.b)));
|
|
vlSelfRef.ready_o = (1U & ((~ (IData)(vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r))
|
|
| (IData)(vlSelfRef.ready_i)));
|
|
}
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___eval_stl(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_stl\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Body
|
|
if ((1ULL & vlSelfRef.__VstlTriggered[0U])) {
|
|
vlSelfRef.valid_o = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r;
|
|
vlSelfRef.sum = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r;
|
|
vlSelfRef.mod_add_sync__DOT__add_raw = (0x00001fffU
|
|
& ((IData)(vlSelfRef.a)
|
|
+ (IData)(vlSelfRef.b)));
|
|
vlSelfRef.ready_o = (1U & ((~ (IData)(vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r))
|
|
| (IData)(vlSelfRef.ready_i)));
|
|
}
|
|
}
|
|
|
|
VL_ATTR_COLD bool Vmod_add_sync___024root___eval_phase__stl(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_phase__stl\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Locals
|
|
CData/*0:0*/ __VstlExecute;
|
|
// Body
|
|
Vmod_add_sync___024root___eval_triggers_vec__stl(vlSelf);
|
|
#ifdef VL_DEBUG
|
|
if (VL_UNLIKELY(vlSymsp->_vm_contextp__->debug())) {
|
|
Vmod_add_sync___024root___dump_triggers__stl(vlSelfRef.__VstlTriggered, "stl"s);
|
|
}
|
|
#endif
|
|
__VstlExecute = Vmod_add_sync___024root___trigger_anySet__stl(vlSelfRef.__VstlTriggered);
|
|
if (__VstlExecute) {
|
|
Vmod_add_sync___024root___eval_stl(vlSelf);
|
|
}
|
|
return (__VstlExecute);
|
|
}
|
|
|
|
bool Vmod_add_sync___024root___trigger_anySet__ico(const VlUnpacked<QData/*63:0*/, 1> &in);
|
|
|
|
#ifdef VL_DEBUG
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___dump_triggers__ico(const VlUnpacked<QData/*63:0*/, 1> &triggers, const std::string &tag) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___dump_triggers__ico\n"); );
|
|
// Body
|
|
if ((1U & (~ (IData)(Vmod_add_sync___024root___trigger_anySet__ico(triggers))))) {
|
|
VL_DBG_MSGS(" No '" + tag + "' region triggers active\n");
|
|
}
|
|
if ((1U & (IData)(triggers[0U]))) {
|
|
VL_DBG_MSGS(" '" + tag + "' region trigger index 0 is active: Internal 'ico' trigger - first iteration\n");
|
|
}
|
|
}
|
|
#endif // VL_DEBUG
|
|
|
|
bool Vmod_add_sync___024root___trigger_anySet__act(const VlUnpacked<QData/*63:0*/, 1> &in);
|
|
|
|
#ifdef VL_DEBUG
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___dump_triggers__act(const VlUnpacked<QData/*63:0*/, 1> &triggers, const std::string &tag) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___dump_triggers__act\n"); );
|
|
// Body
|
|
if ((1U & (~ (IData)(Vmod_add_sync___024root___trigger_anySet__act(triggers))))) {
|
|
VL_DBG_MSGS(" No '" + tag + "' region triggers active\n");
|
|
}
|
|
if ((1U & (IData)(triggers[0U]))) {
|
|
VL_DBG_MSGS(" '" + tag + "' region trigger index 0 is active: @(posedge clk)\n");
|
|
}
|
|
if ((1U & (IData)((triggers[0U] >> 1U)))) {
|
|
VL_DBG_MSGS(" '" + tag + "' region trigger index 1 is active: @(negedge rst_n)\n");
|
|
}
|
|
}
|
|
#endif // VL_DEBUG
|
|
|
|
VL_ATTR_COLD void Vmod_add_sync___024root___ctor_var_reset(Vmod_add_sync___024root* vlSelf) {
|
|
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___ctor_var_reset\n"); );
|
|
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
|
auto& vlSelfRef = std::ref(*vlSelf).get();
|
|
// Body
|
|
const uint64_t __VscopeHash = VL_MURMUR64_HASH(vlSelf->vlNamep);
|
|
vlSelf->clk = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 16707436170211756652ull);
|
|
vlSelf->rst_n = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 1638864771569018232ull);
|
|
vlSelf->a = VL_SCOPED_RAND_RESET_I(12, __VscopeHash, 510903276987443985ull);
|
|
vlSelf->b = VL_SCOPED_RAND_RESET_I(12, __VscopeHash, 16900879642891266615ull);
|
|
vlSelf->valid_i = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 550966959580451262ull);
|
|
vlSelf->ready_o = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 6223107695775132031ull);
|
|
vlSelf->sum = VL_SCOPED_RAND_RESET_I(12, __VscopeHash, 17823321413984766096ull);
|
|
vlSelf->valid_o = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 10854271546065566948ull);
|
|
vlSelf->ready_i = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 2487444212943817592ull);
|
|
vlSelf->mod_add_sync__DOT__add_raw = VL_SCOPED_RAND_RESET_I(13, __VscopeHash, 3056689789628782752ull);
|
|
vlSelf->mod_add_sync__DOT__u_pipe__DOT__valid_r = VL_SCOPED_RAND_RESET_I(1, __VscopeHash, 2581127527985639139ull);
|
|
vlSelf->mod_add_sync__DOT__u_pipe__DOT__data_r = VL_SCOPED_RAND_RESET_I(12, __VscopeHash, 895104528192337104ull);
|
|
for (int __Vi0 = 0; __Vi0 < 1; ++__Vi0) {
|
|
vlSelf->__VstlTriggered[__Vi0] = 0;
|
|
}
|
|
for (int __Vi0 = 0; __Vi0 < 1; ++__Vi0) {
|
|
vlSelf->__VicoTriggered[__Vi0] = 0;
|
|
}
|
|
for (int __Vi0 = 0; __Vi0 < 1; ++__Vi0) {
|
|
vlSelf->__VactTriggered[__Vi0] = 0;
|
|
}
|
|
vlSelf->__Vtrigprevexpr___TOP__clk__0 = 0;
|
|
vlSelf->__Vtrigprevexpr___TOP__rst_n__0 = 0;
|
|
for (int __Vi0 = 0; __Vi0 < 1; ++__Vi0) {
|
|
vlSelf->__VnbaTriggered[__Vi0] = 0;
|
|
}
|
|
}
|