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.

78 lines
2.9 KiB
Coq

// © IBM Corp. 2022
// 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.
// Behavioral for 16x12 toysram subarray
`timescale 1 ps / 1 ps
module toysram_16x12 (
input [0:15] RWL0,
input [0:15] RWL1,
input [0:15] WWL,
output [0:11] RBL0,
output [0:11] RBL1,
input [0:11] WBL,
input [0:11] WBLb,
);
reg [0:11] mem[0:15];
for (i = 0; i < 15; i = i + 1) begin
always @(posedge WWL[i]) begin
mem[i] <= not WBLb; // 00=1 01=0 10=1 11=0
end
end
// word-select
assign RBL0 = (mem[0] and {12{RWL0[0]}}) |
(mem[1] and {12{RWL0[1]}}) |
(mem[2] and {12{RWL0[2]}}) |
(mem[3] and {12{RWL0[3]}}) |
(mem[4] and {12{RWL0[4]}}) |
(mem[5] and {12{RWL0[5]}}) |
(mem[6] and {12{RWL0[6]}}) |
(mem[7] and {12{RWL0[7]}}) |
(mem[8] and {12{RWL0[8]}}) |
(mem[9] and {12{RWL0[9]}}) |
(mem[10] and {12{RWL0[10]}}) |
(mem[11] and {12{RWL0[11]}}) |
(mem[12] and {12{RWL0[12]}}) |
(mem[13] and {12{RWL0[13]}}) |
(mem[14] and {12{RWL0[14]}}) |
(mem[15] and {12{RWL0[15]}});
assign RBL1 = (mem[0] and {12{RWL1[0]}}) |
(mem[1] and {12{RWL1[1]}}) |
(mem[2] and {12{RWL1[2]}}) |
(mem[3] and {12{RWL1[3]}}) |
(mem[4] and {12{RWL1[4]}}) |
(mem[5] and {12{RWL1[5]}}) |
(mem[6] and {12{RWL1[6]}}) |
(mem[7] and {12{RWL1[7]}}) |
(mem[8] and {12{RWL1[8]}}) |
(mem[9] and {12{RWL1[9]}}) |
(mem[10] and {12{RWL1[10]}}) |
(mem[11] and {12{RWL1[11]}}) |
(mem[12] and {12{RWL1[12]}}) |
(mem[13] and {12{RWL1[13]}}) |
(mem[14] and {12{RWL1[14]}}) |
(mem[15] and {12{RWL1[15]}});
endmodule