2026-02-18 15:52:55 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="cpu-arch-demo">
|
|
|
|
|
|
<div class="demo-header">
|
|
|
|
|
|
<span class="title">CPU 架构全貌</span>
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<span class="subtitle">从功能单元到完整核心</span>
|
2026-02-18 15:52:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<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>
|
2026-02-18 15:52:55 +08:00
|
|
|
|
</div>
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<div class="comp-desc">{{ comp.desc }}</div>
|
|
|
|
|
|
<div class="comp-role">{{ comp.role }}</div>
|
2026-02-18 15:52:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-02-21 10:04:47 +08:00
|
|
|
|
</div>
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<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"
|
2026-02-18 17:38:10 +08:00
|
|
|
|
>
|
2026-02-21 10:04:47 +08:00
|
|
|
|
→
|
|
|
|
|
|
</span>
|
2026-02-18 15:52:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="info-box">
|
2026-02-21 10:04:47 +08:00
|
|
|
|
<strong>核心思想:</strong
|
|
|
|
|
|
>CPU 不是单一部件,而是多个功能单元的有序协作:控制器负责调度,ALU 负责计算,寄存器负责高速暂存,总线负责连接与传输。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
2026-02-21 10:04:47 +08:00
|
|
|
|
const components = [
|
2026-02-18 15:52:55 +08:00
|
|
|
|
{
|
2026-02-21 10:04:47 +08:00
|
|
|
|
icon: '🎮',
|
|
|
|
|
|
name: '控制器(CU)',
|
|
|
|
|
|
desc: '负责取指、解码和发出控制信号',
|
|
|
|
|
|
role: '像指挥员,安排每个模块何时工作'
|
2026-02-18 15:52:55 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2026-02-21 10:04:47 +08:00
|
|
|
|
icon: '📊',
|
|
|
|
|
|
name: 'ALU',
|
|
|
|
|
|
desc: '执行加减与、或、比较等运算',
|
|
|
|
|
|
role: '像计算器,完成核心算术与逻辑处理'
|
2026-02-18 15:52:55 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2026-02-21 10:04:47 +08:00
|
|
|
|
icon: '📁',
|
|
|
|
|
|
name: '寄存器组',
|
|
|
|
|
|
desc: '保存当前最常用的数据和中间结果',
|
|
|
|
|
|
role: '像桌面便签,读写速度远高于内存'
|
2026-02-18 15:52:55 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
2026-02-21 10:04:47 +08:00
|
|
|
|
icon: '🚌',
|
|
|
|
|
|
name: '内部总线',
|
|
|
|
|
|
desc: '在模块间传输数据、地址和控制信息',
|
|
|
|
|
|
role: '像高速通道,把各组件连接成整体'
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
const instructionFlow = [
|
|
|
|
|
|
{ name: '取指', desc: '控制器从缓存/内存取来指令' },
|
|
|
|
|
|
{ name: '解码', desc: '识别指令类型与需要的操作数' },
|
|
|
|
|
|
{ name: '执行', desc: 'ALU 或其他单元完成具体运算' },
|
|
|
|
|
|
{ name: '写回', desc: '结果写入寄存器,供后续指令使用' }
|
2026-02-18 15:52:55 +08:00
|
|
|
|
]
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
.cpu-arch-demo {
|
|
|
|
|
|
border: 1px solid var(--vp-c-divider);
|
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
|
background: var(--vp-c-bg-soft);
|
2026-02-21 10:04:47 +08:00
|
|
|
|
padding: 1.25rem;
|
|
|
|
|
|
margin: 1.25rem 0;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.demo-header {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
gap: 0.5rem;
|
2026-02-21 10:04:47 +08:00
|
|
|
|
margin-bottom: 1rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.demo-header .title {
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 1rem;
|
|
|
|
|
|
}
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.demo-header .subtitle {
|
|
|
|
|
|
color: var(--vp-c-text-2);
|
|
|
|
|
|
font-size: 0.85rem;
|
|
|
|
|
|
margin-left: 0.5rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.overview-title,
|
|
|
|
|
|
.flow-title {
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 0.92rem;
|
|
|
|
|
|
margin-bottom: 0.5rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.overview-grid {
|
|
|
|
|
|
display: grid;
|
|
|
|
|
|
grid-template-columns: repeat(2, 1fr);
|
|
|
|
|
|
gap: 0.6rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.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);
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.card-top {
|
2026-02-18 15:52:55 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
2026-02-21 10:04:47 +08:00
|
|
|
|
gap: 0.45rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.comp-icon {
|
2026-02-18 15:52:55 +08:00
|
|
|
|
font-size: 1rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.comp-name {
|
2026-02-18 15:52:55 +08:00
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 0.85rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.comp-desc {
|
|
|
|
|
|
font-size: 0.78rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
color: var(--vp-c-text-2);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.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;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.instruction-flow {
|
|
|
|
|
|
margin-top: 1rem;
|
|
|
|
|
|
background: var(--vp-c-bg);
|
|
|
|
|
|
border: 1px solid var(--vp-c-divider);
|
|
|
|
|
|
border-radius: 8px;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
padding: 0.75rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.flow-steps {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
gap: 0.5rem;
|
2026-02-21 10:04:47 +08:00
|
|
|
|
align-items: center;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.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;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.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;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.step-name {
|
|
|
|
|
|
font-size: 0.78rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.step-desc {
|
2026-02-18 15:52:55 +08:00
|
|
|
|
font-size: 0.75rem;
|
|
|
|
|
|
color: var(--vp-c-text-2);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.step-arrow {
|
|
|
|
|
|
margin-left: 0.1rem;
|
|
|
|
|
|
color: var(--vp-c-text-3);
|
2026-02-18 15:52:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.info-box {
|
|
|
|
|
|
background: var(--vp-c-bg-alt);
|
2026-02-21 10:04:47 +08:00
|
|
|
|
padding: 0.85rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
border-radius: 6px;
|
|
|
|
|
|
font-size: 0.85rem;
|
|
|
|
|
|
color: var(--vp-c-text-2);
|
2026-02-21 10:04:47 +08:00
|
|
|
|
margin-top: 1rem;
|
2026-02-18 15:52:55 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
gap: 0.25rem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-21 10:04:47 +08:00
|
|
|
|
.info-box strong {
|
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@media (max-width: 680px) {
|
|
|
|
|
|
.overview-grid {
|
|
|
|
|
|
grid-template-columns: 1fr;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-02-18 15:52:55 +08:00
|
|
|
|
</style>
|