E2 硬件描述语言

你已经学习了数字电路的基础知识, 并已经在Logisim中设计了简单的处理器. 但你应该也多少能体会到, Logisim并不适合设计更复杂的电路. 事实上, 现代处理器都是通过硬件描述语言(HDL)来设计的. 接下来, 你将来学习如何通过HDL来设计数字电路.

需要说明的是, 虽然我们后面不再使用Logisim进行处理器设计, 但Logisim的使用经验应该已经帮助你建立了"电路思维": 数字电路设计只做两件事, “实例化”和"连线". 你接下来使用HDL来设计数字电路时, 头脑中也需要将HDL代码和Logisim的使用经验建立关联: 你只不过是换了一种方式来设计电路, 但本质上还是在进行"实例化"和"连线"的工作, 因此你应该能根据你编写的代码想象到电路的逻辑结构. 如果你发现自己无法想象, 那你很大概率会设计出质量较低的电路(频率低, 面积大, 功耗高), 甚至是功能不符合预期的电路.

通过线上网站学习Verilog语言

我们给大家推荐Verilog在线学习网站HDLBits在新窗口中打开, 它提供了丰富的习题, 并通过在线仿真判断你的代码是否正确.

如果你对自己的Verilog水平很有自信, 可以尝试完成以下习题:

  • Sequential Logic
    • Finite State Machines
      • Lemmings 1
      • Lemmings 2
      • Lemmings 3
      • Lemmings 4
      • PS/2 packet parser
      • PS/2 packet parser and datapath
      • Serial receiver
      • Serial receiver and datapath
      • Serial receiver with parity checking

如果你发现上述习题非常困难, 我们建议你从基础习题开始做起. 具体地, 你需要完成以下章节对应的习题:

  • Getting Started - 建议完成, 以熟悉完成习题的流程
  • Verilog Language - 建议不熟悉Verilog的同学完成
  • Combinational Logic
    • Basic Gates
      • More logic gates
      • Truth tables
      • Simple circuit A
      • Simple circuit B
      • Thermostat
      • 3-bit population count
      • Even longer vectors
    • Multiplexers
      • 2-to-1 multiplexer
      • 9-to-1 multiplexer
      • 256-to-1 4-bits multiplexer
    • Arithmetic Circuits
      • Signed addition overflow
      • 100-bits binary adder
  • Sequential Logic
    • Latches and Flip-Flops
      • D flip-flip
      • DFF with reset value
      • DFF with asynchronous reset
      • DFF with byte enable
      • Mux and DFF
      • Create circuit from truth table
      • Detect an edge
      • Detect both edges
      • Edge capture register
      • Dual-edge triggered flip-flop
    • Counters
      • Decade counter again
      • Slow decade counter
      • Counter 1000
      • 12-hour clock
    • Shift Registers
      • Left/right rotator
      • Left/right arithmetic shift by 1 or 8
      • 5-bits LFSR
      • Shift register
      • 3-input LUT
    • More Circuits - 全部完成
    • Finite State Machines - 全部完成

另外推荐一些数字电路学习资料

学习敏捷开发语言Chisel

对于一些复杂的数字电路, 采用Chisel进行设计将会更方便, 你在学习B阶段的过程中将会逐渐体会到这一点. 不过"一生一芯"并不限制你使用何种语言来设计处理器.

如果你打算学习Chisel语言, 我们还是建议你先掌握一些Verilog语言的基础, 然后建议你按照如下顺序学习:

  1. Chisel Bootcamp在新窗口中打开是一个很不错的Chisel教程, 还支持在线运行Chisel代码, 你可以一边编写Chisel代码一边学习. 其中
    • 第1章是Scala入门
    • 第2章是Chisel基础
    • 第3章是Scala高级特性和Chisel的混合使用
    • 第4章是FIRRTL后端相关内容 你需要完成前两章的学习, 同时我们强烈建议你学习第3章. 第4章和电路设计没有直接关系, 可以作为补充阅读材料.
  2. Chisel Users Guide在新窗口中打开比较系统地整理了chisel的特性, 也是不错的入门教程.
  3. Chisel小抄在新窗口中打开简明地列出了chisel语言的大部分用法.
  4. Digital Design with Chisel在新窗口中打开是一本结合数字逻辑设计和Chisel的参考书.
  5. Chisel API在新窗口中打开详细地列出了chisel库的所有API供参考.

如果你希望加入Chisel交流群, 可以微信扫描下方二维码联系助教申请进群:

最近更新时间:
贡献者: Zihao Yu