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

这篇具有很好参考价值的文章主要介绍了SDRAM小项目——命令解析模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单介绍:

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

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

SDRAM小项目——命令解析模块,fpga开发

分析:

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

uart_flag表示数据到来。

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

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

SDRAM小项目——命令解析模块,fpga开发

命令解析模块代码:

module cmd_decode(
		input		sclk,
		input		srst,
		//from uart
		input 		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) begin
		if(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;
end

always@(posedge sclk or negedge srst )begin
		if(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 )begin
		if(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;
end

always@(posedge sclk or negedge srst )begin
		if(srst == 1'b0)
			rd_trig <= 'd0;
		else if(rec_num == 'd0 && cmd_reg == 8'haa)
			rd_trig <= 1'b1;
		else 
			rd_trig <= 1'b0;
end

always@(posedge sclk or negedge srst )begin
		if(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/1ns

module 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 begin
		sclk =1;
		srst = 0;
		#100
		srst = 1;
end

always #5 sclk   = ~sclk;

initial begin
		uart_flag <= 0;
		uart_data  <= 0;
		#200
		uart_flag <= 1;
		uart_data <= 8'h55;
		#10
		uart_flag <= 0;
		
		#200
		uart_flag <= 1;
		uart_data <= 8'h12;
		#10
		uart_flag <= 0;
		
		#200
		uart_flag <= 1;
		uart_data <= 8'h34;
		#10
		uart_flag <= 0;
		
		#200
		uart_flag <= 1;
		uart_data <= 8'h56;
		#10
		uart_flag <= 0;
		
		#200
		uart_flag <= 1;
		uart_data <= 8'h78;
		#10
		uart_flag <= 0;
		
		#200
		uart_flag <= 1;
		uart_data <= 8'haa;
		#10
		uart_flag <= 0;
end

cmd_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 work

vlog		"./tb_cmd_decode.v"
vlog		"./cmd_decode.v"

vsim	-voptargs=+acc work.tb_cmd_decode

# Set the window types
view wave
view structure
view signals

add 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的时序图设计,要搞清楚数据流的流向问题,所利用的条件,才能设计出合理的时序。文章来源地址https://www.toymoban.com/news/detail-797111.html

到了这里,关于SDRAM小项目——命令解析模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA 的SDRAM控制器

    4X16X4=256(Mbit),注意不是MByte sdram包含两个部分:sdram_ctrl、fifo_ctrl。 sdram_ctrl:其顶层为SDRAM的控制模块内部实例化了5个模块,有初始化、自刷新、写和读模块,还有一个仲裁模块对这四个不同操作进行分配; fifo_ctrl:其顶层为SDRAM的数据输入输出,内部实例化了两个用于连

    2024年02月08日
    浏览(62)
  • 【FPGA】基于Avalon_MM接口的SDRAM读写

    C4开发板上的SDRAM芯片是海力士生产,有256Mbits容量。 SDRAM是同步动态随机存储器(存储阵列不断刷新)。 SDRAM寻址基本原理:行列寻址 SDRAM的总存储容量=L-BANK的数量×行数×列数×存储单元的容量(数据线的位宽)。 clk 系统时钟 CKE 时钟使能 1:clk有效 cs_n 片选 0:clk、CKE、

    2024年02月16日
    浏览(36)
  • 深入解析SDRAM:从工作原理到实际应用

    在众多内存技术中,同步动态随机访问存储器(SDRAM)因其出色的性能和广泛的应用而备受关注。本文将从SDRAM的工作原理入手,探讨其性能优化策略和在现代电子设备中的应用。 SDRAM利用同步技术提高数据处理效率,其独特之处在于能够与系统的时钟信号同步,从而优化数据

    2024年02月22日
    浏览(49)
  • FPGA-音频模块开发(一)

    本实验将实现音频模块和FPGA之间的数据通信,通过音频模块把麦克风输入的语音数据存储到SDRAM存储器里,再把音频数据发送给音频模块,从耳机接口进行语音的播放,从而实现录音和播放的功能。 这里简单介绍一下音频模块AN831用到的音频编/解码芯片WM8731。该芯片在本设计

    2023年04月10日
    浏览(31)
  • Low Cost and High Performance FPGA with ARM and SDRAM inside

    AG10KSDE176 AGM AG10KSDE176 是由 AGM FPGA AG10K 与 SDRAM 叠封集成的芯片,具有 AG10K FPGA 的可编程功能,提供更多可编程 IO,同时内部连接大容量 SDRAM。  FPGA 外部管脚输出 EQFP176 封装底部 Pad 为 GND,管脚说明请见下表:  SDRAM 说明 内部 SDRAM 为 64Mbit(512K words × 4 banks × 32 bits)容量

    2024年02月04日
    浏览(50)
  • Python-argparse命令解析模块详解与代码展示

    目录 示例 思路 ArgumentParser add_argument 位置参数 选项参数 选项对应功能,即选项存在就运行某些代码 一个选项对应多个参数值 选项必须存在 选项存在时,参数值只能在一个范围内选择 参数组 互斥参数组(几个选项最多有一个) 总结 全部代码 参考 在类似sqlmap这种命令行框

    2023年04月08日
    浏览(38)
  • 【FPGA开发】HDMI通信协议解析及FPGA实现

      笔者在这里使用的开发板是正点原子的达芬奇开发板,FPGA型号为XC7A35TFGG484-2。参考的课程是正点原子的课程手把手教你学达芬奇达芬奇Pro之FPGA开发篇。   HDMI,全称为High Definition Multimedia Interface,即高清多媒体接口。它不仅可以传输视频信号,还可以传输音频信号。上

    2024年02月21日
    浏览(45)
  • 高云FPGA系列教程(9):cmd-parser串口命令解析器移植

    本文是高云FPGA系列教程的第9篇文章。 上一篇文章介绍片上ARM Cortex-M3硬核处理器 串口外设 的使用,演示轮询方式和中断方式接收串口数据,并进行回环测试。 本文在上一篇工程的基础上,移植cmd-parser串口命令解析器,到高云GW1NSR-4C ARM处理器上,实现3个命令:

    2024年02月08日
    浏览(37)
  • 十五、Webpack打包图片-js-Vue、Label命令、resolve模块解析

    为了演示我们项目中可以加载图片,我们需要在项目中使用图片,比较常见的使用图片的方式是两种: img元素,设置src属性; 其他元素(比如div),设置background-image的css属性; 这个时候我们打包会报错: 我们当前使用的webpack版本是webpack5: 在webpack5之前,加载这些资源我

    2024年02月09日
    浏览(38)
  • 以optee的sign_encrypt.py为例讲解argparse命令解析模块

    Argparse是 Python 标准库中推荐的命令行解析模块。该模块会自动生成提示信息,且在用户给程序传入非法参数时报错。 刚好最近在看optee的sign_encrypt.py,以它为例介绍python的argparse命令解析模块。 脚本参见:optee_os/scripts/sign_encrypt.py at master · OP-TEE/optee_os · GitHub ArgumentParser 对象

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包