NTSC和PAL制同步信号模拟输出

news2024/12/28 19:11:51

NTSC和PAL制同步信号模拟输出

原由:由于我想输出一个NTSC制和PAL制的同步黑场,只需要输出同步信号,之后输出rgb信号给ADV(7123)后输出到显示屏。下面是我的心路历程和知识总结

一、了解NTSC和PAL

  • PAL:电视标准,每秒25帧,电视扫描线为625线,奇场在前,偶场在后,标准的数字化PAL电视标准分辨率为720*576, 24比特的色彩位深,画面的宽高比为4:3, PAL制电视的供电频率为50Hz,场频为每秒50场,帧频为每秒25帧,扫描线为625行。
  • NTSC:电视的供电频率为60Hz,场频为每秒60场,帧频为每秒30帧,扫描线为525行,图像信号带宽为6.2MHz。采用NTSC制的国家美国、日本等国家

当然若没有任何知识储备,这两段话很难理解,不过这里不做过多的解释,网络上的详解有很多,大家可以自行查看,也可以查看下面是我推荐的比较详细易懂的文章。

PAL与NTSC制式的详解

二、NTSC和PAL时序参数

大致了解NTSC和PAL概念内容之后,我们需要找到具体 的时序参数,为之后写代码打下基础,大部分的时序参数我上传到文档里,大家可以自行查看,这个有规定的标准,只需找到文档即可

  • NTSC制→720*480i60HZ
  • PAL制→720*576i50HZ
    480i60
    576i50
    由图片可知NTSC和PAL制的时序参数如下
  • NTSC:
    H_TOTAL=1716
    V_TOTAL=525
    H_ACT=1440
    V_ACT=480
    H_FRONT = 38
    HS_WIDTH = 124
    H_BACK_POCH = 114
  • PAL
    H_TOTAL=1728
    V_TOTAL=625
    H_ACT=1440
    V_ACT=576
    H_FRONT = 24
    HS_WIDTH = 126
    H_BACK_POCH = 138

三、垂直同步波形详细信息

在整个同步模拟信号输出中最重要的一步,我们需要将垂直同步波形和水平同步波形叠加到一起,直接输出一个同步信号模拟波形,首先我们先看垂直同步波形的详细信息
如果大家有《数字电视基础-视频和音频系统的设计与安装》这本书也可以查看这本书的P11-P24,了解复合视频信号的组成。
下面的基准时钟都为27M
- NTSC制垂直同步波形的详细信息
NTSC垂直同步波形详细信息
由图像可以得出:一个长度为9行的块被划分为长度为3行的3个段。第一段包含6个预均衡脉冲,第二段包含具有6个锯齿的垂直同步脉冲,第三段包含6个后均衡脉冲。由NTSC制的时序参数我们可以将各个脉冲宽度计算出来。
在这里插入图片描述
图中的H=1716,0.5H=858
1s=1000000us
27mhz=27000000hz
经过单位换算可知
1us的宽度为27
4.7us宽度为27×4.7=127
2.3us宽度为27×2.3=62
- PAL制垂直同步波形的详细信息
 PAL垂直同步波形的详细信息
图中的H=1728,0.5H=864
1s=1000000us
27mhz=27000000hz
经过单位换算可知
1us的宽度为27
4.7us宽度为27×4.7=127
27.1us宽度为27×27.1=731
2.3us宽度为27×2.3=62

四、水平同步波形详细信息

大家在上面垂直的图中应该都看到了,由于是复合视频信号,所以水平和垂直都复合到一块了,水平就是在每个hs的位置有一个类似于垂直锯齿的东东。
水平同步波形详细信息
这里这个宽度可以参考时序参数,当然通过波形计算也可以。

  • NTSC:
    H_FRONT = 38
    HS_WIDTH = 124
    H_BACK_POCH = 114
  • PAL
    H_FRONT = 24
    HS_WIDTH = 126
    H_BACK_POCH = 138

五、代码

  • NTSC制
module test_tpg(
	input	  		       clk_148m5,
	input                  rst_n,		
	output wire [9 :0]      dac_r,
	output wire [9 :0]      dac_g,
	output wire [9 :0]      dac_b			   
	
  );
  	parameter H_ACT		= 1440;//1200;//
	parameter H_TOTAL		= 1716;//2020;//
	parameter V_ACT		= 480;//1920;//
	parameter V_TOTAL		= 525;//1136;//
	parameter H_BACK_POCH	= 114;//16;//
	parameter HS_WIDTH		= 124;//8;//8;
	parameter VS_WIDTH		= 3;//2;//8;//
	parameter H_FRONT		= 38;
	parameter V_FRONT		= 19;
    parameter V_BACK_POCH	= 26;//20;

	(* keep = "true" *)reg [11:0]  h_cntr;
	(* keep = "true" *)reg [11:0]  v_cntr;
    (* keep = "true" *)reg         vs;
    (* keep = "true" *)reg         de;
    (* keep = "true" *)reg [9 :0]  test_r;
    (* keep = "true" *)reg [9 :0]  test_g;
    (* keep = "true" *)reg [9 :0]  test_b;
    

	always @ ( posedge clk_148m5 or negedge rst_n)begin
	   if(!rst_n)begin
	       h_cntr <= 12'h0;
	       v_cntr <= 12'h0;
	   end
    else
		begin
		    if( h_cntr == H_TOTAL - 12'h1 )
				h_cntr <= 12'h0;
			else
				h_cntr <= h_cntr + 12'h1;			
		    if((v_cntr == V_TOTAL) && (h_cntr == H_TOTAL -12'h1))
				v_cntr <= 12'h1;
			else if(h_cntr == H_TOTAL -12'h1)
				v_cntr <= v_cntr + 12'h1;
			else
				v_cntr <= v_cntr;	
		end
end
    always @ ( posedge clk_148m5 or negedge rst_n)begin
    if(!rst_n)
	   de <= 1'd0;
    else
	    if(h_cntr >= H_FRONT+HS_WIDTH+H_BACK_POCH && h_cntr < H_TOTAL && v_cntr >= V_FRONT+VS_WIDTH+V_BACK_POCH && v_cntr < V_TOTAL)
				de <= 1'd1;
			else
				de <= 1'd0;
end
	always @ ( posedge clk_148m5 or negedge rst_n)begin
	if(!rst_n)
	   vs <= 1'd0;
    else
	    begin
            if((v_cntr>=12'h1 && v_cntr <= 12'd9)||(v_cntr >= 12'd264 && v_cntr <= 12'd271)||(h_cntr >= 12'd857 && h_cntr <=12'd1715 && v_cntr==12'd263)||(h_cntr >= 12'd0 && h_cntr <=12'd857 && v_cntr==12'd272))
				vs <= 1'd1;                                     
			else 
				vs <= 1'd0;
	    end	 
end   


always @(posedge clk_148m5 or negedge rst_n)begin
    if(!rst_n)begin
	       test_r <= 10'd0;
           test_g <= 10'd0;
           test_b <= 10'd0;
    end
    else
//      if(vs)begin
        if((v_cntr >= 12'd1 && v_cntr <= 12'd3)||(v_cntr >= 12'd7 && v_cntr <= 12'd9)||(v_cntr >=12'd264 && v_cntr <= 12'd265)||(h_cntr >=12'd857 && h_cntr <= 12'd1715 &&v_cntr == 12'd263)||(h_cntr >=12'd0 && h_cntr <= 12'd857 &&v_cntr == 12'd266)||(v_cntr >=12'd270 && v_cntr <= 12'd271)||(h_cntr >=12'd857 && h_cntr <= 12'd1715 &&v_cntr == 12'd269)||(h_cntr >=12'd0 && h_cntr <= 12'd857 &&v_cntr == 12'd272))begin
            if((h_cntr >= 12'd0 && h_cntr <= 12'd61)||(h_cntr >= 12'd857 && h_cntr <= 12'd919))begin
                test_r <= 10'd0;
                test_g <= 10'd0;
                test_b <= 10'd0; 
            end
            else begin 
                test_r <= 10'd93;
                test_g <= 10'd93;
                test_b <= 10'd93;
            end 
        end
        else  if((v_cntr >= 12'd4 && v_cntr <= 12'd6)||(v_cntr >=12'd267 && v_cntr <= 12'd268)||(h_cntr >=12'd857 && h_cntr<=12'd1715&&v_cntr == 12'd266)||(h_cntr >=12'd0 && h_cntr <= 12'd857 &&v_cntr == 12'd269))begin
          if((h_cntr >= 12'd730 && h_cntr <=12'd857)||(h_cntr >= 12'd1588 && h_cntr <= 12'd1715))begin 
                test_r <= 10'd93;
                test_g <= 10'd93;
                test_b <= 10'd93;
          end
          else begin 
		        test_r <= 10'd0;
                test_g <= 10'd0;
                test_b <= 10'd0; 
          end
      end
//end
     else  begin
        if(h_cntr >= 12'h0 && h_cntr <= {12'd61,1'd0})begin
                test_r <= 10'd0;
                test_g <= 10'd0;
                test_b <= 10'd0;
           end
         else begin 
		         
                test_r <= 10'd100;
                test_g <= 10'd100;
                test_b <= 10'd100;
            end
        end 
end 
assign  dac_r = test_r;
assign  dac_g = test_g;
assign  dac_b = test_b;

endmodule 
         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能化电力运维:数字孪生的崭露头角

随着科技的不断发展&#xff0c;数字孪生技术在各个领域的应用愈发广泛&#xff0c;尤其在电力运维领域&#xff0c;它正发挥着革命性的作用。数字孪生是一种虚拟仿真技术&#xff0c;通过实时模拟真实世界的物理对象或过程&#xff0c;可以从多方面为电力运维带来改变&#xf…

程序员写好简历的5个关键点

程序员就业竞争大&#xff1f;找不到工作&#xff1f;也许&#xff0c;从简历开始你就被淘汰了.... 在很多的公司中&#xff0c;HR的招聘压力是很大的&#xff0c;浏览每个人的简历的时间可能只有20几秒&#xff0c;所以即使你的工作能力十分的强&#xff0c;但如果你没有在简…

批量剪辑视频,轻松添加上片头片尾!

亲爱的朋友们&#xff0c;你是否曾经需要为多个视频添加相同的片头片尾&#xff1f;现在&#xff0c;我们为你带来了一款实用的视频批量剪辑工具&#xff0c;可以让你轻松实现这一需求&#xff0c;提高工作效率&#xff01; 首先我们要进入好简单批量智剪主页面&#xff0c;并…

2023年8月国产数据库大事记-墨天轮

本文墨天轮社区整理的2023年8月国产数据库大事件和重要产品发布消息。 8月国产数据库大事记 TOP10 8月国产数据库大事记&#xff08;时间线&#xff09; 8月1日&#xff0c;强制性国家标准GB 18030-2022《信息技术 中文编码字符集》正式实施&#xff01;该标准适用范围是具备…

华为OD机试 - 最差产品奖 - 双端队列 deque(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

你为什么总招不到对的人?

办公室里&#xff0c;技术面试官Arron 和 HR 正对近期的招聘失误进行争执——新招的技术岗试用了几个月&#xff0c;就因能力不足离开了。 HR 不断吐槽岗位画像太模糊&#xff0c;Arron 反问&#xff1a;“不是给了你关键词吗&#xff1f;” HR 气不打一处来&#xff1a;“你…

QCefView 的 编译

CEF QCefView编译 学习QT加载网页时了解到CEF与QCefView, QCefView是一个与Chromium Embedded Framework集成的Qt第三方开源库&#xff0c;LGPL许可&#xff0c;可以在项目中免费使用&#xff0c;功能类似CEF、QWebEngineView&#xff0c;提供C和web交互的能力。 官方网址&a…

【PyQT5教程】-01入门PyQT5

PyQT介绍 1.Qt 1.1 介绍 Qt&#xff08;读作“cute”&#xff09;是一个跨平台的C应用程序开发框架&#xff0c;最初由挪威公司Trolltech&#xff08;现在是Qt公司的一部分&#xff09;开发。Qt提供了一系列工具和类库&#xff0c;用于开发图形界面应用程序、命令行工具和服务…

适用于Linux的Windows子系统(系统安装步骤)

目录 前言 一、WSL2安装 1.Microsoft参考文档&#xff08;推荐选择旧版 WSL 的手动安装步骤&#xff09; 2.开启子系统 二、Ubuntu安装 1.在Microsoft Store中获取ubuntu 2.运行ubuntu配置管理信息 3.ubuntu换源 三、WSL 与 Ubuntu的一些基础使用命令 四、Windows Terminal终端…

linux安装postgresql13

linux安装postgresql13 1. 安装2. 数据库初始化3.配置远程访问3.1 修改配置文件3.2 重启服务3.3 测试连接 1. 安装 linux下载链接&#xff1a;https://www.postgresql.org/download/linux/ubuntu/安装命令sudo sh -c echo "deb https://apt.postgresql.org/pub/repos/apt…

Qt-QTransform-内存结构-仿射变换-工作原理-C++

文章目录 1.概述2.内存结构3.矩阵乘法4.map函数5.QPaint-setWorldTransform6.总结 1.概述 QTransform是Qt中推荐的矩阵变换类。转换指定如何平移&#xff0c;缩放&#xff0c;剪切&#xff0c;旋转或投影坐标系&#xff0c;通常在渲染图形时使用。QTransform类支持矩阵乘法&am…

业务自动化工具Automatisch

什么是 Automatisch &#xff1f; Automatisch 是一种开源的 Zapier 替代业务自动化工具&#xff0c;可让您连接不同的服务&#xff0c;如 Twitter、Slack 等&#xff0c;以自动化您的业务流程。您可以使用 Automatisch 构建工作流程自动化&#xff0c;而无需花费时间和金钱。也…

【大虾送书第八期】揭秘分布式文件系统大规模元数据管理机制——以Alluxio文件系统为例

目录 ✨写在前面 ✨分布式文件系统元数据的常见类型 &#x1f353;文件&#xff08;inode&#xff09;元数据 &#x1f353;数据块&#xff08;block&#xff09;元数据 &#x1f353;MountTable &#x1f353;Worker元数据 ✨分布式文件系统元数据的存储模式 &#x1f353;元数…

手写RPC框架--8.压缩报文

RPC框架-Gitee代码(麻烦点个Starred, 支持一下吧) RPC框架-GitHub代码(麻烦点个Starred, 支持一下吧) 压缩报文 对报文进行压缩a.报文压缩b.负载均衡c.使用模板方法优化负载均衡d.一致性hash-负载均衡算法d.1) 介绍d.2) 实现 e.实现心跳检测f.最短响应时间的负载均衡策略 对报文…

vue 将public文件下的图片引入.vue文件内

data() {return {publicPath:process.env.BASE_URL,} }<div :style"{backgroundImage: url(${publicPath}images/tradingRegular_images/rectBg.png)}">11 </div>

从一个向量类中理解Python 中的特殊方法(__init__、__getitem__、__len__、__repr__、__str__)

文章目录 前言一、init、getitem、len、repr、str解释二、向量案例1.实现属于我们自己的向量2.导入向量模块 前言 特殊方法是一种具有特殊命名约定的方法&#xff0c;用来定义类的行为与功能。当满足特定条件时&#xff0c;这些方法会被自动调用&#xff0c;从而实现一些内置的…

Splunk Enterprise for Mac:卓越的数据分析与管理工具

在当今的数字化时代&#xff0c;数据已经成为企业成功的核心驱动力。然而&#xff0c;如何有效地管理和分析这些数据&#xff0c;却常常让企业感到困惑。Splunk Enterprise for Mac 是一款领先的数据分析和管理工具&#xff0c;可以帮助你解决这一难题。 Splunk Enterprise fo…

Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

Nginx&#xff0c;负载均衡&#xff0c;Http反向代理服务器&#xff0c;支持大部分协议&#xff0c;如TCP、UDP、SMTP、HTTPS 环境搭建 Nginx反向代理-负载均衡 首先通过SpringBootFreemarker快速搭建一个WEB项目&#xff1a;springboot-web-nginx&#xff0c;然后在该项目中&…

适用于Linux的Windows子系统(在VScode中开发Linux项目)

目录 前言 一、VScode扩展安装 二、挂载项目 1.连接 2.挂载&#xff08;挂载之后项目终端就是Linux了&#xff09; 3.愉快的搬砖开始了 4.前端如何通过内网 IP 本地访问到 Ubuntu 上&#xff1f; 总结 前言 系列分为三章&#xff08;从安装到项目使用&#xff09;&…

云端AI:释放企业创新力,打造智慧企业

文章目录 1. 云端AI的基本概念1.1 云计算1.2 人工智能1.3 云端AI 2. 云端AI的重要性2.1 成本效益2.2 弹性扩展2.3 无缝整合2.4 实时更新 3. 云端AI的应用领域3.1 智能客服3.2 预测分析3.3 自动化生产 4. 云端AI的未来趋势4.1 边缘计算与云端AI的融合4.2 可解释性AI4.3 隐私和安…