IP核

AI summary
本文讨论了FPGA内部构建的多种存储器,包括ROM、SPRAM、DPRAM和FIFO,详细介绍了其设计要求、实现过程和工作原理。重点包括数据深度、宽度、读写操作、波形生成及频率调节等,强调了在不同应用场景下的设计策略和控制器实现。
Last edited time
Sep 24, 2024 03:06 PM
Last edited by
Tags
Fpga Design
Memory Architecture
Digital Logic

一:IP核介绍

IP核:(Intellect Property Core:知识产权)。
IP:固IP,软IP和硬IP
软IP和硬IP以及固IP可以参考百度百科介绍。
FPGA利用可配置的逻辑单元完成电路功能,但是配置的电路只能完成数字逻辑功能,对于一些模拟电路功能无法实现。
FPGA实现时对于一些功能比较复杂/难以实现的电路,往往生产厂商/第三方会提供一些IP(将常用的ASIC直接放入在FPGA的内部);对于设计者而言,直接配置参数,就可以和ASIC进行通信。
对于一些复杂性设计,厂家也可以将电路封装成一些模块,提供给设计者使用(方便设计)。

二:不同厂商提供IP核种类

不同厂家提供不同类的IP核共设计者使用。(Altera/Xilinx)
以Altera为例:
  1. 运算类(+ - * / ** %...)
  1. 通信类(编码/解码/校验码)
  1. DSP类(滤波器:FIR/IIR…)
  1. 接口类(LVDS/单总线…)
  1. 存储器类(片内存储:ROM/RAM/FIFO/移位寄存器…)
  1. IO类(altpll…)
  1. 高速接口(DDR2/3…PCI/PCIE/以太网…)
  1. 调试类(ISSP/Signaltap II…)
高版本软件IP核一般会兼容低版本软件IP核。

三:IP核例程1(Altera:Quartus II 13.1)

时钟管理单元:PLL(Phase-Locked Loop:相位锁定的环路),也就是常说的锁相环。
notion image
PLL主要完成对输入时钟进行分频(比输入频率小)/倍频(比输入频率大)。
其次可以使得输出频率改变相位/占空比。
  1. 相位
    1. notion image
  1. 占空比
    1. 高电平持续时间占整个周期比值。
      notion image
  1. 通过PLL输出25MHZ和100MHZ(对其相位和占空比自行调节)。
    1. 测试结果:
      notion image
      根据芯片不同,输出频率范围有所差异。
      EP4CE10F17C8N //LOW:几十K HIG:几百M
      低于几十K下的频率,采用之前计数器实现分频器。
      在PLL输出频率范围内,能使用PLL都采用IP核,对于设计时方便。
  1. 应用实例
      • 设计要求:通过PLL输出4路时钟(c0,c1,c2);规定
        • c0=25MHZ,c1=75MHZ,c2=100MHZ。
          notion image
      • 设计架构
        • notion image
          以之前设计50MHZ------>2HZ(0.5s)完成LED的控制。
          频率
          间隔时间
          计数器计数最大值
          50MHZ
          0.5s
          cnt_max=50_000_000HZ / 2HZ
          25MHZ
          1s
          cnt_max = 25_000_000HZ / 2HZ
          75MHZ
          0.375s
          cnt_max = 75_000_000HZ / 2HZ
          100MHZ
          0.25s
          cnt_max = 100_000_000HZ / 2HZ
      • 测试结果
        • notion image
练习:
  1. 完成上课内容(可以参考cyclone4-handbook.pdf),应用实例(其它LED状态)
  1. 在设计实例当中,更换PLL中输出时钟占空比和相位,看输出状态。

四:IP核例程2(Altera:Quartus II 13.1)

ROM(Read-Only Memory):只读存储器
ROM----->PROM---->EPROM----->EEPROM(24LC64)。
ROM属于非易失性存储器(Flash)。
FPGA内部并没有严格意义上的ROM,其实也就是通过RAM经过适当的配置,来实现的ROM。
notion image
EP4CE10F17C8N //Memory:423936bit
1M=1024K
1K=1024B
1B=8bit
423936bit/8/1024=51.75K
嵌入式内存结构由M9K内存块组成的,在FPGA内部按照列状排列。
M9K内存块特性:
  1. 每一个内存块大小为8192bit(包括校验位:就是9216bit)
  1. 独立的读写功能
  1. 端口可配置功能
  1. 支持单端口和双端口模式
  1. 在ROM/RAM模式下,支持初始化数据
    1. Altera:(Quartus II:.Hex/.Mif文件)
      Xilinx:(ISE/Vivado:.coe文件)
  1. 支持字节使能功能
  1. 支持时钟使能功能
ROM:只读存储器,这种存储器不支持写操作,只支持读操作。 构造该存储器时,只能将数据“刻录”进去(做成一个初始化文件,加载在存储器中)。
ROM利用FPGA片内存储块M9K构成的。
ROM工作原理:在时钟上升沿来时,采样到读使能为1时,将地址上的数据进行输出。
notion image
数据深度:能够存储数据的个数(256) //地址宽度:8
数据宽度:存储数据的宽度(8bit) //数据宽度:8
存储器存储空间大小:数据深度数据宽度
Memory=2568bit=2048bit
片外存储器:flash(M25P16)/eeprom(24LC64)
Eeprom:64Kbit=8K*8bit
Flash:16Mbit=2M*8bit
  1. 设计要求
    1. 在FPGA内部构建一个数据深度为256,宽度为8bit的ROM存储器。
  1. 设计实现
      • 初始化文件(.Hex/.Mif文件)
        • 文件格式如下:
          注意:.Mif文件数据每一行以“;”结束。最后要加上end;
      • 构建ROM IP
      • 读取ROM数据
        • (1):直接对ROM IP核进行测试
          notion image
          (2):完成地址控制器读取ROM数据
          notion image
          notion image
          notion image
DDS:Direct Digital Synthesizer(直接式数字频率合成器:信号发生器)。
主要目的:往往产生不同的波形(方波/正弦波/锯齿波/三角波/梯形波…)不同的相位/不同的频率的信号,用于调试硬件设备。
DDS结构:
DDS结构主要由累加器,波形存储器,D/A转换器和低通滤波器等四个大的结构组成的。
notion image
  1. 波形可调节(产生方波/正弦波/锯齿波/三角波/梯形波…)
    1. 只需要改变ROM中存储的数据即可(正弦波数据…)
      通过Guagle_wave.exe产生所需波形。
  1. 相位可调节
    1. notion image
      调节相位其实就是更改地址的初始值。
  1. 频率可调节
    1. 以正弦波基础频率:
      • 计算
        • T=256*20ns=5120ns
          F=1/T=1/5120ns=195,312.5HZ=195.3125KHZ
      • 实测
        • notion image
      • 改变正弦波频率的方式
          1. 改变系统时钟大小 //X
          1. 改变波形数据深度 //X
          1. 改变地址的步进值 //X
      最终设计:改变任意频率
      实现过程:需要设置一个虚拟地址计数器(位宽:16/24/32),所有地址计数时采用虚拟地址计数器进行计数,虚拟地址计数器步进值(频率控制字:B),最终使得有效地址取虚拟地址计数器高8位。
      虚拟地址16位:高8位
      2^16-2^8=65,280 2^16=65536
      65280/65536-1=-0.00390625
      虚拟地址24位:高8位
      2^24-2^16= 16,711,680 2^24= 16,777,216
      16,711,680/16,777,216-1=-0.00390625
      虚拟地址32位:高8位
      2^32-2^24= 2^32=
      (2^32-2^24)/ 2^32-1=-0.00390625
      公式推导:
      T=256*20ns=5120ns
      F=1/T=1/5120ns=195,312.5HZ=195.3125KHZ
      195.3125KHZ = 1/5120ns = 1/20ns*1/256=50MHZ/256=50MHZ/2^8 * 1
      Fout = Fclk / 2 ^ N(N = 16/24/32) * B
      Fout = Fclk / 2 ^ N * B
      Fout(已知量) Fclk(已知量) N(已知量) B(未知量)
      假设得到正弦波输出频率1KHZ:
      当N=16时 1KHZ=50MHZ / 2 ^ 16 * B B = 1.31072 //误差最大
      notion image
      误差:763HZ/1KHZ-1=-0.237
      当N=24时 1KHZ=50MHZ / 2 ^ 24 * B B = 335.54432 //误差比较小
      notion image
      误差:1.001HZ/1KHZ-1= 0.001
      当N=32时 1KHZ=50MHZ / 2 ^ 32 * B B = 85,899.34592 //误差最小
      notion image
      假设得到正弦波输出频率1HZ:
      当N=16时 1HZ=50MHZ / 2 ^ 16 * B B = 1.31072 / 1000 //没有数据
      当N=24时 1HZ=50MHZ / 2 ^ 24 * B B = 0.33554432 //没有数据
      当N=32时 1HZ=50MHZ / 2 ^ 32 * B B = 85.89934592 //标准1HZ
      总结:虚拟地址计数器位宽越大,误差最小。
下板验证:
notion image

五:IP核例程3(Altera:Quartus II 13.1)

RAM:Random Access Memory(随机存取存储器)
随机存取存储器(Random Access Memory):又称为“随机存储器”,是与CPU直接交换数据的内部存储器,也叫做主存(内存)。它可以支持随时读写,而且速度很快,通常作为操作系统或其它正在运行中的程序的临时数据存储媒介。
这种存储器在断电时将丢失其存储内容,故主要用于存储短时间的程序。
按照存储单元的工作原理,随机存储器又分为静态随机存储器(Static RAM:SRAM)和动态随机存储器(Dynamic RAM:DRAM)。
RAM和ROM相比,两者最大的区别就是RAM在断电以后保存在上面的信息回自动消失,而ROM不会。
RAM:既可以写入数据,也可以读取数据操作;在构建存储器时,可以进行初始化数据,也可以不用初始化文件(写数据操作)。RAM支持初始化文件数据.Hex/.Mif文件。
RAM也是利用FPGA片内存储块M9K构成的。
RAM工作原理:
写操作:RAM在进行写数据时,在时钟上升沿来时,采样到写使能为1时,写地址同时可以进行写数据。
读操作:RAM在进行读数据时,在时钟上升沿来时,采样到读使能为1时,读数据。
RAM在构建时,可以分为单端口RAM(single-port RAM)和双端口RAM(dual-port RAM)。
SPRAM:单端口RAM DPRAM:双端口RAM
  1. SPRAM端口
    1. notion image
  1. 设计要求
    1. 在FPGA内部构建一个数据深度为256,宽度为8bit的SPRAM存储器。
  1. 设计实现
      • 直接对SPRAM的IP核进行测试
        • (1):随机写5和100地址数据,读取5和100地址数据
          notion image
          (2):往RAM中写256个地址和256个数据,读取256个数据
          notion image
          (3):循环读写
          (4):写入数据超出数据深度,读取数据问题
      • 完成对SPRAM的控制,实现RAM的读写
        • notion image
      对于SPRAM控制器,先写入地址和数据,然后对写入的数据进行读取。
      采用FSM完成SPRAM的读写控制。
      notion image
  1. DPRAM端口
    1. notion image
  1. 端口描述
    1. 信号
      描述
      端口流向
      说明
      wr_clk
      写时钟:具体设计具体对待
      输入
      wr_addr
      写地址:有一定深度
      输入
      wren
      写使能:高电平有效
      输入
      wrdata
      写数据:常见为8bit
      输入
      rd_clk
      读时钟:具体设计具体对待
      输入
      rden
      读使能:高电平有效
      输入
      rd_addr
      写地址:有一定深度
      输入
      rd_data
      读数据:和写数据一致
      输出
  1. DPRAM工作原理
    1. 写操作:在写时钟上升沿来时,采样到写使能为1时,写地址同时可以进行写数据;一旦数据写完,关闭写使能,不再写数据。
      读操作:在读时钟上升沿来时,采样到读使能为1时,进行读地址(读地址上的数据);一旦数据读完,关闭读使能,不再读数据。
  1. 设计要求
    1. 在FPGA内部构建一个数据深度为256,宽度为8bit的DPRAM存储器。
  1. DPRAM
      • 读写同时钟DPRAM测试(直接测试IP)
        • notion image
      • 读写不同时钟DPRAM测试(直接测试IP:先写后读)
        • notion image
      • 读写不同时钟DPRAM测试(完成读写控制器:边写边读)
        • 写时钟:100MHZ 读时钟:10MHZ(快写慢读)
          notion image
          notion image
          写时钟:10MHZ 读时钟:100MHZ(慢写快读)
          notion image
          notion image
          notion image

六:IP核例程4(Altera:Quartus II 13.1)

FIFO:First Input First Output(先进先出缓冲器)。
FPGA/ASIC中常用的FIFO一般指的是对数据的存储具有先进先出特性的存储器;常用于数据的缓存或者高速异步数据的交互。
UART:通用异步收发器
notion image
UART接收器:RXD(对数据一位一位进行接收(串行数据),缓存的数据多位(并行数据))。
UART发送器:待发送数据(写FIFO多位数据:并行数据),通过TXD将数据一位一位发送出去(串行数据)。
  1. FIFO结构
    1. FIFO从大情况来分,有两种结构:单时钟FIFO(SCFIFO:Single-Clock FIFO)和双时钟FIFO(DCFIFO:Dual-Clock FIFO)。
      单时钟FIFO(SCFIFO):单时钟FIFO具有一个独立的时钟端口Clock,所有的输入信号的读取都是在时钟Clock的上升沿进行的;所有的输出信号也都是在时钟Clock上升沿的控制下进行的,即单时钟FIFO的所有的输入和输出信号都是同步于Clock。单时钟FIFO常用于片内数据交互。
      notion image
  1. SCFIFO端口
    1. 信号
      描述
      端口流向
      说明
      clock
      读写同步时钟
      输入
      wreq
      写请求(高有效)
      输入
      wrdata
      写数据(由宽度决定)
      输入
      rdreq
      读请求(高有效)
      输入
      aclr/sclr
      清零端(复位)
      输入
      empty
      空信号标志
      输出
      full
      满信号标志
      输出
      usedw
      FIFO中数据的余量
      输出
      almost_empty
      空信号的提前标志(设置阈值)
      输出
      almost_full
      满信号的提前标志(设置阈值)
      输出
      rddata
      读数据(和写数据一致)
      输出
  1. SCFIFO端口描述
    1. empty:当FIFO没有数据时,空信号为真;
      full:当FIFO被填充满时,满信号为真;
      almost_empty:当usedw小于设置阈值时,该信号为真,是empty的提前提示信号。
      almost_full:当usedw大于等于设置阈值时,该信号为真,是full的提前提示信号。
  1. SCFIFO工作原理
    1. 写操作:在时钟上升沿来时,打开写请求,进行写数据,一旦写满,关闭写请求,不再写数据。
      读操作:在时钟上升沿来时,打开读请求,进行读数据,一旦读空,关闭读请求,不再读数据。
      提示:满足FIFO满了不能写,空了不能读。
  1. 设计要求
    1. 在FPGA内部构建一个数据深度为256,宽度为8的SCFIFO存储器。
  1. 设计实现
      • 直接对SCFIFO IP核测试
        • notion image
      • SCFIFO读写控制器
        • 采用FSM实现:
          notion image
          notion image
  1. 双时钟FIFO(DCFIFO)
    1. notion image
  1. DCFIFO端口
    1. wrempty(写空信号):当FIFO没有数据时,写空信号为真。
      wrfull(写满信号):当FIFO被填充满时,写满信号为真。
      rdempty(读空信号):当FIFO所有数据被读出时,读空信号为真。
      rdfull(读满信号):当FIFO没有任何数据读出时,读满信号为真。
      空满都表明FIFO的状态。
      wrusedw(写余量):写数据时,写入FIFO数据个数。
      rdusedw(读余量):读数据时,每读出一个数据读余量会减少一个。
      余量都监测FIFO中数据的个数。
  1. DCFIFO工作原理
    1. 写操作:在写时钟上升沿来时,打开写请求,进行写数据,一旦写满,关闭写请求,不再写数据。
      读操作:在读时钟上升沿来时,打开读请求,进行读数据,一旦读空,关闭读请求,不再读数据。
      提示:满足FIFO满了不能写,空了不能读。
  1. 设计要求
    1. 在FPGA内部构建一个数据深度为256,宽度为8的DCFIFO存储器。
  1. 设计实现
      • 直接对SCFIFO IP核测试
        • notion image
      • 读写DCFIFO控制器实现
        • notion image
          读写控制器采用FSM实现:
          写控制器:先判断空,再考虑满。
          notion image
          读控制器:先判断满,再判断空。
          notion image
          notion image
练习:
  1. 完成上课内容
    1. (3):循环读写
      (4):写入数据超出数据深度,读取数据问题
  1. 了解乒乓操作思想(SPRAM/DPRAM应用实例)
    1. 主要掌握理论。
      乒乓操作(利用休息时间完成)
      notion image
  1. 完成采用DPRAM(不同时钟)实现的乒乓操作(设计思想)。
  1. 完成DCFIFO读控制器部分,保证读写数据一致(先写数据先读出来)
  1. DPRAM和DCFIFO关系
💡
解决跨时钟域三种方式:双端口RAM/异步FIFO/同步寄存器链

七:综合设计

跨时钟域FIFO控制器。
  1. 设计要求
    1. 采用外部设备(矩阵键盘产生输入数据/数据生成模块:自行产生一组数据)作为写数据,首先将数据写入到RAM中(SPRAM/DPRAM),读取后对DCFIFO进行写数据,一旦DCFIFO数据填充满,将数据立刻读取后显示在数码管上。可以采用LED表明当前DCFIFO的空满状态。
  1. 设计分析1
    1. DCFIFO读写时钟:写时钟(10MHZ) 读时钟(2HZ)。
  1. 设计架构
    1. notion image
  1. 设计分析2
    1. notion image
  1. 设计分析2
    1. notion image
Loading...