垂直网站怎么建设蒙牛网站是谁做的
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:31
当前位置: 首页 > news >正文
垂直网站怎么建设,蒙牛网站是谁做的,360房产网郑州官网,北京网站设计服务商目录1、前言2、模拟视频概述3、模拟视频颜色空间4、逐行与隔行5、BT656数据与解码BT656数据格式BT656数据解码6、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析7、设计思路与框架8、vivado工程详解9、上板调试验证10、福利#xff1a;工程代码的获取1、前言…
目录1、前言2、模拟视频概述3、模拟视频颜色空间4、逐行与隔行5、BT656数据与解码BT656数据格式BT656数据解码6、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析7、设计思路与框架8、vivado工程详解9、上板调试验证10、福利工程代码的获取1、前言
大自然的信号都是模拟的视频信号也不例外。视频信号是指电视信号、静止图象信号和可视电视图像信号。视频信号分为三种制式PAL、NTSC 和 SECAM。既然 PAL、NTSC、SECAM 都是模拟信号FPGA 处理的是数字信号有些 FPGA内部自带 AD可以处理模拟信号例如 Altera 的 MAX10因此中间需要一个芯片做转换也就是一个 ADC学名叫做视频解码芯片。 本设计使用TW2867作为视频解码芯片TW2867可输出PAL或者NTSC代码中设置了配置参数可任意选择其一TW2867解码出4路BT656视频BT656解码、图像缩放、视频去隔行、图像缓存后HDMI输出。
本文详细描述了FPGA实现模拟视频解码输出的设计方案工程代码编译通过后上板调试验证文章末尾有演示视频可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的数字成像和图像传输领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
2、模拟视频概述
大自然的信号都是模拟的视频信号也不例外。视频信号是指电视信号、静止图象信号和可视电视图像信号。视频信号分为三种制式PAL、NTSC 和 SECAM接下来简单介绍一下这对于后期调试电路很有帮助。 PAL 制又称为帕尔制。PAL 是英文 Phase Alteration Line 的缩写意思是逐行倒相也属于同时制。“PAL”有时亦被用来指 625 线每秒 25 格隔行扫描PAL 色彩编码的电视制式。NTSC 是 National Television Standards Committee 的缩写意思是“美国国家电视标准委员会”。NTSC 负责开发一套美国标准电视广播传输和接收协议。SECAM 制式又称塞康制SECAM 是法文 Sequentiel Couleur A Memoire 缩写意为“按顺序传送彩色与存储”是一个首先用在法国模拟彩色电视系统。这只是简单的概述关于 PAL、NTSC 和 SECAM 更详细的资料请参考视频技术手册。 既然 PAL、NTSC、SECAM 都是模拟信号FPGA 处理的是数字信号有些 FPGA内部自带 AD可以处理模拟信号例如 Altera 的 MAX10因此中间需要一个芯片做转换也就是一个 ADC学名叫做视频解码芯片本设计使用TW2867作为视频解码芯片。
3、模拟视频颜色空间
颜色空间也就是颜色的集合。有 3 个最常用的模型RGB计算机图形学、YUV/YCbCr视频系统和 CMYK打印系统。在此只介绍 RGB 和 YUV/YCbCr。RGB 就是 red、green、blue 的缩写也就是三原色常用于计算机图像学中。常用的 RGB 格式有 RGB555、RGB565、RGB888 等。RGB565 含义是 red 占 5bitgreen 占6bitblue 占 5biit一个占 16bit颜色深度为 65536 色常见的存储器有 8bit、16bit等RGB565 的显示系统非常适合使用这种存储器。 在 YUV/YCbCr 空间中Y 表示明亮度Luminance、Luma信号U 表示色度Chrominance信号V 表示浓度Chroma信号只是对颜色空间另一种表示方法。常见的 YUV 格式有 YUV422、YUV444 等。YUV444 格式如下图所示每一个像素分别用24bit 量化分别量化成 Y、Cb、Cr各占 8bit从另一个方面说 YUV444 相当于RGB888数据量是一样的YUV444 格式如下图所示 YUV422 格式如下图所示它相当于在 YUV444 基础之上丢掉 Cb 和 Cr 数据2 个像素量化成 32bit 数据包括 2 个 Y1 个 Cb1 个 Cr相当于 1 个像素需要 16bit 表示相当于 RGB565 数据量。 TW2867输出的是YUV422 格式。
4、逐行与隔行
先简单区分一个概念隔行扫描Interlace scan和逐行扫描Progressive scan。如下图所示这是隔行扫描示意图也就是先显示奇数行然后再显示偶数行这只是其中一种隔行扫描的方式用途比较广泛除此之外还有隔 2 行、隔 3 行扫描。 如下图所示这是逐行扫描示意图也就从第一行扫描一直扫描到最后一行。目前显示器是逐行扫描的。 隔行转逐行是通过 DDR3 内存实现的详细内容请参考工程代码。
5、BT656数据与解码
BT656数据格式
BT656 是一种视频输出格式TW2867 视频输出是 BT656 格式只有一小部分不一样BT656 格式时钟是 27MHz输出视频格式是 YUV422隔行输出。 如上图所示是一行 BT656 数据结构分成 4 段EAV4-byte、BLANKING280-byte、SAV4-byte和有效数据1440-byte接下来分别介绍。BLANKING280-byte0x80 和 0x10 交替出现。有效数据1440-byte一共 720 个像素Y 占 720 个数据Cb 和 Cr 分别占 360 个数据。EAV 和 SAV分别占 4-byte前三个字节相同是 0XFF0X000X00最后一个不同根据这个字节进行解码。 EAV 和 SAV 的结构如上图所示其中 F、V、H 含义 F 是场信号0 表示场 1,1 表示场 2也就是奇偶场。V 表示场有效0 表示场数据有效1 表示是垂直消隐。H 区分 EAV 和 SAV 信号。P3-P0 只是校验保护位由 F、V、H 进行异或运算得到。如下图所示这是一帧 BT656 数据格式一共包括 625 行每行 1728 个字节有效数据大小是 720x576分成 2 场每场 720x288其余行是消隐信号。 BT656 规定一行有 1728 个字节一帧有 625 行每秒传输 25 帧数据8bit 总线并行传输。1728x625x252700000027M经过计算就知道 27MHz 的来历了。在这 625行中有用的数据是 576 行在 BT656 视频格式中有效视频大小是 720x576其余的当做消隐处理。
BT656数据解码
压力来了怎样才能做好 BT656 解码来适应不同的模块呢根据BT656数据格式解析并丢弃EAV4-byte、BLANKING280-byte、SAV4-byte保留有效数据1440-byte同时恢复行同步、场同步、奇偶场号、数据有效以及像素数据详细内容请参考工程代码。
6、TW2867芯片解读与配置
TW2867芯片解读
本次设计使用的是专用模拟视频解码芯片 TW2867支持 4 路模拟视频输入4 路模拟音频输入1 路音频输出视频输出是标准 BT656 格式。由于 FPGA 引脚限制MIS603 音频部分没有做TW2867输入 4 路模拟视频信号输出YUV422数字视频流每路视频流是 BT656 格式BT656 视频时钟 27MHz4 路复合 27MHzx4108MHz视频接口连接到 FPGA。 TW2867视频输出引脚说明如下 对于 4 路复合视频时钟 108MHz对硬件要求很高数据线和时钟线等长布线。
TW2867芯片配置
TW2867 内部有很多寄存器在此给出几个常用的寄存器及其含义更多的内容请参考 TW2867 数据手册。 输出使能控制和时钟输出控制 在这个寄存器中主要关心bit6配置为1输出使能bit3-2配置为0CLKNO1输出27MHz时钟bit1-0 配置为 2CLKPO1 输出108MHz 时钟通过这 2 个时钟可以把 4 路视频信号分开。这个寄存器配置为 0x42。 Bit6配置为 1标准 ITU-R656 格式。 Bit5-4选择视频复合后输出引脚配置为 1从 CHID1 输出。 Bit3配置为 0正常 ITU-R656 格式。 Bit2配置为 0输出视频中有 EAV-SAV 信号。 Bit1配置为 1bit7-4 是 EAV/SAV 编码。 Bit0配置为 0奇数场和偶数场行数相等。 综上这个寄存器配置为 0x52。 视频通道输出控制 这个寄存器配置为 0x02,4 路视频通过时分复用到 VD1[70]输出硬件设计连接到 VD1。 视频功能控制 Bit7配置为 0视频视频数据输出限制到 0-254。 Bit6配置为 1ACKG 的输入参考是 ASYNP。 Bit5配置为 0输出格式是 YUV422 格式。 Bit4配置为 1。 Bit3配置为 0仅用于测试。 Bit2配置为 0消隐时数据输出 0x80 和 0x10。 Bit1配置为 0ITU-R BT656 同步信号在消隐部分。 Bit0配置为 1HACTIVE 在垂直消隐期间使能。 这个寄存器配置为 0x51。
TW2867时序分析
之前介绍了 BT656 格式时钟 27MHz 的来源TW2867 支持 4 路实时 BT656 视频采样时分复用最大时钟频率是 108MHz因此需要一个 108MHz 的时钟输入引脚考虑到方便解调出每路视频信号增加了一个 27MHz 的时钟输入信号再加上 8 根数据这样 10 根线就可以输入 4 路视频信号在硬件设计上大大简化降低了布线的复杂度。 如下图所示TW2867 在 4 路视频复合时的时序图那就是 4 个通道视频轮流输出即通道 1 视频数据、通道 2 视频数据、通道 3 视频数据、通道 4 视频数据然后重复。 通过了解视频数据复合方式那解复合程序就可以设计了那面说说思路。采用时分复用每个通道数据轮流输出那就需要一个计数器实现把每个通道的数据分离即将 108MHz 时钟数据分成 4 个 27MHz 时钟数据。由于是 4 路视频需要产生一个模长为 4 的计数器根据计数器的数据把数据分配到 4 个视频通道上。详细内容请参考工程代码。
7、设计思路与框架
设计思路与框架如下 图像输入 4路PAL摄像头 4路视频通道分离 将4路复合视频分离出4路独立的视频通路 BT656解码 解码BT656恢复出行、场、de、数据BT656输出的是YUV422这里直接提取数据输出YUV444 颜色空间转换 YUV444转RGB888很简单不多说 图像缓存去隔行 BT656分辨率是 720x576写入DDR前现将一行像素缩小至320 在前面的教程中分析过隔行与逐行的区别由于一行数据需要 2 次写入 DDR 才能写完因此需要一个计数器这样写入了 1 行数据留出的空间是 2 行的空间为另一场数据写入流出了空间在留出的空间中写入数据从而组成一帧完整的数据。详细内容请参考工程代码。 从DDR读出数据然后将场方向缩小至280这样视频从输入的720x576变为了320x240刚好在640x480的屏幕上能放下4路图像 图像输出 输出HDMI视频很简单不多说。
8、vivado工程详解
开发板Xilinx Artix7-100T 开发环境vivado2019.1 输入4路PAL摄像头 输出HDMI640x480 工程代码架构如下 顶层源码如下
//
// Module Name : Video_TW2867.v
// Project Name : Video_TW2867
// Target Devices: XC7A100T-2FGG484
// Tool Versions : vivado2019.1
// Description
// Dependencies :
// Revision 1.0 - File Created
// Additional Comments:
//
timescale 1ns / 1ps
include system_parameter.h
module Video_TW2867 (//*********************clock port****************//input i_clk //25MHz //******************DDR ports*******************//,inout [31:0] io_ddr3_dq,inout [3:0] io_ddr3_dqs_n,inout [3:0] io_ddr3_dqs_p,output [13:0] o_ddr3_addr,output [2:0] o_ddr3_ba,output o_ddr3_ras_n,output o_ddr3_cas_n,output o_ddr3_we_n,output o_ddr3_reset_n,output o_ddr3_ck_p,output o_ddr3_ck_n,output o_ddr3_cke,output o_ddr3_cs_n,output [3:0] o_ddr3_dm,output o_ddr3_odt//******************TW2867 ports*******************//,output o_TW2867_i2c_scl ,inout io_TW2867_i2c_sda,output o_TW2867_rst_n ,input i_video_clk_108m,input i_video_clk_27m,input [7:0] i_video_data //******************HDMI ports*********************//,output o_tmds_clk_p ,output o_tmds_clk_n ,output [2:0] o_tmds_data_p,output [2:0] o_tmds_data_n ,output o_hdmi_en ); //signal for clock and reset wire w_clk_25MHz ;wire w_clk_125MHz ;wire w_clk_100MHz ; wire w_clk_200MHz ;wire w_clk_200MHz_loeked ;wire w_sys_rst_n ;wire w_sys_clk ; //signal for TW2867 wire w_tw2867_init_done ; wire w_ID_error ; reg [9:0] r_TW2867_init_cnt ;reg r_TW2867_init_en ; //video CH1 data wire w_ch1_axis_tvalid ;wire w_ch1_axis_tready ;wire [31: 0] w_ch1_axis_tdata ;wire [3 : 0] w_ch1_axis_tkeep ;wire w_ch1_axis_tlast ;wire [3 : 0] w_ch1_axis_tuser ;//video CH2 data wire w_ch2_axis_tvalid ;wire w_ch2_axis_tready ;wire [31: 0] w_ch2_axis_tdata ;wire [3 : 0] w_ch2_axis_tkeep ;wire w_ch2_axis_tlast ;wire [3 : 0] w_ch2_axis_tuser ;//video CH3 data wire w_ch3_axis_tvalid ;wire w_ch3_axis_tready ;wire [31: 0] w_ch3_axis_tdata ;wire [3 : 0] w_ch3_axis_tkeep ;wire w_ch3_axis_tlast ;wire [3 : 0] w_ch3_axis_tuser ;//video CH4 data wire w_ch4_axis_tvalid ;wire w_ch4_axis_tready ;wire [31: 0] w_ch4_axis_tdata ;wire [3 : 0] w_ch4_axis_tkeep ;wire w_ch4_axis_tlast ;wire [3 : 0] w_ch4_axis_tuser ; //signal for Write DDRwire [31 : 0] w_DDR_wr_dma_baseaddr ; wire [15 : 0] w_DDR_wr_dma_vsize ; wire [15 : 0] w_DDR_wr_dma_hsize ; wire [15 : 0] w_DDR_wr_dma_stridesize ; wire w_DDR_wr_dma_start ; wire w_DDR_wr_dma_pause ; wire w_DDR_wr_dma_force_stop ; wire w_DDR_wr_dma_busy ; wire w_DDR_wr_dma_done ; wire [1 : 0] w_DDR_wr_dma_inter_err ; wire w_DDR_wr_axi_noack_err ; wire [3 : 0] w_DDR_wr_dma_parameter_err; wire w_DDR_wr_clk ; wire w_DDR_wr_en ; wire [31:0] w_DDR_wr_din ; wire w_DDR_wr_full ; wire w_DDR_wr_almost_full ; wire [10:0] w_DDR_wr_wr_data_count ; //signal for DDR wire w_ddr_init_done ;//signal for read image from ddrwire w_rd_vsync ;wire w_rd_hsync ;wire w_rd_active ; wire [31:0] w_image_data ;wire [15:0] w_DDR_rd_dma_hsize ; wire [15:0] w_DDR_rd_dma_vsize ;wire [15:0] w_DDR_rd_dma_stridesize ;wire w_DDR_rd_dma_start ;wire [31:0] w_DDR_rd_dma_base_addr ;wire w_DDR_rd_dma_busy ;wire w_DDR_rd_dma_done ;wire [1:0] w_ch1_frame_cnt ;wire [1:0] w_ch2_frame_cnt ;wire [1:0] w_ch3_frame_cnt ;wire [1:0] w_ch4_frame_cnt ;wire w_frame_start ;//signal for HDMI display wire [23:0] w_HDMI_data ;//***********************************************************************// //part: Clock and Reset //***********************************************************************// Clock_Unit_v1_0 helai_Clock_Unit (.i_clk (i_clk )//25MHz外部时钟,.o_clk_25MHz (w_clk_25MHz )//for VGA,.o_clk_125MHz (w_clk_125MHz ) ,.o_clk_100MHz ( ),.o_clk_200MHz (w_clk_200MHz )//for DDR,.o_clk_200MHz_loeked(w_clk_200MHz_loeked)//for DDR); //***********************************************************************////part: TW2867 初始化 //***********************************************************************// //控制启动TW2867的初始化启动时间等复位稳定后即可启动always (posedge w_sys_clk ) beginif(w_sys_rst_n 1b0) r_TW2867_init_cnt 10d0;else if(r_TW2867_init_cnt 10d1000) r_TW2867_init_cnt r_TW2867_init_cnt;else r_TW2867_init_cnt r_TW2867_init_cnt 1b1;end always (posedge w_sys_clk ) beginif(r_TW2867_init_cnt 16d800) r_TW2867_init_en 1b1 ;else r_TW2867_init_en 1b0 ;endTW2867_Init_Top_v1_0 #(.P_SYS_CLK (100_000_000 ) ,.P_I2C_CLK (200_000 )//200KHz,.P_ID_WR_ADDR (8h50 ),.P_ID_RD_ADDR (8h51 ),.P_SIMULATION (1b0 ))helai_TW2867_Init( .i_sys_clk (w_sys_clk ) ,.i_reset_n (w_sys_rst_n ),.i_init_en (r_TW2867_init_en ) ,.o_i2c_sclk (o_TW2867_i2c_scl ),.io_i2c_sdat (io_TW2867_i2c_sda ),.o_tw2867_rst_n (o_TW2867_rst_n ),.o_ch_status_valid( )//通道状态数据有效 ,.o_ch_number ( )//通道号 ,.o_ch_status ( )//通道状态数据 ,.o_init_done (w_tw2867_init_done),.o_ID_error (w_ID_error ),.o_bir_en ( ) ); //***********************************************************************// //part: TW2867 视频解码、采集 //***********************************************************************// TW2867_Decode_v1_0 helai_TW2867_Decode (.i_clk_108M (i_video_clk_108m )//w_video_clk_108MHz,.i_clk_27M (i_video_clk_27m )//w_video_clk_27MHz ,.i_rst_n (w_tw2867_init_done)//w_sys_rst_n ,.i_mux_data (i_video_data )//——————video CH1—————— ,.i_ch1_s_aresetn (w_sys_rst_n ) ,.i_ch1_m_aclk (w_sys_clk ) ,.o_ch1_m_axis_tvalid(w_ch1_axis_tvalid ) ,.i_ch1_m_axis_tready(w_ch1_axis_tready ) ,.o_ch1_m_axis_tdata (w_ch1_axis_tdata ) ,.o_ch1_m_axis_tkeep (w_ch1_axis_tkeep ) ,.o_ch1_m_axis_tlast (w_ch1_axis_tlast ),.o_ch1_m_axis_tuser (w_ch1_axis_tuser )//——————video CH2—————— ,.i_ch2_s_aresetn (w_sys_rst_n ),.i_ch2_m_aclk (w_sys_clk ),.o_ch2_m_axis_tvalid(w_ch2_axis_tvalid ),.i_ch2_m_axis_tready(w_ch2_axis_tready ),.o_ch2_m_axis_tdata (w_ch2_axis_tdata ),.o_ch2_m_axis_tkeep (w_ch2_axis_tkeep ),.o_ch2_m_axis_tlast (w_ch2_axis_tlast ),.o_ch2_m_axis_tuser (w_ch2_axis_tuser )//——————video CH3—————— ,.i_ch3_s_aresetn (w_sys_rst_n ),.i_ch3_m_aclk (w_sys_clk ),.o_ch3_m_axis_tvalid(w_ch3_axis_tvalid ),.i_ch3_m_axis_tready(w_ch3_axis_tready ),.o_ch3_m_axis_tdata (w_ch3_axis_tdata ),.o_ch3_m_axis_tkeep (w_ch3_axis_tkeep ),.o_ch3_m_axis_tlast (w_ch3_axis_tlast ),.o_ch3_m_axis_tuser (w_ch3_axis_tuser )//——————video CH4——————,.i_ch4_s_aresetn (w_sys_rst_n ),.i_ch4_m_aclk (w_sys_clk ),.o_ch4_m_axis_tvalid(w_ch4_axis_tvalid ),.i_ch4_m_axis_tready(w_ch4_axis_tready ),.o_ch4_m_axis_tdata (w_ch4_axis_tdata ),.o_ch4_m_axis_tkeep (w_ch4_axis_tkeep ),.o_ch4_m_axis_tlast (w_ch4_axis_tlast ),.o_ch4_m_axis_tuser (w_ch4_axis_tuser )); //*************************************************************************//part: DDR//*************************************************************************WR_Frame_Buffer_Ctl_v1_0 helai_WR_FBC(.i_axi_rst_n (w_sys_rst_n ) ,.i_axi_clk (w_sys_clk )//————–CH1 AXIS Port ———————-/ ,.i_ch1_s_axis_tvalid (w_ch1_axis_tvalid ),.o_ch1_s_axis_tready (w_ch1_axis_tready ),.i_ch1_s_axis_tdata (w_ch1_axis_tdata ),.i_ch1_s_axis_tkeep (w_ch1_axis_tkeep ),.i_ch1_s_axis_tlast (w_ch1_axis_tlast ),.i_ch1_s_axis_tuser (w_ch1_axis_tuser )//————–CH2 AXIS Port ———————-/ ,.i_ch2_s_axis_tvalid (w_ch2_axis_tvalid ) ,.o_ch2_s_axis_tready (w_ch2_axis_tready ) ,.i_ch2_s_axis_tdata (w_ch2_axis_tdata ) ,.i_ch2_s_axis_tkeep (w_ch2_axis_tkeep ) ,.i_ch2_s_axis_tlast (w_ch2_axis_tlast ) ,.i_ch2_s_axis_tuser (w_ch2_axis_tuser ) //————–CH3 AXIS Port ———————-/ ,.i_ch3_s_axis_tvalid (w_ch3_axis_tvalid ) ,.o_ch3_s_axis_tready (w_ch3_axis_tready ) ,.i_ch3_s_axis_tdata (w_ch3_axis_tdata ) ,.i_ch3_s_axis_tkeep (w_ch3_axis_tkeep ) ,.i_ch3_s_axis_tlast (w_ch3_axis_tlast ) ,.i_ch3_s_axis_tuser (w_ch3_axis_tuser ) //————–CH4 AXIS Port ———————-// ,.i_ch4_s_axis_tvalid (w_ch4_axis_tvalid ) ,.o_ch4_s_axis_tready (w_ch4_axis_tready ) ,.i_ch4_s_axis_tdata (w_ch4_axis_tdata ) ,.i_ch4_s_axis_tkeep (w_ch4_axis_tkeep ) ,.i_ch4_s_axis_tlast (w_ch4_axis_tlast ) ,.i_ch4_s_axis_tuser (w_ch4_axis_tuser )//————–Write DDR port ——————–//,.o_wr_dma_baseaddr (w_DDR_wr_dma_baseaddr ) ,.o_wr_dma_vsize (w_DDR_wr_dma_vsize ),.o_wr_dma_hsize (w_DDR_wr_dma_hsize ),.o_wr_dma_stridesize (w_DDR_wr_dma_stridesize ),.o_wr_dma_start (w_DDR_wr_dma_start ),.o_wr_dma_pause (w_DDR_wr_dma_pause ),.o_wr_dma_force_stop (w_DDR_wr_dma_force_stop ),.i_wr_dma_busy (w_DDR_wr_dma_busy ),.i_wr_dma_done (w_DDR_wr_dma_done ),.i_wr_dma_inter_err (w_DDR_wr_dma_inter_err ),.i_wr_axi_noack_err (w_DDR_wr_axi_noack_err ),.i_wr_dma_parameter_err(w_DDR_wr_dma_parameter_err),.o_wr_en (w_DDR_wr_en ),.o_wr_din (w_DDR_wr_din ),.i_wr_full (w_DDR_wr_full ),.i_wr_almost_full (w_DDR_wr_almost_full ),.i_wr_wr_data_count (w_DDR_wr_wr_data_count ),.o_ch1_frame_cnt (w_ch1_frame_cnt ),.o_ch2_frame_cnt (w_ch2_frame_cnt ),.o_ch3_frame_cnt (w_ch3_frame_cnt ),.o_ch4_frame_cnt (w_ch4_frame_cnt ));DDR_Top_v1_0 helai_DDR_Top(//globle signal.i_rst (~w_clk_200MHz_loeked ) ,.i_ddr_clk_i (w_clk_200MHz ) ,.o_sys_clk (w_sys_clk )//目前是100MHz,.o_sys_rst ( )// DDR port ,.ddr3_dq (io_ddr3_dq ) ,.ddr3_dqs_n (io_ddr3_dqs_n ) ,.ddr3_dqs_p (io_ddr3_dqs_p ) ,.ddr3_addr (o_ddr3_addr ) ,.ddr3_ba (o_ddr3_ba ) ,.ddr3_ras_n (o_ddr3_ras_n ) ,.ddr3_cas_n (o_ddr3_cas_n ) ,.ddr3_we_n (o_ddr3_we_n ) ,.ddr3_reset_n (o_ddr3_reset_n ) ,.ddr3_ck_p (o_ddr3_ck_p ) ,.ddr3_ck_n (o_ddr3_ck_n ) ,.ddr3_cke (o_ddr3_cke ) ,.ddr3_cs_n (o_ddr3_cs_n ) ,.ddr3_dm (o_ddr3_dm ) ,.ddr3_odt (o_ddr3_odt ) ,.init_calib_complete (w_ddr_init_done )// Read port ,.i_rd_dma_start (w_DDR_rd_dma_start ) ,.i_rd_dma_base_addr (w_DDR_rd_dma_base_addr ),.o_rd_dma_busy (w_DDR_rd_dma_busy ),.o_rd_dma_done (w_DDR_rd_dma_done ),.i_rd_dma_hsize (w_DDR_rd_dma_hsize ) ,.i_rd_dma_vsize (w_DDR_rd_dma_vsize ) ,.i_rd_dma_stridesize (w_DDR_rd_dma_stridesize ),.i_rd_frame_start (w_frame_start ) ,.i_rd_clk (w_clk_25MHz ),.i_rd_en (w_rd_active ),.o_rd_data_out (w_image_data ),.o_rd_data_valid ( ),.o_rd_empty ( ),.o_rd_almost_empty ( ),.o_rd_rd_data_count ( ),.o_rd_fifo_wcount ( )//Write port ,.i_wr_dma_baseaddr (w_DDR_wr_dma_baseaddr ) ,.i_wr_dma_vsize (w_DDR_wr_dma_vsize ) ,.i_wr_dma_hsize (w_DDR_wr_dma_hsize ) ,.i_wr_dma_stridesize (w_DDR_wr_dma_stridesize ) ,.i_wr_dma_start (w_DDR_wr_dma_start ) ,.i_wr_dma_pause (w_DDR_wr_dma_pause ) ,.i_wr_dma_force_stop (w_DDR_wr_dma_force_stop ) ,.o_wr_dma_busy (w_DDR_wr_dma_busy ) ,.o_wr_dma_done (w_DDR_wr_dma_done ) ,.o_wr_dma_inter_err (w_DDR_wr_dma_inter_err ) ,.o_wr_axi_noack_err (w_DDR_wr_axi_noack_err ) ,.o_wr_dma_parameter_err(w_DDR_wr_dma_parameter_err) ,.i_wr_clk (w_sys_clk ) ,.i_wr_en (w_DDR_wr_en ) ,.i_wr_din (w_DDR_wr_din ) ,.o_wr_full (w_DDR_wr_full ) ,.o_wr_almost_full (w_DDR_wr_almost_full ) ,.o_wr_wr_data_count (w_DDR_wr_wr_data_count ) );assign w_sys_rst_n w_ddr_init_done ; //DDR 初始化完成后系统其它部分再开始工作 //***************************************************************************/ //part: 读DDR // ***************************************************************************/ //从DDR中读取图像Image_Output_IF_Timing_v2_2 #( .P_H_FRONT_PORCH (P_VGA_H_FRONT ),.P_H_SYNC_PULSE (P_VGA_H_SYNC ),.P_H_BACK_PORCH (P_VGA_H_BACK ),.P_H_ACT_SIZE (P_VGA_H_ACTIVE ),.P_V_FRONT_PORCH (P_VGA_V_FRONT ),.P_V_SYNC_PULSE (P_VGA_V_SYNC ),.P_V_BACK_PORCH (P_VGA_V_BACK ),.P_V_ACT_SIZE (P_VGA_V_ACTIVE ) ,.P_FIFO_RCW (12 )) helai_read_Image( .i_clk (w_clk_25MHz )//w_sys_clk ,.i_resetn (w_clk_200MHz_loeked ) ,.i_timing_en (w_clk_200MHz_loeked ) ,.o_frame_start (w_frame_start ) ,.o_frame_done ( ) ,.o_vsync (w_rd_vsync ) ,.o_hsync (w_rd_hsync ) ,.o_active (w_rd_active ) ,.o_fvld ( ) ,.o_sol ( ) ,.i_axi_clk (w_sys_clk ),.i_axi_rst_n (w_sys_rst_n ),.o_dma_start (w_DDR_rd_dma_start ),.o_dma_base_addr (w_DDR_rd_dma_base_addr ),.o_dma_hsize (w_DDR_rd_dma_hsize ),.o_dma_vsize (w_DDR_rd_dma_vsize ),.o_dma_stridesize(w_DDR_rd_dma_stridesize),.i_rd_dma_busy (w_DDR_rd_dma_busy ),.i_rd_dma_done (w_DDR_rd_dma_done ),.i_ch1_frame_cnt (w_ch1_frame_cnt ),.i_ch2_frame_cnt (w_ch2_frame_cnt ),.i_ch3_frame_cnt (w_ch3_frame_cnt ),.i_ch4_frame_cnt (w_ch4_frame_cnt )); //***************************************************************************/ //part: HDMI display // ******************************************************************************/ rgb2dvi #( .kGenerateSerialClk(1b0) ,.kClkRange (1 ) ,.kRstActiveHigh (1b1) )helai_HDMI( // DVI 1.0 TMDS video interface .TMDS_Clk_p (o_tmds_clk_p ) ,.TMDS_Clk_n (o_tmds_clk_n ) ,.TMDS_Data_p(o_tmds_data_p) ,.TMDS_Data_n(o_tmds_data_n) //Auxiliary signals ,.aRst (1b0 ) ,.aRst_n (1b1 ) // Video in ,.vid_pData (w_HDMI_data )//RBG {8d255,8d0,8d0} ,.vid_pVDE (w_rd_active ) ,.vid_pHSync(w_rd_hsync ) ,.vid_pVSync(w_rd_vsync ) ,.PixelClk (w_clk_25MHz ) ,.SerialClk (w_clk_125MHz )// 5x PixelClk ); //assign w_HDMI_data {w_image_data[23:16],w_image_data[7:0],w_image_data[15:8]};//RBG888输出模式assign w_HDMI_data {w_image_data[23:19],w_image_data[21:19], //上位机显示的图像是由RGB565转换成的RGB888此处为了做一样的颜色补偿w_image_data[7:3] ,w_image_data[5:3] , //采用了这种输出显示的方式 w_image_data[15:10],w_image_data[11:10]};assign o_hdmi_en 1b1 ; endmodule资源消耗和功耗预估如下
9、上板调试验证
由于某些保密因素暂无法展示输出请见谅。。。
10、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下
- 上一篇: 垂直类网站怎么做可信网站认证好处
- 下一篇: 纯净软件网站推荐北京网站建设交易
相关文章
-
垂直类网站怎么做可信网站认证好处
垂直类网站怎么做可信网站认证好处
- 技术栈
- 2026年03月21日
-
创意做网站公司wordpress中修改html
创意做网站公司wordpress中修改html
- 技术栈
- 2026年03月21日
-
创意网站页面设计专业开发小程序公司
创意网站页面设计专业开发小程序公司
- 技术栈
- 2026年03月21日
-
纯净软件网站推荐北京网站建设交易
纯净软件网站推荐北京网站建设交易
- 技术栈
- 2026年03月21日
-
纯文本网站连接免费crm试用
纯文本网站连接免费crm试用
- 技术栈
- 2026年03月21日
-
纯文本网站属于c2c网站的有哪几个
纯文本网站属于c2c网站的有哪几个
- 技术栈
- 2026年03月21日






