👉引言💎
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 热爱写作,愿意让自己成为更好的人............
铭记于心 | ||
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉 |
一、FPGA的一般设计流程
1.电路设计
根据需求指定电路设计方案
- 比如设计一个时序电路,需要明确系统功能,决定采用同步还是异步,数据通路和控制电路如何设计,需要几个触发器,电路状态如何转换...
- 通常,电路设计细化到寄存器传输级(RTL)即可,无需精确到门级
2.代码编写
- HDL电路描述语言,可层次化,通用性强
3.功能仿真
4.综合实现
- 完成HDL代码(较高层次电路描述)到真实芯片电路的转换过程,类似于编译器将高级语言转换为目标机器的二进制代码的过程。
- 综合阶段:
- 网表生成:检查代码语法,给出错误报告。将代码编译为由基本逻辑单元连接而成的逻辑网表。
- 门级优化:将用户的设计自动转换成一个等价或更优电路;
- 工艺映射:决定网表中的每一个元件如何在FPGA的可用资源中实现
- 实现阶段:将综合出的网表映射为FPGA芯片内部固有的硬件逻辑模块上(称为布局),然后基于布局的拓扑,利用内部的连线资源,将逻辑模块连接起来(称为布线)。
- 时序分析:计算所有模块和走线延迟,产生一系列表格以量化电路性能。并用来确定生成电路是否满足时序要求。若无异常,将生成一个bitstream比特流文件,该文件即为最终电路。
5.上板调试
- 将综合实现生成的比特流文件下载到FPGA芯片中,运行电路,观察其工作是否正常,若有问题,要调试定位出错的原因
二、Verilog基本语法
- 基本语法
- 门电路
- assign
- always
各个always块并行执行,always块可以产生各种逻辑,电平触发的always块常用来描述组合逻辑行为;沿触发的always块常用于时序逻辑的功能描述。通过综合工具自动将其转换为相应的逻辑结构
- Wire与reg数据类型的区别
- 模块调用方法
- 位置关联法
- 名称关联法
三、注意事项及设计流程
- 实验板使用注意事项
- 插拔USB数据线前,最好电源开关处于off状态。
- Micro USB避免插反,应该是带勾的平头朝上,如果发现很难插拔,需要检查是否插反。(损坏概率最高)
- 尽量避免湿手、带静电的手接触电路板及外设接口部分。
- 用外设的时候注意电平,应该是3.3V兼容5V输入,避免高电压接入。
- 注意安装Vivado和工程目录不要出现中文,也不要使得工程所在目录太深。
- 电脑的用户名不要设置为中文,会出现各种诡异的问题。
- 主要设计流程以及注意事项
- 设计流程
- .V输入(add Sources)->综合(Run synthesis)->添加约束文件->添加仿真文件->功能仿真->运行实现过程(Run implementation)->生成bit流(Generate Bitstream)->Auto connect target ->Program Divice
- 区分仿真和综合:功能仿真不是必须,但却非常必要;一定要学会通过看仿真时序来验证电路功能的正确性。 习惯查看综合后的设计,如RTL Schematic,熟悉“什么样的代码会综合成什么样的电路”,有助于编程技能提升。
- 生成bit流后,再接入电路板
- 关于Testbench代码(测试文件代码):
结构
module testbench;// 通常testbench没有输入与输出端口   信号或变量定义声明;   使用initial或always语句来产生激励波形;   例化设计模块;   监控和比较输出响应; endmodule
🌹写在最后💖: 路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹