之前就计划做一个技术知识分享系列,奈何一直没有机会。最近在教女朋友学习数字芯片设计和验证,准备将整个学习过程的知识点总结下来,希望对想要入门的同学有所帮助!这是第一节,学习计划。
01 Verilog学习
学习计划
1.《Verilog数字系统设计教程-夏宇闻》3-6章快速学习一下;
-
掌握简单的数字设计实现(全加器、计数器、算数,逻辑,移位操作、上升沿触发器、异步置位、带复位触发器、同步置位、复位的触发器等),学会用Modelsim仿真;
-
这部分学习主要靠看书和实验,需要在Modelsim中完成《Verilog数字系统设计教程》第三部分所有练习。刚开始不会写可以抄书上的代码,但是必须看到仿真的结果,对着波形理解;
-
如果不会写testbench,可以先抄书上的;但是后续要自己学习编写testbench;
-
理解经典数字设计问题:逻辑函数、异步/同步复位、竞争冒险等;
-
掌握经典设计题目:FSM、跨时钟域传输(包括FIFO、握手)、Arbiter等;
-
Verilog大作业是IIC/MCDF设计部分(先学会IIC,然后学会MCDF)。
作业
-
编写边沿检测程序;
-
编写完成奇数分频;
-
状态机作业:
1)学习状态机思想,总结状态机写法(三段式)
2)用状态机实现红绿灯程序
要求:
绿灯时,当过25周期,则切到黄灯;
黄灯时,当过2周期,则切到红灯;
红灯时,每过15周期,则切到绿灯;
输出state信号指示当前状态;
-
状态机实现序列检测
用Verilog描述一个可综合的序列检测器,用于检测输入数据码流中的特定序列(本次检测序列为100101)。当检测到100101序列(包括重叠的情况)时,序列检测器输出1,否则输出0。状态编码要求:One-hot独热码,代码风格要规范;
4)Round_Robin_Arbiter 设计
总线上挂3个从机A,B,C,输出仲裁信号grant;
grant[1:0]=2'b01 A获得总线
grant[1:0]=2'b10 B获得总线
grant[1:0]=2'b11 C获得总线
总线轮询算法要求:
a. 如果当前只有一个信号请求,则处理;
b. 如果没有请求,那么保持不变;
c. 如果同时有多个信号请求,考虑上一个请求信号;
d. 如果当前请求信号是A,那么之后轮询的是BCA,如果当前请求信号是B,那么之后轮询的是CAB,如果当前请求信号是C,那么之后轮询的是ABC;
e. 状态机实现;
-
同步FIFO学习和编写;
-
跨时钟域学习和程序编写
1)主要参考《硬件架构的艺术》,讲的非常细致;
2)异步FIFO:看书讲解完成程序编写,仿真结果要认真理解;
3)跨时钟域传输握手协议学习和编写;
- IIC协议:学习《FPGA实战》,前期看书,后续可以自己实现。
02 System Verilog学习
学习计划
-
前期学习以《SystemVerilog与功能验证》钟文枫为主,对初学者比较友好,最终目标是学会石头剪刀布的设计验证;
-
后续将学习《芯片验证漫游》(红宝书)、《SystemVerilog测试验证平台》(绿宝书);
-
后面要学习下怎么验证FIFO、IIC、MCDF;学会SV核心在于写代码,跑仿真;
-
详细的学习计划和作业将会在后面发布。
03 UVM学习
学习计划:
-
学习以白皮书(《UVM实战》)为主;
-
涉及到UVM后,再学习LINUX环境和脚本语言,在虚拟机跑代码;
-
详细的学习计划和作业将会在后面发布。
04 求职培训
学习计划: -
指导完成项目梳理;
-
指导完成简历编写;
-
分享面试经验,模拟面试。