当前位置:   article > 正文

FPGA-基本IP核的应用-FIFO(同步)_fpga fifo 转发数据

fpga fifo 转发数据

基本概念

FIFO的英文全称为First In First Out,即先进先出。FPGA使用的FIFO一般指的是对数据的存储具有先进先出的特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交互,也即所谓的跨时钟域信号传递(发送和接收不是同一个时钟)。

它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,由此带来的缺点就是不能像RAM和ROM那样可以由地址线决定读取或写入某个指定的地址

 

创建IP

先做同步时钟(单时钟FIFO)情况下

 设置FIFO的位宽,即传输数据的位宽,深度为传输128字节的数据,选择单时钟FIFO

 设置引脚

full为数据满时的标志信号,empty为空数据标志信号,usedw[]为剩余的可用数据量;

almost empty/almost full 将满/将空 标志信号,当剩余数据量将满/将空时,对应信号拉高;

Asynchronous clear 异步清零;

Synchronous clear同步清零;

一般使用异步清零。

选择读请求信号的类型,此处选择正常模式的FIFO,即数据在读请求发出后有效;

选择存储的数据类型,此处以自动Auto为例。

 不需要用更多空间换取最大的性能,但需要电能保护。

 仍然生成.v文件

 再创建一个前写模式s_fifo_ah.v,存储数据256字节,选择另一种模式,在读请求之前数据有效,生成.v文件。

 

打开生成的inst文件

 

将其复制到test_ip文件里,并修改端口连接信息 

测试代码

顶层test_ip.v

  1. module test_ip (
  2. input rst_n,
  3. input clk,
  4. input [7:0] no_data ,
  5. input no_rdreq ,
  6. input no_wrreq ,
  7. output [7:0] no_q ,
  8. input [7:0] ah_data ,
  9. input ah_rdreq ,
  10. input ah_wrreq ,
  11. output [7:0] ah_q
  12. );
  13. wire no_empty ;
  14. wire no_full ;
  15. wire [6:0] no_usedw ;
  16. wire ah_empty ;
  17. wire ah_full ;
  18. wire [7:0] ah_usedw ;
  19. s_fifo s_fifo_inst (
  20. .aclr ( ~rst_n ),
  21. .clock ( clk ),
  22. .data ( no_data ),
  23. .rdreq ( no_rdreq ),
  24. .wrreq ( no_wrreq ),
  25. .empty ( no_empty ),
  26. .full ( no_full ),
  27. .q ( no_q ),
  28. .usedw ( no_usedw )
  29. );
  30. s_fifo_ah s_fifo_ah_inst (
  31. .aclr ( ~rst_n ),
  32. .clock ( clk ),
  33. .data ( ah_data ),
  34. .rdreq ( ah_rdreq ),
  35. .wrreq ( ah_wrreq ),
  36. .empty ( ah_empty ),
  37. .full ( ah_full ),
  38. .q ( ah_q ),
  39. .usedw ( ah_usedw )
  40. );
  41. endmodule

测试文件

  1. `timescale 1ns/1ps
  2. module test_tb();
  3. reg rst_n ;
  4. reg clk ;
  5. reg [7:0] no_data ;
  6. reg no_rdreq ;
  7. reg no_wrreq ;
  8. wire [7:0] no_q ;
  9. reg [7:0] ah_data ;
  10. reg ah_rdreq ;
  11. reg ah_wrreq ;
  12. wire [7:0] ah_q ;
  13. parameter CYCLE = 20;
  14. test_ip u_test_ip (
  15. .rst_n ( rst_n ),
  16. .clk ( clk ),
  17. .no_data (no_data ),
  18. .no_rdreq (no_rdreq ),
  19. .no_wrreq (no_wrreq ),
  20. .no_q (no_q ),
  21. .ah_data (ah_data ),
  22. .ah_rdreq (ah_rdreq ),
  23. .ah_wrreq (ah_wrreq ),
  24. .ah_q (ah_q )
  25. );
  26. integer i ;
  27. initial begin
  28. clk = 1'b1;
  29. rst_n = 1'b1;
  30. #(2*CYCLE);
  31. #5;
  32. rst_n = 1'b0;
  33. no_data = 0 ;//复位给定信号初值
  34. no_rdreq = 0 ;
  35. no_wrreq = 0 ;
  36. ah_data = 0 ;
  37. ah_rdreq = 0 ;
  38. ah_wrreq = 0 ;
  39. #(5*CYCLE);
  40. rst_n = 1'b1;//复位释放
  41. #(CYCLE*10);//延迟10个时钟是为了打开时钟锁得到稳定的时钟信号
  42. //写数据
  43. for(i=0;i<32;i=i+1) begin
  44. no_wrreq = 1'b1 ;
  45. no_data = i + 1 ;//data给1到64
  46. ah_wrreq = 1'b1 ;
  47. ah_data = i + 1 ;
  48. #(CYCLE) ;//保证一个时钟周期写写完一个数据
  49. end
  50. no_wrreq = 1'b0 ;//写完数据拉低
  51. ah_wrreq = 1'b0 ;
  52. #(5*CYCLE) ;
  53. //读数据
  54. for (i=0;i<16;i=i+1) begin
  55. no_rdreq = 1'b1 ;
  56. ah_rdreq = 1'b1 ;//写数据读地址
  57. #(CYCLE*2) ;//保证一个是时钟周期读完一个数据
  58. end //这个for循环,内部三行代码,在时钟上升沿到来时且读请求拉高时读一个数据,持续两个时钟周期读2个数据,相当于执行依次循环读2个数据,for循环要经历16次,所以循环内读了32个数据
  59. no_rdreq = 1'b0 ;
  60. ah_rdreq = 1'b0 ; //读完数据拉低
  61. #(20*CYCLE) ;
  62. $stop;
  63. end
  64. always #(CYCLE/2) clk = ~clk ;//50M
  65. endmodule

test.do文件(修改自己的对应文件路径)

  1. vlib work
  2. vmap work work
  3. #编译testbench文件
  4. vlog test_tb.v
  5. #编译 设计文件
  6. vlog ../ip/s_fifo.v
  7. vlog ../ip/s_fifo_ah.v
  8. vlog ../rtl/test_ip.v
  9. vlog altera_mf.v
  10. #指定仿真顶层
  11. vsim -novopt work.test_tb
  12. #添加信号到波形窗
  13. add wave -position insertpoint sim:/test_tb//*
  14. run -all

另外,由于正常模式和前写模式fifo生成的ip文件里没有用到eccstatus端口,需要注释掉

 仿真分析

全局:

先分析正常模式下,

上图定位出可以看出,写写请求拉高时有了第一个数据,而当在下一个始终上升沿时,此时已经有了数据,空数据标志拉低(它是在数据写入的同时拉低,表明可能是组合逻辑),可用数据量为1,q端无变化。

 然后观察读数据波形:

当读请求拉高时,在下一个时钟上升沿读出数据1,之前写入了32个数据,读出1个数后,剩余可用数据量为31个

 到最后读完时,输出32个数据,剩余可用数据为0,与此同时空信号标志拉高,数据读完后读请求拉低。

 然后分析前写模式:

对比两种模式下,正常模式是在读请求拉高后才有数据,而前写模式fifo在读请求拉高之前就已经输出了一个数据,并知道拉高之后再输出第二个数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/747617
推荐阅读
相关标签
  

闽ICP备14008679号