FPGA & CPU

2022-03-13
3 min read
Featured Image

简介

这一系列文章是我这些年学习软件和硬件的一些总结和相关资料(最终的目的是用 FPGA 实现一个可用的 CPU 并为其提供基础的 OS 和编译环境,这一系列文章还有几年才能完成,持续更新中…)。下文列出了一些我觉得比较好的书籍,当然不一定适合所有人

HDL 和程序的区别

一般而言,HDL 不是 C++/Java 意义上的程序,不是执行一系列的指令然后产生一个结果,而是硬件结构的模型,这个模型接收到输入信号就会在线路上产生输出信号

在最快的集成电路中,单个晶体管的开关时间可以小于 10ps。由这些晶体管构成一个完整复杂的器件,从检测到输入到产生输出的时间还不到 2ns,这样的器件每秒能产生 1 亿或者更多的结果,这是 FPGA 比 CPU 在某些领域快的主要原因

资源

书籍

  1. 电学常识:《电路》 / 《模拟电子技术基础》 & 公开课 / 《数字电子技术基础》 & 公开课 /
  2. 离散数学:离散数学概论公开课 / 《离散数学及其应用》 /
  3. C++ :C++ Primer (5th)&6th / C++ Concurrency in Action (2ed) /
  4. DS & Algs:DSAAC++ (4th) / 算法(第4版) / 《算法设计与分析》 & 公开课 / 算法导论(3th)&4th /
  5. FPGA 与 Verilog 入门:《搭建你的数字积木》 & github / 数字设计:原理与实践 / 《FPGA原理和结构》 / Verilog 数字系统设计教程 / 《Verilog HDL实用精解》 /
  6. 数字电路 & HDL & CPU 入门:
    1. 数字设计和计算机体系结构,这本书有 MIPS、ARM 和 RISC-V 三个版本
  7. 编译器入门:Crafting Interpreters /
  8. 操作系统:CSAPP(2ed) / xv6-riscv-book /
  9. 其他相关书籍:
    1. 计算机系统要素——从零开始构建现代计算机 & 资料下载
    2. 计算机体系结构:量化研究方法 / 计算机组成与设计:硬件/软件接口, MIPS & ARM & RISC-V 三个版本
    3. CPU 自制入门 / 手把手教你设计CPU:RISC-V处理器 /

网站与开源代码

  1. 学习 Verilog 的网站:hdlbits / asic-world /
  2. 开源的综合与布线工具:yosys / nextpnr / slang。可以下载编译好的工具 Free OSS CAD Suite,其中包含了 iverilog、yosys 等工具
  3. 游戏我的世界(minecraft)中提供的综合工具:MinecraftHDL /

开发环境

  1. 开源 Verilog 学习工具(OSX):Icarus Verilog / Verilator / GTKWave & dwfv / Vim & verible / yosys / nextpnr / slang

    1. 直接安装 Free OSS CAD Suite 即可;其他 HDL 工具可以参考 chipsalliance
    2. verible 提供了很多小工具以方便 HDL 开发(通过 --helpfull 查看帮助信息)
      1. verible-verilog-syntax。语法解析工具,可以用于语法分析与检查(--printtokens / --printtree
      2. verible-verilog-lint。Verilog Lint 工具
      3. verible-verilog-format。代码格式化工具,如果代码有错误则格式失败,此时需要使用 syntax 或者 lint 工具先确定并解决代码错误
      4. 其他工具还有代码混淆工具 / Lag Svr 等,细节请参考官网
  2. 免费电路仿真工具

    1. LTspice 个人用户可免费使用。细节请参考这里或者YouTube,LTspice 的数字器件库可以从这里下载
    2. 开源电路模拟数字仿真软件:circuit simulators / Digital
    3. 上学时常用的工具有 Multisim 和 Proteus,但个人使用需要授权,毕业后就很少用了
  3. FPGA 开发板。Altera / Xilinx 都可以,软件的使用流程大致相同,学会一个,另一个就很简单了

    1. Altera 免费:Quartus Prime 精简版 Free / Quartus II Web Edition Free /
    2. Xilinx:Vivado /