news 2026/7/5 21:13:55

FPGA 通过串口将rom中的10个初始数据发送给目标模块tx串口(最简单的数据处理)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA 通过串口将rom中的10个初始数据发送给目标模块tx串口(最简单的数据处理)

思维分析图

rom模块的代码逻辑

`timescale 1ns / 1ps module rom_2( input sys_clk , input sys_rst_n , input tx_done , output [7:0] rom_data ,//输出给tx output reg rom_done //一个8bit数据输出的结束信号 ); reg [3:0] cnt; reg ena ; reg [7: 0] addra ; reg flag; reg [3:0] cnt_done;//计数tx——done always@(posedge sys_clk) if(!sys_rst_n) cnt<=0; else if(cnt==10) cnt<=cnt; else cnt<=cnt+1; // always@(posedge sys_clk) if(!sys_rst_n) flag<=0; else if(cnt==9) flag<=1; else flag<=0; //cnt_done计数tx_done的次数 always@(posedge sys_clk) if(!sys_rst_n) cnt_done<=0; else if(tx_done)begin if(cnt_done==9) cnt_done<=cnt_done; else cnt_done<=cnt_done+1; end else cnt_done<=cnt_done; // always@(posedge sys_clk) if(!sys_rst_n) rom_done<=0; else if(flag) rom_done<=1; else if(tx_done && cnt_done<9) rom_done<=1; else if(tx_done && cnt_done==9) rom_done<=0; else rom_done<=0; // always@(posedge sys_clk) if(!sys_rst_n) ena<=0; else ena<=1; always@(posedge sys_clk) if(!sys_rst_n) addra<=0; else if(tx_done)begin if(addra==9) addra<=addra; else addra<=addra+1; end else addra<=addra; rom_ten your_instance_name ( .clka(sys_clk), // input wire clka .ena(ena), // input wire ena .addra(addra), // input wire [7: 0] addra .douta(rom_data) // output wire [7 : 0] douta ); endmodule

tx端口模块

`timescale 1ns / 1ps module tx( input sysclk , input rst_n , input [7:0] data ,//数据并行输入 input done ,//tx的开始信号 output tx ,//数据输出--串行输出 output tx_done ); parameter clk = 50_000_000,//1s内部时钟晶振次数 bps = 9600,//波特率 CNT_MAX = clk/bps;//传输一个Bit需要的时间周期 reg [31:0] cnt_bps;//传输一个bit需要的计时器 reg [3:0] cnt_bit;//bit位计数器,看传输到第几个bit reg en;//工作时间阈值(包装数据--->tx) reg [7:0] data_reg;//输入数据寄存器 reg tx_reg; reg done_d1 =0; always@(posedge sysclk)begin done_d1<=done; end //en工作阈值 always@(posedge sysclk) if(!rst_n) en<=0; else if(done==1) en<=1; else if(cnt_bit==9 && cnt_bps==CNT_MAX-1) en<=0; else en<=en; //输入数据寄存模块 always@(posedge sysclk) if(!rst_n) data_reg<=0; else if(done_d1)//开始工作时就寄存并行输入的data data_reg<=data; else data_reg<=data_reg; //cnt_bps-->包装一个bit需要的时间计时器 always@(posedge sysclk ) if(!rst_n) cnt_bps<=0; else if(en==1)begin if(cnt_bps==CNT_MAX-1) cnt_bps<=0; else cnt_bps<=cnt_bps+1; end else cnt_bps<=0; //cnt_bit-->表示包装到了哪一个Bit--bie位计数器 always@(posedge sysclk ) if(!rst_n) cnt_bit<=0; else if(en==1)begin if(cnt_bps==CNT_MAX-1) cnt_bit<=cnt_bit+1; else cnt_bit<=cnt_bit; end else cnt_bit<=0; //tx_reg-->表示开始包装数据(数据包装流水线) always@(posedge sysclk ) if(!rst_n) tx_reg<=1;//空闲,不需要打包数据 else if(en==1)begin if(cnt_bit==0)//包装起始位 tx_reg<=0; else if(cnt_bit==9)//包装停止位 tx_reg<=1; else tx_reg<=data_reg[cnt_bit-1];//数据串行包装(由低位开始) end else tx_reg<=1; assign tx = tx_reg; assign tx_done = (cnt_bit==9&&cnt_bps==CNT_MAX-1)?1:0; endmodule

顶层模块

`timescale 1ns / 1ps module top( input sysclk , input rst_n , output tx //数据输出--串行输出 ); wire done ;//tx的开始信号 wire tx_done ; wire [7:0] rom_data; rom_2 u( . sys_clk ( sysclk ) , . sys_rst_n ( rst_n) , . tx_done ( tx_done ) , . rom_data ( rom_data ) ,//输出给tx . rom_done ( done ) //一个8bit数据输出的结束信号 ); tx tx_u( . sysclk ( sysclk ) , . rst_n ( rst_n ) , . data ( rom_data ) ,//数据并行输入 . done ( done ) ,//tx的开始信号 . tx ( tx ) ,//数据输出--串行输出 . tx_done ( tx_done ) ); endmodule
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 21:12:27

Spring WebSocket Portfolio错误处理:WebSocket连接失败与重连机制实现

Spring WebSocket Portfolio错误处理&#xff1a;WebSocket连接失败与重连机制实现 【免费下载链接】spring-websocket-portfolio 项目地址: https://gitcode.com/gh_mirrors/sp/spring-websocket-portfolio 在现代Web应用开发中&#xff0c;实时通信已成为提升用户体验…

作者头像 李华
网站建设 2026/7/5 21:12:03

Twitter API Client性能优化终极指南:缓存配置与内存管理技巧

Twitter API Client性能优化终极指南&#xff1a;缓存配置与内存管理技巧 【免费下载链接】twitter-api-client A user-friendly Node.js / JavaScript client library for interacting with the Twitter API. 项目地址: https://gitcode.com/gh_mirrors/twi/twitter-api-cli…

作者头像 李华
网站建设 2026/7/5 21:10:58

CKAD-prep-notes深度解析:Kubernetes应用开发者认证的7大核心概念

CKAD-prep-notes深度解析&#xff1a;Kubernetes应用开发者认证的7大核心概念 【免费下载链接】ckad-prep-notes List of resources and notes for passing the Certified Kubernetes Application Developer (CKAD) exam. 项目地址: https://gitcode.com/gh_mirrors/ck/ckad-…

作者头像 李华
网站建设 2026/7/5 21:10:40

5分钟快速上手:墨菲安全开源SCA工具完整使用指南

5分钟快速上手&#xff1a;墨菲安全开源SCA工具完整使用指南 【免费下载链接】murphysec An open source tool focused on software supply chain security. 墨菲安全专注于软件供应链安全&#xff0c;具备专业的软件成分分析&#xff08;SCA&#xff09;、漏洞检测、专业漏洞库…

作者头像 李华
网站建设 2026/7/5 21:09:19

Trilogy高级特性:连接池管理与异步查询实现指南

Trilogy高级特性&#xff1a;连接池管理与异步查询实现指南 【免费下载链接】trilogy Trilogy is a client library for MySQL-compatible database servers, designed for performance, flexibility, and ease of embedding. 项目地址: https://gitcode.com/gh_mirrors/tr/t…

作者头像 李华
网站建设 2026/7/5 21:07:31

端侧AI模型OTA更新策略:增量、回滚与A/B部署的工程实践

端侧AI模型OTA更新策略&#xff1a;增量、回滚与A/B部署的工程实践 一、问题背景&#xff1a;端侧模型更新的独特挑战 端侧AI模型部署在移动设备、IoT终端或嵌入式系统上&#xff0c;更新过程与云端模型存在本质差异。典型约束包括&#xff1a;网络带宽受限&#xff08;2G/4G环…

作者头像 李华