简易寄存器接口SMMR---正交编码器
参考简易寄存器接口SMMR的vio_uart桥接.csdnTang-Nano-1K.sipeedTANG_FPGA_Demo_Top.vmodule TANG_FPGA_Demo_Top#( // 内部 SMMR 字节地址宽度。 parameter P_ADDR_WIDTH 8, // 寄存器宽度 parameter P_DATA_WIDTH 32, // 系统时钟频率。 parameter P_CLK_FREQ 27_000_000 ) ( input CLOCK_XTAL_27MHz, input RESET, input KEY1, input RXD, output TXD, input ENCORDER_A, input ENCORDER_B, output [2:0] LED // 110 R, 101 B, 011 G ); //////////////////////////////////////////////////////////////////////////// // vio_uart桥接模块到 SMMR 路由模块之间的信号 //////////////////////////////////////////////////////////////////////////// wire w_reg_wr_en; wire [8-1:0] w_reg_wr_addr; wire [8-1:0] w_reg_rd_addr; wire [P_DATA_WIDTH-1:0] w_reg_wr_data; wire [P_DATA_WIDTH-1:0] w_reg_rd_data; wire [P_ADDR_WIDTH-1:0] w_slot_wr_addr; wire [P_ADDR_WIDTH-1:0] w_slot_rd_addr; // 写数据会同时送到所有 slot真正写入哪个 slot 由对应写使能决定。 wire [P_DATA_WIDTH-1:0] w_slot_wr_data; // slot0 的写使能和读数据。 wire w_slot0_wr_en; wire [P_DATA_WIDTH-1:0] w_slot0_rd_data; // slot1 的写使能和读数据。 wire w_slot1_wr_en; wire [P_DATA_WIDTH-1:0] w_slot1_rd_data; vio_uart_smmr_bridge #( .P_CLK_FREQ(P_CLK_FREQ), .P_UART_BPS(115200) ) u_vio_uart_smmr_bridge ( .i_clk (CLOCK_XTAL_27MHz), .i_rst_n (RESET), .i_uart_rxd (RXD), .o_uart_txd (TXD), .o_reg_wr_en (w_reg_wr_en), .o_reg_wr_addr (w_reg_wr_addr), .o_reg_wr_data (w_reg_wr_data), .o_reg_rd_addr (w_reg_rd_addr), .i_reg_rd_data (w_reg_rd_data) ); //////////////////////////////////////////////////////////////////////////// // SMMR slot 路由模块 // // 该模块根据 SMMR 地址范围选择目标 slot。 // 写操作时它给对应 slot 产生写使能。 // 读操作时它把被选中 slot 的读数据返回给 AXI-Lite 桥接模块。 // // 当前地址映射 // slot0寄存器地址 0 到 3 // slot1寄存器地址 5 到 8 //////////////////////////////////////////////////////////////////////////// smmr_slot_router u_smmr_slot_router ( .i_clk (CLOCK_XTAL_27MHz), .i_rst_n (RESET), .i_reg_wr_en (w_reg_wr_en), .i_reg_wr_addr (w_reg_wr_addr), .i_reg_wr_data (w_reg_wr_data), .i_reg_rd_addr (w_reg_rd_addr), .o_reg_rd_data (w_reg_rd_data), .o_slot_wr_addr (w_slot_wr_addr), .o_slot_wr_data (w_slot_wr_data), .o_slot_rd_addr (w_slot_rd_addr), .o_slot0_wr_en (w_slot0_wr_en), .i_slot0_rd_data(w_slot0_rd_data), .o_slot1_wr_en (w_slot1_wr_en), .i_slot1_rd_data(w_slot1_rd_data) ); //////////////////////////////////////////////////////////////////////////// // slot0 外设 // // slot0 是一个简单寄存器块。 // 它可以作为新增 SMMR 外设的模板只需要接入写使能、地址、写数据、 // 读地址和读数据就可以挂到系统中。 //////////////////////////////////////////////////////////////////////////// slot0 u_slot0 ( .i_clk (CLOCK_XTAL_27MHz), .i_rst_n (RESET), .i_reg_wr_en (w_slot0_wr_en), .i_reg_wr_addr (w_slot_wr_addr), .i_reg_wr_data (w_slot_wr_data), .i_reg_rd_addr (w_slot_rd_addr), .o_reg_rd_data (w_slot0_rd_data) ); //////////////////////////////////////////////////////////////////////////// // slot1 编码器外设 //////////////////////////////////////////////////////////////////////////// encoder_slot u_slot1 ( .i_clk (CLOCK_XTAL_27MHz), .i_rst_n (RESET), .i_encoder_a(ENCORDER_A), .i_encoder_b(ENCORDER_B), .i_reg_wr_en (w_slot1_wr_en), .i_reg_wr_addr (w_slot_wr_addr), .i_reg_wr_data (w_slot_wr_data), .i_reg_rd_addr (w_slot_rd_addr), .o_reg_rd_data (w_slot1_rd_data) ); endmoduleencoder_slot .vtimescale 1ns / 1ps module encoder_slot #( parameter P_ADDR_WIDTH 8, parameter P_DATA_WIDTH 32, parameter [P_ADDR_WIDTH-1:0] P_SLOT_BASE 4, parameter P_REG_COUNT 1 )( input wire i_clk, input wire i_rst_n, // SMMR input wire i_reg_wr_en, input wire [P_ADDR_WIDTH-1:0] i_reg_wr_addr, input wire [P_DATA_WIDTH-1:0] i_reg_wr_data, input wire [P_ADDR_WIDTH-1:0] i_reg_rd_addr, output reg [P_DATA_WIDTH-1:0] o_reg_rd_data, // Encoder input wire i_encoder_a, input wire i_encoder_b ); //////////////////////////////////////////////////////////////////////////// // 内部寄存器 //////////////////////////////////////////////////////////////////////////// reg signed [15:0] r_encoder_value; reg [1:0] r_old_code; reg [1:0] r_encoder_sync1; reg [1:0] r_encoder_sync2; //////////////////////////////////////////////////////////////////////////// // 输入同步 //////////////////////////////////////////////////////////////////////////// always (posedge i_clk or negedge i_rst_n) begin if (!i_rst_n) begin r_encoder_sync1 2b00; r_encoder_sync2 2b00; end else begin // A bit0 // B bit1 r_encoder_sync1 {i_encoder_b, i_encoder_a}; r_encoder_sync2 r_encoder_sync1; end end //////////////////////////////////////////////////////////////////////////// // 编码器解码 //////////////////////////////////////////////////////////////////////////// always (posedge i_clk or negedge i_rst_n) begin if (!i_rst_n) begin r_old_code 2b00; r_encoder_value 16d0; end else if (r_encoder_sync2 ! r_old_code) begin case (r_encoder_sync2) 2b00: begin if (r_old_code 2b10) r_encoder_value r_encoder_value 16d1; else if (r_old_code 2b01) r_encoder_value r_encoder_value - 16d1; end 2b01: begin if (r_old_code 2b00) r_encoder_value r_encoder_value 16d1; else if (r_old_code 2b11) r_encoder_value r_encoder_value - 16d1; end 2b11: begin if (r_old_code 2b01) r_encoder_value r_encoder_value 16d1; else if (r_old_code 2b10) r_encoder_value r_encoder_value - 16d1; end 2b10: begin if (r_old_code 2b11) r_encoder_value r_encoder_value 16d1; else if (r_old_code 2b00) r_encoder_value r_encoder_value - 16d1; end endcase r_old_code r_encoder_sync2; end end //////////////////////////////////////////////////////////////////////////// // SMMR Read //////////////////////////////////////////////////////////////////////////// always (*) begin if ((i_reg_rd_addr P_SLOT_BASE) (i_reg_rd_addr (P_SLOT_BASE P_REG_COUNT))) begin // 符号扩展到32位 o_reg_rd_data {{16{r_encoder_value[15]}}, r_encoder_value}; end else begin o_reg_rd_data {P_DATA_WIDTH{1b0}}; end end endmoduleReadMe.mdset src_dir D:/workspace/gitee/0/ming_tang_nano_1k/vio_uart/src set rtl_dir D:/workspace/gitee/0/ming_tang_nano_1k/vio_uart/src/rtl add_file $rtl_dir/TANG_FPGA_Demo_Top.v add_file $rtl_dir/uart_rx.v add_file $rtl_dir/uart_tx.v add_file $rtl_dir/vio_uart_smmr_bridge.v add_file $rtl_dir/smmr_slot_router.v add_file $rtl_dir/slot0.v add_file $rtl_dir/encoder_slot.v add_file $src_dir/vio_uart_prj.cst add_file $src_dir/vio_uart_prj.sdcvio_uart_prj.cstIO_LOCCLOCK_XTAL_27MHz47;IO_PORTCLOCK_XTAL_27MHzIO_TYPELVCMOS33PULL_MODEUP;IO_LOCRESET13;IO_PORTRESETIO_TYPELVCMOS33PULL_MODEUP;IO_LOCKEY144;IO_PORTKEY1IO_TYPELVCMOS33PULL_MODEUP;IO_LOCTXD40;IO_PORTTXDIO_TYPELVCMOS33PULL_MODEUPDRIVE8;IO_LOCRXD41;IO_PORTRXDIO_TYPELVCMOS33PULL_MODEUP;IO_LOCLED[2]11;IO_PORTLED[2]IO_TYPELVCMOS33PULL_MODEUPDRIVE8;IO_LOCLED[1]10;IO_PORTLED[1]IO_TYPELVCMOS33PULL_MODEUPDRIVE8;IO_LOCLED[0]9;IO_PORTLED[0]IO_TYPELVCMOS33PULL_MODEUPDRIVE8;IO_LOCENCORDER_A38;IO_PORTENCORDER_AIO_TYPELVCMOS33PULL_MODEUP;IO_LOCENCORDER_B39;IO_PORTENCORDER_BIO_TYPELVCMOS33PULL_MODEUP;测试# 查编码器值00 04 00 00 00 00# 返回编码器值是1600 041000 00 00

相关新闻

QQ空间历史说说完整备份指南:3分钟掌握GetQzonehistory终极解决方案

QQ空间历史说说完整备份指南:3分钟掌握GetQzonehistory终极解决方案

QQ空间历史说说完整备份指南:3分钟掌握GetQzonehistory终极解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里的珍贵记忆会随着时间流逝而消失&…

2026/8/1 10:17:45 阅读更多 →
矩阵论中的“完美”存在:实对称矩阵的数学定理与实战应用

矩阵论中的“完美”存在:实对称矩阵的数学定理与实战应用

在高等代数和线性代数的广阔天地中,有一类矩阵被数学家们视为“上帝的宠儿”,那就是实对称矩阵。无论是理论基础还是现实应用,它都展现出了近乎完美的特性。本文将从核心定理出发,剖析其数学本质,并深入其在大数据、物理工程等领域的实战应用。 一、 核心定理:为什么说它…

2026/8/1 10:17:45 阅读更多 →
白帽子挖洞常见漏洞误判大全:高危判成低危、有效判成无效?看完彻底避坑

白帽子挖洞常见漏洞误判大全:高危判成低危、有效判成无效?看完彻底避坑

一、前言:很多新人挖洞输在“判断能力”很多新人技术不差、操作熟练、复现流畅,但挖洞分值极低、经常被驳回、评级普遍偏低。核心原因不是不会挖洞,是漏洞风险判断错位。经常把高分高危漏洞当成普通小漏洞草草提交,也经常把无效伪…

2026/8/1 10:17:45 阅读更多 →

最新新闻

Android菜单栏开发全解析:从基础实现到动态控制与性能优化

Android菜单栏开发全解析:从基础实现到动态控制与性能优化

1. 项目概述:为什么菜单栏是Android开发的基石 在Android应用开发里,菜单栏(Menu)是一个看似基础,实则贯穿整个应用交互逻辑的核心组件。无论是右上角的三个点(溢出菜单),还是长按列…

2026/8/1 16:42:23 阅读更多 →
PoeCharm终极指南:如何用中文版Path of Building打造最强流放之路角色

PoeCharm终极指南:如何用中文版Path of Building打造最强流放之路角色

PoeCharm终极指南:如何用中文版Path of Building打造最强流放之路角色 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 还在为《流放之路》复杂的角色构建而烦恼吗?PoeCharm作…

2026/8/1 16:42:23 阅读更多 →
三国志战略版:关羽张飞关银屏蜀枪阵容从开荒到转型全攻略

三国志战略版:关羽张飞关银屏蜀枪阵容从开荒到转型全攻略

1. 项目概述:从开荒到转型的阵容构建逻辑 在《三国志战略版》这款讲究策略与节奏的SLG手游里,开荒期与转型期的阵容规划,直接决定了你整个赛季的发展上限与游戏体验。最近在玩家社区和实战中,一套围绕关羽、张飞、关银屏这三位蜀国…

2026/8/1 16:42:23 阅读更多 →
5分钟打造专属微信公众号阅读中心:告别碎片化信息焦虑

5分钟打造专属微信公众号阅读中心:告别碎片化信息焦虑

5分钟打造专属微信公众号阅读中心:告别碎片化信息焦虑 【免费下载链接】wewe-rss 🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书) 项目地址: https://gitcode.com/GitHub_Trending/…

2026/8/1 16:42:23 阅读更多 →
3分钟解锁Obsidian高效学习法:Media Extended B站插件完全指南

3分钟解锁Obsidian高效学习法:Media Extended B站插件完全指南

3分钟解锁Obsidian高效学习法:Media Extended B站插件完全指南 【免费下载链接】mx-bili-plugin 项目地址: https://gitcode.com/gh_mirrors/mx/mx-bili-plugin 你是否曾经在学习编程教程或观看在线课程时,需要在Obsidian笔记和B站浏览器之间频繁…

2026/8/1 16:42:23 阅读更多 →
Obsidian插件汉化终极指南:5分钟实现英文插件中文界面

Obsidian插件汉化终极指南:5分钟实现英文插件中文界面

Obsidian插件汉化终极指南:5分钟实现英文插件中文界面 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 你是否曾因Obsidian插件的英文界面而困扰?每次安装新插件都要反复查词典,配置过程…

2026/8/1 16:41:23 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →