- 博客(164)
- 收藏
- 关注
原创 从零开始讲DDR(5)——读懂Datasheet
对于开发人员来说,需要根据实际场景和使用的需要,使用不同厂家,不同型号的DDR,虽然原理上大同小异,但是还是有一些细节上的需要注意的地方,接触一个新的DDR芯片,首先就是需要找到对应的datasheet,而能都读懂datasheet,也是一个硬件工程师的必备技能。
2024-09-22 23:47:53 817
原创 从零开始讲DDR(4)——Xilinx方案
Xilinx UltraScale™架构中的DDR3/DDR4 SDRAM ip核旨在支持高性能的内存接口解决方案。这些ip可以用于将DDR3和DDR4 SDRAM内存类型集成到设计中,提供完整的内存控制器和物理层(PHY)解决方案。
2024-09-22 20:16:58 498
原创 从零开始讲DDR(3)——DDRC与DDRPYH
显然对于一个DDR的使用者来说,我们不想应付这么复杂的初始化过程,这会大大增加我们的开发周期和难度,因此,最好有人可以给我们提供一个封装好的DDR操作接口,让我们只需要处理一些读写相关信号即可,芯片制造商也是这么想的,因此不同的厂商也会提供自己的解决方案
2024-09-20 15:39:11 1056
原创 从零开始讲DDR(2)——DDR的核心技术
我们知道DDR区分于之前的SDRAM最大的点就在于它可以做到“在时钟周期的上升沿和下降沿都能传输数据,这样它的传输速率就比SDRAM快了一倍”。其实要做到这点,背后需要的技术突破体现在很多层面
2024-09-19 21:56:49 1146
原创 从零开始讲DDR(1)——DDR简介
传统的SDRAM只在时钟信号的上升沿传输数据,而DDR可以同时在时钟的上升沿和下降沿传输数据,因此在同样的时钟频率下,DDR内存的传输速率是SDRAM的两倍。在这里我们暂时不关心cpu与DDR之间的联系了,我们聚焦于DDR内存芯片本身,对于一个完整的DDR芯片,我们把它考虑成一个chip的概念。chip不必多说,bank代表的就是区域,如果把DDR理解成一组存放了不同数据的表格,那么Bank(简写B)就是用来区分不同表格的,而row(简写R)表示行地址,Column(简写C)表示列地址。
2024-09-19 16:16:51 949
原创 从零开始讲DDR(0)——DDR的前世今生
内存技术的发展一直围绕着存储速度、容量、功耗和成本的平衡展开,未来随着计算需求的增长和新材料、新工艺的发展,内存技术将继续向更高效、更密集的方向演进。本文 介绍了内存发展的基本历程和DDR的前世今生
2024-09-18 20:36:58 1210
原创 面向对象编程(5)——组合
组合可以通过在一个类中使用其他类的实例来调用这些类的方法或访问它们的属性。组合(Composition)是面向对象编程中的一种设计原则,它与继承相对,通过包含其他类的实例来构建新的类。降低耦合:组合减少了类之间的依赖,因为类只是通过接口与其他类交互,这使得类的修改和扩展更加容易,不会影响到其他类。关系用于描述类与类之间的组合关系。它表示一个类包含另一个类的实例,强调的是对象的组成和属性,而不是继承。单一职责原则:组合有助于将不同的职责分配给不同的类,使每个类只关注特定的功能,从而增强系统的模块化。
2024-07-29 09:13:16 611
原创 面向对象编程(4)——接口与实现
类的实现部分包括私有的(private)和受保护的(protected)方法和属性,它们是类的内部机制,不应被外部直接访问。虽然从技术上讲,所有类的代码(包括实现部分)在类内部是可调用的,但实现的很多部分(如私有方法和属性)对外部代码是不直接可见或可调用的。接口中的方法和属性是可调用和可访问的。是面向对象设计中的一个重要原则,它强调设计类或模块的公共接口时,应只暴露最少的、必要的功能。通过限制公共接口的大小和复杂性,开发者可以更好地控制类的使用方式,防止滥用,确保系统的健壮性和安全性。
2024-07-29 09:12:58 776
原创 面向对象编程(3)——继承
继承(Inheritance)是面向对象编程的一个核心概念,它允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。通过继承,子类可以直接利用父类的属性和方法,避免重复代码,同时也能进行方法的重写和扩展,适应新的需求。静态方法是与类关联的方法,不依赖于实例,而类方法则接受类作为参数,这些方法在继承后可以直接使用或重写。继承使得开发者可以基于现有的类创建新的类,扩展系统功能的同时保持代码的模块化和组织性。子类可以继承父类的属性,意味着子类将拥有父类定义的所有成员变量。
2024-07-28 21:22:58 914
原创 面向对象编程(2)——封装
封装(Encapsulation)是面向对象编程中的一个重要概念,它指的是将数据和操作这些数据的方法封装在一个类中,对外部隐藏类的内部实现细节,只有通过类提供的接口(方法)才能访问和修改这些数据。封装属性的目的是防止外部代码直接访问和修改这些数据,以保护数据的完整性和一致性。方法是类的行为,它们定义了类可以执行的操作。封装方法有助于限制外部对类的行为的直接控制,并可以在方法内部添加额外的逻辑。:封装不仅是为了保护数据的完整性,还可以在方法中添加额外的逻辑以提高系统的安全性和性能,例如输入验证、缓存机制等。
2024-07-28 16:17:36 753
原创 星间链路与星地链路
典型低中轨道双层卫星网络的组网架构如下图所示。其中,将低轨道卫星根据所在的区域划分为若干个卫星集群。低轨道卫星集群通过星间链路与对应的中轨道卫星寻址对接,该链路称为层间星间链路。同时,中轨道卫星之间也会通过星间链路进行数据交互,该链路称为层内星间链路。
2024-07-08 19:50:25 753 1
原创 XDMA原理学习(1)——DMA技术详解
DMA 技术是Direct Memory Access的缩写,其意思是“存储器直接访问”。它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。DMA是所有现代计算机的重要特色,它允许不同速度的硬件设备进行沟通,而不需要依于中央处理器的大量中断负载。否则,中央处理器需要从来源把每一片段的数据复制到寄存器,然后把它们再次写回到新的地方。在这个时间里,中央处理器就无法执行其它的任务。
2024-07-08 19:49:39 2569
原创 卫星网络——Walker星座简单介绍
Walker星座是一种设计用来在多个轨道平面上部署卫星的方式,以便实现对地球的全球或特定区域覆盖。这种设计由John Walker在1970年代提出,它提供了一种系统化的方法来优化卫星的覆盖效率和通信能力
2024-07-05 20:56:37 2419
原创 卫星轨道平面简单认识
在设计轨道平面时,需要综合考虑多种因素,包括卫星的使命、预期的覆盖区域、成本、发射和运维的复杂性等。轨道平面的选择和设计直接影响到卫星系统的性能和经济效益,因此在卫星系统设计初期,轨道平面的规划是关键步骤之一。
2024-07-05 19:34:17 806
原创 python中的线程与进程
在 Python 中,线程(threading)和进程(multiprocessing)虽然都是实现并发编程的手段,但它们在多个方面存在本质的不同和特定的关系。同时,也需要考虑程序的复杂性和维护成本,因为进程间的通信比线程间的通信要复杂。:使用多进程可以绕过 GIL 的限制,因为每个进程有自己的 Python 解释器和内存空间,所以多个进程可以真正并行运行,充分利用多核处理器的计算资源。线程共享同一进程内的内存空间,这使得线程间的数据共享变得容易,但也带来了同步和竞争状态的问题。进程间的通信可以通过。
2024-06-27 21:26:05 835
原创 面向对象编程(1)——概述
面向对象编程(OOP)是一种将程序视为一系列交互的“对象”的编程范式,每个对象都是其特定类的实例。类定义了对象的结构(属性)和可以执行的操作(方法)。这种方法不仅有助于增强软件的可重用性、可维护性和灵活性,还通过封装、继承和多态等核心概念来简化复杂系统的开发和管理。利用类和对象,开发者可以更高效地编写模块化的代码,更容易地修改和扩展已有功能,从而应对日益复杂的软件开发需求。
2024-06-26 22:38:51 704
原创 python中的参数传递
Python中的变量是没有类型的,我们可以把它看做一个(*void)类型的指针,变量是可以指向任何对象的,而对象才是有类型的。这种类型检查是自动进行的,因此在编写代码时你无需声明变量的类型,但这也意味着可能会在运行时遇到类型错误,如果尝试对一个对象执行它不支持的操作。这种策略意味着函数接收的是对象的引用(即地址),但行为上可能看起来像是按值传递或按引用传递,这取决于对象本身是可变的还是不可变的。:对函数内的参数进行的修改是否影响外部的原始数据,取决于传递的数据类型(可变类型或不可变类型)。
2024-06-26 21:10:11 676
原创 python中的导入方式
import 语句的核心功能是模块化和代码重用。通过模块化,你可以将代码分解成独立、互不干扰的部分,每个部分专注于完成特定的功能。这样不仅有助于代码组织,还增加了代码的可维护性和可复用性。
2024-06-25 21:52:07 1033
原创 python中数据的作用域
在 Python 编程中,理解包、模块、类以及它们的作用域是至关重要的,这些概念构成了 Python 项目的结构和组织的基础。模块是包含 Python 代码的文件,可以定义函数、类和变量,而包是包含多个模块的目录,必须包含一个 __init__.py 文件。类则是面向对象编程的基础,允许程序员定义具有特定行为和属性的新对象类型。正确管理这些元素的作用域确保了代码的模块化和封装,有助于提高项目的可维护性和可扩展性。理解和应用这些基础概念是进行有效 Python 编程的关键。
2024-06-24 22:16:30 1313
原创 UltraScale系列底层结构(1)——引言
Xilinx® UltraScale™ 架构是一种革命性的方法,用于创建可编程设备,这些设备能够满足下一代应用程序的巨大 I/O 和内存带宽需求,同时有效地路由和处理带入芯片的数据。基于 UltraScale 架构的设备通过行业领先的技术创新,满足广泛的高带宽、高利用率系统需求。这些设备共享许多构建块,以提供跨产品范围的优化可扩展性,以及众多新的功耗降低特性,以实现低总功耗。
2024-04-01 16:38:46 1237 6
原创 Vivado使用(6)——增量综合( Incremental Synthesis)
增量综合(Incremental Synthesis)是一种在 FPGA 设计过程中应用的综合方法,它允许设计者对设计的一部分进行修改和重新综合,而不需要重新综合整个设计。这种方法可以显著减少综合时间,特别是在进行小的修改或迭代开发时。
2024-04-01 14:55:23 1575
原创 Vivado使用(5)——使用块综合策略(Block Synthesis)
块级综合流程(BLOCK_SYNTH)使用了一种属性,让你可以在全设计的顶层之外的特定层次结构级别上使用某些全局设置和策略,这与自顶向下流程不同。这样,你可以在不影响整个设计的情况下,针对特定的模块或子系统应用优化策略,以达到更好的综合结果。
2024-03-31 22:08:02 1492
原创 Vivado使用(4)——第一类对象(First Class Objects)
Vivado 设计套件中的第一类对象是构建和管理 FPGA 设计的基础,包括设计对象(如 Cell、Net、Pin、Port)、设备对象(如 Site、Tile、Clock Region)和项目对象(如 Project、File)。这些对象提供了对设计的直接控制和查询能力,使得设计者能够有效地操作和优化他们的 FPGA 设计。通过 Vivado 提供的丰富的 Tcl 命令和 API,用户可以实现设计流程的自动化,提高效率和灵活性。
2024-03-30 21:34:59 814 1
原创 Vivado使用(3)——综合属性
在 Vivado® 设计套件中,Vivado 综合能够识别和处理几种类型的属性。这些属性大多数情况下具有相同的语法和行为。这种能力允许设计者通过属性来指示综合工具如何处理特定的设计元素,如实例、信号或模块等。根据属性的不同,这些指示可能包括如何优化特定的逻辑、如何映射到特定的硬件资源,或者是如何为后续流程传递信息。
2024-03-30 15:16:40 1586
原创 Vivado使用(2)——综合运行与OOC
本文着重介绍了vivado中运行:run的创建和使用,介绍了Out-of-Context (OOC)的概念和使用
2024-03-28 22:04:19 1247
原创 Vivado使用(1)——综合的约束与策略
综合是将寄存器传输级(RTL)描述的设计转换成门级表示的过程。Xilinx® Vivado® 综合是以时序为驱动的,针对内存使用和性能进行了优化。本文主要介绍Vivado综合的约束与策略制定
2024-03-28 17:23:07 2561
原创 AXI4-Stream Interconnect IP核(1)——原理
AXI4-Stream Interconnect 是复杂片上系统(SoC)和现场可编程门阵列(FPGA)应用设计中的关键组件,它负责在系统内部不同模块之间路由数据流。AXI4-Stream协议是ARM引入的AMBA(高级微控制器总线架构)规范中的AXI(高级可扩展接口)家族的一部分。AXI4-Stream专为高速、单向数据传输而设计,用于主从组件间的数据传输,无需地址。
2024-03-27 17:11:26 2065
原创 FPGA时钟资源详解(4)——区域时钟资源
本文介绍了FPGA中的区域时钟,内容包含了I/O 时钟缓冲器,区域时钟缓冲器,多区域时钟缓冲器和水平时钟缓冲器
2024-03-25 20:57:50 2027 4
原创 FPGA时钟资源详解(3)——全局时钟资源
本文介绍了FPGA中的全局时钟概念,说明了时钟区域和全局时钟域的相关概念。主要介绍了FPGA中的全局时钟缓冲器BUFG和相关的原语
2024-03-25 15:53:28 3175
原创 FPGA时钟资源详解(2)——Clock-Capable Inputs
Clock-Capable(CC) input在现代 FPGA 设计中扮演着至关重要的角色。这些专用输入引脚允许高性能的时钟信号直接进入 FPGA,确保了时钟网络的精确性和稳定性。通过利用 CC 输入,设计师可以有效地管理 FPGA 内部的时钟分配,优化整个系统的性能。
2024-03-24 21:32:00 1817
原创 BRAM底层原理详细解释(1)
本文介绍了FPGA中的BRAM结构,详细说明了RAMB18E1,RAMB36E1两个原语,解释了为什么在一些情况下,18KB的BRAM配置后总资源数少于18KB,36KB的BRAM配置后总资源数少于36KB
2024-03-23 22:06:36 1529 1
原创 Openflow简单认识
OpenFlow是软件定义网络(SDN)中的一种关键通信协议,用于在SDN控制器和网络设备(如交换机和路由器)之间传递信息。它允许控制器动态地管理网络流量的路由,实现网络的灵活配置和优化。OpenFlow由斯坦福大学的Clean Slate项目首次提出,并由Open Networking Foundation(ONF)进行标准化和推广。
2024-03-17 14:59:48 1187 1
原创 虚拟交换机简单认识
虚拟交换机(Virtual Switch)是一种在软件中实现的网络交换设备,它在物理主机上模拟传统物理交换机的功能。虚拟交换机通常用于虚拟化环境中,允许虚拟机(VMs)之间以及虚拟机与外部网络之间的网络通信。这种技术是现代数据中心和云计算基础设施的关键组成部分,使网络资源的分配和管理变得更加灵活和高效。
2024-03-16 22:19:05 998
原创 SDN网络简单认识(1)——概述
软件定义网络(Software Defined Networking,SDN)是一种网络架构理念,旨在使网络灵活和可编程,从而更好地支持动态和高度可扩展的计算环境。SDN通过抽象网络的控制层(决策层)和数据层(转发层),实现了网络控制功能的中心化,同时也提供了更加灵活的网络配置和管理方式。
2024-03-16 21:25:18 1190
原创 SDN网络简单认识(2)——南向接口
南向接口(Southbound APIs)是软件定义网络(SDN)中的一个关键组成部分,它们定义了SDN控制器与网络设备(如交换机和路由器)之间的通信协议。南向接口允许SDN控制器直接管理和配置数据平面设备,包括下发路由规则、修改流表项以及查询设备状态等操作。这些接口是实现网络控制和管理中心化的基础,使得网络可以以更灵活、动态的方式来适应不断变化的应用需求和流量模式。
2024-03-16 21:23:59 2859
vivado与modelsim的版本匹配
2023-11-02
ug474 7 Series FPGAs Configurable Logic Block User Guide UG474
2023-08-02
matlab实现基于Pluto SDR的OFDM点对点通信系统
2023-08-01
数字中频收发信号流程(发送端+接收端matlab实现)
2023-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人