关于base_addr和frame_addr的地址的计算

关于base_addr和rame_addr的地址的计算
一共有4个通道,实际是上base_addr来表示,看突发写DDR2的24位地址就知道了, 每一个通道有4帧数据的存储,
module vin_frame_buffer_ctrl
 #(
	parameter MEM_DATA_BITS = 64
) 
(
	input rst_n,                                    /*复位 */
	input vin_clk,                                  /*视频输入时钟 */
	input vin_vs,                                   /*视频输入场同步 */
	input vin_f,                                    /*视频输入奇偶场标志 */
	input vin_de,                                   /*视频输入数据有效 */
	input[15:0] vin_data,                           /*视频输入数据YC */
	input[11:0] vin_width,                          /*视频输入宽度*/
	input[11:0] vin_height,                         /*视频输入高度*/
	output reg fifo_afull,                          /*输入fifo快满*/
	input mem_clk,                                  /*存储器接口:时钟*/
	output reg wr_burst_req,                        /*存储器接口:写请求*/
	output reg[9:0] wr_burst_len,                   /*存储器接口:写长度*/
	output reg[23:0] wr_burst_addr,                 /*存储器接口:写首地址 */
	input wr_burst_data_req,                        /*存储器接口:写数据数据读指示 */
	output[MEM_DATA_BITS - 1:0] wr_burst_data,      /*存储器接口:写数据*/
	input burst_finish,                             /*存储器接口:本次写完成 */
	output reg[11:0] wr_max_line,                   /*辅助信号,测试用 */
	input[1:0] base_addr,                           /*帧地址参数*/
	output reg[1:0] frame_addr                      /*当前写入帧地址*/
);     

// 初始化为0

initial                                              
begin
	frame_addr <= 2'd0;
end
.....


/*突发写首地址的产生*/
always@(posedge mem_clk or negedge rst_n)
begin
	if(!rst_n)
		wr_burst_addr <= 24'd0;
	else if(burst_state_next == BURST_ONE_LINE_START)
		wr_burst_addr <= {1'b0,base_addr,frame_addr[1:0],burst_line[8:0],vin_f,8'd0};//24bit ddr addr
	else if(burst_state_next == BURST_END  && burst_state != BURST_END)
		wr_burst_addr[7:0] <= wr_burst_addr[7:0] + BURST_LEN[7:0];
	else
		wr_burst_addr <= wr_burst_addr;
end


//    frame_addr的更新
 
always@(posedge mem_clk or negedge rst_n)
begin
	if(!rst_n)
		frame_addr <= 2'd0;
	else if(frame_flag && vin_f)//没写入一帧数据frame_addr加1
	//else if(frame_flag)
		frame_addr <= frame_addr + 2'd1;
	else
		frame_addr <= frame_addr;
end	



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值