PAL--彩条测试程序(verilog)

该模块是一个用Verilog编写的PAL色彩信号生成器,它根据输入的行和列信息产生不同的颜色数据。模块内部定义了多种颜色的RGB值,并通过条件判断确定当前像素的颜色。同时,它还生成了EAV和SAV这样的嵌入式控制字,用于标记有效视频的起点和终点,这些控制字包含场同步、垂直同步和水平同步信号等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/03/07 11:18:29
// Design Name: 
// Module Name: PAL_colour
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


  module PAL_colour 
    (
        input           rst_n,    
        input           en_clk,
        output  [7:0]   en_d,
        output          en_vs,
        output          en_hs
        // output [10:0]   colp,
        // output [9:0]    rowp        
     );

reg [10:0] cols = 0; //0---1727
reg [9:0] row = 0;  //0---624

reg [7:0] data;          //8位数据
//                     y      cb     cr
 reg [23:0] white = {8'heb, 8'h80, 8'h80};//{8'd235, 8'd128, 8'd128};
 reg [23:0] yellow = {8'hd2, 8'h10, 8'h92};//{8'd162, 8'd44, 8'd142};
 reg [23:0] cyan = {8'haa, 8'ha6, 8'h10};//{8'd131, 8'd156, 8'd44};
 reg [23:0] green = {8'h91, 8'h36, 8'h22};//{8'd112, 8'd72, 8'd58};
 reg [23:0] magenta = {8'h6a, 8'hca, 8'hde};//{8'd84, 8'd184, 8'd198};
 reg [23:0] red = {8'h51, 8'h5a, 8'hf0};//{8'd65, 8'd100, 8'd212};
 reg [23:0] blue = {8'h29, 8'hf0, 8'h6e};//{8'd35, 8'd212, 8'd114};
 reg [23:0] black = {8'h10, 8'h80, 8'h80};//{8'd16, 8'd128, 8'd128}; 
 
reg [23:0] cur_color;//产生图像数据,数据 8 个 8 个出
function [7:0] colorValue;
input [10:0] cols;  //col = 288~1727
   begin
        if(452 > cols)
            cur_color = black;
        else if(652 >cols)
            cur_color = blue;
        else if(812 > cols)
            cur_color = red;
        else if(992 > cols)
            cur_color = magenta;
        else if(1172 > cols)
            cur_color = green;
        else if(1352 > cols)
            cur_color = cyan;
        else if(1532 > cols)
            cur_color = yellow;
        else
            cur_color = white;
        //* Y
        if(cols[0] == 1'b1)   //288 = 120h  
            colorValue = cur_color[23:16];// y
        //* Cr and Cb
        else if(cols[1] == 1'b0)
            colorValue = cur_color[15:8]; //* cb
        else
            colorValue = cur_color[7:0]; //* Cr
    end
endfunction

function [7:0] EAV;
    input [9:0] row;
    begin
        if (row <= 311) begin
            if (row < 22) 
                EAV = 8'hb6; 
            else if (row < 310)
                EAV = 8'h9d;
            else
                EAV = 8'hb6;
        end else begin
           if (row < 335) 
                EAV = 8'hf1; 
            else if (row < 623)
                EAV = 8'hda;
            else
                EAV = 8'hf1;            
        end
    end
endfunction
function [7:0] SAV;
    input [9:0] row;
    begin
        if (row <= 311) begin
            if (row < 22) 
                SAV = 8'hab; 
            else if (row < 310)
                SAV = 8'h80;
            else
                SAV = 8'hab;
        end else begin
           if (row < 335) 
                SAV = 8'hec; 
            else if (row < 623)
                SAV = 8'hc7;
            else
                SAV = 8'hec;            
        end
    end
endfunction
reg hsvs;
 always@(negedge en_clk)  //仿真用
    begin 
         if ((rst_n==0))begin
            cols = 11'd0;
            row = 10'd0;
            data = 8'd0;
            hsvs = 0;
         end else begin
            hsvs = ~hsvs;
//           0  1 2 3     4 <= col <= 283   284 285 286 287   288 <= col <=1727
//0~21行     FF 0 0 B6    0x80和0x10交替    FF  0   0   AB    0x80和0x10交替 
//22~309行   FF 0 0 9d    0x80和0x10交替    FF  0   0   80    视频数据 
//310~311行  FF 0 0 b6    0x80和0x10交替    FF  0   0   ab    0x80和0x10交替 
//312~334行  FF 0 0 f1    0x80和0x10交替    FF  0   0   ec    0x80和0x10交替 
//335~622行  FF 0 0 da    0x80和0x10交替    FF  0   0   c7    视频数据 
//623~624行  FF 0 0 f1    0x80和0x10交替    FF  0   0   ec    0x80和0x10交替 
                 if (cols <= 11'd283) begin
                    if (cols < 11'd3) begin
                        case (cols) 
                            0:data = 8'hff;                        //0
                            1:data = 8'h00;                        //1
                            2:data = 8'h00;                        //2
                        endcase
                    end else begin
                        if (cols==11'd3) begin
                            data = EAV(row);                       //3
                        end else begin
                            data = (cols[0] == 0) ? 8'h80 : 8'h10;  //4~283
                        end
                    end
                 end else begin
                    if (cols < 11'd287) begin
                        case (cols) 
                            284:data = 8'hff;                        //284
                            285:data = 8'h00;                        //285
                            286:data = 8'h00;                        //286
                        endcase
                    end else begin
                        if (cols==11'd287) begin
                            data = SAV(row);                         //287
                        end else begin
                            if ((row >= 22 && row <= 309) || (row >= 335 && row <= 622)) 
                                data = colorValue(cols);                //288~1727
                            else
                                data = (cols[0] == 0) ? 8'h80 : 8'h10;  //288~1727
                        end
                    end
                 end 
                 if (cols < 11'd1727) 
                    cols = cols + 1'b1;
                 else begin 
                    cols = 11'd0; 
                    hsvs = 0;
                    if (row < 10'd624) 
                        row = row + 1'b1;
                    else row = 10'd0;
                 end
         end 
    end    
assign en_d = data;
assign en_vs = hsvs;
assign en_hs = ~hsvs;
// assign colp = cols;
// assign rowp = row;


endmodule

对于有效数据行,其格式如下图所示。EAV和SAV为嵌入式控制字,分别表示有效视频的终点和起点。EAV和SAV均为4个字节构成,前3个字节FF、00、00为固定头,“XY”为控制字。“XY”的8个bit含义如下:

Bit7(Const),常数,总为1。

Bit6(F),场同步信号,表示该行数据处于奇场还是偶场。

Bit5(V),垂直同步信号,表示处于场消隐区间还是正程区间(有效数据行)。

Bit4(H),水平同步信号,表示是“SAV”还是“EAV”。

Bit3-0(P3P2P1P0),纠错位。P3=V(XOR)H;P2=F(XOR)H;P1=F(XOR)V;P0=F(XOR)V(XOR)H。

条屏设置程序使用说明 一、简介: 该程序同DLTP-2型脱机条屏控制卡配套使用,用于更新显示内容。DLTP-2型控制卡可支持最大32×512点阵(16个32点的大字)的显示。控制卡采用通用的16PIN 08接口,刷新频率62Hz,扫描方式为1/16。在某些显示花样,显示超过13个大字时会有轻微闪烁,请更新内容时注意;其他情况显示稳定、无闪烁。该控制卡支持计算机能输入的任何字体、内容,支持横向显示和纵向显示。进入和退出均有10种花样供选择。可显示16点阵字约960个,显示32点阵字约240个,程序根据设定的显示高度和宽度自动计算能显示的最大屏数,能满足大部分场合的需求。为保护控制卡不易损坏,卡程序能开机检测数据排线是否插错,插错排线时指示灯会快速闪烁,请断电重插排线。卡正常工作时指示灯常亮。 二、使用说明: 1、文件管理:条屏内容的编辑采用文件管理的方式,缺省存放目录是该执行程序的存放目录,当然也可存放在自建的目录下。程序启动时自动打开一个新文件,如编辑旧文件可在文件菜单下选择"打开文件"打开以前存储的文件。保存文件时不用输入扩展名,程序会自动加上;保存非新文件,系统保存到当前的文件名下;另存文件会提示重新起文件名。对可能要再使用的编辑内容,退出时请注意保存。 2、系统设置:该系统须根据控制卡实际控制的点阵大小设置,控制卡根据设置内容计算控制方法。用户可根据实际情况设置任意宽度和高度的组合,控制卡均可正常显示。如果下载数据后发现屏仅仅微亮,请改变"OE低电平有效"选择项的设置,再重新下载数据。设置密码为"168"。 3、内容编辑:编辑时用鼠标点击编辑框,即可输入内容。用户可根据显示要求用空格调整显示结果。编辑时输入长度无限制,编辑好后请点击 [更新数据] 更新显示内容。实际显示结果见预览框。用户可根据显示要求增加新屏,新屏的位置加在当前编辑屏的下方,同时缺省的显示模式与当前屏相同,用户可根据需要修改。每屏的显示字体和字号大小可单独设置。系统为方便编辑,提高显示质量,特控制16点阵时只支持'12'号字,32点阵时支持'24'和'12'号字,32点阵用户选择字号时系统根据用户选择自动就近选定24或12号字。字体可自由选择,但系统部分字体显示不完全,用户请自行避开。节目编辑中速度设定为相对速度,0最快,15最慢;停留时间设定单位为秒。 三、问题解答: 1、如何纵向显示? 答:在选择字体时选择前面带@的字体,如'@宋体'。 2、如何连续左移显示? 答:在进入方式中选择'连续左移',退出方式也选择'连续左移',如此选择的连续的屏可连续左移显示。注意在连续显示的最后一屏的退出方式中选择'左移退出',可避免连续左移结束时直接退出。连续左移如各屏中间不需要停顿,请将停留时间设定为0。 3、为何显示屏仅仅微亮? 答:08通用接口的单元板因生产厂家多,各厂家的控制电平不完全一致,如出现这种情况,请改变"OE低电平有效"选择项的设置,再重新下载数据。该选项在保存文件后同时保存到文件内,下次再调用该文件时对同类型的单元板不用再更改选择状态。 4、如何使用USB转串口线通讯? 答:首先安装USB转串口线的驱动程序,安装成功后查看USB虚拟的串口号是COM?,使用V2.08版的条屏设置程序,选择串口COM?即可正常通讯
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值