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

news/2025/10/22 19:35:42/文章来源:https://www.cnblogs.com/yxysuanfa/p/19158802

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) begin
state<=0;cmd_reg<=0;A_reg<=0;B_reg<=0;dout_pro<=0;en_dout_pro<=0;
end
else begin
case(state)
0://
begin
en_dout_pro<=0;
if(en_din_pro) begin
cmd_reg<=din_pro;
state<=1;
end
end
1://收A
begin
if(en_din_pro) begin
A_reg<=din_pro;
state<=2;
end
end
2://收B
begin
if(en_din_pro) begin
B_reg<=din_pro;
state<=3;
end
end
3://指令译码和执行
begin
state<=4;
case(cmd_reg)
add_ab: begin dout_pro<=A_reg+B_reg; end
sub_ab: begin dout_pro<=A_reg-B_reg; end
and_ab: begin dout_pro<=A_reg&B_reg; end
or_ab:  begin dout_pro<=A_reg|B_reg; end
endcase
end
4://发送指令执行结果
begin
if(~rdy) begin
en_dout_pro<=1;
state<=0;
end
end
default://
begin
state<=0;
en_dout_pro<=0;
end
endcase
end
end
endmodule

接下来创建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];//链接RX
reg[12:0]                 con;
UART_top UART_top(
clk,
rst,
RX,
TX
);
initial begin
clk<=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;
end
always #5 clk<=~clk;
always@(posedge clk) begin
if(con==5000-1) begin
con<=0;
end
else begin
con<=con+1;
end
if(con==0) begin
RX_send[44:0] = RX_send[45:1];
RX_send[45] = RX_send[0];
end
end
endmodule

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

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

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

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

相关文章

10.22 CSP-S模拟37/2025多校冲刺CSP模拟赛7 改题记录

10.22HZOJ 写在前面 ACCODERS+洛谷双重大凶然后又加了场模拟赛。怎么感觉每次大凶就会临时加模拟赛。。。然后就是连续第inf场模拟赛切不了T1。。。疑似失去了所有的力气与手段。然后T2以为是假做法拿了25pts沾沾自喜,…

完整教程:LeapMotion_Demo演示

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[题解]P11126 [ROIR 2024] 三等分的数组 (Day 2)

P11126 [ROIR 2024] 三等分的数组 (Day 2) 考虑到数的选取与输入顺序无关,我们将数丢到桶里,记 \(c_x\) 为 \(x\) 出现的次数。 那么我们取出三元组的过程可以描述为下面二者之一:选取 \(c\) 中的一个位置,将其减去…

Acrobat Pro DC 2025下载及破解安装教程,附永久免费免激活中文版Acrobat Pro DC安装包(稳定版)

一、Acrobat Pro DC 2025软件下载[软件名称]: Acrobat Pro DC 2025(稳定版)[软件大小]: 1.63GB[安装环境]:Win 10及以上系统[下载链接]: (建议手机保存后到电脑端打开,下载解压无需任何密码)夸克:https://pan.qua…

VSLAM 十四讲--阅读中知识点记录

1. 前言砚上三五笔,落墨鹧鸪啼本文用于记录:VSLAM相关。 PS:笔者梦到哪里写哪里,毫无逻辑可言。。。 如有不对,欢迎评论区指正! 2. 正文 2.1 slamsimultaneous location and mapping 同步定位和建图相机:单目相…

20232307 2025-2026-1 《网络与系统攻防技术》实验二实验报告

20232307 2025-2026-1 《网络与系统攻防技术》实验二实验报告 1. 实验内容 相关知识:后门就是不经过正常认证流程而访问系统的通道。后门类型:编译器留后门、操作系统留后门、应用程序中留后门、还有潜伏于操作系统中…

Fiddler Script语句整理

请求函数: static function OnBeforeRequest(oSession:Sessiop){}响应函数: staticfunction OnBeforeResponse(oSession:Session){}修改样式语句:if (oSession.host.indexOf("mosoteach.cn") > -1) { …

微服务正在悄然消亡:这是一件美好的事

最近在做的事情正好需要系统地研究微服务与单体架构的取舍与演进。读到这篇文章,许多观点直击痛点、非常启发,于是我顺手把它翻译出来,分享给大家,也希望能给同样在复杂性与效率之间权衡的团队一些参考。 微服务正…

数据库学习篇(持续更新中)

在日常的开发中,常常会因为业务的复杂而编写复杂的数据库脚本。本篇记录博主在实际使用中的各种脚本及函数:人一旦有了梦想,怎么活都是有灵魂的!

Fortinet产品安全漏洞分析:FGFM协议未经认证连接重置漏洞

本文详细分析了Fortinet产品中的FGFM协议安全漏洞(CVE-2024-26008),该漏洞由于异常条件处理不当,允许未经认证的攻击者通过加密TCP请求重置fgfm连接,导致拒绝服务攻击风险。摘要 FortiGuard实验室发现FortiOS、Fort…

fiddler修改请求(修改搜索框的内容)

第一步:在fiddler中,在工具栏中单击“规则”——“自动断点”——“在请求前”,单击“Remove all”,清除干扰项 第二步:在浏览器中搜索“前端”并发送请求,返回fiddler,在左侧“会话列表”中,选择“前端”的数据…

20251022

今日一切正常,抽时间看看javaweb

10月22号

今天进行了离散数学和马克思主义的学习。

Python practice argvparser and config(yaml, json, xml) - ENGINEER

Python practice argvparser and config(yaml, json, xml)Python practice argvparser and config(yaml, json, xml)Time is like a fleeting show!

Yolo11分割模型

C#中部署 Yolo11分割模型存在两个输出分支。这里导出模型使用一个包含两个类别的数据集训练的。output0对应的分支。可以看到其Shape为[1,38,21504]。对于第二维度(38),前4个数据分别表示检测框的cx、cy、w、h。后两…

将“百度”的URL改为“163网易云”(修改URL地址)

第一步:打开fiddler,单击“规则”选项卡——“自动断点”——“在请求前” 第二步:在浏览器的地址栏中输入“baidu.com”并回车,返回fiddler 第三步:在左侧的“会话列表”,“URL地址”栏中找到“www.baidu.com:4…

星旗笔试

1.进程和线程区别 进程是系统进行资源分配和调度的基本单位,线程是 CPU 调度和执行的最小单位。 进程:是程序的一次动态执行过程,是系统进行资源分配和调度的独立单位。每个进程拥有独立的内存空间、文件描述符、寄…

第二次小组作业

第二次小组作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13559这个作业的目…

文学伦理学批评导论——

10.22学习文学伦理学第6周Week 6 伦理与道德的联系和区别 联系 伦生 理成 道化德:伦生理,理成道,道化德 区别 1、联系 2、区别 (1)伦理强调关系;道德强调个体(道德绑架) (2)伦理是双向性的义务;道德是单向性的义务…