blob: c008ce3b4cd5616cb4ce164f17868620895455c3 [file] [log] [blame]
// SPDX-FileCopyrightText:
// 2021 Nguyen Dao
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0
module InPass4_frame_config (I0, I1, I2, I3, O0, O1, O2, O3, UserCLK, ConfigBits);
parameter NoConfigBits = 4;
// Pin0
input I0; //EXTERNAL
input I1; //EXTERNAL
input I2; //EXTERNAL
input I3; //EXTERNAL
output O0; //EXTERNAL
output O1; //EXTERNAL
output O2; //EXTERNAL
output O3; //EXTERNAL
// Tile IO ports from BELs
input UserCLK; //EXTERNAL -- SHARED_PORT -- ## the EXTERNAL keyword will send this signal all the way to top and the --SHARED Allows multiple BELs using the same port (e.g. for exporting a clock to the top)
// GLOBAL all primitive pins that are connected to the switch matrix have to go before the GLOBAL label
input [NoConfigBits - 1 : 0] ConfigBits;
//_____ ______
// I----+--->|FLOP|-Q-|1 M |
// | | U |-------> O
// +-------------|0 X |
// I am instantiating an IOBUF primitive.
// However, it is possible to connect corresponding pins all the way to top, just by adding an "-- EXTERNAL" comment (see PAD in the entity)
reg Q0, Q1, Q2, Q3; // FLOPs
always @ (posedge UserCLK)
begin
Q0 <= I0;
Q1 <= I1;
Q2 <= I2;
Q3 <= I3;
end
// ConfigBits ( '0' combinatorial; '1' registered )
//assign O0 = ConfigBits[0] ? Q0 : I0;
//assign O1 = ConfigBits[1] ? Q1 : I1;
//assign O2 = ConfigBits[2] ? Q2 : I2;
//assign O3 = ConfigBits[3] ? Q3 : I3;
my_mux2 my_mux2_inst0(
.A0(I0),
.A1(Q0),
.S(ConfigBits[0]),
.X(O0)
);
my_mux2 my_mux2_inst1(
.A0(I1),
.A1(Q1),
.S(ConfigBits[1]),
.X(O1)
);
my_mux2 my_mux2_inst2(
.A0(I2),
.A1(Q2),
.S(ConfigBits[2]),
.X(O2)
);
my_mux2 my_mux2_inst3(
.A0(I3),
.A1(Q3),
.S(ConfigBits[3]),
.X(O3)
);
endmodule