Files
test-repo/docs/.vitepress/theme/components/appendix/computer-fundamentals/CpuArchitectureDemo.vue
T
sanbuphy 6098908eee feat(docs): add interactive demos and complete content for development tools
- Add Vue components for interactive demos (SSH auth, regex, env vars, ports)
- Complete markdown content for SSH, regex, environment variables, and ports
- Remove placeholder "待实现" sections and replace with detailed guides
- Add visual explanations for key concepts like ports and localhost
- Include practical examples and troubleshooting tips
- Add component for showing evolution from transistors to CPU
- Improve documentation structure and navigation
- Add security best practices for API keys and environment variables
2026-02-21 10:04:47 +08:00

240 lines
5.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="cpu-arch-demo">
<div class="demo-header">
<span class="title">CPU 架构全貌</span>
<span class="subtitle">从功能单元到完整核心</span>
</div>
<div class="architecture-overview">
<div class="overview-title">核心组件一览静态展示</div>
<div class="overview-grid">
<div v-for="comp in components" :key="comp.name" class="overview-card">
<div class="card-top">
<span class="comp-icon">{{ comp.icon }}</span>
<span class="comp-name">{{ comp.name }}</span>
</div>
<div class="comp-desc">{{ comp.desc }}</div>
<div class="comp-role">{{ comp.role }}</div>
</div>
</div>
</div>
<div class="instruction-flow">
<div class="flow-title">一条指令在 CPU 内部的流动</div>
<div class="flow-steps">
<div
v-for="(step, index) in instructionFlow"
:key="step.name"
class="flow-step"
>
<span class="step-index">{{ index + 1 }}</span>
<span class="step-name">{{ step.name }}</span>
<span class="step-desc">{{ step.desc }}</span>
<span
v-if="index < instructionFlow.length - 1"
class="step-arrow"
aria-hidden="true"
>
</span>
</div>
</div>
</div>
<div class="info-box">
<strong>核心思想</strong
>CPU 不是单一部件而是多个功能单元的有序协作控制器负责调度ALU 负责计算寄存器负责高速暂存总线负责连接与传输
</div>
</div>
</template>
<script setup>
const components = [
{
icon: '🎮',
name: '控制器(CU',
desc: '负责取指、解码和发出控制信号',
role: '像指挥员,安排每个模块何时工作'
},
{
icon: '📊',
name: 'ALU',
desc: '执行加减与、或、比较等运算',
role: '像计算器,完成核心算术与逻辑处理'
},
{
icon: '📁',
name: '寄存器组',
desc: '保存当前最常用的数据和中间结果',
role: '像桌面便签,读写速度远高于内存'
},
{
icon: '🚌',
name: '内部总线',
desc: '在模块间传输数据、地址和控制信息',
role: '像高速通道,把各组件连接成整体'
}
]
const instructionFlow = [
{ name: '取指', desc: '控制器从缓存/内存取来指令' },
{ name: '解码', desc: '识别指令类型与需要的操作数' },
{ name: '执行', desc: 'ALU 或其他单元完成具体运算' },
{ name: '写回', desc: '结果写入寄存器,供后续指令使用' }
]
</script>
<style scoped>
.cpu-arch-demo {
border: 1px solid var(--vp-c-divider);
border-radius: 8px;
background: var(--vp-c-bg-soft);
padding: 1.25rem;
margin: 1.25rem 0;
}
.demo-header {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 1rem;
}
.demo-header .title {
font-weight: bold;
font-size: 1rem;
}
.demo-header .subtitle {
color: var(--vp-c-text-2);
font-size: 0.85rem;
margin-left: 0.5rem;
}
.overview-title,
.flow-title {
font-weight: bold;
font-size: 0.92rem;
margin-bottom: 0.5rem;
}
.overview-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 0.6rem;
}
.overview-card {
display: flex;
flex-direction: column;
gap: 0.35rem;
padding: 0.7rem;
background: var(--vp-c-bg-alt);
border-radius: 8px;
border: 1px solid var(--vp-c-divider);
}
.card-top {
display: flex;
align-items: center;
gap: 0.45rem;
}
.comp-icon {
font-size: 1rem;
}
.comp-name {
font-weight: bold;
font-size: 0.85rem;
}
.comp-desc {
font-size: 0.78rem;
color: var(--vp-c-text-2);
}
.comp-role {
font-size: 0.78rem;
color: var(--vp-c-text-1);
background: var(--vp-c-bg);
border-radius: 4px;
padding: 0.25rem 0.4rem;
}
.instruction-flow {
margin-top: 1rem;
background: var(--vp-c-bg);
border: 1px solid var(--vp-c-divider);
border-radius: 8px;
padding: 0.75rem;
}
.flow-steps {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
align-items: center;
}
.flow-step {
display: inline-flex;
align-items: center;
gap: 0.4rem;
background: var(--vp-c-bg-soft);
border: 1px solid var(--vp-c-divider);
border-radius: 999px;
padding: 0.35rem 0.55rem;
}
.step-index {
width: 1.1rem;
height: 1.1rem;
border-radius: 50%;
background: var(--vp-c-brand-soft);
color: var(--vp-c-brand-1);
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 0.72rem;
font-weight: bold;
}
.step-name {
font-size: 0.78rem;
font-weight: bold;
}
.step-desc {
font-size: 0.75rem;
color: var(--vp-c-text-2);
}
.step-arrow {
margin-left: 0.1rem;
color: var(--vp-c-text-3);
}
.info-box {
background: var(--vp-c-bg-alt);
padding: 0.85rem;
border-radius: 6px;
font-size: 0.85rem;
color: var(--vp-c-text-2);
margin-top: 1rem;
display: flex;
gap: 0.25rem;
}
.info-box strong {
white-space: nowrap;
flex-shrink: 0;
}
@media (max-width: 680px) {
.overview-grid {
grid-template-columns: 1fr;
}
}
</style>