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
 
 
 - Finite State Machines 
 
如果你发现上述习题非常困难, 我们建议你从基础习题开始做起. 具体地, 你需要完成以下章节对应的习题:
- 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
 
 
 - Basic Gates 
 - 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 - 全部完成
 
 - Latches and Flip-Flops 
 
另外推荐一些数字电路学习资料
- 数字电路与计算机体系结构: 如果你在学习过程中需要了解一些数字电路的理论知识, 可以参考书中的1~5章
 - Verilog入门视频
 - Verilog语法简介
 - Verilog高级数字系统设计技术与案例分析
 - 中科大的Verilog OJ平台(需要注册并登录)
 
学习敏捷开发语言Chisel
对于一些复杂的数字电路, 采用Chisel进行设计将会更方便, 你在学习B阶段的过程中将会逐渐体会到这一点. 不过"一生一芯"并不限制你使用何种语言来设计处理器.
如果你打算学习Chisel语言, 我们还是建议你先掌握一些Verilog语言的基础, 然后建议你按照如下顺序学习:
- Chisel Bootcamp是一个很不错的Chisel教程, 还支持在线运行Chisel代码, 你可以一边编写Chisel代码一边学习. 其中 
- 第1章是Scala入门
 - 第2章是Chisel基础
 - 第3章是Scala高级特性和Chisel的混合使用
 - 第4章是FIRRTL后端相关内容 你需要完成前两章的学习, 同时我们强烈建议你学习第3章. 第4章和电路设计没有直接关系, 可以作为补充阅读材料.
 
 - Chisel Users Guide比较系统地整理了chisel的特性, 也是不错的入门教程.
 - Chisel小抄简明地列出了chisel语言的大部分用法.
 - Digital Design with Chisel是一本结合数字逻辑设计和Chisel的参考书.
 - Chisel API详细地列出了chisel库的所有API供参考.
 
如果你希望加入Chisel交流群, 可以微信扫描下方二维码联系助教申请进群:

