一、基础入门
1、整体理解
简单来说,FPGA 就是“可反复编程的逻辑器件”。
ASIC 和 FPGA 就如同印刷品和白纸
ARM 虽然有很多外设,DSP 虽然具备强大的信 运算能力,但是,ARM 能做的,DSP 能做的,FPGA 一定也都能做;而 FPGA 可以做的,ARM 不一定行,DSP 也不一定行。
FPGA 固然强大,它高高在上的成本、功耗和开发复杂性还是会让很多潜在的目标客户望而却步。
2、学习方向
“熟练”:不仅要初步了解 FPGA 是什么、能做什么等基本的理论;更重要的是要学会 HDL语言( Verilog 或 VHDL), 能够使用 EDA 工具完成 FPGA 的代码设计、 仿真验证、 时序设计(这一步相对较难一些,往往需要结合实际应用,所以往往也可以属于下一阶段)、综合和映射,能够在开发板上下载并跑例程,这可以说是完成了入门阶段。
“精通”:如何用合适的 HDL 语法风格设计出最优化的电路;对 EDA 工具的使用,也不是仅仅会了就好,而应该让 EDA 工具的不同设置功能服务于具体的设计优化;同时也应该掌握不同的板级调试手段;
“专业”:参与一个新项目,开发一款新产品。
二、逻辑设计
1、简单晶体管实现基本逻辑门电路
3、可配置逻辑块
一颗 FPGA 内部通常都会有丰富的可配置逻辑块(Configurable Logic Block,简称 CLB),根据不同的器件规模,CLB 的数量从数千到数十万不等。如图 2.31 所示,呈矩阵排布的 CLB 就构成了最基本的 FPGA 逻辑资源的架构。
5、多语句定义:begin…end
6、比较判断:if…else, case…default…endcase
7、循环语句:for
8、任务定义:task…endtask
Task 更像是 C 语言中的子函数,task 中可以有 input、output 和 inout 端口作为出入
口参数,它可以用于实现一个时序控制。task 没有返回值,因此不可以用在表达式中。
9、连续赋值:assign,问 表达式()
10、always 模块:(敏感表可以为电平、沿信 posedge/negedge;通常和@连用)。
11、运算操作符:各种逻辑操作符、移位操作符、算术操作符大多是可综合的。
12、赋值符 := 和 13、Verilog 关键词
always endmodule medium reg tranif0 and end primitive module release
tranif1 assign endspecify nand repeat tri attribute endtable negedge rnmos tri0
begin endtask nmos rpmos tri1 buf event nor rtran triand bufif0 for not
rtranif0 trior bufif1 force notif0 rtranif1 trireg case forever notif1 scalared
unsigned casex fork or signed vectored casez function output small wait
cmos highz0 parameter specify wand deassign highz1 pmos specparam weak0
default if posedge strength weak1 defparam ifnone primitive strong0 while
disable initial pull0 strong1 wire edge inout pull1 supply0 wor else input
pulldown supply1 xnor end integer pullup table xor endattribute join remos
task endcase large real time endfunction macromodule realtime tran
VHDL 关键词
abs downto library postponed subtype access else linkage procedure then
after elsif literal process to alias end loop pure transport all entity map range
type and exit mod record unaffected architecture file nand register units
array for new reject until assert function next rem use attribute generate
nor report variable begin generic not return wait block group null rol when
body guarded of ror while buffer if on select with bus impure open
severity xnor case in or shared xor component inertial others signal
configuration inout out sla constant is package sra disconnect label port srl
对于低电平有效的信 或端口,通常加后缀“_n”表示。
2、例:寄存器电路的Verilog设计方式
① 简单的寄存器输入输出的模型如图 3.2 所示。每个时钟信 clk 的有效沿(通常是上
升沿),输入端数据 din 将被锁存到输出端 dout。
③ 带异步置位的寄存器输入输出的模型如图 3.4 所示。每个时钟信 clk 的有效沿(通常是上升沿),输入端数据 din 将被锁存到输出端 dout;而异步置位信 set 的上升沿(高电平有效置位)将强制给输出数据 dout 赋值为 1(不论此时的输入数据 din 取值),此输出状态将一直保持到 set 拉低后的下一个 clk 有效触发沿。
3、时序逻辑电路
在一个时序逻辑中,时钟信 掌控着所有输入和输出信 的进出。在每个时钟有效沿(通常是上升沿),寄存器的输入数据将会被采样并传送到输出端,此后输出信 可能会在经历长途跋涉般的“旅途”中经过各种组合逻辑电路并会随着信 的传播延时而处于各种“摇摆晃荡”之中,直到所有相关的信 都到达下一级寄存器的输入端。这个输入端的信 将会一直保持直到下一个时钟有效沿的来临。每一级寄存器都在不断的重复着这样的数据流采集和传输。
4、提升系统性能的代码风格
① 减少关键路径的逻辑等级
②逻辑复制(减少重载信 的散出)与资源共享
③ 消除组合逻辑的毛刺
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!