1.FPGA基础知识

1.FPGA公司

Xilinx(赛灵思)、Altera(阿尔特拉)、莱迪思(Lattice)、infineon(英飞凌)

2.Altera公司FPGA系列

	MAX系列、Cyclone系列、Arria系列、Stratix系列、Agile系列
	Cyclone系列命令方法: 器件系列+器件类型(是否含有高速收发器)+LE逻辑单元数量+封装类型+高速串行收发器数量(没有则不写)+引脚数目+器件正常使用的温度范围+器件的速度等级+后缀
	
	EP4CE10F17C8N:
	EP4C:Altera 器件 Cyclone IV 系列
	E/GX:E 表示普通逻辑资源丰富的器件,GX 表示带有高速串行收发器的器件;
	10:LE 逻辑单元的数量,单位为 k,10 表示约有 10k 的逻辑单元
	C:表示高速串行收发器的数量,该芯片没有高速串行收发器所以不写
	F:表示 PCB 封装类型,F 是 FBGA 封装,E(EQFP)、Q(PQFP)、U(UBGA)、M(MBGA)
	17:表示引脚数量,17 代表有 256 个引脚
	C:工作温度,C 表示可以工作在 0℃到 85℃(民用级),I 表示可以工作在-40℃到 100℃(工业级),A 表示可以工作在-40℃到 125℃(军用级)
	8:器件的速度等级,6 最大约是 500MHz,7 最大约是 430MHz,8 最大约是400MHz,可以看出在 Altera 的器件中数字越小表示速度越快,而在 Xilinx 的器件中数字越大表示速度越快;一般来讲,提高一个速度等级将带来 12%到 15%的性能提升,但是器件的成本却增加了 20%大 30%。如果利用设计结构来将性能提升12%到 15%(通过增加额外的流水线),那么就可以降低速度等级,从而节约20%大 30%的成本
	N:后缀,N 表示无铅,ES 代表工程样片

3.FPGA内部硬件结构

FPGA之所以实现现场可编程是因为FGPA内部又很多可供用户任意配置的资源:其中包括:可编程逻辑阵列、可编程I/O、互连线、IP核等。
学过数字电路的人都知道,使用与、或、非门的任意组合几乎可以实现所有的数字电路,但是FGPA内部最基本的主要单元并不是这些与、或、非门,而是由无数个查找表核寄存器构成(这些也是由最基本的与、或、非门组成)

4. FPGA开发相关软件

Quartus:
	(1)软件开发软件,主要用于编译程序使用
	(2)使用该软件进行Altera进行FGPA芯片的开发
	(3)开发软禁啊的使用离不开器件库,器件库的安装有2种方式:一种是与开发软件一并安装。另外一种是独立安装
	(4)将器件库和开发软件分开独立安装,软件安装完毕后,开始器件库的安装,该FGPA芯片属于CycloneIV系列,所以只需要添加该系列器件库即可
	
ModelSim:
	(1)仿真软件
	(2)QuartusII开发工具再仿真这一块做的并不好,所以往往需要第三方更为专业的仿真软件来做仿真这项工作
	(3)独立的ModelSim可以和任意一家FPGA公司的开发工具进行联调使用,也可以直接单独使用,灵活性更高
	
Nodepad++:编辑软件
	(1)一款小而精悍的代码编辑器
	
visio:
	(1)完成工程结构框图和模块内部波形图的绘制

USB-Blaster:
	(1)下载器的驱动
	(2)对FPGA开发进行程序下载、固化以及工程调试时,下载器是必不可少的,USB-Blaster就是下载器的驱动

5.FGPA开发流程

	(1)规划
	首先我们要进行设计前的规划,即对项目要有一个全局的考虑,分析项目的具体需求来设计系统的结构、划分系统的层次,确定各个子模块的结构关系和信号之间的相互关系,然后确定模块的端口信号有哪些
	(2)画出波形图
	根据每个模块的功能和自己的理解并结合芯片、接口的时序手册我们使用 Visio画出该模块能正常工作的时序波形图
	(3)编写代码
	根据所画的波形图严格设计代码,所谓的严格就是要保证设计代码的仿真结果要和所画的波形保持一致
	(4)代码编译
	代码编写完成后对代码进行编译,目的是检查代码中的语法错误。若代码存在语法错误,对代码进行修改,再次编译,直至通过编译
	(5)仿真
	根据 RTL 代码设计合理的 Testbench 进行逻辑仿真(也称为前仿真、功能仿真)
	(6)所画波形图与仿真对比
	使用仿真工具进行仿真(可以使用软件自带的仿真工具,也可以使用其他的第三方仿真工具,本教程中我们使用 ModelSim),并将仿真出来的波形和用 Visio 画出的时序波形图进行对比,如果对比有差别则修改代码直至相同
	(7)绑定管脚,硬件验证
	绑定管脚后进行分析综合、布局布线,然后下载到硬件板卡中,此时如果硬件板卡能够正常工作,则说明前期的设计和编写的代码都正确;如果硬件板卡不能够正常工作,查找并解决问题,反复迭代直至正确实现功能,并重复后面的流程,最终保证硬件板卡能够正常工作

实际操作示例:
	1.模块和端口的划分
		a.由多少个模块组成,每个模块由多少个输入和输出信号组成
		b.输出信号与输出信号的特征:名称、宽度、类型、作用
	
	2.波形图的绘制
		a.输入信号与输出信号的关系
		b.输出信号与输出信号的这种关系是一种时序的、逻辑的关系,即有时间上的关系又有逻辑上的关系,这种关系不在是结构上的关系,对于这种时序的、逻辑的关系我们用波形图的方式表达最为清晰直观
	
	3.代码的编写
		a.功能代码的编写
		RTL代码编写的模块叫做RTL模块,也叫做功能模块、可综合模块,之所以叫做RTL代码是因为用Verilog HDL在Resistance Transistors Logic(寄存器传输逻辑)
		来描述硬件电路,RTL代码能够综合出真实的电路以实现我们设计的功能,区别于不可综合的仿真代码
		b.代码分析和综合(start analysis  & synthesis)
		该步骤的的目的是首先检查语法是否有错,其次是综合器将代码解释为电路的形式,只有analysis  & synthesis 表现位绿色说明分析与综合完成,并没有语法错误产生
		Netlist Viewers --> RTL Viewers:表示硬件电路结构
		
	4.仿真验证
	
		Testbench是测试脚本,测试我们用硬件描述语音HDL设计的电路,测试设计电路的整体功能、部分性能是否与预期的目标相符,使用Testbench做仿真速度快,修改后马上就可以
		看到结果,节省开发时间
		编写Testbench进行测试的过程:
		(1)产生模拟激励(输入波形)
		(2)将产生的激励加入到被测试模块并观察其输出响应
		(3)将输出响应与期望进行比较,从而判断设计的正确性
		
		a.点击"Toos"下的"Run Simulation Tool"下的"RTL Simulaton"打开 ModelSim 进行功能仿真(因为主要是验证逻辑的正确性也称逻辑仿真)
		b.仿真中的几个重要概念:波形的仿真时间、仿真的开始和结束、波形的放大和缩小、参考线的添加与删除与定位
		
	5.下载程序到实际硬件中进行验证
	
		Device介绍:
			Device family:选择使用哪个系列的芯片
			Package: 选择该芯片的封装类型
			pin count:管脚数量
			Speend grade: 速度等级
		
		Availabe device:
			Name: 器件具体的名字
			Core Voltage: 内核电压
			LEs: Logic ELements的数量,逻辑单元数越多说明资源越多能够实现更多的逻辑设计,芯片的价格也就越贵,设计逻辑代码主要使用的是这部分资源
			User I/Os: 用户可配置的 I/O 共 180 个,虽然该芯片有 256 个管脚但是有一些管脚是不可以随意配置的,如电源管脚、固定功能的管脚,除去具有固定功能的管脚,留给用户可任意配置的管脚只有 180 个,设计中使用比较多的内存时就可以使用这部分专用资源
			Memory Bits: 存储器的容量,共 423936bit,主要是指 Block RAM(块 RAM),423936bit 即 46个 M9K(每一块中包含 8192 个存储位,加上校验位共 9216 位,故称 M9K)
			Embedded Multiplier 9-bits elements: 嵌入式乘法器数目共 46 个,在进行数学运算时可以调用该部分的资源,以节省逻辑资源的开销
			pll: 锁相环的数量,一共有两个,主要用于分频、倍频和时钟相位的调制
			Golabal Clocks: 全局时钟管脚,一共有 10 个,全局时钟管脚是连接到全局时钟树上的,能够保证连接到全局时钟树上的时钟信号到达每个寄存器的时间都是相同的

	## 6.工程文件夹管理
	
		目的:把不同的设计文件放到不同的文件夹中,养成这样的一个好习惯是为了日后能更方便管理每一个项目
		目录结构:
			led: -> 项目名称
				doc:该文件夹主要放置一些文档资料,如数据手册,使用 Visio 画的波形图、自己写的文档等都可以存放到这个文件夹里面
				quartus_prj:该文件夹主要放置的是工程文件,使用 Quartus II 新建的工程就保存到这里,如果是使用的 Xilinx 的 ISE 开发工具,就可以命名为 ise_prj,这样能很清晰的知道是用的什么开发软件进行开发的
				rtl:该文件夹主要放置可综合的代码,就是最后可以生成硬件电路的代码,因为这部分代码主要是寄存器描述的寄存器传输级的代码所以文件夹取名为 rtl(register transportlevel),因为也是我们的设计文件,所以也可以取名为 design
				sim:该文件夹放置对可综合代码的仿真文件,即不可综合的代码,也叫 testbench,所以也可以将文件夹取名为 testbench 或者 tb 都可以。
		主要的文件夹就是这四个,后期的一些项目有可能还会用到 Matlab、IP 核,届时可以再新建一个单独管理 Matlab 文件和 IP 核文件的文件夹,文件数量可以根据自己的需求进行分类管理
		
		备注:
			(1)综合:
				广义的综合就是将高层次的设计转化为低层次的设计,比如将C语言转换为汇编语言、机器语言,将HDL语言转换为门级网表
				逻辑综合:RTL级转换为门级网表

7.组合逻辑电路与时序逻辑电路的区别

组合逻辑电路由与、或、非门等逻辑门电路组成,其任何时刻的输出取决于其输入的组合
时序逻辑电路它的输出取决于他们当前的输入和他们之前的输入输出状态,主要由存储电路和组合逻辑电路两部分组成
区分一个设计是组合逻辑电路还是时序逻辑电路只要是看数据工作是不是在时钟沿下进行的,在FPGA的设计中,负责电路设计都是要用到时序逻辑电路,往往都是以时序逻辑电路为主,组合逻辑电路为辅的复杂逻辑电路
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值