Skip to content
字数
966 字
阅读时间
4 分钟

1.调试进度:

序号调试计划完成程度
1编写RS422发子模块100%
2编写top调用子模块,用vio,pll给子模块提供信号,加lia方便调试100%
3上板测试RS422发模块功能100%
4编写RS422收子模块0%
5top例化收模块,编写测试调试代码
6上板测试RS422收模块功能
7收发模块相连,完成回环
8isa改AXI
9.....

2.调试笔记

一、仿照RS422_CHANNEL1_SEND的Block Design写个子模块

二、top模块加pll提供时钟,加ila、vio调试

PL参考时钟,引脚AD18。 接在top输入给422send模块提供时钟, 用PLL在top里转成16MHz

输出口暂时随便找个空引脚AB12 PLL ip核报错 PLL 时钟输入驱动不合法。核配置了 ZHOLD 补偿模式,但输入时钟 pl_clk(接 AD18 引脚)没有连接到「时钟专用 IO(CCIO)」,或 PLL 的补偿模式与输入时钟的驱动方式不匹配,导致违反 FPGA 的硬件约束。 改COMPENSATION 这一项,当前值是 ZHOLD。点击它的下拉菜单,选择 INTERNAL 即可。

下载bit文件以后,ila ip核报错。ila ip核的时钟停了 避免用待测时钟来驱动ila,所以把16M改为PL时钟接ila看看能不能行 改成pl时钟以后,ila核可以运行了 时钟质量有问题 抓出来的pll输出的16M时钟,时而宽,时而窄,这是为什么 时钟是16M的,要抓16M时钟需要ila的驱动时钟是16M的整数倍。用50M时钟ila抓16M时钟就会出现这种问题。

换个思路,将pll的复位口直接输入1‘b0,这样pll就“免启动了” pll在程序开始就能给ila和vio提供时钟了。 把ila和vio的驱动时钟重新换回16M试一下

为什么ila抓不到pll输出的16M时钟? vio也有可能未启动,把vio也改成晶振的时钟驱动试试

有可能是这里出问题了,用clk16MHz时钟去抓clk16MHz,大概率是这个问题,应该用一个时钟驱动ila,去抓另一个时钟。用相同的时钟可能会有问题。!! 试试能不能抓到16M呢

抓到了,到这里可以确认16M时钟是供应正常的了 也就意味着16M可以正常驱动这些子模块。 手动给个复位,看看有啥变化

send_clk有了,这个send_clk是干什么的??? 先不管,看看sig_rise有没有,理论上sig_rise拉高一次就是给FIFO输入一次值,看看sig_rise有没有变化

牛逼,给了fifo一个输入,

修改vio配置后,可以发现发送成功,3个7e,加后面的55aa两次,加校验,输出正确。

isa地址解码

怎么区分是DMA模式还是IO口模式呢 dma模式 非dma模式 核心判断逻辑就两点: DMA 使能寄存器的位值 + DMA 硬件应答信号的电平,二者同时满足才会进入 DMA 模式,否则一律走非 DMA 的普通 IO 模式,且 DMA 模式判断在代码里是最高优先级的分支(if-else if最前面)。

问题汇总

为什么有DMA模式和非DMA模式(IO口模式),工作原理是怎么区分的

贡献者

The avatar of contributor named as dz13718198068 dz13718198068

文件历史

撰写