URL
https://opencores.org/ocsvn/ha1588/ha1588/trunk
Subversion Repositories ha1588
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 20 to Rev 21
- ↔ Reverse comparison
Rev 20 → Rev 21
/ha1588/trunk/rtl/top/ha1588.v
3,7 → 3,7
module ha1588 ( |
input rst,clk, |
input wr_in,rd_in, |
input [ 5:0] addr_in, |
input [ 7:0] addr_in, |
input [31:0] data_in, |
output [31:0] data_out, |
|
/ha1588/trunk/rtl/reg/reg.v
4,7 → 4,7
// generic bus interface |
input rst,clk, |
input wr_in,rd_in, |
input [ 5:0] addr_in, |
input [ 7:0] addr_in, |
input [31:0] data_in, |
output [31:0] data_out, |
// rtc interface |
60,30 → 60,30
parameter const_58 = 8'h58; |
parameter const_5c = 8'h5C; |
|
wire cs_00 = (addr_in[5:0]==const_00[5:0])? 1'b1: 1'b0; |
wire cs_04 = (addr_in[5:0]==const_04[5:0])? 1'b1: 1'b0; |
wire cs_08 = (addr_in[5:0]==const_08[5:0])? 1'b1: 1'b0; |
wire cs_0c = (addr_in[5:0]==const_0c[5:0])? 1'b1: 1'b0; |
wire cs_10 = (addr_in[5:0]==const_10[5:0])? 1'b1: 1'b0; |
wire cs_14 = (addr_in[5:0]==const_14[5:0])? 1'b1: 1'b0; |
wire cs_18 = (addr_in[5:0]==const_18[5:0])? 1'b1: 1'b0; |
wire cs_1c = (addr_in[5:0]==const_1c[5:0])? 1'b1: 1'b0; |
wire cs_20 = (addr_in[5:0]==const_20[5:0])? 1'b1: 1'b0; |
wire cs_24 = (addr_in[5:0]==const_24[5:0])? 1'b1: 1'b0; |
wire cs_28 = (addr_in[5:0]==const_28[5:0])? 1'b1: 1'b0; |
wire cs_2c = (addr_in[5:0]==const_2c[5:0])? 1'b1: 1'b0; |
wire cs_30 = (addr_in[5:0]==const_30[5:0])? 1'b1: 1'b0; |
wire cs_34 = (addr_in[5:0]==const_34[5:0])? 1'b1: 1'b0; |
wire cs_38 = (addr_in[5:0]==const_38[5:0])? 1'b1: 1'b0; |
wire cs_3c = (addr_in[5:0]==const_3c[5:0])? 1'b1: 1'b0; |
wire cs_40 = (addr_in[5:0]==const_40[5:0])? 1'b1: 1'b0; |
wire cs_44 = (addr_in[5:0]==const_44[5:0])? 1'b1: 1'b0; |
wire cs_48 = (addr_in[5:0]==const_48[5:0])? 1'b1: 1'b0; |
wire cs_4c = (addr_in[5:0]==const_4c[5:0])? 1'b1: 1'b0; |
wire cs_50 = (addr_in[5:0]==const_50[5:0])? 1'b1: 1'b0; |
wire cs_54 = (addr_in[5:0]==const_54[5:0])? 1'b1: 1'b0; |
wire cs_58 = (addr_in[5:0]==const_58[5:0])? 1'b1: 1'b0; |
wire cs_5c = (addr_in[5:0]==const_5c[5:0])? 1'b1: 1'b0; |
wire cs_00 = (addr_in[7:2]==const_00[7:2])? 1'b1: 1'b0; |
wire cs_04 = (addr_in[7:2]==const_04[7:2])? 1'b1: 1'b0; |
wire cs_08 = (addr_in[7:2]==const_08[7:2])? 1'b1: 1'b0; |
wire cs_0c = (addr_in[7:2]==const_0c[7:2])? 1'b1: 1'b0; |
wire cs_10 = (addr_in[7:2]==const_10[7:2])? 1'b1: 1'b0; |
wire cs_14 = (addr_in[7:2]==const_14[7:2])? 1'b1: 1'b0; |
wire cs_18 = (addr_in[7:2]==const_18[7:2])? 1'b1: 1'b0; |
wire cs_1c = (addr_in[7:2]==const_1c[7:2])? 1'b1: 1'b0; |
wire cs_20 = (addr_in[7:2]==const_20[7:2])? 1'b1: 1'b0; |
wire cs_24 = (addr_in[7:2]==const_24[7:2])? 1'b1: 1'b0; |
wire cs_28 = (addr_in[7:2]==const_28[7:2])? 1'b1: 1'b0; |
wire cs_2c = (addr_in[7:2]==const_2c[7:2])? 1'b1: 1'b0; |
wire cs_30 = (addr_in[7:2]==const_30[7:2])? 1'b1: 1'b0; |
wire cs_34 = (addr_in[7:2]==const_34[7:2])? 1'b1: 1'b0; |
wire cs_38 = (addr_in[7:2]==const_38[7:2])? 1'b1: 1'b0; |
wire cs_3c = (addr_in[7:2]==const_3c[7:2])? 1'b1: 1'b0; |
wire cs_40 = (addr_in[7:2]==const_40[7:2])? 1'b1: 1'b0; |
wire cs_44 = (addr_in[7:2]==const_44[7:2])? 1'b1: 1'b0; |
wire cs_48 = (addr_in[7:2]==const_48[7:2])? 1'b1: 1'b0; |
wire cs_4c = (addr_in[7:2]==const_4c[7:2])? 1'b1: 1'b0; |
wire cs_50 = (addr_in[7:2]==const_50[7:2])? 1'b1: 1'b0; |
wire cs_54 = (addr_in[7:2]==const_54[7:2])? 1'b1: 1'b0; |
wire cs_58 = (addr_in[7:2]==const_58[7:2])? 1'b1: 1'b0; |
wire cs_5c = (addr_in[7:2]==const_5c[7:2])? 1'b1: 1'b0; |
|
reg [31:0] reg_00; // ctrl 12 bit |
reg [31:0] reg_04; // qsta 16 bit |
/ha1588/trunk/sim/top/sim.sh
0,0 → 1,43
quit -sim |
vlib work |
vdel -lib work -all |
vlib work |
|
# compile vendor independent files |
vlog -work work ../../rtl/top/ha1588.v +initreg+0 |
vlog -work work ../../rtl/reg/reg.v +initreg+0 |
vlog -work work ../../rtl/rtc/rtc.v +initreg+0 |
vlog -work work ../../rtl/tsu/tsu.v +initreg+0 |
vlog -work work ../../rtl/tsu/ptp_queue.v +initreg+0 |
vlog -work work ../../rtl/tsu/ptp_parser.v +initreg+0 |
|
# compile vendor dependent files |
vlog -work work altera_mf.v |
|
# compile testbench files |
vlog -work work -sv ha1588_tb.v |
|
# compile driver bfm files |
vlog -work work -sv ptp_drv_bfm/ptp_drv_bfm.v |
|
# compile driver bfm files |
# Sytemverilog DPI steps to combine sv and c |
# step 1: generate dpiheader.h |
vlog -work work -sv -dpiheader dpiheader.h ptp_drv_bfm/ptp_drv_bfm.v |
## step 2: generate ptp_drv_bfm.obj |
#vsim -dpiexportobj ptp_drv_bfm_sv ptp_drv_bfm |
# step 3: generate ptp_drv_bfm_c.so |
gcc -c -I $::env(MODEL_TECH)/../include ptp_drv_bfm/ptp_drv_bfm.c |
# step 4: generate ptp_drv_bfm_c.o |
gcc -shared -Bsymbolic -o ptp_drv_bfm_c.so ptp_drv_bfm.o |
|
vsim -novopt \ |
-sv_lib ptp_drv_bfm_c \ |
-t ps \ |
ha1588_tb |
|
log -r */* |
radix -hexadecimal |
do wave.do |
|
run 10000ns |
/ha1588/trunk/sim/top/ptp_drv_bfm/ptp_drv_bfm.c
0,0 → 1,28
#include <stdio.h> |
|
#include "svdpi.h" |
#include "../dpiheader.h" |
int ptp_drv_bfm_c(double fw_delay) |
{ |
int cpu_addr_i; |
int cpu_data_i; |
int cpu_data_o; |
|
int t; |
for (t=0; t<=4000; t=t+4) |
{ |
|
cpu_addr_i = 0x00000000+t; |
cpu_data_i = t+0; |
cpu_wr(cpu_addr_i, cpu_data_i); |
|
//cpu_hd(50); |
|
cpu_addr_i = 0x00000000+t; |
cpu_rd(cpu_addr_i, &cpu_data_o); |
|
//cpu_hd(100); |
} |
|
return(0); /* Return success (required by tasks) */ |
} |
/ha1588/trunk/sim/top/ptp_drv_bfm/ptp_drv_bfm.v
0,0 → 1,79
`timescale 1ns/1ns |
|
module ptp_drv_bfm_sv |
( |
input up_clk, |
output up_wr, |
output up_rd, |
output [ 7:0] up_addr, |
output [31:0] up_data_wr, |
input [31:0] up_data_rd |
); |
|
import "DPI-C" context task ptp_drv_bfm_c |
( |
input real fw_delay |
); |
|
reg [ 7:0] up_addr_o; |
reg [31:0] up_data_o; |
wire [31:0] up_data_i; |
reg up_wr_o; |
reg up_rd_o; |
|
export "DPI-C" task cpu_wr; |
task cpu_wr(input int addr, input int data); |
integer i; |
//$display("wr %08x %08x", addr, data); |
for (i=0; i<1; i=i+1) @(posedge up_clk); |
up_addr_o = addr; |
up_data_o = data; |
up_wr_o = 1'b1; |
for (i=0; i<1; i=i+1) @(posedge up_clk); |
up_addr_o = addr; |
up_data_o = data; |
up_wr_o = 1'b0; |
for (i=0; i<1; i=i+1) @(posedge up_clk); |
endtask |
|
export "DPI-C" task cpu_rd; |
task cpu_rd(input int addr, output int data); |
integer i; |
for (i=0; i<2; i=i+1) @(posedge up_clk); |
up_addr_o = addr; |
up_rd_o = 1'b1; |
for (i=0; i<1; i=i+1) @(posedge up_clk); |
up_addr_o = addr; |
up_rd_o = 1'b0; |
for (i=0; i<2; i=i+1) @(posedge up_clk); |
//$display("rd %08x %08x", addr, data); |
endtask |
|
export "DPI-C" task cpu_hd; |
task cpu_hd(input int t); |
integer i; |
//$display("#%d",t); |
for (i=0; i<=t; i=i+1) @(posedge up_clk); |
endtask |
|
assign up_wr = up_wr_o; |
assign up_rd = up_rd_o; |
assign up_addr = up_addr_o; |
assign up_data_wr = up_data_o; |
assign up_data_i = up_data_rd; |
|
|
|
// start cpu bfm C model |
reg up_start; |
initial begin |
up_wr_o = 1'b0; |
up_rd_o = 1'b0; |
up_addr_o = 'd0; |
up_data_o = 'd0; |
|
@(posedge up_start); |
#100 ptp_drv_bfm_c(5); |
end |
|
endmodule |
/ha1588/trunk/sim/top/wave.do
0,0 → 1,42
onerror {resume} |
quietly WaveActivateNextPane {} 0 |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -format Logic /ha1588_tb/up_clk |
add wave -noupdate -format Logic /ha1588_tb/up_wr |
add wave -noupdate -format Logic /ha1588_tb/up_rd |
add wave -noupdate -format Literal /ha1588_tb/up_addr |
add wave -noupdate -format Literal /ha1588_tb/up_data_wr |
add wave -noupdate -format Literal /ha1588_tb/up_data_rd |
add wave -noupdate -format Logic /ha1588_tb/rtc_clk |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -format Literal /ha1588_tb/PTP_HA_DUT/u_rgs/addr_in |
add wave -noupdate -format Logic /ha1588_tb/PTP_HA_DUT/u_rgs/wr_in |
add wave -noupdate -format Logic /ha1588_tb/PTP_HA_DUT/u_rgs/rd_in |
add wave -noupdate -format Literal /ha1588_tb/PTP_HA_DUT/u_rgs/data_in |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -format Logic /ha1588_tb/PTP_HA_DUT/u_rgs/cs_00 |
add wave -noupdate -format Literal /ha1588_tb/PTP_HA_DUT/u_rgs/reg_00 |
add wave -noupdate -format Literal /ha1588_tb/PTP_HA_DUT/u_rgs/data_out_reg |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -format Literal /ha1588_tb/PTP_HA_DUT/u_rtc/time_reg_ns |
add wave -noupdate -format Logic /ha1588_tb/PTP_HA_DUT/u_rtc/time_acc_48s_inc |
add wave -noupdate -format Literal /ha1588_tb/PTP_HA_DUT/u_rtc/time_reg_sec |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -divider {New Divider} |
TreeUpdate [SetDefaultTree] |
WaveRestoreCursors {{Cursor 1} {135271 ps} 0} |
configure wave -namecolwidth 222 |
configure wave -valuecolwidth 100 |
configure wave -justifyvalue left |
configure wave -signalnamewidth 0 |
configure wave -snapdistance 10 |
configure wave -datasetprefix 0 |
configure wave -rowmargin 4 |
configure wave -childrowmargin 2 |
configure wave -gridoffset 0 |
configure wave -gridperiod 1 |
configure wave -griddelta 40 |
configure wave -timeline 0 |
configure wave -timelineunits ns |
update |
WaveRestoreZoom {0 ps} {1136433 ps} |
/ha1588/trunk/sim/top/ha1588_tb.v
0,0 → 1,59
`timescale 1ns/1ns |
|
module ha1588_tb (); |
|
reg up_clk; |
wire up_wr, up_rd; |
wire [ 7:0] up_addr; |
wire [31:0] up_data_wr, up_data_rd; |
initial begin |
up_clk = 1'b0; |
forever #5 up_clk = !up_clk; |
end |
|
reg rtc_clk; |
initial begin |
rtc_clk = 1'b0; |
forever #4 rtc_clk = !rtc_clk; |
end |
|
reg rst; |
initial begin |
rst = 1'b1; |
#10 rst = 1'b0; |
end |
|
ptp_drv_bfm_sv PTP_DRV_BFM ( |
.up_clk(up_clk), |
.up_wr(up_wr), |
.up_rd(up_rd), |
.up_addr(up_addr), |
.up_data_wr(up_data_wr), |
.up_data_rd(up_data_rd) |
); |
|
ha1588 PTP_HA_DUT( |
.rst(rst), |
.clk(up_clk), |
.wr_in(up_wr), |
.rd_in(up_rd), |
.addr_in(up_addr), |
.data_in(up_data_wr), |
.data_out(up_data_rd), |
|
.rtc_clk(rtc_clk), |
|
.rx_gmii_clk(), |
.rx_gmii_ctrl(), |
.rx_gmii_data(), |
.tx_gmii_clk(), |
.tx_gmii_ctrl(), |
.tx_gmii_data() |
); |
|
initial begin |
ha1588_tb.PTP_DRV_BFM.up_start = 1; |
#100000000 $stop; |
end |
|
endmodule |
/ha1588/trunk/sim/top/altera_mf.v
0,0 → 1,2844
// Copyright (C) 1991-2011 Altera Corporation |
// Your use of Altera 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 Altera Program License |
// Subscription Agreement, Altera MegaCore Function License |
// Agreement, or other applicable license agreement, including, |
// without limitation, that your use is for the sole purpose of |
// programming logic devices manufactured by Altera and sold by |
// Altera or its authorized distributors. Please refer to the |
// applicable agreement for further details. |
// Quartus II 10.1 Build 197 11/29/2010 |
|
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : ALTERA_MF_HINT_EVALUATION |
// |
// Description : Common function to grep the value of altera specific parameters |
// within the lpm_hint parameter. |
// |
// Limitation : No error checking to check whether the content of the lpm_hint |
// is valid or not. |
// |
// Results expected: If the target parameter found, return the value of the parameter. |
// Otherwise, return empty string. |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module ALTERA_MF_HINT_EVALUATION; |
|
// FUNCTON DECLARATION |
|
// This function will search through the string (given string) to look for a match for the |
// a given parameter(compare_param_name). It will return the value for the given parameter. |
function [8*200:1] GET_PARAMETER_VALUE; |
input [8*200:1] given_string; // string to be searched |
input [8*50:1] compare_param_name; // parameter name to be looking for in the given_string. |
integer param_value_char_count; // to indicate current character count in the param_value |
integer param_name_char_count; // to indicate current character count in the param_name |
integer white_space_count; |
|
reg extract_param_value; // if 1 mean extracting parameters value from given string |
reg extract_param_name; // if 1 mean extracting parameters name from given string |
reg param_found; // to indicate whether compare_param_name have been found in the given_string |
reg include_white_space; // if 1, include white space in the parameter value |
|
reg [8*200:1] reg_string; // to store the value of the given string |
reg [8*50:1] param_name; // to store parameter name |
reg [8*20:1] param_value; // to store parameter value |
reg [8:1] tmp; // to get the value of the current byte |
begin |
reg_string = given_string; |
param_value_char_count = 0; |
param_name_char_count =0; |
extract_param_value = 1; |
extract_param_name = 0; |
param_found = 0; |
include_white_space = 0; |
white_space_count = 0; |
|
tmp = reg_string[8:1]; |
|
// checking every bytes of the reg_string from right to left. |
while ((tmp != 0 ) && (param_found != 1)) |
begin |
tmp = reg_string[8:1]; |
|
//if tmp != ' ' or should include white space (trailing white space are ignored) |
if((tmp != 32) || (include_white_space == 1)) |
begin |
if(tmp == 32) |
begin |
white_space_count = 1; |
end |
else if(tmp == 61) // if tmp = '=' |
begin |
extract_param_value = 0; |
extract_param_name = 1; // subsequent bytes should be part of param_name |
include_white_space = 0; // ignore the white space (if any) between param_name and '=' |
white_space_count = 0; |
param_value = param_value >> (8 * (20 - param_value_char_count)); |
param_value_char_count = 0; |
end |
else if (tmp == 44) // if tmp = ',' |
begin |
extract_param_value = 1; // subsequent bytes should be part of param_value |
extract_param_name = 0; |
param_name = param_name >> (8 * (50 - param_name_char_count)); |
param_name_char_count = 0; |
if(param_name == compare_param_name) |
param_found = 1; // the compare_param_name have been found in the reg_string |
end |
else |
begin |
if(extract_param_value == 1) |
begin |
param_value_char_count = param_value_char_count + white_space_count + 1; |
include_white_space = 1; |
if(white_space_count > 0) |
begin |
param_value = {8'b100000, param_value[20*8:9]}; |
white_space_count = 0; |
end |
param_value = {tmp, param_value[20*8:9]}; |
end |
else if(extract_param_name == 1) |
begin |
param_name = {tmp, param_name[50*8:9]}; |
param_name_char_count = param_name_char_count + 1; |
end |
end |
end |
reg_string = reg_string >> 8; // shift 1 byte to the right |
end |
|
// for the case whether param_name is the left most part of the reg_string |
if(extract_param_name == 1) |
begin |
param_name = param_name >> (8 * (50 - param_name_char_count)); |
|
if(param_name == compare_param_name) |
param_found = 1; |
end |
|
if (param_found == 1) |
GET_PARAMETER_VALUE = param_value; // return the value of the parameter been looking for |
else |
GET_PARAMETER_VALUE = ""; // return empty string if parameter not found |
|
end |
endfunction |
|
endmodule // ALTERA_MF_HINT_EVALUATION |
|
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : ALTERA_DEVICE_FAMILIES |
// |
// Description : Common Altera device families comparison |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module ALTERA_DEVICE_FAMILIES; |
|
function IS_FAMILY_STRATIX; |
input[8*20:1] device; |
reg is_stratix; |
begin |
if ((device == "Stratix") || (device == "STRATIX") || (device == "stratix") || (device == "Yeager") || (device == "YEAGER") || (device == "yeager")) |
is_stratix = 1; |
else |
is_stratix = 0; |
|
IS_FAMILY_STRATIX = is_stratix; |
end |
endfunction //IS_FAMILY_STRATIX |
|
function IS_FAMILY_STRATIXGX; |
input[8*20:1] device; |
reg is_stratixgx; |
begin |
if ((device == "Stratix GX") || (device == "STRATIX GX") || (device == "stratix gx") || (device == "Stratix-GX") || (device == "STRATIX-GX") || (device == "stratix-gx") || (device == "StratixGX") || (device == "STRATIXGX") || (device == "stratixgx") || (device == "Aurora") || (device == "AURORA") || (device == "aurora")) |
is_stratixgx = 1; |
else |
is_stratixgx = 0; |
|
IS_FAMILY_STRATIXGX = is_stratixgx; |
end |
endfunction //IS_FAMILY_STRATIXGX |
|
function IS_FAMILY_CYCLONE; |
input[8*20:1] device; |
reg is_cyclone; |
begin |
if ((device == "Cyclone") || (device == "CYCLONE") || (device == "cyclone") || (device == "ACEX2K") || (device == "acex2k") || (device == "ACEX 2K") || (device == "acex 2k") || (device == "Tornado") || (device == "TORNADO") || (device == "tornado")) |
is_cyclone = 1; |
else |
is_cyclone = 0; |
|
IS_FAMILY_CYCLONE = is_cyclone; |
end |
endfunction //IS_FAMILY_CYCLONE |
|
function IS_FAMILY_MAXII; |
input[8*20:1] device; |
reg is_maxii; |
begin |
if ((device == "MAX II") || (device == "max ii") || (device == "MAXII") || (device == "maxii") || (device == "Tsunami") || (device == "TSUNAMI") || (device == "tsunami")) |
is_maxii = 1; |
else |
is_maxii = 0; |
|
IS_FAMILY_MAXII = is_maxii; |
end |
endfunction //IS_FAMILY_MAXII |
|
function IS_FAMILY_STRATIXII; |
input[8*20:1] device; |
reg is_stratixii; |
begin |
if ((device == "Stratix II") || (device == "STRATIX II") || (device == "stratix ii") || (device == "StratixII") || (device == "STRATIXII") || (device == "stratixii") || (device == "Armstrong") || (device == "ARMSTRONG") || (device == "armstrong")) |
is_stratixii = 1; |
else |
is_stratixii = 0; |
|
IS_FAMILY_STRATIXII = is_stratixii; |
end |
endfunction //IS_FAMILY_STRATIXII |
|
function IS_FAMILY_STRATIXIIGX; |
input[8*20:1] device; |
reg is_stratixiigx; |
begin |
if ((device == "Stratix II GX") || (device == "STRATIX II GX") || (device == "stratix ii gx") || (device == "StratixIIGX") || (device == "STRATIXIIGX") || (device == "stratixiigx")) |
is_stratixiigx = 1; |
else |
is_stratixiigx = 0; |
|
IS_FAMILY_STRATIXIIGX = is_stratixiigx; |
end |
endfunction //IS_FAMILY_STRATIXIIGX |
|
function IS_FAMILY_ARRIAGX; |
input[8*20:1] device; |
reg is_arriagx; |
begin |
if ((device == "Arria GX") || (device == "ARRIA GX") || (device == "arria gx") || (device == "ArriaGX") || (device == "ARRIAGX") || (device == "arriagx") || (device == "Stratix II GX Lite") || (device == "STRATIX II GX LITE") || (device == "stratix ii gx lite") || (device == "StratixIIGXLite") || (device == "STRATIXIIGXLITE") || (device == "stratixiigxlite")) |
is_arriagx = 1; |
else |
is_arriagx = 0; |
|
IS_FAMILY_ARRIAGX = is_arriagx; |
end |
endfunction //IS_FAMILY_ARRIAGX |
|
function IS_FAMILY_CYCLONEII; |
input[8*20:1] device; |
reg is_cycloneii; |
begin |
if ((device == "Cyclone II") || (device == "CYCLONE II") || (device == "cyclone ii") || (device == "Cycloneii") || (device == "CYCLONEII") || (device == "cycloneii") || (device == "Magellan") || (device == "MAGELLAN") || (device == "magellan")) |
is_cycloneii = 1; |
else |
is_cycloneii = 0; |
|
IS_FAMILY_CYCLONEII = is_cycloneii; |
end |
endfunction //IS_FAMILY_CYCLONEII |
|
function IS_FAMILY_HARDCOPYII; |
input[8*20:1] device; |
reg is_hardcopyii; |
begin |
if ((device == "HardCopy II") || (device == "HARDCOPY II") || (device == "hardcopy ii") || (device == "HardCopyII") || (device == "HARDCOPYII") || (device == "hardcopyii") || (device == "Fusion") || (device == "FUSION") || (device == "fusion")) |
is_hardcopyii = 1; |
else |
is_hardcopyii = 0; |
|
IS_FAMILY_HARDCOPYII = is_hardcopyii; |
end |
endfunction //IS_FAMILY_HARDCOPYII |
|
function IS_FAMILY_STRATIXIII; |
input[8*20:1] device; |
reg is_stratixiii; |
begin |
if ((device == "Stratix III") || (device == "STRATIX III") || (device == "stratix iii") || (device == "StratixIII") || (device == "STRATIXIII") || (device == "stratixiii") || (device == "Titan") || (device == "TITAN") || (device == "titan") || (device == "SIII") || (device == "siii")) |
is_stratixiii = 1; |
else |
is_stratixiii = 0; |
|
IS_FAMILY_STRATIXIII = is_stratixiii; |
end |
endfunction //IS_FAMILY_STRATIXIII |
|
function IS_FAMILY_CYCLONEIII; |
input[8*20:1] device; |
reg is_cycloneiii; |
begin |
if ((device == "Cyclone III") || (device == "CYCLONE III") || (device == "cyclone iii") || (device == "CycloneIII") || (device == "CYCLONEIII") || (device == "cycloneiii") || (device == "Barracuda") || (device == "BARRACUDA") || (device == "barracuda") || (device == "Cuda") || (device == "CUDA") || (device == "cuda") || (device == "CIII") || (device == "ciii")) |
is_cycloneiii = 1; |
else |
is_cycloneiii = 0; |
|
IS_FAMILY_CYCLONEIII = is_cycloneiii; |
end |
endfunction //IS_FAMILY_CYCLONEIII |
|
function IS_FAMILY_STRATIXIV; |
input[8*20:1] device; |
reg is_stratixiv; |
begin |
if ((device == "Stratix IV") || (device == "STRATIX IV") || (device == "stratix iv") || (device == "TGX") || (device == "tgx") || (device == "StratixIV") || (device == "STRATIXIV") || (device == "stratixiv") || (device == "Stratix IV (GT)") || (device == "STRATIX IV (GT)") || (device == "stratix iv (gt)") || (device == "Stratix IV (GX)") || (device == "STRATIX IV (GX)") || (device == "stratix iv (gx)") || (device == "Stratix IV (E)") || (device == "STRATIX IV (E)") || (device == "stratix iv (e)") || (device == "StratixIV(GT)") || (device == "STRATIXIV(GT)") || (device == "stratixiv(gt)") || (device == "StratixIV(GX)") || (device == "STRATIXIV(GX)") || (device == "stratixiv(gx)") || (device == "StratixIV(E)") || (device == "STRATIXIV(E)") || (device == "stratixiv(e)") || (device == "StratixIIIGX") || (device == "STRATIXIIIGX") || (device == "stratixiiigx") || (device == "Stratix IV (GT/GX/E)") || (device == "STRATIX IV (GT/GX/E)") || (device == "stratix iv (gt/gx/e)") || (device == "Stratix IV (GT/E/GX)") || (device == "STRATIX IV (GT/E/GX)") || (device == "stratix iv (gt/e/gx)") || (device == "Stratix IV (E/GT/GX)") || (device == "STRATIX IV (E/GT/GX)") || (device == "stratix iv (e/gt/gx)") || (device == "Stratix IV (E/GX/GT)") || (device == "STRATIX IV (E/GX/GT)") || (device == "stratix iv (e/gx/gt)") || (device == "StratixIV(GT/GX/E)") || (device == "STRATIXIV(GT/GX/E)") || (device == "stratixiv(gt/gx/e)") || (device == "StratixIV(GT/E/GX)") || (device == "STRATIXIV(GT/E/GX)") || (device == "stratixiv(gt/e/gx)") || (device == "StratixIV(E/GX/GT)") || (device == "STRATIXIV(E/GX/GT)") || (device == "stratixiv(e/gx/gt)") || (device == "StratixIV(E/GT/GX)") || (device == "STRATIXIV(E/GT/GX)") || (device == "stratixiv(e/gt/gx)") || (device == "Stratix IV (GX/E)") || (device == "STRATIX IV (GX/E)") || (device == "stratix iv (gx/e)") || (device == "StratixIV(GX/E)") || (device == "STRATIXIV(GX/E)") || (device == "stratixiv(gx/e)")) |
is_stratixiv = 1; |
else |
is_stratixiv = 0; |
|
IS_FAMILY_STRATIXIV = is_stratixiv; |
end |
endfunction //IS_FAMILY_STRATIXIV |
|
function IS_FAMILY_ARRIAIIGX; |
input[8*20:1] device; |
reg is_arriaiigx; |
begin |
if ((device == "Arria II GX") || (device == "ARRIA II GX") || (device == "arria ii gx") || (device == "ArriaIIGX") || (device == "ARRIAIIGX") || (device == "arriaiigx") || (device == "Arria IIGX") || (device == "ARRIA IIGX") || (device == "arria iigx") || (device == "ArriaII GX") || (device == "ARRIAII GX") || (device == "arriaii gx") || (device == "Arria II") || (device == "ARRIA II") || (device == "arria ii") || (device == "ArriaII") || (device == "ARRIAII") || (device == "arriaii") || (device == "Arria II (GX/E)") || (device == "ARRIA II (GX/E)") || (device == "arria ii (gx/e)") || (device == "ArriaII(GX/E)") || (device == "ARRIAII(GX/E)") || (device == "arriaii(gx/e)") || (device == "PIRANHA") || (device == "piranha")) |
is_arriaiigx = 1; |
else |
is_arriaiigx = 0; |
|
IS_FAMILY_ARRIAIIGX = is_arriaiigx; |
end |
endfunction //IS_FAMILY_ARRIAIIGX |
|
function IS_FAMILY_HARDCOPYIII; |
input[8*20:1] device; |
reg is_hardcopyiii; |
begin |
if ((device == "HardCopy III") || (device == "HARDCOPY III") || (device == "hardcopy iii") || (device == "HardCopyIII") || (device == "HARDCOPYIII") || (device == "hardcopyiii") || (device == "HCX") || (device == "hcx")) |
is_hardcopyiii = 1; |
else |
is_hardcopyiii = 0; |
|
IS_FAMILY_HARDCOPYIII = is_hardcopyiii; |
end |
endfunction //IS_FAMILY_HARDCOPYIII |
|
function IS_FAMILY_HARDCOPYIV; |
input[8*20:1] device; |
reg is_hardcopyiv; |
begin |
if ((device == "HardCopy IV") || (device == "HARDCOPY IV") || (device == "hardcopy iv") || (device == "HardCopyIV") || (device == "HARDCOPYIV") || (device == "hardcopyiv") || (device == "HardCopy IV (GX)") || (device == "HARDCOPY IV (GX)") || (device == "hardcopy iv (gx)") || (device == "HardCopy IV (E)") || (device == "HARDCOPY IV (E)") || (device == "hardcopy iv (e)") || (device == "HardCopyIV(GX)") || (device == "HARDCOPYIV(GX)") || (device == "hardcopyiv(gx)") || (device == "HardCopyIV(E)") || (device == "HARDCOPYIV(E)") || (device == "hardcopyiv(e)") || (device == "HCXIV") || (device == "hcxiv") || (device == "HardCopy IV (GX/E)") || (device == "HARDCOPY IV (GX/E)") || (device == "hardcopy iv (gx/e)") || (device == "HardCopy IV (E/GX)") || (device == "HARDCOPY IV (E/GX)") || (device == "hardcopy iv (e/gx)") || (device == "HardCopyIV(GX/E)") || (device == "HARDCOPYIV(GX/E)") || (device == "hardcopyiv(gx/e)") || (device == "HardCopyIV(E/GX)") || (device == "HARDCOPYIV(E/GX)") || (device == "hardcopyiv(e/gx)")) |
is_hardcopyiv = 1; |
else |
is_hardcopyiv = 0; |
|
IS_FAMILY_HARDCOPYIV = is_hardcopyiv; |
end |
endfunction //IS_FAMILY_HARDCOPYIV |
|
function IS_FAMILY_CYCLONEIIILS; |
input[8*20:1] device; |
reg is_cycloneiiils; |
begin |
if ((device == "Cyclone III LS") || (device == "CYCLONE III LS") || (device == "cyclone iii ls") || (device == "CycloneIIILS") || (device == "CYCLONEIIILS") || (device == "cycloneiiils") || (device == "Cyclone III LPS") || (device == "CYCLONE III LPS") || (device == "cyclone iii lps") || (device == "Cyclone LPS") || (device == "CYCLONE LPS") || (device == "cyclone lps") || (device == "CycloneLPS") || (device == "CYCLONELPS") || (device == "cyclonelps") || (device == "Tarpon") || (device == "TARPON") || (device == "tarpon") || (device == "Cyclone IIIE") || (device == "CYCLONE IIIE") || (device == "cyclone iiie")) |
is_cycloneiiils = 1; |
else |
is_cycloneiiils = 0; |
|
IS_FAMILY_CYCLONEIIILS = is_cycloneiiils; |
end |
endfunction //IS_FAMILY_CYCLONEIIILS |
|
function IS_FAMILY_CYCLONEIVGX; |
input[8*20:1] device; |
reg is_cycloneivgx; |
begin |
if ((device == "Cyclone IV GX") || (device == "CYCLONE IV GX") || (device == "cyclone iv gx") || (device == "Cyclone IVGX") || (device == "CYCLONE IVGX") || (device == "cyclone ivgx") || (device == "CycloneIV GX") || (device == "CYCLONEIV GX") || (device == "cycloneiv gx") || (device == "CycloneIVGX") || (device == "CYCLONEIVGX") || (device == "cycloneivgx") || (device == "Cyclone IV") || (device == "CYCLONE IV") || (device == "cyclone iv") || (device == "CycloneIV") || (device == "CYCLONEIV") || (device == "cycloneiv") || (device == "Cyclone IV (GX)") || (device == "CYCLONE IV (GX)") || (device == "cyclone iv (gx)") || (device == "CycloneIV(GX)") || (device == "CYCLONEIV(GX)") || (device == "cycloneiv(gx)") || (device == "Cyclone III GX") || (device == "CYCLONE III GX") || (device == "cyclone iii gx") || (device == "CycloneIII GX") || (device == "CYCLONEIII GX") || (device == "cycloneiii gx") || (device == "Cyclone IIIGX") || (device == "CYCLONE IIIGX") || (device == "cyclone iiigx") || (device == "CycloneIIIGX") || (device == "CYCLONEIIIGX") || (device == "cycloneiiigx") || (device == "Cyclone III GL") || (device == "CYCLONE III GL") || (device == "cyclone iii gl") || (device == "CycloneIII GL") || (device == "CYCLONEIII GL") || (device == "cycloneiii gl") || (device == "Cyclone IIIGL") || (device == "CYCLONE IIIGL") || (device == "cyclone iiigl") || (device == "CycloneIIIGL") || (device == "CYCLONEIIIGL") || (device == "cycloneiiigl") || (device == "Stingray") || (device == "STINGRAY") || (device == "stingray")) |
is_cycloneivgx = 1; |
else |
is_cycloneivgx = 0; |
|
IS_FAMILY_CYCLONEIVGX = is_cycloneivgx; |
end |
endfunction //IS_FAMILY_CYCLONEIVGX |
|
function IS_FAMILY_CYCLONEIVE; |
input[8*20:1] device; |
reg is_cycloneive; |
begin |
if ((device == "Cyclone IV E") || (device == "CYCLONE IV E") || (device == "cyclone iv e") || (device == "CycloneIV E") || (device == "CYCLONEIV E") || (device == "cycloneiv e") || (device == "Cyclone IVE") || (device == "CYCLONE IVE") || (device == "cyclone ive") || (device == "CycloneIVE") || (device == "CYCLONEIVE") || (device == "cycloneive")) |
is_cycloneive = 1; |
else |
is_cycloneive = 0; |
|
IS_FAMILY_CYCLONEIVE = is_cycloneive; |
end |
endfunction //IS_FAMILY_CYCLONEIVE |
|
function IS_FAMILY_STRATIXV; |
input[8*20:1] device; |
reg is_stratixv; |
begin |
if ((device == "Stratix V") || (device == "STRATIX V") || (device == "stratix v") || (device == "StratixV") || (device == "STRATIXV") || (device == "stratixv") || (device == "Stratix V (GS)") || (device == "STRATIX V (GS)") || (device == "stratix v (gs)") || (device == "StratixV(GS)") || (device == "STRATIXV(GS)") || (device == "stratixv(gs)") || (device == "Stratix V (GX)") || (device == "STRATIX V (GX)") || (device == "stratix v (gx)") || (device == "StratixV(GX)") || (device == "STRATIXV(GX)") || (device == "stratixv(gx)") || (device == "Stratix V (GS/GX)") || (device == "STRATIX V (GS/GX)") || (device == "stratix v (gs/gx)") || (device == "StratixV(GS/GX)") || (device == "STRATIXV(GS/GX)") || (device == "stratixv(gs/gx)") || (device == "Stratix V (GX/GS)") || (device == "STRATIX V (GX/GS)") || (device == "stratix v (gx/gs)") || (device == "StratixV(GX/GS)") || (device == "STRATIXV(GX/GS)") || (device == "stratixv(gx/gs)")) |
is_stratixv = 1; |
else |
is_stratixv = 0; |
|
IS_FAMILY_STRATIXV = is_stratixv; |
end |
endfunction //IS_FAMILY_STRATIXV |
|
function IS_FAMILY_ARRIAIIGZ; |
input[8*20:1] device; |
reg is_arriaiigz; |
begin |
if ((device == "Arria II GZ") || (device == "ARRIA II GZ") || (device == "arria ii gz") || (device == "ArriaII GZ") || (device == "ARRIAII GZ") || (device == "arriaii gz") || (device == "Arria IIGZ") || (device == "ARRIA IIGZ") || (device == "arria iigz") || (device == "ArriaIIGZ") || (device == "ARRIAIIGZ") || (device == "arriaiigz")) |
is_arriaiigz = 1; |
else |
is_arriaiigz = 0; |
|
IS_FAMILY_ARRIAIIGZ = is_arriaiigz; |
end |
endfunction //IS_FAMILY_ARRIAIIGZ |
|
function IS_FAMILY_MAXV; |
input[8*20:1] device; |
reg is_maxv; |
begin |
if ((device == "MAX V") || (device == "max v") || (device == "MAXV") || (device == "maxv") || (device == "Jade") || (device == "JADE") || (device == "jade")) |
is_maxv = 1; |
else |
is_maxv = 0; |
|
IS_FAMILY_MAXV = is_maxv; |
end |
endfunction //IS_FAMILY_MAXV |
|
function FEATURE_FAMILY_STRATIXGX; |
input[8*20:1] device; |
reg var_family_stratixgx; |
begin |
if (IS_FAMILY_STRATIXGX(device) ) |
var_family_stratixgx = 1; |
else |
var_family_stratixgx = 0; |
|
FEATURE_FAMILY_STRATIXGX = var_family_stratixgx; |
end |
endfunction //FEATURE_FAMILY_STRATIXGX |
|
function FEATURE_FAMILY_CYCLONE; |
input[8*20:1] device; |
reg var_family_cyclone; |
begin |
if (IS_FAMILY_CYCLONE(device) ) |
var_family_cyclone = 1; |
else |
var_family_cyclone = 0; |
|
FEATURE_FAMILY_CYCLONE = var_family_cyclone; |
end |
endfunction //FEATURE_FAMILY_CYCLONE |
|
function FEATURE_FAMILY_STRATIXIIGX; |
input[8*20:1] device; |
reg var_family_stratixiigx; |
begin |
if (IS_FAMILY_STRATIXIIGX(device) || IS_FAMILY_ARRIAGX(device) ) |
var_family_stratixiigx = 1; |
else |
var_family_stratixiigx = 0; |
|
FEATURE_FAMILY_STRATIXIIGX = var_family_stratixiigx; |
end |
endfunction //FEATURE_FAMILY_STRATIXIIGX |
|
function FEATURE_FAMILY_STRATIXIII; |
input[8*20:1] device; |
reg var_family_stratixiii; |
begin |
if (IS_FAMILY_STRATIXIII(device) || FEATURE_FAMILY_STRATIXIV(device) || IS_FAMILY_HARDCOPYIII(device) ) |
var_family_stratixiii = 1; |
else |
var_family_stratixiii = 0; |
|
FEATURE_FAMILY_STRATIXIII = var_family_stratixiii; |
end |
endfunction //FEATURE_FAMILY_STRATIXIII |
|
function FEATURE_FAMILY_STRATIXV; |
input[8*20:1] device; |
reg var_family_stratixv; |
begin |
if (IS_FAMILY_STRATIXV(device) ) |
var_family_stratixv = 1; |
else |
var_family_stratixv = 0; |
|
FEATURE_FAMILY_STRATIXV = var_family_stratixv; |
end |
endfunction //FEATURE_FAMILY_STRATIXV |
|
function FEATURE_FAMILY_STRATIXII; |
input[8*20:1] device; |
reg var_family_stratixii; |
begin |
if (IS_FAMILY_STRATIXII(device) || IS_FAMILY_HARDCOPYII(device) || FEATURE_FAMILY_STRATIXIIGX(device) || FEATURE_FAMILY_STRATIXIII(device) ) |
var_family_stratixii = 1; |
else |
var_family_stratixii = 0; |
|
FEATURE_FAMILY_STRATIXII = var_family_stratixii; |
end |
endfunction //FEATURE_FAMILY_STRATIXII |
|
function FEATURE_FAMILY_CYCLONEIVGX; |
input[8*20:1] device; |
reg var_family_cycloneivgx; |
begin |
if (IS_FAMILY_CYCLONEIVGX(device) || IS_FAMILY_CYCLONEIVGX(device) ) |
var_family_cycloneivgx = 1; |
else |
var_family_cycloneivgx = 0; |
|
FEATURE_FAMILY_CYCLONEIVGX = var_family_cycloneivgx; |
end |
endfunction //FEATURE_FAMILY_CYCLONEIVGX |
|
function FEATURE_FAMILY_CYCLONEIVE; |
input[8*20:1] device; |
reg var_family_cycloneive; |
begin |
if (IS_FAMILY_CYCLONEIVE(device) ) |
var_family_cycloneive = 1; |
else |
var_family_cycloneive = 0; |
|
FEATURE_FAMILY_CYCLONEIVE = var_family_cycloneive; |
end |
endfunction //FEATURE_FAMILY_CYCLONEIVE |
|
function FEATURE_FAMILY_CYCLONEIII; |
input[8*20:1] device; |
reg var_family_cycloneiii; |
begin |
if (IS_FAMILY_CYCLONEIII(device) || IS_FAMILY_CYCLONEIIILS(device) || FEATURE_FAMILY_CYCLONEIVGX(device) || FEATURE_FAMILY_CYCLONEIVE(device) ) |
var_family_cycloneiii = 1; |
else |
var_family_cycloneiii = 0; |
|
FEATURE_FAMILY_CYCLONEIII = var_family_cycloneiii; |
end |
endfunction //FEATURE_FAMILY_CYCLONEIII |
|
function FEATURE_FAMILY_STRATIX_HC; |
input[8*20:1] device; |
reg var_family_stratix_hc; |
begin |
if ((device == "StratixHC") ) |
var_family_stratix_hc = 1; |
else |
var_family_stratix_hc = 0; |
|
FEATURE_FAMILY_STRATIX_HC = var_family_stratix_hc; |
end |
endfunction //FEATURE_FAMILY_STRATIX_HC |
|
function FEATURE_FAMILY_STRATIX; |
input[8*20:1] device; |
reg var_family_stratix; |
begin |
if (IS_FAMILY_STRATIX(device) || FEATURE_FAMILY_STRATIX_HC(device) || FEATURE_FAMILY_STRATIXGX(device) || FEATURE_FAMILY_CYCLONE(device) || FEATURE_FAMILY_STRATIXII(device) || FEATURE_FAMILY_MAXII(device) || FEATURE_FAMILY_CYCLONEII(device) ) |
var_family_stratix = 1; |
else |
var_family_stratix = 0; |
|
FEATURE_FAMILY_STRATIX = var_family_stratix; |
end |
endfunction //FEATURE_FAMILY_STRATIX |
|
function FEATURE_FAMILY_MAXII; |
input[8*20:1] device; |
reg var_family_maxii; |
begin |
if (IS_FAMILY_MAXII(device) || FEATURE_FAMILY_MAXV(device) ) |
var_family_maxii = 1; |
else |
var_family_maxii = 0; |
|
FEATURE_FAMILY_MAXII = var_family_maxii; |
end |
endfunction //FEATURE_FAMILY_MAXII |
|
function FEATURE_FAMILY_MAXV; |
input[8*20:1] device; |
reg var_family_maxv; |
begin |
if (IS_FAMILY_MAXV(device) ) |
var_family_maxv = 1; |
else |
var_family_maxv = 0; |
|
FEATURE_FAMILY_MAXV = var_family_maxv; |
end |
endfunction //FEATURE_FAMILY_MAXV |
|
function FEATURE_FAMILY_CYCLONEII; |
input[8*20:1] device; |
reg var_family_cycloneii; |
begin |
if (IS_FAMILY_CYCLONEII(device) || FEATURE_FAMILY_CYCLONEIII(device) ) |
var_family_cycloneii = 1; |
else |
var_family_cycloneii = 0; |
|
FEATURE_FAMILY_CYCLONEII = var_family_cycloneii; |
end |
endfunction //FEATURE_FAMILY_CYCLONEII |
|
function FEATURE_FAMILY_STRATIXIV; |
input[8*20:1] device; |
reg var_family_stratixiv; |
begin |
if (IS_FAMILY_STRATIXIV(device) || IS_FAMILY_ARRIAIIGX(device) || IS_FAMILY_HARDCOPYIV(device) || FEATURE_FAMILY_STRATIXV(device) || FEATURE_FAMILY_ARRIAIIGZ(device) ) |
var_family_stratixiv = 1; |
else |
var_family_stratixiv = 0; |
|
FEATURE_FAMILY_STRATIXIV = var_family_stratixiv; |
end |
endfunction //FEATURE_FAMILY_STRATIXIV |
|
function FEATURE_FAMILY_ARRIAIIGZ; |
input[8*20:1] device; |
reg var_family_arriaiigz; |
begin |
if (IS_FAMILY_ARRIAIIGZ(device) ) |
var_family_arriaiigz = 1; |
else |
var_family_arriaiigz = 0; |
|
FEATURE_FAMILY_ARRIAIIGZ = var_family_arriaiigz; |
end |
endfunction //FEATURE_FAMILY_ARRIAIIGZ |
|
function FEATURE_FAMILY_ARRIAIIGX; |
input[8*20:1] device; |
reg var_family_arriaiigx; |
begin |
if (IS_FAMILY_ARRIAIIGX(device) ) |
var_family_arriaiigx = 1; |
else |
var_family_arriaiigx = 0; |
|
FEATURE_FAMILY_ARRIAIIGX = var_family_arriaiigx; |
end |
endfunction //FEATURE_FAMILY_ARRIAIIGX |
|
function FEATURE_FAMILY_BASE_STRATIXII; |
input[8*20:1] device; |
reg var_family_base_stratixii; |
begin |
if (IS_FAMILY_STRATIXII(device) || IS_FAMILY_HARDCOPYII(device) || FEATURE_FAMILY_STRATIXIIGX(device) ) |
var_family_base_stratixii = 1; |
else |
var_family_base_stratixii = 0; |
|
FEATURE_FAMILY_BASE_STRATIXII = var_family_base_stratixii; |
end |
endfunction //FEATURE_FAMILY_BASE_STRATIXII |
|
function FEATURE_FAMILY_BASE_STRATIX; |
input[8*20:1] device; |
reg var_family_base_stratix; |
begin |
if (IS_FAMILY_STRATIX(device) || IS_FAMILY_STRATIXGX(device) ) |
var_family_base_stratix = 1; |
else |
var_family_base_stratix = 0; |
|
FEATURE_FAMILY_BASE_STRATIX = var_family_base_stratix; |
end |
endfunction //FEATURE_FAMILY_BASE_STRATIX |
|
function FEATURE_FAMILY_BASE_CYCLONEII; |
input[8*20:1] device; |
reg var_family_base_cycloneii; |
begin |
if (IS_FAMILY_CYCLONEII(device) ) |
var_family_base_cycloneii = 1; |
else |
var_family_base_cycloneii = 0; |
|
FEATURE_FAMILY_BASE_CYCLONEII = var_family_base_cycloneii; |
end |
endfunction //FEATURE_FAMILY_BASE_CYCLONEII |
|
function FEATURE_FAMILY_BASE_CYCLONE; |
input[8*20:1] device; |
reg var_family_base_cyclone; |
begin |
if (IS_FAMILY_CYCLONE(device) ) |
var_family_base_cyclone = 1; |
else |
var_family_base_cyclone = 0; |
|
FEATURE_FAMILY_BASE_CYCLONE = var_family_base_cyclone; |
end |
endfunction //FEATURE_FAMILY_BASE_CYCLONE |
|
function FEATURE_FAMILY_HAS_STRATIXII_STYLE_RAM; |
input[8*20:1] device; |
reg var_family_has_stratixii_style_ram; |
begin |
if (FEATURE_FAMILY_STRATIXII(device) || FEATURE_FAMILY_CYCLONEII(device) ) |
var_family_has_stratixii_style_ram = 1; |
else |
var_family_has_stratixii_style_ram = 0; |
|
FEATURE_FAMILY_HAS_STRATIXII_STYLE_RAM = var_family_has_stratixii_style_ram; |
end |
endfunction //FEATURE_FAMILY_HAS_STRATIXII_STYLE_RAM |
|
function FEATURE_FAMILY_HAS_STRATIXIII_STYLE_RAM; |
input[8*20:1] device; |
reg var_family_has_stratixiii_style_ram; |
begin |
if (FEATURE_FAMILY_STRATIXIII(device) || FEATURE_FAMILY_CYCLONEIII(device) ) |
var_family_has_stratixiii_style_ram = 1; |
else |
var_family_has_stratixiii_style_ram = 0; |
|
FEATURE_FAMILY_HAS_STRATIXIII_STYLE_RAM = var_family_has_stratixiii_style_ram; |
end |
endfunction //FEATURE_FAMILY_HAS_STRATIXIII_STYLE_RAM |
|
function FEATURE_FAMILY_HAS_STRATIX_STYLE_PLL; |
input[8*20:1] device; |
reg var_family_has_stratix_style_pll; |
begin |
if (FEATURE_FAMILY_CYCLONE(device) || FEATURE_FAMILY_STRATIX_HC(device) || IS_FAMILY_STRATIX(device) || FEATURE_FAMILY_STRATIXGX(device) ) |
var_family_has_stratix_style_pll = 1; |
else |
var_family_has_stratix_style_pll = 0; |
|
FEATURE_FAMILY_HAS_STRATIX_STYLE_PLL = var_family_has_stratix_style_pll; |
end |
endfunction //FEATURE_FAMILY_HAS_STRATIX_STYLE_PLL |
|
function FEATURE_FAMILY_HAS_STRATIXII_STYLE_PLL; |
input[8*20:1] device; |
reg var_family_has_stratixii_style_pll; |
begin |
if (FEATURE_FAMILY_STRATIXII(device) && ! FEATURE_FAMILY_STRATIXIII(device) || FEATURE_FAMILY_CYCLONEII(device) && ! FEATURE_FAMILY_CYCLONEIII(device) ) |
var_family_has_stratixii_style_pll = 1; |
else |
var_family_has_stratixii_style_pll = 0; |
|
FEATURE_FAMILY_HAS_STRATIXII_STYLE_PLL = var_family_has_stratixii_style_pll; |
end |
endfunction //FEATURE_FAMILY_HAS_STRATIXII_STYLE_PLL |
|
function FEATURE_FAMILY_HAS_INVERTED_OUTPUT_DDIO; |
input[8*20:1] device; |
reg var_family_has_inverted_output_ddio; |
begin |
if (FEATURE_FAMILY_CYCLONEII(device) ) |
var_family_has_inverted_output_ddio = 1; |
else |
var_family_has_inverted_output_ddio = 0; |
|
FEATURE_FAMILY_HAS_INVERTED_OUTPUT_DDIO = var_family_has_inverted_output_ddio; |
end |
endfunction //FEATURE_FAMILY_HAS_INVERTED_OUTPUT_DDIO |
|
function IS_VALID_FAMILY; |
input[8*20:1] device; |
reg is_valid; |
begin |
if (((device == "MAX7000B") || (device == "max7000b") || (device == "MAX 7000B") || (device == "max 7000b")) |
|| ((device == "MAX7000AE") || (device == "max7000ae") || (device == "MAX 7000AE") || (device == "max 7000ae")) |
|| ((device == "MAX3000A") || (device == "max3000a") || (device == "MAX 3000A") || (device == "max 3000a")) |
|| ((device == "MAX7000S") || (device == "max7000s") || (device == "MAX 7000S") || (device == "max 7000s")) |
|| ((device == "Stratix") || (device == "STRATIX") || (device == "stratix") || (device == "Yeager") || (device == "YEAGER") || (device == "yeager")) |
|| ((device == "Stratix GX") || (device == "STRATIX GX") || (device == "stratix gx") || (device == "Stratix-GX") || (device == "STRATIX-GX") || (device == "stratix-gx") || (device == "StratixGX") || (device == "STRATIXGX") || (device == "stratixgx") || (device == "Aurora") || (device == "AURORA") || (device == "aurora")) |
|| ((device == "Cyclone") || (device == "CYCLONE") || (device == "cyclone") || (device == "ACEX2K") || (device == "acex2k") || (device == "ACEX 2K") || (device == "acex 2k") || (device == "Tornado") || (device == "TORNADO") || (device == "tornado")) |
|| ((device == "MAX II") || (device == "max ii") || (device == "MAXII") || (device == "maxii") || (device == "Tsunami") || (device == "TSUNAMI") || (device == "tsunami")) |
|| ((device == "Stratix II") || (device == "STRATIX II") || (device == "stratix ii") || (device == "StratixII") || (device == "STRATIXII") || (device == "stratixii") || (device == "Armstrong") || (device == "ARMSTRONG") || (device == "armstrong")) |
|| ((device == "Stratix II GX") || (device == "STRATIX II GX") || (device == "stratix ii gx") || (device == "StratixIIGX") || (device == "STRATIXIIGX") || (device == "stratixiigx")) |
|| ((device == "Arria GX") || (device == "ARRIA GX") || (device == "arria gx") || (device == "ArriaGX") || (device == "ARRIAGX") || (device == "arriagx") || (device == "Stratix II GX Lite") || (device == "STRATIX II GX LITE") || (device == "stratix ii gx lite") || (device == "StratixIIGXLite") || (device == "STRATIXIIGXLITE") || (device == "stratixiigxlite")) |
|| ((device == "Cyclone II") || (device == "CYCLONE II") || (device == "cyclone ii") || (device == "Cycloneii") || (device == "CYCLONEII") || (device == "cycloneii") || (device == "Magellan") || (device == "MAGELLAN") || (device == "magellan")) |
|| ((device == "HardCopy II") || (device == "HARDCOPY II") || (device == "hardcopy ii") || (device == "HardCopyII") || (device == "HARDCOPYII") || (device == "hardcopyii") || (device == "Fusion") || (device == "FUSION") || (device == "fusion")) |
|| ((device == "Stratix III") || (device == "STRATIX III") || (device == "stratix iii") || (device == "StratixIII") || (device == "STRATIXIII") || (device == "stratixiii") || (device == "Titan") || (device == "TITAN") || (device == "titan") || (device == "SIII") || (device == "siii")) |
|| ((device == "Cyclone III") || (device == "CYCLONE III") || (device == "cyclone iii") || (device == "CycloneIII") || (device == "CYCLONEIII") || (device == "cycloneiii") || (device == "Barracuda") || (device == "BARRACUDA") || (device == "barracuda") || (device == "Cuda") || (device == "CUDA") || (device == "cuda") || (device == "CIII") || (device == "ciii")) |
|| ((device == "BS") || (device == "bs")) |
|| ((device == "Stratix IV") || (device == "STRATIX IV") || (device == "stratix iv") || (device == "TGX") || (device == "tgx") || (device == "StratixIV") || (device == "STRATIXIV") || (device == "stratixiv") || (device == "Stratix IV (GT)") || (device == "STRATIX IV (GT)") || (device == "stratix iv (gt)") || (device == "Stratix IV (GX)") || (device == "STRATIX IV (GX)") || (device == "stratix iv (gx)") || (device == "Stratix IV (E)") || (device == "STRATIX IV (E)") || (device == "stratix iv (e)") || (device == "StratixIV(GT)") || (device == "STRATIXIV(GT)") || (device == "stratixiv(gt)") || (device == "StratixIV(GX)") || (device == "STRATIXIV(GX)") || (device == "stratixiv(gx)") || (device == "StratixIV(E)") || (device == "STRATIXIV(E)") || (device == "stratixiv(e)") || (device == "StratixIIIGX") || (device == "STRATIXIIIGX") || (device == "stratixiiigx") || (device == "Stratix IV (GT/GX/E)") || (device == "STRATIX IV (GT/GX/E)") || (device == "stratix iv (gt/gx/e)") || (device == "Stratix IV (GT/E/GX)") || (device == "STRATIX IV (GT/E/GX)") || (device == "stratix iv (gt/e/gx)") || (device == "Stratix IV (E/GT/GX)") || (device == "STRATIX IV (E/GT/GX)") || (device == "stratix iv (e/gt/gx)") || (device == "Stratix IV (E/GX/GT)") || (device == "STRATIX IV (E/GX/GT)") || (device == "stratix iv (e/gx/gt)") || (device == "StratixIV(GT/GX/E)") || (device == "STRATIXIV(GT/GX/E)") || (device == "stratixiv(gt/gx/e)") || (device == "StratixIV(GT/E/GX)") || (device == "STRATIXIV(GT/E/GX)") || (device == "stratixiv(gt/e/gx)") || (device == "StratixIV(E/GX/GT)") || (device == "STRATIXIV(E/GX/GT)") || (device == "stratixiv(e/gx/gt)") || (device == "StratixIV(E/GT/GX)") || (device == "STRATIXIV(E/GT/GX)") || (device == "stratixiv(e/gt/gx)") || (device == "Stratix IV (GX/E)") || (device == "STRATIX IV (GX/E)") || (device == "stratix iv (gx/e)") || (device == "StratixIV(GX/E)") || (device == "STRATIXIV(GX/E)") || (device == "stratixiv(gx/e)")) |
|| ((device == "tgx_commercial_v1_1") || (device == "TGX_COMMERCIAL_V1_1")) |
|| ((device == "Arria II GX") || (device == "ARRIA II GX") || (device == "arria ii gx") || (device == "ArriaIIGX") || (device == "ARRIAIIGX") || (device == "arriaiigx") || (device == "Arria IIGX") || (device == "ARRIA IIGX") || (device == "arria iigx") || (device == "ArriaII GX") || (device == "ARRIAII GX") || (device == "arriaii gx") || (device == "Arria II") || (device == "ARRIA II") || (device == "arria ii") || (device == "ArriaII") || (device == "ARRIAII") || (device == "arriaii") || (device == "Arria II (GX/E)") || (device == "ARRIA II (GX/E)") || (device == "arria ii (gx/e)") || (device == "ArriaII(GX/E)") || (device == "ARRIAII(GX/E)") || (device == "arriaii(gx/e)") || (device == "PIRANHA") || (device == "piranha")) |
|| ((device == "HardCopy III") || (device == "HARDCOPY III") || (device == "hardcopy iii") || (device == "HardCopyIII") || (device == "HARDCOPYIII") || (device == "hardcopyiii") || (device == "HCX") || (device == "hcx")) |
|| ((device == "HardCopy IV") || (device == "HARDCOPY IV") || (device == "hardcopy iv") || (device == "HardCopyIV") || (device == "HARDCOPYIV") || (device == "hardcopyiv") || (device == "HardCopy IV (GX)") || (device == "HARDCOPY IV (GX)") || (device == "hardcopy iv (gx)") || (device == "HardCopy IV (E)") || (device == "HARDCOPY IV (E)") || (device == "hardcopy iv (e)") || (device == "HardCopyIV(GX)") || (device == "HARDCOPYIV(GX)") || (device == "hardcopyiv(gx)") || (device == "HardCopyIV(E)") || (device == "HARDCOPYIV(E)") || (device == "hardcopyiv(e)") || (device == "HCXIV") || (device == "hcxiv") || (device == "HardCopy IV (GX/E)") || (device == "HARDCOPY IV (GX/E)") || (device == "hardcopy iv (gx/e)") || (device == "HardCopy IV (E/GX)") || (device == "HARDCOPY IV (E/GX)") || (device == "hardcopy iv (e/gx)") || (device == "HardCopyIV(GX/E)") || (device == "HARDCOPYIV(GX/E)") || (device == "hardcopyiv(gx/e)") || (device == "HardCopyIV(E/GX)") || (device == "HARDCOPYIV(E/GX)") || (device == "hardcopyiv(e/gx)")) |
|| ((device == "Cyclone III LS") || (device == "CYCLONE III LS") || (device == "cyclone iii ls") || (device == "CycloneIIILS") || (device == "CYCLONEIIILS") || (device == "cycloneiiils") || (device == "Cyclone III LPS") || (device == "CYCLONE III LPS") || (device == "cyclone iii lps") || (device == "Cyclone LPS") || (device == "CYCLONE LPS") || (device == "cyclone lps") || (device == "CycloneLPS") || (device == "CYCLONELPS") || (device == "cyclonelps") || (device == "Tarpon") || (device == "TARPON") || (device == "tarpon") || (device == "Cyclone IIIE") || (device == "CYCLONE IIIE") || (device == "cyclone iiie")) |
|| ((device == "Cyclone IV GX") || (device == "CYCLONE IV GX") || (device == "cyclone iv gx") || (device == "Cyclone IVGX") || (device == "CYCLONE IVGX") || (device == "cyclone ivgx") || (device == "CycloneIV GX") || (device == "CYCLONEIV GX") || (device == "cycloneiv gx") || (device == "CycloneIVGX") || (device == "CYCLONEIVGX") || (device == "cycloneivgx") || (device == "Cyclone IV") || (device == "CYCLONE IV") || (device == "cyclone iv") || (device == "CycloneIV") || (device == "CYCLONEIV") || (device == "cycloneiv") || (device == "Cyclone IV (GX)") || (device == "CYCLONE IV (GX)") || (device == "cyclone iv (gx)") || (device == "CycloneIV(GX)") || (device == "CYCLONEIV(GX)") || (device == "cycloneiv(gx)") || (device == "Cyclone III GX") || (device == "CYCLONE III GX") || (device == "cyclone iii gx") || (device == "CycloneIII GX") || (device == "CYCLONEIII GX") || (device == "cycloneiii gx") || (device == "Cyclone IIIGX") || (device == "CYCLONE IIIGX") || (device == "cyclone iiigx") || (device == "CycloneIIIGX") || (device == "CYCLONEIIIGX") || (device == "cycloneiiigx") || (device == "Cyclone III GL") || (device == "CYCLONE III GL") || (device == "cyclone iii gl") || (device == "CycloneIII GL") || (device == "CYCLONEIII GL") || (device == "cycloneiii gl") || (device == "Cyclone IIIGL") || (device == "CYCLONE IIIGL") || (device == "cyclone iiigl") || (device == "CycloneIIIGL") || (device == "CYCLONEIIIGL") || (device == "cycloneiiigl") || (device == "Stingray") || (device == "STINGRAY") || (device == "stingray")) |
|| ((device == "Cyclone IV E") || (device == "CYCLONE IV E") || (device == "cyclone iv e") || (device == "CycloneIV E") || (device == "CYCLONEIV E") || (device == "cycloneiv e") || (device == "Cyclone IVE") || (device == "CYCLONE IVE") || (device == "cyclone ive") || (device == "CycloneIVE") || (device == "CYCLONEIVE") || (device == "cycloneive")) |
|| ((device == "Stratix V") || (device == "STRATIX V") || (device == "stratix v") || (device == "StratixV") || (device == "STRATIXV") || (device == "stratixv") || (device == "Stratix V (GS)") || (device == "STRATIX V (GS)") || (device == "stratix v (gs)") || (device == "StratixV(GS)") || (device == "STRATIXV(GS)") || (device == "stratixv(gs)") || (device == "Stratix V (GX)") || (device == "STRATIX V (GX)") || (device == "stratix v (gx)") || (device == "StratixV(GX)") || (device == "STRATIXV(GX)") || (device == "stratixv(gx)") || (device == "Stratix V (GS/GX)") || (device == "STRATIX V (GS/GX)") || (device == "stratix v (gs/gx)") || (device == "StratixV(GS/GX)") || (device == "STRATIXV(GS/GX)") || (device == "stratixv(gs/gx)") || (device == "Stratix V (GX/GS)") || (device == "STRATIX V (GX/GS)") || (device == "stratix v (gx/gs)") || (device == "StratixV(GX/GS)") || (device == "STRATIXV(GX/GS)") || (device == "stratixv(gx/gs)")) |
|| ((device == "Arria II GZ") || (device == "ARRIA II GZ") || (device == "arria ii gz") || (device == "ArriaII GZ") || (device == "ARRIAII GZ") || (device == "arriaii gz") || (device == "Arria IIGZ") || (device == "ARRIA IIGZ") || (device == "arria iigz") || (device == "ArriaIIGZ") || (device == "ARRIAIIGZ") || (device == "arriaiigz")) |
|| ((device == "arriaiigz_commercial_v1_1") || (device == "ARRIAIIGZ_COMMERCIAL_V1_1")) |
|| ((device == "MAX V") || (device == "max v") || (device == "MAXV") || (device == "maxv") || (device == "Jade") || (device == "JADE") || (device == "jade")) |
|| ((device == "ArriaV") || (device == "ARRIAV") || (device == "arriav") || (device == "Arria V") || (device == "ARRIA V") || (device == "arria v"))) |
is_valid = 1; |
else |
is_valid = 0; |
|
IS_VALID_FAMILY = is_valid; |
end |
endfunction // IS_VALID_FAMILY |
|
|
endmodule // ALTERA_DEVICE_FAMILIES |
|
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo_dffpipe |
// |
// Description : Dual Clocks FIFO |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo_dffpipe ( d, clock, aclr, |
q); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_delay = 1; |
parameter lpm_width = 64; |
|
// LOCAL PARAMETER DECLARATION |
parameter delay = (lpm_delay < 2) ? 1 : lpm_delay-1; |
|
// INPUT PORT DECLARATION |
input [lpm_width-1:0] d; |
input clock; |
input aclr; |
|
// OUTPUT PORT DECLARATION |
output [lpm_width-1:0] q; |
|
// INTERNAL REGISTERS DECLARATION |
reg [(lpm_width*delay)-1:0] dffpipe; |
reg [lpm_width-1:0] q; |
|
// LOCAL INTEGER DECLARATION |
|
// INITIAL CONSTRUCT BLOCK |
initial |
begin |
dffpipe = {(lpm_width*delay){1'b0}}; |
q <= 0; |
end |
|
// ALWAYS CONSTRUCT BLOCK |
always @(posedge clock or posedge aclr) |
begin |
if (aclr) |
begin |
dffpipe <= {(lpm_width*delay){1'b0}}; |
q <= 0; |
end |
else |
begin |
if ((lpm_delay > 0) && ($time > 0)) |
begin |
if (lpm_delay > 1) |
begin |
{q, dffpipe} <= {dffpipe, d}; |
end |
else |
q <= d; |
end |
end |
end // @(posedge aclr or posedge clock) |
|
always @(d) |
begin |
if (lpm_delay == 0) |
q <= d; |
end // @(d) |
|
endmodule // dcfifo_dffpipe |
// END OF MODULE |
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo_fefifo |
// |
// Description : Dual Clock FIFO |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo_fefifo ( usedw_in, wreq, rreq, clock, aclr, |
empty, full); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_widthad = 1; |
parameter lpm_numwords = 1; |
parameter underflow_checking = "ON"; |
parameter overflow_checking = "ON"; |
parameter lpm_mode = "READ"; |
|
// INPUT PORT DECLARATION |
input [lpm_widthad-1:0] usedw_in; |
input wreq, rreq; |
input clock; |
input aclr; |
|
// OUTPUT PORT DECLARATION |
output empty, full; |
|
// INTERNAL REGISTERS DECLARATION |
reg [1:0] sm_empty; |
reg lrreq; |
reg i_empty, i_full; |
|
// LOCAL INTEGER DECLARATION |
integer almostfull; |
|
// INITIAL CONSTRUCT BLOCK |
initial |
begin |
if ((lpm_mode != "READ") && (lpm_mode != "WRITE")) |
begin |
$display ("Error! LPM_MODE must be READ or WRITE."); |
$display ("Time: %0t Instance: %m", $time); |
end |
if ((underflow_checking != "ON") && (underflow_checking != "OFF")) |
begin |
$display ("Error! UNDERFLOW_CHECKING must be ON or OFF."); |
$display ("Time: %0t Instance: %m", $time); |
end |
if ((overflow_checking != "ON") && (overflow_checking != "OFF")) |
begin |
$display ("Error! OVERFLOW_CHECKING must be ON or OFF."); |
$display ("Time: %0t Instance: %m", $time); |
end |
|
sm_empty <= 2'b00; |
i_empty <= 1'b1; |
i_full <= 1'b0; |
|
if (lpm_numwords >= 3) |
almostfull <= lpm_numwords - 3; |
else |
almostfull <= 0; |
end |
|
// ALWAYS CONSTRUCT BLOCK |
always @(posedge aclr) |
begin |
sm_empty <= 2'b00; |
i_empty <= 1'b1; |
i_full <= 1'b0; |
lrreq <= 1'b0; |
end // @(posedge aclr) |
|
always @(posedge clock) |
begin |
if (underflow_checking == "OFF") |
lrreq <= rreq; |
else |
lrreq <= rreq && ~i_empty; |
|
if (~aclr && $time > 0) |
begin |
if (lpm_mode == "READ") |
begin |
casex (sm_empty) |
// state_empty |
2'b00: |
if (usedw_in != 0) |
sm_empty <= 2'b01; |
// state_non_empty |
2'b01: |
if (rreq && (((usedw_in == 1) && !lrreq) || ((usedw_in == 2) && lrreq))) |
sm_empty <= 2'b10; |
// state_emptywait |
2'b10: |
if (usedw_in > 1) |
sm_empty <= 2'b01; |
else |
sm_empty <= 2'b00; |
default: |
$display ("Error! Invalid sm_empty state in read mode."); |
endcase |
end // if (lpm_mode == "READ") |
else if (lpm_mode == "WRITE") |
begin |
casex (sm_empty) |
// state_empty |
2'b00: |
if (wreq) |
sm_empty <= 2'b01; |
// state_one |
2'b01: |
if (!wreq) |
sm_empty <= 2'b11; |
// state_non_empty |
2'b11: |
if (wreq) |
sm_empty <= 2'b01; |
else if (usedw_in == 0) |
sm_empty <= 2'b00; |
default: |
$display ("Error! Invalid sm_empty state in write mode."); |
endcase |
end // if (lpm_mode == "WRITE") |
|
if (~aclr && (usedw_in >= almostfull) && ($time > 0)) |
i_full <= 1'b1; |
else |
i_full <= 1'b0; |
end // if (~aclr && $time > 0) |
end // @(posedge clock) |
|
always @(sm_empty) |
begin |
i_empty <= !sm_empty[0]; |
end |
// @(sm_empty) |
|
// CONTINOUS ASSIGNMENT |
assign empty = i_empty; |
assign full = i_full; |
endmodule // dcfifo_fefifo |
// END OF MODULE |
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo_async |
// |
// Description : Asynchronous Dual Clocks FIFO |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo_async (data, rdclk, wrclk, aclr, rdreq, wrreq, |
rdfull, wrfull, rdempty, wrempty, rdusedw, wrusedw, q); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_width = 1; |
parameter lpm_widthu = 1; |
parameter lpm_numwords = 2; |
parameter delay_rdusedw = 1; |
parameter delay_wrusedw = 1; |
parameter rdsync_delaypipe = 0; |
parameter wrsync_delaypipe = 0; |
parameter intended_device_family = "Stratix"; |
parameter lpm_showahead = "OFF"; |
parameter underflow_checking = "ON"; |
parameter overflow_checking = "ON"; |
parameter use_eab = "ON"; |
parameter add_ram_output_register = "OFF"; |
|
// INPUT PORT DECLARATION |
input [lpm_width-1:0] data; |
input rdclk; |
input wrclk; |
input aclr; |
input wrreq; |
input rdreq; |
|
// OUTPUT PORT DECLARATION |
output rdfull; |
output wrfull; |
output rdempty; |
output wrempty; |
output [lpm_widthu-1:0] rdusedw; |
output [lpm_widthu-1:0] wrusedw; |
output [lpm_width-1:0] q; |
|
// INTERNAL REGISTERS DECLARATION |
reg [lpm_width-1:0] mem_data [(1<<lpm_widthu)-1:0]; |
reg [lpm_width-1:0] mem_data2 [(1<<lpm_widthu)-1:0]; |
reg data_ready [(1<<lpm_widthu)-1:0]; |
reg [2:0] data_delay_count [(1<<lpm_widthu)-1:0]; |
reg [lpm_width-1:0] i_data_tmp; |
reg [lpm_widthu-1:0] i_rdptr; |
reg [lpm_widthu-1:0] i_wrptr; |
reg [lpm_widthu-1:0] i_wrptr_tmp; |
reg i_rdenclock; |
reg i_wren_tmp; |
reg i_showahead_flag; |
reg i_showahead_flag1; |
reg i_showahead_flag2; |
reg i_showahead_flag3; |
reg [lpm_widthu-1:0] i_wr_udwn; |
reg [lpm_widthu-1:0] i_rd_udwn; |
reg [lpm_widthu:0] i_rdusedw; |
reg [lpm_widthu-1:0] i_wrusedw; |
reg [lpm_width-1:0] i_q_tmp; |
reg feature_family_base_stratix; |
reg feature_family_base_cyclone; |
|
// INTERNAL WIRE DECLARATION |
wire i_rden; |
wire i_wren; |
wire w_rdempty; |
wire w_wrempty; |
wire w_rdfull; |
wire w_wrfull; |
wire [lpm_widthu-1:0] w_rdptrrg; |
wire [lpm_widthu-1:0] w_wrdelaycycle; |
wire [lpm_widthu-1:0] w_ws_nbrp; |
wire [lpm_widthu-1:0] w_rs_nbwp; |
wire [lpm_widthu-1:0] w_ws_dbrp; |
wire [lpm_widthu-1:0] w_rs_dbwp; |
wire [lpm_widthu-1:0] w_rd_dbuw; |
wire [lpm_widthu-1:0] w_wr_dbuw; |
wire [lpm_widthu-1:0] w_rdusedw; |
wire [lpm_widthu-1:0] w_wrusedw; |
|
// INTERNAL TRI DECLARATION |
tri0 aclr; |
|
// LOCAL INTEGER DECLARATION |
integer i; |
integer j; |
integer k; |
|
// COMPONENT INSTANTIATION |
ALTERA_DEVICE_FAMILIES dev (); |
|
// INITIAL CONSTRUCT BLOCK |
initial |
begin |
|
feature_family_base_stratix = dev.FEATURE_FAMILY_BASE_STRATIX(intended_device_family); |
feature_family_base_cyclone = dev.FEATURE_FAMILY_BASE_CYCLONE(intended_device_family); |
|
if((lpm_showahead != "ON") && (lpm_showahead != "OFF")) |
$display ("Error! lpm_showahead must be ON or OFF."); |
if((underflow_checking != "ON") && (underflow_checking != "OFF")) |
$display ("Error! underflow_checking must be ON or OFF."); |
if((overflow_checking != "ON") && (overflow_checking != "OFF")) |
$display ("Error! overflow_checking must be ON or OFF."); |
if((use_eab != "ON") && (use_eab != "OFF")) |
$display ("Error! use_eab must be ON or OFF."); |
if((add_ram_output_register != "ON") && (add_ram_output_register != "OFF")) |
$display ("Error! add_ram_output_register must be ON or OFF."); |
if (dev.IS_VALID_FAMILY(intended_device_family) == 0) |
$display ("Error! Unknown INTENDED_DEVICE_FAMILY=%s.", intended_device_family); |
|
for (i = 0; i < (1 << lpm_widthu); i = i + 1) |
begin |
mem_data[i] <= 0; |
mem_data2[i] <= 0; |
data_ready[i] <= 1'b0; |
data_delay_count[i] <= 0; |
end |
|
if ((add_ram_output_register == "OFF") && |
((feature_family_base_stratix == 1) || (feature_family_base_cyclone == 1))) |
begin |
for (i = 0; i < (1 << lpm_widthu); i = i + 1) |
begin |
mem_data2[i] <= {lpm_width{1'bx}}; |
end |
end |
else |
begin |
for (i = 0; i < (1 << lpm_widthu); i = i + 1) |
begin |
mem_data2[i] <= 0; |
end |
end |
|
i_data_tmp <= 0; |
i_rdptr <= 0; |
i_wrptr <= 0; |
i_wrptr_tmp <= 0; |
i_wren_tmp <= 0; |
i_wr_udwn <= 0; |
i_rd_udwn <= 0; |
i_rdusedw <= 0; |
i_wrusedw <= 0; |
i_q_tmp <= 0; |
end |
|
// COMPONENT INSTANTIATIONS |
// Delays & DFF Pipes |
dcfifo_dffpipe DP_RDPTR_D ( |
.d (i_rdptr), |
.clock (i_rdenclock), |
.aclr (aclr), |
.q (w_rdptrrg)); |
dcfifo_dffpipe DP_WRPTR_D ( |
.d (i_wrptr), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_wrdelaycycle)); |
defparam |
DP_RDPTR_D.lpm_delay = 0, |
DP_RDPTR_D.lpm_width = lpm_widthu, |
DP_WRPTR_D.lpm_delay = 1, |
DP_WRPTR_D.lpm_width = lpm_widthu; |
|
dcfifo_dffpipe DP_WS_NBRP ( |
.d (w_rdptrrg), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_ws_nbrp)); |
dcfifo_dffpipe DP_RS_NBWP ( |
.d (w_wrdelaycycle), |
.clock (rdclk), |
.aclr (aclr), |
.q (w_rs_nbwp)); |
dcfifo_dffpipe DP_WS_DBRP ( |
.d (w_ws_nbrp), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_ws_dbrp)); |
dcfifo_dffpipe DP_RS_DBWP ( |
.d (w_rs_nbwp), |
.clock (rdclk), |
.aclr (aclr), |
.q (w_rs_dbwp)); |
defparam |
DP_WS_NBRP.lpm_delay = wrsync_delaypipe, |
DP_WS_NBRP.lpm_width = lpm_widthu, |
DP_RS_NBWP.lpm_delay = rdsync_delaypipe, |
DP_RS_NBWP.lpm_width = lpm_widthu, |
DP_WS_DBRP.lpm_delay = 1, // gray_delaypipe |
DP_WS_DBRP.lpm_width = lpm_widthu, |
DP_RS_DBWP.lpm_delay = 1, // gray_delaypipe |
DP_RS_DBWP.lpm_width = lpm_widthu; |
|
dcfifo_dffpipe DP_WRUSEDW ( |
.d (i_wr_udwn), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_wrusedw)); |
dcfifo_dffpipe DP_RDUSEDW ( |
.d (i_rd_udwn), |
.clock (rdclk), |
.aclr (aclr), |
.q (w_rdusedw)); |
dcfifo_dffpipe DP_WR_DBUW ( |
.d (i_wr_udwn), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_wr_dbuw)); |
dcfifo_dffpipe DP_RD_DBUW ( |
.d (i_rd_udwn), |
.clock (rdclk), |
.aclr (aclr), |
.q (w_rd_dbuw)); |
defparam |
DP_WRUSEDW.lpm_delay = delay_wrusedw, |
DP_WRUSEDW.lpm_width = lpm_widthu, |
DP_RDUSEDW.lpm_delay = delay_rdusedw, |
DP_RDUSEDW.lpm_width = lpm_widthu, |
DP_WR_DBUW.lpm_delay = 1, // wrusedw_delaypipe |
DP_WR_DBUW.lpm_width = lpm_widthu, |
DP_RD_DBUW.lpm_delay = 1, // rdusedw_delaypipe |
DP_RD_DBUW.lpm_width = lpm_widthu; |
|
// Empty/Full |
dcfifo_fefifo WR_FE ( |
.usedw_in (w_wr_dbuw), |
.wreq (wrreq), |
.rreq (rdreq), |
.clock (wrclk), |
.aclr (aclr), |
.empty (w_wrempty), |
.full (w_wrfull)); |
dcfifo_fefifo RD_FE ( |
.usedw_in (w_rd_dbuw), |
.rreq (rdreq), |
.wreq(wrreq), |
.clock (rdclk), |
.aclr (aclr), |
.empty (w_rdempty), |
.full (w_rdfull)); |
defparam |
WR_FE.lpm_widthad = lpm_widthu, |
WR_FE.lpm_numwords = lpm_numwords, |
WR_FE.underflow_checking = underflow_checking, |
WR_FE.overflow_checking = overflow_checking, |
WR_FE.lpm_mode = "WRITE", |
RD_FE.lpm_widthad = lpm_widthu, |
RD_FE.lpm_numwords = lpm_numwords, |
RD_FE.underflow_checking = underflow_checking, |
RD_FE.overflow_checking = overflow_checking, |
RD_FE.lpm_mode = "READ"; |
|
// ALWAYS CONSTRUCT BLOCK |
always @(posedge aclr) |
begin |
i_rdptr <= 0; |
i_wrptr <= 0; |
if (!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)) || |
(use_eab == "OFF")) |
begin |
if (lpm_showahead == "ON") |
i_q_tmp <= mem_data[0]; |
else |
i_q_tmp <= 0; |
end |
else if ((add_ram_output_register == "ON") && |
((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1))) |
begin |
if (lpm_showahead == "OFF") |
i_q_tmp <= 0; |
else |
begin |
i_q_tmp <= {lpm_width{1'bx}}; |
|
for (j = 0; j < (1<<lpm_widthu); j = j + 1) |
begin |
data_ready[i_wrptr_tmp] <= 1'b0; |
data_delay_count[k] <= 0; |
end |
end |
end |
end // @(posedge aclr) |
|
always @(posedge wrclk) |
begin |
if (aclr && (!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)) || |
(add_ram_output_register == "ON") || (use_eab == "OFF"))) |
begin |
i_data_tmp <= 0; |
i_wrptr_tmp <= 0; |
i_wren_tmp <= 0; |
end |
else if (wrclk && ($time > 0)) |
begin |
i_data_tmp <= data; |
i_wrptr_tmp <= i_wrptr; |
i_wren_tmp <= i_wren; |
|
if (i_wren) |
begin |
if (~aclr && ((i_wrptr < (1<<lpm_widthu)-1) || (overflow_checking == "OFF"))) |
i_wrptr <= i_wrptr + 1; |
else |
i_wrptr <= 0; |
|
if (use_eab == "OFF") |
begin |
mem_data[i_wrptr] <= data; |
|
if (lpm_showahead == "ON") |
i_showahead_flag3 <= 1'b1; |
end |
end |
end |
end // @(posedge wrclk) |
|
always @(negedge wrclk) |
begin |
if ((~wrclk && (use_eab == "ON")) && ($time > 0)) |
begin |
if (i_wren_tmp) |
begin |
mem_data[i_wrptr_tmp] <= i_data_tmp; |
data_ready[i_wrptr_tmp] <= 1'b0; |
end |
|
if ((lpm_showahead == "ON") && |
(!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)))) |
i_showahead_flag3 <= 1'b1; |
end |
end // @(negedge wrclk) |
|
always @(posedge rdclk) |
begin |
|
if (rdclk && ($time > 0)) |
begin |
if ((lpm_showahead == "ON") && (add_ram_output_register == "ON") && |
((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1))) |
begin |
for (k = 0; k < (1<<lpm_widthu); k = k + 1) |
begin |
if (data_ready[k] == 1'b0) |
data_delay_count[k] <= data_delay_count[k] + 1; |
|
if (data_delay_count[k] == (rdsync_delaypipe+2)) |
begin |
data_ready[k] <= 1'b1; |
data_delay_count[k] <= 0; |
end |
end |
|
if (~aclr) |
begin |
i_showahead_flag3 <= 1'b1; |
end |
end |
|
end |
|
if (aclr && (!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)) || |
(use_eab == "OFF"))) |
begin |
if (lpm_showahead == "ON") |
i_q_tmp <= mem_data[0]; |
else |
i_q_tmp <= 0; |
end |
else if (aclr && (add_ram_output_register == "ON") && |
((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1))) |
begin |
if (lpm_showahead == "ON") |
i_q_tmp <= {lpm_width{1'bx}}; |
else |
i_q_tmp <= 0; |
end |
else if (rdclk && i_rden && ($time > 0)) |
begin |
if (~aclr && ((i_rdptr < (1<<lpm_widthu)-1) || (underflow_checking == "OFF"))) |
i_rdptr <= i_rdptr + 1; |
else |
i_rdptr <= 0; |
|
if (lpm_showahead == "ON") |
i_showahead_flag3 <= 1'b1; |
else |
i_q_tmp <= mem_data[i_rdptr]; |
end |
end // @(posedge rdclk) |
|
always @(i_showahead_flag3) |
begin |
i_showahead_flag2 <= i_showahead_flag3; |
end |
|
always @(i_showahead_flag2) |
begin |
i_showahead_flag1 <= i_showahead_flag2; |
end |
|
always @(i_showahead_flag1) |
begin |
i_showahead_flag <= i_showahead_flag1; |
end |
|
|
always @(posedge i_showahead_flag) |
begin |
if ((lpm_showahead == "ON") && (add_ram_output_register == "ON") && |
((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1))) |
begin |
if (w_rdempty == 1'b0) |
begin |
if (data_ready[i_rdptr] == 1'b1) |
begin |
i_q_tmp <= mem_data[i_rdptr]; |
mem_data2[i_rdptr] <= mem_data[i_rdptr]; |
end |
else |
i_q_tmp <= mem_data2[i_rdptr]; |
end |
end |
else |
i_q_tmp <= mem_data[i_rdptr]; |
i_showahead_flag3 <= 1'b0; |
end // @(posedge i_showahead_flag) |
|
// Delays & DFF Pipes |
always @(negedge rdclk) |
begin |
i_rdenclock <= 0; |
end // @(negedge rdclk) |
|
always @(posedge rdclk) |
begin |
if (i_rden) |
i_rdenclock <= 1; |
end // @(posedge rdclk) |
|
always @(i_wrptr or w_ws_dbrp) |
begin |
i_wr_udwn = i_wrptr - w_ws_dbrp; |
end // @(i_wrptr or w_ws_dbrp) |
|
always @(i_rdptr or w_rs_dbwp) |
begin |
i_rd_udwn = w_rs_dbwp - i_rdptr; |
end // @(i_rdptr or w_rs_dbwp) |
|
|
// CONTINOUS ASSIGNMENT |
assign i_rden = (underflow_checking == "OFF") ? rdreq : (rdreq && !w_rdempty); |
assign i_wren = (overflow_checking == "OFF") ? wrreq : (wrreq && !w_wrfull); |
assign q = i_q_tmp; |
assign wrfull = w_wrfull; |
assign rdfull = w_rdfull; |
assign wrempty = w_wrempty; |
assign rdempty = w_rdempty; |
assign wrusedw = w_wrusedw; |
assign rdusedw = w_rdusedw; |
|
endmodule // dcfifo_async |
// END OF MODULE |
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo_sync |
// |
// Description : Synchronous Dual Clock FIFO |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo_sync (data, rdclk, wrclk, aclr, rdreq, wrreq, |
rdfull, wrfull, rdempty, wrempty, rdusedw, wrusedw, q); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_width = 1; |
parameter lpm_widthu = 1; |
parameter lpm_numwords = 2; |
parameter intended_device_family = "Stratix"; |
parameter lpm_showahead = "OFF"; |
parameter underflow_checking = "ON"; |
parameter overflow_checking = "ON"; |
parameter use_eab = "ON"; |
parameter add_ram_output_register = "OFF"; |
|
// INPUT PORT DECLARATION |
input [lpm_width-1:0] data; |
input rdclk; |
input wrclk; |
input aclr; |
input rdreq; |
input wrreq; |
|
// OUTPUT PORT DECLARATION |
output rdfull; |
output wrfull; |
output rdempty; |
output wrempty; |
output [lpm_widthu-1:0] rdusedw; |
output [lpm_widthu-1:0] wrusedw; |
output [lpm_width-1:0] q; |
|
// INTERNAL REGISTERS DECLARATION |
reg [lpm_width-1:0] mem_data [(1<<lpm_widthu)-1:0]; |
reg [lpm_width-1:0] i_data_tmp; |
reg [lpm_widthu:0] i_rdptr; |
reg [lpm_widthu:0] i_wrptr; |
reg [lpm_widthu-1:0] i_wrptr_tmp; |
reg i_wren_tmp; |
reg i_showahead_flag; |
reg i_showahead_flag2; |
reg [lpm_widthu:0] i_rdusedw; |
reg [lpm_widthu:0] i_wrusedw; |
reg [lpm_width-1:0] i_q_tmp; |
reg feature_family_base_stratix; |
reg feature_family_base_cyclone; |
reg feature_family_stratixii; |
reg feature_family_cycloneii; |
|
// INTERNAL WIRE DECLARATION |
wire [lpm_widthu:0] w_rdptr_s; |
wire [lpm_widthu:0] w_wrptr_s; |
wire [lpm_widthu:0] w_wrptr_r; |
wire i_rden; |
wire i_wren; |
wire i_rdempty; |
wire i_wrempty; |
wire i_rdfull; |
wire i_wrfull; |
|
// LOCAL INTEGER DECLARATION |
integer cnt_mod; |
integer i; |
|
// COMPONENT INSTANTIATION |
ALTERA_DEVICE_FAMILIES dev (); |
|
// INITIAL CONSTRUCT BLOCK |
initial |
begin |
|
feature_family_base_stratix = dev.FEATURE_FAMILY_BASE_STRATIX(intended_device_family); |
feature_family_base_cyclone = dev.FEATURE_FAMILY_BASE_CYCLONE(intended_device_family); |
feature_family_stratixii = dev.FEATURE_FAMILY_STRATIXII(intended_device_family); |
feature_family_cycloneii = dev.FEATURE_FAMILY_CYCLONEII(intended_device_family); |
|
if ((lpm_showahead != "ON") && (lpm_showahead != "OFF")) |
$display ("Error! LPM_SHOWAHEAD must be ON or OFF."); |
if ((underflow_checking != "ON") && (underflow_checking != "OFF")) |
$display ("Error! UNDERFLOW_CHECKING must be ON or OFF."); |
if ((overflow_checking != "ON") && (overflow_checking != "OFF")) |
$display ("Error! OVERFLOW_CHECKING must be ON or OFF."); |
if ((use_eab != "ON") && (use_eab != "OFF")) |
$display ("Error! USE_EAB must be ON or OFF."); |
if (lpm_numwords > (1 << lpm_widthu)) |
$display ("Error! LPM_NUMWORDS must be less than or equal to 2**LPM_WIDTHU."); |
if((add_ram_output_register != "ON") && (add_ram_output_register != "OFF")) |
$display ("Error! add_ram_output_register must be ON or OFF."); |
if (dev.IS_VALID_FAMILY(intended_device_family) == 0) |
$display ("Error! Unknown INTENDED_DEVICE_FAMILY=%s.", intended_device_family); |
|
for (i = 0; i < (1 << lpm_widthu); i = i + 1) |
mem_data[i] <= 0; |
i_data_tmp <= 0; |
i_rdptr <= 0; |
i_wrptr <= 0; |
i_wrptr_tmp <= 0; |
i_wren_tmp <= 0; |
|
i_rdusedw <= 0; |
i_wrusedw <= 0; |
i_q_tmp <= 0; |
|
if (lpm_numwords == (1 << lpm_widthu)) |
cnt_mod <= 1 << (lpm_widthu + 1); |
else |
cnt_mod <= 1 << lpm_widthu; |
end |
|
// COMPONENT INSTANTIATIONS |
dcfifo_dffpipe RDPTR_D ( |
.d (i_rdptr), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_rdptr_s)); |
dcfifo_dffpipe WRPTR_D ( |
.d (i_wrptr), |
.clock (wrclk), |
.aclr (aclr), |
.q (w_wrptr_r)); |
dcfifo_dffpipe WRPTR_E ( |
.d (w_wrptr_r), |
.clock (rdclk), |
.aclr (aclr), |
.q (w_wrptr_s)); |
defparam |
RDPTR_D.lpm_delay = 1, |
RDPTR_D.lpm_width = lpm_widthu + 1, |
WRPTR_D.lpm_delay = 1, |
WRPTR_D.lpm_width = lpm_widthu + 1, |
WRPTR_E.lpm_delay = 1, |
WRPTR_E.lpm_width = lpm_widthu + 1; |
|
// ALWAYS CONSTRUCT BLOCK |
always @(posedge aclr) |
begin |
i_rdptr <= 0; |
i_wrptr <= 0; |
if (!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)) || |
((add_ram_output_register == "ON") && (use_eab == "OFF"))) |
if (lpm_showahead == "ON") |
begin |
if ((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1)) |
i_q_tmp <= {lpm_width{1'bX}}; |
else |
i_q_tmp <= mem_data[0]; |
end |
else |
i_q_tmp <= 0; |
end // @(posedge aclr) |
|
always @(posedge wrclk) |
begin |
if (aclr && (!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)) || |
((add_ram_output_register == "ON") && (use_eab == "OFF")))) |
begin |
i_data_tmp <= 0; |
i_wrptr_tmp <= 0; |
i_wren_tmp <= 0; |
end |
else if (wrclk && ($time > 0)) |
begin |
i_data_tmp <= data; |
i_wrptr_tmp <= i_wrptr[lpm_widthu-1:0]; |
i_wren_tmp <= i_wren; |
|
if (i_wren) |
begin |
if (~aclr && (i_wrptr < cnt_mod - 1)) |
i_wrptr <= i_wrptr + 1; |
else |
i_wrptr <= 0; |
|
if (use_eab == "OFF") |
begin |
mem_data[i_wrptr[lpm_widthu-1:0]] <= data; |
|
if (lpm_showahead == "ON") |
i_showahead_flag2 <= 1'b1; |
end |
end |
end |
end // @(posedge wrclk) |
|
always @(negedge wrclk) |
begin |
if ((~wrclk && (use_eab == "ON")) && ($time > 0)) |
begin |
if (i_wren_tmp) |
begin |
mem_data[i_wrptr_tmp] <= i_data_tmp; |
end |
|
if ((lpm_showahead == "ON") && |
(!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)))) |
i_showahead_flag2 <= 1'b1; |
end |
end // @(negedge wrclk) |
|
always @(posedge rdclk) |
begin |
if (aclr && (!((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1)) || |
((add_ram_output_register == "ON") && (use_eab == "OFF")))) |
begin |
if (lpm_showahead == "ON") |
begin |
if ((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1)) |
i_q_tmp <= {lpm_width{1'bX}}; |
else |
i_q_tmp <= mem_data[0]; |
end |
else |
i_q_tmp <= 0; |
end |
else if (rdclk && i_rden && ($time > 0)) |
begin |
if (~aclr && (i_rdptr < cnt_mod - 1)) |
i_rdptr <= i_rdptr + 1; |
else |
i_rdptr <= 0; |
|
if ((lpm_showahead == "ON") && (!((use_eab == "ON") && |
((feature_family_base_stratix == 1) || |
(feature_family_base_cyclone == 1))))) |
i_showahead_flag2 <= 1'b1; |
else |
i_q_tmp <= mem_data[i_rdptr[lpm_widthu-1:0]]; |
end |
end // @(rdclk) |
|
always @(posedge i_showahead_flag) |
begin |
i_q_tmp <= mem_data[i_rdptr[lpm_widthu-1:0]]; |
i_showahead_flag2 <= 1'b0; |
end // @(posedge i_showahead_flag) |
|
always @(i_showahead_flag2) |
begin |
i_showahead_flag <= i_showahead_flag2; |
end // @(i_showahead_flag2) |
|
// Usedw, Empty, Full |
always @(i_rdptr or w_wrptr_s or cnt_mod) |
begin |
if (w_wrptr_s >= i_rdptr) |
i_rdusedw <= w_wrptr_s - i_rdptr; |
else |
i_rdusedw <= w_wrptr_s + cnt_mod - i_rdptr; |
end // @(i_rdptr or w_wrptr_s) |
|
always @(i_wrptr or w_rdptr_s or cnt_mod) |
begin |
if (i_wrptr >= w_rdptr_s) |
i_wrusedw <= i_wrptr - w_rdptr_s; |
else |
i_wrusedw <= i_wrptr + cnt_mod - w_rdptr_s; |
end // @(i_wrptr or w_rdptr_s) |
|
|
// CONTINOUS ASSIGNMENT |
assign i_rden = (underflow_checking == "OFF") ? rdreq : (rdreq && !i_rdempty); |
assign i_wren = (overflow_checking == "OFF") ? wrreq : (wrreq && !i_wrfull); |
assign i_rdempty = (i_rdusedw == 0) ? 1'b1 : 1'b0; |
assign i_wrempty = (i_wrusedw == 0) ? 1'b1 : 1'b0; |
assign i_rdfull = (((lpm_numwords == (1 << lpm_widthu)) && i_rdusedw[lpm_widthu]) || |
((lpm_numwords < (1 << lpm_widthu)) && (i_rdusedw == lpm_numwords))) |
? 1'b1 : 1'b0; |
assign i_wrfull = (((lpm_numwords == (1 << lpm_widthu)) && i_wrusedw[lpm_widthu]) || |
((lpm_numwords < (1 << lpm_widthu)) && (i_wrusedw == lpm_numwords))) |
? 1'b1 : 1'b0; |
assign rdempty = i_rdempty; |
assign wrempty = i_wrempty; |
assign rdfull = i_rdfull; |
assign wrfull = i_wrfull; |
assign wrusedw = i_wrusedw[lpm_widthu-1:0]; |
assign rdusedw = i_rdusedw[lpm_widthu-1:0]; |
assign q = i_q_tmp; |
|
endmodule // dcfifo_sync |
// END OF MODULE |
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo_low_latency |
// |
// Description : Dual Clocks FIFO with lowest latency. This fifo implements |
// the fifo behavior for Stratix II, Cyclone II, Stratix III, |
// Cyclone III and Stratix showahead area mode (LPM_SHOWAHEAD= |
// ON, ADD_RAM_OUTPUT_REGISTER=OFF) |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo_low_latency (data, rdclk, wrclk, aclr, rdreq, wrreq, |
rdfull, wrfull, rdempty, wrempty, rdusedw, wrusedw, q); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_width = 1; |
parameter lpm_widthu = 1; |
parameter lpm_width_r = lpm_width; |
parameter lpm_widthu_r = lpm_widthu; |
parameter lpm_numwords = 2; |
parameter delay_rdusedw = 2; |
parameter delay_wrusedw = 2; |
parameter rdsync_delaypipe = 0; |
parameter wrsync_delaypipe = 0; |
parameter intended_device_family = "Stratix"; |
parameter lpm_showahead = "OFF"; |
parameter underflow_checking = "ON"; |
parameter overflow_checking = "ON"; |
parameter add_usedw_msb_bit = "OFF"; |
parameter write_aclr_synch = "OFF"; |
parameter use_eab = "ON"; |
parameter clocks_are_synchronized = "FALSE"; |
parameter add_ram_output_register = "OFF"; |
parameter lpm_hint = "USE_EAB=ON"; |
|
// LOCAL PARAMETER DECLARATION |
parameter WIDTH_RATIO = (lpm_width > lpm_width_r) ? lpm_width / lpm_width_r : |
lpm_width_r / lpm_width; |
parameter FIFO_DEPTH = (add_usedw_msb_bit == "OFF") ? lpm_widthu_r : lpm_widthu_r -1; |
|
// INPUT PORT DECLARATION |
input [lpm_width-1:0] data; |
input rdclk; |
input wrclk; |
input aclr; |
input rdreq; |
input wrreq; |
|
// OUTPUT PORT DECLARATION |
output rdfull; |
output wrfull; |
output rdempty; |
output wrempty; |
output [lpm_widthu_r-1:0] rdusedw; |
output [lpm_widthu-1:0] wrusedw; |
output [lpm_width_r-1:0] q; |
|
// INTERNAL REGISTERS DECLARATION |
reg [lpm_width_r-1:0] mem_data [(1<<FIFO_DEPTH) + WIDTH_RATIO : 0]; |
reg [lpm_width-1:0] i_data_tmp; |
reg [lpm_width-1:0] i_temp_reg; |
reg [lpm_widthu_r:0] i_rdptr_g; |
reg [lpm_widthu:0] i_wrptr_g; |
reg [lpm_widthu:0] i_wrptr_g_tmp; |
reg [lpm_widthu:0] i_wrptr_g1; |
reg [lpm_widthu_r:0] i_rdptr_g1p; |
reg [lpm_widthu:0] i_delayed_wrptr_g; |
|
reg i_wren_tmp; |
reg i_rdempty; |
reg i_wrempty_area; |
reg i_wrempty_speed; |
reg i_rdempty_rreg; |
reg i_rdfull_speed; |
reg i_rdfull_area; |
reg i_wrfull; |
reg i_wrfull_wreg; |
reg [lpm_widthu_r:0] i_rdusedw_tmp; |
reg [lpm_widthu:0] i_wrusedw_tmp; |
reg [lpm_width_r-1:0] i_q; |
reg i_q_is_registered; |
reg use_wrempty_speed; |
reg use_rdfull_speed; |
reg sync_aclr_pre; |
reg sync_aclr; |
reg is_underflow; |
reg is_overflow; |
reg no_warn; |
reg feature_family_has_stratixiii_style_ram; |
reg feature_family_has_stratixii_style_ram; |
reg feature_family_stratixii; |
reg feature_family_cycloneii; |
reg feature_family_stratix; |
|
// INTERNAL WIRE DECLARATION |
wire [lpm_widthu:0] i_rs_dgwp; |
wire [lpm_widthu_r:0] i_ws_dgrp; |
wire [lpm_widthu_r:0] i_rdusedw; |
wire [lpm_widthu:0] i_wrusedw; |
wire i_rden; |
wire i_wren; |
wire write_aclr; |
|
// INTERNAL TRI DECLARATION |
tri0 aclr; |
|
// LOCAL INTEGER DECLARATION |
integer cnt_mod; |
integer cnt_mod_r; |
integer i; |
integer i_maximize_speed; |
integer i_mem_address; |
integer i_first_bit_position; |
|
// COMPONENT INSTANTIATION |
ALTERA_DEVICE_FAMILIES dev (); |
ALTERA_MF_HINT_EVALUATION eva(); |
|
// FUNCTION DELCRARATION |
// Convert string to integer |
function integer str_to_int; |
input [8*16:1] s; |
|
reg [8*16:1] reg_s; |
reg [8:1] digit; |
reg [8:1] tmp; |
integer m, ivalue; |
|
begin |
ivalue = 0; |
reg_s = s; |
for (m=1; m<=16; m=m+1) |
begin |
tmp = reg_s[128:121]; |
digit = tmp & 8'b00001111; |
reg_s = reg_s << 8; |
ivalue = ivalue * 10 + digit; |
end |
str_to_int = ivalue; |
end |
endfunction |
|
// INITIAL CONSTRUCT BLOCK |
initial |
begin |
|
feature_family_has_stratixiii_style_ram = dev.FEATURE_FAMILY_HAS_STRATIXIII_STYLE_RAM(intended_device_family); |
feature_family_has_stratixii_style_ram = dev.FEATURE_FAMILY_HAS_STRATIXII_STYLE_RAM(intended_device_family); |
feature_family_stratixii = dev.FEATURE_FAMILY_STRATIXII(intended_device_family); |
feature_family_cycloneii = dev.FEATURE_FAMILY_CYCLONEII(intended_device_family); |
feature_family_stratix = dev.FEATURE_FAMILY_STRATIX(intended_device_family); |
|
if ((lpm_showahead != "ON") && (lpm_showahead != "OFF")) |
$display ("Error! LPM_SHOWAHEAD must be ON or OFF."); |
if ((underflow_checking != "ON") && (underflow_checking != "OFF")) |
$display ("Error! UNDERFLOW_CHECKING must be ON or OFF."); |
if ((overflow_checking != "ON") && (overflow_checking != "OFF")) |
$display ("Error! OVERFLOW_CHECKING must be ON or OFF."); |
if (lpm_numwords > (1 << lpm_widthu)) |
$display ("Error! LPM_NUMWORDS must be less than or equal to 2**LPM_WIDTHU."); |
if (dev.IS_VALID_FAMILY(intended_device_family) == 0) |
$display ("Error! Unknown INTENDED_DEVICE_FAMILY=%s.", intended_device_family); |
|
for (i = 0; i < (1 << lpm_widthu_r) + WIDTH_RATIO; i = i + 1) |
mem_data[i] <= {lpm_width_r{1'b0}}; |
i_data_tmp <= 0; |
i_temp_reg <= 0; |
i_wren_tmp <= 0; |
i_rdptr_g <= 0; |
i_rdptr_g1p <= 1; |
i_wrptr_g <= 0; |
i_wrptr_g_tmp <= 0; |
i_wrptr_g1 <= 1; |
i_delayed_wrptr_g <= 0; |
i_rdempty <= 1; |
i_wrempty_area <= 1; |
i_wrempty_speed <= 1; |
i_rdempty_rreg <= 1; |
i_rdfull_speed <= 0; |
i_rdfull_area <= 0; |
i_wrfull <= 0; |
i_wrfull_wreg <= 0; |
sync_aclr_pre <= 1'b1; |
sync_aclr <= 1'b1; |
i_q <= {lpm_width_r{1'b0}}; |
is_underflow <= 0; |
is_overflow <= 0; |
no_warn <= 0; |
i_mem_address <= 0; |
i_first_bit_position <= 0; |
|
i_maximize_speed = str_to_int(eva.GET_PARAMETER_VALUE(lpm_hint, "MAXIMIZE_SPEED")); |
|
if (feature_family_has_stratixiii_style_ram == 1) |
begin |
use_wrempty_speed <= 1; |
use_rdfull_speed <= 1; |
end |
else if (feature_family_has_stratixii_style_ram == 1) |
begin |
use_wrempty_speed <= ((i_maximize_speed > 5) || (wrsync_delaypipe >= 2)) ? 1 : 0; |
use_rdfull_speed <= ((i_maximize_speed > 5) || (rdsync_delaypipe >= 2)) ? 1 : 0; |
end |
else |
begin |
use_wrempty_speed <= 0; |
use_rdfull_speed <= 0; |
end |
|
if (feature_family_has_stratixii_style_ram == 1) |
begin |
if (add_usedw_msb_bit == "OFF") |
begin |
if (lpm_width_r > lpm_width) |
begin |
cnt_mod <= (1 << lpm_widthu) + WIDTH_RATIO; |
cnt_mod_r <= (1 << lpm_widthu_r) + 1; |
end |
else |
begin |
cnt_mod <= (1 << lpm_widthu) + 1; |
cnt_mod_r <= (1 << lpm_widthu_r) + WIDTH_RATIO; |
end |
end |
else |
begin |
if (lpm_width_r > lpm_width) |
begin |
cnt_mod <= (1 << (lpm_widthu-1)) + WIDTH_RATIO; |
cnt_mod_r <= (1 << (lpm_widthu_r-1)) + 1; |
end |
else |
begin |
cnt_mod <= (1 << (lpm_widthu-1)) + 1; |
cnt_mod_r <= (1 << (lpm_widthu_r-1)) + WIDTH_RATIO; |
end |
end |
end |
else |
begin |
cnt_mod <= 1 << lpm_widthu; |
cnt_mod_r <= 1 << lpm_widthu_r; |
end |
|
if ((lpm_showahead == "OFF") && |
((feature_family_stratixii == 1) || |
((feature_family_cycloneii == 1)))) |
i_q_is_registered = 1'b1; |
else |
i_q_is_registered = 1'b0; |
end |
|
// COMPONENT INSTANTIATIONS |
dcfifo_dffpipe DP_WS_DGRP ( |
.d (i_rdptr_g), |
.clock (wrclk), |
.aclr (aclr), |
.q (i_ws_dgrp)); |
defparam |
DP_WS_DGRP.lpm_delay = wrsync_delaypipe, |
DP_WS_DGRP.lpm_width = lpm_widthu_r + 1; |
|
dcfifo_dffpipe DP_RS_DGWP ( |
.d (i_delayed_wrptr_g), |
.clock (rdclk), |
.aclr (aclr), |
.q (i_rs_dgwp)); |
defparam |
DP_RS_DGWP.lpm_delay = rdsync_delaypipe, |
DP_RS_DGWP.lpm_width = lpm_widthu + 1; |
|
dcfifo_dffpipe DP_RDUSEDW ( |
.d (i_rdusedw_tmp), |
.clock (rdclk), |
.aclr (aclr), |
.q (i_rdusedw)); |
dcfifo_dffpipe DP_WRUSEDW ( |
.d (i_wrusedw_tmp), |
.clock (wrclk), |
.aclr (aclr), |
.q (i_wrusedw)); |
defparam |
DP_RDUSEDW.lpm_delay = (delay_rdusedw > 2) ? 2 : delay_rdusedw, |
DP_RDUSEDW.lpm_width = lpm_widthu_r + 1, |
DP_WRUSEDW.lpm_delay = (delay_wrusedw > 2) ? 2 : delay_wrusedw, |
DP_WRUSEDW.lpm_width = lpm_widthu + 1; |
|
// ALWAYS CONSTRUCT BLOCK |
always @(posedge aclr) |
begin |
i_data_tmp <= 0; |
i_wren_tmp <= 0; |
i_rdptr_g <= 0; |
i_rdptr_g1p <= 1; |
i_wrptr_g <= 0; |
i_wrptr_g_tmp <= 0; |
i_wrptr_g1 <= 1; |
i_delayed_wrptr_g <= 0; |
i_rdempty <= 1; |
i_wrempty_area <= 1; |
i_wrempty_speed <= 1; |
i_rdempty_rreg <= 1; |
i_rdfull_speed <= 0; |
i_rdfull_area <= 0; |
i_wrfull <= 0; |
i_wrfull_wreg <= 0; |
is_underflow <= 0; |
is_overflow <= 0; |
no_warn <= 0; |
i_mem_address <= 0; |
i_first_bit_position <= 0; |
|
if(i_q_is_registered) |
i_q <= 0; |
else if ((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1)) |
i_q <= {lpm_width_r{1'bx}}; |
|
end // @(posedge aclr) |
|
always @(posedge wrclk or posedge aclr) |
begin |
if ($time > 0) |
begin |
if (aclr) |
begin |
sync_aclr <= 1'b1; |
sync_aclr_pre <= 1'b1; |
end |
else |
begin |
sync_aclr <= sync_aclr_pre; |
sync_aclr_pre <= 1'b0; |
end |
end |
end |
|
always @(posedge wrclk) |
begin |
i_data_tmp <= data; |
i_wrptr_g_tmp <= i_wrptr_g; |
i_wren_tmp <= i_wren; |
|
if (~write_aclr && ($time > 0)) |
begin |
if (i_wren) |
begin |
if (i_wrfull && (overflow_checking == "OFF")) |
begin |
if (((feature_family_has_stratixii_style_ram == 1) && |
((use_eab == "ON") || ((use_eab == "OFF") && (lpm_width != lpm_width_r) && (lpm_width_r != 0)) || |
((lpm_numwords < 16) && (clocks_are_synchronized == "FALSE")))) || |
((feature_family_stratix == 1) && (use_eab == "ON") && |
(((lpm_showahead == "ON") && (add_ram_output_register == "OFF")) || |
(clocks_are_synchronized == "FALSE_LOW_LATENCY")))) |
begin |
if (no_warn == 1'b0) |
begin |
$display("Warning : Overflow occurred! Fifo output is unknown until the next reset is asserted."); |
$display("Time: %0t Instance: %m", $time); |
no_warn <= 1'b1; |
end |
is_overflow <= 1'b1; |
end |
end |
else |
begin |
if (i_wrptr_g1 < cnt_mod - 1) |
i_wrptr_g1 <= i_wrptr_g1 + 1; |
else |
i_wrptr_g1 <= 0; |
|
i_wrptr_g <= i_wrptr_g1; |
|
if (lpm_width > lpm_width_r) |
begin |
for (i = 0; i < WIDTH_RATIO; i = i+1) |
mem_data[i_wrptr_g*WIDTH_RATIO+i] <= data >> (lpm_width_r*i); |
end |
else if (lpm_width < lpm_width_r) |
begin |
i_mem_address <= i_wrptr_g1 /WIDTH_RATIO; |
i_first_bit_position <= (i_wrptr_g1 % WIDTH_RATIO) *lpm_width; |
for(i = 0; i < lpm_width; i = i+1) |
mem_data[i_mem_address][i_first_bit_position + i] <= data[i]; |
end |
else |
mem_data[i_wrptr_g] <= data; |
end |
end |
i_delayed_wrptr_g <= i_wrptr_g; |
end |
end // @(wrclk) |
|
always @(posedge rdclk) |
begin |
if(~aclr) |
begin |
if (i_rden && ($time > 0)) |
begin |
if (i_rdempty && (underflow_checking == "OFF")) |
begin |
if (((feature_family_has_stratixii_style_ram == 1) && |
((use_eab == "ON") || ((use_eab == "OFF") && (lpm_width != lpm_width_r) && (lpm_width_r != 0)) || |
((lpm_numwords < 16) && (clocks_are_synchronized == "FALSE")))) || |
((feature_family_stratix == 1) && (use_eab == "ON") && |
(((lpm_showahead == "ON") && (add_ram_output_register == "OFF")) || |
(clocks_are_synchronized == "FALSE_LOW_LATENCY")))) |
begin |
if (no_warn == 1'b0) |
begin |
$display("Warning : Underflow occurred! Fifo output is unknown until the next reset is asserted."); |
$display("Time: %0t Instance: %m", $time); |
no_warn <= 1'b1; |
end |
is_underflow <= 1'b1; |
end |
end |
else |
begin |
if (i_rdptr_g1p < cnt_mod_r - 1) |
i_rdptr_g1p <= i_rdptr_g1p + 1; |
else |
i_rdptr_g1p <= 0; |
|
i_rdptr_g <= i_rdptr_g1p; |
end |
end |
end |
end |
|
always @(posedge rdclk) |
begin |
if (is_underflow || is_overflow) |
i_q <= {lpm_width_r{1'bx}}; |
else |
begin |
if ((! i_q_is_registered) && ($time > 0)) |
begin |
if (aclr && ((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1))) |
i_q <= {lpm_width_r{1'bx}}; |
else |
begin |
if (i_rdempty == 1'b1) |
i_q <= mem_data[i_rdptr_g]; |
else if (i_rden) |
i_q <= mem_data[i_rdptr_g1p]; |
end |
end |
else if (~aclr && i_rden && ($time > 0)) |
i_q <= mem_data[i_rdptr_g]; |
end |
end |
|
// Usedw, Empty, Full |
always @(i_wrptr_g or i_ws_dgrp or cnt_mod) |
begin |
if (i_wrptr_g < (i_ws_dgrp*lpm_width_r/lpm_width)) |
i_wrusedw_tmp <= cnt_mod + i_wrptr_g - i_ws_dgrp*lpm_width_r/lpm_width; |
else |
i_wrusedw_tmp <= i_wrptr_g - i_ws_dgrp*lpm_width_r/lpm_width; |
|
if (lpm_width > lpm_width_r) |
begin |
if (i_wrptr_g == (i_ws_dgrp/WIDTH_RATIO)) |
i_wrempty_speed <= 1; |
else |
i_wrempty_speed <= 0; |
end |
else |
begin |
if ((i_wrptr_g/WIDTH_RATIO) == i_ws_dgrp) |
i_wrempty_speed <= 1; |
else |
i_wrempty_speed <= 0; |
end |
end // @(i_wrptr_g or i_ws_dgrp) |
|
always @(i_rdptr_g or i_rs_dgwp or cnt_mod) |
begin |
if ((i_rs_dgwp*lpm_width/lpm_width_r) < i_rdptr_g) |
i_rdusedw_tmp <= (cnt_mod + i_rs_dgwp)*lpm_width/lpm_width_r - i_rdptr_g; |
else |
i_rdusedw_tmp <= i_rs_dgwp*lpm_width/lpm_width_r - i_rdptr_g; |
|
if (lpm_width < lpm_width_r) |
begin |
if ((i_rdptr_g*lpm_width_r/lpm_width) == (i_rs_dgwp + WIDTH_RATIO) %cnt_mod) |
i_rdfull_speed <= 1; |
else |
i_rdfull_speed <= 0; |
end |
else |
begin |
if (i_rdptr_g == ((i_rs_dgwp +1) % cnt_mod)*lpm_width/lpm_width_r) |
i_rdfull_speed <= 1; |
else |
i_rdfull_speed <= 0; |
end |
end // @(i_wrptr_g or i_rs_dgwp) |
|
always @(i_wrptr_g1 or i_ws_dgrp or cnt_mod) |
begin |
if (lpm_width < lpm_width_r) |
begin |
if ((i_wrptr_g1 + WIDTH_RATIO -1) % cnt_mod == (i_ws_dgrp*lpm_width_r/lpm_width)) |
i_wrfull <= 1; |
else |
i_wrfull <= 0; |
end |
else |
begin |
if (i_wrptr_g1 == (i_ws_dgrp*lpm_width_r/lpm_width)) |
i_wrfull <= 1; |
else |
i_wrfull <= 0; |
end |
end // @(i_wrptr_g1 or i_ws_dgrp) |
|
always @(i_rdptr_g or i_rs_dgwp) |
begin |
if (lpm_width > lpm_width_r) |
begin |
if ((i_rdptr_g/WIDTH_RATIO) == i_rs_dgwp) |
i_rdempty <= 1; |
else |
i_rdempty <= 0; |
end |
else |
begin |
if (i_rdptr_g == i_rs_dgwp/WIDTH_RATIO) |
i_rdempty <= 1; |
else |
i_rdempty <= 0; |
end |
end // @(i_rdptr_g or i_rs_dgwp) |
|
always @(posedge rdclk) |
begin |
i_rdfull_area <= i_wrfull_wreg; |
i_rdempty_rreg <= i_rdempty; |
end // @(posedge rdclk) |
|
always @(posedge wrclk) |
begin |
i_wrempty_area <= i_rdempty_rreg; |
|
if ((~aclr) && (write_aclr_synch == "ON") && ((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1))) |
i_wrfull_wreg <= (i_wrfull | write_aclr); |
else |
i_wrfull_wreg <= i_wrfull; |
end // @(posedge wrclk) |
|
// CONTINOUS ASSIGNMENT |
assign i_rden = (underflow_checking == "OFF") ? rdreq : (rdreq && !i_rdempty); |
assign i_wren = (((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1)) && |
(write_aclr_synch == "ON")) ? |
((overflow_checking == "OFF") ? wrreq && (!sync_aclr) |
: (wrreq && !(i_wrfull | sync_aclr))) : |
(overflow_checking == "OFF") ? wrreq : (wrreq && !i_wrfull); |
assign rdempty = (is_underflow || is_overflow) ? 1'bx : i_rdempty; |
assign wrempty = (is_underflow || is_overflow) ? 1'bx : |
(use_wrempty_speed) ? i_wrempty_speed : i_wrempty_area; |
assign rdfull = (is_underflow || is_overflow) ? 1'bx : |
(use_rdfull_speed) ? i_rdfull_speed : i_rdfull_area; |
assign wrfull = (is_underflow || is_overflow) ? 1'bx : |
(((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1)) && |
(write_aclr_synch == "ON")) ? (i_wrfull | write_aclr) : i_wrfull; |
assign wrusedw = (is_underflow || is_overflow) ? {lpm_widthu{1'bx}} : |
i_wrusedw[lpm_widthu-1:0]; |
assign rdusedw = (is_underflow || is_overflow) ? {lpm_widthu_r{1'bx}} : |
i_rdusedw[lpm_widthu_r-1:0]; |
assign q = (is_underflow || is_overflow) ? {lpm_width_r{1'bx}} : i_q; |
assign write_aclr = (((feature_family_stratixii == 1) || |
(feature_family_cycloneii == 1)) && |
(write_aclr_synch == "ON")) ? sync_aclr : aclr; |
|
endmodule // dcfifo_low_latency |
// END OF MODULE |
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo_mixed_widths |
// |
// Description : Mixed widths Dual Clocks FIFO |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo_mixed_widths ( data, rdclk, wrclk, aclr, rdreq, wrreq, |
rdfull, wrfull, rdempty, wrempty, rdusedw, wrusedw, q); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_width = 1; |
parameter lpm_widthu = 1; |
parameter lpm_width_r = lpm_width; |
parameter lpm_widthu_r = lpm_widthu; |
parameter lpm_numwords = 2; |
parameter delay_rdusedw = 1; |
parameter delay_wrusedw = 1; |
parameter rdsync_delaypipe = 0; |
parameter wrsync_delaypipe = 0; |
parameter intended_device_family = "Stratix"; |
parameter lpm_showahead = "OFF"; |
parameter underflow_checking = "ON"; |
parameter overflow_checking = "ON"; |
parameter clocks_are_synchronized = "FALSE"; |
parameter use_eab = "ON"; |
parameter add_ram_output_register = "OFF"; |
parameter lpm_hint = "USE_EAB=ON"; |
parameter lpm_type = "dcfifo_mixed_widths"; |
parameter add_usedw_msb_bit = "OFF"; |
parameter write_aclr_synch = "OFF"; |
|
// LOCAL_PARAMETERS_BEGIN |
|
parameter add_width = 1; |
parameter ram_block_type = "AUTO"; |
|
parameter FAMILY_HAS_STRATIXII_STYLE_RAM = (((((intended_device_family == "Stratix II") || (intended_device_family == "STRATIX II") || (intended_device_family == "stratix ii") || (intended_device_family == "StratixII") || (intended_device_family == "STRATIXII") || (intended_device_family == "stratixii") || (intended_device_family == "Armstrong") || (intended_device_family == "ARMSTRONG") || (intended_device_family == "armstrong")) |
|| ((intended_device_family == "HardCopy II") || (intended_device_family == "HARDCOPY II") || (intended_device_family == "hardcopy ii") || (intended_device_family == "HardCopyII") || (intended_device_family == "HARDCOPYII") || (intended_device_family == "hardcopyii") || (intended_device_family == "Fusion") || (intended_device_family == "FUSION") || (intended_device_family == "fusion")) |
|| (((intended_device_family == "Stratix II GX") || (intended_device_family == "STRATIX II GX") || (intended_device_family == "stratix ii gx") || (intended_device_family == "StratixIIGX") || (intended_device_family == "STRATIXIIGX") || (intended_device_family == "stratixiigx")) |
|| ((intended_device_family == "Arria GX") || (intended_device_family == "ARRIA GX") || (intended_device_family == "arria gx") || (intended_device_family == "ArriaGX") || (intended_device_family == "ARRIAGX") || (intended_device_family == "arriagx") || (intended_device_family == "Stratix II GX Lite") || (intended_device_family == "STRATIX II GX LITE") || (intended_device_family == "stratix ii gx lite") || (intended_device_family == "StratixIIGXLite") || (intended_device_family == "STRATIXIIGXLITE") || (intended_device_family == "stratixiigxlite")) |
) || (((intended_device_family == "Stratix III") || (intended_device_family == "STRATIX III") || (intended_device_family == "stratix iii") || (intended_device_family == "StratixIII") || (intended_device_family == "STRATIXIII") || (intended_device_family == "stratixiii") || (intended_device_family == "Titan") || (intended_device_family == "TITAN") || (intended_device_family == "titan") || (intended_device_family == "SIII") || (intended_device_family == "siii")) |
|| (((intended_device_family == "Stratix IV") || (intended_device_family == "STRATIX IV") || (intended_device_family == "stratix iv") || (intended_device_family == "TGX") || (intended_device_family == "tgx") || (intended_device_family == "StratixIV") || (intended_device_family == "STRATIXIV") || (intended_device_family == "stratixiv") || (intended_device_family == "Stratix IV (GT)") || (intended_device_family == "STRATIX IV (GT)") || (intended_device_family == "stratix iv (gt)") || (intended_device_family == "Stratix IV (GX)") || (intended_device_family == "STRATIX IV (GX)") || (intended_device_family == "stratix iv (gx)") || (intended_device_family == "Stratix IV (E)") || (intended_device_family == "STRATIX IV (E)") || (intended_device_family == "stratix iv (e)") || (intended_device_family == "StratixIV(GT)") || (intended_device_family == "STRATIXIV(GT)") || (intended_device_family == "stratixiv(gt)") || (intended_device_family == "StratixIV(GX)") || (intended_device_family == "STRATIXIV(GX)") || (intended_device_family == "stratixiv(gx)") || (intended_device_family == "StratixIV(E)") || (intended_device_family == "STRATIXIV(E)") || (intended_device_family == "stratixiv(e)") || (intended_device_family == "StratixIIIGX") || (intended_device_family == "STRATIXIIIGX") || (intended_device_family == "stratixiiigx") || (intended_device_family == "Stratix IV (GT/GX/E)") || (intended_device_family == "STRATIX IV (GT/GX/E)") || (intended_device_family == "stratix iv (gt/gx/e)") || (intended_device_family == "Stratix IV (GT/E/GX)") || (intended_device_family == "STRATIX IV (GT/E/GX)") || (intended_device_family == "stratix iv (gt/e/gx)") || (intended_device_family == "Stratix IV (E/GT/GX)") || (intended_device_family == "STRATIX IV (E/GT/GX)") || (intended_device_family == "stratix iv (e/gt/gx)") || (intended_device_family == "Stratix IV (E/GX/GT)") || (intended_device_family == "STRATIX IV (E/GX/GT)") || (intended_device_family == "stratix iv (e/gx/gt)") || (intended_device_family == "StratixIV(GT/GX/E)") || (intended_device_family == "STRATIXIV(GT/GX/E)") || (intended_device_family == "stratixiv(gt/gx/e)") || (intended_device_family == "StratixIV(GT/E/GX)") || (intended_device_family == "STRATIXIV(GT/E/GX)") || (intended_device_family == "stratixiv(gt/e/gx)") || (intended_device_family == "StratixIV(E/GX/GT)") || (intended_device_family == "STRATIXIV(E/GX/GT)") || (intended_device_family == "stratixiv(e/gx/gt)") || (intended_device_family == "StratixIV(E/GT/GX)") || (intended_device_family == "STRATIXIV(E/GT/GX)") || (intended_device_family == "stratixiv(e/gt/gx)") || (intended_device_family == "Stratix IV (GX/E)") || (intended_device_family == "STRATIX IV (GX/E)") || (intended_device_family == "stratix iv (gx/e)") || (intended_device_family == "StratixIV(GX/E)") || (intended_device_family == "STRATIXIV(GX/E)") || (intended_device_family == "stratixiv(gx/e)")) |
|| ((intended_device_family == "Arria II GX") || (intended_device_family == "ARRIA II GX") || (intended_device_family == "arria ii gx") || (intended_device_family == "ArriaIIGX") || (intended_device_family == "ARRIAIIGX") || (intended_device_family == "arriaiigx") || (intended_device_family == "Arria IIGX") || (intended_device_family == "ARRIA IIGX") || (intended_device_family == "arria iigx") || (intended_device_family == "ArriaII GX") || (intended_device_family == "ARRIAII GX") || (intended_device_family == "arriaii gx") || (intended_device_family == "Arria II") || (intended_device_family == "ARRIA II") || (intended_device_family == "arria ii") || (intended_device_family == "ArriaII") || (intended_device_family == "ARRIAII") || (intended_device_family == "arriaii") || (intended_device_family == "Arria II (GX/E)") || (intended_device_family == "ARRIA II (GX/E)") || (intended_device_family == "arria ii (gx/e)") || (intended_device_family == "ArriaII(GX/E)") || (intended_device_family == "ARRIAII(GX/E)") || (intended_device_family == "arriaii(gx/e)") || (intended_device_family == "PIRANHA") || (intended_device_family == "piranha")) |
|| ((intended_device_family == "HardCopy IV") || (intended_device_family == "HARDCOPY IV") || (intended_device_family == "hardcopy iv") || (intended_device_family == "HardCopyIV") || (intended_device_family == "HARDCOPYIV") || (intended_device_family == "hardcopyiv") || (intended_device_family == "HardCopy IV (GX)") || (intended_device_family == "HARDCOPY IV (GX)") || (intended_device_family == "hardcopy iv (gx)") || (intended_device_family == "HardCopy IV (E)") || (intended_device_family == "HARDCOPY IV (E)") || (intended_device_family == "hardcopy iv (e)") || (intended_device_family == "HardCopyIV(GX)") || (intended_device_family == "HARDCOPYIV(GX)") || (intended_device_family == "hardcopyiv(gx)") || (intended_device_family == "HardCopyIV(E)") || (intended_device_family == "HARDCOPYIV(E)") || (intended_device_family == "hardcopyiv(e)") || (intended_device_family == "HCXIV") || (intended_device_family == "hcxiv") || (intended_device_family == "HardCopy IV (GX/E)") || (intended_device_family == "HARDCOPY IV (GX/E)") || (intended_device_family == "hardcopy iv (gx/e)") || (intended_device_family == "HardCopy IV (E/GX)") || (intended_device_family == "HARDCOPY IV (E/GX)") || (intended_device_family == "hardcopy iv (e/gx)") || (intended_device_family == "HardCopyIV(GX/E)") || (intended_device_family == "HARDCOPYIV(GX/E)") || (intended_device_family == "hardcopyiv(gx/e)") || (intended_device_family == "HardCopyIV(E/GX)") || (intended_device_family == "HARDCOPYIV(E/GX)") || (intended_device_family == "hardcopyiv(e/gx)")) |
|| (((intended_device_family == "Stratix V") || (intended_device_family == "STRATIX V") || (intended_device_family == "stratix v") || (intended_device_family == "StratixV") || (intended_device_family == "STRATIXV") || (intended_device_family == "stratixv") || (intended_device_family == "Stratix V (GS)") || (intended_device_family == "STRATIX V (GS)") || (intended_device_family == "stratix v (gs)") || (intended_device_family == "StratixV(GS)") || (intended_device_family == "STRATIXV(GS)") || (intended_device_family == "stratixv(gs)") || (intended_device_family == "Stratix V (GX)") || (intended_device_family == "STRATIX V (GX)") || (intended_device_family == "stratix v (gx)") || (intended_device_family == "StratixV(GX)") || (intended_device_family == "STRATIXV(GX)") || (intended_device_family == "stratixv(gx)") || (intended_device_family == "Stratix V (GS/GX)") || (intended_device_family == "STRATIX V (GS/GX)") || (intended_device_family == "stratix v (gs/gx)") || (intended_device_family == "StratixV(GS/GX)") || (intended_device_family == "STRATIXV(GS/GX)") || (intended_device_family == "stratixv(gs/gx)") || (intended_device_family == "Stratix V (GX/GS)") || (intended_device_family == "STRATIX V (GX/GS)") || (intended_device_family == "stratix v (gx/gs)") || (intended_device_family == "StratixV(GX/GS)") || (intended_device_family == "STRATIXV(GX/GS)") || (intended_device_family == "stratixv(gx/gs)")) |
) || (((intended_device_family == "Arria II GZ") || (intended_device_family == "ARRIA II GZ") || (intended_device_family == "arria ii gz") || (intended_device_family == "ArriaII GZ") || (intended_device_family == "ARRIAII GZ") || (intended_device_family == "arriaii gz") || (intended_device_family == "Arria IIGZ") || (intended_device_family == "ARRIA IIGZ") || (intended_device_family == "arria iigz") || (intended_device_family == "ArriaIIGZ") || (intended_device_family == "ARRIAIIGZ") || (intended_device_family == "arriaiigz")) |
) ) || ((intended_device_family == "HardCopy III") || (intended_device_family == "HARDCOPY III") || (intended_device_family == "hardcopy iii") || (intended_device_family == "HardCopyIII") || (intended_device_family == "HARDCOPYIII") || (intended_device_family == "hardcopyiii") || (intended_device_family == "HCX") || (intended_device_family == "hcx")) |
) ) || (((intended_device_family == "Cyclone II") || (intended_device_family == "CYCLONE II") || (intended_device_family == "cyclone ii") || (intended_device_family == "Cycloneii") || (intended_device_family == "CYCLONEII") || (intended_device_family == "cycloneii") || (intended_device_family == "Magellan") || (intended_device_family == "MAGELLAN") || (intended_device_family == "magellan")) |
|| (((intended_device_family == "Cyclone III") || (intended_device_family == "CYCLONE III") || (intended_device_family == "cyclone iii") || (intended_device_family == "CycloneIII") || (intended_device_family == "CYCLONEIII") || (intended_device_family == "cycloneiii") || (intended_device_family == "Barracuda") || (intended_device_family == "BARRACUDA") || (intended_device_family == "barracuda") || (intended_device_family == "Cuda") || (intended_device_family == "CUDA") || (intended_device_family == "cuda") || (intended_device_family == "CIII") || (intended_device_family == "ciii")) |
|| ((intended_device_family == "Cyclone III LS") || (intended_device_family == "CYCLONE III LS") || (intended_device_family == "cyclone iii ls") || (intended_device_family == "CycloneIIILS") || (intended_device_family == "CYCLONEIIILS") || (intended_device_family == "cycloneiiils") || (intended_device_family == "Cyclone III LPS") || (intended_device_family == "CYCLONE III LPS") || (intended_device_family == "cyclone iii lps") || (intended_device_family == "Cyclone LPS") || (intended_device_family == "CYCLONE LPS") || (intended_device_family == "cyclone lps") || (intended_device_family == "CycloneLPS") || (intended_device_family == "CYCLONELPS") || (intended_device_family == "cyclonelps") || (intended_device_family == "Tarpon") || (intended_device_family == "TARPON") || (intended_device_family == "tarpon") || (intended_device_family == "Cyclone IIIE") || (intended_device_family == "CYCLONE IIIE") || (intended_device_family == "cyclone iiie")) |
|| (((intended_device_family == "Cyclone IV GX") || (intended_device_family == "CYCLONE IV GX") || (intended_device_family == "cyclone iv gx") || (intended_device_family == "Cyclone IVGX") || (intended_device_family == "CYCLONE IVGX") || (intended_device_family == "cyclone ivgx") || (intended_device_family == "CycloneIV GX") || (intended_device_family == "CYCLONEIV GX") || (intended_device_family == "cycloneiv gx") || (intended_device_family == "CycloneIVGX") || (intended_device_family == "CYCLONEIVGX") || (intended_device_family == "cycloneivgx") || (intended_device_family == "Cyclone IV") || (intended_device_family == "CYCLONE IV") || (intended_device_family == "cyclone iv") || (intended_device_family == "CycloneIV") || (intended_device_family == "CYCLONEIV") || (intended_device_family == "cycloneiv") || (intended_device_family == "Cyclone IV (GX)") || (intended_device_family == "CYCLONE IV (GX)") || (intended_device_family == "cyclone iv (gx)") || (intended_device_family == "CycloneIV(GX)") || (intended_device_family == "CYCLONEIV(GX)") || (intended_device_family == "cycloneiv(gx)") || (intended_device_family == "Cyclone III GX") || (intended_device_family == "CYCLONE III GX") || (intended_device_family == "cyclone iii gx") || (intended_device_family == "CycloneIII GX") || (intended_device_family == "CYCLONEIII GX") || (intended_device_family == "cycloneiii gx") || (intended_device_family == "Cyclone IIIGX") || (intended_device_family == "CYCLONE IIIGX") || (intended_device_family == "cyclone iiigx") || (intended_device_family == "CycloneIIIGX") || (intended_device_family == "CYCLONEIIIGX") || (intended_device_family == "cycloneiiigx") || (intended_device_family == "Cyclone III GL") || (intended_device_family == "CYCLONE III GL") || (intended_device_family == "cyclone iii gl") || (intended_device_family == "CycloneIII GL") || (intended_device_family == "CYCLONEIII GL") || (intended_device_family == "cycloneiii gl") || (intended_device_family == "Cyclone IIIGL") || (intended_device_family == "CYCLONE IIIGL") || (intended_device_family == "cyclone iiigl") || (intended_device_family == "CycloneIIIGL") || (intended_device_family == "CYCLONEIIIGL") || (intended_device_family == "cycloneiiigl") || (intended_device_family == "Stingray") || (intended_device_family == "STINGRAY") || (intended_device_family == "stingray")) |
|| ((intended_device_family == "Cyclone IV GX") || (intended_device_family == "CYCLONE IV GX") || (intended_device_family == "cyclone iv gx") || (intended_device_family == "Cyclone IVGX") || (intended_device_family == "CYCLONE IVGX") || (intended_device_family == "cyclone ivgx") || (intended_device_family == "CycloneIV GX") || (intended_device_family == "CYCLONEIV GX") || (intended_device_family == "cycloneiv gx") || (intended_device_family == "CycloneIVGX") || (intended_device_family == "CYCLONEIVGX") || (intended_device_family == "cycloneivgx") || (intended_device_family == "Cyclone IV") || (intended_device_family == "CYCLONE IV") || (intended_device_family == "cyclone iv") || (intended_device_family == "CycloneIV") || (intended_device_family == "CYCLONEIV") || (intended_device_family == "cycloneiv") || (intended_device_family == "Cyclone IV (GX)") || (intended_device_family == "CYCLONE IV (GX)") || (intended_device_family == "cyclone iv (gx)") || (intended_device_family == "CycloneIV(GX)") || (intended_device_family == "CYCLONEIV(GX)") || (intended_device_family == "cycloneiv(gx)") || (intended_device_family == "Cyclone III GX") || (intended_device_family == "CYCLONE III GX") || (intended_device_family == "cyclone iii gx") || (intended_device_family == "CycloneIII GX") || (intended_device_family == "CYCLONEIII GX") || (intended_device_family == "cycloneiii gx") || (intended_device_family == "Cyclone IIIGX") || (intended_device_family == "CYCLONE IIIGX") || (intended_device_family == "cyclone iiigx") || (intended_device_family == "CycloneIIIGX") || (intended_device_family == "CYCLONEIIIGX") || (intended_device_family == "cycloneiiigx") || (intended_device_family == "Cyclone III GL") || (intended_device_family == "CYCLONE III GL") || (intended_device_family == "cyclone iii gl") || (intended_device_family == "CycloneIII GL") || (intended_device_family == "CYCLONEIII GL") || (intended_device_family == "cycloneiii gl") || (intended_device_family == "Cyclone IIIGL") || (intended_device_family == "CYCLONE IIIGL") || (intended_device_family == "cyclone iiigl") || (intended_device_family == "CycloneIIIGL") || (intended_device_family == "CYCLONEIIIGL") || (intended_device_family == "cycloneiiigl") || (intended_device_family == "Stingray") || (intended_device_family == "STINGRAY") || (intended_device_family == "stingray")) |
) || (((intended_device_family == "Cyclone IV E") || (intended_device_family == "CYCLONE IV E") || (intended_device_family == "cyclone iv e") || (intended_device_family == "CycloneIV E") || (intended_device_family == "CYCLONEIV E") || (intended_device_family == "cycloneiv e") || (intended_device_family == "Cyclone IVE") || (intended_device_family == "CYCLONE IVE") || (intended_device_family == "cyclone ive") || (intended_device_family == "CycloneIVE") || (intended_device_family == "CYCLONEIVE") || (intended_device_family == "cycloneive")) |
) ) ) )) |
? 1 : 0; |
|
parameter FAMILY_HAS_STRATIXIII_STYLE_RAM = (((((intended_device_family == "Stratix III") || (intended_device_family == "STRATIX III") || (intended_device_family == "stratix iii") || (intended_device_family == "StratixIII") || (intended_device_family == "STRATIXIII") || (intended_device_family == "stratixiii") || (intended_device_family == "Titan") || (intended_device_family == "TITAN") || (intended_device_family == "titan") || (intended_device_family == "SIII") || (intended_device_family == "siii")) |
|| (((intended_device_family == "Stratix IV") || (intended_device_family == "STRATIX IV") || (intended_device_family == "stratix iv") || (intended_device_family == "TGX") || (intended_device_family == "tgx") || (intended_device_family == "StratixIV") || (intended_device_family == "STRATIXIV") || (intended_device_family == "stratixiv") || (intended_device_family == "Stratix IV (GT)") || (intended_device_family == "STRATIX IV (GT)") || (intended_device_family == "stratix iv (gt)") || (intended_device_family == "Stratix IV (GX)") || (intended_device_family == "STRATIX IV (GX)") || (intended_device_family == "stratix iv (gx)") || (intended_device_family == "Stratix IV (E)") || (intended_device_family == "STRATIX IV (E)") || (intended_device_family == "stratix iv (e)") || (intended_device_family == "StratixIV(GT)") || (intended_device_family == "STRATIXIV(GT)") || (intended_device_family == "stratixiv(gt)") || (intended_device_family == "StratixIV(GX)") || (intended_device_family == "STRATIXIV(GX)") || (intended_device_family == "stratixiv(gx)") || (intended_device_family == "StratixIV(E)") || (intended_device_family == "STRATIXIV(E)") || (intended_device_family == "stratixiv(e)") || (intended_device_family == "StratixIIIGX") || (intended_device_family == "STRATIXIIIGX") || (intended_device_family == "stratixiiigx") || (intended_device_family == "Stratix IV (GT/GX/E)") || (intended_device_family == "STRATIX IV (GT/GX/E)") || (intended_device_family == "stratix iv (gt/gx/e)") || (intended_device_family == "Stratix IV (GT/E/GX)") || (intended_device_family == "STRATIX IV (GT/E/GX)") || (intended_device_family == "stratix iv (gt/e/gx)") || (intended_device_family == "Stratix IV (E/GT/GX)") || (intended_device_family == "STRATIX IV (E/GT/GX)") || (intended_device_family == "stratix iv (e/gt/gx)") || (intended_device_family == "Stratix IV (E/GX/GT)") || (intended_device_family == "STRATIX IV (E/GX/GT)") || (intended_device_family == "stratix iv (e/gx/gt)") || (intended_device_family == "StratixIV(GT/GX/E)") || (intended_device_family == "STRATIXIV(GT/GX/E)") || (intended_device_family == "stratixiv(gt/gx/e)") || (intended_device_family == "StratixIV(GT/E/GX)") || (intended_device_family == "STRATIXIV(GT/E/GX)") || (intended_device_family == "stratixiv(gt/e/gx)") || (intended_device_family == "StratixIV(E/GX/GT)") || (intended_device_family == "STRATIXIV(E/GX/GT)") || (intended_device_family == "stratixiv(e/gx/gt)") || (intended_device_family == "StratixIV(E/GT/GX)") || (intended_device_family == "STRATIXIV(E/GT/GX)") || (intended_device_family == "stratixiv(e/gt/gx)") || (intended_device_family == "Stratix IV (GX/E)") || (intended_device_family == "STRATIX IV (GX/E)") || (intended_device_family == "stratix iv (gx/e)") || (intended_device_family == "StratixIV(GX/E)") || (intended_device_family == "STRATIXIV(GX/E)") || (intended_device_family == "stratixiv(gx/e)")) |
|| ((intended_device_family == "Arria II GX") || (intended_device_family == "ARRIA II GX") || (intended_device_family == "arria ii gx") || (intended_device_family == "ArriaIIGX") || (intended_device_family == "ARRIAIIGX") || (intended_device_family == "arriaiigx") || (intended_device_family == "Arria IIGX") || (intended_device_family == "ARRIA IIGX") || (intended_device_family == "arria iigx") || (intended_device_family == "ArriaII GX") || (intended_device_family == "ARRIAII GX") || (intended_device_family == "arriaii gx") || (intended_device_family == "Arria II") || (intended_device_family == "ARRIA II") || (intended_device_family == "arria ii") || (intended_device_family == "ArriaII") || (intended_device_family == "ARRIAII") || (intended_device_family == "arriaii") || (intended_device_family == "Arria II (GX/E)") || (intended_device_family == "ARRIA II (GX/E)") || (intended_device_family == "arria ii (gx/e)") || (intended_device_family == "ArriaII(GX/E)") || (intended_device_family == "ARRIAII(GX/E)") || (intended_device_family == "arriaii(gx/e)") || (intended_device_family == "PIRANHA") || (intended_device_family == "piranha")) |
|| ((intended_device_family == "HardCopy IV") || (intended_device_family == "HARDCOPY IV") || (intended_device_family == "hardcopy iv") || (intended_device_family == "HardCopyIV") || (intended_device_family == "HARDCOPYIV") || (intended_device_family == "hardcopyiv") || (intended_device_family == "HardCopy IV (GX)") || (intended_device_family == "HARDCOPY IV (GX)") || (intended_device_family == "hardcopy iv (gx)") || (intended_device_family == "HardCopy IV (E)") || (intended_device_family == "HARDCOPY IV (E)") || (intended_device_family == "hardcopy iv (e)") || (intended_device_family == "HardCopyIV(GX)") || (intended_device_family == "HARDCOPYIV(GX)") || (intended_device_family == "hardcopyiv(gx)") || (intended_device_family == "HardCopyIV(E)") || (intended_device_family == "HARDCOPYIV(E)") || (intended_device_family == "hardcopyiv(e)") || (intended_device_family == "HCXIV") || (intended_device_family == "hcxiv") || (intended_device_family == "HardCopy IV (GX/E)") || (intended_device_family == "HARDCOPY IV (GX/E)") || (intended_device_family == "hardcopy iv (gx/e)") || (intended_device_family == "HardCopy IV (E/GX)") || (intended_device_family == "HARDCOPY IV (E/GX)") || (intended_device_family == "hardcopy iv (e/gx)") || (intended_device_family == "HardCopyIV(GX/E)") || (intended_device_family == "HARDCOPYIV(GX/E)") || (intended_device_family == "hardcopyiv(gx/e)") || (intended_device_family == "HardCopyIV(E/GX)") || (intended_device_family == "HARDCOPYIV(E/GX)") || (intended_device_family == "hardcopyiv(e/gx)")) |
|| (((intended_device_family == "Stratix V") || (intended_device_family == "STRATIX V") || (intended_device_family == "stratix v") || (intended_device_family == "StratixV") || (intended_device_family == "STRATIXV") || (intended_device_family == "stratixv") || (intended_device_family == "Stratix V (GS)") || (intended_device_family == "STRATIX V (GS)") || (intended_device_family == "stratix v (gs)") || (intended_device_family == "StratixV(GS)") || (intended_device_family == "STRATIXV(GS)") || (intended_device_family == "stratixv(gs)") || (intended_device_family == "Stratix V (GX)") || (intended_device_family == "STRATIX V (GX)") || (intended_device_family == "stratix v (gx)") || (intended_device_family == "StratixV(GX)") || (intended_device_family == "STRATIXV(GX)") || (intended_device_family == "stratixv(gx)") || (intended_device_family == "Stratix V (GS/GX)") || (intended_device_family == "STRATIX V (GS/GX)") || (intended_device_family == "stratix v (gs/gx)") || (intended_device_family == "StratixV(GS/GX)") || (intended_device_family == "STRATIXV(GS/GX)") || (intended_device_family == "stratixv(gs/gx)") || (intended_device_family == "Stratix V (GX/GS)") || (intended_device_family == "STRATIX V (GX/GS)") || (intended_device_family == "stratix v (gx/gs)") || (intended_device_family == "StratixV(GX/GS)") || (intended_device_family == "STRATIXV(GX/GS)") || (intended_device_family == "stratixv(gx/gs)")) |
) || (((intended_device_family == "Arria II GZ") || (intended_device_family == "ARRIA II GZ") || (intended_device_family == "arria ii gz") || (intended_device_family == "ArriaII GZ") || (intended_device_family == "ARRIAII GZ") || (intended_device_family == "arriaii gz") || (intended_device_family == "Arria IIGZ") || (intended_device_family == "ARRIA IIGZ") || (intended_device_family == "arria iigz") || (intended_device_family == "ArriaIIGZ") || (intended_device_family == "ARRIAIIGZ") || (intended_device_family == "arriaiigz")) |
) ) || ((intended_device_family == "HardCopy III") || (intended_device_family == "HARDCOPY III") || (intended_device_family == "hardcopy iii") || (intended_device_family == "HardCopyIII") || (intended_device_family == "HARDCOPYIII") || (intended_device_family == "hardcopyiii") || (intended_device_family == "HCX") || (intended_device_family == "hcx")) |
) || (((intended_device_family == "Cyclone III") || (intended_device_family == "CYCLONE III") || (intended_device_family == "cyclone iii") || (intended_device_family == "CycloneIII") || (intended_device_family == "CYCLONEIII") || (intended_device_family == "cycloneiii") || (intended_device_family == "Barracuda") || (intended_device_family == "BARRACUDA") || (intended_device_family == "barracuda") || (intended_device_family == "Cuda") || (intended_device_family == "CUDA") || (intended_device_family == "cuda") || (intended_device_family == "CIII") || (intended_device_family == "ciii")) |
|| ((intended_device_family == "Cyclone III LS") || (intended_device_family == "CYCLONE III LS") || (intended_device_family == "cyclone iii ls") || (intended_device_family == "CycloneIIILS") || (intended_device_family == "CYCLONEIIILS") || (intended_device_family == "cycloneiiils") || (intended_device_family == "Cyclone III LPS") || (intended_device_family == "CYCLONE III LPS") || (intended_device_family == "cyclone iii lps") || (intended_device_family == "Cyclone LPS") || (intended_device_family == "CYCLONE LPS") || (intended_device_family == "cyclone lps") || (intended_device_family == "CycloneLPS") || (intended_device_family == "CYCLONELPS") || (intended_device_family == "cyclonelps") || (intended_device_family == "Tarpon") || (intended_device_family == "TARPON") || (intended_device_family == "tarpon") || (intended_device_family == "Cyclone IIIE") || (intended_device_family == "CYCLONE IIIE") || (intended_device_family == "cyclone iiie")) |
|| (((intended_device_family == "Cyclone IV GX") || (intended_device_family == "CYCLONE IV GX") || (intended_device_family == "cyclone iv gx") || (intended_device_family == "Cyclone IVGX") || (intended_device_family == "CYCLONE IVGX") || (intended_device_family == "cyclone ivgx") || (intended_device_family == "CycloneIV GX") || (intended_device_family == "CYCLONEIV GX") || (intended_device_family == "cycloneiv gx") || (intended_device_family == "CycloneIVGX") || (intended_device_family == "CYCLONEIVGX") || (intended_device_family == "cycloneivgx") || (intended_device_family == "Cyclone IV") || (intended_device_family == "CYCLONE IV") || (intended_device_family == "cyclone iv") || (intended_device_family == "CycloneIV") || (intended_device_family == "CYCLONEIV") || (intended_device_family == "cycloneiv") || (intended_device_family == "Cyclone IV (GX)") || (intended_device_family == "CYCLONE IV (GX)") || (intended_device_family == "cyclone iv (gx)") || (intended_device_family == "CycloneIV(GX)") || (intended_device_family == "CYCLONEIV(GX)") || (intended_device_family == "cycloneiv(gx)") || (intended_device_family == "Cyclone III GX") || (intended_device_family == "CYCLONE III GX") || (intended_device_family == "cyclone iii gx") || (intended_device_family == "CycloneIII GX") || (intended_device_family == "CYCLONEIII GX") || (intended_device_family == "cycloneiii gx") || (intended_device_family == "Cyclone IIIGX") || (intended_device_family == "CYCLONE IIIGX") || (intended_device_family == "cyclone iiigx") || (intended_device_family == "CycloneIIIGX") || (intended_device_family == "CYCLONEIIIGX") || (intended_device_family == "cycloneiiigx") || (intended_device_family == "Cyclone III GL") || (intended_device_family == "CYCLONE III GL") || (intended_device_family == "cyclone iii gl") || (intended_device_family == "CycloneIII GL") || (intended_device_family == "CYCLONEIII GL") || (intended_device_family == "cycloneiii gl") || (intended_device_family == "Cyclone IIIGL") || (intended_device_family == "CYCLONE IIIGL") || (intended_device_family == "cyclone iiigl") || (intended_device_family == "CycloneIIIGL") || (intended_device_family == "CYCLONEIIIGL") || (intended_device_family == "cycloneiiigl") || (intended_device_family == "Stingray") || (intended_device_family == "STINGRAY") || (intended_device_family == "stingray")) |
|| ((intended_device_family == "Cyclone IV GX") || (intended_device_family == "CYCLONE IV GX") || (intended_device_family == "cyclone iv gx") || (intended_device_family == "Cyclone IVGX") || (intended_device_family == "CYCLONE IVGX") || (intended_device_family == "cyclone ivgx") || (intended_device_family == "CycloneIV GX") || (intended_device_family == "CYCLONEIV GX") || (intended_device_family == "cycloneiv gx") || (intended_device_family == "CycloneIVGX") || (intended_device_family == "CYCLONEIVGX") || (intended_device_family == "cycloneivgx") || (intended_device_family == "Cyclone IV") || (intended_device_family == "CYCLONE IV") || (intended_device_family == "cyclone iv") || (intended_device_family == "CycloneIV") || (intended_device_family == "CYCLONEIV") || (intended_device_family == "cycloneiv") || (intended_device_family == "Cyclone IV (GX)") || (intended_device_family == "CYCLONE IV (GX)") || (intended_device_family == "cyclone iv (gx)") || (intended_device_family == "CycloneIV(GX)") || (intended_device_family == "CYCLONEIV(GX)") || (intended_device_family == "cycloneiv(gx)") || (intended_device_family == "Cyclone III GX") || (intended_device_family == "CYCLONE III GX") || (intended_device_family == "cyclone iii gx") || (intended_device_family == "CycloneIII GX") || (intended_device_family == "CYCLONEIII GX") || (intended_device_family == "cycloneiii gx") || (intended_device_family == "Cyclone IIIGX") || (intended_device_family == "CYCLONE IIIGX") || (intended_device_family == "cyclone iiigx") || (intended_device_family == "CycloneIIIGX") || (intended_device_family == "CYCLONEIIIGX") || (intended_device_family == "cycloneiiigx") || (intended_device_family == "Cyclone III GL") || (intended_device_family == "CYCLONE III GL") || (intended_device_family == "cyclone iii gl") || (intended_device_family == "CycloneIII GL") || (intended_device_family == "CYCLONEIII GL") || (intended_device_family == "cycloneiii gl") || (intended_device_family == "Cyclone IIIGL") || (intended_device_family == "CYCLONE IIIGL") || (intended_device_family == "cyclone iiigl") || (intended_device_family == "CycloneIIIGL") || (intended_device_family == "CYCLONEIIIGL") || (intended_device_family == "cycloneiiigl") || (intended_device_family == "Stingray") || (intended_device_family == "STINGRAY") || (intended_device_family == "stingray")) |
) || (((intended_device_family == "Cyclone IV E") || (intended_device_family == "CYCLONE IV E") || (intended_device_family == "cyclone iv e") || (intended_device_family == "CycloneIV E") || (intended_device_family == "CYCLONEIV E") || (intended_device_family == "cycloneiv e") || (intended_device_family == "Cyclone IVE") || (intended_device_family == "CYCLONE IVE") || (intended_device_family == "cyclone ive") || (intended_device_family == "CycloneIVE") || (intended_device_family == "CYCLONEIVE") || (intended_device_family == "cycloneive")) |
) ) )) |
? 1 : 0; |
|
parameter WRITE_SIDE_SYNCHRONIZERS = (wrsync_delaypipe != 0) ? wrsync_delaypipe : |
(((FAMILY_HAS_STRATIXII_STYLE_RAM == 1) || (FAMILY_HAS_STRATIXIII_STYLE_RAM == 1)) |
&& (clocks_are_synchronized == "FALSE")) |
? 4 : 3; |
|
parameter READ_SIDE_SYNCHRONIZERS = (rdsync_delaypipe != 0) ? rdsync_delaypipe : |
(((FAMILY_HAS_STRATIXII_STYLE_RAM == 1) || (FAMILY_HAS_STRATIXIII_STYLE_RAM == 1)) |
&& (clocks_are_synchronized == "FALSE")) |
? 4 : 3; |
|
// LOCAL_PARAMETERS_END |
|
// INPUT PORT DECLARATION |
input [lpm_width-1:0] data; |
input rdclk; |
input wrclk; |
input aclr; |
input rdreq; |
input wrreq; |
|
// OUTPUT PORT DECLARATION |
output rdfull; |
output wrfull; |
output rdempty; |
output wrempty; |
output [lpm_widthu_r-1:0] rdusedw; |
output [lpm_widthu-1:0] wrusedw; |
output [lpm_width_r-1:0] q; |
|
// INTERNAL WIRE DECLARATION |
wire w_rdfull_s; |
wire w_wrfull_s; |
wire w_rdempty_s; |
wire w_wrempty_s; |
wire w_rdfull_a; |
wire w_wrfull_a; |
wire w_rdempty_a; |
wire w_wrempty_a; |
wire w_rdfull_l; |
wire w_wrfull_l; |
wire w_rdempty_l; |
wire w_wrempty_l; |
wire [lpm_widthu-1:0] w_rdusedw_s; |
wire [lpm_widthu-1:0] w_wrusedw_s; |
wire [lpm_widthu-1:0] w_rdusedw_a; |
wire [lpm_widthu-1:0] w_wrusedw_a; |
wire [lpm_widthu_r-1:0] w_rdusedw_l; |
wire [lpm_widthu-1:0] w_wrusedw_l; |
wire [lpm_width-1:0] w_q_s; |
wire [lpm_width-1:0] w_q_a; |
wire [lpm_width_r-1:0] w_q_l; |
|
// INTERNAL REGISTER DECLARATION |
reg feature_family_has_stratixii_style_ram; |
reg feature_family_stratix; |
reg use_low_latency_fifo; |
|
// INTERNAL TRI DECLARATION |
tri0 aclr; |
|
// COMPONENT INSTANTIATIONS |
ALTERA_DEVICE_FAMILIES dev (); |
|
initial |
begin |
feature_family_has_stratixii_style_ram = dev.FEATURE_FAMILY_HAS_STRATIXII_STYLE_RAM(intended_device_family); |
feature_family_stratix = dev.FEATURE_FAMILY_STRATIX(intended_device_family); |
|
use_low_latency_fifo = (((feature_family_has_stratixii_style_ram == 1) && |
((use_eab == "ON") || ((use_eab == "OFF") && (lpm_width != lpm_width_r) && (lpm_width_r != 0)) || |
((lpm_numwords < 16) && (clocks_are_synchronized == "FALSE")))) || |
((feature_family_stratix == 1) && (use_eab == "ON") && |
(((lpm_showahead == "ON") && (add_ram_output_register == "OFF")) || |
(clocks_are_synchronized == "FALSE_LOW_LATENCY")))); |
end |
|
generate |
if (clocks_are_synchronized == "TRUE") |
begin : dcfifo_sync |
dcfifo_sync #( |
.lpm_width (lpm_width), |
.lpm_widthu (lpm_widthu), |
.lpm_numwords (lpm_numwords), |
.intended_device_family (intended_device_family), |
.lpm_showahead (lpm_showahead), |
.underflow_checking (underflow_checking), |
.overflow_checking (overflow_checking), |
.use_eab (use_eab), |
.add_ram_output_register (add_ram_output_register)) |
SYNC ( |
.data (data), |
.rdclk (rdclk), |
.wrclk (wrclk), |
.aclr (aclr), |
.rdreq (rdreq), |
.wrreq (wrreq), |
.rdfull (w_rdfull_s), |
.wrfull (w_wrfull_s), |
.rdempty (w_rdempty_s), |
.wrempty (w_wrempty_s), |
.rdusedw (w_rdusedw_s), |
.wrusedw (w_wrusedw_s), |
.q (w_q_s)); |
end |
endgenerate |
|
generate |
if (clocks_are_synchronized != "TRUE") |
begin : dcfifo_async |
dcfifo_async #( |
.lpm_width (lpm_width), |
.lpm_widthu (lpm_widthu), |
.lpm_numwords (lpm_numwords), |
.delay_rdusedw (delay_rdusedw), |
.delay_wrusedw (delay_wrusedw), |
.rdsync_delaypipe (READ_SIDE_SYNCHRONIZERS), |
.wrsync_delaypipe (WRITE_SIDE_SYNCHRONIZERS), |
.intended_device_family (intended_device_family), |
.lpm_showahead (lpm_showahead), |
.underflow_checking (underflow_checking), |
.overflow_checking (overflow_checking), |
.use_eab (use_eab), |
.add_ram_output_register (add_ram_output_register)) |
ASYNC ( |
.data (data), |
.rdclk (rdclk), |
.wrclk (wrclk), |
.aclr (aclr), |
.rdreq (rdreq), |
.wrreq (wrreq), |
.rdfull (w_rdfull_a), |
.wrfull (w_wrfull_a), |
.rdempty (w_rdempty_a), |
.wrempty (w_wrempty_a), |
.rdusedw (w_rdusedw_a), |
.wrusedw (w_wrusedw_a), |
.q (w_q_a) ); |
end |
endgenerate |
|
dcfifo_low_latency LOWLATENCY ( |
.data (data), |
.rdclk (rdclk), |
.wrclk (wrclk), |
.aclr (aclr), |
.rdreq (rdreq), |
.wrreq (wrreq), |
.rdfull (w_rdfull_l), |
.wrfull (w_wrfull_l), |
.rdempty (w_rdempty_l), |
.wrempty (w_wrempty_l), |
.rdusedw (w_rdusedw_l), |
.wrusedw (w_wrusedw_l), |
.q (w_q_l) ); |
defparam |
LOWLATENCY.lpm_width = lpm_width, |
LOWLATENCY.lpm_widthu = lpm_widthu, |
LOWLATENCY.lpm_width_r = lpm_width_r, |
LOWLATENCY.lpm_widthu_r = lpm_widthu_r, |
LOWLATENCY.lpm_numwords = lpm_numwords, |
LOWLATENCY.delay_rdusedw = delay_rdusedw, |
LOWLATENCY.delay_wrusedw = delay_wrusedw, |
LOWLATENCY.rdsync_delaypipe = (READ_SIDE_SYNCHRONIZERS > 3 ? READ_SIDE_SYNCHRONIZERS - 2 : 1), |
LOWLATENCY.wrsync_delaypipe = (WRITE_SIDE_SYNCHRONIZERS > 3 ? WRITE_SIDE_SYNCHRONIZERS - 2 : 1), |
LOWLATENCY.intended_device_family = intended_device_family, |
LOWLATENCY.lpm_showahead = lpm_showahead, |
LOWLATENCY.underflow_checking = underflow_checking, |
LOWLATENCY.overflow_checking = overflow_checking, |
LOWLATENCY.add_usedw_msb_bit = add_usedw_msb_bit, |
LOWLATENCY.write_aclr_synch = write_aclr_synch, |
LOWLATENCY.use_eab = use_eab, |
LOWLATENCY.clocks_are_synchronized = clocks_are_synchronized, |
LOWLATENCY.add_ram_output_register = add_ram_output_register, |
LOWLATENCY.lpm_hint = lpm_hint; |
|
// INITIAL CONSTRUCT BLOCK |
initial |
begin |
if(((wrsync_delaypipe == 0) || (rdsync_delaypipe == 0)) && (clocks_are_synchronized == "FALSE")) |
begin |
if ((FAMILY_HAS_STRATIXII_STYLE_RAM == 1) || (FAMILY_HAS_STRATIXIII_STYLE_RAM == 1)) |
begin |
$display ("Warning! Number of metastability protection registers is not specified. Based on the parameter value CLOCKS_ARE_SYNCHRONIZED=FALSE, the synchronization register chain length between read and write clock domains will be 2."); |
$display("Time: %0t Instance: %m", $time); |
end |
end |
end |
|
// CONTINOUS ASSIGNMENT |
assign rdfull = (use_low_latency_fifo == 1) ? w_rdfull_l : |
(clocks_are_synchronized == "TRUE") ? w_rdfull_s : w_rdfull_a; |
|
assign wrfull = (use_low_latency_fifo == 1) ? w_wrfull_l : |
(clocks_are_synchronized == "TRUE") ? w_wrfull_s : w_wrfull_a; |
|
assign rdempty = (use_low_latency_fifo == 1) ? w_rdempty_l : |
(clocks_are_synchronized == "TRUE") ? w_rdempty_s : w_rdempty_a; |
|
assign wrempty = (use_low_latency_fifo == 1) ? w_wrempty_l : |
(clocks_are_synchronized == "TRUE") ? w_wrempty_s : w_wrempty_a; |
|
assign rdusedw = (use_low_latency_fifo == 1) ? w_rdusedw_l : |
(clocks_are_synchronized == "TRUE") ? w_rdusedw_s : w_rdusedw_a; |
|
assign wrusedw = (use_low_latency_fifo == 1) ? w_wrusedw_l : |
(clocks_are_synchronized == "TRUE") ? w_wrusedw_s : w_wrusedw_a; |
|
assign q = (use_low_latency_fifo == 1) ? w_q_l : |
(clocks_are_synchronized == "TRUE") ? w_q_s : w_q_a; |
|
endmodule // dcfifo_mixed_widths |
// END OF MODULE |
|
//START_MODULE_NAME------------------------------------------------------------ |
// |
// Module Name : dcfifo |
// |
// Description : Dual Clocks FIFO |
// |
// Limitation : |
// |
// Results expected: |
// |
//END_MODULE_NAME-------------------------------------------------------------- |
|
// BEGINNING OF MODULE |
`timescale 1 ps / 1 ps |
|
// MODULE DECLARATION |
module dcfifo ( data, rdclk, wrclk, aclr, rdreq, wrreq, |
rdfull, wrfull, rdempty, wrempty, rdusedw, wrusedw, q); |
|
// GLOBAL PARAMETER DECLARATION |
parameter lpm_width = 1; |
parameter lpm_widthu = 1; |
parameter lpm_numwords = 2; |
parameter delay_rdusedw = 1; |
parameter delay_wrusedw = 1; |
parameter rdsync_delaypipe = 0; |
parameter wrsync_delaypipe = 0; |
parameter intended_device_family = "Stratix"; |
parameter lpm_showahead = "OFF"; |
parameter underflow_checking = "ON"; |
parameter overflow_checking = "ON"; |
parameter clocks_are_synchronized = "FALSE"; |
parameter use_eab = "ON"; |
parameter add_ram_output_register = "OFF"; |
parameter lpm_hint = "USE_EAB=ON"; |
parameter lpm_type = "dcfifo"; |
parameter add_usedw_msb_bit = "OFF"; |
parameter write_aclr_synch = "OFF"; |
|
// LOCAL_PARAMETERS_BEGIN |
|
parameter add_width = 1; |
parameter ram_block_type = "AUTO"; |
|
// LOCAL_PARAMETERS_END |
|
// INPUT PORT DECLARATION |
input [lpm_width-1:0] data; |
input rdclk; |
input wrclk; |
input aclr; |
input rdreq; |
input wrreq; |
|
// OUTPUT PORT DECLARATION |
output rdfull; |
output wrfull; |
output rdempty; |
output wrempty; |
output [lpm_widthu-1:0] rdusedw; |
output [lpm_widthu-1:0] wrusedw; |
output [lpm_width-1:0] q; |
|
// INTERNAL WIRE DECLARATION |
wire w_rdfull; |
wire w_wrfull; |
wire w_rdempty; |
wire w_wrempty; |
wire [lpm_widthu-1:0] w_rdusedw; |
wire [lpm_widthu-1:0] w_wrusedw; |
wire [lpm_width-1:0] w_q; |
|
// INTERNAL TRI DECLARATION |
tri0 aclr; |
|
dcfifo_mixed_widths DCFIFO_MW ( |
.data (data), |
.rdclk (rdclk), |
.wrclk (wrclk), |
.aclr (aclr), |
.rdreq (rdreq), |
.wrreq (wrreq), |
.rdfull (w_rdfull), |
.wrfull (w_wrfull), |
.rdempty (w_rdempty), |
.wrempty (w_wrempty), |
.rdusedw (w_rdusedw), |
.wrusedw (w_wrusedw), |
.q (w_q) ); |
defparam |
DCFIFO_MW.lpm_width = lpm_width, |
DCFIFO_MW.lpm_widthu = lpm_widthu, |
DCFIFO_MW.lpm_width_r = lpm_width, |
DCFIFO_MW.lpm_widthu_r = lpm_widthu, |
DCFIFO_MW.lpm_numwords = lpm_numwords, |
DCFIFO_MW.delay_rdusedw = delay_rdusedw, |
DCFIFO_MW.delay_wrusedw = delay_wrusedw, |
DCFIFO_MW.rdsync_delaypipe = rdsync_delaypipe, |
DCFIFO_MW.wrsync_delaypipe = wrsync_delaypipe, |
DCFIFO_MW.intended_device_family = intended_device_family, |
DCFIFO_MW.lpm_showahead = lpm_showahead, |
DCFIFO_MW.underflow_checking = underflow_checking, |
DCFIFO_MW.overflow_checking = overflow_checking, |
DCFIFO_MW.clocks_are_synchronized = clocks_are_synchronized, |
DCFIFO_MW.use_eab = use_eab, |
DCFIFO_MW.add_ram_output_register = add_ram_output_register, |
DCFIFO_MW.add_width = add_width, |
DCFIFO_MW.ram_block_type = ram_block_type, |
DCFIFO_MW.add_usedw_msb_bit = add_usedw_msb_bit, |
DCFIFO_MW.write_aclr_synch = write_aclr_synch, |
DCFIFO_MW.lpm_hint = lpm_hint; |
|
// CONTINOUS ASSIGNMENT |
assign rdfull = w_rdfull; |
assign wrfull = w_wrfull; |
assign rdempty = w_rdempty; |
assign wrempty = w_wrempty; |
assign rdusedw = w_rdusedw; |
assign wrusedw = w_wrusedw; |
assign q = w_q; |
|
endmodule // dcfifo |
// END OF MODULE |
|