feat: init mlkem project with Verilator test framework
- 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
This commit is contained in:
299
obj_dir/Vmod_add_sync___024root__0.cpp
Normal file
299
obj_dir/Vmod_add_sync___024root__0.cpp
Normal file
@@ -0,0 +1,299 @@
|
||||
// Verilated -*- C++ -*-
|
||||
// DESCRIPTION: Verilator output: Design implementation internals
|
||||
// See Vmod_add_sync.h for the primary calling header
|
||||
|
||||
#include "Vmod_add_sync__pch.h"
|
||||
|
||||
void Vmod_add_sync___024root___eval_triggers_vec__ico(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_triggers_vec__ico\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
vlSelfRef.__VicoTriggered[0U] = ((0xfffffffffffffffeULL
|
||||
& vlSelfRef.__VicoTriggered[0U])
|
||||
| (IData)((IData)(vlSelfRef.__VicoFirstIteration)));
|
||||
}
|
||||
|
||||
bool Vmod_add_sync___024root___trigger_anySet__ico(const VlUnpacked<QData/*63:0*/, 1> &in) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___trigger_anySet__ico\n"); );
|
||||
// Locals
|
||||
IData/*31:0*/ n;
|
||||
// Body
|
||||
n = 0U;
|
||||
do {
|
||||
if (in[n]) {
|
||||
return (1U);
|
||||
}
|
||||
n = ((IData)(1U) + n);
|
||||
} while ((1U > n));
|
||||
return (0U);
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___ico_sequent__TOP__0(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___ico_sequent__TOP__0\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
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)));
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___eval_ico(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_ico\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
if ((1ULL & vlSelfRef.__VicoTriggered[0U])) {
|
||||
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)));
|
||||
}
|
||||
}
|
||||
|
||||
#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);
|
||||
#endif // VL_DEBUG
|
||||
|
||||
bool Vmod_add_sync___024root___eval_phase__ico(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_phase__ico\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Locals
|
||||
CData/*0:0*/ __VicoExecute;
|
||||
// Body
|
||||
Vmod_add_sync___024root___eval_triggers_vec__ico(vlSelf);
|
||||
#ifdef VL_DEBUG
|
||||
if (VL_UNLIKELY(vlSymsp->_vm_contextp__->debug())) {
|
||||
Vmod_add_sync___024root___dump_triggers__ico(vlSelfRef.__VicoTriggered, "ico"s);
|
||||
}
|
||||
#endif
|
||||
__VicoExecute = Vmod_add_sync___024root___trigger_anySet__ico(vlSelfRef.__VicoTriggered);
|
||||
if (__VicoExecute) {
|
||||
Vmod_add_sync___024root___eval_ico(vlSelf);
|
||||
}
|
||||
return (__VicoExecute);
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___eval_triggers_vec__act(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_triggers_vec__act\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
vlSelfRef.__VactTriggered[0U] = (QData)((IData)(
|
||||
((((~ (IData)(vlSelfRef.rst_n))
|
||||
& (IData)(vlSelfRef.__Vtrigprevexpr___TOP__rst_n__0))
|
||||
<< 1U)
|
||||
| ((IData)(vlSelfRef.clk)
|
||||
& (~ (IData)(vlSelfRef.__Vtrigprevexpr___TOP__clk__0))))));
|
||||
vlSelfRef.__Vtrigprevexpr___TOP__clk__0 = vlSelfRef.clk;
|
||||
vlSelfRef.__Vtrigprevexpr___TOP__rst_n__0 = vlSelfRef.rst_n;
|
||||
}
|
||||
|
||||
bool Vmod_add_sync___024root___trigger_anySet__act(const VlUnpacked<QData/*63:0*/, 1> &in) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___trigger_anySet__act\n"); );
|
||||
// Locals
|
||||
IData/*31:0*/ n;
|
||||
// Body
|
||||
n = 0U;
|
||||
do {
|
||||
if (in[n]) {
|
||||
return (1U);
|
||||
}
|
||||
n = ((IData)(1U) + n);
|
||||
} while ((1U > n));
|
||||
return (0U);
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___nba_sequent__TOP__0(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___nba_sequent__TOP__0\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
if (vlSelfRef.rst_n) {
|
||||
if (((IData)(vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r)
|
||||
& (IData)(vlSelfRef.ready_i))) {
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r = 0U;
|
||||
}
|
||||
if (((IData)(vlSelfRef.valid_i) & (IData)(vlSelfRef.ready_o))) {
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r = 1U;
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r
|
||||
= (0x00000fffU & ((0x0d01U > (IData)(vlSelfRef.mod_add_sync__DOT__add_raw))
|
||||
? (IData)(vlSelfRef.mod_add_sync__DOT__add_raw)
|
||||
: ((IData)(vlSelfRef.mod_add_sync__DOT__add_raw)
|
||||
- (IData)(0x0d01U))));
|
||||
}
|
||||
} else {
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r = 0U;
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r = 0U;
|
||||
}
|
||||
vlSelfRef.valid_o = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r;
|
||||
vlSelfRef.ready_o = (1U & ((~ (IData)(vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r))
|
||||
| (IData)(vlSelfRef.ready_i)));
|
||||
vlSelfRef.sum = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r;
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___eval_nba(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_nba\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
if ((3ULL & vlSelfRef.__VnbaTriggered[0U])) {
|
||||
if (vlSelfRef.rst_n) {
|
||||
if (((IData)(vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r)
|
||||
& (IData)(vlSelfRef.ready_i))) {
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r = 0U;
|
||||
}
|
||||
if (((IData)(vlSelfRef.valid_i) & (IData)(vlSelfRef.ready_o))) {
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r = 1U;
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r
|
||||
= (0x00000fffU & ((0x0d01U > (IData)(vlSelfRef.mod_add_sync__DOT__add_raw))
|
||||
? (IData)(vlSelfRef.mod_add_sync__DOT__add_raw)
|
||||
: ((IData)(vlSelfRef.mod_add_sync__DOT__add_raw)
|
||||
- (IData)(0x0d01U))));
|
||||
}
|
||||
} else {
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r = 0U;
|
||||
vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r = 0U;
|
||||
}
|
||||
vlSelfRef.valid_o = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r;
|
||||
vlSelfRef.ready_o = (1U & ((~ (IData)(vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__valid_r))
|
||||
| (IData)(vlSelfRef.ready_i)));
|
||||
vlSelfRef.sum = vlSelfRef.mod_add_sync__DOT__u_pipe__DOT__data_r;
|
||||
}
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___trigger_orInto__act_vec_vec(VlUnpacked<QData/*63:0*/, 1> &out, const VlUnpacked<QData/*63:0*/, 1> &in) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___trigger_orInto__act_vec_vec\n"); );
|
||||
// Locals
|
||||
IData/*31:0*/ n;
|
||||
// Body
|
||||
n = 0U;
|
||||
do {
|
||||
out[n] = (out[n] | in[n]);
|
||||
n = ((IData)(1U) + n);
|
||||
} while ((0U >= n));
|
||||
}
|
||||
|
||||
#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);
|
||||
#endif // VL_DEBUG
|
||||
|
||||
bool Vmod_add_sync___024root___eval_phase__act(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_phase__act\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
Vmod_add_sync___024root___eval_triggers_vec__act(vlSelf);
|
||||
#ifdef VL_DEBUG
|
||||
if (VL_UNLIKELY(vlSymsp->_vm_contextp__->debug())) {
|
||||
Vmod_add_sync___024root___dump_triggers__act(vlSelfRef.__VactTriggered, "act"s);
|
||||
}
|
||||
#endif
|
||||
Vmod_add_sync___024root___trigger_orInto__act_vec_vec(vlSelfRef.__VnbaTriggered, vlSelfRef.__VactTriggered);
|
||||
return (0U);
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___trigger_clear__act(VlUnpacked<QData/*63:0*/, 1> &out) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___trigger_clear__act\n"); );
|
||||
// Locals
|
||||
IData/*31:0*/ n;
|
||||
// Body
|
||||
n = 0U;
|
||||
do {
|
||||
out[n] = 0ULL;
|
||||
n = ((IData)(1U) + n);
|
||||
} while ((1U > n));
|
||||
}
|
||||
|
||||
bool Vmod_add_sync___024root___eval_phase__nba(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_phase__nba\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Locals
|
||||
CData/*0:0*/ __VnbaExecute;
|
||||
// Body
|
||||
__VnbaExecute = Vmod_add_sync___024root___trigger_anySet__act(vlSelfRef.__VnbaTriggered);
|
||||
if (__VnbaExecute) {
|
||||
Vmod_add_sync___024root___eval_nba(vlSelf);
|
||||
Vmod_add_sync___024root___trigger_clear__act(vlSelfRef.__VnbaTriggered);
|
||||
}
|
||||
return (__VnbaExecute);
|
||||
}
|
||||
|
||||
void Vmod_add_sync___024root___eval(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Locals
|
||||
IData/*31:0*/ __VicoIterCount;
|
||||
IData/*31:0*/ __VnbaIterCount;
|
||||
// Body
|
||||
__VicoIterCount = 0U;
|
||||
vlSelfRef.__VicoFirstIteration = 1U;
|
||||
do {
|
||||
if (VL_UNLIKELY(((0x00000064U < __VicoIterCount)))) {
|
||||
#ifdef VL_DEBUG
|
||||
Vmod_add_sync___024root___dump_triggers__ico(vlSelfRef.__VicoTriggered, "ico"s);
|
||||
#endif
|
||||
VL_FATAL_MT("sync_rtl/mod_add/mod_add_sync.v", 14, "", "DIDNOTCONVERGE: Input combinational region did not converge after '--converge-limit' of 100 tries");
|
||||
}
|
||||
__VicoIterCount = ((IData)(1U) + __VicoIterCount);
|
||||
vlSelfRef.__VicoPhaseResult = Vmod_add_sync___024root___eval_phase__ico(vlSelf);
|
||||
vlSelfRef.__VicoFirstIteration = 0U;
|
||||
} while (vlSelfRef.__VicoPhaseResult);
|
||||
__VnbaIterCount = 0U;
|
||||
do {
|
||||
if (VL_UNLIKELY(((0x00000064U < __VnbaIterCount)))) {
|
||||
#ifdef VL_DEBUG
|
||||
Vmod_add_sync___024root___dump_triggers__act(vlSelfRef.__VnbaTriggered, "nba"s);
|
||||
#endif
|
||||
VL_FATAL_MT("sync_rtl/mod_add/mod_add_sync.v", 14, "", "DIDNOTCONVERGE: NBA region did not converge after '--converge-limit' of 100 tries");
|
||||
}
|
||||
__VnbaIterCount = ((IData)(1U) + __VnbaIterCount);
|
||||
vlSelfRef.__VactIterCount = 0U;
|
||||
do {
|
||||
if (VL_UNLIKELY(((0x00000064U < vlSelfRef.__VactIterCount)))) {
|
||||
#ifdef VL_DEBUG
|
||||
Vmod_add_sync___024root___dump_triggers__act(vlSelfRef.__VactTriggered, "act"s);
|
||||
#endif
|
||||
VL_FATAL_MT("sync_rtl/mod_add/mod_add_sync.v", 14, "", "DIDNOTCONVERGE: Active region did not converge after '--converge-limit' of 100 tries");
|
||||
}
|
||||
vlSelfRef.__VactIterCount = ((IData)(1U)
|
||||
+ vlSelfRef.__VactIterCount);
|
||||
vlSelfRef.__VactPhaseResult = Vmod_add_sync___024root___eval_phase__act(vlSelf);
|
||||
} while (vlSelfRef.__VactPhaseResult);
|
||||
vlSelfRef.__VnbaPhaseResult = Vmod_add_sync___024root___eval_phase__nba(vlSelf);
|
||||
} while (vlSelfRef.__VnbaPhaseResult);
|
||||
}
|
||||
|
||||
#ifdef VL_DEBUG
|
||||
void Vmod_add_sync___024root___eval_debug_assertions(Vmod_add_sync___024root* vlSelf) {
|
||||
VL_DEBUG_IF(VL_DBG_MSGF("+ Vmod_add_sync___024root___eval_debug_assertions\n"); );
|
||||
Vmod_add_sync__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp;
|
||||
auto& vlSelfRef = std::ref(*vlSelf).get();
|
||||
// Body
|
||||
if (VL_UNLIKELY(((vlSelfRef.clk & 0xfeU)))) {
|
||||
Verilated::overWidthError("clk");
|
||||
}
|
||||
if (VL_UNLIKELY(((vlSelfRef.rst_n & 0xfeU)))) {
|
||||
Verilated::overWidthError("rst_n");
|
||||
}
|
||||
if (VL_UNLIKELY(((vlSelfRef.a & 0xf000U)))) {
|
||||
Verilated::overWidthError("a");
|
||||
}
|
||||
if (VL_UNLIKELY(((vlSelfRef.b & 0xf000U)))) {
|
||||
Verilated::overWidthError("b");
|
||||
}
|
||||
if (VL_UNLIKELY(((vlSelfRef.valid_i & 0xfeU)))) {
|
||||
Verilated::overWidthError("valid_i");
|
||||
}
|
||||
if (VL_UNLIKELY(((vlSelfRef.ready_i & 0xfeU)))) {
|
||||
Verilated::overWidthError("ready_i");
|
||||
}
|
||||
}
|
||||
#endif // VL_DEBUG
|
||||
Reference in New Issue
Block a user