<FPGA学习>一、单端口RAM读写

FPGA EP4CE10F17C8单端口RAM时序波形图
在这里插入图片描述

在这里插入图片描述
顶层模块

module ram_rw(
    input                sys_clk,
	 input                sys_rst_n
);

wire             rden_sig;
wire             wren_sig;
wire    [4:0]    address_sig;
wire    [7:0]    data_sig;
wire    [7:0]    q_sig;
ram_ctl   u_ram_ctl(
   .clk ( sys_clk ),
	.rst_n ( sys_rst_n ),
   .address ( address_sig ),
   .rden ( rden_sig ),
   .wren ( wren_sig ),
	.data (data_sig )
);
	
ram	ram_inst (
	.address ( address_sig ),
	.clock ( sys_clk ),
	.data ( data_sig ),
	.rden ( rden_sig ),
	.wren ( wren_sig ),
	.q ( q_sig )
);
endmodule

RAM读写控制模块

module ram_ctl(
    input            clk,
	 input            rst_n,
	 output wire      rden,
	 output wire      wren,
	 output reg [7:0] data,
	 output reg [4:0] address
);

reg [6:0] cnt;

always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
	     cnt <= 7'b0;
	 else
	     if(cnt == 7'd63)
		      cnt <= 7'd0;
		  else
		      cnt <= cnt + 7'b1;
end

assign wren = (cnt >= 7'd0 && cnt <= 7'd31)?1'b1:1'b0;
assign rden = (cnt >= 7'd32 && cnt <= 7'd63)?1'b1:1'b0;

always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
	     address <= 5'd0;
	 else
	     if(cnt == 7'd31)
		      address <= 5'd0;
		  else
		      address <= address + 5'd1;
end

always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
	     data <= 8'd0;
	 else
	     if(cnt < 8'd31)
		      data <= data + 8'd1;
		  else
		      data <= 8'd0;
end

endmodule

SignalTap II波形
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值