SMP启动分析

SMP启动分析:

主要分为以下几个阶段:

  • ROM阶段
  • OpenSbi底层初始化阶段
  • OpenSbi设备初始化阶段
    • clodboot
    • warmboot
  • Linux阶段
    • colboot->启动Linux->在kernel_init中经过层层调用,发送SBI_EXT_HSM_HART_START这个ecall到opensbi;
    • opensbi处理这个ecall将下发参数保存到hartid对应的scratch区域中,发送核间中断,唤醒hartid对应的hart,然后继续执行warmboot的相关流程代码,,最终执行到kernel中;

当CPU上电后,进入ROM阶段

ROM阶段主要进行固件的搬移和参数的准备:

  • 设置设备树地址,放入a1寄存器:
  • 设置dynamic方式需要的参数,放入a2寄存器存放的地址偏移:
/** Offset of magic member in fw_dynamic_info */
#define FW_DYNAMIC_INFO_MAGIC_OFFSET		(0 * __SIZEOF_POINTER__)
/** Offset of version member in fw_dynamic_info */
#define FW_DYNAMIC_INFO_VERSION_OFFSET		(1 * __SIZEOF_POINTER__)
/** Offset of next_addr member in fw_dynamic_info (version >= 1) */
#define FW_DYNAMIC_INFO_NEXT_ADDR_OFFSET	(2 * __SIZEOF_POINTER__)
/** Offset of next_mode member in fw_dynamic_info  (version >= 1) */
#define FW_DYNAMIC_INFO_NEXT_MODE_OFFSET	(3 * __SIZEOF_POINTER__)
/** Offset of options member in fw_dynamic_info  (version >= 1) */
#define FW_DYNAMIC_INFO_OPTIONS_OFFSET		(4 * __SIZEOF_POINTER__)
/** Offset of boot_hart member in fw_dynamic_info  (version >= 2) */
#define FW_DYNAMIC_INFO_BOOT_HART_OFFSET	(5 * __SIZEOF_POINTER__)

/** Expected value of info magic ('OSBI' ascii string in hex) */
#define FW_DYNAMIC_INFO_MAGIC_VALUE		0x4942534f
  • 主要rom阶段要将分配的Cache1和Cache2给关闭,不然会导致后续阶段执行问题;

OpenSbi底层初始化阶段

经过lottery后将选定一个boot hart,其余的hart将等待其重定位和scratch空间和栈空间初始化工作的完成。

_start:
	/* Find preferred boot HART id */
	MOV_3R	s0, a0, s1, a1, s2, a2
	call	fw_boot_hart
	add	a6, a0, zero
	MOV_3R	a0, s0, a1, s1, a2, s2
	li	a7, -1
	beq	a6, a7, _try_lottery
	/* Jump to relocation wait loop if we are not boot hart */
	bne	a0, a6, _wait_relocate_copy_done

_try_lottery:
	/* Jump to relocation wait loop if we don't get relocation lottery */
	la	a6, _relocate_lottery
	li	a7, 1
	amoadd.w a6, a7, (a6)
	bnez	a6, _wait_relocate_copy_done

	/* Save load address */
	la	t0, _load_start
	la	t1, _start
	REG_S	t1, 0(t0)

boot hart在完成fdt的重定位后将进入c阶段

_fdt_reloc_done:

	/* mark boot hart done */
	li	t0, BOOT_STATUS_BOOT_HART_DONE
	la	t1, _boot_status
	REG_S	t0, 0(t1)
	fence	rw, rw
	j	_start_warm

其余的hart在等待BOOT_STATUS_BOOT_HART_DONE标志后,将也会进入c阶段

_wait_for_boot_hart:
	li	t0, BOOT_STATUS_BOOT_HART_DONE
	la	t1, _boot_status
	REG_L	t1, 0(t1)
	/* Reduce the bus traffic so that boot hart may proceed faster */
	nop
	nop
	nop
	bne	t0, t1, _wait_for_boot_hart
OpenSBI设备初始化阶段
### 如何在 CST 软件中设置和配置二极管 SMP1330 #### 设置环境准备 为了成功地在 CST Studio Suite 中模拟并配置二极管 SMP1330,需先确认已安装最新版本的 CST Studio Suite 并启动程序。 #### 创建新项目 进入 CST Microwave Studio 或者其他适合的应用模块下创建一个新的设计文件。选择适用于微波元件仿真的模板来初始化工作空间[^4]。 #### 导入模型数据 通过库管理器导入所需的二极管组件模型。对于特定型号如 SMP1330,可能需要从制造商处获取精确的 SPICE 模型或其他形式的数据表参数,并将其加载到 CST 的材料数据库或元件库内[^5]。 #### 参数化定义 利用 CST 提供的各种工具对所选器件进行详细的电气特性描述。这通常涉及到输入诸如正向电压、反向恢复时间等关键性能指标作为仿真条件的一部分[^6]。 #### 构建电路结构 构建包含目标二极管在内的射频/微波电路布局图。连接必要的无源和有源部件形成完整的测试平台用于后续分析过程[^7]。 #### 运行电磁场仿真 设定好边界条件之后就可以执行全波求解器计算任务了。观察所得结果并与预期相符;如果不一致,则调整之前所做的假设直至获得满意的效果为止[^8]。 #### 后处理与优化 最后一步是对得到的数据做进一步解读以及可视化呈现。借助内置图表生成功能展示不同频率下的 S 参数变化趋势,从而评估该类半导体开关的实际表现是否满足应用需求[^9]。 ```matlab % MATLAB 示例代码片段:绘制S参数曲线 figure; freq = linspace(startFreq,endFreq,numPoints); % 定义频率范围 sParamData = read_s_parameters('simulation_results.s2p'); % 读取仿真结果 plot(freq*1e-9, db(sParamData.S_Parameters(:,1,1)), '-r', ... freq*1e-9, db(sParamData.S_Parameters(:,2,2)), '--b'); xlabel('Frequency [GHz]'); ylabel('|S_{xx}| [dB]'); title('Diode SMP1330 Frequency Response'); legend({'|S_{11}|','|S_{22}|'}); grid on; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值