集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2356|回复: 7

FPGA使用VGA显示静态

[复制链接]
九五之尊656 发表于 2019-5-1 14:56:33 | 显示全部楼层 |阅读模式
才开始学怎么用vivado调用coe文件使用VGA显示图片
但是遇到了一点麻烦的问题,困惑了我好久,希望各位大神能为我提供一下解决方案,谢谢
首先原图是这样子的
然后显示出来的图片却是这样的
这图片让我困惑的地方有几点
一、为什么显示屏顶部不是蓝色的?图片的底色为什么不是白色的?
二、为什么显示出来的图片会有种向右移动了的现象
真的代码不知道看了多少遍了,感觉没问题一样,错是肯定有错的,但是实在不知道错在哪,难受
  1. 顶层模块
  2. module module_vga (
  3.         sys_clk , rst ,
  4.         VSYNC_Sig , HSYNC_Sig ,
  5.         Red_Sig , Green_Sig , Blue_Sig
  6. );
  7.         input sys_clk;
  8.         input rst;
  9.         output VSYNC_Sig;
  10.         output HSYNC_Sig;
  11.         output Red_Sig;
  12.         output Green_Sig;
  13.         output Blue_Sig;
  14.        
  15.         wire clk;
  16.         module_vga_clk V1
  17.         (
  18.            .sys_clk(sys_clk),
  19.            .rst(rst),
  20.            .clk(clk)
  21.         );
  22.        
  23.         wire [10:0] Column_Addr_Sig;
  24.         wire [10:0] Row_Addr_Sig;
  25.         wire En;
  26.        
  27.         module_vga_sync V2
  28.         (
  29.                 .clk(clk),
  30.                 .rst(rst),
  31.                 .VSYNC_Sig(VSYNC_Sig),
  32.                 .HSYNC_Sig(HSYNC_Sig),
  33.                 .Column_Addr_Sig(Column_Addr_Sig),
  34.                 .Row_Addr_Sig(Row_Addr_Sig),
  35.                 .En_Sig(En)
  36.         );
  37.        
  38.         wire Rom_Data;
  39.         wire [16:0] Rom_Addr;
  40.        
  41.         module_vga_control V3
  42.         (
  43.                 .clk(clk),
  44.                 .rst(rst),
  45.                 .En_Sig(En),
  46.                 .Column_Addr_Sig(Column_Addr_Sig),
  47.                 .Row_Addr_Sig(Row_Addr_Sig),
  48.                 .Rom_Addr(Rom_Addr),
  49.                 .Rom_Data(Rom_Data),
  50.                 .Red_Sig(Red_Sig),
  51.                 .Green_Sig(Green_Sig),
  52.                 .Blue_Sig(Blue_Sig)
  53.         );
  54.     vga_rom your_instance_name (
  55.       .clka(clk),    // input wire clka
  56.       .addra(Rom_Addr),  // input wire [16 : 0] addra
  57.       .douta(Rom_Data)  // output wire [0 : 0] douta
  58.     );
  59. endmodule
  60. 50M时钟模块
  61. module module_vga_clk(sys_clk , clk , rst);
  62.     input sys_clk;
  63.     input rst;
  64.     output clk;
  65.    
  66.     reg clk_buff;
  67.    
  68.     always @(posedge sys_clk or negedge rst) begin
  69.         if(!rst) begin
  70.             clk_buff <= 1'b0;
  71.         end
  72.         else
  73.             clk_buff <= ~clk_buff;
  74.     end
  75.    
  76.     assign clk = clk_buff;
  77.    
  78. endmodule
  79. VGA扫描模块
  80. module module_vga_sync (
  81.         rst , clk ,
  82.         VSYNC_Sig , HSYNC_Sig , En_Sig ,
  83.         Column_Addr_Sig , Row_Addr_Sig
  84. );
  85.         input rst;
  86.         input clk;
  87.         output VSYNC_Sig;
  88.         output HSYNC_Sig;
  89.         output En_Sig;
  90.         output [10:0] Column_Addr_Sig;
  91.         output [10:0] Row_Addr_Sig;
  92.        
  93.         parameter Column_Max = 11'd1040;
  94.         parameter Column_Min = 11'd240;
  95.         parameter Row_Max = 11'd624;
  96.         parameter Row_Min = 11'd24;
  97.        
  98.         reg [10:0] Count_H;
  99.         always @(posedge clk or negedge rst)
  100.                 if (!rst)
  101.                         Count_H <= 11'd0;
  102.                 else
  103.                         if (Count_H == 11'd1056)
  104.                                 Count_H <= 11'd0;
  105.                         else
  106.                                 Count_H <= Count_H + 1'b1;
  107.        
  108.         reg [10:0] Count_V;
  109.         always @(posedge clk or negedge rst)
  110.                 if (!rst)
  111.                         Count_V <= 11'd0;
  112.                 else
  113.                         if (Count_V == 11'd625)
  114.                                 Count_V <= 11'd0;
  115.                         else if (Count_H == 11'd1056)
  116.                                 Count_V <= Count_V + 1'b1;
  117.        
  118.         reg En;
  119.         always @(posedge clk or negedge rst)
  120.                 if (!rst)
  121.                         En <= 1'b0;
  122.                 else
  123.                         if ((Count_H > Column_Min && Count_H < Column_Max) && (Count_V > Row_Min && Count_V < Row_Max))
  124.                                 En <= 1'b1;
  125.                         else
  126.                                 En <= 1'b0;
  127.        
  128.         assign VSYNC_Sig = (Count_V <= 11'd3) ? 1'b0 : 1'b1;
  129.         assign HSYNC_Sig = (Count_H <= 11'd80) ? 1'b0 : 1'b1;
  130.         assign En_Sig = En;
  131.         assign Column_Addr_Sig = En ? Count_H - 11'd240 : 11'd0;
  132.         assign Row_Addr_Sig = En ? Count_V - 11'd24 : 11'd0;
  133. endmodule
  134. VGA控制模块
  135. module module_vga_control(
  136.         clk , rst ,
  137.         En_Sig , Column_Addr_Sig , Row_Addr_Sig ,
  138.         Rom_Data , Rom_Addr ,
  139.         Red_Sig , Green_Sig , Blue_Sig
  140. );
  141.         input rst;
  142.         input clk;
  143.         input En_Sig;
  144.         input [10:0] Column_Addr_Sig;
  145.         input [10:0] Row_Addr_Sig;
  146.         input  Rom_Data;
  147.         output [16:0] Rom_Addr;
  148.         output Red_Sig;
  149.         output Green_Sig;
  150.         output Blue_Sig;
  151.        
  152.         reg disp_en;
  153.     always @(posedge clk or negedge rst) begin
  154.         if(!rst) begin
  155.             disp_en <= 1'b0;
  156.         end
  157.         else begin
  158.             if(En_Sig && Row_Addr_Sig > 8'd200 && Row_Addr_Sig < 9'd484 && Column_Addr_Sig > 8'd200 && Column_Addr_Sig < 9'd435)
  159.                 disp_en <= 1'b1;
  160.             else
  161.             disp_en <= 1'b0;
  162.         end
  163.     end
  164.    
  165.     reg [16:0] m;
  166.     always @(posedge clk or negedge rst) begin
  167.         if (!rst) begin
  168.             m <= 17'b0;
  169.         end
  170.         else begin
  171.             if(disp_en)
  172.                 m <= m + 1'b1;
  173.             else if(!disp_en && (Row_Addr_Sig == 9'd484 || Row_Addr_Sig == 8'd200))
  174.                 m <= 1'b0;
  175.         end
  176.     end
  177.         assign Rom_Addr = m;
  178.         assign Red_Sig = disp_en ? Rom_Data : 1'b1;
  179.         assign Green_Sig = disp_en ? Rom_Data : 1'b1;
  180.         assign Blue_Sig = disp_en ? Rom_Data : 1'b1;
  181. endmodule
复制代码
 楼主| 九五之尊656 发表于 2019-5-1 15:05:00 | 显示全部楼层
本帖最后由 九五之尊656 于 2019-5-1 15:06 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 九五之尊656 发表于 2019-5-1 15:10:06 | 显示全部楼层
 楼主| 九五之尊656 发表于 2019-5-1 15:17:34 来自手机 | 显示全部楼层
九五之尊656 发表于 2019-5-1 15:10

VGA显示出来是这样的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 九五之尊656 发表于 2019-5-1 15:18:52 | 显示全部楼层
第一次发这个,怎么传图片都不知道,真尴尬
 楼主| 九五之尊656 发表于 2019-5-1 15:20:58 | 显示全部楼层
我还没弄彩色的上去,想先把黑白的弄好了再尝试彩色的,可没想到在黑白的这里就遇到问题了
大鹏 发表于 2019-5-1 17:53:50 | 显示全部楼层
FPGA使用VGA显示静态
 楼主| 九五之尊656 发表于 2019-5-9 16:20:38 | 显示全部楼层
我发现是这个生成mif的软件的问题
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-30 20:46 , Processed in 0.063095 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表