锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

FPGA学习笔记-IP核

时间:2022-09-01 19:30:00 如何用电容延迟断电

FPGA学习笔记-IP核

文章目录

  • FPGA学习笔记-IP核
    • 一、什么是IP核?
    • 二、RAM
      • 1. RAM特点
      • 2. 单端口RAM
      • 2. 双端口RAM
    • 三、FIFO
      • 1. 分类
      • 2. 参数(请结合代码理解)
      • 3. 原理
    • 参考文献

本文暂时不完整,需要等待代码部分的后续更新

一、什么是IP核?

IP核,全称知识产权核(英语:Semiconductor Intellectual Property Core),在集成电路中**可重用设计方法学**指一方提供的可重用模块,形式为逻辑单元,芯片设计。

IP设计人员通常通过设计验证IP基于核的设计可以缩短设计所需的周期。[1]IP一方可以通过协议向另一方提供核,也可以由一方单独占有。IP核的概念来源于产品设计的专利证书和源代码的版权。设计师可以IP基于特殊应用积体电路或现场可编程逻辑门阵列/FPGA为了减少设计周期,逻辑设计。

IP分为软核、硬核和固核。软核通常是一个与过程无关的设计代码,具有寄存器传输级硬件描述语言描述,可以进行后续设计;硬核是一系列逻辑综合、布局、布线后的表征文件,具有特定的工艺形式和物理实现;固核通常介于上述两者之间,通过功能验证、时间分析等过程,设计师可以以逻辑门级网表的形式获得。[2]

二、RAM

RAM全称是Random Access Memory,也就是说,随机访问存储器,他可以将数据写入任何指定地址的存储单元,也可以随时单独从任何指定数据。读写速度由时钟频率决定。RAM主要用于存储程序和程序执行过程中产生的中间数据和操作结果。其特点适用于双向数据交换。

Quartus II自带存储器IP核分为RAM IP核和ROM IP核,每个都分为单端口和双端口。双端口分为真双端口和伪双端口/简单双端口。

  • 单端口:只有一个端口,读写数据不能同时进行,共享数据通道。
  • 伪双端口:有两个数据通道,一个用一个读。
  • 真双端口:有两个数据通道,都可以用来读写。

一片RAM分为许多小格,每片容量为36k,这部电影是根据设定的位宽决定的RAM可存放分为几格,位宽一啊不能设置为1、2、4、8、16、32等,每两块相邻RAM可合成一片RAM,这片RAM它也是一个双端口,可以独立完成读写操作,在读写中可以配置位宽。

RAM读写速度一般都很快,所以通常作为操作系统或其他程序的临时数据存储介质。

RAM 存储器可以进一步分为静态随机存储器(SRAM)动态随机存储存储器(DRAM)两大类。SRAM 它具有快速访问的优点,但生产成本相对昂贵。一个典型的应用程序是缓存。 DRAM 由于单位容量价格较低,被广泛用作系统的主存。

**集成在芯片中(FPGA)的RAM属于SRAM,**芯片中的SRAM有以下用途:

  • 作为微控制器RAM或者cache(通常从32 bytes到128 kilobytes)
  • 作为x86等微处理器的缓存(如L1、L2、L3)
  • 作为寄存器(见寄存器堆)
  • 用于特定的ICs或ASIC(通常是几千字节量级)
  • 用于FPGA与CPLD

1. RAM特点

  • 随机存取

所谓的随机访问是指当存储器中的信息被读取或写入时,所需的时间与信息的位置无关。相对而言,串行访问存储器包括顺序访问存储器(如磁带)和直接访问存储器(如磁盘)。

  • 易矢性

当电源关闭时 RAM 不能保留数据。若需要保存数据,则必须将其写入长期存储设备(如硬盘)。RAM 和 ROM 两者最大的区别是 RAM 上述数据在断电后会自动消失, ROM 则不会。

  • 高访问速度(DRAM较高,SRAM则很高)

现代随机访问存储器几乎是所有访问设备中最快的写入和读取速度。与其他涉及机械操作的存储设备(如硬盘和光盘驱动器)相比,访问延迟也显得微不足道。 DRAM 速度还是不如行动 CPU 缓存用的 SRAM。

  • 需要刷新(DRAM)

现代随机访问存储器依赖于存储数据。电容器充满电代表 1(二进制)代表未充电 0.由于电容器或多或少漏电,如果不进行特殊处理,电荷会随着时间的推移逐渐流失,导致数据错误。刷新是指重新为电容器充电,弥补流失了的电荷。DRAM 读取有刷新效果,但一般定期刷新不需要完全读取,只需要作为芯片的一列(Row)选择,可以刷新整个列的数据,所有相关的记忆芯片都可以同时选择相同的列。因此,所有列的刷新都可以在一段时间内逐一完成,所有存储器都可以刷新。随机存取存储器的易失性需要刷新。

  • 时钟频率和功耗(SRAM)

SRAM功耗取决于其访问频率。如果高频访问SRAM,其功耗比得上DRAM。有的SRAM全带宽时功耗达到几个瓦特量级。SRAM若用于时钟频率温和的微处理器,其功耗将非常小,在空闲状态下的功耗可忽略不计——几个微瓦特级别。

2. 单端口RAM

单端口RAM只有一个端口,读写都是通过这个端口进行的。RAM只有一组数据总线、地址总线、时钟信号等控制信号。

单端口描述如下:

data: RAM写数据端口

address:RAM读写地址端口,读写地址共享同一组地址

wren:写信号,高电平有效,平时高电平data可以写入口数据

rden:读使能信号,高电平有效,平时高电平RAM只能读出中间的数据

clken:控制时钟

aclr:异步复位信号,高电平有效

inclock\outclock:单口RAM端口支持双时钟模式和单时钟模式。

双时钟模式:所有输入寄存器,包括数据、地址、wren以及rden输出时钟控制数据输出寄存器。

单时钟模式:没有inclock与outclock只有一个clock信号由单时钟和时钟控制(M9K)存储模块中的所有寄存器。

2. 双端口RAM

**伪双口/简单双口:**两组数据通道,一组读取数据和地址线,一组写数据和地址线,可以同时读写,但不能同时读写同一地址。

**真双口RAM:**两组数据通道,每组都可以用来读写数据和地址线。可以同时读写两个端口,也可以同时写一个端口,读另一个端口。

真双口RAM其实是两个单口RAM组合在一起,只是真正的双口RAM两个单口RAM操作相同的存储空间。

三、FIFO

FIFO全称为First In First Out即先进先出。FPGA使用的FIFO一般指数据存储的先进先出缓存器,常用于数据缓存或告知异步数据交互,即所谓的跨时钟域信号传输。

它与FPGA内部的RAM和ROM区别在于没有外部读写地址线,采用顺序写入数据,顺序读取数据,使用简单方便,由此带来的缺点就是不能像RAM和ROM由地址线决定读取或写入指定地址。

FIFO它是一种常用于异步数据传输的存储器。该存储器的特点是数据先进先出(后进后出)。事实上,无论是从快时钟到慢时钟域,还是从慢时钟到快时钟域,都可以使用多个宽数据的异步传输问题 FIFO 处理。

1. 分类

输入时钟的角度分类:单时钟SCFIFO与双时钟DCFIFO;其中,DCFIFO从输出数据的位宽的角度又可以分为普通双时钟DCFIFO和混合宽度双时钟FIFO(DCFIFO_MIXED_WIDTHS)

image-20220525005528465

  • SCFIFO:

​ 单时钟FIFO具有一个独立的时钟端口clock,因此,所有的输入输出信号都同步于clock信号。双时钟FIFO结构中,写端口和读端口分别有独立的时钟,所有与写相关的信号都是同步于写时钟wrclk,所有与读相关的信号都是同步于读时钟rdclk。

​ 通常应用于同步时钟的数据缓存。

  • DCFIFO:

​ 双时钟FIFO常用于跨时钟域的数据信号的传递,例如时钟域A下的数据datal传递给异步时钟域B,当datal为连续变化信号时,如果直接传递给时钟域B则可能会导致收非所送的情况,即在采集过程中会出现包括亚稳态(数据采样失真)问题在内的一系列问题,使用双时钟FIFO能够将不同时钟域中的数据同步到所需的时钟域中。

2. 参数(请结合代码理解)

FIFO的宽度:FIFO一次读写操作的数据位N;

FIFO的深度:FIFO可以存储多少个宽度为N位的数据;

空标志:对于双时钟FIFO,又分为读空标志rdempty和写空标志wrempty;FIFO已空或将
要空时由FIFO的状态电路送出的一个信号,以阻止继续从FIFO中读出数据而造成无效数据的读出。

满标志:对于双时钟FIFO,又分为读满标志rdfull和写满标志wrfull;FIFO已满或将要写
满时由FIFO的状态电路送出的一个信号,以阻止继续向FIFO中写数据而造成溢出。

读时钟:读FIFO时所遵循的时钟,在每个时钟的上升沿触发。

写时钟:写FIFO时所遵循的时钟,在每个时钟的上升沿触发。

wrusedw:在写时钟域下,FIFO中剩余的数据量;

rdusedw:在读时钟域下,FIFO中剩余的数据量。

3. 原理

工作流程

复位之后,在写时钟和状态信号的控制下,数据写入 FIFO 中。RAM 的写地址从 0 开始,每写一次数据写地址指针加一,指向下一个存储单元。当 FIFO 写满后,数据将不能再写入,否则数据会因覆盖而丢失。

FIFO 数据为非空、或满状态时,在读时钟和状态信号的控制下,可以将数据从 FIFO 中读出。RAM 的读地址从 0 开始,每读一次数据读地址指针加一,指向下一个存储单元。当 FIFO 读空后,就不能再读数据,否则读出的数据将是错误的。

FIFO 的存储结构为双口 RAM,所以允许读写同时进行。典型异步 FIFO 结构图如下所示。端口及内部信号将在代码编写时进行说明。

读写时刻

关于写时刻,只要 FIFO 中数据为非满状态,就可以进行写操作;如果 FIFO 为满状态,则禁止再写数据。

关于读时刻,只要 FIFO 中数据为非空状态,就可以进行读操作;如果 FIFO 为空状态,则禁止再读数据。

不管怎样,一段正常读写 FIFO 的时间段,如果读写同时进行,则要求写 FIFO 速率不能大于读速率。

读空状态

开始复位时,FIFO 没有数据,空状态信号是有效的。当 FIFO 中被写入数据后,空状态信号拉低无效。当读数据地址追赶上写地址,即读写地址都相等时,FIFO 为空状态。

因为是异步 FIFO,所以读写地址进行比较时,需要同步打拍逻辑,就需要耗费一定的时间。所以空状态的指示信号不是实时的,会有一定的延时。如果在这段延迟时间内又有新的数据写入 FIFO,就会出现空状态指示信号有效,但是 FIFO 中其实存在数据的现象。

严格来讲该空状态指示是错误的。但是产生空状态的意义在于防止读操作对空状态的 FIFO 进行数据读取。产生空状态信号时,实际 FIFO 中有数据,相当于提前判断了空状态信号,此时不再进行读 FIFO 数据操作也是安全的。所以,该设计从应用上来说是没有问题的。

写满状态

开始复位时,FIFO 没有数据,满信号是无效的。当 FIFO 中被写入数据后,此时读操作不进行或读速率相对较慢,只要写数据地址超过读数据地址一个 FIFO 深度时,便会产生满状态信号。此时写地址和读地址也是相等的,但是意义是不一样的。

此时经常使用多余的 1bit 分别当做读写地址的拓展位,来区分读写地址相同的时候,FIFO 的状态是空还是满状态。当读写地址与拓展位均相同的时候,表明读写数据的数量是一致的,则此时 FIFO 是空状态。如果读写地址相同,拓展位为相反数,表明写数据的数量已经超过读数据数量的一个 FIFO 深度了,此时 FIFO 是满状态。当然,此条件成立的前提是空状态禁止读操作、满状态禁止写操作。

同理,由于异步延迟逻辑的存在,满状态信号也不是实时的。但是也相当于提前判断了满状态信号,此时不再进行写 FIFO 操作也不会影响应用的正确性。

参考文献

维基百科: 半导体IP核

维基百科: 随机存取存储器/RAM

维基百科: 静态随机存取存储器/SRAM

菜鸟教程: 4.4 Verilog FIFO设计

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章