修改AXI UART D16550 FIFO深度的过程记录
仅限于AXI UART 16550 v. 2.0,其他版本可能存在差异,经过实际测试,可以将fifo深度从默认的16成功修改为32、128和256。参考了两篇帖子中提到的方法,分别是修改AXI UART D16550 FIFO深度 - 简书 (jianshu.com)和Increase FIFO Size in AXI_UART_16550 (xilinx.com)中jamsoft的两次回答。完整记录如下:
更改 AXI UART 16550 FIFO 大小,步骤如下:
- 备份 Vivado/your_version/data/ip/xilinx/axi_uart16550_v2_0 和 /Vivado/your_version/data/ip/xilinx/lib_srl_fifo_v1_0 文件夹
- 如果您的设计中有 AXI_UART_16550 IP 核,请将其移除,保存设计/项目并关闭 Vivado
- 清除项目目录中的 your_project.cache 文件夹
- 编辑 Vivado/your_version/data/ip/xilinx/lib_srl_fifo_v1_0/hdl 文件夹中的 lib_srl_fifo_v1_0_rfs.vhd:
- 第 677、381、981 行:根据需要更改 C_DEPTH 值
- 保存并关闭文件,使用编辑后的lib_srl_fifo_v1_0_rfs.vhd文件替换安装目录和项目目录下所有的同名文件。(这一步很关键)
请注意:clog2 函数用于确定存储值所需的位数。例如,在 Num_To_Reread 的情况下:在 std_logic_vector(0 to clog2(C_DEPTH)-1) 中,该函数将返回 4(位!)的值,因此该行将被处理为 Num_To_Reread :在 std_logic_vector(0 到 3) 中。为您的 C_DEPTH 值计算此值对于以下编辑很重要。clog2 函数返回上限 log2(C_DEPTH) 值,即存储 C_DEPTH 值的最小位数。
注2:如果您不了解 VHDL 或该函数究竟是做什么的,这里是 C/C+++ 版本:
int clog2(int x)
{
int r = 0;
int rp = 1;
while( rp < x )
{
r\+\+;
if( rp > std::numeric_limits<int>::max())
return std::numeric_limits<int>::max(); //or we could exit with some other value as -1...
rp \+= rp;
}
return r;
}
随着 rp 值呈指数增长,您可以通过 head 或在一些纸上评估函数 - 对于一些通常的 FIFO 大小值(32、64 ...),它只会是几个循环......
- 编辑 Vivado/your_version/data/ip/xilinx/axi_uart16550_v2_0/hdl 文件夹中的 axi_uart16550_v2_0_vh_rfs.vhd 文件:
- 第 89 行(Rx_fifo_count : in std_logic_vector(3 downto 0 ); -- Rx fifo count):将 3 的值更改为上一步中 clog2 函数返回的值减去 1(从 0 开始计数:-))。
- 第 510 行:添加库“use ieee.numeric_std.all;” (不带引号)
- 第 561 行:将 C_DEPTH 值更改为所需的 FIFO 深度
- 第 574 行:将 Num_To_Reread => X"0" 更改为
std_logic_VECTOR(to_unsigned(0,your_value_from_clog2_function))//这里不减一 - 第 1086 行:添加库“use ieee.numeric_std.all;” (不带引号)
- 第 1140 行:更改“信号 rx_fifo_count : std_logic_vector(3 downto 0);” - 将 3 的值更改为值
由上一步中的 clog2 函数返回减一(从 0 开始计数) - 第 1178 行:将 C_DEPTH 值更改为所需的 FIFO 深度
- 第 1191 行:将 Num_To_Reread => X"0" 更改为
Num_To_Reread => std_logic_VECTOR(to_unsigned(0,your_value_from_clog2_function))//这里不减一
- 重新打开您的 Vivado 项目/设计,添加 UART IP、合成、生成比特流……您就完成了 :-)
修改AXI UART D16550 FIFO深度的过程记录的更多相关文章
- docker的使用---创建新的镜像(通过修改容器,个人练手理解过程记录,不推荐使用)
docker基础命令 ##列出docker客户端命令 docker docker container --help ##显示docker的版本和信息 docker --version docker v ...
- webflux延迟队列逻辑更改过程记录
title : webflux延迟队列逻辑更改过程记录 author : simonLee date : 2022/11/22 10:26 目录 webflux延迟队列逻辑更改过程记录 一.问题背景 ...
- QNX的深度嵌入过程
QNX的深度嵌入过程 1.1 QNX目标系统嵌入 利用QNX的模块性和和可裁剪性,其嵌入过程一般是: 构建Buildfile -> 编译buildfile生成系统映象文件 ...
- 深入理解FIFO(包含有FIFO深度的解释)——转载
深入理解FIFO(包含有FIFO深度的解释) FIFO: 一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行 ...
- 深入理解FIFO(包含有FIFO深度的解释)
FIFO: 一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令. 1.什么是FIFO? FIFO是 ...
- 升级Windows 10 正式版过程记录与经验
升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 64位 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接. ...
- 双系统Ubuntu分区扩容过程记录
本人电脑上安装了Win10 + Ubuntu 12.04双系统.前段时间因为在Ubuntu上做项目要安装一个比较大的软件,导致Ubuntu根分区的空间不够了.于是,从硬盘又分出来一部分空间,分给Ubu ...
- CentOS 5.5 下安装Countly Web Server过程记录
CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...
- 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...
- 升级到 ExtJS 5的过程记录
升级到 ExtJS 5的过程记录 最近为公司的一个项目创建了一个 ExtJS 5 的分支,顺便记录一下升级到 ExtJS 5 所遇到的问题以及填掉的坑.由于 Sencha Cmd 的 sencha ...
随机推荐
- Python语言基础学习报告
这个学期我们开设了一门新课程---Python,早在很久之前,我就经常在各种有关职场的帖子下面看到这个词,且多为夸赞,因此,尽管大一深受C语言和数据结构两门课的折磨,我还是怀着十分的认真和敬意开始了这 ...
- JMeter 三- Run JMeter in non-GUI mode
Run Jmeter in non-GUI mode: 1. Swith to \Jmeter\bin 2. run "jmeter -n -t E:\JmeterforLoadGenesi ...
- 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器
package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...
- 阿里云经典网络Debian 11 启动非常慢
有一台阿里云经典网络的实例.系统太老了,重装了Debian 11,但是启动非常慢,要5分钟才能开机,简直离谱. root@AliYun:~# systemd-analyze blame 5min 3. ...
- c原因学习---指针作为函数的形参
指针作为函数的形参, 可以改变实参的值. #include<stdio.h> // 交换两个变量的值 int swap(int x, int y) { int k = y; y = x; ...
- STM32-USART打印字符、字符串函数自己犯的错误反思
void UART_Send_Byte(USART_TypeDef *USARTx, uint8_t cha) { USART_SendData(USARTx, cha); while(USART_G ...
- vue项目element-ui组件打包后组件显示方框解决方式
在 utils.js文件添加一句代码 publicPath:'../../',
- laravel 表单提交 图片的异步上传
这里使用的是WebUploader 百度提供的插件 首先下载最新的包 下载第一个,解压,把解压好的文件放入public目录下 视图层中 <div class="formContro ...
- git 代码强制回滚操作整理(线上线下一起)
线上代码强制回滚操作,这边整理了一下 1.到线上 执行 git reset --hard xxxxxxxxxxx(更新前的一个版本)2.本地执行 和上面一样 git reset --hard xxxx ...
- MySQL(1): 基本操作
MySQL 是流行的关系型数据库管理系统之一,特别是在WEB应用方面.推荐用5.6版本. My Sql客户端有很多 还有PHP MyAdmin, 是以web形式控制和操作MySQL数据库的管理工具.是 ...