基于GS232的SoC_up设计详解:控制器与地址空间划分

需积分: 0 3 下载量 136 浏览量 更新于2024-08-05 收藏 1MB PDF 举报
本文档主要介绍了基于GS232的SoC_up系统的设计与实现,该系统是一个针对Artix-7教学实验板定制的硬件平台,集成了多个关键控制器和外设,以满足实验教学和基本功能需求。以下是本文的核心知识点: 1. **GS232开源版本简介** - 开源的GS232版本不包含DSP和浮点处理单元,这意味着其主要关注于基础的串行通信功能。 - 系统的TLB(Translation Lookaside Buffer)大小为32项,用于快速地址映射。 - 指令和数据Cache采用4路组相连设计,每路大小为4KB,Cache行大小为32字节,以提高内存访问效率。 - 外部接口为32位AXI(Advanced eXtensible Interface),这是一种高性能总线标准,支持高速数据传输。 2. **SoC_up结构** - SoC_up包括AXI2APB桥接器,用于连接不同速度的总线; - CPU负责执行指令和控制其他组件; - SPIflashController用于管理闪存存储; - Confreg是配置寄存器模块; - MACController提供MAC(Media Access Controller)功能,用于网络通信; - AXIInterconnect是内部总线互联; - UART控制器支持串行通信; - 龙芯开源模块、Xilinx IP集成在系统中; - 硬件还包括SPIflash芯片、GPIO(通用输入输出)控制数码管、LED灯、开关灯等; - 网络接口、DDR3颗粒、NandFlash以及串口都是SoC_up的关键组成部分。 3. **地址空间分配** - 外设地址空间按功能划分,例如: - SPIflash分配了0xbfc0_0000到0xbfcf_ffff和0xbfe4_0000~0xbfe4_ffff两个地址区,总计1MB,其中1MB用于存储空间,64KB用于控制器寄存器; - GPIO地址空间为0xbfd0_0000~0xbfd0_ffff,共64KB; - MAC控制器位于0xbff0_0000~0xbff0_ffff,占用64KB; - DDR3控制器利用剩余的4GB空间中的128MB; - NANDflash的地址范围为0xbfe7_8000~0xbfe。 本文提供了详细的SoC_up设计概述,从硬件架构、接口规范到具体地址分配,为理解和操作这个基于GS232的教育实验平台提供了清晰的指导。这对于学习嵌入式系统开发、硬件编程和接口设计的学生和工程师来说,具有很高的参考价值。

优化代码 def module_split(self, save_on=True): """ split module data :param save_on: :return: """ for ms in range(self.mod_num): m_sn = self.module_list[ms] module_path = os.path.join(self.result_path_down, m_sn) cols_obj = ChuNengPackMustCols(ms, self.mod_cell_num, self.mod_cell_num) # 传入当前的module序号(如0,1,2,3,4),电芯电压个数,温度NTC个数。 aim_cols = [i for i in cols_obj.total_cols if i in self.df.columns] print(m_sn, aim_cols) self.modules[m_sn] = rename_cols_normal(self.df.loc[:, aim_cols], ms, self.mod_cell_num) print("after change cols name:", ms, m_sn, self.modules[m_sn].columns.tolist()) self.modules[m_sn].dropna(axis=0, how='any', subset=['soc'], inplace=True) volt_col = [f'volt{i}' for i in range(self.mod_cell_num)] temp_col = [f'temp{i}' for i in range(self.mod_cell_num)] self.modules[m_sn].dropna(axis=0, how='any', subset=volt_col, inplace=True) self.modules[m_sn] = stat(self.modules[m_sn], volt_col, temp_col) self.modules[m_sn].reset_index(drop=True, inplace=True) print(self.modules[m_sn]['discharge_ah'].iloc[-1]) self.module_cap[m_sn] = [self.modules[m_sn]['discharge_ah'].iloc[-1], self.modules[m_sn]['charge_ah'].iloc[-1], self.modules[m_sn]['soh'].iloc[-1]] self.module_peaks[m_sn] = list(quick_report(self.modules[m_sn], module_path, f'quick_report_{m_sn[:8]}')) # check soc status mod_soc = self.modules[m_sn]['soc'] self.module_soc_sig[m_sn] = [np.nanmedian(mod_soc), np.max(mod_soc), np.min(mod_soc)] if save_on: single_variables_plot(mod_soc, module_path, f'{m_sn[:8]}_soc_distribution_box.png', 'box', 'SOC') single_variables_plot(mod_soc, module_path, f'{m_sn[:8]}_soc_distribution_violin.png', 'violin', 'SOC')

2023-05-25 上传