// Verilated -*- C++ -*- // DESCRIPTION: Verilator output: Design implementation internals // See Vcomputer.h for the primary calling header #include "Vcomputer__pch.h" #include "Vcomputer___024root.h" void Vcomputer___024root___eval_act(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___eval_act\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); } void Vcomputer___024root___nba_sequent__TOP__0(Vcomputer___024root* vlSelf); void Vcomputer___024root___eval_nba(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___eval_nba\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); // Body if ((1ULL & vlSelfRef.__VnbaTriggered.word(0U))) { Vcomputer___024root___nba_sequent__TOP__0(vlSelf); } } VL_INLINE_OPT void Vcomputer___024root___nba_sequent__TOP__0(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___nba_sequent__TOP__0\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); // Init CData/*1:0*/ computer__DOT__BusSel; computer__DOT__BusSel = 0; CData/*7:0*/ computer__DOT__InstructionData; computer__DOT__InstructionData = 0; CData/*7:0*/ __VdlyVal__computer__DOT__memoryandvideo__DOT__RAM__v0; __VdlyVal__computer__DOT__memoryandvideo__DOT__RAM__v0 = 0; SData/*15:0*/ __VdlyDim0__computer__DOT__memoryandvideo__DOT__RAM__v0; __VdlyDim0__computer__DOT__memoryandvideo__DOT__RAM__v0 = 0; CData/*0:0*/ __VdlySet__computer__DOT__memoryandvideo__DOT__RAM__v0; __VdlySet__computer__DOT__memoryandvideo__DOT__RAM__v0 = 0; SData/*31:0*/ __Vtemp_2; // Body __VdlySet__computer__DOT__memoryandvideo__DOT__RAM__v0 = 0U; vlSelfRef.computer__DOT__memoryandvideo__DOT__pixelCounter = (0x3fU & ((IData)(1U) + (IData)(vlSelfRef.computer__DOT__memoryandvideo__DOT__pixelCounter))); if ((6U == (IData)(vlSelfRef.computer__DOT__OperationSel))) { __VdlyVal__computer__DOT__memoryandvideo__DOT__RAM__v0 = vlSelfRef.computer__DOT__B; __VdlyDim0__computer__DOT__memoryandvideo__DOT__RAM__v0 = vlSelfRef.computer__DOT____Vcellinp__memoryandvideo____pinNumber2; __VdlySet__computer__DOT__memoryandvideo__DOT__RAM__v0 = 1U; } if (vlSelfRef.reset) { __Vtemp_2 = 0U; vlSelfRef.computer__DOT__MP = 0U; vlSelfRef.computer__DOT__X = 0U; vlSelfRef.computer__DOT__carryReg = 0U; vlSelfRef.ACC = 0U; } else { __Vtemp_2 = (0xffffU & (((7U == (IData)(vlSelfRef.computer__DOT__OperationSel)) & ((4U & (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2)) ? ((2U & (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2)) ? ((1U & (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2)) ? (0U != (IData)(vlSelfRef.ACC)) : (IData)(vlSelfRef.computer__DOT__carryReg)) : ((1U & (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2)) ? ((~ (IData)( (0U != (IData)(vlSelfRef.ACC)))) | ((IData)(vlSelfRef.ACC) >> 7U)) : ((IData)(vlSelfRef.ACC) >> 7U))) : ((2U & (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2)) ? ((1U & (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2)) ? (~ (IData)( (0U != (IData)(vlSelfRef.ACC)))) : (~ ((IData)(vlSelfRef.ACC) >> 7U))) : ((1U & (~ (IData)(vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2))) || ((0U != (IData)(vlSelfRef.ACC)) & (~ ((IData)(vlSelfRef.ACC) >> 7U))))))) ? (((IData)(vlSelfRef.computer__DOT__PP) << 8U) | (IData)(vlSelfRef.computer__DOT__AddressBus)) : ((IData)(1U) + (IData)(vlSelfRef.PC)))); if ((0U != (IData)(vlSelfRef.computer__DOT__RegisterSel))) { if ((1U == (IData)(vlSelfRef.computer__DOT__RegisterSel))) { vlSelfRef.computer__DOT__MP = vlSelfRef.computer__DOT__Y; } if ((1U != (IData)(vlSelfRef.computer__DOT__RegisterSel))) { if ((2U != (IData)(vlSelfRef.computer__DOT__RegisterSel))) { vlSelfRef.computer__DOT__X = vlSelfRef.computer__DOT__Y; } if ((2U == (IData)(vlSelfRef.computer__DOT__RegisterSel))) { vlSelfRef.ACC = vlSelfRef.computer__DOT__Y; } } } if ((IData)((4U == (6U & (IData)(vlSelfRef.computer__DOT__OperationSel))))) { vlSelfRef.computer__DOT__carryReg = vlSelfRef.computer__DOT__carry; } } vlSelfRef.PC = __Vtemp_2; if (__VdlySet__computer__DOT__memoryandvideo__DOT__RAM__v0) { vlSelfRef.computer__DOT__memoryandvideo__DOT__RAM[__VdlyDim0__computer__DOT__memoryandvideo__DOT__RAM__v0] = __VdlyVal__computer__DOT__memoryandvideo__DOT__RAM__v0; } vlSelfRef.videoSignal = (1U & (vlSelfRef.computer__DOT__memoryandvideo__DOT__RAM [(7U & ((IData)(vlSelfRef.computer__DOT__memoryandvideo__DOT__pixelCounter) >> 3U))] >> (7U & (IData)(vlSelfRef.computer__DOT__memoryandvideo__DOT__pixelCounter)))); if ((1U & (~ (IData)(vlSelfRef.reset)))) { if ((0U == (IData)(vlSelfRef.computer__DOT__RegisterSel))) { vlSelfRef.computer__DOT__PP = vlSelfRef.computer__DOT__Y; } } vlSelfRef.computer__DOT____Vcellinp__Conditional____pinNumber2 = (7U & (vlSelfRef.computer__DOT__program_rom [vlSelfRef.PC] >> 0xaU)); computer__DOT__BusSel = (3U & (vlSelfRef.computer__DOT__program_rom [vlSelfRef.PC] >> 0xbU)); computer__DOT__InstructionData = (0xffU & vlSelfRef.computer__DOT__program_rom [vlSelfRef.PC]); vlSelfRef.computer__DOT__OperationSel = (7U & ( vlSelfRef.computer__DOT__program_rom [vlSelfRef.PC] >> 0xdU)); vlSelfRef.computer__DOT__RegisterSel = (3U & (vlSelfRef.computer__DOT__program_rom [vlSelfRef.PC] >> 9U)); vlSelfRef.computer__DOT__AddressBus = ((0x100U & vlSelfRef.computer__DOT__program_rom [vlSelfRef.PC]) ? (IData)(vlSelfRef.computer__DOT__X) : (IData)(computer__DOT__InstructionData)); vlSelfRef.computer__DOT____Vcellinp__memoryandvideo____pinNumber2 = (((IData)(vlSelfRef.computer__DOT__MP) << 8U) | (IData)(vlSelfRef.computer__DOT__AddressBus)); vlSelfRef.computer__DOT__B = ((0U == (IData)(computer__DOT__BusSel)) ? vlSelfRef.computer__DOT__memoryandvideo__DOT__RAM [vlSelfRef.computer__DOT____Vcellinp__memoryandvideo____pinNumber2] : ((1U == (IData)(computer__DOT__BusSel)) ? (IData)(computer__DOT__InstructionData) : ((2U == (IData)(computer__DOT__BusSel)) ? 0U : (IData)(vlSelfRef.ACC)))); if ((4U & (IData)(vlSelfRef.computer__DOT__OperationSel))) { vlSelfRef.computer__DOT__carry = (1U & ((1U & (~ ((IData)(vlSelfRef.computer__DOT__OperationSel) >> 1U))) && (1U & ((1U & (IData)(vlSelfRef.computer__DOT__OperationSel)) ? (1U & (((IData)(vlSelfRef.ACC) - (IData)(vlSelfRef.computer__DOT__B)) >> 8U)) : (1U & (((IData)(vlSelfRef.ACC) + (IData)(vlSelfRef.computer__DOT__B)) >> 8U)))))); vlSelfRef.computer__DOT__Y = (0xffU & ((2U & (IData)(vlSelfRef.computer__DOT__OperationSel)) ? 0U : ( (1U & (IData)(vlSelfRef.computer__DOT__OperationSel)) ? ((IData)(vlSelfRef.ACC) - (IData)(vlSelfRef.computer__DOT__B)) : ((IData)(vlSelfRef.ACC) + (IData)(vlSelfRef.computer__DOT__B))))); } else if ((2U & (IData)(vlSelfRef.computer__DOT__OperationSel))) { if ((1U & (IData)(vlSelfRef.computer__DOT__OperationSel))) { vlSelfRef.computer__DOT__carry = (1U & (((IData)(vlSelfRef.ACC) ^ (IData)(vlSelfRef.computer__DOT__B)) >> 8U)); vlSelfRef.computer__DOT__Y = (0xffU & ((IData)(vlSelfRef.ACC) ^ (IData)(vlSelfRef.computer__DOT__B))); } else { vlSelfRef.computer__DOT__carry = (1U & (((IData)(vlSelfRef.ACC) | (IData)(vlSelfRef.computer__DOT__B)) >> 8U)); vlSelfRef.computer__DOT__Y = (0xffU & ((IData)(vlSelfRef.ACC) | (IData)(vlSelfRef.computer__DOT__B))); } } else if ((1U & (IData)(vlSelfRef.computer__DOT__OperationSel))) { vlSelfRef.computer__DOT__carry = (1U & (((IData)(vlSelfRef.ACC) & (IData)(vlSelfRef.computer__DOT__B)) >> 8U)); vlSelfRef.computer__DOT__Y = (0xffU & ((IData)(vlSelfRef.ACC) & (IData)(vlSelfRef.computer__DOT__B))); } else { vlSelfRef.computer__DOT__carry = (1U & ((IData)(vlSelfRef.computer__DOT__B) >> 8U)); vlSelfRef.computer__DOT__Y = (0xffU & (IData)(vlSelfRef.computer__DOT__B)); } } void Vcomputer___024root___eval_triggers__act(Vcomputer___024root* vlSelf); bool Vcomputer___024root___eval_phase__act(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___eval_phase__act\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); // Init VlTriggerVec<1> __VpreTriggered; CData/*0:0*/ __VactExecute; // Body Vcomputer___024root___eval_triggers__act(vlSelf); __VactExecute = vlSelfRef.__VactTriggered.any(); if (__VactExecute) { __VpreTriggered.andNot(vlSelfRef.__VactTriggered, vlSelfRef.__VnbaTriggered); vlSelfRef.__VnbaTriggered.thisOr(vlSelfRef.__VactTriggered); Vcomputer___024root___eval_act(vlSelf); } return (__VactExecute); } bool Vcomputer___024root___eval_phase__nba(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___eval_phase__nba\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); // Init CData/*0:0*/ __VnbaExecute; // Body __VnbaExecute = vlSelfRef.__VnbaTriggered.any(); if (__VnbaExecute) { Vcomputer___024root___eval_nba(vlSelf); vlSelfRef.__VnbaTriggered.clear(); } return (__VnbaExecute); } #ifdef VL_DEBUG VL_ATTR_COLD void Vcomputer___024root___dump_triggers__nba(Vcomputer___024root* vlSelf); #endif // VL_DEBUG #ifdef VL_DEBUG VL_ATTR_COLD void Vcomputer___024root___dump_triggers__act(Vcomputer___024root* vlSelf); #endif // VL_DEBUG void Vcomputer___024root___eval(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___eval\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); // Init IData/*31:0*/ __VnbaIterCount; CData/*0:0*/ __VnbaContinue; // Body __VnbaIterCount = 0U; __VnbaContinue = 1U; while (__VnbaContinue) { if (VL_UNLIKELY((0x64U < __VnbaIterCount))) { #ifdef VL_DEBUG Vcomputer___024root___dump_triggers__nba(vlSelf); #endif VL_FATAL_MT("computer.v", 11, "", "NBA region did not converge."); } __VnbaIterCount = ((IData)(1U) + __VnbaIterCount); __VnbaContinue = 0U; vlSelfRef.__VactIterCount = 0U; vlSelfRef.__VactContinue = 1U; while (vlSelfRef.__VactContinue) { if (VL_UNLIKELY((0x64U < vlSelfRef.__VactIterCount))) { #ifdef VL_DEBUG Vcomputer___024root___dump_triggers__act(vlSelf); #endif VL_FATAL_MT("computer.v", 11, "", "Active region did not converge."); } vlSelfRef.__VactIterCount = ((IData)(1U) + vlSelfRef.__VactIterCount); vlSelfRef.__VactContinue = 0U; if (Vcomputer___024root___eval_phase__act(vlSelf)) { vlSelfRef.__VactContinue = 1U; } } if (Vcomputer___024root___eval_phase__nba(vlSelf)) { __VnbaContinue = 1U; } } } #ifdef VL_DEBUG void Vcomputer___024root___eval_debug_assertions(Vcomputer___024root* vlSelf) { (void)vlSelf; // Prevent unused variable warning Vcomputer__Syms* const __restrict vlSymsp VL_ATTR_UNUSED = vlSelf->vlSymsp; VL_DEBUG_IF(VL_DBG_MSGF("+ Vcomputer___024root___eval_debug_assertions\n"); ); auto &vlSelfRef = std::ref(*vlSelf).get(); // Body if (VL_UNLIKELY((vlSelfRef.clk & 0xfeU))) { Verilated::overWidthError("clk");} if (VL_UNLIKELY((vlSelfRef.reset & 0xfeU))) { Verilated::overWidthError("reset");} } #endif // VL_DEBUG