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没有使能

相关推荐
尤老师FPGA2 小时前
LVDS系列9:Xilinx 7系可编程输入延迟(二)
单片机·嵌入式硬件·fpga开发
内有小猪卖6 小时前
时序约束 记录
fpga开发
Cao1234567893219 小时前
FPGA时钟设计
fpga开发
JNTeresa12 小时前
锁存器知识点详解
fpga开发
Cao12345678932115 小时前
FPGA基础之基础语法
fpga开发
一大Cpp15 小时前
通过Quartus II实现Nios II编程
fpga开发
7yewh16 小时前
Verilog 语法 (二)
fpga开发
边缘计算社区1 天前
FPGA与边缘AI:计算革命的前沿力量
人工智能·fpga开发
S&Z34631 天前
[官方IP] Shift RAM
网络协议·tcp/ip·fpga开发
S&Z34631 天前
[FPGA Video IP] Video Processing Subsystem
网络协议·tcp/ip·fpga开发·video