SDRAM小项目——命令解析模块

news/2024/7/27 8:57:14/文章来源:https://blog.csdn.net/weixin_49574391/article/details/135630233

简单介绍:

在FPGA中实现命令解析模块,命令解析模块的用来把pc端传入FPGA中的数据分解为所需要的数据和触发命令,虽然代码不多,但是却十分重要。

SDRAM的整体结构如下,可以看出,命令解析模块cmd_decode负责解析uart_rx中的信息

分析:

命令解析模块主要分离触发信号和需要写入数据data,uart发送端发送数据55时后表示之后的四组数据应该写入,发送aa则表示读命令,开始读数据。

uart_flag表示数据到来。

命令解析模块计数器rec_num变化时相对于uart_data延迟一个周期,这是因为rec_num为条件,确保其他变量的数据稳定性。

cmd_reg为55表示写数据,aa表示读数据,都在rec_num等于0的时候开始变化。

命令解析模块代码:

module cmd_decode(input		sclk,input		srst,//from uartinput 		uart_flag,input	[7:0]	uart_data,//output wire		wr_trig,output	wire	rd_trig,output	wire	wfifo_wr_en,output wire [7:0] wfifo_data	
);//==========================================================
//=======	define parameter and internal signal	========
//==========================================================
localparam			REC_MUN_END =  4;reg		[3:0]		rec_num;
reg		[7:0]		cmd_reg;//==========================================================
//====================	main	code	====================
//==========================================================always@(posedge sclk or negedge srst) beginif(srst == 1'b0)rec_num <= 'd0;else if(uart_flag == 1'b1 && uart_data == 8'haa &&rec_num == 'd0)rec_num <= 'd0;           //不自加else if(rec_num == REC_MUN_END && uart_flag == 1'b1)rec_num <= 'd0;else if(uart_flag == 1'b1)rec_num <= rec_num +1'b1;
endalways@(posedge sclk or negedge srst )beginif(srst == 1'b0)cmd_reg <= 'd0;else if(uart_flag == 1'b1 && rec_num == 'd0)cmd_reg = uart_data ;
end/*  always@(posedge sclk or negedge srst )beginif(srst == 1'b0)wr_trig <= 'd0;else if(rec_num == REC_MUN_END && uart_flag == 1'b1)wr_trig <= 1'b1;else wr_trig <= 1'b0;
endalways@(posedge sclk or negedge srst )beginif(srst == 1'b0)rd_trig <= 'd0;else if(rec_num == 'd0 && cmd_reg == 8'haa)rd_trig <= 1'b1;else rd_trig <= 1'b0;
endalways@(posedge sclk or negedge srst )beginif(srst == 1'b0)wfifo_wr_en <= 'd0;else if(uart_flag == 1'b1 && rec_num != 'd0)wfifo_wr_en <= 1'b1; 
end */assign wr_trig  = (rec_num == REC_MUN_END )? uart_flag : 1'b0;
assign rd_trig = (rec_num == 'd0 && uart_data == 8'haa)? uart_flag : 1'b0;
assign wfifo_wr_en  = (rec_num >= 1'd1) ? uart_flag :1'b0;
assign wfifo_data = uart_data ;endmodule

测试代码:

`timescale 1ns/1nsmodule tb_cmd_decode;reg 		sclk;
reg 		srst; 
reg 		uart_flag;
reg  		[7:0]uart_data;wire		wr_trig	    ;
wire		rd_trig	    ;
wire		wfifo_wr_en ;
wire	[7:0]	wfifo_data	;initial beginsclk =1;srst = 0;#100srst = 1;
endalways #5 sclk   = ~sclk;initial beginuart_flag <= 0;uart_data  <= 0;#200uart_flag <= 1;uart_data <= 8'h55;#10uart_flag <= 0;#200uart_flag <= 1;uart_data <= 8'h12;#10uart_flag <= 0;#200uart_flag <= 1;uart_data <= 8'h34;#10uart_flag <= 0;#200uart_flag <= 1;uart_data <= 8'h56;#10uart_flag <= 0;#200uart_flag <= 1;uart_data <= 8'h78;#10uart_flag <= 0;#200uart_flag <= 1;uart_data <= 8'haa;#10uart_flag <= 0;
endcmd_decode  cmd_decode_inst(.sclk					(sclk),.srst					(srst),.uart_flag				(uart_flag),.uart_data				(uart_data),.wr_trig				(wr_trig),.rd_trig				(rd_trig),.wfifo_wr_en			(wfifo_wr_en),.wfifo_data	            (wfifo_data)
);endmodule

modelsim脚本:

##create work library
vlib workvlog		"./tb_cmd_decode.v"
vlog		"./cmd_decode.v"vsim	-voptargs=+acc work.tb_cmd_decode# Set the window types
view wave
view structure
view signalsadd wave -divider {tb_cmd_decode}
add wave tb_cmd_decode/*
add wave -divider {cmd_decode}
add wave tb_cmd_decode/cmd_decode_inst/*run 10us

问题:

1.为什么wr_flag信号要在第四个数据发送的时候拉高,而不是在四个数据发送结束的时候拉高(视频上讲的是发送写trig信号的时候要把FIFO中的数据拿出来,所以不是在发送55的时候就拉高)

收获:

1.对于fpga的时序图设计,要搞清楚数据流的流向问题,所利用的条件,才能设计出合理的时序。

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

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

相关文章

银行储蓄系统的顶层数据流图及细化数据流图

绘制出银行储蓄系统的顶层数据流图及细化数据流图&#xff1b; 银行储蓄系统存、取款流程如下&#xff1a; 1&#xff09;业务员事先录入利率信息&#xff1b; 2&#xff09;如果是存款&#xff0c;储户填写存款单&#xff0c;业务员将存款单键入系统&#xff0c;系统更新储户存…

深度学习预备知识-数据存储、数据预处理

1.数据操作 存储 为了能够完成各种数据操作&#xff0c;我们需要某种方法来存储和操作数据。 通常&#xff0c;我们需要做两件重要的事&#xff1a; &#xff08;1&#xff09;获取数据&#xff1b; &#xff08;2&#xff09;将数据读入计算机后对其进行处理。 如果没有某…

JVM实战(19)——JVM调优工具概述

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

ChatGPT 和文心一言哪个更好用?

ChatGPT 和文心一言哪个更好用&#xff1f; 直接让文心一言来回答&#xff1a; ChatGPT和文心一言都是人工智能语言模型&#xff0c;各有其优势和特点。以下是它们在智能回复、语言准确性、知识库丰富度等方面的比较&#xff1a; 智能回复&#xff1a;ChatGPT和文心一言在智能…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件&#xff0c;写入 module.exports {publicPath: ./, }

大模型学习之书生·浦语大模型5——基于LMDeploy大模型量化部署实践

目录 大模型部署背景 LMDeploy部署 量化 TurboMind API server 动手实践环节

项目解决方案:“ZL铁路轨行车辆”实时视频监控系统

目 录 一、建设背景 1.1 政策背景 1.2 现状 二、建设目标 三、建设依据 四、建设原则 4.1经济高效性 4.2系统开放性 4.3系统继承性 4.4系统扩展性 4.5系统经济性 4.6系统安全性 五、系统架构 5.1系统架构图 5.2技术架构 1、DVS 2、中心管理服务…

Macbook空间不足怎么解决?

随着使用时间的增长&#xff0c;我们会发现Mac电脑的存储空间越来越少&#xff0c;这时候我们就需要对Mac电脑进行清理&#xff0c;以释放更多的存储空间。那么&#xff0c;Mac空间不足怎么解决呢&#xff1f; 1.清理垃圾文件 Mac空间不足怎么解决&#xff1f;首先要做的就是清…

【C++】“Hello World!“

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 ​ 2024.1.14 纪念一下自己编写的第一个C程序 #include<iostream>int main() {/*我的第一个C程序*/std::cout << "Hello world!:>" <<std::endl;ret…

数据结构与算法:归并排序

数据结构与算法&#xff1a;归并排序 归并思想递归法非递归 归并思想 在讲解归并排序前&#xff0c;我们先看到一个问题&#xff1a; 对于这样两个有序的数组&#xff0c;如何将它们合并为一个有序的数组&#xff1f; 在此我们处理这个问题的思路就是&#xff1a;开辟一个新的…

Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

文章目录 RTMP服务器搭建与视频流推送第一部分&#xff1a;搭建RTMP服务器&#xff08;流媒体服务器&#xff09;1.1 安装Docker1.2 搭建RTMP服务器 第二部分&#xff1a;使用ffmpeg进行视频推流&#xff08;推流客户端&#xff09;2.1 安装ffmpeg2.2 使用ffmpeg推流 第三部分&…

不同打包工具下的环境变量配置方式对比

本文作者为 360 奇舞团前端开发工程师 天明 前言 在现代的JavaScript应用程序开发中&#xff0c;环境变量的配置是至关重要的。不同的应用场景和部署环境可能需要不同的配置&#xff0c;例如开发、测试和生产环境。最常见的需求是根据不同的环境&#xff0c;配置如是否开启sour…

excel统计分析——Sidak、Bonferroni法多重比较

参考资料&#xff1a;生物统计学 Sidak法和Bonferroni法针对LSD法犯第Ⅰ类错误风险较大的问题进行了改进&#xff0c;通过根据平均数个数k&#xff0c;减小显著水平α的值来增大t值&#xff0c;从而增大差数显著显著性。 Sidak法的显著水平调整公式为&#xff1a; Bonferroni法…

多输入多输出 | Matlab实现基于LightGBM多输入多输出预测

多输入多输出 | Matlab实现基于LightGBM多输入多输出预测 目录 多输入多输出 | Matlab实现基于LightGBM多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现基于LightGBM多输入多输出预测&#xff08;完整源码和数据&#xff09; 1.data为数据集&a…

【目标检测实验系列】YOLOv5模型改进:融入坐标注意力机制CA,多维度关注数据特征,高效涨点!(内含源代码,超详细改进代码流程)

自我介绍&#xff1a;本人硕士期间全程放养&#xff0c;目前成果:一篇北大核心CSCD录用,两篇中科院三区已见刊&#xff0c;一篇中科院四区在投。如何找创新点&#xff0c;如何放养过程厚积薄发&#xff0c;如何写中英论文&#xff0c;找期刊等等。本人后续会以自己实战经验详细…

【2023 我的编程之旅】

前言 转眼 2024 年都过去 14 天了。回顾 2023 有太多技术上的思考以及人生的感悟&#xff0c;接下来趁着 CSDN 官方活动&#xff0c;顺便记录下来。 技术的价值 与现在的年轻人一心只想搞钱不同&#xff0c;刚毕业的时候&#xff0c;我的梦想是进入一家有实力的科技企业&…

机器学习---xgboost算法

1. xgboost算法原理 XGBoost&#xff08;Extreme Gradient Boosting&#xff09;全名叫极端梯度提升树&#xff0c;XGBoost是集成学习方法的王 牌&#xff0c;在Kaggle数据挖掘比赛中&#xff0c;大部分获胜者用了XGBoost。 XGBoost在绝大多数的回归和分类 问题上表现的十分…

STM32——ADC知识总结及多通道采样实验

1.ADC概念 ADC&#xff0c;全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 2 STM32各系列ADC的主要特性 3.F4框图 4.转换序列与转换时间 A/D转换被组织为两组&#xff1a;规则组&#xff08;常规转换组&#xff09;和注入组&#xff08;注入…

【征服redis1】基础数据类型详解和应用案例

博客计划 &#xff0c;我们从redis开始&#xff0c;主要是因为这一块内容的重要性不亚于数据库&#xff0c;但是很多人往往对redis的问题感到陌生&#xff0c;所以我们先来研究一下。 本篇&#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…

使用composer生成的DMG和PKG格式软件包有何区别

在使用Composer从包源构建软件包时候&#xff0c;有两种不同类型的包&#xff1a;PKG和DMG。你知道两者之间的区别吗? 以及如何选取吗&#xff1f; 每种格式都有各自的优势具体取决于软件包的预期用途以及用于部署软件包的工具。下面我们来了解一下PKG和DMG格式的区别和用途。…