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

简单介绍:

在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.mzph.cn/news/627873.shtml

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

相关文章

打造舒适的终端环境:我的.tmux.conf配置分享

打造舒适的终端环境&#xff1a;我的.tmux.conf配置分享 大家好&#xff0c;今天我来和大家分享一下我个人的 tmux 配置文件&#xff08;.tmux.conf&#xff09;&#xff0c;通过这份配置文件&#xff0c;你可以在终端中获得更加愉悦的使用体验。废话不多说&#xff0c;让我们…

springcloud-cloud provider-payment8001微服务提供者支付Module模块

文章目录 IDEA新建project工作空间cloud-provider-payment8001微服务提供者支付Module模块建表SQL测试 IDEA新建project工作空间 微服务cloud整体聚合父工程Project 写pom文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"htt…

一文就知道uniapp等跨端开发的使用场景,学习成本,如何快速使用,基本语法等

文章目录 一、简介二、uniapp用在哪些企业三、学习成本四、本次课程概括五、相关文档和学习资料六、快速使用七、Uni-app的基本语法八、项目实战 一、简介 是一个跨平台开发各种各样应用的一套框架。只需要写一套代码&#xff0c;可以适配多达14种产品类型&#xff0c;比如H5移…

1月16日,每日信息差

​第一、苹果将推出欧盟特供版App Store。由于这些变化&#xff0c;App Store将被一分为二&#xff0c;欧盟国家有一个版本&#xff0c;世界其他地区将是另一个版本。欧盟的新法规《数字市场法案》&#xff08;DMA&#xff09;要求苹果允许开发者在App Store之外发布他们的iOS应…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-9 可观测性与分离原理

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-9 可观测性与分离原理

Dubbo应用连接Zookeeper问题与解决方案

最近&#xff0c;遇到了一个关于Dubbo应用启动的问题&#xff0c;在部署应用的过程中&#xff0c;应用无法成功连接到ZooKeeper进行服务注册。尽管telnet端口显示正常&#xff0c;排除了网络问题&#xff0c;但问题仍然存在。 首先&#xff0c;查看日志获取线索分析问题。日志…

vue知识-07

ref # 放在组件上&#xff1a; this.$refs.名字 ---组件对象.组件对象.属性 # 在vue项目中使用: // 写在组件上 <HelloWorld ref"my_hello_world"></HelloWorld>handleClick() {console.log(this.$refs)this.$refs.my_hello_world.name # 获取子组件中…

vue:使用【3.0】:条件模块

一、条件层级效果图 二、代码 <template><ContentWrap><!-- 添加条件分支:level1 --><div class"btnBox" v-if"isEdit"><el-button type"primary" click"add">添加条件分支</el-button></div…

UE5 RPG AttributeSet的设置

AttributeSet 负责定义和持有属性并且管理属性的变化。开发者可以子类化UAttributeSet。在OwnerActor的构造方法中创建的AttributeSet将会自动注册到ASC。这一步必须在C中完成。 Attributes 是由 FGameplayAttributeData定义的浮点值。 Attributes能够表达从角色的生命值到角色…

《现代C++语言核心特性解析》笔记草稿

仅供学习记录之用&#xff0c;谢绝转发 第1章 新基础类型&#xff08;C11&#xff5e;C20&#xff09; 1.1 整数类型long long 更多笔记 “在C中应该尽量少使用宏&#xff0c;用模板取而代之是明智的选择。C标准中对标准库头文件做了扩展&#xff0c;特化了long long和unsi…

【C++】vector的使用及模拟实现

目录 一、vector的介绍及使用1.1 介绍vector1.2 vector的使用1.2.1 构造1.2.2 遍历访问1.2.3 容量空间1.2.4 增删查改 二、vector的模拟实现2.1 成员变量2.2 迭代器相关函数2.3 构造-析构-赋值重载2.3.1 无参构造2.3.2 有参构造12.3.3 有参构造22.3.4 拷贝构造2.3.5 赋值重载2.…

RAG基础功能优化、以及RAG架构优化

RAG基础功能优化 对RAG的基础功能优化&#xff0c;我们要从RAG的流程入手[1]&#xff0c;可以在每个阶段做相应的场景优化。 从RAG的工作流程看&#xff0c;能优化的模块有&#xff1a;文档块切分、文本嵌入模型、提示工程优化、大模型迭代。下面针对每个模块分别做说明&#…

【IAP】FREERTOS堆大小影响到FLASH写入

最近在调LPC177X芯片IAP升级时发现&#xff0c;同一套代码&#xff0c;稍微加了点东西就导致写入失败&#xff0c;确认写入flash接口无误后 #define SRC_ADDR_NOT_MAPPED 4通过写入失败返回值&#xff0c;上网查阅资料 我在这里勾选了IRAM2区&#xff0c;也就是默认是可以使用…

兴达易控EtherCAT转Profibus网关让工业自动化变得轻松快捷

EtherCAT转Profibus网关&#xff08;XD-ECPBM20&#xff09;是一种用于实现不同通信协议间互联互通的设备。它主要用于工业控制系统中&#xff0c;能够将EtherCAT总线的数据传输转换为Profibus网络可接受的格式。这样的网关设备在工业自动化领域有着广泛的应用&#xff0c;因为…

【计算机网络】第七,八,九章摘要重点

第七章网络管理 1.计算机网络面临的两大威胁&#xff1f; 恶意程序有&#xff1a;计算机病毒&#xff0c;计算机蠕虫&#xff0c;特洛伊木马&#xff0c;逻辑炸弹&#xff0c;后门入侵和流氓软件。 2.安全的计算机网络四个目标&#xff1a; 机密性&#xff0c;端点鉴别&…

一文解析 Copycat Dex与 Bitcat Dex的区别

Copycat Dex和 Bitcat Dex都带一个 Cat 并且都是衍生品协议&#xff0c;很多人都会误认为这两个是同一个项目&#xff0c;实际不然。它们是面向两个不同赛道、不同资产类型的衍生品项目。 Copycat Dex和 Bitcat Dex都是衍生品 DEX&#xff0c;它们最本质的区别主要在于&#xf…

软件测试|使用Python提取出语句中的人名

简介 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;提取文本中的人名是一项常见的任务。Python作为一种流行的编程语言&#xff0c;拥有强大的NLP库和工具&#xff0c;使我们能够轻松地进行这项任务。在本文中&#xff0c;我们将使用Python示例来演示如何提取文本…

springboot vue线上部署项目注意跨域问题

springboot vue线上部署项目注意跨域问题 nginx配置 server {listen 8080;server_name localhost;charset utf-8;location / {root /home/user/cf/vue/dist;index index.html index.htm;try_files $uri $uri/ /index.html;add_header Access-Control-Allow-Origin *;add_heade…

MC使用Waterfall 跨服

前言 想弄一个跨服&#xff0c;目前这篇文章是边测试边写的&#xff0c;两个子服都是在同一个机器上运行的 如果两个子服在不同的网络&#xff0c;跨服的延迟就会比较高 两个子服 s1 和 s2 都是使用folia核心 版本1.20.1s1 端口: 25565s2 端口 : 25566 1.下载 Waterfall W…

Hello 2024补题

Wallet Exchange&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;A&#xff0c;B做游戏&#xff0c;它们的钱包里各有a,b个硬币&#xff0c;轮到它们操作时&#xff0c;它们可以扔掉自己或者对手钱包里的硬币&#xff0c;谁不能操作谁输&#xff0c;问…