📄 flex6000_atoms.v
字号:
icout = lut4(lut_mask, idataa, idatab, icin, 'b0);
data = (lut4(lut_mask, idataa, idatab, icin, 'b1)) && tmp_cascin;
end
if (operation_mode == "qfbk_counter")
begin
if ((icascin == 1'b1) || (icascin == 1'b0))
tmp_cascin = icascin;
icout = lut4(lut_mask, idataa, idatab, qfbkin, 'b0);
data = (lut4(lut_mask, idataa, idatab, qfbkin, 'b1)) && tmp_cascin;
end
end
assign icascout = data ;
and (cascout, icascout, 'b1) ;
and (combout, data, 'b1) ;
and (cout, icout, 'b1) ;
and (regin, data, 'b1) ;
endmodule
//
// flex6k_lcell_register
//
`timescale 1 ps/1 ps
module flex6k_lcell_register (clk, aclr, sclr, sload, datain, datac,
devclrn, devpor, regout, qfbko) ;
parameter operation_mode = "normal" ;
parameter packed_mode = "false" ;
parameter power_up = "low";
input clk, datain, datac;
input aclr, sclr, sload, devclrn, devpor ;
output regout, qfbko ;
reg iregout;
wire clk_in, idatac;
buf (clk_in, clk);
buf (iclr, aclr);
buf (isclr, sclr);
buf (isload, sload);
buf (idatac, datac);
specify
$period (posedge clk, 0);
$setuphold (posedge clk, datain, 0, 0) ;
$setuphold (posedge clk, datac, 0, 0) ;
$setuphold (posedge clk, sclr, 0, 0) ;
$setuphold (posedge clk, sload, 0, 0) ;
(posedge clk => (regout +: iregout)) = 0 ;
(posedge aclr => (regout +: 1'b0)) = (0, 0) ;
(posedge clk => (qfbko +: iregout)) = 0 ;
(posedge aclr => (qfbko +: 1'b0)) = (0, 0) ;
endspecify
initial
begin
if (power_up == "low")
iregout = 'b0;
else if (power_up == "high")
iregout = 'b1;
end
always @ (posedge clk_in or posedge iclr or negedge devclrn or negedge devpor)
begin
if (devpor == 'b0)
begin
if (power_up == "low")
iregout = 'b0;
else if (power_up == "high")
iregout = 'b1;
end
else if (devclrn == 'b0)
iregout = 'b0;
else if (isclr == 'b1)
iregout = 'b0;
else if (iclr == 'b1)
iregout = 'b0 ;
else if (isload == 'b1)
iregout = idatac ;
else if (clk_in == 'b1)
begin
if (isclr == 'b1)
iregout = 'b0 ;
else if (isload == 'b1)
iregout = idatac;
else if (packed_mode == "false")
iregout = datain ;
else if (operation_mode == "normal")
iregout = idatac ;
else
$display("Error: Invalid combination of parameters used. Packed mode may be used only when operation_mode is 'normal'.\n");
end
end
and (regout, iregout, 'b1) ;
and (qfbko, iregout, 'b1) ;
endmodule
//
// flex6k_lcell
//
`timescale 1 ps/1 ps
module flex6k_lcell (clk, dataa, datab, datac, datad,
aclr, sclr, sload, cin, cascin,
devclrn, devpor,
combout, regout, cout, cascout) ;
parameter operation_mode = "normal" ;
parameter output_mode = "reg_and_comb";
parameter packed_mode = "false" ;
parameter lut_mask = "ffff" ;
parameter power_up = "low";
parameter cin_used = "false";
input clk, dataa, datab, datac, datad ;
input aclr, sclr, sload, cin, cascin, devclrn, devpor ;
output cout, cascout, regout, combout ;
wire dffin, qfbk;
flex6k_asynch_lcell lecomb (dataa, datab, datac, datad, cin, cascin,
qfbk, combout, dffin, cout, cascout);
defparam
lecomb.operation_mode = operation_mode,
lecomb.output_mode = output_mode,
lecomb.cin_used = cin_used,
lecomb.lut_mask = lut_mask;
flex6k_lcell_register lereg (clk, aclr, sclr, sload, dffin, datac,
devclrn, devpor, regout, qfbk);
defparam
lereg.packed_mode = packed_mode,
lereg.power_up = power_up;
endmodule
///////////////////////////////////////////////////////////////////////////////
//
// FLEX6K IO Atom
//
`timescale 1 ps/1 ps
module flex6k_io (datain, oe, devclrn, devoe, devpor,
padio, combout) ;
parameter operation_mode = "input" ;
//parameter reg_source_mode = "none" ;
parameter feedback_mode = "from_pin" ;
parameter power_up = "low";
parameter output_enable ="false";
inout padio ;
input datain, oe, devpor, devoe, devclrn ;
output 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;
flex6k_asynch_io asynch_inst (datain, oe, padio, combout, devclrn, devoe, devpor);
defparam
asynch_inst.operation_mode = operation_mode,
//asynch_inst.reg_source_mode = reg_source_mode,
asynch_inst.feedback_mode = feedback_mode,
asynch_inst.power_up = power_up,
asynch_inst.output_enable = output_enable;
//dffe_io io_reg (dffeQ, clk, ena, dffeD, devclrn && !aclr && reg_clr, reg_pre);
endmodule
//
// ASYNCH_IO
//
module flex6k_asynch_io (datain, oe, padio, combout, devclrn, devoe, devpor) ;
parameter operation_mode = "input" ;
//parameter reg_source_mode = "none" ;
parameter feedback_mode = "from_pin" ;
parameter power_up = "low";
parameter output_enable = "false";
input datain, oe, devclrn, devoe, devpor;
output combout;
inout padio;
reg tmp_comb, tri_in, tmp_ioe;
reg reg_indata;
specify
(padio => combout) = (0, 0) ;
(datain => padio) = (0, 0) ;
(posedge oe => (padio +: tri_in)) = 0;
(negedge oe => (padio +: 1'bz)) = 0;
endspecify
buf (ipadio, padio);
buf (idatain, datain);
buf (ioe, oe);
initial
begin
tmp_comb = 0;
end
always @(ipadio or idatain or ioe or negedge devclrn or negedge devpor)
begin
if ((feedback_mode == "none"))
begin
if ((operation_mode == "output") ||
(operation_mode == "bidir"))
tri_in = idatain;
tmp_ioe = ioe;
end
else if ((feedback_mode == "from_pin"))
begin
if (operation_mode == "input")
begin
tmp_comb = ipadio;
tmp_ioe = 'b0;
end
else if (operation_mode == "bidir")
begin
tmp_ioe = ioe;
tmp_comb = datain;
if (ioe == 1'b1)
begin
tri_in = idatain;
end
else //if (ioe == 1'b0)
begin
tmp_comb = ipadio;
tri_in = 'bz;
end
end
else $display ("Error: Invalid operation_mode specified\n");
end
else $display ("Error: Invalid combination of parameters used\n");
end
and (combout , tmp_comb, 1'b1);
bufif1 (padio , tri_in, tmp_ioe);
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -