FPGA个人学习总结1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.综合方面
1)经综合后:
普通的数据单端输入都会加一个IBUF缓冲器;
数据单端输出有个OBUF缓存器;
时钟输入口会加BUFGP缓冲器;
对于4选1的mux,if结构和case结构都只需要一个slice,由MUXF5控制两个LUT
下图为8选一case结构,MUXF6控制两个MUXF5,以两个slices实现8选1,用if结构实现的结构也是一样的
注意一点:
使用View Technology Schematic,来查看最底层的实现形式,即FPGA中的LUT、MUXF5等使用
但有的综合后RTL Schematic相同,Technoligy Schematic不同,而有的又相反(如one bit 相加,加括号前后例子),那么我们应该以哪种为最优呢?
如下图:图上下分别为加括号前和加括号后RTL:只有根据实际需要来选择,如信号的先
后顺序等等
2.LUT的名字后_数字,那个数字代表什么意思?
LUTa_b:a代表所有输入数据位宽,即输入数据的个数,切勿将位宽理解为“每个输入端口的数据宽度(因每个输入端口是单bit输入);b代表LUT被初始化的状态
3.比较器位宽大小对综合结构的影响
当比较的位宽高于一定位数时,综合会采用进位链结构,如下图:
4.在调用DCM核时,CLKFX_OUT为输出引脚,并且LOCKED_OUT必须勾上,否则波形无法输出,具体步骤参考本文件夹下“dcm核设置”
5.如何判断PCB板上的复位芯片是低复位还是高复位?
将复位芯片的输出连接至LED等,若正常工作后是亮(前提是LED另一端是接地),表示正常工作是高,说明之前是低,即为低复位,不亮则为高复位
6.两种不同下载接口的比较<具体还可参考项23>
○1每个FPGA都有两组下载接口JTAG和SPI;
○2JTAG中TMS为模式选择,TCK为时钟,TDI和TDO分别为输入输出数据;
○3SPI中SS(有的为STB)为片选信号,SCK为时钟信号,另外两根为数据信号;
○4通过JTAG下载程序到FPGA:编程管脚跳针要拔掉,掉电后程序也会丢失,即下次上电工作后需要重新下载程序
○5通过SPI下载程序到FPGA:先将编程引脚PROG接地,SPI接口断开与FPGA通信,而与flash通信,程序下载到外挂FLASH中,然后将PROG跳针拔掉,FLASH中程序下载到FPGA中
○6外部Flash不单是一个裸存储器,它还有SPI接口,图中的SPI接口就是从
FLASH的SPI
接口中引出来的引脚
○7SPI接口是串行同步通信,串口UART是串行异步通信
7.关于示波器
当配置芯片相应寄存器后,观察输出的波形频率时,若出现频率跳动,可以检查示波器上的采样电平是否在波形的中间位置
8.关于复位信号与寄存器声明
寄存器在声明时最好给个初始值,即加载时的值,例如:reg[1:0] a = 2’b00或直接写0; 复位信号不要列在敏感列表中,直接使用if(rst),使rst成为控制信号
9.如何看出接口读取数据所用的时钟沿
上图可以看出,时钟的下降沿对准数据中心,说明该芯片的此接口是用时钟的下降沿来读取数据的
上图可以看出,时钟的上升沿对准数据中心,说明该芯片的此接口是用时钟的上升沿来读取数据的
故:如果芯片AB之间有走线延迟的话,那么我们在芯片A要用相反的时钟沿送出数据,经过走线延迟后,芯片B对应接口读取数据的时钟沿正好对准到达芯片B的数据的保持时间,即使最大延迟半个周期,也正好对准数据的中心
10.FPGA内部寄存器都是高复位,综合时综合工具会自动为复位信号反相,
若外部芯片为低复位,则可在FPGA设计时,先将复位信号反相,然后使用if(rst)
11.当控制信号高于slice的供应时,可将控制信号转化为数据信号,例如:
If(a) q <= b; q <= (a & b)|(!a & q);
else q <= q;
12. 毛刺问题
概念:由于延迟的作用, 多个信号到达终点的时间有先有后, 形成了竞争, 由竞争产生的错误输出就是毛刺
产生条件:在同一时刻有多个信号输入发生改变
出现时间:由于冒险多出现在信号发生电平跳变的时刻, 即在输出信号的建立时间内会产生毛刺, 而在保持时间内不会出现,
13.调用ram
在建立RAM的IP核时,关于是否选择输出寄存器,根据需要!选择一个寄存器,数据则在采到地址后,延迟一个时钟周期,才会输出
14.综合后的寄存器
fd为普通的寄存器;fdr为带复位端的寄存器;fdre为带复位端和使能端得寄存器15.寄存器地址注重参数化设计
可以先用define定义相关寄存器的地址参数,然后在运用中使用该参数,如下:
`define reset_addr 4'b1101;
always @(posedge CLK32M or negedge RST)
begin
if(!RST)
begin
SPI_EN <= 8'b0010_0000;
CTL[7:1] <= 7'b1111_101;
RESET <= 8'b1101_0000;
end
else if ( wr_reg == 2'b01 )
case(ADDR)
`spi_en_addr : SPI_EN[7:0] <= DATA[7:0];
`reset_addr : RESET[7:0] <= DATA[7:0];
……….
则
当给寄存器的赋值是某一固定值时,为只读寄存器
16.综合问题
将一输入端口赋值给一个寄存器,再将该寄存器赋值给一个wire型输出端口,则在综合后,输入不会赋值给输出,注意上面的输入输出指的是整个工程的输入输出解决办法:给输入添加一个ibuf,或者给输出添加一个obuf
有时不必延迟一个时钟周期,而直接将输入赋值给输出
17.时序约束问题
○1寄存器到寄存器:过周期约束来设置,一般为实际时钟频率的110%;
○2输入管脚到寄存器:通过offset in来设置,一般为半个时钟周期;
由于上游芯片的数据输出和该FPGA的数据输入使用的是同一个时钟,故如果上游芯片的数据输出采用下降沿,那么FPGA的offset in就需采用上升沿;
上游芯片的输出到FPGA寄存器之间的延迟可能不到半个周期;
○3寄存器到输出管脚:参考○2
18.系统同步接口和源同步接口的区别
○1系统同步接口:上游芯片发送数据的时钟和FPGA接收数据的时钟均为系统时钟,或者FPGA发送数据的时钟和下游芯片接收数据的时钟均为系统时钟;
○2源同步接口:上游芯片发送数据给FPGA的同时,也发送接收时钟给FPGA,或者FPGA 发送数据给下游芯片的同时,也发送接收时钟给下游芯片。
19.在为寄存器分配地址时,常表示为0x…,这样也表示是十六进制!
20.FPGA设计面积与速度
面积指设计所占用的FPGA逻辑资源数目,即触发器FF和查找表LUT的数目