• 基于Verilog的简单FIFO读写实验


    一、模块框图及基本思路

     

    fifo_ip:ISE生成的IP

    fifo_control:在fifo未满情况下不断写入递增的四位数,每隔1s读出一个数据驱动Led显示

    fifo_top:前两个模块的组合

    二、软件部分

    fifo_control:

     1 module fifo_control(
     2     clk,rst,
     3     Data_Out,
     4     din,wr_en,full,
     5     dout,rd_en,empty
     6     );
     7      input clk,rst;
     8      output[3:0] Data_Out;
     9      output [3:0] din;  //相对fifo来说是输入
    10      input [3:0] dout;  //相对fifo来说是输出
    11      output wr_en,rd_en;
    12      input full,empty;
    13      
    14     
    15     /****************定时部分*********************/
    16     localparam T1S=50_000_000-1;
    17     reg[31:0] Count_1s;
    18     always @(posedge clk or posedge rst)
    19     begin
    20         if(rst)
    21         begin
    22             Count_1s<=32'd0;
    23         end
    24         else if(Count_1s==T1S)
    25             Count_1s<=32'd0;
    26         else if(!isCount)
    27             Count_1s<=32'd0;
    28         else Count_1s<=Count_1s+1'b1;
    29     end
    30     /*****************FIFO写入部分********************/
    31     reg [1:0] i;
    32     reg wr_en;
    33     reg [3:0]din;
    34     
    35     always @(posedge clk or posedge rst)
    36     if(rst)
    37     begin
    38         din<=16'd0;
    39         i<=2'd0;
    40         wr_en<=1'b0;
    41     end
    42     else if(!full)
    43     case(i)
    44         2'd0:begin din<=din+1'b1;i<=i+1'b1;wr_en<=1'b1;end
    45         2'd1:begin i<=2'd0;wr_en<=1'b0;end
    46     endcase
    47     /*******************FIFO读出部分***************************/
    48     reg[3:0] Data_Out_r;
    49     wire [3:0] dout;
    50     reg isCount;
    51     reg [2:0]j;
    52     reg rd_en;
    53     
    54     always @(posedge clk or posedge rst)
    55     if(rst)
    56     begin
    57         Data_Out_r<=4'd0;
    58         j<=3'd0;
    59         isCount<=1'b0;
    60         rd_en<=1'b0;
    61     end
    62     else if(!empty)
    63     case(j)
    64         3'd0:if(Count_1s==T1S) begin j<=j+1'b1;isCount<=1'b0;rd_en<=1'b1;  end
    65                 else isCount<=1'b1;
    66         3'd1:begin rd_en<=1'b0;j<=j+1'b1;end
    67         3'd2:begin Data_Out_r<=dout;j<=3'd0; end
    68     endcase
    69     assign Data_Out=Data_Out_r;
    70     
    71     /****************************************************/
    72      
    73      
    74 
    75 
    76 endmodule

    fifo_top:

     1 module fifo_top(
     2     clk,RSTn,
     3     Data_Out
     4     );
     5      input clk,RSTn;
     6      output[3:0] Data_Out;
     7      
     8      wire [3:0]din;
     9      wire [3:0]dout;
    10      wire wr_en,rd_en,full,empty;
    11      
    12      
    13     /****************************************************/
    14     fifo_ip U0 (
    15   .clk(clk), // input clk
    16   .rst(!RSTn), // input rst
    17   .din(din), // input [3 : 0] din
    18   .wr_en(wr_en), // input wr_en
    19   .rd_en(rd_en), // input rd_en
    20   .dout(dout), // output [3 : 0] dout
    21   .full(full), // output full
    22   .empty(empty) // output empty
    23 );     
    24     /*********************************************************/
    25     fifo_control U1 (
    26         .clk(clk), 
    27         .rst(!RSTn), 
    28         .Data_Out(Data_Out), 
    29         .din(din), 
    30         .wr_en(wr_en), 
    31         .full(full), 
    32         .dout(dout), 
    33         .rd_en(rd_en), 
    34         .empty(empty)
    35     ); 
    36 
    37 
    38 endmodule

    三、硬件部分

    黑金SPARTAN开发板

    1 NET "clk" LOC = T8;
    2 NET "RSTn" LOC = L3;
    3 
    4 NET "Data_Out[0]" LOC = P4;
    5 NET "Data_Out[1]" LOC = N5;
    6 NET "Data_Out[2]" LOC = P5;
    7 NET "Data_Out[3]" LOC = M6;
  • 相关阅读:
    [ios]blocks
    [算法] 堆,栈 【转】
    [ios]关于内存错误调试
    [ios]get,post请求 【转】
    [ios]iOS模拟器应用程序目录结构
    [ios]iPhone地图应用开发以及自定义Annotation [转]
    [算法]插入排序
    [ios]让alertView 自动消失【转】
    [ios]延迟执行方法,取消执行方法
    [算法] 基数排序
  • 原文地址:https://www.cnblogs.com/wt-seu/p/7450450.html
Copyright © 2020-2023  润新知