- 博客(188)
- 收藏
- 关注
原创 从零开始讲DDR(7)——modelsim独立仿真DDR4
本文主要内容为DDR4 MIG ip核仿真,modelsim独立仿真DDR4。在进行DDR仿真的时候,我们会面临一个以往常规仿真不存在的问题:DDR本身并不是一个我们通过RTL代码设计出来的部件,常规的模块或者IP仿真,都是基于RTL代码就能进行的,但是回顾一下我们DDR的开发流程,调用的IP核也只是MIG ip,其本质是一个DDRC+DDRPYH的组合,并不能模拟任何DDR本身的行为,因此,在进行仿真之前,我们首先要做的就是获取DDR的仿真模型。
2025-01-12 17:02:32
1404
原创 UltraScale系列底层结构(5)——时钟架构
在 7 系列 FPGA 中的区域时钟缓冲器被新的时钟缓冲器所取代,这些新时钟缓冲器具有更广泛的全局时钟分布能力,同时能够自动利用局部时钟缓冲器进行时钟的局部分配。字节通道时钟输入(DBC 和 QBC)引脚对是专用时钟输入,用于直接驱动位片(bit slices)中的源同步时钟,在 I/O bank 中工作。具体来说,在当前选择的时钟在 S0 和 S1 变化后从高电平转换到低电平时,输出保持低电平,直到另一个时钟(即待选择的时钟)从高电平转换到低电平。此时,新的时钟开始驱动输出。
2024-12-15 23:40:30
237
原创 ModelSim基本命令解析
ModelSim 是一个强大的硬件描述语言(HDL)仿真工具,支持 TCL 脚本 和命令行操作来控制设计的编译、仿真和调试。以下是 ModelSim 的一些基本命令,分为 设计库管理、编译、仿真控制、波形查看 和 调试 等类别。
2024-11-18 15:17:04
1304
2
原创 SystemVerilog学习——类的继承
通过继承,子类可以继承父类的属性(成员变量)和方法(成员函数),并且可以覆盖父类的方法,也可以新增自己的属性和方法。子类可以重载父类的方法,也可以覆盖父类的方法。子类会继承父类的所有公共和保护成员,并可以重写父类的方法,也可以添加自己的成员。:通过继承,子类可以实现不同的行为来覆盖父类的行为,这对于在仿真中实现不同类型的对象非常有用。:子类不能访问父类的私有成员,尽管它们可以在类内部定义和使用自己的私有成员。:子类自动继承父类的成员变量和方法,除非子类重写了这些方法或成员。:子类可以重写父类的方法,通过。
2024-11-15 23:40:30
1354
原创 SystemVerilog学习——构造函数new
构造函数,用于创建类的实例(即对象)。它在面向对象编程(OOP)中起着重要作用,负责实例化一个对象并进行初始化。构造函数,那么 SystemVerilog 会自动提供一个默认构造函数,这个默认构造函数会将类的所有成员变量初始化为默认值(如数字类型初始化为。这是因为类的对象是动态创建的,并不直接存储在栈上,而是存储在堆中。在 SystemVerilog 中,类的实例化(即对象创建)并不会自动调用。因此,为了确保类的对象正确地创建和初始化,必须显式调用。类的对象(即类的实例)需要显式调用。
2024-11-15 23:26:50
1147
原创 SystemVerilog学习——虚拟接口(Virtual Interface)
虚拟接口 是 SystemVerilog 中的一种强大特性,它允许类引用接口类型的变量,并在运行时绑定不同的接口实例。它解耦了类和接口之间的依赖,使得类能够通过接口定义与信号进行交互,而不关心接口的具体实现。在仿真和验证中,虚拟接口广泛用于动态绑定接口实例,增强了测试环境的灵活性和可重用性。
2024-11-13 20:41:35
1226
原创 SystemVerilog学习——mailbox
在 SystemVerilog 中,mailbox 是一种用于线程间通信的同步数据结构,它允许不同的进程(任务或线程)通过 put 和 get 操作传递数据。mailbox 特别适用于生产者-消费者模式,其中一个进程负责将数据放入 mailbox(通过 put),而另一个进程负责从中取出数据(通过 get)。这种机制使得在并行仿真中,可以方便地在多个任务或进程之间传递消息。
2024-11-13 16:27:17
891
原创 UltraScale系列底层结构(3)——URAM概述
在UltraScale+™ 器件中,除了我们在常规熟悉的BRAM资源以外,还额外提供了URAM(UltraRAM)资源。UltraRAM 是一种单时钟同步操作的高密度存储器,每个 UltraRAM 块可存储 288 Kb 数据,配置为 4K x 72 位的存储单元,其容量是 Block RAM 的八倍。虽然 UltraRAM 内部使用单端口存储单元,但通过在一个时钟周期内顺序执行端口 A 和端口 B 的操作,实现了双端口功能。
2024-10-20 23:51:24
1600
原创 PCIe配置篇(2)——如何进行配置操作(二)
内存访问被映射到配置请求的地址范围内,生成一个配置请求,不再需要两步操作。这意味着,当CPU发起对PCIe配置空间的访问时,它只需执行一个内存读或写操作,而不需要先通过配置地址端口(如传统PCI机制中的0xCF8端口)指定目标地址,然后通过配置数据端口(如0xCFC端口)进行访问。在一个单 RC 的系统中,Host-Bridge 的次级总线号应该被固定为 0,也就是它的可读可写的次级总线号寄存器从一复位就被强制置为0,或者说,Host-Bridge 知道它访问到的第一个总线一定是 Bus 0。
2024-10-08 13:33:00
1588
原创 PCIe配置篇(1)——如何进行配置操作(一)
我们基本了解了配置操作的主要参与者,被配置的对象是设备中的功能(Function),每个功能(Function)会有一个自己的唯一标识BDF。配置的发起者是总线与系统处理器的中介——RC。需要配置的配置地址空间里可以兼容PCI协议,此外对于PCIe做了一定的拓展。
2024-10-07 20:35:46
2147
原创 PCIe配置篇(0)——地址空间
这个时候,聪明的人们发现,CPU本身就有一块需要频繁进行数据交互的区域:内存(memory),我们直接把对外设的操作映射成对内存的操作,这样不是更方便了吗,让MMU到时候把对外设的操作转外设不就行了,从CPU的视角,所有的操作就都是对于内存的操作了(别管他是物理的还是虚拟的)。那么CPU如何高效地指挥外设就显得很重要了,最简单的方式,CPU直接把所有的控制信息线输出给外设,这种方式最直接也最愚蠢,当外设数量很多,这显然不是一种好的方式,设计复杂,灵活性差。,这是后话,我们稍后再聊。
2024-10-07 19:03:40
1144
原创 从零开始讲PCIe(11)——数据链路层介绍
数据链路层这一层的逻辑是用来负责链路管理的,它主要表现为 3 个功能TLP 错误纠正、流量控制以及一些链路电源管理。它是通过如图 2-24 所示的DLLP(Data Link Layer Packet)来完成这些功能的。
2024-10-06 15:50:29
1156
原创 从零开始讲PCIe(10)——事务层介绍
当数据包在各个路由设备(称为服务点)中传递时,数据包的出口端口将被锁定,意味着在路径解锁之前,任何其他数据包都无法沿该方向传递。这种锁定机制最早在PCI规范中提出,原因是当时的规范编写者预计PCI有可能取代处理器总线,因此在PCI规范中加入了处理器在总线上可能需要执行的操作(如锁定事务)的支持。如果完成方在处理过程中遇到问题,它将返回一个没有数据的锁定完成数据包(因为原始的读取请求应该会返回数据,如果没有数据就意味着出现了问题),并且状态字段会指示该错误的相关信息。内存读取请求中的一个重要部分是目标地址。
2024-10-06 15:06:22
1157
1
原创 从零开始讲PCIe(9)——PCIe总线体系结构
总体来说,设备发出的请求或完成数据包的内容首先在事务层(Transaction Layer)中组装,这个过程基于设备核心逻辑提供的信息,这些信息有时也被称为软件层(虽然规范中没有使用这个术语)。当数据包传递到数据链路层(Data Link Layer)时,会在数据包中添加额外的信息,以便在相邻的接收端进行错误检查,并且数据包的副本会在本地存储,以便在发生传输错误时能够重新发送。分层方法对硬件设计者是很有好的,因为如果逻辑划分得当,在迁移到新版本的PCIe规范时,可以只改变现有设计的某一层,而不影响其他层。
2024-10-06 15:06:05
956
原创 从零开始讲PCIe(8)——PCIe拓扑与组件
从软件角度来看,根复合体内部的总线结构会被认为是一个标准的PCI总线,尽管实际上可能并不是物理的PCI总线,但它被设计为对软件呈现为PCI拓扑的一部分,以保持与旧版PCI软件的兼容性。这是由于其使用了非常高的传输速度。无论是根复合体内部的总线,还是交换机的多个端口,系统会通过与PCI相似的方式将其呈现给软件,使得传统的PCI枚举和配置流程能够继续使用。总体而言,根复合体不仅在物理上位于PCIe拓扑的顶部,而且在逻辑上也是整个PCIe系统的控制中心,它与系统中的所有PCIe设备建立连接,协调它们之间的通信。
2024-10-06 14:40:34
1671
原创 从零开始讲PCIe(7)——PCIe总线基本概念
PCI Express(PCIe)代表了从前代并行总线模型的重大转变。作为一种串行总线,它在设计上与早期的串行技术(如InfiniBand或Fibre Channel)更为相似,但在软件上保持了与PCI的完全向后兼容性。与许多高速串行传输一样,PCIe采用了双向通信,能够同时发送和接收信息。
2024-10-06 14:39:52
1429
原创 从零开始讲PCIe(6)——PCI-X概述
PCI-X 在硬件和软件上与 PCI 具有向后兼容性,同时提供了更高的性能和效率。它使用与 PCI 相同的连接器格式,因此 PCI-X 设备可以插入 PCI 插槽,反之亦然。而且,PCI-X 采用相同的配置模型,因此在 PCI 系统上运行的设备驱动程序、操作系统和应用程序也可以在 PCI-X 系统上运行。
2024-10-05 13:58:36
1054
原创 从零开始讲PCIe(5)——66MHZ的PCI总线与其限制
为提高性能,PCI通过增加总线位宽(从32位到64位)和提高时钟频率(从33 MHz到66 MHz)来提升带宽,达到每秒533 MB的传输速度。然而,PCI的并行架构在更高频率下受到电气负载和信号延迟的限制,特别是在66 MHz时,其扩展能力和信号完整性遇到了瓶颈。为了支持更多设备,系统通常需要增加PCI桥接器和更多总线,这不仅提高了成本,还占用了更多板载空间。此外,PCI的并行设计导致带宽共享问题,多个设备同时工作时总线带宽被分摊,影响了整体性能。
2024-10-05 13:57:40
1390
原创 从零开始讲PCIe(4)——PCI总线的地址空间分配
PCI架构支持三种地址空间,如图1-10所示:内存地址空间(Memory Map)、I/O地址空间(I/O Map)和配置地址空间(PCI Configure Space)。在x86处理器中,处理器可以直接访问内存和I/O空间。
2024-10-04 15:03:58
2790
原创 从零开始讲PCIe(3)——Functions&Device&Bus&System
功能(function):是PCI设备中独立的功能单元,最多可以有8个功能。设备(device):是物理设备,连接在PCI总线上,可能包含一个或多个功能。总线(bus):是设备和系统通信的通道,一个系统可以有多个总线,每个总线最多可以有32个设备。系统(system):是整个计算平台,包括CPU、内存、多个PCI总线和连接的设备与功能。
2024-10-04 13:33:14
1868
原创 从零开始讲PCIe(2)——PCI总线传输模型与机制
在之前的内容中,我们已经对PCI有了一些基本的认识,我们了解了PCI的一般架构,标准传输周期等相关的内容,接下来我们会进一步了解PCI具体的传输模型与机制
2024-10-04 13:30:20
2201
原创 从零开始讲PCIe(0)——外设与外设总线
凭借这些优势,PCI很快成为PC中标准的外围总线。ISA总线适用于设计时的286 16位设备,但对于更新的32位设备及其外设而言,ISA在带宽和功能上都有所不足,尤其是即插即用等改进功能的需求日益增加。这些设备可以是输入设备、输出设备、存储设备或通信设备等,外设(外围设备)通过输入、输出、存储和通信等方式帮助计算机与用户和其他设备进行交互,使计算机成为更通用、更灵活的工具。这种演变反映了技术上的妥协和改进:为了支持更高的传输速度和频率,必须减少总线上的设备数量或者改进总线架构,如从共享总线转向点对点互连。
2024-10-03 21:48:59
1026
原创 从零开始讲PCIe(1)——PCI概述
我们已经知道了PCIe是一种外设总线协议,其前身是PCI和PCI-X,虽然PCIe在硬件上有了很大的进步,但其使用的软件与PCI系统几乎保持不变。这种向后兼容性设计,目的是使从旧设计到新设计的迁移更加顺畅,通过尽可能简单、低成本的方式进行软件更改。因此,旧的PCI软件在PCIe系统中可以不做任何更改地运行,而新的软件也会继续使用相同的操作模型。虽然现在PCI和PCI-X已经基本退出市场,但是PCIe中的很多设计和机制都是源自于此,所以,理解PCI及其操作模型将有助于更好地理解PCIe的工作原理
2024-10-03 21:48:33
2146
原创 从零开始讲DDR(5)——读懂Datasheet
对于开发人员来说,需要根据实际场景和使用的需要,使用不同厂家,不同型号的DDR,虽然原理上大同小异,但是还是有一些细节上的需要注意的地方,接触一个新的DDR芯片,首先就是需要找到对应的datasheet,而能都读懂datasheet,也是一个硬件工程师的必备技能。
2024-09-22 23:47:53
2472
1
原创 从零开始讲DDR(4)——Xilinx方案
Xilinx UltraScale™架构中的DDR3/DDR4 SDRAM ip核旨在支持高性能的内存接口解决方案。这些ip可以用于将DDR3和DDR4 SDRAM内存类型集成到设计中,提供完整的内存控制器和物理层(PHY)解决方案。
2024-09-22 20:16:58
1930
原创 从零开始讲DDR(3)——DDRC与DDRPYH
显然对于一个DDR的使用者来说,我们不想应付这么复杂的初始化过程,这会大大增加我们的开发周期和难度,因此,最好有人可以给我们提供一个封装好的DDR操作接口,让我们只需要处理一些读写相关信号即可,芯片制造商也是这么想的,因此不同的厂商也会提供自己的解决方案
2024-09-20 15:39:11
3020
1
原创 从零开始讲DDR(2)——DDR的核心技术
我们知道DDR区分于之前的SDRAM最大的点就在于它可以做到“在时钟周期的上升沿和下降沿都能传输数据,这样它的传输速率就比SDRAM快了一倍”。其实要做到这点,背后需要的技术突破体现在很多层面
2024-09-19 21:56:49
2478
原创 从零开始讲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
3243
1
原创 从零开始讲DDR(0)——DDR的前世今生
内存技术的发展一直围绕着存储速度、容量、功耗和成本的平衡展开,未来随着计算需求的增长和新材料、新工艺的发展,内存技术将继续向更高效、更密集的方向演进。本文 介绍了内存发展的基本历程和DDR的前世今生
2024-09-18 20:36:58
2048
原创 面向对象编程(5)——组合
组合可以通过在一个类中使用其他类的实例来调用这些类的方法或访问它们的属性。组合(Composition)是面向对象编程中的一种设计原则,它与继承相对,通过包含其他类的实例来构建新的类。降低耦合:组合减少了类之间的依赖,因为类只是通过接口与其他类交互,这使得类的修改和扩展更加容易,不会影响到其他类。关系用于描述类与类之间的组合关系。它表示一个类包含另一个类的实例,强调的是对象的组成和属性,而不是继承。单一职责原则:组合有助于将不同的职责分配给不同的类,使每个类只关注特定的功能,从而增强系统的模块化。
2024-07-29 09:13:16
701
原创 面向对象编程(4)——接口与实现
类的实现部分包括私有的(private)和受保护的(protected)方法和属性,它们是类的内部机制,不应被外部直接访问。虽然从技术上讲,所有类的代码(包括实现部分)在类内部是可调用的,但实现的很多部分(如私有方法和属性)对外部代码是不直接可见或可调用的。接口中的方法和属性是可调用和可访问的。是面向对象设计中的一个重要原则,它强调设计类或模块的公共接口时,应只暴露最少的、必要的功能。通过限制公共接口的大小和复杂性,开发者可以更好地控制类的使用方式,防止滥用,确保系统的健壮性和安全性。
2024-07-29 09:12:58
855
原创 面向对象编程(3)——继承
继承(Inheritance)是面向对象编程的一个核心概念,它允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。通过继承,子类可以直接利用父类的属性和方法,避免重复代码,同时也能进行方法的重写和扩展,适应新的需求。静态方法是与类关联的方法,不依赖于实例,而类方法则接受类作为参数,这些方法在继承后可以直接使用或重写。继承使得开发者可以基于现有的类创建新的类,扩展系统功能的同时保持代码的模块化和组织性。子类可以继承父类的属性,意味着子类将拥有父类定义的所有成员变量。
2024-07-28 21:22:58
984
原创 面向对象编程(2)——封装
封装(Encapsulation)是面向对象编程中的一个重要概念,它指的是将数据和操作这些数据的方法封装在一个类中,对外部隐藏类的内部实现细节,只有通过类提供的接口(方法)才能访问和修改这些数据。封装属性的目的是防止外部代码直接访问和修改这些数据,以保护数据的完整性和一致性。方法是类的行为,它们定义了类可以执行的操作。封装方法有助于限制外部对类的行为的直接控制,并可以在方法内部添加额外的逻辑。:封装不仅是为了保护数据的完整性,还可以在方法中添加额外的逻辑以提高系统的安全性和性能,例如输入验证、缓存机制等。
2024-07-28 16:17:36
830
原创 星间链路与星地链路
典型低中轨道双层卫星网络的组网架构如下图所示。其中,将低轨道卫星根据所在的区域划分为若干个卫星集群。低轨道卫星集群通过星间链路与对应的中轨道卫星寻址对接,该链路称为层间星间链路。同时,中轨道卫星之间也会通过星间链路进行数据交互,该链路称为层内星间链路。
2024-07-08 19:50:25
1715
1
原创 XDMA原理学习(1)——DMA技术详解
DMA 技术是Direct Memory Access的缩写,其意思是“存储器直接访问”。它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。DMA是所有现代计算机的重要特色,它允许不同速度的硬件设备进行沟通,而不需要依于中央处理器的大量中断负载。否则,中央处理器需要从来源把每一片段的数据复制到寄存器,然后把它们再次写回到新的地方。在这个时间里,中央处理器就无法执行其它的任务。
2024-07-08 19:49:39
4491
原创 卫星网络——Walker星座简单介绍
Walker星座是一种设计用来在多个轨道平面上部署卫星的方式,以便实现对地球的全球或特定区域覆盖。这种设计由John Walker在1970年代提出,它提供了一种系统化的方法来优化卫星的覆盖效率和通信能力
2024-07-05 20:56:37
6737
3
原创 卫星轨道平面简单认识
在设计轨道平面时,需要综合考虑多种因素,包括卫星的使命、预期的覆盖区域、成本、发射和运维的复杂性等。轨道平面的选择和设计直接影响到卫星系统的性能和经济效益,因此在卫星系统设计初期,轨道平面的规划是关键步骤之一。
2024-07-05 19:34:17
1424
原创 python中的线程与进程
在 Python 中,线程(threading)和进程(multiprocessing)虽然都是实现并发编程的手段,但它们在多个方面存在本质的不同和特定的关系。同时,也需要考虑程序的复杂性和维护成本,因为进程间的通信比线程间的通信要复杂。:使用多进程可以绕过 GIL 的限制,因为每个进程有自己的 Python 解释器和内存空间,所以多个进程可以真正并行运行,充分利用多核处理器的计算资源。线程共享同一进程内的内存空间,这使得线程间的数据共享变得容易,但也带来了同步和竞争状态的问题。进程间的通信可以通过。
2024-06-27 21:26:05
860
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关注的人