FPGA 内部双口块RAM 读写实现

XILINX官网文档PG058 “LogiCORE IP Block Memory Generator v8.2”

FPGA 内部块RAM 的读时序如下图:

   可知,块RAM的读延时为两个时钟周期。

FPGA 内部块RAM 的写时序如下图:

 可知,块RAM 的写延时为0,但是RAM 中的内容是在写的下一个时钟改变。

 

在ISE下实现对FPGA内部块RAM 的读写代码:

 
  1. module TOP(

  2. input USER_CLK

  3. );

  4.  
  5. `define DLY #1

  6. reg FPGA_Enable=0;

  7. reg[3:0] FPGA_Write_Enable=4'h0;

  8. reg[31:0] FPGA_Address=0;

  9. reg[31:0] FPGA_Write_Data=0;

  10. reg[31:0] FPGA_Read_Data_reg=0;

  11. wire[31:0] FPGA_Read_Data;

  12.  
  13. reg[10:0] count=0;

  14. always @ (posedge USER_CLK)

  15. begin

  16. count <= count + 1;

  17. if(count<=100)

  18. begin

  19. FPGA_Enable <= 0;

  20. FPGA_Write_Enable <= 4'h0;

  21. end

  22. else if((count <= 105)&&(count >100))

  23. begin

  24. FPGA_Enable <= 1;

  25. FPGA_Write_Enable <= 4'hf;

  26. FPGA_Address <= FPGA_Address + 4;

  27. FPGA_Write_Data <= FPGA_Write_Data + 1;

  28. end

  29. else if((count <= 110)&&(count >105))

  30. begin

  31. FPGA_Enable <= 0;

  32. FPGA_Write_Enable <= 4'h0;

  33. FPGA_Address <= 0;

  34. FPGA_Write_Data <= 0;

  35. end

  36. else if((count <= 117)&&(count >110))

  37. begin

  38. FPGA_Enable <= 1;

  39. FPGA_Write_Enable <= 4'h0;

  40. FPGA_Read_Data_reg <= FPGA_Read_Data;

  41. FPGA_Address <= FPGA_Address + 4;

  42. end

  43. else if(count == 118)

  44. begin

  45. FPGA_Enable <= 0;

  46. count <= count;

  47.  
  48. end

  49. end

  50.  
  51. BBBB your_instance_name (

  52. .clka(USER_CLK), // input clka

  53. .ena(FPGA_Enable), // input ena

  54. .wea(FPGA_Write_Enable), // input [3 : 0] wea

  55. .addra(FPGA_Address), // input [31 : 0] addra

  56. .dina(FPGA_Write_Data), // input [31 : 0] dina

  57. .douta(FPGA_Read_Data), // output [31 : 0] douta

  58.  
  59.  
  60. .clkb(clkb), // input clkb

  61. .enb(enb), // input enb

  62. .web(web), // input [3 : 0] web

  63. .addrb(addrb), // input [31 : 0] addrb

  64. .dinb(dinb), // input [31 : 0] dinb

  65. .doutb(doutb) // output [31 : 0] doutb

  66. );

  67. endmodule


效果图:

从上图可以看出,在地址4~20里面写入了1-5的数,数据读出的时候对应地址的数据都延时了两个时钟周期才输出。

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值