3114|4

98

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

视频解码后采集到sram的程序。 [复制链接]

这是本人写的关于将视频解码后的YCbCr422中一帧图像的亮度信号Y保存到sram中,写完一帧后从sram读出进行后续分析的verilog HDL代码。现在的问题是输出的数据仅仅是最后一个数据,而地址却是逐渐累加的,没发现什么错误。希望高手们给分析一下,不胜感激!!! VGA分辨率640*480  sram是256*16 的。最后可以帮忙改正一下。

 

module sram_c5(
  VGA_VS,
  VGA_HS,
  iclk,
  swit,
  Yw,
  sram_addr,
  sram_data,
  sram_oe_n,
  sram_ce_n,
  sram_we_n,
  sram_lb_n,
  sram_ub_n,
  led,
  sram_odata,
  );
input                  VGA_VS;
input                  VGA_HS; 
input[7:0]                 Yw;
input                    iclk;
output[17:0]        sram_addr;
inout[7:0]          sram_data;
input                    swit;
output  sram_oe_n,sram_ce_n,sram_we_n,sram_lb_n,sram_ub_n;
output[7:0]              led;
output[7:0]       sram_odata;

wire               sram_oe_n1;
wire               sram_we_n1;
wire               sram_we_n2;
wire               sram_oe_n2;
wire                      con;
wire[7:0] sram_data,sram_idata,sram_odata;
wire[17:0] sram_addr1,sram_addr2;

sram_wr sram_wr(
 .iclk(iclk),
 .Yw(Yw),
 .VGA_VS(VGA_VS),
 .VGA_HS(VGA_HS),
 .sram_data(sram_data),
 .swit(swit),
 .sram_oe_n1(sram_oe_n1),
 .sram_we_n1(sram_we_n1),
 .sram_addr1(sram_addr1),
 .con(con)
 );


sram_rd sram_rd(
    .swit(swit),
 .iclk(iclk),
 .sram_data(sram_data),
 .sram_odata(sram_odata),
 .led(led),
 .sram_oe_n2(sram_oe_n2),
 .sram_we_n2(sram_we_n2),
 .sram_addr2(sram_addr2),
 .con(con)
);

assign sram_ce_n=0;
assign sram_lb_n=0;
assign sram_ub_n=1;
assign sram_addr=(!con)?sram_addr1:sram_addr2;
assign sram_oe_n=(!con)?sram_oe_n1:sram_oe_n2;
assign sram_we_n=(!con)?sram_we_n1:sram_we_n2;

 

endmodule

 

 

 

//       下面是写的模块

module sram_wr(
  sram_data,
  Yw,
  VGA_VS,
  VGA_HS,
  sram_addr1,
  iclk,

  swit,
  sram_oe_n1,
  sram_we_n1,
  con   

 );
input                         iclk;
input[7:0]                  Yw;
output[17:0]        sram_addr1;
input                     swit;
input                   VGA_VS;
input                   VGA_HS;
output[7:0]           sram_data;
output   sram_oe_n1,sram_we_n1;
output                     con;
reg[7:0]               wr_data;
reg[17:0]               addr_r;
reg                 sram_we_n1;
reg                 sram_oe_n1;
//-----------------------下面的上升沿是为了检测一帧的开始------------------------------------------//
reg pluse_buf1;
reg pluse_buf2;
always @(posedge iclk)
begin
      pluse_buf1<= VGA_VS;
      pluse_buf2<=pluse_buf1;
end
assign   pluse_raise1 = pluse_buf1  & (~pluse_buf2);//-----------vs---------------

 

 

reg flag;


always@(posedge pluse_raise1) begin
 if(!swit) flag<=0;
 else begin
     if(VGA_VS) flag<=1;
   end
end 

//-----------------------------------------------------

 

 

reg con;
always@(posedge iclk) begin
   if(!swit) begin
         wr_data<=8'd0;
         addr_r<=18'd0;
         con<=0;
         sram_we_n1<=1;
         sram_oe_n1<=1;
         end
   else if(!con) begin
           if(flag) begin
              if(VGA_VS) begin
                    if(VGA_HS) begin    
                      sram_we_n1<=0;
                      sram_oe_n1<=1;
                      addr_r<=addr_r+1;        
                      wr_data<=Yw;
                     end
                 end                                      
             else begin
                con<=1;
               end 
              
          end
           
     end
end

assign sram_addr1=addr_r;
assign sram_data=(!sram_we_n1)?wr_data:8'hzz;


endmodule   

 

 

下面是读的模块

 

module sram_rd(
  swit,
  sram_odata,
  sram_data,
  sram_addr2,
  iclk,
  con,
  sram_oe_n2,
  sram_we_n2,
  led
  );
input                       swit;
input                       iclk;
output[7:0]           sram_odata;
output[17:0]          sram_addr2;
input                        con;
input[7:0]             sram_data;
output     sram_oe_n2,sram_we_n2;
output[7:0]                  led;
 
reg[7:0]                 rd_data;
reg[17:0]                 addr_r;
reg                   sram_oe_n2;


wire                     VGA_4CLK;
reg[23:0]                     cnt1;
always@(posedge iclk)
cnt1<=cnt1+1;
assign VGA_4CLK=cnt1[23];


reg[17:0] cnt2;
always@(posedge VGA_4CLK) begin
   if(con&&swit) cnt2<=cnt2+1;
   else cnt2<=17'b0;
end


assign     sram_we_n2=1;
always@(posedge VGA_4CLK) begin
  if(con&&swit) begin
    if(cnt2<17'd47) begin
         sram_oe_n2<=0;
         addr_r<=cnt2;
         rd_data<=sram_data;
         end
    else  begin
         sram_oe_n2<=1;
         rd_data<=8'h0;    
         end
     end  
end

assign sram_addr2=addr_r;
assign sram_odata=rd_data;
assign led=sram_odata;

endmodule   

 


 

此帖出自FPGA/CPLD论坛

最新回复

你好 我也在做这方面,您有 QQ或msn么?  详情 回复 发表于 2011-8-18 13:38
点赞 关注
 

回复
举报

98

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
没有人回答吗 那我自己帮顶了
此帖出自FPGA/CPLD论坛
 
 

回复

98

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
大家先给帮顶一下好不 让高手看见就好了
此帖出自FPGA/CPLD论坛
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(中级)

4
 
看了几天实在是找不到症结所在
此帖出自FPGA/CPLD论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

5
 

你好 我也在做这方面,您有 QQ或msn么?

此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表