今天看了本《系统晶片设计-使用NIOS》这本书,看到VGA IP核的设计不错,特移植到Cyclone III上来,试验一下效果。

顶层代码:binary_VGA.v

  1. module binary_VGA ( iDATA, oDATA, iADDR,iWR,
  2. iRD, iCS, iRST_N, iCLK,
  3. VGA_R, VGA_G, VGA_B,
  4. VGA_HS, VGA_VS, VGA_SYNC,
  5. VGA_BLANK, VGA_CLK );
  6.  
  7. output [:] oDATA;
  8. input [:] iDATA;
  9. input [:] iADDR;
  10. input iWR,iRD,iCS;
  11. input iCLK,iRST_N;
  12.  
  13. output [:] VGA_R;
  14. output [:] VGA_G;
  15. output [:] VGA_B;
  16. output VGA_HS;
  17. output VGA_VS;
  18. output VGA_SYNC;
  19. output VGA_BLANK;
  20. output VGA_CLK;
  21.  
  22. wire iCLK_25;
  23. reg [:] RGB_EN;
  24. reg [:] oDATA;
  25. wire [:] mVGA_ADDR;
  26. reg [:] oRed;
  27. reg [:] oGreen;
  28. reg [:] oBlue;
  29. parameter RAM_SIZE = 'h4B000;
  30.  
  31. always@(posedge iCLK or negedge iRST_N)
  32. begin
  33. if(!iRST_N)
  34. begin
  35. RGB_EN <= ;
  36. oDATA <= ;
  37. end
  38. else
  39. begin
  40. if(iCS)
  41. begin
  42. if(iWR)
  43. begin
  44. case(iADDR)
  45. RAM_SIZE+ : RGB_EN <= iDATA[:];
  46. endcase
  47. end
  48. else if(iRD)
  49. begin
  50. case(iADDR)
  51. RAM_SIZE+ : oDATA <= RGB_EN ;
  52. endcase
  53. end
  54. end
  55. end
  56. end
  57.  
  58. ram_binary_VGA u1 ( // Write In Side
  59. .data(iDATA[:]),
  60. .wren(iWR && (iADDR < RAM_SIZE) && iCS),
  61. .wraddress({iADDR[:],~iADDR[:]}),
  62. .wrclock(iCLK),
  63. // Read Out Side
  64. .rdaddress(mVGA_ADDR[:]),
  65. .rdclock(VGA_CLK),
  66. .q(ROM_DATA));
  67.  
  68. tff t0(.clk(iCLK),.t('b1),.q(iCLK_25));
  69.  
  70. reg [:] ADDR_d;
  71. reg [:] ADDR_dd;
  72. wire [:] ROM_DATA;
  73.  
  74. always@(posedge VGA_CLK or negedge iRST_N)
  75. begin
  76. if(!iRST_N)
  77. begin
  78. oRed <= ;
  79. oGreen <= ;
  80. oBlue <= ;
  81. ADDR_d <= ;
  82. ADDR_dd <= ;
  83. end
  84. else
  85. begin
  86. ADDR_d <= mVGA_ADDR[:];
  87. ADDR_dd <= ~ADDR_d;
  88. oRed <= ROM_DATA[ADDR_dd]? 'b1111111111:10'b00000000;
  89. oGreen <= ROM_DATA[ADDR_dd]? 'b1111111111:10'b00000000;
  90. oBlue <= ROM_DATA[ADDR_dd]? 'b1111111111:10'b00000000;
  91. end
  92. end
  93.  
  94. VGA_ctr u0 ( // Host Side
  95. .i_RGB_EN(RGB_EN),
  96. .oAddress(mVGA_ADDR),
  97. .iRed (oRed),
  98. .iGreen (oGreen),
  99. .iBlue (oBlue),
  100. // VGA Side
  101. .oVGA_R(VGA_R),
  102. .oVGA_G(VGA_G),
  103. .oVGA_B(VGA_B),
  104. .oVGA_H_SYNC(VGA_HS),
  105. .oVGA_V_SYNC(VGA_VS),
  106. .oVGA_SYNC(VGA_SYNC),
  107. .oVGA_BLANK(VGA_BLANK),
  108. .oVGA_CLOCK(VGA_CLK),
  109. // Control Signal
  110. .iCLK_25(iCLK_25),
  111. .iRST_N(iRST_N) );
  112.  
  113. endmodule

binary_VGA

VGA_ctl.v 如下:

  1. module VGA_ctr(i_RGB_EN,iRed,iGreen,iBlue,
  2. oVGA_R,oVGA_G,oVGA_B,oVGA_H_SYNC,
  3. oVGA_V_SYNC,oVGA_SYNC,oVGA_BLANK,oVGA_CLOCK,
  4. iCLK_25, iRST_N, oAddress);
  5.  
  6. input iCLK_25;
  7. input iRST_N;
  8. input [:] i_RGB_EN;
  9. input [:] iRed,iGreen,iBlue;
  10.  
  11. output [:] oAddress;
  12.  
  13. output [:] oVGA_R,oVGA_G,oVGA_B;
  14. output oVGA_H_SYNC,oVGA_V_SYNC;
  15. output oVGA_SYNC;
  16. output oVGA_BLANK;
  17. output oVGA_CLOCK;
  18.  
  19. // H_Sync Generator, Ref. 25 MHz Clock
  20. parameter H_SYNC_CYC = ;
  21. parameter H_SYNC_TOTAL= ;
  22.  
  23. reg [:] H_Cont;
  24. reg oVGA_H_SYNC;
  25. always@(posedge iCLK_25 or negedge iRST_N)
  26. begin
  27. if(!iRST_N)
  28. begin
  29. H_Cont <= ;
  30. oVGA_H_SYNC <= ;
  31. end
  32. else
  33. begin
  34. // H_Sync Counter
  35. if( H_Cont < H_SYNC_TOTAL) //H_SYNC_TOTAL=800
  36. H_Cont <= H_Cont+;
  37. else
  38. H_Cont <= ;
  39. // H_Sync Generator
  40. if( H_Cont < H_SYNC_CYC ) //H_SYNC_CYC =96
  41. oVGA_H_SYNC <= ;
  42. else
  43. oVGA_H_SYNC <= ;
  44. end
  45. end
  46.  
  47. parameter V_SYNC_TOTAL= ;
  48. parameter V_SYNC_CYC = ;
  49. reg [:] V_Cont;
  50. reg oVGA_V_SYNC;
  51.  
  52. // V_Sync Generator, Ref. H_Sync
  53. always@(posedge iCLK_25 or negedge iRST_N)
  54. begin
  55. if(!iRST_N)
  56. begin
  57. V_Cont <= ;
  58. oVGA_V_SYNC <= ;
  59. end
  60. else
  61. begin
  62. // When H_Sync Re-start
  63. if(H_Cont==)
  64. begin
  65. // V_Sync Counter
  66. if( V_Cont < V_SYNC_TOTAL ) //V_SYNC_TOTAL =525
  67. V_Cont <= V_Cont+;
  68. else
  69. V_Cont <= ;
  70. // V_Sync Generator
  71. if( V_Cont < V_SYNC_CYC ) // V_SYNC_CYC =2
  72. oVGA_V_SYNC <= ;
  73. else
  74. oVGA_V_SYNC <= ;
  75. end
  76. end
  77. end
  78.  
  79. parameter H_SYNC_BACK = +;
  80. parameter V_SYNC_BACK = +;
  81. parameter X_START = H_SYNC_CYC+H_SYNC_BACK+;
  82. parameter Y_START = V_SYNC_CYC+V_SYNC_BACK;
  83. parameter H_SYNC_ACT = ;
  84. parameter V_SYNC_ACT = ;
  85. reg [:] oVGA_R,oVGA_G,oVGA_B;
  86. always@(H_Cont or V_Cont or i_RGB_EN or iRed or
  87. iGreen or iBlue )
  88. begin
  89. if(H_Cont>=X_START+ && H_Cont<X_START+H_SYNC_ACT+ &&
  90. V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT)
  91. begin
  92. if (i_RGB_EN[]==)
  93. oVGA_R=iRed ;
  94. else
  95. oVGA_R=;
  96. if (i_RGB_EN[]==)
  97. oVGA_G=iGreen ;
  98. else
  99. oVGA_G=;
  100. if (i_RGB_EN[]==)
  101. oVGA_B=iBlue ;
  102. else
  103. oVGA_B=;
  104. end
  105. else
  106. begin
  107. oVGA_R=;oVGA_G=;oVGA_B=;
  108. end
  109. end
  110.  
  111. assign oVGA_BLANK = oVGA_H_SYNC & oVGA_V_SYNC;
  112. assign oVGA_SYNC = 'b0;
  113. assign oVGA_CLOCK = ~iCLK_25;
  114.  
  115. reg [:] oCoord_X,oCoord_Y;
  116. reg [:] oAddress;
  117. always@(posedge iCLK_25 or negedge iRST_N)
  118. begin
  119. if(!iRST_N)
  120. begin
  121. oCoord_X <= ;
  122. oCoord_Y <= ;
  123. oAddress <= ;
  124. end
  125. else
  126. begin
  127. if( H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
  128. V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
  129. begin
  130. oCoord_X <= H_Cont-X_START;
  131. oCoord_Y <= V_Cont-Y_START;
  132. oAddress <= oCoord_Y*H_SYNC_ACT+oCoord_X-;
  133. end
  134. end
  135. end
  136.  
  137. endmodule
  138.  
  139. // VGA Side
  140.  
  141. // Internal Registers and Wires

VGA_tel

ram_binary_VGA的调用见下图:

关于VGA_init.mif的调用,

接下来选择View-Address Radix 选择Decimal;选择View-Memory Radix 选择Binary;选择视窗Edit--Custom Fill Cells,出现如下框图:

完后,添加IP核,

添加入进去IP核即可。注意:SOPC可以自动寻找IP核目录,只限于工程文件夹的子目录,如果在子目录中再添加目录,不可以寻找,必须在sopc中指定相应的目录。

VGAtest实验

pingpong兵乓球实验

  

VGA IP核的制作的更多相关文章

  1. FPGA VGA+PLL+IP核笔记

    1.实现了预定功能!整个工程,没有使用例程的25MHZ,全部统一使用50MHZ.2.分辨率使用了800*600@72HZ.3.实现了只显示白色部分,黑色部分RGB == 0,要显示背景色.VGA图形基 ...

  2. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...

  3. 使用matlab和ISE 创建并仿真ROM IP核

    前言 本人想使用简单的中值滤波进行verilog相关算法的硬件实现,由于HDL设计软件不能直接处理图像,大部分过程都是可以将图像按照一定的顺序保存到TXT文档中,经过Modelsim仿真后,处理的数据 ...

  4. Vivado使用技巧(二):封装自己设计的IP核

    由 judyzhong 于 星期五, 09/08/2017 - 14:58 发表 概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原 ...

  5. Vivado使用技巧:封装自己设计的IP核

    概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx ...

  6. 调用altera IP核的仿真流程—下

    调用altera IP核的仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是 ...

  7. 调用altera IP核的仿真流程—上

    调用altera IP核的仿真流程—上 在学习本节内容之后,请详细阅读<基于modelsim-SE的简单仿真流程>,因为本节是基于<基于modelsim-SE的简单仿真流程>的 ...

  8. (转)modelsim10.0C编译ISE14.7的xilinx库(xilinx ip核)

    原地址modelsim10.0C编译ISE14.7的xilinx库(xilinx ip核)   1.打开D:\Xilinx\14.7\ISE_DS\ISE\bin\nt64\compxlibgui.e ...

  9. Lattice 的 DDR IP核使用调试笔记之DDR 的 仿真

    —— 远航路上ing 整理于 博客园.转载请标明出处. 在上节建立完工程之后,要想明确DDR IP的使用细节,最好是做仿真.然后参考仿真来控制IP 核. 仿真的建立: 1.在IP核内的以下路径找到以下 ...

随机推荐

  1. Struts2,Hibernate和Spring之间的框架整合关系

    1.首先要认清,hibernate和struts没有半点关系,所以他们之间没有任何可以整合的东西.a:struts 作为中心控制器,肯定要调用一些类来完成一些逻辑.而hibernate开发中,经常使用 ...

  2. C#当中的多线程_任务并行库(中)

    发现自己有点懒了!也可能是越往后越难了,看书理解起来有点费劲,所以这两天就每天更新一点学习笔记吧. 4.5 将APM模式转化为任务 书上提供的三种方式 方式一: class Program       ...

  3. Oracle学习第二天

    oracle数据库的常见数据类型oracle全部数据类型 有26种 char定长字符串类型 长度是固定不变的 例如:no char(10) 如果存入的值不足十个字符,其它位也被占用默认长度是1 最大长 ...

  4. UIimageView GIF动画

    1.代码如下 (注释都有) - (void)viewDidLoad { [super viewDidLoad]; UIImageView * bigImageView = [[UIImageView ...

  5. GitHub中"watch" "star" "fork"三个按钮干什么用的?

    总结下一般使用:1.想拷贝别人项目到自己帐号下就fork一下.2.持续关注别人项目更新就star一下3.watch是设置接收邮件提醒的.具体提醒有Issues and their commentsPu ...

  6. jQuery noConflict() 方法

    如何在页面上同时使用 jQuery 和其他框架? jQuery 和其他 JavaScript 框架 正如您已经了解到的,jQuery 使用 $ 符号作为 jQuery 的简写. 如果其他 JavaSc ...

  7. 原始的JDBC操作

    -----------------------------根据配置文件---------------------------- package cn.gdpe.jdbc; import java.io ...

  8. nginx利用limit模块设置IP并发防CC攻击

    nginx利用limit模块设置IP并发防CC攻击 分类: 系统2013-01-21 09:02 759人阅读 评论(0) 收藏 举报 来源:http://blog.xencdn.net/nginx- ...

  9. js学习--DOM操作详解大全一(浏览器对象)

    一.客户端中的window对象 window对象表示当前浏览器的窗口,它是一个顶级对象,我们创建的所有对象.函数.变量都是window对象的成员. window对象自带了一些非常有用的方法.属性. w ...

  10. hw-text1

    Text 1 测试题 python是什么类型的语言? 解释型语言,是脚本语言 百娘(脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语 ...