cyclone4 FPGA 读写片内FIFO读写测试 Verilog逻辑源码Quartus工程文件+文档说明,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。
FPGA片内FIFO读写测试Verilog逻辑源码Quartus工程文件+文档说明,使用 FPGA 内部的 FIFO 以及程序对该 FIFO 的数据读写操作。FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// module fifo_test( input clk, //50MHz时钟 input rst_n //复位信号,低电平有效 ); //----------------------------------------------------------- localparam W_IDLE = 1; localparam W_FIFO = 2; localparam R_IDLE = 1; localparam R_FIFO = 2; reg[2:0] write_state; reg[2:0] next_write_state; reg[2:0] read_state; reg[2:0] next_read_state; reg[15:0] w_data; //FIFO写数据 wire wr_en; //FIFO写使能 wire rd_en; //FIFO读使能 wire[15:0] r_data; //FIFO读数据 wire full; //FIFO满信号 wire empty; //FIFO空信号 wire[8:0] rd_data_count; wire[8:0] wr_data_count; ///产生FIFO写入的数据 always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) write_state <= W_IDLE; else write_state <= next_write_state; end always@(*) begin case(write_state) W_IDLE: if(empty == 1'b1) //FIFO空, 开始写FIFO next_write_state <= W_FIFO; else next_write_state <= W_IDLE; W_FIFO: if(full == 1'b1) //FIFO满 next_write_state <= W_IDLE; else next_write_state <= W_FIFO; default: next_write_state <= W_IDLE; endcase end assign wr_en = (next_write_state == W_FIFO) ? 1'b1 : 1'b0; always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) w_data <= 16'd0; else if (wr_en == 1'b1) w_data <= w_data + 1'b1; else w_data <= 16'd0; end ///产生FIFO读的数据 always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) read_state <= R_IDLE; else read_state <= next_read_state; end always@(*) begin case(read_state) R_IDLE: if(full == 1'b1) //FIFO满, 开始读FIFO next_read_state <= R_FIFO; else next_read_state <=
ALTERA FPGA IP FIFO 8bitX8 FIFO读写测试Verilog源码工程文件, FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module ip_fifo( input sys_clk , // 时钟信号 input sys_rst_n // 复位信号 ); //wire define wire wrreq ; // 写请求信号 wire [7:0] data ; // 写入FIFO的数据 wire wrempty ; // 写侧空信号 wire wrfull ; // 写侧满信号 wire wrusedw ; // 写侧FIFO中的数据量 wire rdreq ; // 读请求信号 wire [7:0] q ; // 从FIFO输出的数据 wire rdempty ; // 读侧空信号 wire rdfull ; // 读侧满信号 wire rdusedw ; // 读侧FIFO中的数据量 //***************************************************** //** main code //***************************************************** //例化FIFO模块 fifo u_fifo( .wrclk ( sys_clk ), // 写时钟 .wrreq ( wrreq ), // 写请求 .data ( data ), // 写入FIFO的数据 .wrempty ( wrempty ), // 写空信号 .wrfull ( wrfull ), // 写满信号 .wrusedw ( wrusedw ), // 写侧数据量 .rdclk ( sys_clk ), // 读时钟 .rdreq ( rdreq ), // 读请求 .q ( q ), // 从FIFO输出的数据 .rdempty ( rdempty ), // 读空信号 .rdfull ( rdfull ), // 读满信号 .rdusedw ( rdusedw ) // 读侧数据量 ); //例化写FIFO模块 fifo_wr u_fifo_wr( .clk (sys_clk ), // 写时钟 .rst_n (sys_rst_n), // 复位信号 .wrreq (wrreq ), // 写请求 .data (data ), // 写入FIFO的数据 .wrempty (wrempty ), // 写空信号 .wrfull (wrfull ) // 写满信号 ); //例化读FIFO模块 fifo_rd u_fifo_rd( .clk (sys_clk ), // 读时钟 .rst_n (sys_rst_n), // 复位信号 .rdreq (rdreq ), // 读请求 .data (q ), // 从FIFO输出的数据 .rdempty (rdempty ), // 读空信号 .rdfull (rdfull ) // 读满信号 ); endmodule