野火FPGA征途Pro学习笔记(IP核)

分频器

偶分频器

通过always语句,对系统时钟进型分频,例如4分频:对系统时钟进行计数四次,产生一个高电平的flag信号。
在后级模块中使用时,采用 系统时钟&&flag==1 的判断方法。
这样的好处是在高速系统中,分频后的时钟仍然是挂靠在板子时钟树上的,能够很好的确保时钟的统一性,而直接进行分频可能会在高速系统中产生一定的误差。

奇分频器

通过always语句,做一个上升沿的分频,与一个下降沿的分频,将分频后的结果取与运算
例如5分频:先做一个上升沿触发的5分频,三个周期低电平,两个周期高电平。
在做一个下降沿触发的5分频,三个周期低电平,两个周期高电平。
最后将两个分频后的结果取与运算,就是常规的5分频。
在这里插入图片描述
取与运算后
在这里插入图片描述
但在高速系统中,仍采用flag信号的方法进行分频。

PWM

首先PWM波形具有频率 、占空比等参数,占空比决定了PWM波形的等价波数值,而频率这一参数对于宏观数值的影响不大,例如50MHz的50%波与50Hz的50%波,有效值是等价的。

对于无源蜂鸣器来说,占空比这一参数影响发出声音的大小,频率影响发出的音调
对于呼吸灯来说,占空比是从小到大、从大到小的,具有一个变化的过程,在FPGA里,通常使用一个计数器表示占空比,且往往这个计数器的计数周期是频率计数器的计数间隔,因此频率影响占空比变化的圆润。

相同强度的变化。频率越高越圆润。

无源蜂鸣器

音调和频率关系
在这里插入图片描述

层次化设计

需要设计的模块由多个小模块组成时,需要先构造这些小模块并仿真,而在一个工程文件中,只对小模块编译会产生报错,原因是没有检测到与工程名称一样的顶层模块,下面是解决方法:

一:重新编写一个顶层模块,将子功能模块实例化在顶层模块中,对顶层模块进行编译,进而对子功能模块进行编译。

二:软件设置,将子模块强制设置为顶层模块。
操作时右键子模块在这里插入图片描述

二进制码转8421BCD码

先补零,零的个数 = 二进制对应的十进制位数乘四(对应的十进制数若用BCD码表示,则需要十进制位数乘4个位宽)
之后向左移位,一次移一位,总移位次数 = 二进制数位宽
每次移位后进行判断,每一位BCD码是否>4,若>4,则在该位上加3,即+0011
在这里插入图片描述

PLL IP核

可以对输入到FPGA的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。
在这里插入图片描述
FD:鉴频;
PD:鉴相;
LF:环路滤波器;
VCO:压控振荡器;根据电压不同输出不同频率

PLL的倍频
在这里插入图片描述
PLL的分频
在这里插入图片描述

IP核配置

配置时,这里不要勾选
在这里插入图片描述

在这里插入图片描述
完成配置的最后一步
在这里插入图片描述
左侧示意图中输出信号locked信号为标志信号,高点平有效,有效时代表输出时钟可用。

调用IP后需要对IP重新设置时

在这里插入图片描述

IP核文件被删除时如何重新添加到工程

add file后,选择IP核文件夹中的.qip文件
在这里插入图片描述

从其他工程中复制IP核

第一种方法
从其他工程的文件夹中直接复制“ip_core”文件夹,之后在新工程中添加.qip文件。
在这里插入图片描述
第二种方法
插件管理器中选择第三项
在这里插入图片描述
点击next后,上侧为要复制的IP核位置,下侧为IP核复制后的存放位置。
在这里插入图片描述

ROM IP核

FPGA中没有非易失性存储器,即ROM这种长期存储的存储器。
RAM、ROM两种IP核实际都是利用FPGA中RAM资源,不过在ROM IP核中,会提前生成数据文件,在每次上电后都会提前加载这个数据文件,使得FPGA的RAM变得像是非易失性存储器,即ROM IP核的实现。

生成的文件类型有:.hex、.mif两种。

在quartus软件中,点击FILE→new就可以生成以上两种文件。

手动修改数据文件内容

在这里插入图片描述
这里勾选的为重复赋值,在对话框中输入“1,2,3,4”就会重复填入1234.
下面未勾选的是递增赋值,首先赋值初始值,再选择递增还是递减和大小。

数据文件命名格式:rom_位宽x数据个数

单端口ROM IP核配置

文件保存在数据文件夹中,与数据文件夹放在一起,命名与数据文件一样格式。
在这里插入图片描述
下一步
在这里插入图片描述
下一步
在这里插入图片描述
之后添加mif文件,首先点击browse。
在这里插入图片描述

双端口ROM IP核配置

默认数据量要进行修改,修改为256个8bit字节的数据。
第二个方框为输出位宽,这里默认为8位宽。
在这里插入图片描述
与单端口相同步骤添加mif文件
在这里插入图片描述

注意

这里的含义为:使用modelsim等其他文件进行仿真时,需要添加的仿真库
在这里插入图片描述

RAM IP 核

单端口RAM IP 核配置

第一步,与ROM IP配置一样
在这里插入图片描述
第二步
在这里插入图片描述
第三步,配置写入数据时所读数据是新数据还是旧数据。
在这里插入图片描述
第四步,配置是否有初始文件,有则添加.hex/.mif文件。
在这里插入图片描述

之后的步骤与之前的IP核配置一样。

双端口RAM IP核配置
双端口简单RAM IP 核配置

勾选第一项
在这里插入图片描述

下一步
在这里插入图片描述

下一步
在这里插入图片描述

下一步
在这里插入图片描述
在这里插入图片描述
之后的步骤与之前一样

RAM IP 真正双端口配置

第一步,选择真正双端口RAM IP。
在这里插入图片描述

下一步
在这里插入图片描述
下一步
在这里插入图片描述
后面步骤均默认初始化。

FIFO IP 核

FIFO是一种数据缓冲器,用来实现数据先入先出的读写方式。
FIFO存储器主要是作为缓存,应用在同步时钟系统和异步时钟系统中,在很多的设计中都会使用;如:
多比特数据做跨时钟域处理、前后带宽不同步等都用到了FIFO。

用法:多比特跨时钟域处理,通过A时钟的频率进入FIFO,再通过B时钟的频率读出数据。
在这里插入图片描述
用法:带宽不同步
在这里插入图片描述

FIFO模块的介绍

同步FIFO,称为SCFIFO;异步FIFO,称为DCFIFO。差别在于读写是否共用时钟。
在这里插入图片描述
模块中,full表示写入数据已满;empty表示已经读完数据;usedw[7:0]表述FIFO已经存储的数据个数;eccstatus为校验位。

FIFO IP 的配置

首先
在这里插入图片描述
其次,选择读写同步还是异步
在这里插入图片描述
配置输出端口
在这里插入图片描述
各输出信号的意义
在这里插入图片描述
下一步
在这里插入图片描述
下一步
在这里插入图片描述
后面步骤与之前的IP核配置一样。

异步FIFO

在这里插入图片描述
下一步
在这里插入图片描述

之后为输出管脚的选择
在这里插入图片描述
之后是FIFO的模式选择
在这里插入图片描述
保护电路,勾选表示使用,不勾选表示不实用。
在这里插入图片描述

后面的配置与以往的IP核配置一样。

FIFO 应用的注意项

异步FIFO,应用于多比特跨时钟域处理操作的过程中,可以看出首先写入的数据为8位宽的00、01、02、03
在这里插入图片描述

之后在读取的过程中为16位宽的数据
在这里插入图片描述

这里需要注意拼接次序先写入的数据处于多比特数据的低位端。

传入读取fifo信号(fifo_en)后,读出的数据(dout_data)是滞后使能信号一拍的。

困惑

在这里插入图片描述
在这里插入图片描述

rom ip核中针对rom_ctrl模块的仿真中,为何key1_en信号只滞后于key1半个时钟周期?

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值