Skip to content

外设设计

外设部分设计

2021/8/11

此文档是我们小组外设的具体设计

1. 概述

关于外设部分设计,实际涉及到整个Soc的架构、不同模块的封装以及多个IP核的调用。其中主要使用的功能为Vivado的IP INTEGRATOR中的Block Design(简称bd)功能,以实现近乎nocode的开发模式。

2. 具体步骤

2.1 封装cpu

​ 首先需要将CPU与两个Cache整体封装为对外为AXI4 接口的一个IP核,

​ 具体封装步骤见参考资料第一条视频相关内容(从第24min起为有用内容,53min起的gpioled模块写法可以跳过,直到1h07min之后是封装的具体操作,1h27min之后基本无重要内容)。

​ 使用create block design,在tools中选择create and package new ip 选择需要封装的内容(packaging options,建议选择第三项,封装时注意,bd功能不支持将systemverilog文件封装,需要把cpu_top包装为verilog的.v文件),此时会打开新页面edit_ip,之后可以进行进一步封装(ILA封装可选)。在每次修改了IP核的源码之后需要更新Package IP中的更新选项。此时回到bd界面就可以右键add IP,之后可以愉快划线连接端口了[doge]😅。

​ 需要给bd模块创建一个顶层文件,才可以进行后续相应的引脚绑定。右键.bd文件,选择Create HDL Wrapper,默认选择ok,之后创建约束文件(在Constraints/constrs目录下右键Add Sources,创建文件.xdc,如果不懂xdc语法,可以再PROJECT MANAGER 下的Language Template中预览XDC文件的一些约束写法,配置iopins),或者可以nocode贯彻到底,跑过综合之后open synthesized Design 点击I/O ports配置引脚约束连接其他模块(例如封装好的外设IP核或者AXI Interconnect模块等)。

2.2 重新设计Soc架构

//TODO : 在封装好cpu之后考虑暴露的端口以及是否使用JTAG便于调试来重新修改cpu,JTAG,AXI Interconnect,Mems以及外设之间的连接方式,重新设计架构。

2.3 定制外设

​ 定制外设的重点任务在于对每个需要的外设配置一个controller以连接外设本身和整个Soc进行通信,在完成响应配置,封装为相应的IP核并添加,增加引脚配置之后,需要在block design界面的响应模块的连线处右键点击make external完成和外设真正的连接。

​ 下面对于可以选配的外设进行介绍,建议根据难易程度进行选择性实现。

2.3.1 串口控制器

​ 板载串口为RS-232接口,已经实现基本的串口通信功能,但可以通过AXI UART 16550 IP实现标准的NS16550 UART控制器,以支持较为完整的串口协议。实现括可变波特率、流量控制 和读写缓冲区。

​ 在软件使用串口前,需要首先对多个配置寄存器进行初始化,配置波特率、 中断等不同的属性,方可正常与 PC 进行通信。

​ 串口控制器有一个中断,指示收到了数据, 清华设计中被直接连接到 CPU 的第一个硬件中断上。

2.3.2 USB控制器(难度较大)

​ 板载USB接口为Microchip USB 3500,提供的是UTMI+ Level3.0接口,仅实现了物理层的收发逻辑。至于具体控制器的设计还要根据后续的实际功能进行设计。

2.3.3 以太网控制器

​ 可以通过AXI Ethernet Lite IP实现该控制器。

2.3.4 Flash控制器

​ 板载两块SPI NOR Flash芯片,其中一块为CFG Flash,固化连接至FPGA配置专用硬件逻辑,另一片为SPI Flash,是可插拔普通SPI I/O引脚,均可通过AXI Quad SPI IP进行控制。

​ 对于CFG Flash,主要作用为存储bitstream,此外还有余量,可以用来存储U-Boot和Linux Kernal的ELF格式文件用于系统启动,具体方式可以参考启动POMN时的串口下载方式。为方便使用,通过 IP 的 XIP(Execute In Place)特性,我们可以将它映射为一块只读的内存空间,从而加载U-Boot 也能加载 Linux 内核。

​ 对于SPI Flash,可以实现为普通存储, XIP 的只读模式不能满足需求。我们将其暴露为一个标准的 SPI 控制器,由软件来进行相应的管理。需要能够实现对Flash的擦除、读取和写入等操作。同时为提高IO效率,需要实现中断。

2.3.5 LCD控制器,VGA控制器(完全无思路,建议不实现)
2.3.6 PS/2控制器

​ 实验板载一个 PS/2 物理接口,可以用于连接较老的鼠标/键盘等设备。我们使用 Altera 提供的 University Program PS/2 IP 对其进行控制,在 Linux 中也有对应的驱动支持。由 于其为 APB 总线,同样需要 Bridge 进行转换;它的中断信号被直接连接到 CPU 的 3 号 中断引脚。

​ 具体实现需要找到该IP核。或者参考https://blog.csdn.net/qimoDIY/article/details/99711354博文内容。

2.3.7 GPIO控制器

​ 龙芯提供了confreg模块,已经较好地实现了对GPIO引脚的控制,可以直接使用,但需要修改一些参数。

2.4 地址分配及中断连接

​ 处理地址映射可以通过vivado中window/address editor工具来实现,具体配置可参考下图。image-20210812075715078

​ 中断处理具体参考清华NonTrivalMIPS报告3.1.3内容。

3.参考资料

  1. https://www.bilibili.com/video/BV1u4411P7pL视频24min开始
  2. 清华大学NonTrivalMIPS资料及源代码
  3. https://blog.csdn.net/qq_33231534/article/details/105364361系列博文