Xilinx FPGA:vivado关于同步fifo的两个小实验

一、实验一:在同步fifo里写一个读一个(写入是8个位宽,读出是16个位宽)

程序:

`timescale 1ns / 1ps
//要求写一个读一个
//读写时钟一致,写是8个位宽,读是16个位宽
module sync_fifo_test(
     input                 sys_clk    ,
     input                 rst_n      
    );
     wire [15 : 0]   dout         ;                    
     wire full                    ;
     wire wr_ack                  ;
     wire empty                   ;
     wire valid                   ;
     wire [4 : 0] rd_data_count   ;
     wire [5 : 0] wr_data_count   ;
     
     reg [7 : 0] din  ;
     reg wr_en        ;
     reg rd_en        ;
     
     always@(posedge sys_clk )
          if(!rst_n)
             din <= 0 ;
          else
             din <= din +1 ;
     
     always@(posedge sys_clk )
          if(!rst_n)
             wr_en <= 0 ;
          else if (full)
             wr_en <= 0 ;
          else
             wr_en <= 1 ;

            

//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
sync_fifo_generator your_instance_name (
  .clk(sys_clk),                      // input wire clk
  .srst(~rst_n),                    // input wire srst
  .din(din),                      // input wire [7 : 0] din
  .wr_en(wr_en),                  // input wire wr_en
  .rd_en(wr_ack),                  // input wire rd_en
  .dout(dout),                    // output wire [15 : 0] dout
  .full(full),                    // output wire full
  .wr_ack(wr_ack),                // output wire wr_ack
  .empty(empty),                  // output wire empty
  .valid(valid),                  // output wire valid
  .rd_data_count(rd_data_count),  // output wire [4 : 0] rd_data_count
  .wr_data_count(wr_data_count)  // output wire [5 : 0] wr_data_count
);
// INST_TAG_END ------ End INSTANTIATION Template ---------

endmodule

仿真程序:

`timescale 1ns / 1ps
module test_sync_fifo( );

     reg                 sys_clk    ;
     reg                 rst_n      ;
     
     initial
            begin
                 sys_clk = 0 ;
                 rst_n   = 0 ;
                 #10
                 rst_n   = 1 ;
            end
    always #1 sys_clk = ~sys_clk ;     
     


sync_fifo_test  sync_fifo_test_1(
     .         sys_clk  ( sys_clk)  ,
     .         rst_n    ( rst_n  )  
    );



endmodule

实验结果:

TIPS:

二、实验二:在实验一的基础上完成“写完再读”

程序:

`timescale 1ns / 1ps
module sync_fifo_2(
    input               sys_clk   ,
    input               rst_n     
    );
    reg   [7 : 0] din             ;
    reg   wr_en                   ;
    reg   rd_en                   ;
    wire [15 : 0] dout            ;
    wire full                     ;
    wire wr_ack                   ;
    wire empty                    ;
    wire valid                    ;
    wire [4 : 0] rd_data_count    ;
    wire [5 : 0] wr_data_count    ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            wr_en <= 0 ;
         else if (full)
            wr_en <= 0 ;
         else if (rd_en)
            wr_en <= 0 ;
         else
            wr_en <= 1 ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            din <= 0 ;
         else
            din <= din +1 ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            rd_en <= 0 ;
         else if (full)   //写满了 
            rd_en <= 1 ;
         else if (empty)   // 读空了
            rd_en <= 0 ;
         else
            rd_en <= rd_en ;
    

//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
sync_fifo_generator your_instance_name (
  .clk(sys_clk ),                      // input wire clk
  .srst(~rst_n),                    // input wire srst
  .din(din),                      // input wire [7 : 0] din
  .wr_en(wr_en),                  // input wire wr_en
  .rd_en(rd_en),                  // input wire rd_en
  .dout(dout),                    // output wire [15 : 0] dout
  .full(full),                    // output wire full
  .wr_ack(wr_ack),                // output wire wr_ack
  .empty(empty),                  // output wire empty
  .valid(valid),                  // output wire valid
  .rd_data_count(rd_data_count),  // output wire [4 : 0] rd_data_count
  .wr_data_count(wr_data_count)  // output wire [5 : 0] wr_data_count
);
// INST_TAG_END ------ End INSTANTIATION Template ---------

endmodule

仿真程序:

`timescale 1ns / 1ps
module test_sync_fifo_2( );

    reg               sys_clk   ;
    reg               rst_n     ;
    
    initial
           begin
                sys_clk = 0 ;
                rst_n   = 0 ;
                #10
                rst_n   = 1 ;
           end
    always #1 sys_clk = ~sys_clk ;

   sync_fifo_2   sync_fifo_2_1(
                          .    sys_clk  (sys_clk) ,
                          .    rst_n    (rst_n  ) 
    ); 

endmodule

仿真结果:

相关推荐

  1. 爬虫案例

    2024-07-09 21:26:09       42 阅读
  2. 关于Flutter doctor里警告消除

    2024-07-09 21:26:09       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 21:26:09       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 21:26:09       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 21:26:09       42 阅读
  4. Python语言-面向对象

    2024-07-09 21:26:09       53 阅读

热门阅读

  1. NI SCXI-1001 模块处理器控制器

    2024-07-09 21:26:09       20 阅读
  2. Oracle数据库自带的内置表和视图、常用内部视图

    2024-07-09 21:26:09       17 阅读
  3. 程序员失业日记2:失业后迷茫

    2024-07-09 21:26:09       21 阅读
  4. uniapp 请求封装

    2024-07-09 21:26:09       22 阅读
  5. Python人生重开器

    2024-07-09 21:26:09       19 阅读
  6. 【3】迁移学习模型

    2024-07-09 21:26:09       19 阅读
  7. Transformer 入门案例教程(大语言模型)

    2024-07-09 21:26:09       25 阅读
  8. 白骑士的C语言教学高级篇 3.4 C语言中的算法

    2024-07-09 21:26:09       21 阅读
  9. flask-apscheduler 定时任务被执行两次

    2024-07-09 21:26:09       19 阅读
  10. 部署Gunicorn + Flask应用到Docker

    2024-07-09 21:26:09       21 阅读
  11. VB 爬虫技术

    2024-07-09 21:26:09       21 阅读
  12. Self-Instruct构造Prompt的例子

    2024-07-09 21:26:09       20 阅读