FPGA个人学习总结1_第1页
FPGA个人学习总结1_第2页
FPGA个人学习总结1_第3页
FPGA个人学习总结1_第4页
FPGA个人学习总结1_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

综合方面经综合后:普通的数据单端输入都会加一个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>eq\o\ac(○,1)每个FPGA都有两组下载接口JTAG和SPI;eq\o\ac(○,2)JTAG中TMS为模式选择,TCK为时钟,TDI和TDO分别为输入输出数据;eq\o\ac(○,3)SPI中SS(有的为STB)为片选信号,SCK为时钟信号,另外两根为数据信号;eq\o\ac(○,4)通过JTAG下载程序到FPGA:编程管脚跳针要拔掉,掉电后程序也会丢失,即下次上电工作后需要重新下载程序eq\o\ac(○,5)通过SPI下载程序到FPGA:先将编程引脚PROG接地,SPI接口断开与FPGA通信,而与flash通信,程序下载到外挂FLASH中,然后将PROG跳针拔掉,FLASH中程序下载到FPGA中eq\o\ac(○,6)外部Flash不单是一个裸存储器,它还有SPI接口,图中的SPI接口就是从FLASH的SPI接口中引出来的引脚eq\o\ac(○,7)SPI接口是串行同步通信,串口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_addr 4'b1101;always@(posedgeCLK32MornegedgeRST) begin if(!RST) begin SPI_EN<=8'b0010_0000; CTL[7:1]<=7'b1111_101; RESET<=8'b1101_0000; end elseif(wr_reg==2'b01) case(ADDR) `spi_en_addr : SPI_EN[7:0]<=DATA[7:0]; `reset_addr : RESET[7:0]<=DATA[7:0];………. 则地址寄存器名R/W默认值说明4’b1101RESETR/W8’b1101_0000复位寄存器当给寄存器的赋值是某一固定值时,为只读寄存器16.综合问题将一输入端口赋值给一个寄存器,再将该寄存器赋值给一个wire型输出端口,则在综合后,输入不会赋值给输出,注意上面的输入输出指的是整个工程的输入输出解决办法:给输入添加一个ibuf,或者给输出添加一个obuf有时不必延迟一个时钟周期,而直接将输入赋值给输出17.时序约束问题eq\o\ac(○,1)寄存器到寄存器:过周期约束来设置,一般为实际时钟频率的110%;eq\o\ac(○,2)输入管脚到寄存器:通过offsetin来设置,一般为半个时钟周期;由于上游芯片的数据输出和该FPGA的数据输入使用的是同一个时钟,故如果上游芯片的数据输出采用下降沿,那么FPGA的offsetin就需采用上升沿;上游芯片的输出到FPGA寄存器之间的延迟可能不到半个周期;eq\o\ac(○,3)寄存器到输出管脚:参考eq\o\ac(○,2)18.系统同步接口和源同步接口的区别eq\o\ac(○,1)系统同步接口:上游芯片发送数据的时钟和FPGA接收数据的时钟均为系统时钟,或者FPGA发送数据的时钟和下游芯片接收数据的时钟均为系统时钟;eq\o\ac(○,2)源同步接口:上游芯片发送数据给FPGA的同时,也发送接收时钟给FPGA,或者FPGA发送数据给下游芯片的同时,也发送接收时钟给下游芯片。19.在为寄存器分配地址时,常表示为0x…,这样也表示是十六进制!20.FPGA设计面积与速度面积指设计所占用的FPGA逻辑资源数目,即触发器FF和查找表LUT的数目速度指芯片稳定运行时所能达到的最高频率实际运用中,存在二者之间的平衡操作有:模块复用、乒乓操作、串并转换以及流水线操作,其中流水线操作比较重要。21.同步电路与异步电路区别在于电路触发是否与驱动时钟同步,从行为上将就是所有电路是否在同一时钟沿的触发下处理数据。以复位电路为例,如果在敏感表中使用negedgerst,则为异步电路设计原则:eq\o\ac(○,1)在多时钟设计中,使设计做到局部同步,即同一时钟驱动的电路要同步于其同一时钟沿(要么均采用上升沿,要么均采用下降沿),即尽量使用单时钟和单时钟沿。eq\o\ac(○,2)避免使用门控时钟。门控时钟是指产生时钟使用了组合逻辑。门控时钟相关的逻辑不是同步电路,可能带有毛刺。虽可减小功耗,但随着低功耗FPGA的发展,应尽可能避免使用门控时钟。eq\o\ac(○,3)禁止在模块内部使用计数器分频来产生所需的时钟,这样会使时序分析变得复杂,产生较大的时钟漂移,浪费时序裕量,降低设计可靠性,不过对于低速系统采用一两个是没太大问题,可以设计成时钟使能电路,参考本目录下其他资料。同步电路优点:eq\o\ac(○,1)有效避免毛刺,提高设计可靠性;eq\o\ac(○,2)简化时序分析过程;eq\o\ac(○,3)减少工作环境对设计的影响,异步电路受工作温度、电压等影响,器件延时变化较大,异步电路时序变得更加苛刻,导致芯片无法正常工作,而同步电路只要求时钟和数据沿相对稳定,时序要求相对宽松。22.单片机与ARM二者都可通过Intel总线或者SPI或者串口与外部芯片通信,并且通过CS信号来选择要通信的芯片,故允许一定数量的芯片挂在Intel总线上23.FPGA配置过程及配置方式配置过程:eq\o\ac(○,1)上电后,FPGA若满足相关条件便会自动进行初始化,初始化完成后DNOE信号将变低,并且以后都会是低电平;eq\o\ac(○,2)初始化完成后,FPGA会将INIT信号置低,开始清空配置寄存器,清空完后将INIT信号置高;用户可将PROG或者INIT信号置低,来延长清空寄存器时间(注:INIT信号为双向端口);eq\o\ac(○,3)清空寄存器后,FPGA对配置模式管脚M[2:0]采样,确定数据配置模式;<001>为SPI模式,<000>为JTAG模式;eq\o\ac(○,4)若需重新配置,只需将PROG置低即可,这里不要使用INIT。配置模式:eq\o\ac(○,1)根据芯片能否自动加载配置数据,分为主模式、从模式和JTAG模式;eq\o\ac(○,2)主模式,能自动将配置数据从相应外存储器读入到SRAM中,实现内部结构映射,如我们比较常用SPI模式<FPGA是基于SRAM工艺的>;eq\o\ac(○,3)JTAG模式,数据直接从TDI进入FPGA,完成相应的配置,该模式用来对芯片进行测试。<jointtestactiongroup>24.关于双向端口的综合结果分析例如:input[15:0]data_in,input[3:0]work_state, input[1:0]cnt_cl, inout[15:0]sdram_data, output[15:0]data_out,assignsdram_data=(work_state==W_WR)?data_in:16'bz;----------------------------eq\o\ac(○,1)assigndata_out=(cnt_cl==2'd2)?sdram_data:16'bz;------------------------------------eq\o\ac(○,2)综合后如下:语句eq\o\ac(○,1)综合成下面的BUFT;当T2=0时,sdram_data输出data_in,当T2=1时,BUFT输出高阻。需要注意两点:eq\o\ac(○,1)T1和T2要存在制约关系;eq\o\ac(○,2)不要去追究太多,程序中的式eq\o\ac(○,1)就综合成下面的BUFT,式eq\o\ac(○,2)就综合成上面的BUFT,另外,由于data_out不是双向端口,故可将eq\o\ac(○,2)式改成:assigndata_out=(cnt_cl==2'd2)?sdram_data:16'b0;这样上面BUFT就会用与门代替(本项目中综合后是这样的)eq\o\ac(○,3)上面的BUFT就等价于下面的电路:在功能仿真时,双向端口上如果没有数据,则输出高阻态25.关于设计中给寄存器赋初值的分析赋初值后,在程序加载时,会自动为寄存器赋值,避免了在程序初始时刻出现“X”状态26.SPI系统设计,如下图所示eq\o\ac(○,1)从SPI接口出来的数据地址总线以及读写命令进入各寄存器模块管理,注意数据收发总线是独立的两组总线;eq\o\ac(○,2)数据线数据读写,通过地址线高位来控制,个人认为,用高位地址来产生片选,用片选去控制输出端,未被片选时输出高阻态,同时使用片选控读写信号,未被片选时,不进行读写操作;eq\o\ac(○,3)功能接口只负责数据处理,然后数据送到相关寄存器模块,供外部访问;eq\o\ac(○,4)对于被选中的寄存器管理模块,在写命令下,将从SPI送来的数据写入到功能接口发送寄存器,将数据从功能接口发送出去,或者也可写入其他相应的寄存器,由寄存器地址决定;在读命令下,将功能接口接收的数据写入SPI发送寄存器,从而发送到SPI总线上,注意地址要对应。27.上电加载管脚PROG_B端的电容的容值要合适,在XC3S250E中为10UF,这样才能正确下载程序!28.在FPGA上板调试过程中,如果相关信号不正确,考虑方向?查看PCB板上的时钟芯片的时钟频率是否准确;29.在问题26中,遇见如下问题:例如:在接口1reg管理模块中,有个寄存器既输出给SPI接口端数据总线,也输出给功能接口1,在功能接口1中,对输入的数据进行了如下操作4'b0110:SERD<=datain[7]; 4'b0111:SERD<=datain[6]; 4'b1000:SERD<=datain[5]; 4'b1001:SERD<=datain[4]; 4'b1010:SERD<=datain[3]; 4'b1011:SERD<=datain[2]; 4'b1100:SERD<=datain[1]; 4'b1101:SERD<=datain[0];结果导致从SPI接口读出的数据与写入的不一致解决办法:将进入功能接口1的数据,先缓存,再使用,如下reg[7:0]datai_delay;always@(posedgeCK4MornegedgeRST)if(!RST) datai_delay<=8'b0;elseif(fame_len==4'b0000) datai_delay<=datain; else datai_delay<=datai_delay;再将第一段程序datain换成datai_delay所以,以后如果多个模块共用一个寄存器的数据,出现错误的话,不妨在某些模块中,将该寄存器数据延迟。30.在顶层模块中,输出端口由多个模块的输出端口驱动时,综合时报错怎么办?解决办法:在各个模块使用使能信号将各个驱动信号变成三态使能门31.FPGA调试方法对于在一段时间内,只在一个时钟发生变化的信号,可用点灯来测试该信号的正确性

测试程序是:当该信号来时,测试灯状态改变,其他时刻保持不变

同理:对于不循环的计数器的特定也可以这样来测试程序参考:regrun_r=1'b1;assignrun=run_r;always@(posedgeCLK32M)if(!rst) run_r<=1'b1; elseif(cs_send_ram) run_r<=1'b0; else run_r<=run_r;

对于整个程序,从时序的后端往前端,逐步测试,逐步判断出错的地方32.关于总线驱动在CPLD中,用assign语句直接对信号进行驱动,不需要时钟;同样在FPGA中对信号进行驱动,也采用一样的方法,不要用时钟去采样,直接用assign33.关于时钟选取的问题有两个时钟A和B,若要将它们合并成一个时钟C,从而在设计中使用C时钟沿方法是:assignC=A&B,而不要弄成A|B34.数据选择问题:使用x条件判断来从a和b中选择一个赋值给c错误语言:Wire[7:0]a,b,c;Wirex;Assignc=(!x&a)||(x&b);错误原因:x是一位,a是8位,如何相与?正确写法:Assignc=x?a:b注意:这里的括号并不对多位数据进行逻辑判断(已经综合验证),只有在if等判断语句中才对括号进行逻辑判断35.FPGA错误排除方法当得到的信号不正确时,检查该信号在顶层端口是否对应,位宽是否正确36.FPGA选型对于中低速信号,选择FPGA主要考虑两个方面:容量和管脚,其次还有价格和速度容量:看FPGA内部的RAM的大小是否够存数据帧,以及RAM的数目是否够用管脚:数目是否够用对于高速信号,才考虑速度37.BlockRAM和DistributedRAM有什么区别?eq\o\ac(○,1)较大的存储应用,建议用bram;零星的小ram,一般就用dram。但这只是个一般原则,具体的使用得看整个设计中资源的冗余度和性能要求

eq\o\ac(○,2)dram可以是纯组合逻辑,即给出地址马上出数据,也可以加上register变成有时钟的ram。而bram一定是有时钟的。

eq\o\ac(○,3)如果要产生大的FIFO或timing要求较高,就用BlockRAM。否则,就可以用DistributedRAM。在XilinxAsynchronousFIFOCORE的使用时,有两种RAM可供选择,Blockmemory和Distributedmemory。差别在于,前者是使用FPGA中的整块双口RAM资源,而后者则是拼凑起FPGA中的查找表形成。

38.FIFO核生成时,如下界面:第一列是选择读写时钟是共用的还是独立的,第二列选择实现FIFO时是使用块RAM还是使用分布式RAM

第一列根据自己需要选择,第二列根据FIFO大小及时序来选择,如37题所述。

注:各项选择用同一个按钮来选择,而非分开选择39.板上调试时,有时用示波器测量信号,出现问题是:无论量哪个管脚,都出来的是50HZ正弦波。问题出在:探针的接地断了40.调试FPGA,信号不输出当仿真时,某信号不输出或者输出为高阻时,检查方向:该模块内的信号是否与该模块内被调用模块的信号相对应,包括被调用的IP核例如A模块内有信号a,A模块内调用了模块B,模块B中的信号b与顶层模块A中的信号a相对应,则在A中,调用要正确,即对应为.b(a)41.FIFO使用总结如果使用IP核的RST端口,请注意RST是高复位42.MCU数据双向端口处理对于双向端口,要通过片选处理成两个独立的输入端口和输出端口,从而方便挂多个器件。方法如处理SDRAM双向数据端口一样。43.MCU读写时序分析图一图二

由上图时序分析可知:单片机在ALE下降沿对准地址中心处,故FPGA用ALE下降沿去采样地址;单片机在读信号上升沿读取数据,故FPGA要在读信号下降沿给出数据;单片机在写信号下降沿送出数据,故FPGA在写信号上升沿读取数据。44.FPGA模块调用问题——可参考项目OPU4中528K(V35网管信息)的FPGA设计举例:工程中有相同的4组功能端口,它们实现相同的功能。在实现一组功能端口的功能后,不需要将该组模块复制3遍,只需要将该组模块在顶层模块例化三遍,改变例化端口名即可。

如下,P是同一个功能接口,x和y是整个工程的输入输出端口,由于有四组端口,故在例化时要给不同的变量名,而四组端口调用同一模块,故a和b不变。综合时,例化了多少次,rtl级电路中便有多少个该电路模块,ip核同样例化调用。inputx1,x2,x3,x4;outputy1,y2,y3,y4;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论