基于fpga的vga显示控制器设计与图像显示内容摘要:
尽管下面的描述仅限于 CRT, LCD已经发展到可以同 CRT使用同样的时序信号了。 因此,下面的讨论均适合 CRT和 LCD。 在 CRT显示器中,电流的波形通过蹄形磁铁产生磁场,使得电子束偏转,光栅在显示屏上横向显示,水平方向从左至右,垂直方向从上至下。 当电子束向正方向移动时,信息才显示,即从左至右、从上至下。 如果电子束从后返回左或顶边,显示屏并不显示任何信息。 在消隐周期 —— 电子束重新分配和稳定于新的水平或垂直位时,丢失了许多信息。 显示协议定义了电子束的大小以及通过显示屏的频率,该频率是可 调的。 现在的 VGA显示屏支持多种显示协议, VGA控制器通过协议产生时序信号来控制光栅。 控制器产生同步脉冲 TTL电平来设置电流通过偏转磁铁的频率,以确保像素或视频数据在适当的时间送给电子枪。 视频数据一般来自重复显示存储器中一个或多个字节 —— 它们被分配到每个像素单元。 入门实验板使用每个像素中的 3位,产生图 8中可能的一种颜色。 控制器指定视频数据缓冲器以备电子束通过显示屏。 然后,控制器接收并利用视频数据在适当的时间显示,电子束移动到指定的像素点。 根据图 , VGA控制器产生水平同步时序信号( HS)和垂直 同步时序信号(VS),调节在每个像素时钟视频数据的传送。 像素时钟定义了显示像素信息的有效时间段。 VS信号定义显示的更新频率,或刷新屏幕信息的频率。 最小的刷新频率是取决于显示器的亮度和电子束的强度,实际频率一般在 60~ 120Hz之间。 给定的刷新频率的水平线的数量定义了水平折回频率 [23]。 下 表的时序信号是 640 480,像素时钟 25Mhz,刷新频率 60Hz177。 1。 图 7说明了每个时序的联系。 同步脉冲的时序宽度( TPW)和前后门拱的间隔 TFP和 TBP)基于观察多种VGA的显示屏的结果。 前后门拱的间隔是前后同步脉冲 时间。 在这些时段信息不能显示。 图 VGA 控制器时序信号 图 各时序之间的联系 设计方案 设计方案如下: 将图像控制模块分为这样几部分:二分频电路( )、 VGA时序控制模块( )、存储器读出模块( )。 其中二分频把 50mhz时钟频率分成25mhz并提供给其它模块作为时钟; VGA时序控制模块用于产生 640 480显示范围,并控制显示范围和消隐范围以及产生水平同步时序信号 hs和垂直同步时序信号 vs的值;存储器读出模块提供给 SRAM地址并按地址读出八位数据(灰度值 Y),然后得到 R、 G、B的值(若 Y中间值,则 R=G=B=1;否则 R=G=B=0),并把 R、 G、 B的值通过 VGA接口传到 CRT显示器 ,如图。 图 模块设计总体结构 3 VGA 显示调试与显示 软件程序设计 本设计需要三个模块,一个是二分频电路、 VGA 时序控制模块 、 存储器读出模块。 1. 二分频电路 二分频把 50MHz 时钟频率分成 25MHz 并提供给其它模块作为时钟。 显示器的像素分辨率是 640 480,像素时钟 25Mhz,刷新频率 60Hz177。 1。 开发板提 供的系统时钟50MHz,所以要对板载时钟进行分频后才能使用。 分频电路的设计部分程序如下 : module clkdiv( input wire mclk, input wire clr, output wire clk25 )。 reg[24:0] q。 //25bit counter always @ (posedge mclk or posedge clr) begin if(clr==1) q=0。 else q=q+1。 end assign clk25=q[0]。 //25mhz endmodule VGA 时序控制模块用于产生 640*480 显示范围,并控制显示范围和消隐范围以及产生水平同步时序信号 hs 和垂直同步时序信号 vs 的值。 一般来说,时钟计数器通过像素时钟来控制水平时序信号。 译码计数器的值产生HS 信号。 在指定的行,计数器产生当前像素显示的位置。 一个独立的计数器产生垂直时序信号。 垂直同步计数器在每个 HS 脉冲信号来临时自动加 1,译码值产生 VS 信号。 计数器产生当前显示行。 这两个计数器从地址到显示缓冲器连续计数。 开发板的 DDR SDRAM 提供了一个足够的显示缓 冲区。 在 HS 脉冲的开始和 VS 脉冲的开始没有具体规定相对的时序关系。 因此,计数器被分配到简单格式的视频 RAM 地址,或分配到同步脉冲产生器的最小译码逻辑。 设计对时序控制部分的部分代码如下 : module vga640480( input wire clk, input wire clr, output reg hsync, output reg vsync, output reg [9:0]hc, output reg [9:0]vc, output reg vidon )。 parameter hpixels=1039。 b1100100000。 //行像素点 =800 parameter vlines=1039。 b1000001001。 //行数 =521 parameter hbp=1039。 b0010010000。 //行显示后沿 =144( 128+16) parameter hfp=1039。 b1100010000。 //行显示前沿 =784(128+16+640) parameter vbp=1039。 b0000011111。 //场显示后沿 =31( 2+29) parameter vfp=1039。 b0111111111。 //场显示前沿 =511(2+29+480) reg vsenable。 //Enbale for the Vertical counter //行同步信号计数器 always@(posedge clk or posedge clr) begin if(clr==1) hc=0。 else begin if(hc==hpixels1) begin //The counter has reached the end of pixel count hc=0。 //计数器复位 vsenable=1。 //Enable the vertical counter to increment end else begin hc=hc+1。 //Increment the horizontal counter vsenable=0。 //Leave the vsenable off end end end //产生 hsync 脉冲 //当 hc 为 0~127 时,行同步脉冲为低电平 always@(*) begin if (hc128) hsync=0。 else hsync=1。 end //场同步信号计数器 always@(posedge clk or posedge clr) begin if(clr==1) vc=0。 else if(vsenable==1) begin if(vc==vlines1) //Reset when the number of lines is reached vc=0。 else vc=vc+1。 //场计数器加 1 end end //产生 vsync 脉冲 //当 hc 为 0 或 1 时,场同步脉冲为低电平 always@(*) begin if(vc2) vsync=0。 else vsync=1。 end //Enable video out when within the porches always@(*) begin if((hchfp)amp。 amp。 (hchbp)amp。 amp。 (vcvfp)amp。 amp。 (vcvbp)) vidon=1。 else vidon=0。 end endmodule module vga_stripes( input wire vidon, input wire[9:0]hc,vc, output reg red,green, output reg blue )。 //输出 16 行宽的红绿条纹 always@(*) begin red=0。 green=0。 blue=0。 if(vidon==1) begin red={vc[4]}。 green=~{vc[4]}。 end end endmodule 彩条显示的顶层文件设计 module vga_initials_top( input wire mclk, input wire[3:0]btn, input wire[7:0]sw, output wire hsync, output wire vsync, output wire [2:0]red, output wire [2:0]green, output wire [1:0]blue )。 wire clr,clk25,vidon。 wire[9:0]hc,vc。 wire[0:31]M。 wire[3:0]rom_addr4。 assign clr=btn[3]。 clkdiv U1(.mclk(mclk), .clr(clr), .clk25(clk25) )。 vga640480 U2(.clk(clk25), .clr(clr), .hsync(hsync), .vsync(vsync), .hc(hc), .vc(vc), .vidon(vidon) )。 vga_initials U3(.vidon(vidon), .hc(hc), .vc(vc), .M(M), .sw(sw), .rom_addr4(rom_addr4), .red(red), .green(green), .blue(blue) )。 prom_DHM U4(.addr(rom_addr4), .M(M) )。 endmodule 程序在 QuartusⅡ 下的 编译与仿真 本设计利用 QuartusⅡ 软件进行设计与编译仿真和下载。 采用有源晶体频率为 50M Hz 给 FPGA 的 P23 提供时钟。 (第 23 叫输入时钟)。 独立按键的 I/O 分配: KEY1: PIN 144 KEY2: PIN 145 分别作为复位按钮和 SW 控制。 VGA 接口的分配 R : PIN 151 G : PIN 150 B : PIN 149 VGA VS : PIN 161 VGA HS : PIN 152 显示结果 通过以上的步 骤,将程序烧写进开发板中后,将 CRT 显示器连接到开发板的 VGA接口上。 给系统上电,在显示器上就可以看见两种模式的彩条:横彩条和竖彩条。 横彩条由场计数器 vcont 计数来进行控制,以实现某一个区域显示相应的颜色。 设计产生 8 个彩。基于fpga的vga显示控制器设计与图像显示
相关推荐
有多个稳定的中间电流状态。 如 图 22 所示为 四 相 八 拍四细分时各相电流波形 , 各相电流均以最大电流值的 1/4 上升和下降。 与单双 八 拍方式相比 ,α值从 2 增加到 8, 步距角 θ b 为 四 相 八 拍运行方式时的 1/4。 所以步进电机细分驱动的关键在于控制电机各相励磁绕组中的电流大小及其稳定性。 而 如图 22 所示 我们可以分析得各相电流是以 1/4
,具有灵活性和及时面市优势的 FPGA与 ASIC 相比更有竞争性,在数字 消费市场上的应用也急剧增加。 第一代 Cyclone 系列迄今发售了 3百多万片,在全球拥有 3,000 多位客户,对大批量低成本数字消费市场有着巨大的影响,该市场消纳了三分之一的器件。 根据 Gartner Dataquest 调查,显示 通信 系统时钟分频 A/D 转换 开始 . . 在 2020 年仅消费电子市场对
0 年代初,从CAD(计算机辅助没计)、 CAM(算机辅助制造)、 CAT(计算机辅助测试 )和 CAE(计算机辅助工程 )的概念发展而来的。 EDA 技术就是以计算机为工具,在EDA 软件平台上,对以硬件描述语言 VHDL 为系统逻辑描述手段完成的设计文件自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑行局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工 作
SPWM 的理论依据实际是时间平均等效原理。 图 1 SPWM产生原理图 可以证明 , 当脉冲数足够多时 , 可以认为逆变器输出电压的基波幅值和调制波幅值是相等的 , 即 SPWM逆变器输出的脉冲波的基波幅值就是调制时要求的等效 正弦波。 2 SPWM波形控制器设计 系统由直接频率生成器产生低频正弦信号 , 然后与三角波进行高速比较而产生 SPWM。 2. 1 系统构图 SPWM 波形发生器
大 小设 定+显 示输 出( 累 计 )清 零大 于 2 2 点 , 小 于 5 点预 设++—长 按 逐 渐 加 快密 码过 2 公 里起 步起 步过 2 公 里过 1 2 公 里过 1 2 公 里计 时主 计 费模 块总 额显 示1 0 0 O h m1 0 0 O h m2 k O h m1 0 0 O h m2 2 0 u f启 动 计 费空 车用 于 清 零统 计+显 示V C C按
设计人员可以使用 DSP Builder 模块迅速生成 Simulink 系统建模硬件。 DSP Builder 包括比特和周期精度的 Simulink 模块,涵盖了算法和存储功能等基本操作。 可以使用 DSP Builder 模型中的 MegaCore 功能实现复杂功能的集成。 Altera 还提供 DSP Builder 高级模块集,这一 Simulink 库实现了时序驱动的