当前位置: 首页 > news >正文

【最终章】-串口收发指令处理器-Verilog语法学习EP12

EP10和EP11分别实现了串口接收和串口发送,现在要把他们从小模块综合起来成为一个大模块。

创建cmd_pro.v,代码如下:

//2025.9.23
//串口指令处理器
module cmd_pro(clk,rst,din_pro,en_din_pro,dout_pro,en_dout_pro,rdy
);
input               clk;
input               rst;
input[7:0]          din_pro;//指令和数据输入端口
input               en_din_pro;//输入使能
output[7:0]         dout_pro;//指令执行结果
output              en_dout_pro;//指令输出使能
output              rdy;//串口发送模块看空闲标志reg[2:0]            state;//主状态机寄存器
reg[7:0]            cmd_reg,A_reg,B_reg;//存放指令、A、B
reg[7:0]            dout_pro;
reg                 en_dout_pro;parameter           add_ab=8'h0a;
parameter           sub_ab=8'h0b;
parameter           and_ab=8'h0c;
parameter           or_ab =8'h0d;always@(posedge clk or negedge rst) begin
if(~rst) beginstate<=0;cmd_reg<=0;A_reg<=0;B_reg<=0;dout_pro<=0;en_dout_pro<=0;
end
else begincase(state) 0://beginen_dout_pro<=0;if(en_din_pro) begincmd_reg<=din_pro;state<=1;endend1://收Abeginif(en_din_pro) beginA_reg<=din_pro;state<=2;endend2://收Bbeginif(en_din_pro) beginB_reg<=din_pro;state<=3;endend3://指令译码和执行beginstate<=4;case(cmd_reg)add_ab: begin dout_pro<=A_reg+B_reg; endsub_ab: begin dout_pro<=A_reg-B_reg; endand_ab: begin dout_pro<=A_reg&B_reg; endor_ab:  begin dout_pro<=A_reg|B_reg; endendcaseend4://发送指令执行结果beginif(~rdy) beginen_dout_pro<=1;state<=0;endenddefault://beginstate<=0;en_dout_pro<=0;endendcase
end
endendmodule

接下来创建UART_top.v,代码如下:

//2025.9.23
//串口指令处理器
`timescale 1ns/10ps
module UART_top(clk,rst,RX,TX
);
input               clk;
input               rst;
input               RX;
output              TX;wire[7:0]           din_pro;
wire                en_din_pro;
wire[7:0]           dout_pro;
wire                en_dout_pro;
wire                rdy;UART_RXer UART_RXer(.clk(clk),.rst(rst),.RX(RX),.data_out(din_pro),.en_data_out(en_din_pro)
);UART_TXer UART_TXer(.clk(clk),.rst(rst),.data_in(dout_pro),.en_data_in(en_dout_pro),.TX(TX),.rdy(rdy)
);cmd_pro cmd_pro(.clk(clk),.rst(rst),.din_pro(din_pro),.en_din_pro(en_din_pro),.dout_pro(dout_pro),.en_dout_pro(en_dout_pro),.rdy(rdy)
);endmodule//-----testbench of UART_TOP----
module UART_top_tb;
reg             clk,rst;
wire             RX;
wire            TX;reg[45:0]           RX_send;//里面装有串口字节发送数据
assign              RX=RX_send[0];//链接RXreg[12:0]                 con;UART_top UART_top(clk,rst,RX,TX
);initial beginclk<=0;rst<=0;RX_send<={1'b1,8'h49,1'b0,1'b1,8'h06,1'b0,1'b1,8'h0a,1'b0,16'hffff};con<=0;#17 rst<=1;#400000   $stop;
endalways #5 clk<=~clk;always@(posedge clk) beginif(con==5000-1) begincon<=0;endelse begincon<=con+1;endif(con==0) beginRX_send[44:0] = RX_send[45:1];RX_send[45] = RX_send[0];end
endendmodule

对UART_top的测试向量的波形图仿真,验证通过:

Verilog零基础入门 本套课程的学习都是根据李老师的课程讲座进行补充的,代码都发在专栏中了,供大家查阅,希望大家都能成为FPGA糕手😋

http://www.dtcms.com/a/399291.html

相关文章:

  • 嵌入模型与向量数据库
  • 白山商城网站建设昆明网站建设猫咪
  • git的在工作中使用的一些注意事项
  • 河北网站备案多久wordpress站点管理
  • 力扣300.最长递增子序列(经典dp)力扣375.猜数字II力扣.329矩阵最长的递增子序列力扣.33搜索旋转排序数组
  • Kasaraju 算法详解:强连通分量(SCC)检测与循环依赖分析
  • python+springboot+vue的食物营养分析与推荐网站
  • 网站前端开发工具有哪些?常用网站前端开发工具推荐、网站前端开发工具对比与最佳实践分享
  • SMBJ 简单使用指南 实现在 Java/Android 程序中访问 SMB 服务器
  • 做网站市场价关键词首页排名优化价格
  • 给菠菜网站做外包网站主持人制作方法
  • C#性能优化实战:多线程与异步编程技巧详解
  • 网站开发 报价单 表格免费网络电视直播
  • 软件测试自动化率和自动化误报率
  • 储能电池包的自动化产线探秘|深圳比斯特自动化
  • 企业内部网站开发电商网站设计岗位主要是
  • 为什么自己做的网站打开是乱码上海自助建站系统
  • Spring AOP + Redisson 实现基于注解的分布式限流方案
  • VMware 性能优化完整指南
  • Vue 3 项目实战教程大事件管理系统 (一):从零开始搭建项目基础
  • 手机Nexus5 安装 Linux(3) - python3
  • vue el-form 自定义校验, 校验用户名调接口查重
  • 大型网站开发团队北京市轨道交通建设管理有限公司网站
  • 【力扣LeetCode】 349_两个数组的交集
  • 学校做好网站建设目的优化优化
  • 【论文阅读】-《Attention Is All You Need》(Transformer)
  • 网站开发工程师任职资格关于建设殡葬网站的报告范文
  • 北京市保障性住房建设投资中心网站6山东省住房和城乡建设部网站首页
  • 【SpringBoot】27 核心功能 - Web开发原理 - Spring MVC中的定制化原理
  • 自动化接口框架搭建分享-pytest