apex20k_atoms.v
来自「一个非常好的dc使用书籍 一个非常好的dc使用书籍」· Verilog 代码 · 共 2,089 行 · 第 1/5 页
V
2,089 行
parameter operation_mode = "input" ;
parameter reg_source_mode = "none" ;
parameter feedback_mode = "from_pin" ;
parameter power_up = "low";
inout padio ;
input datain, clk, aclr, ena, oe, devpor, devoe, devclrn ;
output regout, combout;
reg tri_in, tmp_reg, tmp_comb;
// tri0 aclr;
// tri1 ena;
wire reg_pre, reg_clr;
assign reg_clr = (power_up == "low") ? devpor : 1'b1;
assign reg_pre = (power_up == "high") ? devpor : 1'b1;
apex20k_asynch_io asynch_inst (datain, oe, padio, dffeD, dffeQ, combout, regout);
defparam
asynch_inst.operation_mode = operation_mode,
asynch_inst.reg_source_mode = reg_source_mode,
asynch_inst.feedback_mode = feedback_mode;
dffe_io io_reg (dffeQ, clk, ena, dffeD, devclrn && !aclr && reg_clr, reg_pre);
endmodule
//
// ASYNCH_IO
//
module apex20k_asynch_io (datain, oe, padio, dffeD, dffeQ, combout, regout) ;
parameter operation_mode = "input" ;
parameter reg_source_mode = "none" ;
parameter feedback_mode = "from_pin" ;
input datain, oe;
input dffeQ;
output dffeD;
output combout;
output regout;
inout padio;
reg tmp_comb, tri_in;
reg reg_indata;
specify
(padio => combout) = (0, 0) ;
(posedge oe => (padio +: tri_in)) = 0;
(negedge oe => (padio +: 1'bz)) = 0;
(datain => padio) = (0, 0);
(dffeQ => padio) = (0, 0);
(dffeQ => regout) = (0, 0);
endspecify
buf (ipadio, padio);
buf (idatain, datain);
buf (ioe, oe);
always @(ipadio or idatain or ioe or dffeQ)
begin
if ((reg_source_mode == "none") && (feedback_mode == "none"))
begin
if ((operation_mode == "output") ||
(operation_mode == "bidir"))
tri_in = idatain;
end
else if ((reg_source_mode == "none") && (feedback_mode == "from_pin"))
begin
if (operation_mode == "input")
tmp_comb = ipadio;
else if (operation_mode == "bidir")
begin
tmp_comb = ipadio;
tri_in = idatain;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "data_in") && (feedback_mode == "from_reg"))
begin
if ((operation_mode == "output") || (operation_mode == "bidir"))
begin
tri_in = idatain;
reg_indata = idatain;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "data_in") &&
(feedback_mode == "from_pin_and_reg"))
begin
if (operation_mode == "input")
begin
tmp_comb = ipadio;
reg_indata = idatain;
end
else if (operation_mode == "bidir")
begin
tmp_comb = ipadio;
tri_in = idatain;
reg_indata = idatain;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "pin_only") &&
(feedback_mode == "from_pin_and_reg"))
begin
if (operation_mode == "input")
begin
tmp_comb = ipadio;
reg_indata = ipadio;
end
else if (operation_mode == "bidir")
begin
tri_in = idatain;
tmp_comb = ipadio;
reg_indata = ipadio;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "pin_only") &&
(feedback_mode == "from_reg"))
begin
if (operation_mode == "input")
reg_indata = ipadio;
else if (operation_mode == "bidir")
begin
tri_in = idatain;
reg_indata = ipadio;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "data_in_to_pin") &&
(feedback_mode == "from_pin"))
begin
if (operation_mode == "bidir")
begin
tri_in = dffeQ;
reg_indata = idatain;
tmp_comb = padio;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "data_in_to_pin") &&
(feedback_mode == "from_reg"))
begin
if ((operation_mode == "output") ||
(operation_mode == "bidir"))
begin
reg_indata = idatain;
tri_in = dffeQ;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "data_in_to_pin") &&
(feedback_mode == "none"))
begin
if (operation_mode == "output" || operation_mode == "bidir")
begin
tri_in = dffeQ;
reg_indata = idatain;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "data_in_to_pin") &&
(feedback_mode == "from_pin_and_reg"))
begin
if (operation_mode == "bidir")
begin
reg_indata = idatain;
tri_in = dffeQ;
tmp_comb = ipadio;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "pin_loop") &&
(feedback_mode == "from_pin"))
begin
if (operation_mode == "bidir")
begin
tri_in = dffeQ;
reg_indata = ipadio;
tmp_comb = ipadio;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "pin_loop") &&
(feedback_mode == "from_pin_and_reg"))
begin
if (operation_mode == "bidir")
begin
reg_indata = ipadio;
tri_in = dffeQ;
tmp_comb = ipadio;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else if ((reg_source_mode == "pin_loop") &&
(feedback_mode == "from_reg"))
begin
if (operation_mode == "bidir")
begin
reg_indata = ipadio;
tri_in = dffeQ;
end
else $display ("Error: Invalid operation_mode specified\n");
end
else $display ("Error: Invalid combination of parameters used\n");
// output from datain to padio is controlled by oe
if ( ioe === 1'b0 )
tri_in = 'bz;
else if ( ioe === 1'bx || ioe === 1'bz )
tri_in = 'bx;
end
and (dffeD, reg_indata, 1'b1);
and (combout , tmp_comb, 1'b1);
and (regout , dffeQ, 1'b1);
pmos (padio , tri_in, 'b0);
endmodule
// APEX20K PTERM ASYNCH
//
`timescale 1 ps/1 ps
module apex20k_asynch_pterm (pterm0, pterm1, pexpin, fbkin, combout, pexpout, regin);
parameter operation_mode = "normal";
parameter invert_pterm1_mode = "false";
input [31:0] pterm0, pterm1;
input pexpin, fbkin;
output combout, pexpout, regin;
reg icomb, ipexpout;
wire iipterm1;
wire [31:0] ipterm0, ipterm1;
buf (ipexpin, pexpin);
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 (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]);
specify
(pterm0[0] => combout) = (0, 0) ;
(pterm0[1] => combout) = (0, 0) ;
(pterm0[2] => combout) = (0, 0) ;
(pterm0[3] => combout) = (0, 0) ;
(pterm0[4] => combout) = (0, 0) ;
(pterm0[5] => combout) = (0, 0) ;
(pterm0[6] => combout) = (0, 0) ;
(pterm0[7] => combout) = (0, 0) ;
(pterm0[8] => combout) = (0, 0) ;
(pterm0[9] => combout) = (0, 0) ;
(pterm0[10] => combout) = (0, 0) ;
(pterm0[11] => combout) = (0, 0) ;
(pterm0[12] => combout) = (0, 0) ;
(pterm0[13] => combout) = (0, 0) ;
(pterm0[14] => combout) = (0, 0) ;
(pterm0[15] => combout) = (0, 0) ;
(pterm0[16] => combout) = (0, 0) ;
(pterm0[17] => combout) = (0, 0) ;
(pterm0[18] => combout) = (0, 0) ;
(pterm0[19] => combout) = (0, 0) ;
(pterm0[20] => combout) = (0, 0) ;
(pterm0[21] => combout) = (0, 0) ;
(pterm0[22] => combout) = (0, 0) ;
(pterm0[23] => combout) = (0, 0) ;
(pterm0[24] => combout) = (0, 0) ;
(pterm0[25] => combout) = (0, 0) ;
(pterm0[26] => combout) = (0, 0) ;
(pterm0[27] => combout) = (0, 0) ;
(pterm0[28] => combout) = (0, 0) ;
(pterm0[29] => combout) = (0, 0) ;
(pterm0[30] => combout) = (0, 0) ;
(pterm0[31] => combout) = (0, 0) ;
(pterm1[0] => combout) = (0, 0) ;
(pterm1[1] => combout) = (0, 0) ;
(pterm1[2] => combout) = (0, 0) ;
(pterm1[3] => combout) = (0, 0) ;
(pterm1[4] => combout) = (0, 0) ;
(pterm1[5] => combout) = (0, 0) ;
(pterm1[6] => combout) = (0, 0) ;
(pterm1[7] => combout) = (0, 0) ;
(pterm1[8] => combout) = (0, 0) ;
(pterm1[9] => combout) = (0, 0) ;
(pterm1[10] => combout) = (0, 0) ;
(pterm1[11] => combout) = (0, 0) ;
(pterm1[12] => combout) = (0, 0) ;
(pterm1[13] => combout) = (0, 0) ;
(pterm1[14] => combout) = (0, 0) ;
(pterm1[15] => combout) = (0, 0) ;
(pterm1[16] => combout) = (0, 0) ;
(pterm1[17] => combout) = (0, 0) ;
(pterm1[18] => combout) = (0, 0) ;
(pterm1[19] => combout) = (0, 0) ;
(pterm1[20] => combout) = (0, 0) ;
(pterm1[21] => combout) = (0, 0) ;
(pterm1[22] => combout) = (0, 0) ;
(pterm1[23] => combout) = (0, 0) ;
(pterm1[24] => combout) = (0, 0) ;
(pterm1[25] => combout) = (0, 0) ;
(pterm1[26] => combout) = (0, 0) ;
(pterm1[27] => combout) = (0, 0) ;
(pterm1[28] => combout) = (0, 0) ;
(pterm1[29] => combout) = (0, 0) ;
(pterm1[30] => combout) = (0, 0) ;
(pterm1[31] => combout) = (0, 0) ;
(pexpin => combout) = (0, 0) ;
(pterm0[0] => pexpout) = (0, 0) ;
(pterm0[1] => pexpout) = (0, 0) ;
(pterm0[2] => pexpout) = (0, 0) ;
(pterm0[3] => pexpout) = (0, 0) ;
(pterm0[4] => pexpout) = (0, 0) ;
(pterm0[5] => pexpout) = (0, 0) ;
(pterm0[6] => pexpout) = (0, 0) ;
(pterm0[7] => pexpout) = (0, 0) ;
(pterm0[8] => pexpout) = (0, 0) ;
(pterm0[9] => pexpout) = (0, 0) ;
(pterm0[10] => pexpout) = (0, 0) ;
(pterm0[11] => pexpout) = (0, 0) ;
(pterm0[12] => pexpout) = (0, 0) ;
(pterm0[13] => pexpout) = (0, 0) ;
(pterm0[14] => pexpout) = (0, 0) ;
(pterm0[15] => pexpout) = (0, 0) ;
(pterm0[16] => pexpout) = (0, 0) ;
(pterm0[17] => pexpout) = (0, 0) ;
(pterm0[18] => pexpout) = (0, 0) ;
(pterm0[19] => pexpout) = (0, 0) ;
(pterm0[20] => pexpout) = (0, 0) ;
(pterm0[21] => pexpout) = (0, 0) ;
(pterm0[22] => pexpout) = (0, 0) ;
(pterm0[23] => pexpout) = (0, 0) ;
(pterm0[24] => pexpout) = (0, 0) ;
(pterm0[25] => pexpout) = (0, 0) ;
(pterm0[26] => pexpout) = (0, 0) ;
(pterm0[27] => pexpout) = (0, 0) ;
(pterm0[28] => pexpout) = (0, 0) ;
(pterm0[29] => pexpout) = (0, 0) ;
(pterm0[30] => pexpout) = (0, 0) ;
(pterm0[31] => pexpout) = (0, 0) ;
(pterm1[0] => pexpout) = (0, 0) ;
(pterm1[1] => pexpout) = (0, 0) ;
(pterm1[2] => pexpout) = (0, 0) ;
(pterm1[3] => pexpout) = (0, 0) ;
(pterm1[4] => pexpout) = (0, 0) ;
(pterm1[5] => pexpout) = (0, 0) ;
(pterm1[6] => pexpout) = (0, 0) ;
(pterm1[7] => pexpout) = (0, 0) ;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?