仅限于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 大小,步骤如下:

  1. 备份 Vivado/your_version/data/ip/xilinx/axi_uart16550_v2_0 和 /Vivado/your_version/data/ip/xilinx/lib_srl_fifo_v1_0 文件夹
  2. 如果您的设计中有 AXI_UART_16550 IP 核,请将其移除,保存设计/项目并关闭 Vivado
  3. 清除项目目录中的 your_project.cache 文件夹
  4. 编辑 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 ...),它只会是几个循环......

  1. 编辑 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))//这里不减一
  1. 重新打开您的 Vivado 项目/设计,添加 UART IP、合成、生成比特流……您就完成了 :-)

修改AXI UART D16550 FIFO深度的过程记录的更多相关文章

  1. docker的使用---创建新的镜像(通过修改容器,个人练手理解过程记录,不推荐使用)

    docker基础命令 ##列出docker客户端命令 docker docker container --help ##显示docker的版本和信息 docker --version docker v ...

  2. webflux延迟队列逻辑更改过程记录

    title : webflux延迟队列逻辑更改过程记录 author : simonLee date : 2022/11/22 10:26 目录 webflux延迟队列逻辑更改过程记录 一.问题背景 ...

  3. QNX的深度嵌入过程

    QNX的深度嵌入过程   1.1           QNX目标系统嵌入 利用QNX的模块性和和可裁剪性,其嵌入过程一般是: 构建Buildfile -> 编译buildfile生成系统映象文件 ...

  4. 深入理解FIFO(包含有FIFO深度的解释)——转载

    深入理解FIFO(包含有FIFO深度的解释) FIFO: 一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行 ...

  5. 深入理解FIFO(包含有FIFO深度的解释)

    FIFO: 一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令. 1.什么是FIFO? FIFO是 ...

  6. 升级Windows 10 正式版过程记录与经验

    升级Windows 10 正式版过程记录与经验 [多图预警]共50张,约4.6MB 系统概要: 预装Windows 8.1中文版 64位 C盘Users 文件夹已经挪动到D盘,并在原处建立了符号链接. ...

  7. 双系统Ubuntu分区扩容过程记录

    本人电脑上安装了Win10 + Ubuntu 12.04双系统.前段时间因为在Ubuntu上做项目要安装一个比较大的软件,导致Ubuntu根分区的空间不够了.于是,从硬盘又分出来一部分空间,分给Ubu ...

  8. CentOS 5.5 下安装Countly Web Server过程记录

    CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...

  9. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  10. 升级到 ExtJS 5的过程记录

    升级到 ExtJS 5的过程记录   最近为公司的一个项目创建了一个 ExtJS 5 的分支,顺便记录一下升级到 ExtJS 5 所遇到的问题以及填掉的坑.由于 Sencha Cmd 的 sencha ...

随机推荐

  1. GDB调用

    编译时需要加-g参数: gcc -g -o test main.c 使用GDB执行:gdb test -GDB命令

  2. Linux系统时间的设定以及自带的timesync时间同步

    1.三个阶段的系统时间设定 1.1 内核启动阶段 这里是在menuconfig文件配置RTC设定系统时间选项.      CONFIG_RTC_HCTOSYS_DEVICE="rtc1&qu ...

  3. java中post推送json格式字符串

    最近项目中遇到post推送json格式字符串,之前写过推送json数据,调用失败,才发现是直接推送字符串,只不过字符串是json的格式. 在postman中调用如下: Java中代码如下: /** * ...

  4. 新建zabbix数据库

    1.安装mysqldnf install -y @mysqlsystemctl start mysqld.servicesystemctl enable mysqld.service初始化mysqlm ...

  5. Chrome 中的 JavaScript 断点设置和调试技巧--转自hanguokai.com

    你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用 ...

  6. Finance财务软件(如何运行该软件)

    下载软件 首先,去gitHub下载该项目的release,尽量下载最新版本:https://github.com/edwardorchis/finance/releases.国内也可以在码云下载htt ...

  7. Django中关于Manager的使用

    首先介绍一下 manager 的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用 manager 来实现. 比如我们在前面的笔记中介绍的 model 的 create().update ...

  8. JDBC之Statement

    Statement 目录 Statement Statement Statement概述 要执行的SQL分为两类 查询 增删改 Statement继承体系 SQL注入问题 SQL注入问题解决 获取得到 ...

  9. HDLbits——Exams/2014 q4b

    题目要求 使用verilog描述如图所示得移位寄存器: Write a top-level Verilog module (named top_module) for the shift regist ...

  10. C# 使用多线程的几种方式

    1.Thread 详细介绍:https://www.cnblogs.com/cheng8/p/16147918.html 使用Thread类通过ThreadStart(无参数)或Parameteriz ...