UART转APB模块ModelSim仿真

news2025/3/26 10:55:52

一、简介

  之前介绍过一个UART转AHB模块,这个代码的框架有个好处,就是FPGA内总线接口比较容易修改成其他总线接口。下图是UART转AHB模块中子模块uart_ahb_mst的框图,主要有三个状态机:
(1) UART_RX_FSM将接收的UART数据解析出命令,地址和数据存入到RX_FIFO;
(2) UART_TX_FSM将读命令返回的读数据从TX_FIFO中读出,并按照字节输出;
(3) AHB_FSM将RX_FIFO中的命令,地址和数据取出按AHB格式去读写寄存器,再将读返回数据存入到TX_FIFO中。
  因此,只要将AHB_FSM按APB总线时序修改,其他模块可以不动,就能实现UART转APB总线接口。
在这里插入图片描述

二、简介

  APB(Advance Peripheral Bus)也是一种常用的FPGA内部总线接口。接口保留APB接口中的主要端口,描述如下。
在这里插入图片描述
  写传输时序图如下图,主机在T1时刻把所要访问的地址,命令和数据全部放到APB总线上。在T2时刻,从机发现自己的PSEL信号为高,PWRITE为高,就知道主机选择它来处理数据的写操作,此时从机内部准备好处理数据的准备动作,在T3时刻,从机完成总线上数据采样并进行内部数据处理。
在这里插入图片描述

  读传输时序图如下图,主机在T1时刻把所要访问的地址,命令全部放到APB总线上。在T2时刻,从机发现自己的PSEL信号为高,PWRITE为低,就知道主机选择它来读操作,并将读取的数据放到APB总线上,在T3时刻,主机完成总线上读数据采样。
在这里插入图片描述

三、模块介绍

  仿真工程可以从此地址下载https://download.csdn.net/download/cjie221/90497735
  如下图是UART转APB模块的功能框图。与之前介绍过一个UART转AHB模块类似。主要分两部分,uart_slv_top模块和uart_apb_mst模块。
在这里插入图片描述

1. uart_slv_top模块

  uart_slv_top模块相当于UART的从设备,接收从上位机发送过来的串行指令数据,转成字节数据和数据使能信号。框图和主要端口如下图。
在这里插入图片描述

  此模块与UART转AHB中模块一样,其中uart_rxs用2个计数器,一个计每个bit位的时钟数,另一个计bit位数,1个开始位,8个数据位,一个停止位,共10位。然后将串行8个数据位转成并行输出并加上数据有效指示信号。
  uart_txs同样也是用2个计数器实现数据转换,一个计每个bit位的时钟数,另一个计bit位数。在tx_rdy信号为高时,等待tx_wrreq请求信号和数据,然后拉低tx_rdy信号,表示发送模块正在忙,待串行数据传输完,再拉高tx_rdy。

2. uart_apb_mst模块

  uart_apb_mst模块接收uart_slv_top模块发送过来的rx_data数据,解析出读写命令和地址,再转成APB总线接口输出控制APB slave从模块。如果是读命令,还要将读回的寄存器值转成tx_wrreq请求信号和数据送给uart_slv_top模块。
框图和主要端口如下图。
在这里插入图片描述

四、实际仿真过程

  如下图所示是testbench框图,除uart_apb_mst_top模式是被测试模块,其他模块是测试激励和相关辅助模块。
在这里插入图片描述

  uart_cmd_trans模块主要有两个作用,一是负责将如下字符转成ASCII 码输出。

define CHAR_SPACE      8'h20
`define CHAR_R_UP       8'h52
`define CHAR_r_LO       8'h72
`define CHAR_W_UP       8'h57
`define CHAR_w_LO       8'h77
`define CHAR_0          8'h30
`define CHAR_1          8'h31
`define CHAR_2          8'h32
`define CHAR_3          8'h33
`define CHAR_4          8'h34
`define CHAR_5          8'h35
`define CHAR_6          8'h36
`define CHAR_7          8'h37
`define CHAR_8          8'h38
`define CHAR_9          8'h39
`define CHAR_A_UP       8'h41
`define CHAR_B_UP       8'h42
`define CHAR_C_UP       8'h43
`define CHAR_D_UP       8'h44
`define CHAR_E_UP       8'h45
`define CHAR_F_UP       8'h46
`define CHAR_a_LO       8'h61
`define CHAR_b_LO       8'h62
`define CHAR_c_LO       8'h63
`define CHAR_d_LO       8'h64
`define CHAR_e_LO       8'h65
`define CHAR_f_LO       8'h66 

  二是产生寄存器读写测试指令。可根据自己需要,修改指令数量和内容
localparam N = 4;//instruction number, must match with actual memory depth
assign memc[0] = "R 0000000a ";
assign memc[1] = “W 0000000a 00001234”;
assign memc[2] = "R 00000004 ";
assign memc[3] = "R 0000000a ";

  写寄存器命令格式W 地址 数据,例如:W 0000000a 00001234
  读寄存器命令格式R 地址,例如:R 00000004
  命令,地址和数据之间用1个空格隔开,命令w和r,大小写都可以。地址和数据都用32位的十六进制表示,不用加0x前缀。

  uart_mst_top模块将ASCII 码转成UART格式串行输出,模拟上位机的UART端口。
  仿真波形如下图所示。
在这里插入图片描述

结语

  通过ModelSim仿真,我们能够确认UART转APB转换模块的功能,满足预期设计。并且如有需要FPGA内总线接口也比较容易改成其他总线接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换,UI 提供设计图片即可达到效果; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码; 拿到就能用轻松解决!帮忙点个关注吧!

【江协科技STM32】BKP备寄存器RTC实时时钟(学习笔记)

BKP备寄存器 BKP简介 BKP(Backup Registers)备份寄存器BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒&#xff0…

卷积神经网络 - 参数学习

本文我们通过两个简化的例子,展示如何从前向传播、损失计算,到反向传播推导梯度,再到参数更新,完整地描述卷积层的参数学习过程。 一、例子一 我们构造一个非常简单的卷积神经网络,其结构仅包含一个卷积层和一个输出…

亮数据爬取API爬取亚马逊电商平台实战教程

前言 在当今数据驱动的商业环境中,企业需要快速、精准地获取互联网上的公开数据以支持市场分析、竞品调研和用户行为研究。然而,传统的手动网页爬取方式面临着诸多挑战:IP封锁、验证码干扰、网站结构频繁变更,以及高昂的运维成本…

[CLS] Token 在 ViT(Vision Transformer)中的作用与实现

[CLS] Token 在 ViT(Vision Transformer)中的作用与实现 1. 什么是 [CLS] Token? [CLS](classification token)是Transformer模型中一个可学习的嵌入向量,最初在 BERT(Bidirectional Encoder …

基于网启PXE服务器的批量定制系统平台

项目概述 1.需求 公司新购了一批服务器和台式机,需要为台式机和服务器安装系统,一部分需要安装国产OpenEuler,一部分要求安装CentOS 7.9,同时也要满足定制化需求,即按要求分区安装相应软件。 2.使用开源软件 &…

在本地Windows机器加载大模型并生成内容

本篇演示在本地机器下载和加载大模型并获取AI产生的内容。简单起见,使用的大模型是Qwen2.5-0.5B-Instruct,整个模型的所有文件不到1G。 Qwen2.5-0.5B-Instruct 是阿里巴巴云 QWen 团队基于 Transformer 架构开发的轻量级指令调优语言模型,专…

热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二

找树左下角的值 本题递归偏难,反而迭代简单属于模板题, 两种方法掌握一下 题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html 我们来分析一下题目&#…

【计算机网络】-计算机网络期末复习题复习资料

一、计算机网络体系结构(800字) 1. OSI参考模型 七层结构:物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能: 物理层:比特流传输(如RJ45、光纤接口) 数据链路层&…

批归一化(Batch Normalization)与层归一化(Layer Normalization)的区别与联系

文章目录 一、Batch normalization 理论与应用1. 理论解释2. 数值例子 二、Layer normalization 理论与应用1. 理论解释2. 数值例子 三、Layer Normalization 和 Batch Normalization 的区别四、《Transformers without Normalization》笔记 一、Batch normalization 理论与应用…

12届蓝桥杯—货物摆放

货物摆放 题目描述 小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…

c++进阶--哈希表的实现

大家好,今天我们来学习ubordered_set和unordered_map的底层哈希表。 目录 哈希表实现 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因⼦ 1.4 将关键字转为整数 1.5 哈希函数 下面我们介绍几种哈希函数:1.5.1 除法散列法/除留余数法 1.…

颠覆传统:SaaS 品牌如何通过 SEO 策略引爆市场!

SaaS 商业模式提供了令人难以置信的可扩展性和盈利能力——但前提是与正确的营销增长策略相结合。 SaaS 品牌知道,托管基于云的应用程序的成本会随着用户量的增加而降低,因此必须专注于订阅者的快速增长,以保持竞争力并降低成本。 许多 CMO…

特殊行车记录仪DAT视频丢失的恢复方法

行车记录仪是一种常见的车载记录仪,和常见的“小巧玲珑”的行车记录仪不同,一些特种车辆使用的记录仪的外观可以用“笨重”来形容。下边我们来看看特种车载行车记录仪删除文件后的恢复方法。 故障存储: 120GB存储设备/文件系统:exFAT /簇大小:128KB 故…

数据库中不存在该字段

mybatisplus 定义的类中某些字段是数据库里面没有的,我们可用tablefield(existfalse)来注解,演示如下:

吾爱出品,文件分类助手,高效管理您的 PC 资源库

在日常使用电脑的过程中,文件杂乱无章常常让人感到困扰。无论是桌面堆积如山的快捷方式,还是硬盘中混乱的音频、视频、文档等资源,都急需一种高效的整理方法。文件分类助手应运而生,它是一款文件管理工具,能够快速、智…

关于瑞芯微开发工具(RKDevTool)刷机下载Boot失败原因的研究

昨天发了文章《网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试》,其中有关于刷机各种问题的一些解决方法。 网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试-CSDN博客文章浏览阅…

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程)

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程) 一、获取网页数据请求流程 二、目标网址、cookie生成(逐步分析) 1、目标网址:aHR0cHM6Ly9zdWdoLnN6dS5lZHUuY24vSHRtbC9OZXdzL0NvbHVtbnMvNy9JbmRleC5odG1s 2、快速定位入口方法 1、通过脚本监听、hook_cookie等操作可…

Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)

1 主要目的 在Excel中,经常会遇到需要制作多级联动下拉菜单的情况,要求单元格内填写的内容只能从指定的多个选项中进行选择,并且需要设置多级目录,其中下级目录的选项内容要根据上级目录的填写内容确定,如下图所示&am…

excalidraw画图工具——背景画布有无格子设置

服啦找了大半天,愣是没找到 toggle grid : 切换格子… Excalidraw的背景格子 只要右键,将这个勾取消就好了?