📄 altera_primitives.v
字号:
// Copyright (C) 1991-2007 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 7.2 Build 147 09/05/2007
`timescale 1 ps / 1 ps
module global (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module carry (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module cascade (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module carry_sum (sin, cin, sout, cout);
input sin;
input cin;
output sout;
output cout;
assign sout = sin;
assign cout = cin;
endmodule
`timescale 1 ps / 1 ps
module exp (in, out);
input in;
output out;
assign out = ~in;
endmodule
`timescale 1 ps / 1 ps
module soft (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module opndrn (in, out);
input in;
output out;
bufif0 (out, in, in);
endmodule
`timescale 1 ps / 1 ps
module row_global (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module TRI (in, oe, out);
input in;
input oe;
output out;
bufif1 (out, in, oe);
endmodule
`timescale 1 ps / 1 ps
module lut_input (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module lut_output (in, out);
input in;
output out;
assign out = in;
endmodule
`timescale 1 ps / 1 ps
module latch (d, ena, q);
input d, ena;
output q;
reg q;
initial q = 1'b0;
always@ (d or ena)
begin
if (ena)
q <= d;
end
endmodule
`timescale 1 ps / 1 ps
module dlatch (d, ena, clrn, prn, q);
input d, ena, clrn, prn;
output q;
reg q;
initial q = 1'b0;
always@ (d or ena or clrn or prn)
begin
if (clrn == 1'b0)
q <= 1'b0;
else if (prn == 1'b0)
q <= 1'b1;
else if (ena)
q <= d;
end
endmodule
`timescale 1 ps / 1 ps
module prim_gdff (q, d, clk, ena, clr, pre, ald, adt, sclr, sload );
input d,clk,ena,clr,pre,ald,adt,sclr,sload;
output q;
reg q;
reg clk_pre;
initial q = 1'b0;
always@ (clk or clr or pre or ald or adt)
begin
if (clr == 1'b1)
q <= 1'b0;
else if (pre == 1'b1)
q <= 1'b1;
else if (ald == 1'b1)
q <= adt;
else if ((clk == 1'b1) && (clk_pre == 1'b0))
begin
if (ena == 1'b1)
begin
if (sclr == 1'b1)
q <= 1'b0;
else if (sload == 1'b1)
q <= adt;
else
q <= d;
end
end
clk_pre <= clk;
end
endmodule
`timescale 1 ps / 1 ps
module dff (d, clk, clrn, prn, q );
input d,clk,clrn,prn;
output q;
wire q;
tri1 prn, clrn;
prim_gdff inst (q, d, clk, 1'b1, !clrn, !prn, 1'b0, 1'b0, 1'b0, 1'b0);
endmodule
`timescale 1 ps / 1 ps
module dffe (d, clk, ena, clrn, prn,q );
input d,clk,ena,clrn,prn;
output q;
wire q;
tri1 prn, clrn, ena;
prim_gdff inst (q, d, clk, ena, !clrn, !prn, 1'b0, 1'b0, 1'b0, 1'b0);
endmodule
`timescale 1 ps / 1 ps
module dffea (d, clk, ena, clrn, prn, aload, adata,q );
input d,clk,ena,clrn,prn,aload,adata;
output q;
wire q;
tri0 aload;
tri1 prn, clrn, ena;
reg stalled_adata;
initial
begin
stalled_adata = adata;
end
always @(adata) begin
#1 stalled_adata = adata;
end
prim_gdff inst (q, d, clk, ena, !clrn, !prn, aload, stalled_adata, 1'b0, 1'b0);
endmodule
`timescale 1 ps / 1 ps
module dffeas (d, clk, ena, clrn, prn, aload, asdata, sclr, sload, devclrn, devpor, q );
// GLOBAL PARAMETER DECLARATION
parameter power_up = "DONT_CARE";
parameter is_wysiwyg = "false";
// LOCAL PARAMETER DECLARATION
parameter x_on_violation = "on";
parameter lpm_type = "dffeas";
input d;
input clk;
input ena;
input clrn;
input prn;
input aload;
input asdata;
input sclr;
input sload;
input devclrn;
input devpor;
output q;
reg q_tmp;
wire reset;
reg d_viol;
reg sclr_viol;
reg sload_viol;
reg asdata_viol;
reg ena_viol;
reg violation;
reg asdata_dly;
reg clk_last_value;
reg ix_on_violation;
wire d_in;
wire clk_in;
wire ena_in;
wire clrn_in;
wire prn_in;
wire aload_in;
wire asdata_in;
wire sclr_in;
wire sload_in;
wire nosloadsclr;
wire sloaddata;
buf (d_in, d);
buf (clk_in, clk);
buf (ena_in, ena);
buf (clrn_in, clrn);
buf (prn_in, prn);
buf (aload_in, aload);
buf (asdata_in, asdata);
buf (sclr_in, sclr);
buf (sload_in, sload);
assign reset = devpor && devclrn && clrn_in && prn_in && ena_in;
assign nosloadsclr = reset && (!sload_in && !sclr_in);
assign sloaddata = reset && sload_in;
specify
$setuphold (posedge clk &&& nosloadsclr, d, 0, 0, d_viol) ;
$setuphold (posedge clk &&& reset, sclr, 0, 0, sclr_viol) ;
$setuphold (posedge clk &&& reset, sload, 0, 0, sload_viol) ;
$setuphold (posedge clk &&& sloaddata, asdata, 0, 0, asdata_viol) ;
$setuphold (posedge clk &&& reset, ena, 0, 0, ena_viol) ;
(posedge clk => (q +: q_tmp)) = 0 ;
(negedge clrn => (q +: 1'b0)) = (0, 0) ;
(negedge prn => (q +: 1'b1)) = (0, 0) ;
(posedge aload => (q +: q_tmp)) = (0, 0) ;
(asdata => q) = (0, 0) ;
endspecify
initial
begin
violation = 'b0;
if ((power_up == "low") || (power_up == "DONT_CARE"))
q_tmp = 1'b0;
else if (power_up == "high")
q_tmp = 1'b1;
else
q_tmp = 1'b0;
if (x_on_violation == "on")
ix_on_violation = 1;
else
ix_on_violation = 0;
end
always @ (d_viol or sclr_viol or sload_viol or ena_viol or asdata_viol)
begin
if (ix_on_violation == 1)
violation = 1'b1;
end
always @ (asdata_in)
begin
#1 asdata_dly = asdata_in;
end
always @ (asdata_dly or clk_in or clrn_in or prn_in or posedge aload_in or
devclrn or devpor or posedge violation)
begin
if (violation == 1'b1)
begin
violation <= 1'b0;
q_tmp <= 1'bX;
end
else
begin
if (devpor == 1'b0 || devclrn == 1'b0 || clrn_in === 1'b0)
q_tmp <= 1'b0;
else if (prn_in === 1'b0)
q_tmp <= 1'b1;
else if (aload_in === 1'b1)
q_tmp <= asdata_dly;
else if (ena_in === 1'b1 && clk_in === 1'b1 && clk_last_value === 1'b0)
begin
if (sclr_in === 1'b1)
q_tmp <= 'b0 ;
else if (sload_in === 1'b1)
q_tmp <= asdata_dly;
else
q_tmp <= d_in;
end
end
clk_last_value <= clk_in;
end
and (q, q_tmp, 1'b1);
endmodule
`timescale 1 ps / 1 ps
module prim_gtff (q, t, clk, ena, clr, pre );
input t,clk,ena,clr,pre;
output q;
reg q;
reg clk_pre;
initial q = 1'b0;
always@ (clk or clr or pre)
begin
if (clr == 1'b1)
q <= 1'b0;
else if (pre == 1'b1)
q <= 1'b1;
else if ((clk == 1'b1) && (clk_pre == 1'b0))
begin
if (ena == 1'b1)
begin
if (t == 1'b1)
q <= ~q;
end
end
clk_pre <= clk;
end
endmodule
`timescale 1 ps / 1 ps
module tff (t, clk, clrn, prn, q );
input t,clk,clrn,prn;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -