Skip to content

远程实验平台FPGA实现jpeg解码图片的LCD显示

Notifications You must be signed in to change notification settings

Mapplenoerror/FPGA_jpegdecode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

JPEG解码虚拟仿真综合实践

项目简介

本项目旨在实现JPEG图像的解码过程,通过虚拟仿真技术,深入研究JPEG码流的解码模块、代码及仿真分析,最终实现对JPEG文件的完整解码.

研究方法与过程

1. JPEG码流解码模块

  • jpeg_input模块
    • 通过data_r和last_b_q接口每次处理两个字节,便于标志位的识别.
    • 利用状态机(LENH、LENL、DATA)实现内部码流控制.
    • 位置计数器用于解析SOF采样精度、图像高宽、色彩通道数、水平采样因子、垂直采样因子等信息.
  • jpeg_dht模块
    • 与其他模块协作,如与jpeg_input模块通过数据接口连接,靠valid接口电平使能数据流分析.
    • 负责解析文件头FFC4部分,并构建Huffman码表,为jpeg_mcu_proc模块解析SOS图像数据块部分提供Huffman解码.
    • 可写哈夫曼表构建过程包括表号读取、位码读取、值码解析、查找表构建等步骤,创建的ram大小为8×1024,最多可存1024个码.
    • 查找表解码流程通过lookup_input_i每次传入16bit,查找最短匹配的位序列,识别出变长的Huffman码,生成查找地址lookup_addr_r,通过查找地址查找ram,输出解码值.

2. 代码调试与优化

  • jpeg码流显示调试
    • 发现jpeg码流是以字节为单位反序输入的,后续的读写代码再转化为正序.
    • 使用C语言和Matlab代码实现jpeg到mif的转化,结果一致.
    • 解决了不完全显示的问题,原因是代码中地址设置了截至的长度,修改后显示正常,address的位宽为12位,目前够用.
  • jpeg_input模块调试
    • 解决了length_q赋值不正确的问题,length_q主要用于读取每个标志位之后的该段的长度信息,实际实验中长度未超出255的范围.
  • jpeg_in_top模块调试
    • 解决了显示区域偏移的问题,通过将图片显示的偏移量置0,实现左上角显示.
  • 代码fifo读空问题
    • fifo的empty连着jpeg_input的input_valid,last_b_q的赋值已要求input_valid_i为非0.

创新部分

基于SD卡的读取对JPEG文件进行解码

  • SD卡的认识
    • SD卡从物理结构看包括存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器等5个部分.
  • SD卡中JPEG的存储
    • 使用Winhex文件打开SD卡中的JPEG文件.
  • SD卡读取代码实现
    • 实现了从SD卡中读取JPEG文件的代码.
    • 通过Winhex软件获取需要显示的两个图片的地址位置,将两个地址位置给入Verilog代码中,绑定按键,通过按键状态来改变读取地址的位置,实现两张图片的切换.

项目成果

  • 成功实现了JPEG码流的解码过程,能够完整解析JPEG图像的各个部分.
  • 通过虚拟仿真技术,验证了各模块的功能和协作关系,为后续的硬件实现奠定了基础.
  • 创新性地实现了基于SD卡的JPEG文件读取和解码,拓展了项目的应用范围.

About

远程实验平台FPGA实现jpeg解码图片的LCD显示

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published