未完结,明天补全
IP核:集成的一个现有的模块
串口写好后基本不会再修改串口模块内部的一些逻辑,将串口.v文件添加进来,之后通过他的上层的接口去对他进行使用,所以我们打包IP,之后就不用去添加源文件了,
IP Catalog ->集合;里面就是我们所有可以调用的集合
fft:快速傅里叶变换
如果创建了一个IP之后,我们就可以直接调用这个模块,这个模块里的功能都是完成了的,我们只需要对接口进行例化就行
对于我们要使用的串口模块,我们要把我们的控制信号给列举出来
把通信信号也列举出来
然后就是时钟复位信号clk,rstn
以及定义的两个参数:时钟频率SYSCLK_FREQ,波特率BUAD_RATE
在调用的时候也要给一些参数,可以改变串口IP的波特率
创建一个自己的IP:
block design就是一个画布
IP管理页面:
File Groups:文件组
Synthesis:可综合文件
当我们自己创立IP时,我们也可以通过我们输入的一些参数对IP进行配置,当我们这样去定义出来,例如
在打包IP时它会自动的给你识别成一个上层可配置的一个参数,就会给你在这儿列举出来
右键->添加一个总线接口,因为串口是已经有了总线不是没有总线
PortMap:端口的映射
串口协议中,其它信号可有可无,但Txd和rxd是必须要有的
因为我们并不是一个有地址的,有寄存器的总线协议,所以我们这边并没有一个地址映射
IP识别成功:
采用OC的一个IP:编译好后就不会再改变
实现:当串口发送一个特定值的时候,我的DAC的输出就是我的ADC的输入,就是我将我采集到的输出出去,否则的话就是如果发送的不是特定的值,或者是没有发送值,我的DAC就会输出一个正弦波
uart_0.veo :verilog语言的端口例化
端口例化时输入一般要给,输出可以不连
输入如果不连的话,我们一般要给个定值,没有输入就会导致内部的话就是一个未知状态
降频倍频:clock的IP
Docnav:赛灵思的文档,不仅是IP文档,还包括了软件使用,fpga的学习,各种各样的文档
Minimize Power:最小功耗
Minimize Output Jitter:最小输出抖动
系统时钟:
output clocks
若高电平复位:reset
若低电平复位:resetn
MMCM可以支持1/8的小数分频,并且只在out1里面有,PLL不支持
生成一个时钟模块:
有些IP提供test bench,有些只有例程工程
前面这段时间输出的时钟还没有到稳定状态,所以锁是拉低的,当锁拉高时,说明我们后面的时钟输出是一个稳定状态的,后面的时钟是一定可以用的
给的例程:直接去看IP,它是怎么去进行接口的输入输出的,然后我们就可以进行控制
当复位和锁同时为高的情况下,时钟是可以用的
将复位信号和锁的信号给&上,这样的话作为我们整体的复位信号
默认情况下输出正弦波,当我们的串口输入某个特定的值,那我就要dac输出一个我adc采集到的数据,如果接收到其它非特定值,那我继续输出正弦波
对于一块ROM储存空间:我将我的正弦波一个周期给存进去,输入我的地址,它输出我的当前地址对应的值,改变我的地址,输出我对应的值,地址不断的这样去反复的累加,输出的值就会是一个正弦的波形
Distributed memory generator:分布式储存器ram//LUT搭建
block memory generator:块储存器//现有
fpga中只有ram,而rom就是我在搭建这块ram的时候,把其写端口给取消掉
ram:既能存又能写
使用matlab生成一个coe文件,使其输出正弦波
dac_type是在串口的50M的时钟域下,他却用在了一个100M的时钟域里
如果是一个高速的信号,则有问题
将一个时钟下的数据移到另一个时钟下去使用,这时候我们就要用到双端口的fifo
先入先出
同步时钟的块ram:
commom clock black ram
异步时钟的块ram
ila:逻辑分析仪
仿真没问题,下板有问题
因为我们的IP进行了时钟约束,所以我们不需要额外再添加system文件去给它约束
xdc文件的注释是一个#