mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-12 20:18:20 +00:00
87 lines
2.1 KiB
Verilog
87 lines
2.1 KiB
Verilog
|
|
// Based on the simulation models from /opt/altera/13.0/quartus/eda/sim_lib/cycloneiii_atoms.v
|
|
|
|
module cycloneiii_lcell_comb (dataa, datab, datac, datad, cin, combout, cout);
|
|
|
|
input dataa, datab, datac, datad, cin;
|
|
output combout, cout;
|
|
|
|
parameter lut_mask = 16'hFFFF;
|
|
parameter sum_lutc_input = "datac";
|
|
parameter dont_touch = "off";
|
|
parameter lpm_type = "cycloneiii_lcell_comb";
|
|
|
|
reg cout_tmp, combout_tmp;
|
|
reg [1:0] isum_lutc_input;
|
|
|
|
// 4-input LUT function
|
|
function lut4;
|
|
input [15:0] mask;
|
|
input dataa, datab, datac, datad;
|
|
begin
|
|
lut4 = datad ? ( datac ? ( datab ? ( dataa ? mask[15] : mask[14])
|
|
: ( dataa ? mask[13] : mask[12]))
|
|
: ( datab ? ( dataa ? mask[11] : mask[10])
|
|
: ( dataa ? mask[ 9] : mask[ 8])))
|
|
: ( datac ? ( datab ? ( dataa ? mask[ 7] : mask[ 6])
|
|
: ( dataa ? mask[ 5] : mask[ 4]))
|
|
: ( datab ? ( dataa ? mask[ 3] : mask[ 2])
|
|
: ( dataa ? mask[ 1] : mask[ 0])));
|
|
end
|
|
endfunction
|
|
|
|
initial
|
|
if (sum_lutc_input == "datac")
|
|
isum_lutc_input = 0;
|
|
else if (sum_lutc_input == "cin")
|
|
isum_lutc_input = 1;
|
|
else
|
|
isum_lutc_input = 2;
|
|
|
|
always @* begin
|
|
if (isum_lutc_input == 0) // datac
|
|
combout_tmp = lut4(lut_mask, dataa, datab, datac, datad);
|
|
else if (isum_lutc_input == 1) // cin
|
|
combout_tmp = lut4(lut_mask, dataa, datab, cin, datad);
|
|
cout_tmp = lut4(lut_mask, dataa, datab, cin, 'b0);
|
|
end
|
|
|
|
assign combout = combout_tmp;
|
|
assign cout = cout_tmp;
|
|
|
|
endmodule
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
module cycloneiii_io_ibuf (i, ibar, o);
|
|
|
|
parameter differential_mode = "false";
|
|
parameter bus_hold = "false";
|
|
parameter simulate_z_as = "Z";
|
|
parameter lpm_type = "cycloneiii_io_ibuf";
|
|
|
|
input i, ibar;
|
|
output o;
|
|
|
|
assign o = i;
|
|
|
|
endmodule
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
module cycloneiii_io_obuf (i, oe, seriesterminationcontrol, devoe, o, obar);
|
|
|
|
parameter open_drain_output = "false";
|
|
parameter bus_hold = "false";
|
|
parameter lpm_type = "cycloneiii_io_obuf";
|
|
|
|
input i, oe, devoe;
|
|
input [15:0] seriesterminationcontrol;
|
|
output o, obar;
|
|
|
|
assign o = i;
|
|
assign obar = ~i;
|
|
|
|
endmodule
|
|
|