一 种 基 于 Java 平 台 的 可 编 程 嵌 入 式 系 统 设 计 杜 海 兵 王 民 北 摘 要 传 统 的 嵌 入 式 系 统 设 计 的 主 要 目 标 是 找 到 一 种 优 化 的 体 系 结 构 来 完 成 单 一 的, 特 定 的 功 能 对 这 样 的 系 统 来 说,ASIC 和 核 心 处 理 器 是 作 为 特 别 的 构 件 模 块 加 以 考 虑 的 : 设 计 者 根 据 应 用 的 要 求 选 择 适 当 的 ASIC, 根 据 给 定 的 性 能 要 求 比 如 处 理 器 主 频, 系 统 稳 定 性, 以 及 对 功 耗 的 要 求 等 选 用 适 当 的 处 理 器 内 核 关 键 词 :Java 平 台, 可 编 程 嵌 入 式 系 统 1. 概 述 传 统 的 嵌 入 式 系 统 设 计 的 主 要 目 标 是 找 到 一 种 优 化 的 体 系 结 构 来 完 成 单 一 的, 特 定 的 功 能 对 这 样 的 系 统 来 说,ASIC 和 核 心 处 理 器 是 作 为 特 别 的 构 件 模 块 加 以 考 虑 的 : 设 计 者 根 据 应 用 的 要 求 选 择 适 当 的 ASIC, 根 据 给 定 的 性 能 要 求 比 如 处 理 器 主 频, 系 统 稳 定 性, 以 及 对 功 耗 的 要 求 等 选 用 适 当 的 处 理 器 内 核 然 而, 在 当 今 移 动 通 信 已 经 进 入 每 个 人 的 生 活 的 今 天, 现 在 的 嵌 入 式 系 统 比 如 PDA 等 已 经 不 同 于 传 统 意 义 上 的 嵌 入 式 系 统 了, 它 们 有 自 己 的 独 特 特 点 客 观 需 要 要 求 它 们 能 够 支 持 多 种 应 用 功 能 如 网 页 浏 览, 播 放 音 频 / 视 频 文 件, 以 及 进 行 无 线 网 络 通 信 等 这 样 看 来, 传 统 的 设 计 思 路 因 为 只 面 向 单 一 的 应 用, 无 法 满 足 多 应 用 嵌 入 式 系 统 的 需 求 而 解 决 这 一 问 题 的 良 好 途 径 便 是 向 嵌 入 式 系 统 引 入 可 编 程 能 力, 以 使 得 系 统 能 够 根 据 用 户 的 不 同 要 求 实 现 对 不 同 应 用 的 支 持 为 了 向 系 统 中 引 入 可 编 程 能 力, 我 们 考 虑 在 系 统 中 嵌 入 FPGA, 因 为 FPGA 具 有 下 列 特 点, 使 得 它 成 为 我 们 的 首 选 : 1. 现 在 的 FPGA 的 处 理 能 力 和 逻 辑 容 量 已 经 接 近 于 专 用 ASIC, 功 耗 也 比 较 低, 能 够 满 足 我 们 系 统 设 计 的 要 求 ; 2. 由 于 FPGA 具 有 的 可 重 编 程 能 力, 使 用 了 FPGA 的 嵌 入 式 系 统 能 够 满 足 各 种 不 同 的 应 用 要 求 ; 从 嵌 入 式 系 统 管 理 的 角 度 来 说, 对 网 络 通 信 的 支 持 也 是 很 有 必 要 的, 也 是 很 有 特 色 的 一 个 应 用, 因 为 它 使 得 从 远 端 服 务 器 下 载 新 的 应 用 程 序 并 在 本 地 运 行 成 为 可 能 为 实 现 对 这 个 功 能 的 支 持, 我 们 采 用 Java 作 为 软 件 平 台 因 为 Java 运 行 在 Java 虚 拟 机 之 上, 它 能 够 下 载 并 执 行 新 的 应 用 程 序 代 码, 并 且 无 需 在 下 载 后 重 新 启 动 系 统 综 上 所 述, 这 个 新 的 嵌 入 式 系 统 是 基 于 Java 的, 有 一 个 FPGA 和 标 准 处 理 器 相 连 我 们 通 过 网 络 下 载 Java 代 码 和 可 以 对 FPGA 进 行 编 程 的 比 特 流 该 系 统 也 支 持 对 FPGA 的 动 态 重 新 配 置 为 了 实 现 硬 件 (FPGA) 和 软 件 (Java 应 用 程 序 代 码 ) 之 间 的 通 信, 又 定 义 了 一 组 本 地 API, 以 使 得 从 Java 应 用 层 能 够 访 问 到 底 层 的 硬 件 为 了 调 用 这 些 本 地 API, 采 用 了
Java 本 地 接 口 (JNI) 在 本 文 中, 将 一 些 Java 函 数 (Java method) 用 FPGA 可 编 程 硬 件 来 实 现, 称 之 为 硬 件 方 法 (HW method) 2. 系 统 设 计 实 现 一 个 Java 函 数 功 能 的 对 应 的 硬 件 方 法 实 现 的 逻 辑 结 构 图 如 图 1 所 示 输 入 缓 存 和 输 出 缓 存 分 别 用 来 接 收 输 入 参 数 和 存 储 输 出 结 果 控 制 缓 存 用 于 对 硬 件 方 法 的 控 制 和 检 测, 比 如 向 硬 件 方 法 发 出 启 动 指 令, 检 查 其 所 处 的 状 态 并 判 断 操 作 是 否 完 成 等 该 模 块 中 的 所 有 缓 存 都 映 射 到 处 理 器 物 理 地 址 空 间 中, 处 理 器 可 以 使 用 正 常 的 读 写 指 令 完 成 对 这 些 缓 存 的 访 问 图 2 是 该 嵌 入 式 系 统 的 硬 件 平 台, 由 一 个 标 准 处 理 器, 一 个 FPGA 和 一 个 系 统 存 储 单 元 构 成 它 们 之 间 通 过 共 享 的 系 统 总 线 连 接 在 一 起 当 处 理 器 向 一 个 硬 件 方 法 发 出 读 写 操 作 指 令 时, 该 硬 件 方 法 在 其 自 己 的 地 址 解 码 器 的 帮 助 下 向 数 据 总 线 上 发 送 对 应 的 响 应 信 号 在 这 里, 我 们 可 以 认 为 是 处 理 器 发 起 的 硬 件 / 软 件 通 信 指 令, 而 FPGA 则 是 作 为 一 个 从 属 单 元 做 出 回 应 因 为 在 处 理 器 发 起 初 始 指 令 后, 就 由 可 配 置 管 理 器 来 负 责 管 理 FPGA 编 程 这 样 一 来, 就 实 现 了 处 理 器 和 FPGA 的 并 行 运 行 如 图 3 所 示, 我 们 选 择 Java 作 为 软 件 平 台, 并 且 装 载 了 一 个 嵌 入 式 操 作 系 统 为 Java 实 时 应 用 程 序 提 供 基 本 的 服 务, 比 如 线 程 和 其 它 硬 件 管 理 等
通 过 系 统 管 理 器, 可 以 从 远 程 服 务 器 下 载 Java 应 用 程 序 系 统 管 理 器 主 要 实 现 了 下 面 3 种 协 议 : 1. 应 用 程 序 代 码 ( 包 括 可 对 FPGA 进 行 编 程 的 比 特 流 ) 下 载 协 议 ; 2. 用 于 远 程 管 理 的 系 统 维 护 相 关 的 协 议 ; 3. 控 制 对 嵌 入 式 系 统 访 问 权 限 的 认 证 协 议 系 统 管 理 器 包 括 基 于 socket 连 接 的 客 户 端 类 加 载 器 远 端 应 用 程 序 可 以 下 载 到 本 地 并 按 照 下 面 的 过 程 执 行 : 1. 完 成 认 证 过 程, 系 统 进 入 管 理 模 式 ; 2. 下 载 应 用 程 序 代 码, 完 成 系 统 初 始 化, 比 如 加 载 FPGA 可 编 程 比 特 流 到 相 应 的 存 储 单 元 ; 3. 执 行 新 的 应 用 程 序 在 该 系 统 中, 为 了 简 化 起 见, 预 先 映 射 硬 件 方 法 地 址 到 确 定 的 系 统 物 理 存 储 区, 目 的 是 为 了 寻 址 操 作 的 方 便 快 捷 由 于 我 们 使 用 了 Java 软 件 平 台, 应 用 程 序 就 无 法 直 接 访 问 底 层 的 硬 件 这 就 是 说, 运 行 在 处 理 器 Java 虚 拟 机 上 的 应 用 程 序 不 能 直 接 访 问 映 射 到 FPGA 中 硬 件 方 法 的 缓 存 区 域 为 解 决 这 个 问 题, 理 论 上 可 以 采 用 下 面 两 种 方 法 : 1. 修 改 Java 虚 拟 机, 使 其 具 有 对 处 理 器 物 理 地 址 的 直 接 访 问 能 力 ; 2. 单 独 设 计 一 种 Java 本 地 接 口 (JNI), 使 得 应 用 程 序 通 过 该 接 口 提 供 的 功 能 实 现 对 硬 件 方 法 映 射 到 的 物 理 地 址 的 访 问 尽 管 第 一 种 方 案 的 效 率 较 高, 并 且 没 有 引 入 额 外 开 销, 但 是 修 改 Java 虚 拟 机 内 核 是 相 当 繁 杂 的 工 作, 同 时 也 可 能 会 引 起 潜 在 的 系 统 不 稳 定 第 二 种 方 案 虽 然 引 入 了 一 定 的 额 外 开 销, 但 便 于 移 植 和 实 现 因 此, 我 们 采 用 方 案 二, 在 Java 虚 拟 机 和 Java 本 地 接 口 之 外 又 设 计 了
一 个 本 地 通 信 库 本 地 通 信 库 API 形 式 如 下 : int hwwritexxx(int addr, XXX p); int hwwritearrayxxx(int addr, XXX[] p); XXX hwreadxxx(int addr); XXX[] hwreadarrayxxx(int addr); int hwconfig(int cf_mem_addr, int bitstr_size); Java 本 地 接 口 层 接 口 的 形 式 如 下 : class HWInteRFace{ static int ConfigStatus; public static native int setparam(cid hw_cid, object P) { if(type_of_p == XXX) err = hwwritexxx(hw_cid.addr, (XXX)P); return err; } public static native int getresult(cid hw_cid, object R); public static native int setcmd(cid hw_cid, int cmd); public static native int getstatus(cid hw_cid); public synchronized static native int confighw( CID hw_cid); } 在 上 面 代 码 中,XXX 表 示 基 本 的 Java 数 据 类 型 如 整 型 (integer) 浮 点 型 (float) 双 精 度 型 (double) 等 Java 应 用 程 序 通 过 类 HWInterface 提 供 的 方 法 访 问 本 地 库 上 面 的 代 码 中 给 出 了 setparam 的 具 体 实 现 其 中,CID 是 包 括 硬 件 方 法 映 射 到 的 缓 存 地 址 的 一 个 对 象, 对 应 于 每 个 硬 件 方 法 的 CID 都 是 唯 一 的, 因 此, 该 地 址 和 缓 存 区 大 小 都 是 事 先 已 经 确 定 了 的 但 是, 由 于 系 统 中 只 有 一 个 配 置 控 制 器, 我 们 无 法 同 时 就 两 个 或 多 个 硬 件 方 法 向 FPGA 进 行 编 程, 也 可 以 说 同 一 时 刻 只 能 有 一 个 硬 件 方 法 在 使 用 配 置 控 制 器 为 此, 引 入 了 一 个 静 态 变 量 ConfigStatus 来 反 映 配 置 控 制 器 的 当 前 状 态 所 以, 访 问 配 置 控 制 器 的 函 数 confighw() 是 静 态 的 同 步 的 使 用 上 面 给 出 的 接 口, 则 下 面 这 段 代 码 methoda() { int a = obja.m1(2); //SW method int b = objb.m2(3); //HW method int c = a + b;
} 就 应 该 写 成 下 面 的 形 式 : methoda() { 1 HWInterface.configHW(cid2); // cid2 is the ID of HW method m2 2 Object P = new Integer(3); 3 HWInterface.SetParam(cid2,P); 4 HWInterface.startHW(cid2); 5 int a = obja.m1(2); 6 Object R = new Integer(); 7 While(HWInterface.getResult(cid2, R) == 0) ; //wait until HW method finished 8 HWInterface.getResult(cid2, R); 9 int b = ((Integer)R.getValue()); 10 int c = a +b; } 在 上 例 中, 为 了 执 行 FPGA 中 的 函 数 objb.m2(), 首 先 对 FPGA 进 行 编 程 (Line1) 然 后, 将 参 数 拷 贝 到 硬 件 方 法 的 输 入 缓 存 中 (Line3), 并 对 硬 件 方 法 进 行 初 始 化 (Line4) 最 后, 采 用 了 一 个 循 环 函 数 持 续 检 查 硬 件 方 法 缓 存 的 状 态 (Line7,8), 直 至 计 算 完 成, 然 后 拷 贝 得 到 结 果 (Line9) 3. 系 统 实 现 使 用 ARM710T 处 理 器 和 Virtex 的 FPGA, 根 据 上 文 给 出 的 设 计 方 案, 我 们 实 现 了 一 个 嵌 入 式 系 统 开 发 平 台 该 平 台 包 括 一 个 网 络 接 口, 两 个 调 试 接 口, 一 个 PCI 主 机 接 口 和 一 个 串 行 口 并 移 植 了 一 个 嵌 入 式 操 作 系 统 和 一 个 小 巧 的 Java 实 时 运 行 环 境 如 图 4: 4. 总 结
本 文 用 一 种 全 新 的 思 路, 对 传 统 的 嵌 入 式 系 统 进 行 了 改 进, 实 现 了 一 种 能 够 支 持 多 种 应 用 的 嵌 入 式 系 统 平 台 利 用 FPGA 的 可 编 程 性 和 Java 平 台 良 好 的 移 植 性 能, 该 平 台 完 全 能 够 满 足 我 们 的 设 计 要 求 当 然, 也 有 不 足 之 处, 比 如 对 配 置 控 制 器 的 状 态 的 获 取, 可 以 考 虑 使 用 中 断 的 方 式 来 实 现, 而 不 是 采 用 本 文 中 的 循 环 查 询 机 制 这 将 在 以 后 的 工 作 中 加 以 改 进 http://article.ednchina.com/embedded/200810190139182.htm