HITDAQ/FPGA_firmware/q_sys/synthesis/submodules/max10emif_dcfifo.sv
2024-10-11 14:49:54 +02:00

70 lines
1.8 KiB
Systemverilog

// (C) 2001-2019 Intel Corporation. All rights reserved.
// Your use of Intel Corporation's design tools, logic functions and other
// software and tools, and its AMPP partner logic functions, and any output
// files from any of the foregoing (including device programming or simulation
// files), and any associated documentation or information are expressly subject
// to the terms and conditions of the Intel Program License Subscription
// Agreement, Intel FPGA IP License Agreement, or other applicable
// license agreement, including, without limitation, that your use is for the
// sole purpose of programming logic devices manufactured by Intel and sold by
// Intel or its authorized distributors. Please refer to the applicable
// agreement for further details.
`timescale 1 ps / 1 ps
module max10emif_dcfifo #
( parameter
numwords = 8,
width = 24,
widthu = 3
)
(
data,
rdclk,
rdreq,
wrclk,
wrreq,
q,
aclr
);
input [width-1:0] data;
input rdclk;
input rdreq;
input wrclk;
input wrreq;
output [width-1:0] q;
input aclr;
logic [widthu-1:0] rdptr;
logic [widthu-1:0] wrptr;
always_ff @ (posedge wrclk or posedge aclr)
begin
if (aclr)
wrptr <= 0;
else
wrptr <= wrptr + wrreq;
end
always_ff @ (posedge rdclk or posedge aclr)
begin
if (aclr)
rdptr <= 0;
else
rdptr <= rdptr + rdreq;
end
logic [width-1:0] fifo [numwords-1:0];
always_ff @ (posedge wrclk)
fifo [wrptr] <= data;
assign q = fifo[rdptr];
endmodule