verilog学习记(学习设计cpu)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

    很早之前,自己就对cpu的设计非常感兴趣。和十几年前比较,现在网上开源的cpu代码还是很多的,比如说risc-v、openrisc、openmips等等。当然,如果是从学习的角度来说,openrisc和openmips还是非常不错的。那么,如果是希望能够深入了解cpu是怎么设计的,应该需要做哪些准备呢?

 

1、深入了解指令集

    了解指令集是掌握cpu很重要的一个环节。立即数指令、寄存器指令、数学运算指令、逻辑运算指令、比较指令、跳转指令、加载保存指令、异常指令以及特殊状态寄存器指令,这些指令都非常重要。

 

2、了解gcc、makefile、link、objcopy

    测试cpu的时候很多情况下需要自己编写汇编语言,这个时候就需要编写简单的makefile,因此有必要掌握基本的makefile编写规则。除此之外,编译器gcc、链接器link、二进制工具binutils也是需要掌握的。

 

3、熟悉和安装linux

    为了编译代码,我们的pc需要安装linux操作系统。不过有virtualbox和vmware这些虚拟机软件,安装linux其实是一件很轻松的事情。

 

4、掌握基本的verilog语法

    目前数字电路设计主要有verilog和vhdl两种语言,其中verilog在公司里面用的比较多,而vhdl在学校里面使用比较多。事实上最好两种语言都要掌握,实在不行必须掌握verilog,另外一种看懂就可以了。

 

5、了解一种仿真工具

   如果不需要在实际开发板上面运行,那么至少需要掌握modelsim或者iverilog其中的一种。modelsim在windows平台上面使用较多,而iverilog是linux上的开源软件,也可以拿来作为使用。

 

6、掌握一种IDE工具和开发板

    不管在仿真软件上面效果多完美,最终verilog程序还是要下载到开发板上运行的。只有下载到具体的板子上面,我们才会关注时序、信号完整性、setup、hold、亚稳态这些平时不太注意的情况。个人建议可以选择vivado软件工具和zynq开发板进行学习。

 

7、了解一种总线和几种常用的硬件协议

    单独的cpu虽然也能使用,但是目前使用比较多的还是soc形式的芯片,因此可以选择一种开源bus进行学习,比如说wishbone。关于硬件协议,按照最小系统来说,应该还需要sdram、norflash or nandflash、gpio、uart、晶振电路、复位电路就可以了。除了sdram之外,spi、nand、gpio、uart都不算太复杂,大家可以稍微了解一下就可以学会了。如果学有余力,多多了解sd、jtag、lcd、i2c、can、i2s也不错。

 

8、深入了解组合逻辑和时序逻辑

    数字电路设计其实是一门寄存器为主的设计方法学。寄存器与寄存器之间用组合逻辑进行连接。电路以时钟作为驱动方法,按照组合逻辑-时序逻辑-组合逻辑-时序逻辑的方法不停地进行运算和控制。组合逻辑主要是进行各种编码、译码、选择、优先级判断等操作,而时序逻辑主要是处理复位、freeze、异常、长时间操作等各种复杂情况。这方面建议大家多看看openmips的代码,应该会有不错的收获。

 

9、继续了解复杂的cpu设计

    现在的cpu设计不仅仅是简单的流水线操作,除了常用的五级流水线之外,还有mmu、cache、多发射流水线、分支预测、lsu乱序、多核cache同步、score board算法、寄存器重命名等等,建议大家可以深入下去继续学习,对自己的软件开发也会大有裨益。

 

ps:

  学习cpu不可避免和硬件打交道,因此万用表、示波器、逻辑分析仪这些设备最好也掌握一下。现在这些设备其实很便宜了,不应该成为学习的障碍。

 

 

 

你可能感兴趣的:(verilog学习记)