芯片架构设计技能 - 从需求定义到模块划分,完整指导芯片架构开发
当用户需要进行芯片架构设计时,启用此技能。此技能提供芯片架构设计的完整指导,从需求定义到模块划分,遵循工业界最佳实践。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 模块大小 | 10k-100k 门 | 单个模块大小 |
| 层次深度 | 3-4 层 | 模块层次深度 |
| 时钟域数量 | 3-10 个 | 时钟域数量 |
| 复位域数量 | 2-5 个 | 复位域数量 |
| 电源域数量 | 2-4 个 | 电源域数量 |
| 面积余量 | 10-15% | 预留面积余量 |
| 功耗余量 |
| 15-20% |
| 预留功耗余量 |
| 设计目标 | 面积优化 | 性能优化 | 功耗优化 |
|---|---|---|---|
| 逻辑设计 | 资源共享 | 流水线 | 门控时钟 |
| 存储器 | 单端口 | 多端口 | 低漏电 |
| 总线 | 窄总线 | 宽总线 | 按需唤醒 |
| 时钟 | 少时钟域 | 多时钟域 | 时钟门控 |
| IP 类型 | 评估周期 | 授权费用 | 集成周期 |
|---|---|---|---|
| CPU | 1-2 月 | $50k-500k | 2-4 月 |
| DDR 控制器 | 1 月 | $20k-100k | 1-2 月 |
| PCIe 控制器 | 1 月 | $20k-100k | 1-2 月 |
| USB 控制器 | 2 周 | $10k-50k | 2-4 周 |
| 以太网 MAC | 2 周 | $10k-50k | 2-4 周 |
| PLL | 2 周 | $5k-20k | 1-2 周 |
诊断步骤:
1. 分析性能瓶颈
2. 检查总线带宽
3. 检查存储器延迟
4. 检查流水线深度
判断标准:
| 性能差距 | 判断 | 行动 |
|---|---|---|
| < 10% | 可接受 | 微调优化 |
| 10-30% | 需优化 | 流水线/并行 |
| > 30% | 架构问题 | 重新设计 |
根本原因定位:
| 根本原因 | 诊断特征 | 解决方案 |
|---|---|---|
| 总线带宽不足 | 总线利用率 > 80% | 增加总线宽度/增加总线 |
| 存储器延迟大 | 命中率低 | 增加缓存/预取 |
| 流水线浅 | 关键路径长 | 增加流水级 |
| 模块串行执行 | 利用率低 | 并行化设计 |
诊断步骤:
1. 分析面积分布
2. 识别面积大户
3. 检查是否有优化空间
4. 检查是否有冗余功能
根本原因定位:
| 根本原因 | 诊断特征 | 解决方案 |
|---|---|---|
| 存储器过大 | 存储器占比 > 50% | 压缩算法/减少容量 |
| 逻辑冗余 | 有未使用功能 | 删除冗余功能 |
| IP 选择不当 | IP 面积大 | 更换 IP |
| 设计过度 | 安全裕度过大 | 减少冗余 |
诊断步骤:
1. 分析功耗分布
2. 识别功耗大户
3. 检查时钟门控率
4. 检查电源域划分
根本原因定位:
| 根本原因 | 诊断特征 | 解决方案 |
|---|---|---|
| 时钟门控率低 | < 70% | 增加门控条件 |
| 电源域过少 | 无可关断域 | 增加电源域 |
| 漏电功耗高 | 静态功耗占比高 | 降低电压/使用低漏电库 |
| 活动因子高 | 动态功耗高 | 优化算法/减少翻转 |
在开始设计之前,必须收集并明确所有需求。
做什么: 从产品经理/系统工程师获取完整功能需求列表。
怎么做:
输出: 功能需求列表表格
| 功能 ID | 功能名称 | 描述 | 优先级 | 来源 |
|---|---|---|---|---|
| F001 | PCIe Gen4 x4 | 支持 PCIe Gen4 x4,带宽 64Gbps | P0 | 产品需求 |
| F002 | DDR4 控制器 | 支持 DDR4-3200,最大 16GB | P0 | 产品需求 |
| F003 | 安全启动 | 支持 secure boot | P1 | 安全需求 |
做什么: 明确性能指标,这些直接影响架构决策。
怎么做:
输出: 性能需求表格
| 指标 | 数值 | 来源 |
|---|---|---|
| 目标频率 | 500MHz | 系统需求 |
| PCIe 峰值带宽 | 64 Gbps | 产品需求 |
| DDR 延迟 | < 100ns (平均) | 系统需求 |
| 功耗 | < 5W | 产品需求 |
做什么: 明确面积和功耗限制,这些是架构的硬约束。
怎么做:
输出: PPA 预算分配表
| 子系统 | 面积预算 (mm²) | 动态功耗 (mW) | 静态功耗 (mW) |
|---|---|---|---|
| CPU | 2.0 | 500 | 50 |
| DDR 控制器 | 1.5 | 300 | 30 |
| PCIe | 1.0 | 200 | 20 |
| 其他 | 0.5 | 100 | 10 |
| 总计 | 5.0 | 1100 | 110 |
做什么: 明确所有片外接口和片上总线接口。
怎么做:
输出: 接口需求列表
| 接口名称 | 类型 | 协议 | 宽度 | 频率 |
|---|---|---|---|---|
| PCIe | 片外 | PCIe Gen4 | x4 | 250MHz |
| DDR | 片外 | DDR4-3200 | 64-bit | 400MHz |
| AXI 主 | 片上 | AXI4 | 128-bit | 500MHz |
| AXI 从 | 片上 | AXI4-Lite | 32-bit | 500MHz |
做什么: 明确功能安全等级和 DFT 需求。
怎么做:
输出: 安全和测试需求
| 需求类型 | 要求 | 来源 |
|---|---|---|
| 功能安全 | ASIL-B | ISO 26262 |
| DFT 覆盖率 | > 98% | 公司标准 |
| 测试时间 | < 1s | 量产需求 |
做什么: 识别需要外购或复用的 IP 模块。
怎么做:
输出: IP 需求列表
| 模块 | 来源选项 | 推荐来源 | 理由 |
|---|---|---|---|
| CPU | 外购/自研 | 外购 ARM/RISC-V | 开发周期短 |
| DDR 控制器 | 外购 | Synopsys/Cadence | 协议复杂 |
| PCIe 控制器 | 外购 | Synopsys | 协议复杂 |
| UART | 复用/自研 | 复用 | 已有成熟设计 |
| 特殊加速器 | 自研 | 自研 | 无合适 IP |
做什么: 需求文档评审,所有相关方签字确认。
怎么做:
检查清单:
需求明确后,首先定义顶层接口。
做什么: 确定芯片与外部世界的所有接口。
怎么做:
输出: 顶层接口列表
芯片顶层接口:
├── 电源接口
│ ├── VDD (数字核心电源) × 20
│ ├── VDDIO (IO电源) × 10
│ ├── VSS (地) × 30
│ └── VDDA (模拟电源) × 5
├── 时钟接口
│ ├── CLK_REF (参考时钟输入)
│ └── CLK_OUT (时钟输出,可选)
├── 复位接口
│ └── RST_N (复位输入)
├── 功能接口
│ ├── PCIe (x4, 差分)
│ ├── DDR (64-bit + ECC)
│ ├── UART (调试)
│ └── JTAG (测试)
└── GPIO
└── GPIO[15:0] (通用IO)
做什么: 确定内部模块之间的通信协议。
怎么做:
总线协议选择参考:
| 协议 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| AXI4 | 高带宽存储器映射 | 乱序、QoS、区域保护 | 协议复杂、面积大 |
| AXI4-Lite | 寄存器配置 | 简单、轻量 | 低带宽 |
| AXI4-Stream | 数据流 | 适合视频/网络 | 不支持随机访问 |
| AHB | 中带宽系统 | 简单 | 不支持乱序 |
| APB | 低带宽外设 | 非常简单 | 低带宽 |
输出: 总线拓扑图
┌─────────────┐
│ CPU │
└──────┬──────┘
│ AXI4 主
┌──────┴──────┐
│ AXI 互联 │
└──────┬──────┘
┌───────────────┼───────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ DDR 控制器 │ │ PCIe 控制器│ │ 外设桥 │
│ (AXI 从) │ │ (AXI 从) │ │ (AXI 从) │
└───────────┘ └───────────┘ └─────┬─────┘
│ APB
┌──────┴──────┐
│ UART/SPI... │
└─────────────┘
做什么: 确定时钟源和复位策略。
怎么做:
输出: 时钟复位规划表
| 时钟名称 | 频率 | 来源 | 用途 |
|---|---|---|---|
| clk_sys | 500MHz | 内部 PLL | 系统主时钟 |
| clk_ddr | 400MHz | 内部 PLL | DDR 控制器 |
| clk_pcie | 250MHz | 内部 PLL | PCIe 控制器 |
| clk_ref | 25MHz | 外部晶振 | 参考时钟 |
| 复位名称 | 来源 | 复位域 |
|---|---|---|
| rst_n | 外部引脚 | 全局复位 |
| por_n | 上电检测 | 上电复位 |
| wdt_rst | 看门狗 | 安全复位 |
做什么: 确定电源域划分和电压。
怎么做:
输出: 电源域规划图
电源域规划:
├── VDD_ALWAYS (1.0V, 始终上电)
│ ├── CPU
│ ├── 中断控制器
│ └── 电源管理模块
├── VDD_CORE (1.0V, 可关断)
│ ├── DDR 控制器
│ ├── PCIe 控制器
│ └── 其他功能模块
└── VDD_IO (3.3V, 始终上电)
└── 所有 IO
检查清单:
顶层接口定义完成后,进行模块划分。
做什么: 把系统分解成子系统,子系统分解成模块,模块分解成单元。
怎么做:
分解原则:
| 原则 | 说明 | 检查方法 |
|---|---|---|
| 单一职责 | 每个模块只做一件事 | 能用一句话描述模块功能 |
| 松耦合 | 模块间依赖最少 | 接口数量少 |
| 高内聚 | 模块内部紧密关联 | 修改只影响一个模块 |
| 大小适中 | 每个模块 < 100k 门 | 门级估算 |
输出: 模块层次树
SoC 顶层
├── CPU 子系统
│ ├── CPU 核心 (RISC-V)
│ ├── 指令缓存
│ ├── 数据缓存
│ └── 中断控制器
├── 存储子系统
│ ├── DDR 控制器
│ ├── SRAM 控制器
│ └── DMA 引擎
├── 外设子系统
│ ├── UART 控制器
│ ├── SPI 控制器
│ ├── I2C 控制器
│ └── GPIO 控制器
├── 高速接口子系统
│ ├── PCIe 控制器
│ │ ├── PCIe PHY
│ │ ├── PCIe MAC
│ │ └── NVMe 协议层
│ └── 以太网控制器
└── 系统控制子系统
├── 时钟管理
├── 复位管理
├── 电源管理
└── JTAG TAP
做什么: 为每个模块编写功能描述。
怎么做:
输出: 模块功能描述模板
## 模块名称:DDR 控制器
### 功能描述
DDR 控制器负责管理 DDR4 存储器的读写访问,提供给 CPU 和 DMA 引擎统一的存储器访问接口。
### 主要特性
- 支持 DDR4-3200
- 支持 64-bit 数据宽度 + 8-bit ECC
- 支持突发长度 8
- 支持读写优先级可配置
- 支持低功耗模式
### 输入接口
| 接口名 | 类型 | 宽度 | 描述 |
|--------|------|------|------|
| clk | 时钟 | 1 | 控制器时钟 |
| rst_n | 复位 | 1 | 异步复位 |
| axi_aw* | AXI4 | - | AXI 写地址通道 |
| axi_w* | AXI4 | - | AXI 写数据通道 |
| axi_ar* | AXI4 | - | AXI 读地址通道 |
### 输出接口
| 接口名 | 类型 | 宽度 | 描述 |
|--------|------|------|------|
| axi_b* | AXI4 | - | AXI 写响应通道 |
| axi_r* | AXI4 | - | AXI 读数据通道 |
| ddr_* | DDR4 | - | DDR 物理接口 |
做什么: 定义模块之间的通信接口。
怎么做:
接口设计原则:
| 原则 | 说明 |
|---|---|
| 使用标准协议 | 优先使用 AXI/APB/AHB 等标准协议 |
| 握手机制 | 必须有 valid/ready 握手 |
| 错误处理 | 定义错误响应机制 |
| 文档化 | 每个接口都有详细文档 |
✅ 好的接口设计:ready/valid 双向握手
// 发送方接口
output logic o_valid, // 数据有效
output logic [31:0] o_data, // 数据
input logic i_ready, // 接收方可以接收
// 接收方接口
input logic i_valid, // 数据有效
input logic [31:0] i_data, // 数据
output logic o_ready, // 可以接收数据
❌ 不好的接口设计:
做什么: 把总面积预算分配到每个模块。
怎么做:
输出: 面积预算表
| 模块 | 面积预算 (mm²) | 估算依据 | 风险 |
|---|---|---|---|
| CPU 核心 | 0.8 | 参考设计 | 低 |
| DDR 控制器 | 0.5 | 类似项目 | 低 |
| PCIe 控制器 | 0.4 | 类似项目 | 低 |
| ... | ... | ... | ... |
| 总计 | 4.5 | ||
| 余量 | 0.5 | 10% | |
| 总计+余量 | 5.0 |
检查清单:
对于需要外购的 IP,进行选型评估。
做什么: 评估候选 IP 供应商。
评估维度:
| 维度 | 权重 | 评估内容 |
|---|---|---|
| 技术成熟度 | 30% | IP 是否经过量产验证 |
| 技术支持 | 20% | 技术支持响应速度和质量 |
| 文档质量 | 15% | 文档是否完整清晰 |
| 授权费用 | 15% | 是否在预算内 |
| 版税 | 10% | 版税是否可接受 |
| 交付周期 | 10% | 是否满足项目时间 |
供应商评估表:
| 供应商 | 技术成熟度 | 技术支持 | 文档质量 | 授权费用 | 版税 | 交付周期 | 总分 |
|---|---|---|---|---|---|---|---|
| 供应商A | 9/10 | 8/10 | 9/10 | 7/10 | 8/10 | 9/10 | 8.3 |
| 供应商B | 8/10 | 9/10 | 8/10 | 8/10 | 7/10 | 8/10 | 8.1 |
| 供应商C | 7/10 | 7/10 | 7/10 | 9/10 | 9/10 | 7/10 | 7.6 |
做什么: 评估 IP 的技术指标。
评估内容:
| 评估项 | 说明 | 方法 |
|---|---|---|
| 功能完整性 | 是否满足所有功能需求 | 功能检查表 |
| 性能指标 | 是否满足性能要求 | 数据手册分析 |
| 面积 | 是否在面积预算内 | 参考设计面积 |
| 功耗 | 是否在功耗预算内 | 参考设计功耗 |
| 工艺兼容 | 是否支持目标工艺 | IP 工艺支持列表 |
| 总线接口 | 是否支持目标总线协议 | 接口检查 |
技术评估表:
| 评估项 | 需求 | IP A | IP B | IP C |
|---|---|---|---|---|
| 功能完整性 | 100% | 95% | 100% | 90% |
| 频率 | 500MHz | 600MHz | 500MHz | 450MHz |
| 面积 | < 1mm² | 0.8mm² | 1.2mm² | 0.9mm² |
| 功耗 | < 100mW | 80mW | 120mW | 90mW |
| 工艺支持 | 28nm | 支持 | 支持 | 不支持 |
| 总线接口 | AXI4 | 支持 | 支持 | 支持 |
做什么: 评估 IP 集成的复杂度。
评估内容:
| 评估项 | 说明 |
|---|---|
| 接口复杂度 | IP 接口是否标准,是否需要适配 |
| 配置复杂度 | IP 配置参数是否合理 |
| 验证复杂度 | IP 是否提供验证组件 |
| 文档完整度 | 集成指南是否详细 |
| 集成周期 | 预估集成时间 |
集成风险评估:
| 风险 | 概率 | 影响 | 缓解措施 |
|---|---|---|---|
| 接口不匹配 | 中 | 高 | 提前确认接口协议 |
| 配置错误 | 高 | 中 | 详细阅读文档 |
| 验证困难 | 中 | 高 | 购买 VIP |
| 性能不达标 | 低 | 高 | 预留性能余量 |
做什么: 根据评估结果选择 IP。
决策流程:
1. 排除不满足基本需求的 IP
2. 对剩余 IP 进行综合评分
3. 考虑风险因素
4. 选择综合评分最高的 IP
5. 记录决策理由
IP 选型决策记录:
## IP 选型决策记录
### 决策 ID: IP-001
### 决策内容: 选择供应商 A 的 DDR 控制器 IP
### 候选 IP:
- IP A: 供应商 A DDR4 控制器
- IP B: 供应商 B DDR4 控制器
- IP C: 供应商 C DDR4 控制器
### 评估结果:
| 维度 | IP A | IP B | IP C |
|------|------|------|------|
| 技术成熟度 | 9 | 8 | 7 |
| 性能 | 8 | 7 | 6 |
| 面积 | 8 | 6 | 8 |
| 功耗 | 9 | 7 | 8 |
| 授权费用 | 7 | 8 | 9 |
| 集成复杂度 | 8 | 8 | 7 |
| **总分** | **8.2** | **7.3** | **7.5** |
### 选择理由:
IP A 在技术成熟度和功耗方面最优,虽然授权费用略高,但整体风险最低。
### 决策人: XXX
### 决策日期: 2024-01-15
IP 选型检查清单:
模块划分完成后,进行时钟域规划。
做什么: 确定需要多少个时钟域。
怎么做:
时钟域划分原则:
| 原则 | 说明 |
|---|---|
| 频率不同 | 不同频率必须不同时钟域 |
| 来源不同 | 不同来源时钟必须不同时钟域 |
| 关断需求 | 需要独立关断的模块单独时钟域 |
| 数量适中 | 时钟域不要太多,增加复杂度 |
做什么: 确定时钟域之间的同步/异步关系。
怎么做:
输出: 时钟域关系图
时钟域规划:
clk_sys (500MHz) clk_ddr (400MHz) clk_pcie (250MHz)
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ CPU │───异步FIFO───│ DDR │───异步FIFO──│ PCIe │
│ 缓存 │ │ 控制器 │ │ 控制器 │
│ 外设 │ │ │ │ │
└─────────┘ └─────────┘ └─────────┘
│ │ │
└──────────────同步────────┴───────────异步─────────┘
做什么: 为每个跨时钟域信号确定同步方法。
怎么做:
| 数据类型 | 同步方法 | 适用场景 |
|---|---|---|
| 单比特控制信号 | 两级同步器 | 慢时钟域到快时钟域 |
| 单比特脉冲 | 脉冲展宽 + 两级同步 | 快时钟域到慢时钟域 |
| 多比特数据 | 异步 FIFO | 数据总线 |
| 多比特控制 | 握手协议 | 请求/响应信号 |
输出: 跨时钟域信号列表
| 信号名 | 源时钟域 | 目标时钟域 | 同步方法 | 负责模块 |
|---|---|---|---|---|
| cpu_req | clk_sys | clk_ddr | 异步FIFO | DDR控制器 |
| ddr_ack | clk_ddr | clk_sys | 异步FIFO | DDR控制器 |
| pcie_irq | clk_pcie | clk_sys | 两级同步 | PCIe控制器 |
做什么: 确定哪些模块需要时钟门控。
怎么做:
输出: 时钟门控规划表
| 模块 | 是否门控 | 门控条件 | 预计功耗节省 |
|---|---|---|---|
| CPU | 否 | - | - |
| DDR 控制器 | 是 | 空闲 100ns | 20% |
| PCIe 控制器 | 是 | 无连接 | 30% |
| UART | 是 | 空闲 | 5% |
检查清单:
时钟域规划完成后,进行复位域规划。
做什么: 确定整个项目使用同步复位还是异步复位。
同步复位 vs 异步复位:
| 特性 | 同步复位 | 异步复位 |
|---|---|---|
| 复位时机 | 需要时钟 | 不需要时钟 |
| STA 影响 | 友好 | 需要特殊处理 |
| 面积 | 略大 | 略小 |
| 毛刺 | 无 | 复位释放可能有毛刺 |
项目级规则:
⚠️ 整个项目保持一致!要么全同步复位,要么全异步复位,不要混合。
选择建议:
做什么: 确定哪些模块需要独立复位。
怎么做:
输出: 复位域规划图
复位域规划:
全局复位 (rst_n)
│
├── 复位域 0: 核心逻辑
│ ├── CPU
│ ├── 缓存
│ └── 总线互联
│
├── 复位域 1: 外设
│ ├── UART
│ ├── SPI
│ └── GPIO
│
└── 复位域 2: 高速接口(独立复位)
├── DDR 控制器
└── PCIe 控制器
安全复位 (wdt_rst)
│
└── 复位域 3: 安全模块
├── 看门狗
└── 错误监控
做什么: 确定复位释放顺序。
怎么做:
复位序列示例:
上电序列:
1. 上电复位 (por_n) 有效
2. 等待电源稳定
3. 等待时钟稳定
4. 释放核心复位域
5. 等待 100us
6. 释放外设备位域
7. 等待 100us
8. 释放高速接口复位域
9. 开始正常工作
如果使用异步复位,必须同步释放:
// 异步复位,同步释放电路
module reset_sync (
input wire i_clk, // 时钟
input wire i_async_rst_n,// 异步复位输入
output logic o_sync_rst_n // 同步后的复位输出
);
(* async_reg = "true" *) logic r_rst1;
(* async_reg = "true" *) logic r_rst2;
always_ff @(posedge i_clk or negedge i_async_rst_n) begin
if (!i_async_rst_n) begin
r_rst1 <= 1'b0;
r_rst2 <= 1'b0;
end else begin
r_rst1 <= 1'b1;
r_rst2 <= r_rst1;
end
end
assign o_sync_rst_n = r_rst2;
endmodule
检查清单:
做什么: 为每个模块估算存储器容量。
怎么做:
存储器容量计算公式:
FIFO 深度 = 速率差 × 突发长度 × 安全系数(1.5~2)
缓存容量 = 带宽要求 × 延迟容忍时间
缓冲容量 = 最大突发长度 × 数据宽度
输出: 存储器需求表
| 模块 | 存储器名称 | 宽度 | 深度 | 类型 | ECC |
|---|---|---|---|---|---|
| CPU | 指令缓存 | 256-bit | 512 | SRAM | 否 |
| CPU | 数据缓存 | 256-bit | 512 | SRAM | 否 |
| DDR控制器 | 写缓冲 | 64-bit | 32 | FIFO | 否 |
| PCIe | 收发缓冲 | 128-bit | 64 | FIFO | 是 |
做什么: 为每个存储器选择合适的类型。
存储器类型选择:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 单端口 SRAM | 面积最小 | 只读或只写 |
| 伪双端口 SRAM | 可同时读写 | 大多数场景 |
| 真双端口 SRAM | 可同时读写同地址 | 面积大,特殊需求 |
| 单端口 ROM | 只读 | 启动代码、常数表 |
| 寄存器堆 | 最灵活,容量小 | 小容量存储 |
做什么: 确定存储器在芯片中的物理位置。
怎么做:
检查清单:
做什么: 确定哪些模块可以独立关断电源。
怎么做:
电源域划分原则:
| 原则 | 说明 |
|---|---|
| 始终上电 | 安全模块、电源管理、唤醒逻辑 |
| 可关断 | 大功耗模块、不常用模块 |
| 独立电压 | 不同性能需求的模块 |
做什么: 规划电源分布网络。
怎么做:
电源网络检查:
做什么: 在不同电压域和可关断域之间插入特殊单元。
| 场景 | 需要的单元 |
|---|---|
| 高电压域 → 低电压域 | 电平转换器 |
| 低电压域 → 高电压域 | 电平转换器 |
| 可关断域 → 始终上电域 | 隔离单元 |
| 始终上电域 → 可关断域 | 保持寄存器 |
检查清单:
做什么: 确定扫描链数量和长度。
怎么做:
做什么: 为每个存储器规划 BIST。
怎么做:
做什么: 规划 JTAG TAP 控制器。
怎么做:
检查清单:
做什么: 提出多个架构候选方案。
怎么做:
做什么: 对每个候选方案进行评估。
评估维度:
| 维度 | 评估方法 | 权重 |
|---|---|---|
| 可验证性 | 是否容易搭建验证环境 | 15% |
| 可实现性 | 是否满足 PPA 预算 | 25% |
| 可调试性 | 是否有足够观测点 | 10% |
| 可扩展性 | 是否方便未来扩展 | 10% |
| 功耗 | 是否满足功耗预算 | 15% |
| 面积 | 是否满足面积预算 | 15% |
| 时序 | 能否达到目标频率 | 10% |
做什么: 根据评估结果选择最终方案。
怎么做:
输出: 架构决策记录
## 架构决策记录
### 决策 ID: ARCH-001
### 决策内容: 选择方案 A 作为最终架构
### 候选方案:
- 方案 A: 集中式总线架构
- 方案 B: 分布式网状架构
- 方案 C: 混合架构
### 评估结果:
| 维度 | 方案A | 方案B | 方案C |
|------|-------|-------|-------|
| 可验证性 | 4 | 3 | 3 |
| 可实现性 | 5 | 3 | 4 |
| 可调试性 | 4 | 4 | 3 |
| 可扩展性 | 3 | 5 | 4 |
| 功耗 | 4 | 3 | 3 |
| 面积 | 5 | 3 | 4 |
| 时序 | 4 | 4 | 4 |
| **总分** | **4.2** | **3.5** | **3.6** |
### 选择理由:
方案 A 在可实现性和面积方面最优,虽然可扩展性略逊于方案 B,但满足当前需求且风险最低。
### 决策人: XXX
### 决策日期: 2024-01-15
架构设计完成后,必须输出完整的架构文档。
内容:
内容(每个模块):
内容:
内容:
内容:
架构设计交付前必须完成:
❌ 过度设计:现在就添加十年后才需要的功能 ❌ 设计不足:没有考虑未来扩展,一年后就要重构 ❌ 模糊接口:接口定义不清晰,集成时才发现问题 ❌ 忽略验证:架构不容易验证,后期验证找不到 bug ❌ 忽略后端:架构布局完全不考虑后端实现 ❌ 不记录决策:做了决策但不记录理由,后面忘记为什么这么做
rtl-designer 代理实现 RTLverification-engineer 代理开发验证平台functional-safety-engineer 代理进行安全分析