fpga异步fifo



复制代码
module top(
    input      wire       clk  ,
    input      wire       rst_n,
    output     wire       tx   
);
//reg
reg  [7:0]cunt  ;//din
reg  [25:0]cunt_num; 
reg  [25:0]cunt1   ;
//wire 
wire      wr_clk;
wire      rd_clk;
wire      locked;
wire      rst   ;
wire      wr_en ;
wire      rd_en ;
wire [7:0]dout  ;
wire      full  ;
wire      empty ;
wire      wr_rst_busy;
wire      rd_rst_busy;
wire      vled   ;
wire      busy   ;

assign rst=(locked==1&&rst_n==1&&wr_rst_busy==0)?1'b0:1'b1;  //高电平复位开始 低电平复位不使能 系统正常运行
//产生一个计数器计数 0~9只产生一次
always @(posedge wr_clk or posedge rst) begin
    if(rst)
        cunt<=0;
    else if(cunt==11)
        cunt<=cunt;
    else
        cunt<=cunt+1;
end

assign wr_en=(cunt>1&&cunt<10&&cunt>0)?1'b1:1'b0;
always @(posedge rd_clk) begin
    if(rst)
        cunt_num<=0;
    else if(busy==0)begin
        if(cunt_num==20)
        cunt_num<=cunt_num;
        else
        cunt_num<=cunt_num+1;
        end
    else
    cunt_num<=0;
end
always @(posedge rd_clk) begin
    if(rst)
        cunt1<=0;
    else if(vled==1)
        cunt1<=cunt1+1;
    else
        cunt1<=cunt1;
end


assign rd_en=(cunt_num==8)?1'b1:1'b0;
assign vled =(cunt_num==9&&cunt1<13)?1'b1:1'b0;
clk_wiz_0 u_clk(
    // Clock out ports
    .wr_clk(wr_clk),     // output wr_clk  100mhz
    .rd_clk(rd_clk),     // output rd_clk  125mhz
    // Status and control signals
    .reset(~rst_n), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk));      // input clk_in1


fifo_generator_0 u_fifo (
  .rst(~rst_n),                  // input wire rst
  .wr_clk(wr_clk),            // input wire wr_clk
  .rd_clk(rd_clk),            // input wire rd_clk
  .din(cunt),                  // 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 [7 : 0] dout
  .full(full),                // output wire full
  .empty(empty),              // output wire empty
  .wr_rst_busy(wr_rst_busy),  // output wire wr_rst_busy
  .rd_rst_busy(rd_rst_busy)  // output wire rd_rst_busy
);

uart_tx#(
    /*parameter*/ . CLK_DIV(125_000_000) ,
    /*parameter*/ . BIT    (9600) 
)u_tx(
    /*input       */ . clk  (rd_clk),
    /*input       */ . rst_n(rst_n),
    /*input       */ . vled (vled ),
    /*input  [7:0]*/ . data (dout ),
    /*output  reg */ . tx   (tx   ),
                     . busy (busy ) 
    );
endmodule

前面 dout初始值就是0 因为rd_en没有使能

相关推荐
坏孩子的诺亚方舟3 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐3 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐3 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH4 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡4 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安4 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐5 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯5 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客5 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA5 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发