- 博客(333)
- 资源 (8)
- 收藏
- 关注

原创 基于FPGA的Yolov4 tiny目标检测网络加速器
简介之前实现了基于FPGA的Winograd CNN加速器(VGG16)和基于FPGA的MobileNet v2加速器,但这两个算法在本质上区别不大:一个是VGG16,另一个是轻量级的MobileNet v2,所实现的功能都是图像分类。因此,为了尝试更多的应用,本文在FPGA上实现了一个目标检测网络----Yolov4 tiny。yolo4 tiny的结构是YOLOv4的精简版,属于轻量化模型,参数只有600万相当于原来的十分之一,这类网络不仅能实现对图像的分类任务,还可以找出目标的位置,因此,更加贴近实
2022-02-27 16:47:54
33802
80
原创 【数字IC进阶】整数除3和模3的高效实现
x为16bit无符号整数,要求在尽可能低的延迟下求x除以3的商和余数。:如果想在尽可能快的时间内求出x/3和x%3,一种最容易想到的方法就是设置1个查找表,将每一种可能取值除3和模3的结果存储下来,然后以x为索引查表即可。然而,在本文的问题中,x共有16bit,可能的取值共有216,显然直接用查找表实现不太现实,而且从这么多可能的结果中获取x对应的商和余数,对时序也是一个巨大的挑战。本文在上述思路的基础上,做了一些优化,具体方法如下:假设ax158bx70,则xa∗。
2025-04-19 16:17:23
104
原创 【计算机体系结构】寄存器重命名
寄存器重命名是计算机体系结构中的一个重要概念,旨在消除指令间的假数据冒险,从而提高处理器的并行处理能力。 假数据冒险主要包括写后写(WAW)和读后写(WAR)两种情况,这些假相关会导致指令执行的顺序依赖性,影响处理器的并行执行效率。寄存器重命名的目的是通过映射逻辑寄存器到物理寄存器,允许逻辑上相同的寄存器在不同时间点映射到不同的物理寄存器,从而消除这些假相关
2024-11-24 10:36:41
399
原创 【计算机体系结构】Banyan Network
Banyan 网络是一种内部阻塞结构型的互联网络。采用了一种蝶形的互联结构,节点开关数目远小于Crossbar网络。以16×16 的 Banyan 网络为例,每一级有 N∕2 个开关,共有 log2N 级,开关总数为8*4=32。而N=16的Crossbar网络需要16²=256个开关。 但是Banyan网络中会存在路径冲突,使得有些输出排序得不到实现。目前有许多方式可以消除Banyan 网络的路径冲突与阻塞,例如通过banyan网络与逆banyan网络的串联构成的双banyan互连网络能有效地解决路径的冲
2024-11-15 15:36:55
605
原创 【计算机体系结构】TLB和Cache
在两级页表的虚拟存储系统中,需要访问两次物理内存才能得到虚拟地址所对应的物理地址,而物理内存的访问速度是远远慢于处理器的,为了对该过程进行加速,可以加入一个页表的缓存,该缓存将页表中最近使用的PTE缓存下来,因为它们在以后还可能被继续使用。这样的缓存被称为, TLB中存储页表中最近被使用的PTE,从本质上来讲,。然而,TLB不同于一般的cache,它只有,而至于空间相关性,TLB没有明显的规律。
2024-10-04 14:57:13
1367
原创 【计算机体系结构】虚拟存储器
在早期的时候,由于程序的规模很小,虽然那时候的物理内存也很小,但是也可以容纳下当时的程序。然而,随着技术的发展,应用程序的规模愈来愈大,于是就有了一个难题:应用程序太大,以至于物理内存无法容纳下这样的程序了。通常的做法是将程序分割为许多片段,片段0首先在物理内存中执行,当他执行完成时调用下一个片段1,虽然片段在物理内存中的交换是由操作系统完成的,但是程序员必须手动的对程序进行分割,这是一个费时费力的工作。为了解决这一问题,就有了。
2024-10-03 17:41:41
348
原创 【数字IC/FPGA】使用Verdi对比两个波形
新建容器,依次点击Window --> Dock to --> New Container Window。至此,我们可以看到两个波形被放入了同一个容器,下图中,右下角的分栏符号可以进一步调整窗口的布局。然后在该容器内通过【Tools】 —> 【New WaveForm…然后依次点击【Window】 —> 【Dock to】,选择之前创建的新的容器cmp。如此操作,就可以实现在左边窗口中点击不同的时间,右边的波形也会有同步的变化。在另一个波形窗口加载信号,就可以进行比较了,如下图所示。
2024-07-27 13:50:27
1365
3
原创 【计算机体系结构】缓存的false sharing
当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是。
2024-07-03 22:54:20
475
原创 【数字IC设计】芯片设计中的RDC
在芯片设计中,RDC是的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。
2024-05-12 14:29:47
1117
原创 CUDA编程---共享内存和常量内存
是较大的板载内存,具有相对较高的延迟。是较小的片上内存,具有相对较低的延迟,并且共享内存可以提供比全局内存高得多的带宽。可以把它当作一个。
2024-04-20 22:27:39
1634
原创 CUDA编程---线程束洗牌指令
从Kepler系列的GPU(计算能力为3.0或更高)开始,(shuffle instruction)作为一种机制被加入其中,只要两个线程在相同的线程束中,那么就允许这两个线程直接读取另一个线程的寄存器。。洗牌指令比共享内存有更低的延迟,并且该指令在执行数据交换时不消耗额外的内存。因此,洗牌指令为应用程序快速交换线程束中线程间的数据提供了一个有吸引力的方法。
2024-04-18 22:22:35
1562
原创 CUDA执行模型
GPU架构是围绕一个流式多处理器(SM)的可扩展阵列搭建的。可以通过复制这种架构的构建块来实现GPU的硬件并行。CUDA核心共享内存/一级缓存寄存器文件加载/存储单元特殊功能单元线程束调度器GPU中的每一个SM都能支持数百个线程并发执行,每个GPU通常有多个SM,所以在一个GPU上并发执行数千个线程是有可能的。当启动一个内核网格时,它的线程块被分布在了可用的SM上来执行。线程块一旦被调度到一个SM上,其中的线程只会在那个指定的SM上并发执行。
2024-04-09 23:46:58
1097
原创 CUDA编程模型
是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。CPU和GPU是两个独立的处理器,通过单个计算节点中的PCI-Express总线相连,GPU用来提高计算密集型应用程序中并行程序段的执行速度,CPU则负责管理设备端的资源。CUDA编程的独特优势在于开放的架构特性可以使程序员在功能强大的硬件平台上充分挖掘其并行性,既满足了计算密集型程序的需要,又实现了程序的易读性及便捷性。
2024-04-09 23:09:16
1130
原创 git合并多次提交
Git是一个分布式版本控制系统,它允许开发人员在不同的分支上进行并行开发,并将这些分支合并到主分支或其他分支中。在开发过程中,我们经常会创建多个commit来记录每次的代码变更。有时候我们希望将这些连续的commit合并为一个更有意义的commit,以提高代码的可读性和维护性。
2024-03-02 22:45:06
804
1
原创 【数字IC设计】Verilog计算x/255的商和余数
已知x是16位无符号整数,求x除以255的余数和商。尽量降低实现方式的硬件开销(包括面积和时序)
2023-12-23 19:14:12
1043
原创 Git Cherry Pick的使用
其中,<commit>是要应用的提交的哈希值或分支名。该命令会将指定的提交应用到当前分支上,并创建一个新的提交。
2023-10-16 22:53:57
637
原创 【数字IC设计】VCS门级网表仿真
本文参考自。除了RTL仿真以外,在IC设计过程中还会进行门级网表的仿真。当设计代码功能仿真通过之后,我们便使用Design Compiler工具对其进行逻辑综合,将RTL代码转化为由与、或、非等门电路和触发器组成的电路,称为门级网表(netlist)。门级网表中包含了电路的实际信息,例如逻辑门单元的扇入扇出系数,延迟等等。对门级网表进行仿真可以发现由于引入这些实际信息所暴露出的错误,因此是必要的。本文以一个alu设计为例,演示门级网表仿真的流程。
2023-10-15 18:52:01
3989
3
原创 【数字IC设计】利用Design Compiler评估动态功耗
switching power中,clock_network在未开启门控时钟时为0,开启后为9.4489e-3,而register和combinational在未开启门控时钟时为7.0319e-04和2.7926e-03,开启后为4.8827e-04和3.3902e-04。这符合我们的预期,因为en为1的概率越高,counter计数器翻转次数越多,从而动态功耗越大。由于是动态功耗,因此其值与信号翻转的次数相关,因此,我们改变en信号为高的概率(后,可以得到saif文件。可以看到,此时动态功耗为。
2023-10-14 22:41:00
1007
原创 【数字IC设计】DC自动添加门控时钟
数字电路的工作动态功耗主要是由于带来的,为了降低芯片内部功耗,的方案应用而生。作为低功耗设计的一种方法,门控时钟是指。在下图中,展示了加入门控时钟前后电路的变化,由图可知,采取门控时钟技术后,。因此,插入门控时钟并不总是能带来面积上的收益,需要综合数据位宽来考虑。这里的决定因素就是D的,若D的位宽很小,那么可能插入的CG面积比原来的MUX大很多,而且节省的功耗又很少,得不偿失。只有当D的位宽超过了一定的bit数后,插入CG的收益才会比较大。关于这个临界值,不同的工艺可能不同,但是。
2023-10-14 10:59:03
12824
原创 【数字IC/FPGA】基于握手的数据广播
本文介绍了一种基于握手协议的数据广播方式。事实上,该场景可以简化为模块的一对多握手,并且下游的各个模块可以独立的完成握手(与之相对的是下游模块一起完成握手,相比之下,下游各个模块可以独立完成握手显然更加普适、灵活)。
2023-09-23 11:11:37
421
原创 Verdi实现信号的平移
在Verilog/System verilog中,可以实现延迟指定时间的功能,而在使用verdi查看信号波形并进行分析时,同样也可以实现类似的功能。:这种信号平移是有其应用场景的,例如,在某些仿真模型中,为了模拟实际的信号延迟,信号的实际跳变沿往往和时钟的上升沿不是完全对齐的,而是存在一定时间的错开,这样,在将该信号与clk相与时,就会出现毛刺,从而干扰后续的分析)下面,以时钟信号clk为例,展示verdi对信号进行的实现方法。
2023-09-16 10:45:31
2933
原创 【数字IC/FPGA】Verilog中的force和release
可以看到,第200-400ns,加法器实际的输入a和b被固定为33和66,其值不再与testbench中的a, b绑定。另外,图中的紫色三角形分别表示该信号被force和release的时刻,被force强制指定的值,在显示的时候,前面会有一个^符号,例如上图中的^如上所示,正常情况下,u_adder模块的a和b端口由testbench中的a和b信号驱动,然而,在时间为200ns处,u_adder模块的输入u_adder.a和u_adder.b被强制固定为33和66,如下代码所示。在Verilog中,将。
2023-09-09 14:49:44
4911
原创 【数字IC/FPGA】Verilog中的递归调用
在Verilog2001中,模块的是可能的,引用下面的一段话(出自上面的参考文章)下面,我们将以和两个例子为例,说明模块递归调用在设计电路时的用法。
2023-09-09 11:44:09
881
原创 Xilinx AXI VIP使用教程
Xilinx提供了用于验证AXI相关设计的AXI VIP(AXI Verification IP),它可以对自己设计的AXI接口模块进行全方位的验证(如使用VIP的Master、Passthrough、Slave三种模式对自己写的AXI接口进行仿真验证),提前规避和发现一些不满足AXI总线规范的设计问题。本文以Master AXI VIP为例,介绍其使用方法。
2023-08-20 10:57:27
1759
原创 约束综合中的逻辑互斥时钟(Logically Exclusive Clocks)
逻辑互斥时钟是指设计中活跃(activate)但不彼此影响的时钟。常见的情况是,两个时钟作为一个多路选择器的输入,并根据sel信号决定哪一个时钟被激活。一个处理逻辑互斥时钟的重要指导思想就是逻辑互斥时钟不应该在mux以外的地方发生交互。如上图所示,设计中共有两个时钟,分别是CLKA和CLKB,两个时钟是多路选择的,某一时刻,只有一个时钟对电路起作用。一种约束的方法是使用约束,即假定SEL恒为0或者1,然后进行时序分析。flop-1发起时钟flop-2捕获时钟CLKACLKACLKBCLKA。
2023-08-13 19:12:37
1409
原创 【数字IC设计】VCS仿真DesignWare IP
DesignWare是SoC/ASIC设计者最钟爱的设计IP库和验证IP库。它包括一个独立于工艺的、经验证的、可综合的虚拟微架构的元件集合,包括逻辑、算术、存储和专用元件系列,超过140个模块。DesignWare和 Design Compiler的结合可以极大地改进综合的结果,并缩短设计周期。
2023-07-30 15:17:00
6505
原创 fwft fifo和standard fifo
排除上面两种情况,若此时rd_en信号有效,为了在下一个周期将下一个数据送到fifo的读端口,需要直接读取rd_addr+1处的数据。,即rd_en信号有效且fifo非空时,数据会在下一个周期出现在fifo的读数据端口。而后者,即fwft fifo的。然而,这种组合逻辑输出的方式对时序并不友好,因此,本文给出了更加时序友好的fwft fifo实现方式。,也就是说,rd_en信号有效的当拍,数据就会出现在读端口上。实现fwft模式同步fifo的一个简单方法就是将。fifo共有两种,分别是。
2023-07-29 21:26:50
2176
原创 Verdi分析有限状态机
该图给出了状态机的整体信息,包括输入、输出信号,时钟信号的名称及其极性,复位条件以及状态信号、初始状态和状态表。按住shift,选中S1, S11和S110三个状态,然后点击Tools–>Partial FSM。最后,点击FSM,选中State Animation,然后点击Analysis Report…为了简单起见,我们以一个序列检测器为例,介绍nState的使用过程。栏则给出了每一个状态在仿真中出现的次数。此时,会显示所勾选的三项的相关信息,如下图所示。用于有限状态机(FSM)。方框中的状态机,得到。
2023-07-15 14:30:00
2094
原创 VCS和Verdi联合仿真的Makefile脚本编写
命令生成filelist.f,该文件记录了所有参与仿真的RTL文件的路径,在上面的makefile脚本中,我们可以通过。makefile脚本编写如上图所示。则用于调用verdi工具显示波形,最后,命令用于对过程中所产生的文件进行清楚。是必要的,否则会报错,具体可参见文章。make verdi并添加波形。命令用于编译RTL代码,
2023-07-13 13:45:00
1579
原创 握手信号的打拍
在数字电路的设计中,对关键路径的处理方法之一就是,然而,对握手信号插入寄存器则需要进行特殊的处理,否则可能导致数据传输的错乱,严重影响电路的功能。如图所示,为了阐述对握手信号打拍的处理方式,我们给出了下图所示的简化模型,其中,上游的握手信号包括和,而下游的握手信号则包括和,其数据流向如图中箭头所示。
2023-06-17 21:22:54
1787
原创 基于FPGA的VGG16卷积神经网络加速器
VGG在2014年由牛津大学Visual GeometryGroup提出,获得该年lmageNet竞赛中Localization Task(定位任务)第一名和 Classification Task (分类任务)第二名。与AlexNet相比,VGG使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5x5卷积核,从而在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。
2023-05-12 10:21:25
5335
2
原创 频域抽取FFT(DIF-FFT)的C语言实现
此处以基2频域抽取FFT为例,讲述频域抽取FFT的原理。假设FFT的长度为N2m,我们将序列xXkn0∑N/2−1xnWNnknN/2∑N−1xnWNnknnN/2Xkn0∑N/2−1xnWNnkn0∑N/2−1xnN/2WNknN/2由于WNknN/2WNkn⋅WNN/2−WNnkXk。
2023-04-23 13:28:15
2101
原创 Latex参考文献引用
使用\bibitem格式。该方法不能将参考文献直接放在.bib文件中引用,而是将\bibitem{}命令(花括号里写正式的引文)写在论文的.tex文件中。
2023-03-02 10:15:59
4344
原创 【visio使用技巧】图片导出pdf时去掉多余空白
在visio导出pdf格式的图片时,往往会存在多余的白边,本文讲述如何去掉这些多余的空白
2023-02-12 21:55:19
10948
3
原创 【数字IC/FPGA】百度昆仑芯手撕代码--累加器
已知一个加法器IP,其功能是计算两个数的和,但这个和延迟两个周期才会输出。现在有一串连续的数据输入,每个周期都不间断,试问最少需要例化几个上述的加法器IP,才可以实现累加的功能。
2023-02-11 13:45:00
1780
1
基于FPGA的HLS CNN加速器
2022-03-26
pingpang_block_mm.rar
2020-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人