菜鸟成长之路之FPGA
FPGA
全称Field Programmable Gate Array
可反复编程的逻辑器件(与ASIC专用集成电路最大的区别是具有数字电路的可重编程性)
FPGA的潜在优势
- 灵活性
- 并行性
- 集成性
FPGA技术的局限性
-
绝对性能受限:在某些性能上,FPGA比不上专用芯片
-
灵活性是否适用:如果设计不需要太多的灵活性,FPGA的灵活性是一种浪费,会潜在增加产品成本
-
功耗相对较高:相比特定功能,应用集中的ASIC,适用FPGA实现相同功能会产生更高的功耗
-
设计复杂性高
应用 -
逻辑粘合
-
实时控制
-
高速信号采集和处理
-
协议实现(如更新较快的各种有线和无线通信标准,广播视频及编解码算法,各种加密算法等)
-
各种原型系统验证
-
并行计算(算法实现)
模块声明类语法
module…end module
端口声明
参数声明
方便代码移植也方便代码阅读
wire和reg
多语句定义:begin…end
就是C语言里的"{}",用于单个语法的多个语句定义
强耦合关系的语法就不用加begin …end,例如if else
循环语句:for
任务定义:task…endtask
其实类似于C语言中的子函数
代码样例:
连续赋值:assign,问号表达式(? : )
- assign用于直接互联不同的信号或直接给wire变量赋值
- “?:”表达式就是简单的if…else语句,多用于组合逻辑中
always模块
(敏感表可以为电平,沿信号posedge/negedge;通常和@连用)
如果@括号后面跟的是*,则begin end的逻辑就是组合逻辑 - always在组合逻辑中有多重用法
- 如果always后面有沿信号(上升沿posedge,下降沿negedge)声明则多为时序逻辑
-
赋值符号=和<=
一个是阻塞赋值一个是非阻塞赋值
时序逻辑用非阻塞<=
非阻塞做的是并行处理
阻塞语句是顺序执行