![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入浅出玩转FPGA
文章平均质量分 85
周猿猿
学习,当自强不息,坚持不懈,矢志不渝
展开
-
【深入浅出玩转FPGA学习15----------时序分析基础】
PCB板上的信号通过任何一个元器件都会产生一定的延时,FPGA的信号通过逻辑门传输也会产生延时,PCB的信号走线有延时,FPGA的信号走线也有延时。数据分析的起点是源寄存器reg1,终点是目的寄存器reg2,那么图4.7中的Tco便是数据传输的路径,它包括了数据在源寄存器reg1内部传输的延时uTco、寄存器到寄存器之间的延时(即数据的走线延时与逻辑延时之和)Tr2r,也就是Tco=uTco+Tr2r。上面列举的是一个理想的时钟波形,而实际时钟信号的分析要比这复杂的多。...原创 2022-07-28 20:53:44 · 346 阅读 · 0 评论 -
【深入浅出玩转FPGA学习14----------测试用例设计2】
对于这个设计,虽然它已经达到了可以复用的目的,但是在自动化判断方面做的还不够。比如,从图3.6中可以看到,MCU在读取外部存储器过程中,读选通信号RDn拉低后25ns内,P0数据总线上数据必须保持有效并稳定,该状态要一直保持到RDn拉高为止。该测试脚本要模拟MCU读/写外部扩展RAM的时序。它将作为一个单独的测试模块,只要在测试主文件中例化好接口,就可以被调用。常见MCU读/写外部扩展RAM的时序如图3.6和图3.7所示。根据测试脚本模拟出来的读/写时序波形分别如图3.8和3.9所示。......原创 2022-07-28 20:04:38 · 301 阅读 · 0 评论 -
【深入浅出玩转FPGA学习13-----------测试用例设计1】
在输入被乘数后,启动乘法运算器,直到FPGA有效运算输出标志位done位置时,测试脚本将乘数、被乘数以及乘积保存到txt文本中,如图3.5所示,并且判断该输出是否正确,输出判断结果。因此,在Testbench的用例设计中,使用了遍历测试和随机测试,对发送出去的数据和接收到的数据进行检测对比,最后测试者只要根据打印输出的信息即可判断源代码的设计是否符合要求。对于这两种不同的测试观测手段,虽然波形观测较直观,但是该用例中所有512个结果都通过肉眼来观测肯定让人看花眼,而且还很浪费时间。...原创 2022-07-27 20:56:28 · 831 阅读 · 0 评论 -
【深入浅出玩转FPGA学习12----Testbench书写技巧2】
Testbench使用的是硬件语言,而其依赖的环境却是基于PC的软件平台,这也就决定了其独特的代码风格。有时的的确确是以一个软件式的顺序方式在给待测试硬件代码做测试,但是写出来的Testbench代码中却时常布满了并行执行的陷阱。由于Testbench的运行是基于PC机的,处理的时候也是分时服用的,所以这两个always块也会先后执行。在第1个always块count增加的同时第2个always块也在执行,那么最后显示的count值是count增1之前的数值。Testbench也是能够做到可重用化的设计。.原创 2022-07-24 20:21:30 · 467 阅读 · 0 评论 -
【深入浅出玩转FPGA学习11----Testbench书写技巧1】
在编写Testbench时,关于变量的定义常犯的错误就是将一个定义好的全局变量应用到了两个不同的always块中(如EX1C),那么由于这两个always块独立并行的工作机制,很可能会导致意想不到的后果。EX1Cintergeri;for(i=0;i...原创 2022-07-23 20:55:24 · 559 阅读 · 0 评论 -
【深入浅出玩转FPGA学习10------简单的Testbench设计】
总之,Tesbench的设计是多种多样的,它的语法也是很随意的,不想RTL级设计代码那么多讲究,它是基于行为级的语法,很多高级的语法都可以在脚本中使用。但是对于大规模的设计,用波形产生激励是不现实的,观察波形的工作量也是可想而知的。对于FPGA的仿真,使用波形输入产生激励是可以的,观察波形输出以验证测试结果也是可以的,波形也许是最直观的测试手段,但绝不是唯一手段。仿真测试的重要性可见一斑。所谓Testbench,即测试平台,详细的说就是给待验证的设计添加激励,同时观察它的输出响应是否符合设计要求。...原创 2022-07-21 20:53:52 · 1025 阅读 · 0 评论 -
【深入浅出玩转FPGA9------经验点滴】
因此,在PLL时钟资源充裕的情况下,统一使用PLL输出时钟作为内部逻辑的时钟,而不使用PLL的输入作为内部时钟,这样是为了防止内部的各个时钟之间出现不期望的相位差,同时也发现PLL的输人时钟驱动内部逻辑的clocknetworklatency相对要比PLL输出的时钟驱动内部逻辑的clocknetworklacency大得多。这个器件的全局时钟网络对于我们的实例还是绰绰有余的,但是一个大的系统,时钟交错,高扇出的信号层出不穷,那么对于全局时钟信号的掌控就需要格外小心了。...原创 2022-07-19 21:30:58 · 441 阅读 · 0 评论 -
【深入浅出玩转FPGA8------亚稳态】
所有数字器件(如 FPGA)的信号传输都会有一定的时序要求 ,从而保证每个寄存器将捕获的输入信号正确输出。 为了确保可靠的操作 ,输入寄存器的信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定.并且持续到时钟沿之后的某段时间(寄存器的保持时间Tb)之后才能改变,而该寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco)。如果数据信号的变化违反了Tsu或者Th的要求,那么寄存器的输出就会处于亚稳态。此时,寄存器的输出会在高电平1和低电平0之间盘旋一段时间,这也意味着寄存器的输出达到原创 2022-07-11 14:45:39 · 518 阅读 · 0 评论 -
【深入浅出玩转FPGA学习7------基于FPGA的跨时钟域信号处理】
在逻辑设计领域,只涉及单个时钟域的设计并不多,尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信 ,异步时钟域所涉及的两个时钟之间可能存在相位差也可能没有任何频率关系,即通常所说的不同频不同相 I。如图所示是一个跨时钟域的异步通信示意图,发送域和接收域的时钟分别是clk_a和clk_b。这两个时钟频率不同,并且存在一定的相位差。 对于接收域而言,来自发送域的信号data._a2b有可能在任何时刻变化。对于上述的异步时钟域通信 ,设计者需要做特殊的处理以确保数据可靠的传输。 由于两个异步原创 2022-07-11 13:39:58 · 1367 阅读 · 0 评论 -
【深入浅出玩转FPGA学习6------FPGA重要设计思想及工程应用】
所谓速度,是指整个工程稳定运行所能够达到的最高时钟频率,它不仅和FPGA内部各个寄存器的建立时间、保持时间以及FPGA与外部器件接口的各种时序要求有关,而且还和两个紧邻的寄存器间(有紧密逻辑关系的寄存器)的逻辑延时、走线延时有关。所谓面积,可以通过一个工程运行所消耗的触发器(FF)、查找表(LUT)数量或者等效门数量来衡量。速度和面积始终是一对矛盾的统一体。速度的提高往往需要以面积的扩增为代价,而节省面积也往往会造成速度的牺牲。因此,如何在满足时序要求(速度)的前提下最大程度地节省逻辑资源(面积)是摆在每原创 2022-07-06 15:50:12 · 1073 阅读 · 1 评论 -
【深入浅出玩转FPGA学习5-----复位设计】
FPGA设计中常见得复位方式即异步复位与同步复位。所谓异步,是指复位信号与系统时钟信号的触发可以在任何时刻,二者相互独立。下面给出异步复位的一段代码:下图是上面代码综合后的RTL视图,可以看到FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的设计中,这个端口一般接低电平有效的复位信号rst_n,即使设计中是高电平复位,实际综合后也会把异步复位信号反向后接到这个CLR端。下面给出同步复位的一段代码:代码综合后的RTL视图,和异步复位相比,同步复位没有用到寄存器的CLR端口,综合出来的实际电路只原创 2022-07-01 21:31:09 · 1166 阅读 · 0 评论 -
【深入浅出玩转FPGA学习4----漫谈状态机设计】
硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机的思想。简单的说,状态机就是通过不同的状态迁移来完成一些特定的顺序逻辑。硬件的并行性决定了用Verilog描述的硬件实现(譬如不同的always语句)都是并行执行的,那么如果希望分多个时间完成一个任务,怎么办?也许可以用多个使能信号来衔接多个不同的模块,但是这样做多少显得有些繁琐。状态机的提出就会大大简化这一工作。下面举一个SRAM控制的例子来说明原创 2022-07-01 10:43:20 · 536 阅读 · 0 评论 -
【深入浅出玩转FPGA学习3-----基本语法】
大多数的FPGA是基于4输入LUT的结构,本文就是通过观察Quartus II的Technology Map Viewer来探讨4输入LUT。下面的代码只是实现一个很简单的4输入与功能,每个时钟的上升沿锁存一次4个输入的与操作结果即作为输入。如图所示,从Quartus II的Technology Map Viewer里可以看出这个设计耗用了FPGA内部一个4输入的LUT和一个触发器。下面再看看5输入与操作编译后的资源消耗如何呢?如图所示。两个4输入LUT和一个触发器,看到这,大家就应该明白FP原创 2022-06-29 20:04:14 · 615 阅读 · 0 评论 -
【深入浅出玩转FPGA学习2----设计技巧(基本语法)】
所谓可综合的Verilog语法,是指硬件能够实现的一些语法。常用的RTL语法结构如下:模块声明:module…endmodule.端口声明:input,output,inout(inout的用法比较特殊,需要注意)。信号类型:wire,reg,tri等,integer常用于for语句中(reg,wire是最常用的,一般tri和integer用在测试脚本里)。参数定义:parameter。运算操作符:各种逻辑操作符、移动操作符、算数操作符大多是可综合的(注:=== 与 !==是不可综合的)比较判断原创 2022-06-29 19:16:08 · 567 阅读 · 0 评论 -
【深入浅出玩转FPGA学习1-------基础普及】
FPGA强化学习-------基础普及初始FPGAFPGA与ASICFPGA与CPLDAltera与XilinxVerilog与VHDLFPGA的基本结构应用领域开发流程初始FPGA20世纪60年代中期,TI公司大量生产了通用IC,如分别面向商用和军用的74系列和54系列。20世纪80年代,出现了可编程逻辑器件(PLD),如SPLD和CPLD,它们与ASIC相比,具有可重配置性和较短的开发调试时间,但实现的功能和电路都相对简单。为了弥补这一需要,Xilinx公司推出了第一块现场可编程逻辑器件(FPGA)原创 2022-05-27 21:04:58 · 1038 阅读 · 0 评论