在 LiteX 中使用 UART over JTAG
背景
在给 Alinx AX7021 适配 LiteX 的时候,遇到一个问题:PL 上没有连接串口,只有 PS 连接了串口,如果用 RISC-V 软核的话,就会面临无串口可用的情况,除非在扩展 IO 上自己定义一个串口。
因此研究了一下 LiteX 自带的 UART over JTAG 功能,在 Alinx AX7021 中调试出来了。
在给 Alinx AX7021 适配 LiteX 的时候,遇到一个问题:PL 上没有连接串口,只有 PS 连接了串口,如果用 RISC-V 软核的话,就会面临无串口可用的情况,除非在扩展 IO 上自己定义一个串口。
因此研究了一下 LiteX 自带的 UART over JTAG 功能,在 Alinx AX7021 中调试出来了。
本文的内容已经整合到知识库中。
DRAM 一直有一个比较麻烦的初始化过程,就是 DRAM Training,其中很重要的一步就是计算出各个数据线相对于时钟的偏移(skew)。这个偏移是怎么来的呢?
我们知道,对于 SRAM,如果想要更多的位宽,只需要把地址线和控制信号连接到多个 SRAM 上,然后把 SRAM 的数据信号并行连接到 FPGA 上就可以了,但是前提是要尽量保证等长,否则一样有偏移的问题。DRAM 也是采用类似的方法进行扩展的,但是 DRAM 通常需要并行连接很多个芯片,例如 8 个 x8 的芯片的合并成一个 64 位的 DDR SDRAM。此时数据线依然是并行连接,但是地址线和控制信号就出现了走线困难:很难在那么小的空间里,等长地把地址和控制信号分布到各个芯片上,而且还有信号完整性的问题。
Arty A7 是一款 Digilent 出品的 FPGA 开发板,为了在它上面跑 Linux,可以用 LiteX 生成由 VexRiscv 作为 RISC-V 核心的 SoC,最后可以在开发板上把 Linux 跑起来。
群友上个月提了一个未知来源问题:
实现一个你自己的 printf(int, ...)
函数,该函数包含可变参数。为简便期间,假设所有参数均为 int 类型。
首先从 https://www.sco.com/support/update/download/product.php?pfid=12&prid=20 下载 SCO OpenServer 的安装 ISO。尝试过用 QEMU 启动,但是会卡在无法读取硬盘的错误上。
最后使用 VirtualBox 7.0.6 成功启动,注意创建虚拟机的时候不要给太多内存,例如 4GB 就起不来,2GB 可以。硬盘我也只给了 4GB 的空间。
在 https://www.sco.com/support/update/download/product.php?pfid=1&prid=6 可以看到 UnixWare 7.1.4 的相关下载,其中首先要下载 UnixWare 的安装 ISO:https://www.sco.com/support/update/download/release.php?rid=346,尝试过用 QEMU 启动,会遇到找不到 CD-ROM 的问题,虽然通过设置 ATAPI_DMA_DISABLE=YES
解决了,但是又遇到了找不到硬盘的问题。
最后换成了 VirtualBox 7.0.6。用 VirtualBox 创建虚拟机的时候,不要给太多内存,4GB 就会无法启动,2GB 可以,硬盘也不要给太多,4GB 就足够。
宿主机环境是 Debian bookworm,不需要像其他教程那样自己编译 qemu,直接 apt install 即可。
通过 google 可以搜索到 AIX 7.2 的 ISO,下载第一个 ISO 到本地,然后在 QEMU 中启动安装镜像:
首先从 https://www.sco.com/support/update/download/release.php?rid=218 下载 SCO OpenServer 的安装 ISO 和从 https://www.sco.com/support/update/download/release.php?rid=187 下载 Supplement CD 5 ISO,然后用 QEMU 启动,这次需要用图形界面:
Chisel 3.6 很快就要发布了(目前最新版本是 3.6.0-RC2),这个大版本的主要更新内容就是引入了 CIRCT 的 firtool 作为 FIRRTL 到 Verilog 的转换流程:
The primary change in Chisel v3.6.0 is the transition from the Scala FIRRTL
Compiler to the new MLIR FIRRTL Compiler. This will have a minimal impact on
typical Chisel user APIs but a large impact on custom compiler flows. For
more information, please see the ROADMAP.
因此提前测试一下 firtool,看看其和 Scala FIRRTL Compiler 有哪些区别,是否有更好的输出。
今年的龙芯杯又开始报名了,我来写一篇关于协同仿真(cosim)的博客蹭蹭热度。下面的内容参考了一些已有的协同仿真的框架,例如 ibex co-sim 和 OpenXiangShan/difftest。
最近要让一台 Linux 机器连接无线网,所以要买一个对 Linux 支持比较好的 USB 无线网卡。以前曾经用过一些 USB 无线网卡,但对 Linux 的支持大多不好,要么是需要 out of tree module,要么就忽然不能工作。因此前期的调研十分重要。
在调研的时候,发现了 morrownr/USB-WiFi 仓库,里面总结了一些 Linux 支持比较好的 USB 无线网卡,由于是外国人写的,所以里面很多型号在国内都买不到,但实际上 USB 无线网卡的芯片组一般就是那些,所以需要先确定芯片组,再根据芯片组找对应的 USB 无线网卡。
现在网络编程主要采用的是 BSD Sockets API,但实际上当年还有另一套 API,就是 TLI(Transport Layer Interface),后来 BSD Sockets 胜出,进入了 POSIX 标准,TLI 后面也标准化为了 XTI,现在可以在部分 Unix 系统中找到。TLI/XTI 的使用方法和 Sockets API 有些类似,但是比较特别的一点在于,Sockets API 第一步是 socket
调用,传的参数就决定了这是 TCP 还是 UDP 还是其他什么协议,而 TLI 是通过打开不同的设备文件来进行区分:
比如 TCP 就是 /dev/tcp
,UDP 就是 /dev/udp
,同理还有 /dev/icmp
等等。这颇有 Unix 的哲学:everything is a file。而 BSD Sockets API 则是有对应的系统调用,libc 基本不需要做什么事情。
最近看到 xonly status,看到 OpenBSD 最近在实现 xonly,也就是让一些页只能执行,不能读不能写。以往类似的做法是 W^X
,也就是可以执行的时候不能写,可以写的时候不能执行。显然,xonly 是更加严格的,连读都不可以。查了一下历史,W^X
最早也是在 OpenBSD 中实现的,说不定以后 xonly 也会被各个操作系统实现。
访问 https://www.oracle.com/solaris/solaris11/downloads/solaris-downloads.html,点击下载,登录后跳转到一个新的页面。在 Platform 下拉框选择 x86,会出现一系列可以下载的文件。以 11.4.42.111.0 为例,需要下载的是:V1019840-01.iso Oracle Solaris 11.4.42.111.0 Interactive Text Install ISO (x86) for (Oracle Solaris on x86-64 (64-bit)), 890.5 MB。可以直接在浏览器中下载,也可以点击网页中的 WGET Options,用 wget 脚本下载。
下载以后,挂载 ISO 到虚拟机,正常按照指示进行安装。
最近在维护 lsof 的时候,需要在 FreeBSD/NetBSD/OpenBSD/DragonFlyBSD 上进行开发和测试,于是就装了虚拟机,特此记录我在使用过程中,与 Linux 不一样的一些常用 FreeBSD/NetBSD/OpenBSD/DragonFlyBSD 命令。
本文的内容已经整合到知识库中。
CHI 协议是 AMBA 5 标准中的缓存一致性协议,前身是 ACE 协议。最新的 CHI 标准可以从 AMBA 5 CHI Architecture Specification 处下载。
相比 AXI,CHI 更加复杂,进行了分层:协议层,物理层和链路层。因此,CHI 适用于片上网络,支持根据 Node ID 进行路由,而不像 AXI 那样只按照物理地址进行路由。CHI 的地位就相当于 Intel 的环形总线。CHI 也可以桥接到 CCIX 上,用 CCIX 连接 SMP 的的多个 Socket,或者连接支持 CCIX 的显卡等等。
本来打算去年上分布式系统课的,但是由于时间冲突没有选,今年想上的时候课程又没有开,因此利用寒假时间自学 MIT 6.824 Distributed Systems 课程 Spring 2022(Archive),跟着看视频,Lecture Notes 还有论文,同时也完成课程的实验。在这里分享一下我在学习过程中的一些笔记和感悟。有趣的是,MIT 6.824 Spring 2023 年把课号改成了 6.5840,类似地 6.828 OS 也改成了 6.1810。
注:下表中省略了 PRO 前缀,部分型号有带 PRO 和不带 PRO 的版本,部分型号仅有带 PRO 的版本,部分型号没有带 PRO 的版本。
代号 | 用途 | 核显 | 插槽 | 微架构 | 型号 |
---|---|---|---|---|---|
Vermeer | 桌面 | 无 | AM4 | Zen 3 | 5950X/5945/5900(X)/5845/5800(X(3D))/5700(X(3D))/5645/5600(X(3D)) |
Chagall | 工作站 | 无 | sWRX8 | Zen 3 | 5995WX/5975WX/5965WX/5955WX/5945WX |
Cezanne | 桌面 | GCN5 | AM4 | Zen 3 | 5750G(E)/5700G(E)/5650G(E)/5600G(E)/5600GT/5500(GT)/5350G(E)/5300G(E) |
Cezanne | 笔记本 | GCN5 | FP6 | Zen 3 | 5980HX/5980HS/5900HX/5900HS/5800H(S)/5800U/5600H(S)/5600U/5560U/5400U |
Barceló | 笔记本 | GCN5 | FP6 | Zen 3 | 5825U/5825C/5625U/5625C/5425U/5425C/5125C |
Lucienne | 笔记本 | GCN5 | FP6 | Zen 2 | 5700U/5500U/5300U |
注:Ryzen 5 5500 虽然代号是 Cezanne,但是去掉了核显。
本文的内容已经整合到知识库中。
最近看到两篇关于 PCIe Bifurcation 的文章:
文章讲的是如何在 CPU 上进行跳线,从而实现 PCIe Bifurcation 的配置。正好借此机会来研究一下 PCIe Bifurcation。