You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.5 KiB
Coq

2 years ago
// © IBM Corp. 2021
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by the terms below; you may not use the files in this
// repository except in compliance with the License as modified.
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
//
// Modified Terms:
//
// 1) For the purpose of the patent license granted to you in Section 3 of the License, the "Work" hereby includes implementations of
// the work of authorship in physical form.
//
// Unless required by applicable law or agreed to in writing, the reference design 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.
//
// Brief explanation of modifications:
//
// Modification 1: This modification extends the patent license to an implementation of the Work in physical form i.e.,
// it unambiguously permits a user to make and use the physical chip.
2 years ago
// Predecode of 6 address bits into 4 one hot encodings
`timescale 1 ns / 1 ns
module predecode (
2 years ago
strobe,
enable,
address,
// 12 predecoded address lines 2 - 4 - 2 - 4 one hot encoding
2 years ago
c_na0, // clock and not address(0)
c_a0, // clock and address(0)
na1_na2,// not address(1) and not address(2)
na1_a2, // not address(1) and address(2)
a1_na2, // address(1) and not address(2)
a1_a2, // address(1) and address(2)
na3, // not address(3)
a3, // address(3)
na4_na5,// not address(4) and not address(5)
na4_a5, // not address(4) address(5)
a4_na5, // address(4) and not address(5)
a4_a5 // address(4) and address(5)
);
2 years ago
input strobe;
input enable;
2 years ago
input [0:5] address;
output c_na0;
output c_a0;
output na1_na2;
output na1_a2;
output a1_na2;
output a1_a2; // address(1) and address(2)
output na3; // not address(3)
output a3; // address(3)
output na4_na5;// not address(4) and not address(5)
output na4_a5; // not address(4) address(5)
output a4_na5; // address(4) and not address(5)
output a4_a5; // address(4) and address(5)
2 years ago
wire clock_enable;
2 years ago
wire [0:5] inv_address;
2 years ago
wire n_c_na0;
wire n_c_a0;
wire n_na1_na2;
wire n_na1_a2;
wire n_a1_na2;
wire n_a1_a2;
wire n_na4_na5;
wire n_na4_a5;
wire n_a4_na5;
wire n_a4_a5;
2 years ago
// and read or write enable with clock
// does this need to be SSB placed?
assign clock_enable = strobe & enable;
2 years ago
assign inv_address[0] = (~(address[0]));
assign inv_address[1] = (~(address[1]));
assign inv_address[2] = (~(address[2]));
assign inv_address[3] = (~(address[3]));
assign inv_address[4] = (~(address[4]));
assign inv_address[5] = (~(address[5]));
2 years ago
// A(0) address predecode and gating with clock
assign c_na0 = clock_enable & inv_address[0];
2 years ago
assign c_a0 = clock_enable & address[0];
2 years ago
// A(1:2) address predecode
2 years ago
assign na1_na2 = inv_address[1] & inv_address[2];
2 years ago
assign na1_a2 = inv_address[1] & address[2];
2 years ago
assign a1_na2 = address[1] & inv_address[2];
2 years ago
assign a1_a2 = address[1] & address[2];
2 years ago
// A(3) address predecode
assign na3 = inv_address[3];
assign a3 = address[3];
// A(4:5) address predecode
2 years ago
assign na4_na5 = inv_address[4] & inv_address[5];
assign na4_a5 = inv_address[4] & address[5];
2 years ago
assign a4_na5 = address[4] & inv_address[5];
assign a4_a5 = address[4] & address[5];
endmodule