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结构实现的结构也是一样的注意一点:使用viewtechnologyschematic,来查看最底层的实现形式,即fpga中的lut、muxf5等使用但有的综合后rtlschematic相同,technoligyschematic不同,而有的又相反(如onebit相加,加括号前后例子),那么我们应该以哪种为最优呢?如下图:图上下分别为加括号前和加括号后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);elseq<=q;12.毛刺问题概念:由于延迟的作用,多个信号到达终点的时间有先有后,形成了竞争,由竞争产生的错误输出就是毛刺产生条件:在同一时刻有多个信号输入发生改变出现时间:由于冒险多出现在信号发生电平跳变的时刻,即在输出信号的建立时间内会产生毛刺,而在保持时间内不会出现,13.调用ram在建立ram的ip核时,关于是否选择输出寄存器,根据需要!选择一个寄存器,数据则在采到地址后,延迟一个时钟周期,才会输出14.综合后的寄存器fd为普通的寄存器;fdr为带复位端的寄存器;fdre为带复位端和使能端得寄存器15.寄存器地址注重参数化设计可以先用define定义相关寄存器的地址参数,然后在运用中使用该参数,如下:`definereset_addr4b1101;always@(posedgeclk32mornegedgerst)beginif(!rst)beginspi_en<=8b0010_0000;ctl[7
:1]<=7b1111_101;reset<=8b1101_0000;endelseif(wr_reg==2b01)case(addr)`spi_e n_addr:spi_en[7:0]<=data[7:0];`reset_addr:reset[7:0]<=data[7:0];……….则当给寄存器的赋值是某一固定值时,为只读寄存器16.综合问题将一输入端口赋值给一个寄存器,再将该寄存器赋值给一个wire型输出端口,则在综合后,输入不会赋值给输出,注意上面的输入输出指的是整个工程的输入输出解决办法:给输入添加一个ibuf,或者给输出添加一个obuf有时不必延迟一个时钟周期,而直接将输入赋值给输出17.时序约束问题1寄存器到寄存器:过周期约束来设置,一般为实际时钟频率的110%;○2输入管脚到寄存器:通过offsetin来设置,一般为半个时钟周期;○由于上游芯片的数据输出和该fpga的数据输入使用的是同一个时钟,故如果上游芯片的数据输出采用下降沿,那么fpga的offsetin就需采用上升沿;上游芯片的输出到fpga寄存器之间的延迟可能不到半个周期;3寄存器到输出管脚:参考○2○18.系统同步接口和源同步接口的区别1系统同步接口:上游芯片发送数据的时钟和fpga接收数据的时钟均为系统时钟,或者○fpga发送数据的时钟和下游芯片接收数据的时钟均为系统时钟;2源同步接口:上游芯片发送数据给fpga的同时,也发送接收时钟给fpga,或者fpga○发送数据给下游芯片的同时,也发送接收时钟给下游芯片。19.在为寄存器分配地址时,常表示为0x…,这样也表示是十六进制!20.fpga设计面积与速度面积指设计所占用的fpga逻辑资源数目,即触发器ff和查找表lut的数目速度指芯片稳定运行时所能达到的最高频率实际运用中,存在二者之间的平衡操作有:模块复用、乒乓操作、串并转换以及流水线操作,其中流水线操作比较重要。21.同步电路与异步电路区别在于电路触发是否与驱动时钟同步,从行为上将就是所有电路是否在同一时钟沿的触发下处理数据。以复位电路为例,如果在敏感表中使用negedgerst,则为异步电路设计原则:1在多时钟设计中,使设计做到局部同步,即同一时钟驱动的电路要同步于其同一时钟沿○(要么均采用上升沿,要么均采用下降沿),即尽量使用单时钟和单时钟沿。2避免使用门控时钟。门控时钟是指产生时钟使用了组合逻辑。门控时钟相关的逻辑不是○同步电路,可能带有毛刺。虽可减小功耗,但随着低功耗fpga的发展,应尽可能避免使用门控时钟。3禁止在模块内部使用计数器分频来产生所需的时钟,这样会使时序分析变得复杂,产生○较大的时钟漂移,浪费时序裕量,降低设计可靠性,不过对于低速系统采用一两个是没太大问题,可以设计成时钟使能电路,参考本目录下其他资料。同步电路优点:1有效避免毛刺,提高设计可靠性;○2简化时序分析过程;○3减少工作环境对设计的影响,异步电路受工作温度、电压等影响,器件延时变化较大,○异步电路时序变得更加苛刻,导致芯片无法正常工作,而同步电路只要求时钟和数据沿相对稳定,时序要求相对宽松。22.单片机与arm二者都可通过intel总线或者spi或者串口与外部芯片通信,并且通过cs信号来选择要通信的芯片,故允许一定数量的芯片挂在intel总线上23.fpga配置过程及配置方式配置过程:1上电后,fpga若满足相关条件便会自动进行初始化,初始化完成后dnoe信号将变低,○并且以后都会是低电平;2初始化完成后,fpga会将init信号置低,开始清空配置寄存器,清空完后将init信号○置高;用户可将prog或者init信号置低,来延长清空寄存器时间(注:init信号为双向端口);3清空寄存器后,fpga对配置模式管脚m[2:0]采样,确定数据配置模式;<001>为spi 模○式,<000>为jtag模式;4若需重新配置,只需将prog置低即可,这里不要使用init。○配置模式:1根据芯片能否自动加载配置数据,分为主模式、从模式和jtag模式;○2主模式,能自动将配置数据从相应外存储器读入到sram中,实现内部结构映射,如我○们比较常用spi模式<fpga是基于sram工艺的>;3jtag模式,数据直接从tdi进入fpga,完成相应的配置,该模式用来对芯片进行测试。○<jointtestactiongroup>24.关于双向端口的综合结果分析例如:input[15:0]data_in,input[3:0]work_state,input[1:0]cnt_cl,inout[15:0]sdram_data,o utput[15:0]data_out,1assignsdram_data=(work_state==w_wr)?data_in:16bz;----------