// SPDX-FileCopyrightText: Copyright 2020 Jecel Mattos de Assumpcao Jr
// 
// SPDX-License-Identifier: Apache-2.0 
// 
// 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
// 
//     https://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.

// test vectors for basic Morphle Logic "yellow cell"
// to be used with test004ycell.v
//
// each vector in the the format of 7 hex digits
//
// for two bit wide signals 00 indicates "empty",
// "01" indicates a 0 value and "10 a 1 value
//
// the first digit is: 0,0,xhempty,xvempty
// where these are the expected values of hempty and vempty
// and these depend only on what the configuration of the cell is
//
// the second digit is: uempty,dempty,lempty,rempty
// these are 1 if the corresponding neighbors are empty
//
// the third digit is: reset,confclk,cbitin,xcbitout
// where reset is 1 to freeze the cell, and cbitin is a new
// configuration bit read on each rising edge of confclk
// the expected value of cbitout is the value of cbitin
// delayed by three clocks
//
// the fourth digit is: uin,xuout (two bits each)
// where uin is a value from the neighbor at the top and the
// expected value for uout goes to that neighbor
//
// the fifth digit is: din,xdout (two bits each)
// the sixth digit is: lin,xlout (two bits each)
// the seventh digit is: rin,xrout (two bits each 

0000000  // first two vectors have the output ignored to settle down
0080000  // reset everything [1]*
0080000  // keep it in reset a little longer
00C0000  // clock in a 0
0080000
00C0000  // another 0
0080000
30C0000  // configured to 000 (space)
3000000  // out of reset
3008000  // 1 from U
3008888  // 1 from all neighbors (now blocks to save energy)
3000400  // 0 from D (now blocks)
3080000  // reset
30C0000  // clock in a 0
30A0000
00E0000  // clock in a 1 (no longer empty - N)
00A0000
20E0000  // another 1 - configured to 110 (Y)
2000000  // out of reset
