max_atoms.v
来自「一个非常好的dc使用书籍 一个非常好的dc使用书籍」· Verilog 代码 · 共 1,804 行 · 第 1/5 页
V
1,804 行
// Copyright (C) 1988-2002 Altera Corporation
// Any megafunction design, and related netlist (encrypted or decrypted),
// support information, device programming or simulation file, and any other
// associated documentation or information provided by Altera or a partner
// under Altera's Megafunction Partnership Program may be used only
// to program PLD devices (but not masked PLD devices) from Altera. Any
// other use of such megafunction design, netlist, support information,
// device programming or simulation file, or any other related documentation
// or information is prohibited for any other purpose, including, but not
// limited to modification, reverse engineering, de-compiling, or use with
// any other silicon devices, unless such use is explicitly licensed under
// a separate agreement with Altera or a megafunction partner. Title to the
// intellectual property, including patents, copyrights, trademarks, trade
// secrets, or maskworks, embodied in any such megafunction design, netlist,
// support information, device programming or simulation file, or any other
// related documentation or information provided by Altera or a megafunction
// partner, remains with Altera, the megafunction partner, or their respective
// licensors. No other licenses, including any licenses needed under any third
// party's intellectual property, are provided herein.
// Quartus II 3.0 Build 197 06/18/2003
///////////////////////////////////////////////////////////////////////////////
//
// MAX IO Atom
//
//////////////////////////////////////////////////////////////////////////////
`timescale 1 ps/1 ps
module max_asynch_io (datain, oe, padio, dataout);
parameter operation_mode = "input";
parameter bus_hold = "false";
parameter open_drain_output = "false";
parameter weak_pull_up = "false";
input datain, oe;
output dataout;
inout padio;
reg prev_value;
reg tmp_padio, tmp_dataout;
reg buf_control;
buf(datain_in, datain);
buf(oe_in, oe);
tri padio_tmp;
specify
(padio => dataout) = (0,0);
(datain => padio) = (0, 0);
(posedge oe => (padio +: padio_tmp)) = (0, 0);
(negedge oe => (padio +: 1'bz)) = (0, 0);
endspecify
initial
begin
prev_value = 'b1;
tmp_padio = 'bz;
end
always @(datain_in or oe_in or padio)
begin
if (bus_hold == "true" )
begin
buf_control = 'b1;
if (operation_mode == "input")
begin
prev_value = padio;
tmp_dataout = padio;
end
else if ( operation_mode == "output" || operation_mode == "bidir")
begin
if ( oe_in == 1)
begin
if ( open_drain_output == "true" )
begin
if (datain_in == 0)
begin
tmp_padio = 1'b0;
prev_value = 1'b0;
end
else if (datain_in == 1'bx)
begin
tmp_padio = 1'bx;
prev_value = 1'bx;
end
else // 'Z'
begin
if ( padio != 1'bz)
begin
prev_value = padio;
end
end
end // end open_drain_output , true
else
begin
tmp_padio = datain_in;
prev_value = datain_in;
end // end open_drain_output false
end // end oe_in == 1
else if ( oe_in == 0 )
begin
if ( padio !== 1'bz)
begin
prev_value = padio;
if ((padio === 1'bx) && (operation_mode == "output") && (padio_tmp === 1'bx) && (prev_value === 1'bx))
begin
prev_value = 'b0;
end
end
tmp_padio = 'bz;
end
else
begin
begin
tmp_padio = 1'bx;
prev_value = 1'bx;
end
end
if ( operation_mode == "bidir")
tmp_dataout = padio;
else
tmp_dataout = 1'bz;
if ( $realtime <= 1 )
prev_value = 0;
end
end
else // bus hold is false
if (bus_hold == "false")
begin
buf_control = 'b0;
if ( operation_mode == "input")
begin
tmp_dataout = padio;
if (weak_pull_up == "true")
begin
if (tmp_dataout === 1'bz)
tmp_dataout = 1'b1;
end
end
else if (operation_mode == "output" || operation_mode == "bidir")
begin
if ( operation_mode == "bidir")
begin
tmp_dataout = padio;
if (weak_pull_up == "true")
begin
if (tmp_dataout === 1'bz)
tmp_dataout = 1'b1;
end
end
if ( oe_in == 1 )
begin
if ( open_drain_output == "true" )
begin
if (datain_in == 0)
tmp_padio = 1'b0;
else if ( datain_in == 1'bx)
tmp_padio = 1'bx;
else
begin
tmp_padio = 1'bz;
if (weak_pull_up == "true")
begin
if (tmp_padio === 1'bz)
buf_control = 1;
end
end
end
else
begin
if ((datain_in !== 1'b1)&&(datain_in !== 1'b0)&&(datain_in !== 'bx))
tmp_padio = 'bz;
else
tmp_padio = datain_in;
if (weak_pull_up == "true")
begin
if (tmp_padio === 1'bz)
buf_control = 1;
end
end
end
else if ( oe_in == 0 )
begin
tmp_padio = 1'bz;
if (weak_pull_up == "true")
begin
if (tmp_padio === 1'bz)
begin
buf_control = 1;
end
end
end
else
tmp_padio = 1'bx;
end
else
$display ("Error: Invalid operation_mode specified in max io atom!\n");
end
end
bufif1 (weak1, weak0) b(padio_tmp, prev_value, buf_control); //weak value
pmos (padio_tmp, tmp_padio, 'b0);
pmos (dataout, tmp_dataout, 'b0);
pmos (padio, padio_tmp, 'b0);
endmodule
module max_io (datain, oe, padio, dataout);
parameter operation_mode = "input";
parameter bus_hold = "false";
parameter open_drain_output = "false";
parameter weak_pull_up = "false";
inout padio;
input datain, oe;
output dataout;
max_asynch_io asynch_inst (datain, oe, padio, dataout);
defparam
asynch_inst.operation_mode = operation_mode,
asynch_inst.bus_hold = bus_hold,
asynch_inst.open_drain_output = open_drain_output,
asynch_inst.weak_pull_up = weak_pull_up;
endmodule
///////////////////////////////////////////////////////////////////////////////
//
// MAX MCELL ATOM
//
//////////////////////////////////////////////////////////////////////////////
// MAX MCELL ASYNCH
`timescale 1 ps/1 ps
module max_asynch_mcell (pterm0, pterm1, pterm2, pterm3, pterm4,
pterm5, fpin, pxor, pexpin, fbkin,
combout, pexpout, regin);
parameter operation_mode = "normal";
parameter pexp_mode = "off";
parameter register_mode = "dff";
input [51:0] pterm0, pterm1, pterm2, pterm3, pterm4, pterm5, pxor;
input pexpin, fbkin, fpin;
output combout, pexpout, regin;
reg icomb, ipexpout, tmp_comb, tmp_fpin;
reg tmp_pterm0, tmp_pterm1, tmp_pterm2;
reg tmp_pterm3, tmp_pterm4, tmp_pexpin;
wire [51:0] ipterm0, ipterm1, ipterm2, ipterm3, ipterm4, ipterm5, ipxor;
buf (ipexpin, pexpin);
buf (ifpin, fpin);
buf (ipterm0[0], pterm0[0]);
buf (ipterm0[1], pterm0[1]);
buf (ipterm0[2], pterm0[2]);
buf (ipterm0[3], pterm0[3]);
buf (ipterm0[4], pterm0[4]);
buf (ipterm0[5], pterm0[5]);
buf (ipterm0[6], pterm0[6]);
buf (ipterm0[7], pterm0[7]);
buf (ipterm0[8], pterm0[8]);
buf (ipterm0[9], pterm0[9]);
buf (ipterm0[10], pterm0[10]);
buf (ipterm0[11], pterm0[11]);
buf (ipterm0[12], pterm0[12]);
buf (ipterm0[13], pterm0[13]);
buf (ipterm0[14], pterm0[14]);
buf (ipterm0[15], pterm0[15]);
buf (ipterm0[16], pterm0[16]);
buf (ipterm0[17], pterm0[17]);
buf (ipterm0[18], pterm0[18]);
buf (ipterm0[19], pterm0[19]);
buf (ipterm0[20], pterm0[20]);
buf (ipterm0[21], pterm0[21]);
buf (ipterm0[22], pterm0[22]);
buf (ipterm0[23], pterm0[23]);
buf (ipterm0[24], pterm0[24]);
buf (ipterm0[25], pterm0[25]);
buf (ipterm0[26], pterm0[26]);
buf (ipterm0[27], pterm0[27]);
buf (ipterm0[28], pterm0[28]);
buf (ipterm0[29], pterm0[29]);
buf (ipterm0[30], pterm0[30]);
buf (ipterm0[31], pterm0[31]);
buf (ipterm0[32], pterm0[32]);
buf (ipterm0[33], pterm0[33]);
buf (ipterm0[34], pterm0[34]);
buf (ipterm0[35], pterm0[35]);
buf (ipterm0[36], pterm0[36]);
buf (ipterm0[37], pterm0[37]);
buf (ipterm0[38], pterm0[38]);
buf (ipterm0[39], pterm0[39]);
buf (ipterm0[40], pterm0[40]);
buf (ipterm0[41], pterm0[41]);
buf (ipterm0[42], pterm0[42]);
buf (ipterm0[43], pterm0[43]);
buf (ipterm0[44], pterm0[44]);
buf (ipterm0[45], pterm0[45]);
buf (ipterm0[46], pterm0[46]);
buf (ipterm0[47], pterm0[47]);
buf (ipterm0[48], pterm0[48]);
buf (ipterm0[49], pterm0[49]);
buf (ipterm0[50], pterm0[50]);
buf (ipterm0[51], pterm0[51]);
buf (ipterm1[0], pterm1[0]);
buf (ipterm1[1], pterm1[1]);
buf (ipterm1[2], pterm1[2]);
buf (ipterm1[3], pterm1[3]);
buf (ipterm1[4], pterm1[4]);
buf (ipterm1[5], pterm1[5]);
buf (ipterm1[6], pterm1[6]);
buf (ipterm1[7], pterm1[7]);
buf (ipterm1[8], pterm1[8]);
buf (ipterm1[9], pterm1[9]);
buf (ipterm1[10], pterm1[10]);
buf (ipterm1[11], pterm1[11]);
buf (ipterm1[12], pterm1[12]);
buf (ipterm1[13], pterm1[13]);
buf (ipterm1[14], pterm1[14]);
buf (ipterm1[15], pterm1[15]);
buf (ipterm1[16], pterm1[16]);
buf (ipterm1[17], pterm1[17]);
buf (ipterm1[18], pterm1[18]);
buf (ipterm1[19], pterm1[19]);
buf (ipterm1[20], pterm1[20]);
buf (ipterm1[21], pterm1[21]);
buf (ipterm1[22], pterm1[22]);
buf (ipterm1[23], pterm1[23]);
buf (ipterm1[24], pterm1[24]);
buf (ipterm1[25], pterm1[25]);
buf (ipterm1[26], pterm1[26]);
buf (ipterm1[27], pterm1[27]);
buf (ipterm1[28], pterm1[28]);
buf (ipterm1[29], pterm1[29]);
buf (ipterm1[30], pterm1[30]);
buf (ipterm1[31], pterm1[31]);
buf (ipterm1[32], pterm1[32]);
buf (ipterm1[33], pterm1[33]);
buf (ipterm1[34], pterm1[34]);
buf (ipterm1[35], pterm1[35]);
buf (ipterm1[36], pterm1[36]);
buf (ipterm1[37], pterm1[37]);
buf (ipterm1[38], pterm1[38]);
buf (ipterm1[39], pterm1[39]);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?