学习理念:Verilog是描述语言,是先要规划好电路结构,有大致框架的认知,再由认知反映到coding上去!不要反过来,直接做coding 仿真,需要有前期的规划!!!这需要不断的训练。
目录
首先说明(叠个甲),这里是课程笔记,如果觉得侵权请联系删帖。数字IC/数字电路/FPGA设计_从入门到精通
1.数字IC/IP设计流程
1.数字IP设计流程
不同的公司的设计流程不同,这里以CNN加速器为例:
②通常数字电路就分为两大类:1.算法型电路:实现某种算法——CNN加速器、图像的处理滤波、4/5G网络/无线网络等的滤波 2.接口类、协议类的IP——I2C控制器、复杂的USB、PCIE、SATA接口协议,数学不多,但接口协议复杂。 建立算法模型,对算法模型进行优化,如除法——转乘法等、定点化、整型化。 协议:仔细读协议并理解清楚,很耗时、打基础的过程。
③定义数据结构——数字电路和verilog描述一个东西,数据怎么排布,定义哪些数据,类似C的structure:定义哪些变量、变量有什么意思?通过数据结构能描述要设计、实现的ip。怎么提高ddr效率?——bist 位宽要长?
开始划分系统框架:什么接口?每个大的block要怎么划分?在block和block之间数据是怎么交互的? IP下面会分子模块,子模块的功能划分、模块之间怎么pipeline(功能性的pipeline)。 存在反复迭代的过程。
①-③前期工作会占据近30%及以上的时间
数据结构定义——CNN的conv common control info
6个64bit数:名字、bits长、地址、提示Note——类似C语言的结构体——成员变量...
一定注意:需要由设计决定整体框架,而不是验证决定。分析和设计的步骤一定要仔细,不能省略!!!
2.数字IC设计流程(参考)
芯片级Spec:每个功能模块分clock,分区——高电压、低电压分等(高的快、低的慢),整个需要多少I/O接口定义。
数字IP如果没有现成的,需要设计的话,上一页整个IP设计流程需要使用到。
2.可综合Verilog语言设计
1.组合逻辑
wire一定是组合逻辑,reg可以描述组合/时序逻辑
因为这里没有任何时钟(上升/下降沿)——组合逻辑,且a/b/c任意改变,out1也改变,没有任何存储的功能,所以——组合逻辑行为
1.常见错误
2.if-else 或者 case条件没有列全
没写X==3情况,当S=3,所以x==3时取反,EN不使能,y得不到任何数据。 当S=0,X不等于3,取反,EN使能,y就能得到D端四选一的输入数据。 综合出了 触发器!——都不是组合逻辑了!
3.case语句——条件是否列全,同2类似
one-hot编码
要加directive的原因:有的case条件匹配多个语句,匹配多个语句相当于逻辑没有写全,类似if没写else情况,同时工具无法推断各个选项是否是并行的,会综合出Latch触发器
而加了directive给系统识别后,综合会出现 user定义的并行结构 ①是对应3-8线译码器的——full条件列全了、自动识别为并行(每次最多匹配一项)
②加了directive给系统识别后——full条件列全了、user定义为并行(此时应该带了优先级!!!)
③不加directive——会综合出Latch
2.时序逻辑
IC/IP设计——异步复位用的比较多
3.Generate使用
这里是组合逻辑的generate
物理上展开——意味着写那段代码其实会在“编译”为8份,相当于手写了8份,虽然存在gen_x*8,但并不会使用到乘法器——减少了coding的工作量
这里是时序逻辑的generate
4.参数化的IP设计
IP复用——参数化方便修改移植
5.“<=” 和 “=”的区别
在5ns上升沿分成了三个时间点——有一定的先后顺序
为了匹配真实的DFF寄存器在电路里面的行为——所以会有三个时间点。
所以记住:wire信号只用=赋值,