FPGA应该掌握的小笔记

前言

突然意识到,现在流行的数字IC验证,就是在芯片达到极其复杂的程度,一个testbench已经满足不了需求,才开始有了sv和uvm分层思想的流行。为了做好验证工作,必须了解设计的一切,基本代码还是小意思,最重要的是各种协议。加油吧,少年。

笔记1 :初识FPGA

FPGA(Field Programmable Gate Array):可反复编程的逻辑器件
ASIC(Application Specification Integrated Circuit):专用集成电路
ASSP(Application Specific Standard Parts):专用标准产品

  • FPGA、ARM、DSP
    FPGA供应商:Altera、Xilinx、Lattice、京微雅格

ARM的DSP
Xilinx的Zynq
Altera的Soc FPGA

  • FPGA的基本结构
    查找表(Look-up table,LUT):用于执行最基本的逻辑操作
    触发器(Flip-Flop,FF):用于存储LUT操作结果的寄存器单元
    线(wire):用于连接各个不同的模块单元
    输入输出端口(Input/Output pads):FPGA器件与外部芯片互联的引脚

笔记2 :应用领域

  • 逻辑黏合与实时控制
  • 信号采集处理与协议实现
  • 原型验证系统、片上系统与其他应用

笔记3:开发流程

在这里插入图片描述
实际的项目中,往往需要一个可靠的团队。将一个工程划分为不同的模块,进行设计、测试等。
设计输入:行为仿真
综合优化:功能仿真
实现 :时序仿真(PrimeTIme)
下载配置:板级调试

笔记4:语法学习的经验之谈

设计输入,除了编写代码,还有绘制原理图调用IP核

  • 可综合语法 :代码设计

  • 不可综合语法:仿真验证

  • 做法:参考简单的例程,动手编写代码实现相同或相近的电路功能。

  • 常见外设:蜂鸣器、流水灯、数码管、UART、I2C

代码风格参考:Altera(qs_qii5v1.pdf)或Xilinx(xst.pdf)文档中,有常见电路

笔记5:可综合的语法子集

1.模块声明类语法:module…endmodule

2.端口声明:input,output,inout

3.参数定义:parameter

4.信号类型:wire,reg等

5.比较判断:if…else,case…default…endcase

6.循环语句:for

7.任务定义:task…endtask

8.连续赋值:assign,问号表达式(?)

9.always模块

10.运算操作符

操作符含义
~&与非
>>逻辑右移
<<逻辑左移

| centered 文本居中 | right-aligned 文本居右 |

11.赋值符号:= 和<=

笔记6:寄存器的核心代码

1.寄存器电路的设计方式

现代逻辑设计中,时序逻辑是核心,而寄存器又是时序逻辑的基础,因此熟记时序逻辑的几种常见代码书写方式是很有必要的。

  • 图2.2 基本寄存器
module(clk,din,dout);
input	clk;
input	din;
output	dout;
reg		dout;

always	@(posedge clk)begin
		dout <= din;
end
endmodule

在这里插入图片描述

  • 图2.3 异步复位的寄存器
module(clk,rst_n,din,dout);
input	clk;
input	rst_n;
input	din;
output	dout;
reg		dout;

always	@(posedge clk	or	negedge rst_n)begin
		if(!rst_n) dout <= 1'b0;
		else	dout <= din;
end
endmodule

异步复位:在每个时钟信号clk的有效沿(通常是上升沿),输入端信号din被锁存到输出端dout中;而异步复位信号clr的下降沿(低电平有效复位)将强制给输出数据dout赋值0(不论此时的输入数据din取值),此输出状态将一直保持到clr拉高后的下一个clk有效时钟沿触发。

  • 图2.4 异步置位的寄存器
module(clk,set,din,dout);
input	clk;
input	set;
input	din;
output	dout;
reg		dout;

always	@(posedge clk	or	negedge rst_n)begin
		if(set) dout <= 1'b1;
		else	dout <= din;
end
endmodule

异步置位:在每个时钟信号clk的有效沿(通常是上升沿),输入端信号din被锁存到输出端dout中;而异步置位信号set的上升沿(高电平有效复位)将强制给输出数据dout赋值1(不论此时的输入数据din取值),此输出状态将一直保持到set拉底后的下一个clk有效时钟沿触发。
在这里插入图片描述

  • 图2.4 异步复位和置位的寄存器
  • 可能会出现竞争,但是设置优先级即可。(下面代码中,异步复位的优先级高)
module(clk,set,rst_n,din,dout);
input	clk;
input	set;
input	rst_n;
input	din;
output	dout;
reg		dout;

always	@(posedge clk	or	negedge rst_n or posedge set)begin
		if!rst_n)dout <= 1'b0;
		else if(set) dout <= 1'b1;
		else	dout <= din;
end
endmodule

该代码综合出来的寄存器如图2.6
在这里插入图片描述
图2.7 带同步使能的寄存器

module(clk,ena,din,dout);
input	clk;
input	ena;
input	din;
output	dout;
reg		dout;

always	@(posedge clk)begin
		if(ena)	dout <= din;
end
endmodule

同步使能:在每个时钟clk的有效沿(通常是上升沿),判断使能信号ena是否有效(通常取高电平有效),在ena信号有效的情况下din的值才会输出到dout信号上。

2. 同步以及时钟的设计原则

  • 建立时间:在时钟的有效沿之前,必须确保输入寄存器的数据建立时间内是稳定的。
  • 保持时间:在时钟的有效沿之后,必须确保寄存器的输出数据至少在保持时间内是稳定的。

这些事你要殷勤实行,并要投身其中,使众人看出你的长进来。

笔记7:漫谈状态机设计

  • 状态机根据其状态变化是否与输入条件相关分为两类。
    Moore型状态机:其状态变化仅和当前状态有关,而与输入条件无关
    Mealy型状态机:其状态变化不仅和当前状态有关,而且与输入条件有关

  • 还可以分类:有限状态机(FSM)无限状态机(ISM)

笔记8:时序分析

  • 一个信号经电路从输入到输出,会产生多大的延时
  • 一组信号经电路从输入到输出,延时一致吗

建立时间和保持时间

建立时间是指在时钟上升沿到来之必须保持稳定的时间,保持时间是指在时钟上升沿到来以数据必须保持稳定的时间。

基本时序路径

内部寄存器之间的时序路径,reg2reg
输入引脚到内部寄存器之间的时序路径,pin2reg
内部寄存器到输出引脚之间的时序路径,reg2pin
输入引脚到输出引脚之间的时序路径(不经过寄存器),pin2pin

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰之行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值