矿卡EBAZ4203-zynq7010的学习之旅(6)


前言

上次学习使用了xilinx的IP核 Clock Wizard,这次我们继续使用IP核----Block Memory Generator(块存储生成器)生成单端口RAM(可读可写)。

一、Block Memory Generator介绍

Vivado 软件自带IP核Block Memory Generator(块存储生成器), 可以配置成 RAM 或者ROM。RAM 是一种随机存取存储器,不仅仅可以存储数据, 同时支持对存储的数据进行修改;而 ROM 是一种只读存储器,在工作时只能读出数据,而不能写入数据。
此外需要注意的是,不管使用IP核配置成 RAM 或者 ROM 使用的资源都是 FPGA 内部的 BRAM。
IP核信号介绍
addra:端口A的地址信号,读或者写数据的地址都是用该信号
clka:端口A的时钟信号
dina:端口A的数据输入端口,可以向RAM写入数据
douta:端口A的数据输出端口,可以从RAM中读出数据,需要注意的是该信号输出需要过一个时钟周期,如果打开了Primitives Output Register这个选项,打开输出总线后的寄存器,就会使得数据输出经过两个时钟周期(一般为了改善时序才打开功能,在这次实验中我们关闭,更好观察信号输出)。
ena:端口A的使能信号,高电平使能,低电平禁止(写入读出都无法操作)。
wea:端口A的写入使能信号,高电平对应的地址写入数据,低电平对应的地址读出数据。

二、使用步骤

1.IP核设置

建立新工程之后,打开IP Catalog,双击Block Memory Generator打开IP核的设置。
Basic页面
Basic页面最关键的设置是Interface Type设置为Native,设置总线接口类型为Native(标准RAM接口总线),Memory Type设置为Single Port RAM (单端口RAM)。
其他设置保持默认就可以。
Porta设置
端口A的设置页面,需要设置的主要是读写的宽度和深度,宽度决定着地址能存储的最大数据是多少,深度决定着能存储的最多数目是多少,在这里我设置的深度是1024个,宽度是18位。
Operating Mode: RAM 读写操作模式设置为No Change,不变模式下读写分开操作,不能同时进行读取和写入。
Port A Optional Output Register:端口 A 输出寄存器选项。此选项关闭,用于更好观察时序。

在Other Option设置页面中最主要是设置RAM的初始值,本次实验不需要,因此默认即可。
最后总结页面展示了消耗的资源。
总结页面

2.IP核使用

首先我对IP核进行了封装,将IP核的端口一直打开,并且地址在复位的时候等于0其他情况直接赋值。

代码如下:

module rom_ctrl(
    input  			sys_clk,
    input  			sys_rst_n,
    input  [9:0]	rom_addr,
    input  [17:0]	rom_data_in,
	input 			rom_wr_en,
    output [17:0]	rom_data_out
    );
	
	reg [9:0] rom_addra;
	
	always@(posedge sys_clk or negedge sys_rst_n) begin
		if(!sys_rst_n)
			rom_addra <= 10'd0;
		else
			rom_addra <= rom_addr;
	end

blk_mem_gen_0 mem_ram (
  .clka(sys_clk),    	// input wire clka
  .ena(1'b1),      		// input wire ena
  .wea(rom_wr_en),      // input wire [0 : 0] wea
  .addra(rom_addra),  	// input wire [9 : 0] addra
  .dina(rom_data_in),   // input wire [17 : 0] dina
  .douta(rom_data_out)  // output wire [17 : 0] douta
);
endmodule

2.测试代码

在这个测试代码中,首先复位一次,然后每5ns时钟信号翻转一次,也就是周期为10ns。
然后在时钟信号的控制下,有限状态机进行状态的迁移,一开始状态机处于2’d0的状态,这个状态将完成数据的写入,地址和输入的数据一起加,直到第512个地址,也就是511的时候,状态转移到2’d1,此时开始读出数据,待到地址自加到511时候,有限状态机重新进入2’d0状态,完成数据写入。

代码如下:

`timescale 1ns / 1ps
module test();

reg 		sys_clk;
reg 		sys_rst_n;
reg  [9:0]	rom_addr;
reg  [17:0]	rom_data_in;
reg 		rom_wr_en;
wire [17:0]	rom_data_out;


rom_ctrl rom_ctrl(
.sys_clk			(sys_clk),
.sys_rst_n			(sys_rst_n),
.rom_addr			(rom_addr),
.rom_wr_en			(rom_wr_en),
.rom_data_in		(rom_data_in),
.rom_data_out		(rom_data_out)
);

initial begin
sys_rst_n = 0;
sys_clk = 0;
#10
sys_rst_n = 1;
forever begin
	sys_clk = ~sys_clk;
	#5;
	end
end

reg [1:0] state_now;

always@(posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n) begin
		state_now 	<= 2'd0;
		rom_addr  	<= 10'd0;
		rom_data_in <= 18'd0;
		rom_wr_en 	<= 1'b0;
	end
	else
		case (state_now)
		2'd0: begin 
			if(rom_addr < 10'd512 - 1'b1) begin 
				rom_wr_en 	<= 1'b1;
				rom_addr 	<= rom_addr + 1'b1;
				rom_data_in <= rom_data_in + 1'b1;
			end
			else begin
				rom_wr_en 	<= 1'b0;
				rom_addr 	<= 10'd0;
				rom_data_in <= 18'd0;
				state_now 	<= 2'd1;
			end
				
		end
		2'd1: begin 
			if(rom_addr < 10'd512 - 1'b1) begin 
				rom_addr 	<= rom_addr + 1'b1;
			end
			else begin
				rom_addr 	<= 10'd0;
				state_now 	<= 2'd0;
			end	
		end
		endcase
end

endmodule

该代码比较清晰,因此未写注释。

3.功能仿真波形图

在这里插入图片描述
在这里插入图片描述
上图是功能仿真之后的波形图,从图中可以看着状态机一直在0和1状态跳转,完成数据的写入和读取,第二张图可以看出当地址为511时候状态发生迁移,读取的时候,地址和读取的数据相差1个时钟周期和预期一致。

总结

以上就是今天要讲的内容,本文简单介绍了Block Memory Generator IP,以及使用IP核做了一个简单的写入读取测试文件。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ebaz4203是一种电子设备的原理图,主要包括了电路的结构和元件的连接方式。它可能是一种特定的电路板,也可能是一种嵌入式系统的原理图。 ebaz4203原理图可能包含了多个电子组件,如电阻、电容、晶体管等。这些元件通过不同的连接方式组成了一个完整的电路结构,实现了特定的功能。 通过查阅ebaz4203原理图,我们可以了解到不同元件之间的连接关系,以及电源的输入输出等信息。原理图图示了电路的物理结构和信号流动的路径。 对于电子工程师或电子爱好者来说,ebaz4203原理图是非常重要的,可以帮助他们了解电路的工作原理和设计电路板。通过分析原理图,他们可以进行电路的修改、优化和故障排除等工作。 总之,ebaz4203原理图是一种电子设备的详细图纸,它展示了电路的结构和元件的连接方式,对于理解电路的工作原理和进行电路设计非常有帮助。 ### 回答2: ebaz4203原理图是一种电路图或者电子设计图,用于描述ebaz4203芯片或设备的电路连接方式和运行原理。原理图通常由各种电子元件(如电阻、电容、电感等)和它们之间的连接线组成。 ebaz4203是一个特定的芯片或设备的型号,它可能是一款微控制器、集成电路或其他电子产品。ebaz4203原理图可以帮助工程师或技术人员理解设备的电路结构和工作方式,以便于进行调试、维修或进一步的改进。 在原理图中,不同的电子元件会标示出其符号和数值。连接线表示元件之间的电路连接。元件之间的连接方式和组合决定了整个电路的功能和性能。 ebaz4203原理图可能包含各种功能模块,如中央处理器(CPU)、存储器、输入输出接口、电源管理等。这些模块通过不同的电路连接方式相互连接,并通过特定的信号线传输和交换数据。 通过仔细研究和分析ebaz4203原理图,可以理解芯片或设备的工作原理、信号传输路径和各个模块之间的相互关系。这对于设计、调试和维修电子设备都非常重要。 综上所述,ebaz4203原理图是一种描述该芯片或设备电路连接方式和工作原理的电子图纸,可以帮助工程师理解和操作设备。 ### 回答3: ebaz4203是一种虚拟电路原理图,通常用于电子设备的设计和开发。原理图是电路设计师根据电子元件的特性和功能,通过符号、连线等方式将电路的结构和工作原理表示出来的图示。 在ebaz4203的原理图中,一般包含多个电子元件和它们之间的电连接。这些元件可能包括电阻、电容、电感、晶体管、集成电路等。通过在原理图中的符号以及符号间的连线来展示它们如何相互连接和工作。 ebaz4203原理图的设计旨在实现特定的功能。根据具体的需求,原理图中可能会包含不同类型的电子元件和电路结构,如放大器、滤波器、时序电路等。这些元件和电路结构的连接方式和参数设置,决定了ebaz4203电路的工作性能和特点。 通过ebaz4203原理图,电路设计师可以清晰地了解电路的结构和工作原理,以及各个元件之间的关系。在实际的电路设计和开发过程中,原理图是进行电路仿真和测试的基础。通过对原理图的分析和优化,设计师可以不断改进电路的性能和可靠性。 总之,ebaz4203原理图是一种电子电路的图示,通过符号和连线方式,展示了电路中不同元件之间的连接和工作原理。它在电子设备的设计和开发中具有重要的作用,帮助设计师理解和改进电路的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值