搜档网
当前位置:搜档网 › Verilog程序12、VGA显示字符

Verilog程序12、VGA显示字符

Verilog程序12、VGA显示字符
Verilog程序12、VGA显示字符

本地地址:E:\FPGA\vedio\vga_char\src\vga_char.v

`timescale 1ns / 1ps

///////////////////////////////////////////////////////////////////// /////////////

// Company:

// Engineer:

//

// Create Date: 17:15:28 11/27/2010

// Design Name:

// Module Name: vga_char

// Project Name:

// Target Devices:

// Tool versions:

// Description:

// 在液晶上显示字符

// Dependencies:

//

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

//

///////////////////////////////////////////////////////////////////// /////////////

module vga_char(clk,rst_n,vsync,hsync,r,g,b);

input clk,rst_n;

output vsync,hsync;

output[2:0] r;

output[2:0] g;

output[1:0] b;

reg vsync,hsync;

reg[10:0] x_cnt;

reg[9:0] y_cnt;

///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////

////////// 水平扫描参数的设定

///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////

parameter LinePeriod =12'd1040; //行同步周期

parameter H_SyncPulse=10'd120; //?型 叫藕?

parameter H_BackPorch=10'd61; //行同步后肩

parameter H_ActivePix=10'd806; //行同步数据有效

///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////

////////// 垂直扫描参数的设定

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

parameter FramePeriod=10'd666;

parameter V_SyncPulse=10'd6;

parameter V_BackPorch=10'd21;

parameter V_ActivePix=10'd604;

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

////////// 水平扫描计数x_cnt只负责计数从0计数计到1040

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

always @ (posedge clk or negedge rst_n)

if(!rst_n) x_cnt <= 1; else if(x_cnt == LinePeriod) x_cnt <= 1;

else x_cnt <= x_cnt+ 1; /////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

////////// 水平扫描信号vsync产生在0到120时为低电平

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

always @ (posedge clk or negedge rst_n)

if(!rst_n) hsync <=

1'b1;

else if(x_cnt == 1) hsync <= 1'b0; //产生hsync信号

else if(x_cnt ==

H_SyncPulse+1) hsync <= 1'b1;

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

////////// 垂直扫描计数

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

always @ (posedge clk or negedge rst_n)

if(!rst_n) y_cnt <= 1; else if(y_cnt == FramePeriod) y_cnt <= 1;

else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1;

/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////

////////// 垂直扫描信号hsync产??

///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////

always @ (posedge clk or negedge rst_n)

if(!rst_n) vsync <= 1'b1;

else if(y_cnt == 1) vsync <= 1'b0; //产生vsync信号

else if(y_cnt ==

V_SyncPulse+1) vsync <= 1'b1;

wire valid; //有效显示区标志

assign valid =

(x_cnt >= (H_SyncPulse+H_BackPorch)) &&

(x_cnt < (H_SyncPulse+H_BackPorch+H_ActivePix)) &&

(y_cnt >= (V_SyncPulse+V_BackPorch)) &&

(y_cnt < (V_SyncPulse+V_BackPorch+V_ActivePix));

wire[9:0] x_pos=x_cnt-H_SyncPulse-H_BackPorch;

wire[9:0] y_pos=y_cnt-V_SyncPulse-V_BackPorch;

//字符的字模

reg[7:0] vga_rgb;

/* 济(0) 大(1)

{0x00,0x80}, 00800100

{0x20,0x40}, 20400100

{0x17,0xFE}, 17fe0100

{0x12,0x08}, 12080100

{0x81,0x10}, 81100100

{0x40,0xA0}, 40a0fefe

{0x40,0x40}, 40400100

{0x11,0xB0}, 11b00100

{0x16,0x0E}, 160e0280

{0x21,0x10}, 21100280

{0xE1,0x10}, e1100440

{0x21,0x10}, 21100440

{0x21,0x10}, 21108020

{0x22,0x10}, 22101010

{0x22,0x10}, 22102008

{0x04,0x10}, 4010c006

{0x01,0x00},

{0x01,0x00},

{0x01,0x00},

{0x01,0x00},

{0x01,0x00},

{0xFF,0xFE},

{0x01,0x00},

{0x01,0x00},

{0x02,0x80},

{0x02,0x80},

{0x04,0x40},

{0x04,0x40},

{0x08,0x20},

{0x10,0x10},

{0x20,0x08},

{0xC0,0x06},

*/

//此时的数字取模,如是汉字要第一个汉字的第一行加上第二个汉字的第一行。以此类推

parameter line0 = 32'h00800100,

line1 = 32'h20400100,

line2 = 32'h17fe0100,

line3 = 32'h12080100,

line4 = 32'h81100100,

line5 = 32'h40a0fefe,

line6 = 32'h40400100,

line7 = 32'h11b00100,

line8 = 32'h160e0280,

line9 = 32'h21100280,

linea = 32'he1100440,

lineb = 32'h21100440,

linec = 32'h21108020,

lined = 32'h22101010,

linee = 32'h22102008,

linef = 32'h4010c006;

//显示位数

reg[4:0] char_bit;

always @ (posedge clk or negedge rst_n)

if(!rst_n) char_bit <= 1'h1f;

else if(x_pos == 10'd384) char_bit <= 5'd32; //产生vsync信号

else if(x_pos > 10'd384 && x_pos <= 10'd416) char_bit <= char_bit - 1'b1;

always @(posedge clk)

if(!valid)

vga_rgb <= 8'h00;

else if(x_pos > 10'd384 && x_pos <= 10'd416)

begin

case(y_pos)

10'd292: if(line0[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd293: if(line1[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd294: if(line2[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd295: if(line3[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd296: if(line4[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd297: if(line5[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd298: if(line6[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd299: if(line7[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd300: if(line8[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd301: if(line9[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd302: if(linea[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd303: if(lineb[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd304: if(linec[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd305: if(lined[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd306: if(linee[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

10'd307: if(linef[char_bit]) vga_rgb <= 8'b111_000_00;

else vga_rgb <=

8'b000_111_00;

default: vga_rgb <= 8'hff;

endcase

end

else

vga_rgb <= 8'h000_000_11;

assign r = vga_rgb[7:5];

assign g = vga_rgb[4:2];

assign b = vga_rgb[1:0];

endmodule

本地地址:E:\FPGA\vedio\vga_char\src\i_vga_char.ucf

NET "clk" LOC = P54;

NET "rst_n" LOC = P38;

NET "hsync" LOC = P39;

NET "vsync" LOC = P35;

NET "r<2>" LOC = P70;

NET "r<1>" LOC = P68; NET "r<0>" LOC = P67; NET "g<2>" LOC = P52; NET "g<1>" LOC = P51; NET "g<0>" LOC = P50; NET "b<1>" LOC = P44; NET "b<0>" LOC = P43;运行效果图:

放大图:

vga图像显示控制

VGA图像显示控制器 一、摘要和关键词 摘要:VGA显示屏显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。 关键词:行列扫描行列同步RGB三原色控制 二、设计任务要求 实验目的 1. 熟练掌握VHDL 语言和QuartusII 软件的使用; 2. 理解状态机的工作原理和设计方法; 3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法; 4. 熟悉VGA 接口协议规范。 实验要求: 设计一个VGA 图像显示控制器,达到如下功能: 显示模式为640×480×60HZ 模式; 用拨码开关控制R、G、B(每个2 位),使显示器可以显示64种纯色; 在显示器上显示横向彩条信号(至少6 种颜色); 在显示器上显示纵向彩条信号(至少8 种颜色); 在显示器上显示自行设定的图形、图像等。 选做:自拟其它功能。 三、实验原理 1、显示控制原理 常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。VGA显示控制器控制CRT显示图象的过程如图1所示

AD转换verilog程序

// 16-bit Analogue-Digital Converter // // +-----------------------------+ // | Copyright 1996 DOULOS | // | designer : Tim Pagden | // | opened: 7 Jun 1996 | // +-----------------------------+ `timescale 1 ns / 1 ps module ADC_16bit (analog_in,digital_out); parameter conversion_time = 25.0, // conversion_time in ns // (see `timescale above) charge_limit = 1000000; // = 1 million input[63:0] analog_in; // double-precision representation of a real-valued input port; a fix that enables // analog wires between modules to be coped with in Verilog. // Think of input[63:0] as the equivalent of MAST's electrical. output[15:0] digital_out; reg[15:0] delayed_digitized_signal; reg[15:0] old_analog,current_analog; reg[4:0] changed_bits; reg[19:0] charge; reg charge_ovr; reg reset_charge; /* SIGNALS:- analog_in = 64-bit representation of a real-valued signal analog_signal = real valued signal recovered from analog_in analog_limited = analog_signal, limited to the real-valued input range of the ADC digital_out = digitized 16bit 2's complement quantization of analog_limited */ /* function to convert analog_in to digitized_2s_comp_signal. Takes analog_in values from (+10.0 v - 1LSB) to -10.0 v and converts them to values from +32767 to -32768 respectively */

LCD-VGA 嵌入式微型显示控制系统软件设计说明书

编号: 版本: LCD-VGA微型显示驱动电路 软件详细设计说明书 编写: 2015年05月18日 校对: 2015年06月12日 审核: 2015年06月15日 批准: 2015年06月20日 目录 一、项目背景 (2) 二、软件功能介绍 (2) 三、软件特性介绍 (2) 四、软件的运行环境介绍 (2) 五、系统的物理结构 (2) 六、系统总结构 (3) 七、系统各个模块介绍 (5) 七、算法设计 ............................................................ 错误!未定义书签。 八、接口设计 ............................................................ 错误!未定义书签。 九、需求规定 (10) 十、测试计划 (10)

一、项目背景 随着便携式多媒体终端需求量迅速增加,在视频解码等方面对芯片低功耗的要求也越来越高。因此,只有将模拟视频信号转换成为符合ITU-R BT、656标准的数字信号,才可方便地利用FPGA或者DSP甚至PC机来进行信号处理。本模块就就是利用TI公司的超低功耗视频解码芯片TVP5150对视频信号A/D解码,由单片机通过I2C总线控制,实现驱动VGA级别(640X480)的微型显示模组,并预留地址数据等接口,作为模块验证以及后续数字信号处理之用。 二、软件功能介绍 本系统主要由视频转换模块TVP5150、按键模块、8051内核单片机与液晶图形缩放引擎(A912)组成,系统框图6、1所示。STC单片机通过I2C接口控制其余三部分模块的工作,视频解码IC把复合视频转换成标准8位的ITU-RBI、656格式的数字信号传输到A912,A912通过解码矩阵电路把解调后的信号转换成三基色RGB信号,最后通过增益/偏移控制、伽马校正、抖动处理与图形缩放变RGB信号输出到液晶屏、 三、软件特性介绍 以STC单片机 MCU为控制中心,以视频转换芯片TVP5150为硬件核心。电路将模拟视频信号编码为ITU-R BT.656类型的数据流。单片机管理整个工作流程,缩放引擎芯片进行图像处理,把数据流转换为RGB信号,最终在液晶屏上获得显示图像。该显示器结构轻薄,电路简单,性能可靠,图像显示清晰稳定。 四、软件的运行环境介绍 软件应在以下环境中运行: 硬件环境:选用256字节 RAM+1K AUX-RAM、4KB ROM、S0P 型号为STC11F04E 单片机 计算机软件:采用C语言进行编译并生成相应执行文件格式,在STC11F04E 单片机上运行。 五、系统的物理结构 微型显示嵌入式软件中的硬件就是由主控、显示驱动模块、按键输入模块、视频解码器模块TVP5150组成,其物理结构图如下图所示

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

实验五vga图显示控制

实验五 VGA图像显示控制 一实验目的 1.进一步掌握VGA显示控制的设计原理。 2.了解图像的存储和读取方法。 3.进一步掌握4×4键盘或PS/2键盘接口电路设计方法。 4.掌握状态机设计复杂控制电路的基本方法。 二硬件需求 1.EDA/SOPC实验箱一台。 三实验原理 VGA图像显示控制利用实验三中学习的《VGA显示控制模块》显示存储于ROM中的图像数据。 要显示的图像是四块64*64像素大小的彩色图片,通过键盘控制可以选择不同的图片显示。图像可以在屏幕上移动(水平和垂直方向每帧分别移动“H_Step”点和“V_Step”点),通过键盘改变“H_Step”和“V_Step”的值即可改变其移动速度和方向。图像碰到屏幕边沿会反弹回去。如图5.1所示 H_Step V_Step 图5.1 VGA图像显示控制示意图 实验中要用到4×4键盘、VGA显示控制、ROM等模块,在《实验三常用模块电路的设计》中已经讲述,可以直接使用已做好的模块(可能需要修改部分代码)。键盘也可以使用PS/2接口键盘,这样可以输入更多的字符。 四实验内容 1、图5.2是整个设计的顶层电路。

图5.2 VGA图像显示控制顶层电路图 2、实验三中学习的几个模块 ①“Read_Keyboard”模块与实验三中的4×4键盘模块一致; ②四个ROM模块使用宏功能模块实现,并设置其内存初始化文件分别为“FBB.mif”、“dog.mif”、“cat.mif”、“flower.mif”,如图5.3所示。当然也可以用其他图片(大小为64*64)使用“BmpToMif”软件生成对应的“mif”文件,如图5.4所示。

Verilog HDL编程举例

设计示范和上机习题 练习一.简单的组合逻辑设计 //(方法一): //---------------文件名compare.v ----------------- module compare(equal,a,b); input a,b; output equal; assign equal = (a==b)? 1 : 0; //a等于b时,equal输出为1;a不等于b时,equal输出为0。endmodule //(方法二): module compare(equal,a,b); input a,b; output equal; reg equal; always @(a or b) if(a==b) //a等于b时,equal输出为1; equal =1; else //a不等于b时,equal输出为0。 equal = 0; //思考:如果不写else 部分会产生什么逻辑?

endmodule //------------------------------------------------------------- //----------测试模块源代码(方法之一): `timescale 1ns/1ns // 定义时间单位。 `include "./compare.v" // 包含模块文件。在有的仿真调试环境中并不需要此语句。 //而需要从调试环境的菜单中键入有关模块文件的路径和名称 module t; reg a,b; wire equal; initial // initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 a=0; b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波

VGA显示控制

基于FPGA 的VGA显示控制 摘要 VGA(Video Graphics Array)即视频图形阵列,是IBM公司1987年推出的一种传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛应用。 本次课程设计是基于FPGA和主芯片为 EP4CE30F23C8N的ALTER公司的开发板Cyclone IV来实现的。数字图像信息在VGA接口显示器正确、完整地显示,涉及到时序的构建和数字图像信息的模拟化两方面,提出一种能够广泛应用的VGA显示接口方案,详细阐述了数字图像数据DA转化并输出到VGA接口显示器显示的方法,其中包括接口的硬件设计、视频DA转换器的使用方法、通过FPGA构造VGA时序信号的方法等等。方案可以应用于各种仪器,数字视频系统、高分辨率的彩色图片图像处理、视频信号再现等。 课设主要用到的芯片是ADV7123,它是一款高速、高精度数模转换芯片。拥有三路十位D/A转换器,能够将代表颜色的数据锁存到数据寄存器中,然后通过D/A 转换器转换成模拟信号输出,得到我们要的色彩。

VGA显示的硬件设计和原理 1.1 FPGA主芯片 课程设计所用开发板的主芯片是EP4CE30F23C8N——Cyclone IV,其由Altera公司开发,值得注意的是该开发板所支持的QUARTUS II的版本较高,并且11.0的版本较12.0的版本编译好的程序更好下载。 图-1 1.2 ADV7123 实现VGA的控制显示主要用到的芯片就是ADV7123,ADV7123由完全独立的三个I0位高速D/A转换器组成,RGB(红绿蓝)视频数据分别从R9~R0、G9~G0、B9~B0输入,在时钟CLOCK的上升沿锁存到数据寄存器中,然后经告诉D/A转换器转换成模拟信号。三个独立的视频D/A转换器都是电流型输出,可以接成差分输出,也可以接成单端输出。DE2-115上按单端输出,在模拟输出端用75欧姆电阻接地,以满足工业标准。低电平有效的BLANK信号为复合消隐信号,当BLANK为低电平时,模拟视频输出消隐电平,此时从R9~R0,G9~G0,B9~B0输入的所有数据被忽略。BLANK和SYNC都是在CLOCK 的上升沿被锁存的。 图-2是ADV7123的功能原理图:

verilog程序-60进制计数器

module count60_dongtai_LED ( input clk, input rest_n, output reg [2:0] sel, //位选 output reg [6:0] display ); reg [15:0] count_clk; // 分频计数器,最大2^16=64K分频 reg [5:0] sum_num; //计数缓存器,2^6=64 reg [3:0] g_bit; //个位 reg [3:0] s_bit; //十位 reg [3:0] disp_temp; //分频 always @ (posedge clk or negedge rest_n) begin if(rest_n ==0) begin count_clk=16'b0; end else begin if(count_clk==16'hffff) begin count_clk=16'b0; end else begin count_clk=count_clk+1'b1; end end end // 60进制计数 always @ (negedge count_clk[3] or negedge rest_n) begin // clk_clk[3] 对"clk" 16分频if(rest_n ==0) begin g_bit=4'b0; s_bit=4'b0; sum_num=6'b0; end else begin if (sum_num==6'd59) begin sum_num=6'b0; end else begin sum_num=sum_num+1'b1; end end s_bit=(sum_num/10)%10;

数电实验-vga图像显示控制

数字电路综合实验 报告 学校:北京邮电大学 学院:信息与通信工程学院 专业:通信工程 班级:2008211115 学号:08210460 班内序号:30 姓名:唐秋月 2011年1月5日

VGA图像显示控制器 一、摘要和关键词 摘要:VGA显示屏显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。 关键词:行列扫描行列同步RGB三原色控制 二、设计任务要求 实验目的 1. 熟练掌握VHDL 语言和QuartusII 软件的使用; 2. 理解状态机的工作原理和设计方法; 3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法; 4. 熟悉VGA 接口协议规范。 实验要求: 设计一个VGA 图像显示控制器,达到如下功能: 显示模式为640×480×60HZ 模式; 用拨码开关控制R、G、B(每个2 位),使显示器可以显示64种纯色; 在显示器上显示横向彩条信号(至少6 种颜色); 在显示器上显示纵向彩条信号(至少8 种颜色); 在显示器上显示自行设定的图形、图像等。 选做:自拟其它功能。 三、实验原理 1、显示控制原理 常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。VGA显示控制器控制CRT显示图象的过程如图1所示

Verilog程序(汉字点阵显示

中国石油大学 数电课程设计报告题目: 学院: 班级: 姓名: 学号: 日期: 2012 年 12月

摘要 设计要求: 利用EDA/SOPC 实验开发平台提供的16*16点阵LED以及EPC235核心板,实现循环显示“中国石油大学”这6个汉字(左移或者右移均可)。 (1)手动生成“中国石油大学”这6个汉字在16*16点阵LED 上的6个字模(即控制某些LED亮,某些LED灭)。 (2)实现循环显示“中国石油大学”这6个汉字(左移或者右移均可)。 (3)拓展要求:自主设计(如控制循环速度,方向)。 关键词: 扫描分频,控制速度,点阵,点阵汉字显示,

设计原理及方案: 1、16*16点阵LED内部结构如下图所示。 2、总体设计框图: 3、各子模块的设计: (1)、分频,扫描: module fenpin (clk_50Mhz,clk_4hz,k2,k3); input clk_50Mhz,k2,k3; // 输入端口声明

output clk_4hz; // 输出端口声明reg[24:0] count,ccount; reg clk_4hz; always @(posedge clk_50Mhz) begin if ((k2==0) && (k3==0)) ccount<=500000000; if ((k2==0) && (k3==1)) ccount<=100000000; if ((k2==1) && (k3==0)) ccount<=50000000; if ((k2==1) && (k3==1)) ccount<=10000000; if(count

基于FPGA的VGA图像显示与控制

基于FPGA的VGA图像显示与控制 课程要求:采用verilog语言,基于FPGA的VGA图像显示,即能够在显示器上实现动态彩色图像的显示。 VGA显示接口的理论分析:硬件采用CycloneII系列的EP2C20Q240C8N,它含有240个引脚。对于VGA的显示器遵循800*600@75模式,其中800是指每行中显示的像素的个数,而600是指屏幕每一列所包含的像素的个数。 VGA工业标准规定了具体地,在扫描过程中的时序图如下: 行扫描时序图 场扫描时序图 每场信号对应625个行周期,其中600行为图像显示行,每场有场同步信号,该脉冲宽度为3个行周期的负脉冲;每行显示行包括1056个点时钟,其中800点为有效显示区,每行有一个行同步信号的负脉冲,该脉冲宽度为80个点时钟。这样我们可以知道,行频为625*75=46857Hz。需要的点时钟的频率为:625*1056*75=49.5MHz约为50MHz。由上图可知,实际上在真正的实现过程中,每一行扫描所花的时间实际上比显示一行的像素所花的时间多了1056-800=256个像素点。同理,每一场的扫描时间多了625-600=25个行时间。 设计思路: 我们采用BmpToMif工具把BMP格式的图像转换为.mif文件。利用QuartusII7.2自带的MegaWizard Plug-In Manager产生一个ROM存储器,并用其来初始时.mif 文件。即将图像文件写入到存储器里面。然后利用编程来控制图像的显示。 设计步骤: 1、工程创建:创建一个Project取名字为vga,在创建工程的向导中选着CycloneII 系列的EP2C20Q240C8。 2、代码书写:新建一个Verilog HDL File编写程序代码如下: `timescale 1ns/1ps module tupian (clk,rst_n,hsync,vsync,vga_r,vga_g,vga_b,addr); input clk,rst_n;

Verilog的135个经典设计实例

【例3.1】4位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 【例3.2】4位计数器 module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步复位 else out<=out+1; //计数 end endmodule 【例3.3】4位全加器的仿真程序 `timescale 1ns/1ns `include "adder4.v" module adder_tp; //测试模块的名字 reg[3:0] a,b; //测试输入信号定义为reg型 reg cin; wire[3:0] sum; //测试输出信号定义为wire型 wire cout; integer i,j; adder4 adder(sum,cout,a,b,cin); //调用测试对象 always #5 cin=~cin; //设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //设定a的取值 end - 1 -

initial begin for(j=1;j<16;j=j+1) #10 b=j; //设定b的取值 end initial//定义结果显示格式 begin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum); #160 $finish; end endmodule 【例3.4】4位计数器的仿真程序 `timescale 1ns/1ns `include "count4.v" module coun4_tp; reg clk,reset; //测试输入信号定义为reg型 wire[3:0] out; //测试输出信号定义为wire型 parameter DELY=100; count4 mycount(out,reset,clk); //调用测试对象 always #(DELY/2) clk = ~clk; //产生时钟波形 initial begin//激励信号定义 clk =0; reset=0; #DELY reset=1; #DELY reset=0; #(DELY*20) $finish; end //定义结果显示格式 initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out); endmodule 【例3.5】“与-或-非”门电路 module AOI(A,B,C,D,F); //模块名为AOI(端口列表A,B,C,D,F) input A,B,C,D; //模块的输入端口为A,B,C,D output F; //模块的输出端口为F - 2 -

ADDA等一些芯片的verilog程序

/* AD0809 module v1.0 work up to 5M sample = 25us 40khz for normal clk = 2.5M sample = 30us 33khz */ module ad0809( clkin, adclk, eoc, st, ale, datain, oe, dataout ); input clkin; input eoc; input [7:0]datain; output st; output ale; output oe; output adclk; output [7:0]dataout; reg adclk; reg [7:0]dataout; reg st; reg oe; reg ale; //frequence divider for AD parameter Div_adclk = 8'd9;//(9+1)*2=20 adclk=2.5M parameter Div_clk_state = 4'd4;//(4+1)*2=10 clk_state=5M

reg [8:0]div_cnt_ad;//frequence div cnt reg [3:0]div_cnt_state; reg clk_state; always@(negedge clkin)begin if(div_cnt_ad != Div_adclk) div_cnt_ad <= div_cnt_ad + 1'b1; else begin div_cnt_ad <= 0; adclk <= ~adclk; end if(div_cnt_state != Div_clk_state) div_cnt_state <= div_cnt_state + 1'b1; else begin div_cnt_state <= 0; clk_state <= ~clk_state; end end /*AD convert*/ reg [3:0]state; reg [7:0]delay; initial begin state <= 4'd0; end always@(negedge clk_state)begin case(state) 4'd0:begin //clear all st <= 1'b0; oe <= 1'b0; ale <= 1'b0;

几个常用的Verilog小程序

几个常用的Verilog小程序 (1) 8位串并转换 module haidaoqi(clk,rst,din,dout); input clk,rst,din; output [7:0] dout; reg[7:0] data,dout; reg[2:0] cnt; always@(posedge clk or posedge rst) if(rst) //复位高有效 data <=8'b0; else data<= {data[7:0],din};//din是输入串行数据,假设输入数据高位在前 //这是一个移位寄存器 always@(posedge clk or posedge rst) if(rst) cnt <= 3'b0; else if(cnt == 3'b111) cnt <= 3'b0; else cnt <= cnt +1;//计数器,用来计算移位次数,移位8次在以

后产生一个有效数据 always@(posedge clk or posedge rst) if(rst) dout <= 8'b0; else if(cnt == 3'b111) dout <= data;//如果计数器记到7,那么输出一个有效的8位数据 else dout <= 0; endmodule (2) 8 位数据寄存器 module reg8(out_data,in_data,clk,clr); output[7:0] out_data; input[7:0] in_data; input clk,clr; reg[7:0] out_data; always @(posedge clk or posedge clr) begin

VGA 图像显示控制器设计报告

《电子设计自动化》 课程设计 题目:VGA 图像显示控制器 院(系): 年级: 班级: 姓名: 学号: 指导老师:

摘要:本文介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA图像显示控制的VHDL设计方案,并在Altera公司的QuartusII 软件环境下完成VGA模块的设计。而且给出了VGA模块的设计思路和顶层逻辑框图。最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。

目录 设计思路 ............................................................................................. - 1 - 一、系统设计 ........................................................................... - 1 - 1.设计要求 ........................................................................... - 1 - 2.设计方案 ........................................................................... - 1 - 二、单元电路设计.................................................................... - 2 - 1.VGA显示控制模块............................................................ - 3 - 2.数据存储模块.................................................................... - 7 - 3.锁相环模块........................................................................ - 8 - 三、软件设计 ......................................................................... - 10 - 1.VHDL语言........................................................................ - 10 - 2.Quartus II简介................................................................. - 11 - 3.硬件开发工具.................................................................. - 12 - 四、硬件验证 ......................................................................... - 14 -附录................................................................................................... - 15 - 1.程序 ................................................................................. - 15 - 2.仪器设备名称型号.......................................................... - 17 - 3.系统的性能指标.............................................................. - 18 -

verilog语言基本程序

1.设计一个产生010*******的序列信号发生器。module generator(out,clk,state); output [3:0]state; output out; input clk; reg [3:0]state; reg out; always@(posedge clk) begin if(state==9) state<=0; else state<=state+1; case(state) 4'b0000:out<=0; 4'b0001:out<=1; 4'b0010:out<=0; 4'b0011:out<=0; 4'b0100:out<=1; 4'b0101:out<=0; 4'b0110:out<=0; 4'b0111:out<=1;

4'b1000:out<=1; 4'b1001:out<=1; default:out<=0; endcase end endmodule 2.设计一个8位的加减计数器。时钟信号为clk,同步清零信号为rst。Clk上升沿时刻,当inc=1计数器加二,其他情况计数器保持不变。 module counter(rst,clk,q,inc,dec); input rst,clk,inc,dec; output [7:0]q; reg [7:0]q; always@(posedge clk) if(rst) q<=0; else case({inc,dec}) 2'b10:begin if(q==254) q<=0;else q<=q+2;end// 2'b01:begin if(q==0) q<=254;else q<=q-2;end// default:q<=q; endcase

Verilog程序解析

module antitwitter (clock,keyin,keyout; input clock,keyin; output keyout; reg [3:0] count; reg keyout; always @(posedge clock begin if ( keyin == 1 begin count <= count +4'h1; if (count <= 8 keyout<= 1'b0; else begin keyout <= keyin; count <= 4'h9; end end else begin

count <= 4'h0; keyout <= 1'b0; end end endmodule module discode38(g1,g2a,g2b,a,b,c,y; input g1,g2a,g2b,a,b,c; output [7:0] y; reg [7:0] y; always @(g1 or g2a or g2b or a or b or c // 当输入信号有变化时,执行块语句begin if ( (g1==1&&(g2a==0&&(g2b==0 // 门控信号满足条件时,输出有效begin case ( {c,b,a} 3'b000 : y <=8'b11111110; 3'b001 : y <=8'b11111101; 3'b010 : y <=8'b11111011; 3'b011 : y <=8'b11110111; 3'b100 : y <=8'b11101111; 3'b101 : y <=8'b11011111;

课程设计基于FPGA的VGA图像汉字显示及-PS-2键盘控制设计与应用 精品

题目基于FPGA的VGA图像汉字显示及PS/2键盘控制设计与应用 1.方案设计及工作原理 1.1 VGA模块方案设计 采用模块化设计方法,我们对VGA 图形控制器按功能进行层次划分。本设计的VGA控制器主要由以下模块组成:VGA 时序控制模块、ROM 内存地址控制模块、ROM内存模块、按键扫描控制模块。如图 1 所示。 图1.方案模块框图 1.2工作原理 VGA时序控制模块ROM内存地址控制模块ROM 按键扫描控制模块50MHz 5Hz addr data 首坐标xx、yy VGA 接口RGB HS、VS D/A CRT 根据VGA的显示协议,可以选择不同的显示分辨率。本设计选择的是800*600的分辨率。根据相应协议,在“VGA时序控制模块”对行扫描信号HS和场扫描信号VS进行相应的时序控制(具体控制详细信息见“VGA驱动原理”资料文档)。“ROM内存地址控制模块”根据“按键扫描控制模块”获得的图片显示首坐标xx、yy信息和“VGA时序控制模块”传送过来的ht(列计数器值)、vt(行计数器值)及相关控制信号计算出正确的内存地址,从rom中取出所需要的像素点的三基色数据。

1.3 PS/2接口电路的工作原理 PS/2协议和接口最初是IBM公司开发并推广使用的一种应用于键盘/鼠标的协议和接口,PS/2键盘按键接口是6芯的插头与PC机的键盘相连接,插头、插座定义如图所示。 键盘/鼠标接口的数据线和时钟线采用集电极开路结构,平时都是高电平当这些设备等待发送数据时,它首先检查clock是否为高。如果为低,则认为PC抑制了通讯,此时它缓冲数据直到获得总线的控制权。如果clock为高电平,设备则开始向PC发送数据。一般都是由ps2设备产生时钟信号。发送按帧格式。数据位在clock为高电平时准备好,在clock下降沿被PC读入。图3所示是按下Q 键的时序图“Q”键的扫描码从键盘发送到计算机(通道A是时钟信号,通道B 是数据信号)。因本设计只需进行控制,所以PS/2模块并未设计转码功能。 2.模块设计及仿真 2.1 VGA显示模块 图片想要在显示器上显示出来,它主要需要5个信号,行同步信号(HS)、场同步信号(VS)和RGB三基色信号。 VGA时序控制模块是须严格按照VGA

ADC0809驱动FPGA实现的verilog程序

/*FPGA实现的程序:(verilog) 贴子回复于:2008-4-27 15:26:01*/ module AD0809(clk500K, //脉宽(至少100ns) rst_n, EOC, //约100us后EOC变为高电平转换结束 START, //启动信号,上升沿有效(至少100ns) OE, //高电平打开三态缓冲器输出转换数据 ALE, //高电平有效,选择信道口 ADDA, //因为ADDB,ADDC都接地了,这里只有ADDA为变量 DATA, //转换数据 DATA_R); output START,OE,ALE,ADDA; input EOC,clk500K,rst_n; input[7:0] DATA; output[7:0] DATA_R; reg START,OE,ALE,ADDA; reg[7:0] DATA_R; reg[4:0] CS,NS; parameter IDLE=5'b00001,START_H=5'b00010,START_L=5'b00100,CHECK_END=5'b01000,GET_DATA=5'b100 00; always @(posedge clk500K) case(CS) IDLE: NS=START_H; START_H: NS=START_L; START_L: NS=CHECK_END; CHECK_END: if(EOC) NS=GET_DATA; else NS=CHECK_END; GET_DATA: NS=IDLE; default: NS=IDLE; endcase always @(posedge clk500K) if(!rst_n) CS<=IDLE;

相关主题