OpenCores
URL https://opencores.org/ocsvn/hive/hive/trunk

Subversion Repositories hive

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/hive/trunk/v01.09/op_encode.h
0,0 → 1,97
`define ie 4'b0010
`define iez 4'b0011
`define il 4'b0100
`define ilz 4'b0101
`define ile 4'b0110
`define ilez 4'b0111
`define iug 4'b1000
`define igz 4'b1001
`define iuge 4'b1010
`define igez 4'b1011
`define igl 4'b1100
`define iglz 4'b1101
`define igle 3'b111
//
`define ez 3'b001
`define lz 3'b010
`define lez 3'b011
`define gz 3'b100
`define gez 3'b101
`define glz 3'b110
`define glez 3'b111
//
localparam OP_W = 10;
//
// immediate read & write - 64 codes
localparam [OP_W-1:0] op_rd_i = { 4'h0, 2'b00, 4'bxxxx }; // mem(B+I[3:0]) => A read immediate w/ offset (signed)
localparam [OP_W-1:0] op_rd_ix = { 4'h0, 2'b01, 4'bxxxx }; // {mem(B+I[3:0]), A[lo]} => A read immediate extended w/ offset
localparam [OP_W-1:0] op_wr_i = { 4'h0, 2'b10, 4'bxxxx }; // A[lo] => mem(B+I[3:0]) write immediate w/ offset
localparam [OP_W-1:0] op_wr_ix = { 4'h0, 2'b11, 4'bxxxx }; // A[hi] => mem(B+I[3:0]) write immediate extended w/ offset
// immediate conditional jump - 384 codes
localparam [OP_W-1:0] op_jmp_ie = { 1'b0, `ie, 5'bxxxxx }; // (A?B), (A?0) PC+I[4:0] => PC jump relative immediate conditional
localparam [OP_W-1:0] op_jmp_iez = { 1'b0, `iez, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_il = { 1'b0, `il, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_ilz = { 1'b0, `ilz, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_ile = { 1'b0, `ile, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_ilez = { 1'b0, `ilez, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_iug = { 1'b0, `iug, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_igz = { 1'b0, `igz, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_iuge = { 1'b0, `iuge, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_igez = { 1'b0, `igez, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_igl = { 1'b0, `igl, 5'bxxxxx };
localparam [OP_W-1:0] op_jmp_iglz = { 1'b0, `iglz, 5'bxxxxx };
// immediate unconditional jump - 64 codes
localparam [OP_W-1:0] op_jmp_i = { 1'b0, `igle, 6'bxxxxxx };
// immediate byte - 256 codes
localparam [OP_W-1:0] op_byt_i = { 2'b10, 8'bxxxxxxxx }; // I[7:0] => A byte immediate (signed)
// immediate shift - 128 codes
localparam [OP_W-1:0] op_shl_i = { 4'hc, 6'bxxxxxx }; // A<<I => A shift left A (signed) immediate
localparam [OP_W-1:0] op_shl_iu = { 4'hd, 6'bxxxxxx }; // 1<<I | A<<I => A shift left immediate unsigned
// immediate add - 64 codes
localparam [OP_W-1:0] op_add_i = { 4'he, 6'bxxxxxx }; // A+I[5:0] => A add immediate (I signed)
// conditional jump - 7 of 8 codes
localparam [OP_W-1:0] op_jmp_ez = { 4'hf, 3'b000, `ez }; // (A?0) PC+B[lo] => PC jump relative conditional
localparam [OP_W-1:0] op_jmp_lz = { 4'hf, 3'b000, `lz };
localparam [OP_W-1:0] op_jmp_lez = { 4'hf, 3'b000, `lez };
localparam [OP_W-1:0] op_jmp_gz = { 4'hf, 3'b000, `gz };
localparam [OP_W-1:0] op_jmp_gez = { 4'hf, 3'b000, `gez };
localparam [OP_W-1:0] op_jmp_glz = { 4'hf, 3'b000, `glz };
localparam [OP_W-1:0] op_jmp = { 4'hf, 3'b000, `glez };
// conditional goto - 7 of 8 codes
localparam [OP_W-1:0] op_gto_ez = { 4'hf, 3'b001, `ez }; // (A?0) B[lo] => PC jump absolute conditional
localparam [OP_W-1:0] op_gto_lz = { 4'hf, 3'b001, `lz };
localparam [OP_W-1:0] op_gto_lez = { 4'hf, 3'b001, `lez };
localparam [OP_W-1:0] op_gto_gz = { 4'hf, 3'b001, `gz };
localparam [OP_W-1:0] op_gto_gez = { 4'hf, 3'b001, `gez };
localparam [OP_W-1:0] op_gto_glz = { 4'hf, 3'b001, `glz };
localparam [OP_W-1:0] op_gto = { 4'hf, 3'b001, `glez };
// singles - 48 codes
localparam [OP_W-1:0] op_add = { 4'hf, 2'b01, 4'h0 }; // A+B => A add
localparam [OP_W-1:0] op_add_x = { 4'hf, 2'b01, 4'h2 }; // A+B => A add extended (signed)
localparam [OP_W-1:0] op_add_ux = { 4'hf, 2'b01, 4'h3 }; // A+B => A add extended unsigned
localparam [OP_W-1:0] op_sub = { 4'hf, 2'b01, 4'h4 }; // A-B => A subtract
localparam [OP_W-1:0] op_sub_x = { 4'hf, 2'b01, 4'h6 }; // A-B => A subtract extended (signed)
localparam [OP_W-1:0] op_sub_ux = { 4'hf, 2'b01, 4'h7 }; // A-B => A subtract extended unsigned
localparam [OP_W-1:0] op_mul = { 4'hf, 2'b01, 4'h8 }; // A*B => A multiply
localparam [OP_W-1:0] op_mul_x = { 4'hf, 2'b01, 4'ha }; // A*B => A multiply extended (signed)
localparam [OP_W-1:0] op_mul_ux = { 4'hf, 2'b01, 4'hb }; // A*B => A multiply extended unsigned
localparam [OP_W-1:0] op_shl = { 4'hf, 2'b01, 4'hc }; // A<<B => A shift left A (signed)
localparam [OP_W-1:0] op_shl_u = { 4'hf, 2'b01, 4'hd }; // 1<<B | A<<B => A 2^B | shift left A unsigned
//
localparam [OP_W-1:0] op_and = { 4'hf, 2'b10, 4'h0 }; // A&B => A logical AND
localparam [OP_W-1:0] op_or = { 4'hf, 2'b10, 4'h1 }; // A|B => A logical OR
localparam [OP_W-1:0] op_xor = { 4'hf, 2'b10, 4'h2 }; // A^B => A logical XOR
localparam [OP_W-1:0] op_not = { 4'hf, 2'b10, 4'h3 }; // ~B => A logical NOT
localparam [OP_W-1:0] op_and_b = { 4'hf, 2'b10, 4'h4 }; // &B => A logical AND bit reduction
localparam [OP_W-1:0] op_or_b = { 4'hf, 2'b10, 4'h5 }; // |B => A logical OR bit reduction
localparam [OP_W-1:0] op_xor_b = { 4'hf, 2'b10, 4'h6 }; // ^B => A logical XOR bit reduction
//
localparam [OP_W-1:0] op_lit = { 4'hf, 2'b11, 4'h0 }; // mem(PC) => A literal low (signed)
localparam [OP_W-1:0] op_lit_u = { 4'hf, 2'b11, 4'h1 }; // mem(PC) => A literal low unsigned
localparam [OP_W-1:0] op_lit_x = { 4'hf, 2'b11, 4'h2 }; // {mem(PC),A[lo]} => A literal extended
localparam [OP_W-1:0] op_cpy = { 4'hf, 2'b11, 4'h4 }; // B => A copy
localparam [OP_W-1:0] op_pc = { 4'hf, 2'b11, 4'h8 }; // PC => A read PC (unsigned)
localparam [OP_W-1:0] op_gsb = { 4'hf, 2'b11, 4'h9 }; // B[lo] => PC, PC => A subroutine call
localparam [OP_W-1:0] op_cls = { 4'hf, 2'b11, 4'hc }; // clear stacks
localparam [OP_W-1:0] op_pop = { 4'hf, 2'b11, 4'he }; // do nothing (but allow pops)
localparam [OP_W-1:0] op_nop = { 4'hf, 2'b11, 4'hf }; // do nothing (no pops either)
/hive/trunk/v01.09/boot_code.h
0,0 → 1,512
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
// Thread 0 : test ALU logical functions
// Thread 1 : test ALU arithmetic functions
// Thread 2 : test ALU shift functions
// All other threads : loop forever
 
///////////////
// clr space //
///////////////
 
// thread 0
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h100 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// thread 1
i='h4; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h200 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// thread 2
i='h8; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h300 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// and the rest (are here on Gilligan's Isle)
i='hc; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
////////////////
// intr space //
////////////////
 
///////////////////////
// code & data space //
///////////////////////
 
 
// test ALU logical functions, result in s0
// Correct functioning is s0 = 'd12 ('hc).
//
// s0 : final test result
// s1 : test value
// s2 : test value
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h100; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// load s1 & s2 values
i=i+1; ram[i] = { `op_byt_i, -8'h1, `_, `_, `s1, `s1 }; // -1 => s1
i=i+1; ram[i] = { `op_byt_i, 8'h1, `_, `_, `s2, `s2 }; // 1 => s2
// AND_B ( &(-1)=-1; &(1)= 0 )
i=i+1; ram[i] = { op_and_b, `_, `_, `s1, `s0 }; // &s1=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_and_b, `_, `_, `s2, `s0 }; // &s2=>s0
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// OR_B ( |(-1)=-1; |(1)=-1 )
i=i+1; ram[i] = { op_or_b, `_, `_, `s1, `s0 }; // |s1=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_or_b, `_, `_, `s2, `s0 }; // |s2=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// XOR_B ( ^(-1)= 0; ^(1)=-1 )
i=i+1; ram[i] = { op_xor_b, `_, `_, `s1, `s0 }; // ^s1=>s0
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_xor_b, `_, `_, `s2, `s0 }; // ^s2=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// clean up
i=i+1; ram[i] = { op_pop, `P, `P, `s2, `s1 }; // pop s2 & s1
// load s1 & s2 values
i=i+1; ram[i] = { op_lit, `_, `_, `s1, `s1 }; // lit => s1
i=i+1; ram[i] = 16'ha53c ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s1, `s1 }; // lit => s1, pop combine
i=i+1; ram[i] = 16'h36c9 ; // hi data
//
i=i+1; ram[i] = { op_lit, `_, `_, `s2, `s2 }; // lit => s2
i=i+1; ram[i] = 16'hc396 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s2, `s2 }; // lit => s2, pop combine
i=i+1; ram[i] = 16'h5ca3 ; // hi data
// AND (s/b 'h1481,8114)
i=i+1; ram[i] = { op_and, `_, `_, `s2, `s1 }; // s1&s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h8114 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h1481 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// OR (s/b 'h7eeb,e7be)
i=i+1; ram[i] = { op_or, `_, `_, `s2, `s1 }; // s1|s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'he7be ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h7eeb ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// XOR (s/b 'h6a6a,66aa)
i=i+1; ram[i] = { op_xor, `_, `_, `s2, `s1 }; // s1^s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h66aa ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h6a6a ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// NOT (s/b 'hc936,5ac3)
i=i+1; ram[i] = { op_not, `_, `_, `s1, `s1 }; // ~s1=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h5ac3 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hc936 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `_, `s3, `s0 }; // s3=>s0, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
 
// test ALU arithmetic functions, result in s0
// Correct functioning is s0 = 'd13 ('hd).
//
// s0 : final test result
// s1 : test value
// s2 : test value
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h200; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// load s1 & s2 values
i=i+1; ram[i] = { op_lit, `_, `_, `s1, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h36c9 ; // hi data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s1, `s1 }; // lit => s1, pop combine
i=i+1; ram[i] = 16'ha53c ; // lo data
//
i=i+1; ram[i] = { op_lit, `_, `_, `s2, `s2 }; // lit => s2
i=i+1; ram[i] = 16'hc396 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s2, `s2 }; // lit => s2, pop combine
i=i+1; ram[i] = 16'h5ca3 ; // hi data
// ADD_I -32 (s/b 'ha53c,36a9)
i=i+1; ram[i] = { `op_add_i, -6'd32, `_, `_, `s1, `s1 }; // s1-32=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h36a9 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'ha53c ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD_I +31 (s/b 'ha53c,36e8)
i=i+1; ram[i] = { `op_add_i, 6'd31, `_, `_, `s1, `s1 }; // s1+31=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h36e8 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'ha53c ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD (s/b 'h01df,fa5f)
i=i+1; ram[i] = { op_add, `_, `_, `s2, `s1 }; // s1+s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hfa5f ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h01df ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD_X (s/b 0)
i=i+1; ram[i] = { op_add_x, `_, `_, `s2, `s1 }; // s1+s2=>s1
i=i+1; ram[i] = { `op_byt_i, 8'h0, `_, `_, `s0, `s0 }; // 0 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD_UX (s/b 1)
i=i+1; ram[i] = { op_add_ux, `_, `_, `s2, `s1 }; // s1+s2=>s1
i=i+1; ram[i] = { `op_byt_i, 8'h1, `_, `_, `s0, `s0 }; // 1 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SUB (s/b 'h4898,7333)
i=i+1; ram[i] = { op_sub, `_, `_, `s2, `s1 }; // s1-s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h7333 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h4898 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SUB_X (s/b -1)
i=i+1; ram[i] = { op_sub_x, `_, `_, `s2, `s1 }; // s1-s2=>s1
i=i+1; ram[i] = { `op_byt_i, -8'h1, `_, `_, `s0, `s0 }; // -1 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SUB_UX (s/b 0)
i=i+1; ram[i] = { op_sub_ux, `_, `_, `s2, `s1 }; // s1-s2=>s1
i=i+1; ram[i] = { `op_byt_i, 8'h0, `_, `_, `s0, `s0 }; // 0 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// MUL (s/b 'hccfe,34c6)
i=i+1; ram[i] = { op_mul, `_, `_, `s2, `s1 }; // s1*s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h34c6 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hccfe ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// MUL_X (s/b 'hdf27,93ae)
i=i+1; ram[i] = { op_mul_x, `_, `_, `s2, `s1 }; // s1*s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h93ae ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hdf27 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// MUL_UX (s/b 'h3bcb,5744)
i=i+1; ram[i] = { op_mul_ux, `_, `_, `s2, `s1 }; // s1*s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h5744 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h3bcb ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `_, `s3, `s0 }; // s3=>s0, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
// test ALU shift functions, result in s0
// Correct functioning is s0 = 'd10 ('ha).
//
// s0 : final test result
// s1 : test value
// s2 : test value
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h300; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// load s1 value 0xa53c36c9
i=i+1; ram[i] = { op_lit, `_, `_, `s1, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h36c9 ; // hi data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s1, `s1 }; // lit => s1, pop combine
i=i+1; ram[i] = 16'ha53c ; // lo data
// SHL_I -28 (s/b 'hffff,fffa)
i=i+1; ram[i] = { `op_shl_i, -6'd28, `_, `_, `s1, `s1 }; // s1<<-28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hfffa ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hffff ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_I +28 (s/b 'h9000,0000)
i=i+1; ram[i] = { `op_shl_i, 6'd28, `_, `_, `s1, `s1 }; // s1<<28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h0000 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h9000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_IU -28 (s/b 'h0000,000a)
i=i+1; ram[i] = { `op_shl_iu, -6'd28, `_, `_, `s1, `s1 }; // s1<<-28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h000a ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h0000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_IU +28 (s/b 'h1000,0000)
i=i+1; ram[i] = { `op_shl_iu, 6'd28, `_, `_, `s1, `s1 }; // 1<<28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h0000 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h1000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL -4 (s/b 'hfa53,c36c)
i=i+1; ram[i] = { `op_byt_i, -8'd4, `_, `_, `s2, `s2 }; // -4=>s2
i=i+1; ram[i] = { op_shl, `P, `_, `s2, `s1 }; // s1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hc36c ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hfa53 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL +4 (s/b 'h53c3,6c90)
i=i+1; ram[i] = { `op_byt_i, 8'd4, `_, `_, `s2, `s2 }; // 4=>s2
i=i+1; ram[i] = { op_shl, `P, `_, `s2, `s1 }; // s1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h6c90 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h53c3 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_U -4 (s/b 'h0a53,c36c)
i=i+1; ram[i] = { `op_byt_i, -8'd4, `_, `_, `s2, `s2 }; // -4=>s2
i=i+1; ram[i] = { op_shl_u, `P, `_, `s2, `s1 }; // s1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hc36c ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h0a53 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL +4 (s/b 'h0000,0010)
i=i+1; ram[i] = { `op_byt_i, 8'd4, `_, `_, `s2, `s2 }; // 4=>s2
i=i+1; ram[i] = { op_shl_u, `P, `_, `s2, `s1 }; // 1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h0010 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h0000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `_, `s3, `s0 }; // s3=>s0, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
 
 
/////////////////
// subroutines //
/////////////////
 
 
// sub : read & clear opcode errors for this thread => s0, return to (s3)
i='h900; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { `op_rd_i, OP_ER_ADDR, `_, `_, `s2, `s3 }; // read (s2+offset)=>s3
i=i+1; ram[i] = { op_and, `P, `P, `s3, `s0 }; // s0&s3=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, OP_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
// sub : read & clear stack errors for this thread => s0, return to (s3)
i='h910; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { op_cpy, `_, `_, `s0, `s3 }; // s0=>s3
i=i+1; ram[i] = { `op_shl_i, 6'd8, `_, `P, `s0, `s3 }; // s3<<8=>s3, pop s3
i=i+1; ram[i] = { op_or, `P, `P, `s3, `s0 }; // s0|s3=>s0, pop both
i=i+1; ram[i] = { `op_rd_i, STK_ER_ADDR, `_, `_, `s2, `s3 }; // read (s2+offset)=>s3
i=i+1; ram[i] = { op_and, `P, `P, `s3, `s0 }; // s0&s3=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, STK_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
 
end
/hive/trunk/v01.09/alu_mult_shift.v
0,0 → 1,196
/*
--------------------------------------------------------------------------------
 
Module : alu_mult_shift
 
--------------------------------------------------------------------------------
 
Function:
- Multiply & shift unit for a processor ALU.
 
Instantiates:
- functions.h (clog2)
- (1x) alu_multiply.v
- (1x) vector_sr.v (debug mode only)
- (3x) vector_sr.v
 
Notes:
- I/O optionally registered.
- 5 stage pipeline w/ 4 mid registers (not counting I/O registering).
- Shift left signed uses signed B to shift signed A left (B+) and right (B-).
- Shift left unsigned and B(0,+) gives 2^B (one-hot / power of 2).
- Shift left unsigned and B(-) gives unsigned A shift right.
- Shift takes precedence over multiply.
- Copy takes precedence over shift & multiply.
- Copy unsigned & signed unextended results s/b the same.
- Copy unsigned extended result s/b all zero.
- Copy signed extended result s/b all B sign.
- Debug mode for comparison to native signed multiplication, only use for
simulation as it consumes resources and negatively impacts top speed.
 
--------------------------------------------------------------------------------
*/
 
module alu_mult_shift
#(
parameter integer REGS_IN = 1, // in register option
parameter integer REGS_OUT = 1, // out register option
parameter integer DATA_W = 4, // data width
parameter integer DEBUG_MODE = 1 // 1=debug mode; 0=normal mode
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire sgn_i, // 1=signed
input wire ext_i, // 1=extended result
input wire shl_i, // 1=shift left
input wire cpy_i, // 1=copy b
// data I/O
input wire [DATA_W-1:0] a_i, // operand
input wire [DATA_W-1:0] b_i, // operand
output wire [DATA_W-1:0] result_o, // result
// debug
output wire debug_o // 1=bad match
);
 
/*
----------------------
-- internal signals --
----------------------
*/
`include "functions.h" // for clog2()
localparam integer SH_SEL_W = clog2( DATA_W );
localparam integer ZSX_W = DATA_W+1; // +1 extra bit
localparam integer DBL_W = DATA_W*2; // double width
//
wire [DATA_W-1:0] a, b;
wire cpy, shl, ext, sgn;
reg [DATA_W:0] a_mux, b_mux; // +1 extra bit
reg ext_mux;
wire ext_mux_r;
wire [DBL_W-1:0] res_dbl;
reg [DATA_W-1:0] result;
 
 
/*
================
== code start ==
================
*/
 
 
// optional input regs
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( DATA_W+DATA_W+4 ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { a_i, b_i, cpy_i, shl_i, ext_i, sgn_i } ),
.data_o ( { a, b, cpy, shl, ext, sgn } )
);
 
 
// mux inputs and extended result selector
always @ ( * ) begin
casex ( { cpy, shl, sgn } )
'b000 : begin // unsigned multiply
a_mux <= a; // zero extend
b_mux <= b; // zero extend
ext_mux <= ext; // follow input
end
'b001 : begin // signed multiply
a_mux <= { a[DATA_W-1], a }; // sign extend
b_mux <= { b[DATA_W-1], b }; // sign extend
ext_mux <= ext; // follow input
end
'b010 : begin // unsigned shift / pow2
a_mux <= ( b[DATA_W-1] ) ? a : 1'b1; // a=1 for positive shifts
b_mux <= 1'b1 << b[SH_SEL_W-1:0]; // pow2
ext_mux <= b[DATA_W-1]; // sign selects output
end
'b011 : begin // signed shift
a_mux <= { a[DATA_W-1], a }; // sign extend
b_mux <= 1'b1 << b[SH_SEL_W-1:0]; // pow2
ext_mux <= b[DATA_W-1]; // sign selects output
end
'b1x0 : begin // unsigned copy b
a_mux <= 1'b1; // a=1
b_mux <= b; // zero extend
ext_mux <= ext; // follow input
end
'b1x1 : begin // signed copy b
a_mux <= 1'b1; // a=1
b_mux <= { b[DATA_W-1], b }; // sign extend
ext_mux <= ext; // follow input
end
endcase
end
 
 
// signed multiplier (4 registers deep)
alu_multiply
#(
.DATA_W ( ZSX_W ),
.DEBUG_MODE ( DEBUG_MODE )
)
alu_multiply
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.a_i ( a_mux ),
.b_i ( b_mux ),
.result_o ( res_dbl ),
.debug_o ( debug_o )
);
 
 
// pipeline extended result selector to match multiply
vector_sr
#(
.REGS ( 4 ),
.DATA_W ( 1 ),
.RESET_VAL ( 0 )
)
regs_ext
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( ext_mux ),
.data_o ( ext_mux_r )
);
 
 
// multiplex
always @ ( * ) begin
case ( ext_mux_r )
'b0 : result <= res_dbl[DATA_W-1:0];
'b1 : result <= res_dbl[DBL_W-1:DATA_W];
endcase
end
 
// optional output regs
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( DATA_W ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( result ),
.data_o ( result_o )
);
 
 
endmodule
/hive/trunk/v01.09/alu_multiply.v
0,0 → 1,155
/*
--------------------------------------------------------------------------------
 
Module : alu_multiply
 
--------------------------------------------------------------------------------
 
Function:
- Signed multiply unit for a processor ALU.
 
Instantiates:
- (1x) vector_sr.v (debug mode only)
 
Notes:
- 3 stage 4 register pipeline.
- Multiply stage I/O registers are likely free (part of multiplier fabric).
- Debug mode for comparison to native signed multiplication, only use for
simulation / verification as it consumes resources and negatively impacts
top speed.
 
--------------------------------------------------------------------------------
*/
 
module alu_multiply
#(
parameter integer DATA_W = 33, // data width
parameter integer DEBUG_MODE = 1 // 1=debug mode; 0=normal mode
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// data I/O
input wire [DATA_W-1:0] a_i, // operand
input wire [DATA_W-1:0] b_i, // operand
output reg [DATA_W*2-1:0] result_o, // = ( a_i * b_i )
// debug
output wire debug_o // 1=bad match
);
 
/*
----------------------
-- internal signals --
----------------------
*/
localparam integer HI_W = DATA_W/2; // 16
localparam integer LO_W = DATA_W-HI_W; // 17
localparam integer MULT_W = LO_W*2; // 34
localparam integer DBL_W = DATA_W*2; // 66
//
reg signed [DATA_W-1:0] a, b;
wire signed [HI_W-1:0] a_hi, b_hi;
wire signed [LO_W:0] a_lo_ze, b_lo_ze; // 35 (extra zero MSB)
reg signed [MULT_W-1:0] mult_hi_hi, mult_hi_lo, mult_lo_hi, mult_lo_lo;
reg signed [DBL_W-1:0] inner_sum, outer_cat;
 
 
/*
================
== code start ==
================
*/
 
 
// input registering (likely free)
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
a <= 'b0;
b <= 'b0;
end else begin
a <= a_i;
b <= b_i;
end
end
// select & extend inputs
assign a_hi = a[DATA_W-1:LO_W];
assign b_hi = b[DATA_W-1:LO_W];
assign a_lo_ze = { 1'b0, a[LO_W-1:0] };
assign b_lo_ze = { 1'b0, b[LO_W-1:0] };
 
// do all multiplies & register (registers are likely free)
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
mult_hi_hi <= 'b0;
mult_hi_lo <= 'b0;
mult_lo_hi <= 'b0;
mult_lo_lo <= 'b0;
end else begin
mult_hi_hi <= a_hi * b_hi;
mult_hi_lo <= a_hi * b_lo_ze;
mult_lo_hi <= a_lo_ze * b_hi;
mult_lo_lo <= a_lo_ze * b_lo_ze;
end
end
 
// add and shift inner terms, concatenate outer terms, register
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
inner_sum <= 'b0;
outer_cat <= 'b0;
end else begin
inner_sum <= ( mult_hi_lo + mult_lo_hi ) << LO_W;
outer_cat <= { mult_hi_hi[HI_W*2-1:0], mult_lo_lo };
end
end
 
// final add & register
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
result_o <= 'b0;
end else begin
result_o <= outer_cat + inner_sum;
end
end
 
 
// optional debug mode
generate
if ( DEBUG_MODE ) begin
wire signed [DBL_W-1:0] debug_mult, debug_mult_r;
reg debug;
assign debug_mult = a * b;
// delay regs
vector_sr
#(
.REGS ( 3 ),
.DATA_W ( DBL_W ),
.RESET_VAL ( 0 )
)
regs_debug
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( debug_mult ),
.data_o ( debug_mult_r )
);
// compare & register
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
debug <= 'b0;
end else begin
debug <= ( debug_mult_r != result_o );
end
end
//
assign debug_o = debug;
end else begin
assign debug_o = 'b0;
end
endgenerate
 
 
endmodule
/hive/trunk/v01.09/stacks_mux.v
0,0 → 1,85
/*
--------------------------------------------------------------------------------
 
Module : stacks_mux.v
 
--------------------------------------------------------------------------------
 
Function:
- Output multiplexer for processor stacks.
 
Instantiates:
- (1x) vector_sr.v
 
Notes:
- Purely combinatorial.
 
--------------------------------------------------------------------------------
*/
 
module stacks_mux
#(
parameter integer DATA_W = 32, // data width
parameter integer STK_W = 2, // stack selector width
parameter integer IM_DATA_W = 8 // immediate data width
)
(
// control I/O
input wire [STK_W-1:0] a_sel_i, // stack selector
input wire [STK_W-1:0] b_sel_i, // stack selector
input wire imda_i, // 1=immediate data
// data I/O
input wire [DATA_W-1:0] pop_data0_i, // stack data
input wire [DATA_W-1:0] pop_data1_i, // stack data
input wire [DATA_W-1:0] pop_data2_i, // stack data
input wire [DATA_W-1:0] pop_data3_i, // stack data
input wire [IM_DATA_W-1:0] im_data_i, // immediate data
//
output wire [DATA_W-1:0] a_o, // results
output wire [DATA_W-1:0] b_o,
output wire [DATA_W-1:0] b_alu_o
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
reg [DATA_W-1:0] a, b;
 
 
/*
================
== code start ==
================
*/
 
 
// mux stack read data
always @ ( * ) begin
case ( a_sel_i )
'b00 : a <= pop_data0_i;
'b01 : a <= pop_data1_i;
'b10 : a <= pop_data2_i;
'b11 : a <= pop_data3_i;
endcase
end
// mux stack read data
always @ ( * ) begin
case ( b_sel_i )
'b00 : b <= pop_data0_i;
'b01 : b <= pop_data1_i;
'b10 : b <= pop_data2_i;
'b11 : b <= pop_data3_i;
endcase
end
// output
assign a_o = a;
assign b_o = b;
assign b_alu_o = ( imda_i ) ? $signed( im_data_i ) : $signed( b );
 
 
endmodule
/hive/trunk/v01.09/copyright.txt
0,0 → 1,2
Copyright (c) Eric David Wallin, 2013.
Permission to use, copy, modify, and/or distribute this design for any purpose without fee is hereby granted, provided it is not used for spying or "surveillance" uses, military or "defense" projects, weaponry, or other nefarious purposes. Furthermore the above copyright and this permission notice must appear in all copies.
/hive/trunk/v01.09/dp_ram_infer.v
0,0 → 1,137
/*
--------------------------------------------------------------------------------
 
Module: dp_ram_infer.v
 
Function:
- Infers a parameterized dual port synchronous RAM.
 
Instantiates:
- Nothing (block RAM will most likely be synthesized).
 
Notes:
- A & B sides are separate clock domains.
- Writes accept data after the address & write enable on the clock.
- Reads present data after the address on the clock.
- Configurable read-during-write mode (for the same port).
- Optional output data registering (likely an internal BRAM resource).
 
--------------------------------------------------------------------------------
*/
 
module dp_ram_infer
#(
parameter integer REG_A_OUT = 1, // 1=enable A output registering
parameter integer REG_B_OUT = 1, // 1=enable B output registering
parameter integer DATA_W = 16,
parameter integer ADDR_W = 8,
parameter RD_MODE = "WR_DATA" // options here are "MEM_DATA" and "WR_DATA"
)
(
// A side
input wire a_clk_i, // A clock
input wire [ADDR_W-1:0] a_addr_i, // A address
input wire a_wr_i, // A write enable, active high
input wire [DATA_W-1:0] a_data_i, // A write data
output wire [DATA_W-1:0] a_data_o, // A read data
// B side
input wire b_clk_i, // B clock
input wire [ADDR_W-1:0] b_addr_i, // B address
input wire b_wr_i, // B write enable, active high
input wire [DATA_W-1:0] b_data_i, // B write data
output wire [DATA_W-1:0] b_data_o // B read data
);
 
/*
----------------------
-- internal signals --
----------------------
*/
localparam integer CAPACITY = 2**ADDR_W; // total words possible to store
reg [DATA_W-1:0] ram[0:CAPACITY-1]; // memory
reg [DATA_W-1:0] a_data, b_data;
`include "boot_code.h"
 
 
 
/*
================
== code start ==
================
*/
 
 
 
/*
------------
-- side A --
------------
*/
 
// write
always @ ( posedge a_clk_i ) begin
if ( a_wr_i ) begin
ram[a_addr_i] <= a_data_i;
end
end
 
// read
always @ ( posedge a_clk_i ) begin
if ( a_wr_i & RD_MODE == "WR_DATA" ) begin
a_data <= a_data_i;
end else begin
a_data <= ram[a_addr_i];
end
end
 
// optional output reg
generate
if ( REG_A_OUT ) begin
reg [DATA_W-1:0] a_data_r;
always @ ( posedge a_clk_i ) begin
a_data_r <= a_data;
end
assign a_data_o = a_data_r;
end else begin
assign a_data_o = a_data;
end
endgenerate
 
 
/*
------------
-- side B --
------------
*/
 
// write
always @ ( posedge b_clk_i ) begin
if ( b_wr_i ) begin
ram[b_addr_i] <= b_data_i;
end
end
 
// read
always @ ( posedge b_clk_i ) begin
if ( b_wr_i & RD_MODE == "WR_DATA" ) begin
b_data <= b_data_i;
end else begin
b_data <= ram[b_addr_i];
end
end
 
// optional output reg
generate
if ( REG_B_OUT ) begin
reg [DATA_W-1:0] b_data_r;
always @ ( posedge b_clk_i ) begin
b_data_r <= b_data;
end
assign b_data_o = b_data_r;
end else begin
assign b_data_o = b_data;
end
endgenerate
 
 
endmodule
/hive/trunk/v01.09/dq_ram_infer.v
0,0 → 1,85
/*
--------------------------------------------------------------------------------
 
Module: dq_ram_infer.v
 
Function:
- Infers a parameterized simple DQ synchronous RAM.
 
Instantiates:
- Nothing (block RAM will most likely be synthesized).
 
Notes:
- Writes accept data after the address & write enable on the clock.
- Reads present data after the address on the clock.
- Configurable read-during-write mode.
- Optional output data registering (likely an internal BRAM resource).
 
--------------------------------------------------------------------------------
*/
 
module dq_ram_infer
#(
parameter integer REG_OUT = 1, // 1=enable output registering
parameter integer DATA_W = 16,
parameter integer ADDR_W = 8,
parameter RD_MODE = "MEM_DATA" // options here are "MEM_DATA" and "WR_DATA"
)
(
input wire clk_i, // clock
input wire [ADDR_W-1:0] addr_i, // address
input wire wr_i, // write enable, active high
input wire [DATA_W-1:0] data_i, // write data
output wire [DATA_W-1:0] data_o // read data
);
 
/*
----------------------
-- internal signals --
----------------------
*/
localparam integer CAPACITY = 2**ADDR_W; // total words possible to store
reg [DATA_W-1:0] ram[0:CAPACITY-1]; // memory
reg [DATA_W-1:0] data;
 
 
 
/*
================
== code start ==
================
*/
 
 
 
// write
always @ ( posedge clk_i ) begin
if ( wr_i ) begin
ram[addr_i] <= data_i;
end
end
 
// read
always @ ( posedge clk_i ) begin
if ( wr_i & RD_MODE == "WR_DATA" ) begin
data <= data_i;
end else begin
data <= ram[addr_i];
end
end
 
// optional output reg
generate
if ( REG_OUT == 1 ) begin
reg [DATA_W-1:0] data_r;
always @ ( posedge clk_i ) begin
data_r <= data;
end
assign data_o = data_r;
end else begin
assign data_o = data;
end
endgenerate
 
 
endmodule
/hive/trunk/v01.09/thread_ring.v
0,0 → 1,79
/*
--------------------------------------------------------------------------------
 
Module : thread_ring.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor thread pipeline.
 
Instantiates:
- Nothing.
 
Notes:
- 8 stage pipeline.
- Counter in stage 0 ensures long-term correct operation.
 
--------------------------------------------------------------------------------
*/
 
module thread_ring
#(
parameter integer THRD_W = 3 // thread width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// threads
output reg [THRD_W-1:0] thrd_0_o,
output reg [THRD_W-1:0] thrd_1_o,
output reg [THRD_W-1:0] thrd_2_o,
output reg [THRD_W-1:0] thrd_3_o,
output reg [THRD_W-1:0] thrd_4_o,
output reg [THRD_W-1:0] thrd_5_o,
output reg [THRD_W-1:0] thrd_6_o,
output reg [THRD_W-1:0] thrd_7_o
);
 
/*
----------------------
-- internal signals --
----------------------
*/
 
 
/*
================
== code start ==
================
*/
 
 
// pipeline thread
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
thrd_0_o <= 'd5;
thrd_1_o <= 'd4;
thrd_2_o <= 'd3;
thrd_3_o <= 'd2;
thrd_4_o <= 'd1;
thrd_5_o <= 'd0;
thrd_6_o <= 'd7;
thrd_7_o <= 'd6;
end else begin
thrd_0_o <= thrd_0_o + 1'b1; // note: counter terminus
thrd_1_o <= thrd_0_o;
thrd_2_o <= thrd_1_o;
thrd_3_o <= thrd_2_o;
thrd_4_o <= thrd_3_o;
thrd_5_o <= thrd_4_o;
thrd_6_o <= thrd_5_o;
thrd_7_o <= thrd_6_o;
end
end
 
endmodule
/hive/trunk/v01.09/data_ring.v
0,0 → 1,251
/*
--------------------------------------------------------------------------------
 
Module : data_ring.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor data path & data stacks.
 
Instantiates:
- (1x) stacks_mux.v
- (1x) alu_top.v
- (1x) pointer_ring.v
- (4x) dq_ram_infer.v
 
Notes:
- 8 stage data pipeline beginning and ending on four BRAM based LIFOs.
 
--------------------------------------------------------------------------------
*/
 
module data_ring
#(
parameter integer DATA_W = 32, // data width
parameter integer ADDR_W = 16, // address width
parameter integer THREADS = 8, // threads
parameter integer THRD_W = 3, // thread selector width
parameter integer STACKS = 4, // stacks
parameter integer STK_W = 2, // stack selector width
parameter integer PNTR_W = 5, // stack pointer width
parameter integer IM_DATA_W = 8, // immediate data width
parameter integer LG_W = 2, // operation width
parameter integer POP_PROT = 1, // 1=error protection, 0=none
parameter integer PUSH_PROT = 1 // 1=error protection, 0=none
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire [STK_W-1:0] a_sel_i, // stack selector
input wire [STK_W-1:0] b_sel_i, // stack selector
input wire imda_i, // 1=immediate data
input wire sgn_i, // 1=signed
input wire ext_i, // 1=extended result
input wire [LG_W-1:0] lg_i, // see decode in notes above
input wire add_i, // 1=add
input wire sub_i, // 1=subtract
input wire mul_i, // 1=multiply
input wire shl_i, // 1=shift left
input wire cpy_i, // 1=copy b
input wire dm_i, // 1=data mem
input wire rtn_i, // 1=return pc
// stack I/O
input wire stk_clr_i, // stacks clear
input wire [STACKS-1:0] pop_i, // stacks pop
input wire [STACKS-1:0] push_i, // stacks push
input wire [THRD_W-1:0] thrd_6_i, // thread
// data I/O
input wire [IM_DATA_W-1:0] im_data_i, // immediate data
input wire [DATA_W/2-1:0] dm_data_i, // dmem read data
input wire [ADDR_W-1:0] pc_3_i, // program counter
output wire [DATA_W-1:0] a_o, // a
output wire [DATA_W-1:0] b_o, // b
// flags
output wire nez_o, // a != 0
output wire ne_o, // a != b
output wire ltz_o, // a < 0
output wire lt_o, // a < b
// errors
output wire [STACKS-1:0] pop_er_o, // pop when empty, active high
output wire [STACKS-1:0] push_er_o // push when full, active high
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
wire [DATA_W-1:0] b_alu;
wire [DATA_W-1:0] pop_data0, pop_data1, pop_data2, pop_data3, push_data;
wire [PNTR_W-1:0] pntr0, pntr1, pntr2, pntr3;
wire [STACKS-1:0] stk_wr;
 
 
 
/*
================
== code start ==
================
*/
 
 
 
// stacks output mux
stacks_mux
#(
.DATA_W ( DATA_W ),
.STK_W ( STK_W ),
.IM_DATA_W ( IM_DATA_W )
)
stacks_mux
(
.a_sel_i ( a_sel_i ),
.b_sel_i ( b_sel_i ),
.imda_i ( imda_i ),
.pop_data0_i ( pop_data0 ),
.pop_data1_i ( pop_data1 ),
.pop_data2_i ( pop_data2 ),
.pop_data3_i ( pop_data3 ),
.im_data_i ( im_data_i ),
.a_o ( a_o ),
.b_o ( b_o ),
.b_alu_o ( b_alu )
);
 
 
// ALU
alu_top
#(
.REGS_IN ( 1 ),
.REGS_OUT ( 1 ),
.REGS_FLG ( 1 ),
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.LG_W ( LG_W )
)
alu_top
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.sgn_i ( sgn_i ),
.ext_i ( ext_i ),
.lg_i ( lg_i ),
.add_i ( add_i ),
.sub_i ( sub_i ),
.mul_i ( mul_i ),
.shl_i ( shl_i ),
.cpy_i ( cpy_i ),
.dm_i ( dm_i ),
.rtn_i ( rtn_i ),
.a_i ( a_o ),
.b_i ( b_alu ),
.dm_data_i ( dm_data_i ),
.pc_3_i ( pc_3_i ),
.result_o ( push_data ),
.nez_o ( nez_o ),
.ne_o ( ne_o ),
.ltz_o ( ltz_o ),
.lt_o ( lt_o )
);
 
 
// stack pointer generation & storage
pointer_ring
#(
.THREADS ( THREADS ),
.STACKS ( STACKS ),
.PNTR_W ( PNTR_W ),
.POP_PROT ( POP_PROT ),
.PUSH_PROT ( PUSH_PROT )
)
pointer_ring
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.clr_i ( stk_clr_i ),
.pop_i ( pop_i ),
.push_i ( push_i ),
.pntr0_o ( pntr0 ),
.pntr1_o ( pntr1 ),
.pntr2_o ( pntr2 ),
.pntr3_o ( pntr3 ),
.wr_o ( stk_wr ),
.pop_er_o ( pop_er_o ),
.push_er_o ( push_er_o )
);
 
 
// LIFO stacks memory
dq_ram_infer
#(
.REG_OUT ( 1 ),
.DATA_W ( DATA_W ),
.ADDR_W ( THRD_W+PNTR_W ),
.RD_MODE ( "WR_DATA" )
)
stack0_dq_ram
(
.clk_i ( clk_i ),
.addr_i ( { thrd_6_i, pntr0 } ),
.wr_i ( stk_wr[0] ),
.data_i ( push_data ),
.data_o ( pop_data0 )
);
 
dq_ram_infer
#(
.REG_OUT ( 1 ),
.DATA_W ( DATA_W ),
.ADDR_W ( THRD_W+PNTR_W ),
.RD_MODE ( "WR_DATA" )
)
stack1_dq_ram
(
.clk_i ( clk_i ),
.addr_i ( { thrd_6_i, pntr1 } ),
.wr_i ( stk_wr[1] ),
.data_i ( push_data ),
.data_o ( pop_data1 )
);
 
 
dq_ram_infer
#(
.REG_OUT ( 1 ),
.DATA_W ( DATA_W ),
.ADDR_W ( THRD_W+PNTR_W ),
.RD_MODE ( "WR_DATA" )
)
stack2_dq_ram
(
.clk_i ( clk_i ),
.addr_i ( { thrd_6_i, pntr2 } ),
.wr_i ( stk_wr[2] ),
.data_i ( push_data ),
.data_o ( pop_data2 )
);
 
 
dq_ram_infer
#(
.REG_OUT ( 1 ),
.DATA_W ( DATA_W ),
.ADDR_W ( THRD_W+PNTR_W ),
.RD_MODE ( "WR_DATA" )
)
stack3_dq_ram
(
.clk_i ( clk_i ),
.addr_i ( { thrd_6_i, pntr3 } ),
.wr_i ( stk_wr[3] ),
.data_i ( push_data ),
.data_o ( pop_data3 )
);
 
endmodule
/hive/trunk/v01.09/functions.h
0,0 → 1,55
/*
--------------------------------------------------------------------------------
--
-- Module : functions.h
--
--------------------------------------------------------------------------------
--
-- Function:
-- - A bunch of functions for a stack processor.
--
-- Instantiates:
-- - Nothing.
--
--------------------------------------------------------------------------------
*/
 
 
/*
---------------
-- functions --
---------------
*/
 
 
// returns safe ceiling value of log2(n)
// (for vector sizing we never want less than 1)
// examples:
// clog2(0 thru 2) = 1,
// clog2(3 & 4) = 2,
// clog2(5 thru 8) = 3,
// clog2(9 thru 16) = 4, etc.
function integer clog2;
input integer n;
begin
clog2 = 1;
while ( n > 2 ) begin
n = ( n + 1 ) / 2;
clog2 = clog2 + 1;
end
end
endfunction
 
 
// returns the max of 2 values
function integer max_of_2;
input integer a, b;
begin
if ( a > b ) begin
max_of_2 = a;
end else begin
max_of_2 = b;
end
end
endfunction
 
/hive/trunk/v01.09/pointer_ring.v
0,0 → 1,177
/*
--------------------------------------------------------------------------------
 
Module : pointer_ring.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor stack pointer storage ring.
 
Instantiates:
- (1x) vector_sr.v
 
Notes:
- 8 stage pointer storage ring for four BRAM based LIFOs:
0 : clear applied (& all inputs)
1 : pop applied
2 : push applied; pop errors output
3 : push errors output
6 : pointers & writes output
- Logic assumes pop | push will not be issued simultaneously with clear.
- Externally concatenate thread 6 & pointers to form stack memory addresses.
- Level width is PTR_W+1 to accomodate 0 to 2^n levels (1 + 2n states).
- Empty push is to address 1, full push is to address 0.
- Combo pop/push is accomodated with no net fullness/pointer change.
- Pop when empty is a pop error.
- Push when full is a push error.
- Pop/push when full is NOT an error.
- Pop/push when empty is a pop error ONLY.
- Parameterized stack error handling. If the associated protection is turned on
then pop/push errors are reported but otherwise not acted upon, i.e. errors
will not corrupt fullness/pointers.
 
--------------------------------------------------------------------------------
*/
 
module pointer_ring
#(
parameter integer THREADS = 8, // threads
parameter integer STACKS = 4, // stacks
parameter integer PNTR_W = 5, // stack pointer width
parameter integer POP_PROT = 1, // 1=error protection, 0=none
parameter integer PUSH_PROT = 1 // 1=error protection, 0=none
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire clr_i, // stacks clear
input wire [STACKS-1:0] pop_i, // stacks pop
input wire [STACKS-1:0] push_i, // stacks push
// pointers
output wire [PNTR_W-1:0] pntr0_o, // stack pointer
output wire [PNTR_W-1:0] pntr1_o, // stack pointer
output wire [PNTR_W-1:0] pntr2_o, // stack pointer
output wire [PNTR_W-1:0] pntr3_o, // stack pointer
// write enables
output wire [STACKS-1:0] wr_o, // write enables
// errors
output wire [STACKS-1:0] pop_er_o, // pop when empty, active high
output wire [STACKS-1:0] push_er_o // push when full, active high
);
 
/*
----------------------
-- internal signals --
----------------------
*/
localparam integer LEVEL_W = PNTR_W+1; // +1 extra bit
localparam [LEVEL_W-1:0] EMPTY_VAL = 'b0; // empty value
localparam [LEVEL_W-1:0] FULL_VAL = 1'b1 << PNTR_W; // full value
//
integer s, t;
//
reg [LEVEL_W-1:0] level[0:STACKS-1][0:THREADS-1];
//
reg [STACKS-1:0] pop_1, push_1, push_2;
reg [STACKS-1:0] empty_1, full_2;
wire [STACKS-1:0] dec_1, inc_2;
reg [STACKS-1:0] pop_er_2, push_er_3;
 
 
/*
================
== code start ==
================
*/
 
 
// pipeline control signals
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
pop_1 <= 'b0;
push_1 <= 'b0;
push_2 <= 'b0;
end else begin
pop_1 <= pop_i;
push_1 <= push_i;
push_2 <= push_1;
end
end
 
// decode watermarks
always @ ( * ) begin
for ( s=0; s<STACKS; s=s+1 ) begin
empty_1[s] <= ( level[s][1] == EMPTY_VAL );
full_2[s] <= ( level[s][2] == FULL_VAL );
end
end
 
// prohibit pointer changes @ errors if configured to do so
assign dec_1 = ( POP_PROT ) ? pop_1 & ~empty_1 : pop_1;
assign inc_2 = ( PUSH_PROT ) ? push_2 & ~full_2 : push_2;
 
// decode & register errors - pop when empty, push when full
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
pop_er_2 <= 'b0;
push_er_3 <= 'b0;
end else begin
pop_er_2 <= pop_1 & empty_1;
push_er_3 <= push_2 & full_2;
end
end
 
// decode & pipeline levels
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
for ( s=0; s<STACKS; s=s+1 ) begin
for ( t=0; t<THREADS; t=t+1 ) begin
level[s][t] <= 'b0;
end
end
end else begin
for ( s=0; s<STACKS; s=s+1 ) begin
for ( t=0; t<THREADS; t=t+1 ) begin
if ( t == 0 ) level[s][t] <= level[s][THREADS-1]; // wrap around
else if ( t == 1 ) level[s][t] <= ( clr_i ) ? 1'b0 : level[s][t-1]; // clear
else if ( t == 2 ) level[s][t] <= ( dec_1[s] ) ? level[s][t-1] - 1'b1 : level[s][t-1]; // pop
else if ( t == 3 ) level[s][t] <= ( inc_2[s] ) ? level[s][t-1] + 1'b1 : level[s][t-1]; // push
else level[s][t] <= level[s][t-1];
end
end
end
end
 
 
// decode & pipeline write enables
vector_sr
#(
.REGS ( 4 ),
.DATA_W ( STACKS ),
.RESET_VAL ( 0 )
)
wr_pipe
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( inc_2 ),
.data_o ( wr_o )
);
 
 
// output pointers
assign pntr0_o = level[0][6][PNTR_W-1:0];
assign pntr1_o = level[1][6][PNTR_W-1:0];
assign pntr2_o = level[2][6][PNTR_W-1:0];
assign pntr3_o = level[3][6][PNTR_W-1:0];
// output errors
assign pop_er_o = pop_er_2;
assign push_er_o = push_er_3;
 
 
endmodule
/hive/trunk/v01.09/control_ring.v
0,0 → 1,292
/*
--------------------------------------------------------------------------------
 
Module : control_ring.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor control path.
 
Instantiates:
- (1x) thread_ring.v
- (2x) event_ctrl.v
- (1x) cond_test.v
- (1x) op_decode.v
- (1x) pc_ring.v
 
Notes:
- 8 stage data pipeline consisting of several storage rings.
 
--------------------------------------------------------------------------------
*/
 
module control_ring
#(
parameter integer DATA_W = 32, // data width
parameter integer ADDR_W = 16, // address width
parameter integer THREADS = 8, // threads
parameter integer THRD_W = 3, // thread width
parameter integer STACKS = 4, // number of stacks
parameter integer STK_W = 2, // stack selector width
parameter integer IM_DATA_W = 8, // immediate data width
parameter integer IM_ADDR_W = 6, // immediate data width
parameter integer OP_CODE_W = 16, // opcode width
parameter integer LG_W = 2, // logical operation width
parameter [ADDR_W-1:0] CLR_BASE = 'h0, // clear address base (concat)
parameter integer CLR_SPAN = 0, // clear address span (2^n)
parameter [ADDR_W-1:0] INTR_BASE = 'h8, // interrupt address base (concat)
parameter integer INTR_SPAN = 0 // interrupt address span (2^n)
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire [THREADS-1:0] clr_req_i, // clear request, active high
output wire [THREADS-1:0] clr_ack_o, // clear ack, active high until serviced
input wire [THREADS-1:0] intr_en_i, // interrupt enable, active high
input wire [THREADS-1:0] intr_req_i, // interrupt request, active high
output wire [THREADS-1:0] intr_ack_o, // interrupt ack, active high until serviced
input wire [OP_CODE_W-1:0] op_code_i, // opcode
output wire op_code_er_o, // 1=illegal op code encountered
// ALU I/O
input wire [DATA_W/2-1:0] b_lo_i, // b_lo
output wire [IM_DATA_W-1:0] im_data_o, // immediate data
output wire [STK_W-1:0] a_sel_o, // stack selector
output wire [STK_W-1:0] b_sel_o, // stack selector
output wire imda_o, // 1=immediate data
output wire sgn_o, // 1=signed
output wire ext_o, // 1=extended
output wire [LG_W-1:0] lg_o, // see decode in notes
output wire add_o, // 1=add
output wire sub_o, // 1=subtract
output wire mul_o, // 1=multiply
output wire shl_o, // 1=shift left
output wire cpy_o, // 1=copy b
output wire dm_o, // 1=data mem
output wire rtn_o, // 1=return pc
output wire rd_o, // 1=read
output wire wr_o, // 1=write
// stack I/O
output wire stk_clr_o, // stacks clear
output wire [STACKS-1:0] pop_o, // stacks pop
output wire [STACKS-1:0] push_o, // stacks push
// flags
input wire nez_i, // a != 0
input wire ne_i, // a != b
input wire ltz_i, // a < 0
input wire lt_i, // a < b
// threads
output wire [THRD_W-1:0] thrd_0_o,
output wire [THRD_W-1:0] thrd_2_o,
output wire [THRD_W-1:0] thrd_3_o,
output wire [THRD_W-1:0] thrd_6_o,
// addresses
output wire [IM_ADDR_W-1:0] im_addr_o, // immediate address (offset)
output wire [ADDR_W-1:0] pc_1_o,
output wire [ADDR_W-1:0] pc_3_o,
output wire [ADDR_W-1:0] pc_4_o
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
wire pc_clr, lit, jmp, gto, intr, imad, tst_2;
wire stk_clr;
wire [STACKS-1:0] pop, push;
wire tst_eq, tst_lt, tst_gt, tst_ab;
wire thrd_clr, thrd_intr;
wire [THRD_W-1:0] thrd_5;
 
 
 
/*
================
== code start ==
================
*/
 
 
// establish threads
thread_ring
#(
.THRD_W ( THRD_W )
)
thread_ring
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.thrd_0_o ( thrd_0_o ),
.thrd_1_o ( ),
.thrd_2_o ( thrd_2_o ),
.thrd_3_o ( thrd_3_o ),
.thrd_4_o ( ),
.thrd_5_o ( thrd_5 ),
.thrd_6_o ( thrd_6_o ),
.thrd_7_o ( )
);
 
 
// handle external thread clear requests
event_ctrl
#(
.REGS_REQ ( 0 ), // don't resync
.EDGE_REQ ( 1 ), // edge sensitive
.RESET_VAL ( { THREADS{ 1'b1 } } ), // clear threads @ power-up
.THREADS ( THREADS ),
.THRD_W ( THRD_W )
)
clr_event_ctrl
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.thrd_i ( thrd_5 ),
.en_i ( { THREADS{ 1'b1 } } ), // always enable
.req_i ( clr_req_i ),
.ack_o ( clr_ack_o ),
.event_o ( thrd_clr )
);
 
 
// handle external thread interrupt requests
event_ctrl
#(
.REGS_REQ ( 2 ), // resync
.EDGE_REQ ( 1 ), // edge sensitive
.RESET_VAL ( 0 ),
.THREADS ( THREADS ),
.THRD_W ( THRD_W )
)
intr_event_ctrl
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.thrd_i ( thrd_5 ),
.en_i ( intr_en_i ),
.req_i ( intr_req_i ),
.ack_o ( intr_ack_o ),
.event_o ( thrd_intr )
);
 
 
// conditional jump etc. testing
cond_test
#(
.REGS_TST ( 2 ),
.REGS_OUT ( 0 )
)
cond_test
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.nez_i ( nez_i ),
.ne_i ( ne_i ),
.ltz_i ( ltz_i ),
.lt_i ( lt_i ),
.tst_eq_i ( tst_eq ),
.tst_lt_i ( tst_lt ),
.tst_gt_i ( tst_gt ),
.tst_ab_i ( tst_ab ),
.tst_o ( tst_2 )
);
 
 
// op_code decoding
op_decode
#(
.REGS_IN ( 0 ),
.REGS_OUT ( 1 ),
.STACKS ( STACKS ),
.STK_W ( STK_W ),
.DATA_W ( DATA_W ),
.IM_DATA_W ( IM_DATA_W ),
.IM_ADDR_W ( IM_ADDR_W ),
.OP_CODE_W ( OP_CODE_W ),
.LG_W ( LG_W )
)
op_decode
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.thrd_clr_i ( thrd_clr ),
.thrd_intr_i ( thrd_intr ),
.op_code_i ( op_code_i ),
.op_code_er_o ( op_code_er_o ),
.im_data_o ( im_data_o ),
.im_addr_o ( im_addr_o ),
.pc_clr_o ( pc_clr ),
.lit_o ( lit ),
.jmp_o ( jmp ),
.gto_o ( gto ),
.intr_o ( intr ),
.tst_eq_o ( tst_eq ),
.tst_lt_o ( tst_lt ),
.tst_gt_o ( tst_gt ),
.tst_ab_o ( tst_ab ),
.stk_clr_o ( stk_clr_o ),
.pop_o ( pop_o ),
.push_o ( push_o ),
.a_sel_o ( a_sel_o ),
.b_sel_o ( b_sel_o ),
.imda_o ( imda_o ),
.imad_o ( imad ),
.sgn_o ( sgn_o ),
.ext_o ( ext_o ),
.lg_o ( lg_o ),
.add_o ( add_o ),
.sub_o ( sub_o ),
.mul_o ( mul_o ),
.shl_o ( shl_o ),
.cpy_o ( cpy_o ),
.dm_o ( dm_o ),
.rtn_o ( rtn_o ),
.rd_o ( rd_o ),
.wr_o ( wr_o )
);
 
 
// pc generation & storage
pc_ring
#(
.THREADS ( THREADS ),
.THRD_W ( THRD_W ),
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.IM_ADDR_W ( IM_ADDR_W ),
.CLR_BASE ( CLR_BASE ),
.CLR_SPAN ( CLR_SPAN ),
.INTR_BASE ( INTR_BASE ),
.INTR_SPAN ( INTR_SPAN )
)
pc_ring
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.thrd_0_i ( thrd_0_o ),
.thrd_3_i ( thrd_3_o ),
.clr_i ( pc_clr ),
.lit_i ( lit ),
.jmp_i ( jmp ),
.gto_i ( gto ),
.intr_i ( intr ),
.imad_i ( imad ),
.tst_2_i ( tst_2 ),
.b_lo_i ( b_lo_i ),
.im_addr_i ( im_addr_o ),
.pc_0_o ( ),
.pc_1_o ( pc_1_o ),
.pc_2_o ( ),
.pc_3_o ( pc_3_o ),
.pc_4_o ( pc_4_o ),
.pc_5_o ( ),
.pc_6_o ( ),
.pc_7_o ( )
);
 
 
endmodule
/hive/trunk/v01.09/proc_reg.v
0,0 → 1,242
/*
--------------------------------------------------------------------------------
 
Module: proc_reg.v
 
Function:
- Single processor register w/ multiple type & input options (synchronous).
 
Instantiates:
- Nothing.
 
Notes:
- Init value for each latched bit.
- LIVE_MASK[i]=1 indicates live bit.
- LIVE_MASK[i]=0 indicates dead bit, reads zero.
- Optional resync (2x registering) of inputs.
- Optional edge detection (rising) of inputs.
- data_o is driven non-zero if there is an address match, regardless of
state of rd_i.
- Use large OR gate to combine multiple registers in a set.
 
OUT_MODE:
- "ZERO" : zero out
- "THRU" : no latch, direct connect
- "LTCH" : write latch
- "READ" : no latch, output selected read data
 
READ_MODE:
- "THRU" : no latch, direct connect
- "CORD" : set on input one, clear on read
- "COW1" : set on input one, clear on write one
- "DFFE" : D type flip flop with enable
- "OUT" : no latch, read selected out data
 
--------------------------------------------------------------------------------
*/
 
 
module proc_reg
#(
parameter integer DATA_W = 8, // data width (bits)
parameter integer ADDR_W = 4, // address width (bits)
parameter [ADDR_W-1:0] ADDRESS = 0, // address this register responds to
parameter OUT_MODE = "READ", // modes are: "ZERO", "THRU", "LTCH", "READ"
parameter READ_MODE = "COW1", // modes are: "THRU", "CORD", "COW1", "DFFE", "OUT"
parameter [DATA_W-1:0] LIVE_MASK = { DATA_W{ 1'b1 } }, // 1=live data bit, 0=dead (0)
parameter IN_RESYNC = 0, // 1=resync (double clock) input, 0=no resync
parameter IN_EDGE = 0, // 1=edge (rising) sensitive, 0=level sensitive
parameter [DATA_W-1:0] RESET_VAL = 0 // reset value of latched data
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// bus interface
input wire [ADDR_W-1:0] addr_i, // address
input wire wr_i, // data write enable, active high
input wire rd_i, // data read enable, active high
input wire [DATA_W-1:0] data_i, // write data
output wire [DATA_W-1:0] data_o, // read data
// register interface
output wire reg_wr_o, // reg write active, active high
output wire reg_rd_o, // reg read active, active high
input wire reg_en_i, // reg enable, active high ("DFF" mode only)
input wire [DATA_W-1:0] reg_data_i, // reg data in
output wire [DATA_W-1:0] reg_data_o // reg data out
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
wire addr_match;
genvar i;
wire [DATA_W-1:0] in_data, out_data, rd_data;
 
 
/*
================
== code start ==
================
*/
 
 
// check for address match
assign addr_match = ( addr_i == ADDRESS[ADDR_W-1:0] );
 
// decode read & write
assign reg_rd_o = ( rd_i & addr_match );
assign reg_wr_o = ( wr_i & addr_match );
 
 
// generate output logic based on mode
generate
for ( i=0; i<DATA_W; i=i+1 ) begin : output_loop
if ( LIVE_MASK[i] ) begin // live bit
case ( OUT_MODE )
"ZERO" : begin
assign out_data[i] = 1'b0;
end
"THRU" : begin
assign out_data[i] = data_i[i];
end
"LTCH" : begin
reg reg_bit;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
reg_bit <= RESET_VAL[i];
end else begin
if ( reg_wr_o ) begin
reg_bit <= data_i[i];
end
end
end
assign out_data[i] = reg_bit;
end
"READ" : begin
assign out_data[i] = rd_data[i];
end
default : begin // unknown mode!
initial $display ( "OUT_MODE %s does not exist!", OUT_MODE );
end
endcase
end else begin // dead bit
assign out_data[i] = 1'b0;
end
end
endgenerate
 
 
// generate optional input resync & edge detect logic
generate
for ( i=0; i<DATA_W; i=i+1 ) begin : input_processing_loop
if ( LIVE_MASK[i] ) begin // live bit
wire in_2;
if ( IN_RESYNC ) begin
reg in_0, in_1;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
in_0 <= 1'b0;
in_1 <= 1'b0;
end else begin
in_0 <= reg_data_i[i];
in_1 <= in_0;
end
end
assign in_2 = in_1;
end else begin
assign in_2 = reg_data_i[i];
end
//
if ( IN_EDGE ) begin
reg in_3;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
in_3 <= 1'b0;
end else begin
in_3 <= in_2;
end
end
assign in_data[i] = ( in_2 & ~in_3 );
end else begin
assign in_data[i] = in_2;
end
end else begin // dead bit
assign in_data[i] = 1'b0;
end // endif
end // endfor
endgenerate
 
 
// generate read logic based on mode
generate
for ( i=0; i<DATA_W; i=i+1 ) begin : read_loop
if ( LIVE_MASK[i] ) begin // live bit
case ( READ_MODE )
"THRU" : begin
assign rd_data[i] = in_data[i];
end
"CORD" : begin
reg reg_bit;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
reg_bit <= RESET_VAL[i];
end else begin
if ( reg_rd_o ) begin
reg_bit <= 1'b0;
end else begin
reg_bit <= reg_bit | in_data[i];
end
end
end
assign rd_data[i] = reg_bit;
end
"COW1" : begin
reg reg_bit;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
reg_bit <= RESET_VAL[i];
end else begin
if ( reg_wr_o ) begin
reg_bit <= reg_bit & ~data_i[i];
end else begin
reg_bit <= reg_bit | in_data[i];
end
end
end
assign rd_data[i] = reg_bit;
end
"DFFE" : begin
reg reg_bit;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
reg_bit <= RESET_VAL[i];
end else if ( reg_en_i ) begin
reg_bit <= in_data[i];
end
end
assign rd_data[i] = reg_bit;
end
"OUT" : begin
assign rd_data[i] = out_data[i];
end
default : begin // unknown mode!
initial $display ( "RD_MODE %s does not exist!", RD_MODE );
end
endcase
end else begin // dead bit
assign rd_data[i] = 1'b0;
end
end
endgenerate
 
 
// drive outputs
assign data_o = ( addr_match ) ? rd_data : 1'b0;
assign reg_data_o = out_data;
 
 
endmodule
/hive/trunk/v01.09/alu_top.v
0,0 → 1,203
/*
--------------------------------------------------------------------------------
 
Module : alu_top.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor ALU top level.
 
Instantiates:
- (2x) vector_sr.v
- (1x) alu_logical.v
- (4x) vector_sr.v
- (1x) alu_add_sub.v
- (4x) vector_sr.v
- (1x) alu_mult_shift.v
- (3x) vector_sr.v
- (1x) alu_multiply.v
- (1x) vector_sr.v (debug mode only)
- (1x) alu_mux.v
- (4x) vector_sr.v
 
Notes:
- I/O optionally registered.
- 5 stage pipeline w/ 4 mid registers (not counting I/O registering).
 
--------------------------------------------------------------------------------
*/
 
module alu_top
#(
parameter integer REGS_IN = 1, // register option for control and a & b inputs
parameter integer REGS_OUT = 1, // register option for outputs
parameter integer REGS_FLG = 1, // register option for flag outputs
parameter integer DATA_W = 32, // data width
parameter integer ADDR_W = 16, // address width
parameter integer LG_W = 2 // operation width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire sgn_i, // 1=signed
input wire ext_i, // 1=extended result
input wire [LG_W-1:0] lg_i, // see decode in notes above
input wire add_i, // 1=add
input wire sub_i, // 1=subtract
input wire mul_i, // 1=multiply
input wire shl_i, // 1=shift left
input wire cpy_i, // 1=copy b
input wire dm_i, // 1=data mem
input wire rtn_i, // 1=return pc
// data I/O
input wire [DATA_W-1:0] a_i, // operand
input wire [DATA_W-1:0] b_i, // operand
input wire [DATA_W/2-1:0] dm_data_i, // dmem read data
input wire [ADDR_W-1:0] pc_3_i, // program counter
output wire [DATA_W-1:0] result_o, // result
// flags
output wire nez_o, // a != 0
output wire ne_o, // a != b
output wire ltz_o, // a < 0
output wire lt_o // a < b
);
 
/*
----------------------
-- internal signals --
----------------------
*/
wire rtn, dm, cpy, shl, mul, sub, add, ext, sgn;
wire [LG_W-1:0] lg;
wire [DATA_W-1:0] a, b;
wire [DATA_W-1:0] res_lg, res_as, res_mid, res_ms;
 
 
/*
================
== code start ==
================
*/
 
 
// optional input regs
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( DATA_W+DATA_W+7+LG_W+2 ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { a_i, b_i, rtn_i, dm_i, cpy_i, shl_i, mul_i, sub_i, add_i, lg_i, ext_i, sgn_i } ),
.data_o ( { a, b, rtn, dm, cpy, shl, mul, sub, add, lg, ext, sgn } )
);
 
 
// logical unit
alu_logical
#(
.REGS_IN ( 0 ),
.REGS_MID ( 1 ),
.REGS_OUT ( 0 ),
.REGS_FLG ( REGS_FLG ),
.DATA_W ( DATA_W ),
.LG_W ( LG_W )
)
alu_logical
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.ext_i ( ext ),
.lg_i ( lg ),
.a_i ( a ),
.b_i ( b ),
.result_o ( res_lg ),
.nez_o ( nez_o ),
.ne_o ( ne_o )
);
 
 
// add & subtract unit
alu_add_sub
#(
.REGS_IN ( 0 ),
.REGS_MID ( 1 ),
.REGS_OUT ( 0 ),
.REGS_FLG ( REGS_FLG ),
.DATA_W ( DATA_W )
)
alu_add_sub
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.sgn_i ( sgn ),
.ext_i ( ext ),
.sub_i ( sub ),
.a_i ( a ),
.b_i ( b ),
.result_o ( res_as ),
.ltz_o ( ltz_o ),
.lt_o ( lt_o )
);
 
 
// multiply & shift unit
alu_mult_shift
#(
.REGS_IN ( 0 ),
.REGS_OUT ( 0 ),
.DATA_W ( DATA_W )
)
alu_mult_shift
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.sgn_i ( sgn ),
.ext_i ( ext ),
.shl_i ( shl ),
.cpy_i ( cpy ),
.a_i ( a ),
.b_i ( b ),
.result_o ( res_ms )
);
 
 
// multiplexer
alu_mux
#(
.REGS_IN_A ( 1 ),
.REGS_A_B ( 1 ),
.REGS_B_C ( 1 ),
.REGS_C_D ( 1 ),
.REGS_D_OUT ( REGS_OUT ),
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W )
)
alu_mux
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.sgn_i ( sgn ),
.ext_i ( ext ),
.as_i ( sub | add ),
.dm_i ( dm ),
.rtn_i ( rtn ),
.ms_i ( cpy | shl | mul ),
.a_lo_i ( a[DATA_W/2-1:0] ),
.res_ms_i ( res_ms ),
.res_lg_i ( res_lg ),
.res_as_i ( res_as ),
.dm_data_i ( dm_data_i ),
.pc_i ( pc_3_i ),
.result_o ( result_o )
);
 
endmodule
/hive/trunk/v01.09/reg_set_addr.h
0,0 → 1,12
// internal register addresses
localparam [15:0] REG_BASE_ADDR = 'hFFF0;
localparam REG_ADDR_W = 4;
//
localparam [REG_ADDR_W-1:0] VER_ADDR = 'h0;
localparam [REG_ADDR_W-1:0] THRD_ID_ADDR = 'h1;
localparam [REG_ADDR_W-1:0] CLR_ADDR = 'h2;
localparam [REG_ADDR_W-1:0] INTR_EN_ADDR = 'h3;
localparam [REG_ADDR_W-1:0] OP_ER_ADDR = 'h4;
localparam [REG_ADDR_W-1:0] STK_ER_ADDR = 'h5;
localparam [REG_ADDR_W-1:0] IO_LO_ADDR = 'h8;
localparam [REG_ADDR_W-1:0] IO_HI_ADDR = 'h9;
/hive/trunk/v01.09/reg_set_shim.v
0,0 → 1,124
/*
--------------------------------------------------------------------------------
 
Module: reg_set_shim.v
 
Function:
- Shim to interface main memory and internal register set.
 
Instantiates:
- (2x) vector_sr.v
 
Notes:
- Address, data, and control I/O optionally registered.
- Register set is placed at the top of memory space, main mem at bottom.
 
--------------------------------------------------------------------------------
*/
 
module reg_set_shim
#(
parameter integer REGS_IN = 1, // register option for inputs
parameter integer REGS_OUT = 1, // register option for outputs
parameter integer DATA_W = 16, // data width (bits)
parameter integer ADDR_W = 8, // address width (bits)
parameter integer REG_ADDR_W = 4, // register set address width (bits)
parameter integer IM_ADDR_W = 4 // immediate address width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// data I/O
input wire [DATA_W-1:0] a_i, // operand
input wire ext_i, // 1=extended result
output wire [DATA_W/2-1:0] wr_data_o, // write data
// address I/O
input wire [DATA_W/2-1:0] b_lo_i, // operand
input wire [IM_ADDR_W-1:0] im_addr_i, // immediate address
input wire [ADDR_W-1:0] pc_1_i, // program counter
output wire [ADDR_W-1:0] addr_o, // address
// bus I/O
input wire wr_i, // data write enable, active high
input wire rd_i, // data read enable, active high
output wire regs_wr_o, // data write enable, active high
output wire regs_rd_o, // data read enable, active high
output wire dm_wr_o // data write enable, active high
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
wire [DATA_W-1:0] a;
wire [DATA_W/2-1:0] b_lo;
wire [IM_ADDR_W-1:0] im_addr;
wire wr, rd, ext;
wire [ADDR_W-1:0] rw_addr, addr;
wire regs_en, regs_wr, regs_rd, dm_wr;
wire [DATA_W/2-1:0] wr_data;
 
 
 
/*
================
== code start ==
================
*/
 
 
// optional input regs
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( DATA_W+DATA_W/2+IM_ADDR_W+3 ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { a_i, b_lo_i, im_addr_i, wr_i, rd_i, ext_i } ),
.data_o ( { a, b_lo, im_addr, wr, rd, ext } )
);
 
 
// read / write address
assign rw_addr = b_lo + im_addr;
 
// decode address
assign addr = ( rd | wr ) ? rw_addr : pc_1_i;
 
// decode register set address space (all upper bits set)
assign regs_en = &addr[ADDR_W-1:REG_ADDR_W];
// decode regs read & write
assign regs_wr = wr & regs_en;
assign regs_rd = rd & regs_en;
 
// decode dmem write
assign dm_wr = wr & ~regs_en;
 
// decode write data
assign wr_data = ( ext ) ? a[DATA_W-1:DATA_W/2] : a[DATA_W/2-1:0];
 
 
// optional output registers
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( ADDR_W+DATA_W/2+3 ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { addr, wr_data, regs_wr, regs_rd, dm_wr } ),
.data_o ( { addr_o, wr_data_o, regs_wr_o, regs_rd_o, dm_wr_o } )
);
 
 
endmodule
/hive/trunk/v01.09/alu_mux.v
0,0 → 1,192
/*
--------------------------------------------------------------------------------
 
Module : alu_mux.v
 
--------------------------------------------------------------------------------
 
Function:
- Multiplexer for processor ALU.
 
Instantiates:
- (4x) vector_sr.v
 
Notes:
- I/M/O optionally registered.
 
--------------------------------------------------------------------------------
*/
 
module alu_mux
#(
parameter integer REGS_IN_A = 0, // reg option input to mux a
parameter integer REGS_A_B = 0, // reg option mux a to mux b
parameter integer REGS_B_C = 0, // reg option mux b to mux c
parameter integer REGS_C_D = 0, // reg option mux c to mux d
parameter integer REGS_D_OUT = 0, // reg option mux d to output
parameter integer DATA_W = 8, // data width
parameter integer ADDR_W = 4 // address width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire sgn_i, // 1=signed
input wire ext_i, // 1=extended
input wire as_i, // 1=add/subtract
input wire dm_i, // 1=read data
input wire rtn_i, // 1=return pc
input wire ms_i, // 1=multiply
// data I/O
input wire [DATA_W/2-1:0] a_lo_i, // operand
input wire [DATA_W-1:0] res_lg_i, // logical result
input wire [DATA_W-1:0] res_as_i, // add/subtract result
input wire [DATA_W-1:0] res_ms_i, // multiply/shift result
input wire [DATA_W/2-1:0] dm_data_i, // dmem read data
input wire [ADDR_W-1:0] pc_i, // program counter
output wire [DATA_W-1:0] result_o // selected result
);
 
/*
----------------------
-- internal signals --
----------------------
*/
wire ms_a, rtn_a, dm_a, as_a, ext_a, sgn_a;
wire ms_b, rtn_b, dm_b, as_b, ext_b, sgn_b;
wire ms_c, dm_c, as_c, ext_c, sgn_c;
wire ms_d;
wire [DATA_W/2-1:0] a_lo_a;
reg [DATA_W-1:0] mux_a, mux_b, mux_c, mux_d;
wire [DATA_W-1:0] mux_a_b, mux_b_c, mux_c_d;
 
 
/*
================
== code start ==
================
*/
 
 
// input to mux a regs
vector_sr
#(
.REGS ( REGS_IN_A ),
.DATA_W ( DATA_W/2+6 ),
.RESET_VAL ( 0 )
)
in_a_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { a_lo_i, ms_i, rtn_i, dm_i, as_i, ext_i, sgn_i } ),
.data_o ( { a_lo_a, ms_a, rtn_a, dm_a, as_a, ext_a, sgn_a } )
);
 
 
// mux a
always @ ( * ) begin
casex ( { dm_a, as_a } )
'b00 : mux_a <= res_lg_i;
'b01 : mux_a <= res_as_i;
'b1x : mux_a <= a_lo_a;
endcase
end
 
 
// mux a to mux b regs
vector_sr
#(
.REGS ( REGS_A_B ),
.DATA_W ( DATA_W+5 ),
.RESET_VAL ( 0 )
)
a_b_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { mux_a, ms_a, rtn_a, dm_a, ext_a, sgn_a } ),
.data_o ( { mux_a_b, ms_b, rtn_b, dm_b, ext_b, sgn_b } )
);
 
 
// mux b
always @ ( * ) begin
case ( rtn_b )
'b0 : mux_b <= mux_a_b;
'b1 : mux_b <= pc_i;
endcase
end
 
// mux b to mux c regs
vector_sr
#(
.REGS ( REGS_B_C ),
.DATA_W ( DATA_W+4 ),
.RESET_VAL ( 0 )
)
b_c_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { mux_b, ms_b, dm_b, ext_b, sgn_b } ),
.data_o ( { mux_b_c, ms_c, dm_c, ext_c, sgn_c } )
);
 
 
// mux c
always @ ( * ) begin
casex ( { dm_c, ext_c, sgn_c } )
'b0xx : mux_c <= mux_b_c;
'b100 : mux_c <= dm_data_i;
'b101 : mux_c <= $signed( dm_data_i );
'b11x : mux_c <= { dm_data_i, mux_b_c[DATA_W/2-1:0] };
endcase
end
 
 
// mux c to mux d regs
vector_sr
#(
.REGS ( REGS_C_D ),
.DATA_W ( DATA_W+1 ),
.RESET_VAL ( 0 )
)
c_d_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { mux_c, ms_c } ),
.data_o ( { mux_c_d, ms_d } )
);
 
 
// mux c
always @ ( * ) begin
case ( ms_d )
'b0 : mux_d <= mux_c_d;
'b1 : mux_d <= res_ms_i;
endcase
end
 
 
// mux d to output regs
vector_sr
#(
.REGS ( REGS_D_OUT ),
.DATA_W ( DATA_W ),
.RESET_VAL ( 0 )
)
d_out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( mux_d ),
.data_o ( result_o )
);
 
 
endmodule
/hive/trunk/v01.09/alu_logical.v
0,0 → 1,184
/*
--------------------------------------------------------------------------------
 
Module : alu_logical.v
 
--------------------------------------------------------------------------------
 
Function:
- Logic unit for a processor ALU.
 
Instantiates:
- (4x) vector_sr.v
 
Notes:
- IN/MID/OUT/FLG optionally registered.
- lg_i / result_o decode:
 
lg result
--- --
00 a and b
01 a or b
10 a xor b
11 not( b )
 
lg result (ext)
--- -----
00 and( b ) bit reduction
01 or( b ) bit reduction
1x xor( b ) bit reduction
 
--------------------------------------------------------------------------------
*/
 
module alu_logical
#(
parameter integer REGS_IN = 1, // register option for inputs
parameter integer REGS_MID = 1, // mid register option
parameter integer REGS_OUT = 1, // register option for outputs
parameter integer REGS_FLG = 1, // register option for flag outputs
parameter integer DATA_W = 2, // data width
parameter integer LG_W = 2 // operation width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire ext_i, // 1=extended result
input wire [LG_W-1:0] lg_i, // see decode in notes above
// data I/O
input wire [DATA_W-1:0] a_i, // operand
input wire [DATA_W-1:0] b_i, // operand
output wire [DATA_W-1:0] result_o, // logical result
// flags
output wire nez_o, // a != 0
output wire ne_o // a != b
);
 
/*
----------------------
-- internal signals --
----------------------
*/
wire ext, ext_r;
wire [LG_W-1:0] lg;
wire [DATA_W-1:0] a, b;
reg [DATA_W-1:0] res;
wire [DATA_W-1:0] res_r;
reg res_bit;
wire res_bit_r;
reg [DATA_W-1:0] result;
wire [DATA_W-1:0] a_xor_b;
wire nez, ne;
 
 
/*
================
== code start ==
================
*/
 
 
// optional input registers
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( DATA_W+DATA_W+LG_W+1 ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { a_i, b_i, lg_i, ext_i } ),
.data_o ( { a, b, lg, ext } )
);
 
 
// some intermediate results
assign a_xor_b = a ^ b;
 
// flags
assign nez = |a;
assign ne = |a_xor_b;
 
// multiplex results
always @ ( * ) begin
case ( lg )
'b00 : res <= a & b;
'b01 : res <= a | b;
'b10 : res <= a_xor_b;
'b11 : res <= ~b;
endcase
end
 
// multiplex results
always @ ( * ) begin
casex ( lg )
'b00 : res_bit <= &b;
'b01 : res_bit <= |b;
'b1x : res_bit <= ^b;
endcase
end
 
 
// optional flag regs
vector_sr
#(
.REGS ( REGS_FLG ),
.DATA_W ( 2 ),
.RESET_VAL ( 0 )
)
regs_flags
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { nez, ne } ),
.data_o ( { nez_o, ne_o } )
);
 
 
// optional mid regs
vector_sr
#(
.REGS ( REGS_MID ),
.DATA_W ( DATA_W+2 ),
.RESET_VAL ( 0 )
)
mid_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { res, res_bit, ext } ),
.data_o ( { res_r, res_bit_r, ext_r } )
);
 
 
// multiplex
always @ ( * ) begin
case ( ext_r )
'b0 : result <= res_r;
'b1 : result <= { DATA_W{ res_bit_r } };
endcase
end
 
 
// optional output regs
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( DATA_W ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( result ),
.data_o ( result_o )
);
 
 
endmodule
/hive/trunk/v01.09/core.qsf
0,0 → 1,63
# -------------------------------------------------------------------------- #
#
# Copyright (C) 1991-2010 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus II
# Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Web Edition
# Date created = 18:34:00 June 06, 2013
#
# -------------------------------------------------------------------------- #
#
# Notes:
#
# 1) The default values for assignments are stored in the file:
# core_assignment_defaults.qdf
# If this file doesn't exist, see file:
# assignment_defaults.qdf
#
# 2) Altera recommends that you do not modify this file. This
# file is updated automatically by the Quartus II software
# and any changes you make may be lost or overwritten.
#
# -------------------------------------------------------------------------- #
 
 
set_global_assignment -name FAMILY "Cyclone III"
set_global_assignment -name DEVICE EP3C5E144C8
set_global_assignment -name TOP_LEVEL_ENTITY core
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "9.1 SP2"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "18:34:00 JUNE 06, 2013"
set_global_assignment -name LAST_QUARTUS_VERSION "9.1 SP2"
set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_blast_fpga
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8
set_global_assignment -name VERILOG_FILE core.v
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"
set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"
set_global_assignment -name FITTER_EFFORT "STANDARD FIT"
set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED
set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC OFF
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING OFF
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON
set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA OFF
set_global_assignment -name SIMULATION_MODE FUNCTIONAL
set_global_assignment -name INCREMENTAL_VECTOR_INPUT_SOURCE core.vwf
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
/hive/trunk/v01.09/op_decode.v
0,0 → 1,588
/*
--------------------------------------------------------------------------------
 
Module : op_decode.v
 
--------------------------------------------------------------------------------
 
Function:
- Opcode decoder for processor.
 
Instantiates:
- (2x) vector_sr.v
 
Notes:
- I/O optionally registered.
- Middle register is always present.
- Operates on the current thread in the stage.
 
--------------------------------------------------------------------------------
*/
 
module op_decode
#(
parameter integer REGS_IN = 1, // register option for inputs
parameter integer REGS_OUT = 1, // register option for outputs
parameter integer STACKS = 4, // number of stacks
parameter integer STK_W = 2, // stack selector width
parameter integer DATA_W = 32, // data width
parameter integer IM_DATA_W = 8, // immediate data width
parameter integer IM_ADDR_W = 6, // immediate data width
parameter integer OP_CODE_W = 16, // op code width
parameter integer LG_W = 2 // logical operation width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// state I/O
input wire thrd_clr_i, // thread clear
input wire thrd_intr_i, // thread interrupt
input wire [OP_CODE_W-1:0] op_code_i, // op_code
output wire op_code_er_o, // 1=illegal op code encountered
// data I/O
output wire [IM_DATA_W-1:0] im_data_o, // immediate data
output wire [IM_ADDR_W-1:0] im_addr_o, // immediate address (offset)
// pc pipe control
output wire pc_clr_o, // pc clear
output wire lit_o, // 1 : pc=pc++ for lit
output wire jmp_o, // 1 : pc=pc+B for jump (cond)
output wire gto_o, // 1 : pc=B for goto / gosub (cond)
output wire intr_o, // 1 : pc=intr
// conditional masks
output wire tst_eq_o, // = test
output wire tst_lt_o, // < test
output wire tst_gt_o, // > test
output wire tst_ab_o, // 1=a/b test; 0=a/z test
// stacks control
output wire stk_clr_o, // stacks clear
output wire [STACKS-1:0] pop_o, // stacks pop
output wire [STACKS-1:0] push_o, // stacks push
// alu control
output wire [STK_W-1:0] a_sel_o, // stack selector
output wire [STK_W-1:0] b_sel_o, // stack selector
output wire imda_o, // 1=immediate data
output wire imad_o, // 1=immediate address
output wire sgn_o, // 1=signed
output wire ext_o, // 1=extended
output wire [LG_W-1:0] lg_o, // see decode in notes
output wire add_o, // 1=add
output wire sub_o, // 1=subtract
output wire mul_o, // 1=multiply
output wire shl_o, // 1=shift left
output wire cpy_o, // 1=copy b
output wire dm_o, // 1=data mem
output wire rtn_o, // 1=return pc
output wire rd_o, // 1=read
output wire wr_o // 1=write
);
 
/*
----------------------
-- internal signals --
----------------------
*/
`include "op_encode.h"
wire thrd_clr, thrd_intr;
wire [OP_CODE_W-1:0] op_code;
reg op_ok, op_code_ok_lo, op_code_ok_hi;
wire op_code_er;
//
reg [IM_DATA_W-1:0] im_data;
reg [IM_ADDR_W-1:0] im_addr;
reg pc_clr;
reg intr, gto, jmp, lit;
reg tst_lo, tst_hi, tst_ab, tst_gt, tst_lt, tst_eq;
reg stk_clr;
reg a_pop, b_pop;
reg push_lo, push_hi;
wire [STACKS-1:0] pop, push;
reg [STK_W-1:0] a_sel, b_sel;
reg imad_6b, imad_5b;
reg imda_8b, imda_6b;
wire imad, imda;
reg rtn, dm, cpy, shl, mul, sub, add, ext, sgn;
reg [LG_W-1:0] lg;
reg rd, wr;
 
 
 
/*
================
== code start ==
================
*/
 
 
// optional input registers
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( 2+OP_CODE_W ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { thrd_clr_i, thrd_intr_i, op_code_i } ),
.data_o ( { thrd_clr, thrd_intr, op_code } )
);
 
 
// instantiate & split out op_code fields
wire [1:0] op_code_a_sel = op_code[1:0];
wire [1:0] op_code_b_sel = op_code[3:2];
wire op_code_a_pop = op_code[4];
wire op_code_b_pop = op_code[5];
wire [9:0] op_code_op = op_code[15:6];
wire [2:0] op_code_tst_hi = op_code[14:12];
wire [2:0] op_code_tst_lo = op_code[8:6];
wire [7:0] op_code_im = op_code[13:6];
//
reg [2:0] tst_hi_field, tst_lo_field;
reg [7:0] im_field;
 
 
// mid register for immediate and test fields
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
tst_hi_field <= 'b0;
tst_lo_field <= 'b0;
im_field <= 'b0;
end else begin
tst_hi_field <= op_code_tst_hi;
tst_lo_field <= op_code_tst_lo;
im_field <= op_code_im;
end
end
 
// mid register if & case: clear, interrupt, and op_code decode
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
op_ok <= 'b0;
op_code_ok_lo <= 'b0;
op_code_ok_hi <= 'b0;
pc_clr <= 'b0;
lit <= 'b0;
jmp <= 'b0;
gto <= 'b0;
intr <= 'b0;
tst_hi <= 'b0;
tst_lo <= 'b0;
tst_ab <= 'b0;
stk_clr <= 'b0;
a_pop <= 'b0;
b_pop <= 'b0;
push_lo <= 'b0;
push_hi <= 'b0;
a_sel <= 'b0;
b_sel <= 'b0;
imad_6b <= 'b0;
imad_5b <= 'b0;
imda_8b <= 'b0;
imda_6b <= 'b0;
sgn <= 'b0;
ext <= 'b0;
lg <= 'b0;
add <= 'b0;
sub <= 'b0;
mul <= 'b0;
shl <= 'b0;
cpy <= 'b0;
dm <= 'b0;
rtn <= 'b0;
rd <= 'b0;
wr <= 'b0;
end else begin
// default values
op_ok <= 'b0; // default is bad op
op_code_ok_lo <= 'b0; // default is bad opcode
op_code_ok_hi <= 'b0; // default is bad opcode
pc_clr <= 'b0; // default is no pc clear
lit <= 'b0; // default is no lit
jmp <= 'b0; // default is no jump
gto <= 'b0; // default is no goto
intr <= 'b0; // default is no interrupt
tst_hi <= 'b0; // default is no test
tst_lo <= 'b0; // default is no test
tst_ab <= 'b0; // default is comparison to zero
stk_clr <= 'b0; // default is no stack clear
a_pop <= op_code_a_pop; // default is op_code directive
b_pop <= op_code_b_pop; // default is op_code directive
push_lo <= 'b0; // default is no push
push_hi <= 'b0; // default is no push
a_sel <= op_code_a_sel; // default is op_code directive
b_sel <= op_code_b_sel; // default is op_code directive
imad_6b <= 'b0; // default is not immediate address
imad_5b <= 'b0; // default is not immediate address
imda_8b <= 'b0; // default is not immediate data
imda_6b <= 'b0; // default is not immediate data
sgn <= 'b1; // default is signed!
ext <= 'b0; // default is unextended
lg <= 'b0; // default is a&b
add <= 'b0; // default is logic
sub <= 'b0; // default is logic
mul <= 'b0; // default is logic
shl <= 'b0; // default is logic
cpy <= 'b0; // default is logic
dm <= 'b0; // default is logic
rtn <= 'b0; // default is logic
rd <= 'b0; // default is don't read
wr <= 'b0; // default is don't write
if ( thrd_clr ) begin
op_ok <= 'b1; // good op
pc_clr <= 'b1; // clear pc
stk_clr <= 'b1; // clear stacks
a_pop <= 'b0; // no pop
b_pop <= 'b0; // no pop
end else if ( thrd_intr ) begin
op_ok <= 'b1; // good op
intr <= 'b1; // don't inc PC
a_pop <= 'b0; // no pop
b_pop <= 'b0; // no pop
push_lo <= 'b1; // push
a_sel <= 'b0; // push return address to stack 0
rtn <= 'b1; // push pc
end else begin
casex ( op_code_op )
///////////////////////////////////////
// immediate read & write - 64 codes //
///////////////////////////////////////
op_rd_i : begin
op_code_ok_lo <= 'b1; // good opcode
push_lo <= 'b1; // push
dm <= 'b1; // dm
rd <= 'b1; // read
end
op_rd_ix : begin
op_code_ok_lo <= 'b1; // good opcode
push_lo <= 'b1; // push
dm <= 'b1; // dm
rd <= 'b1; // read
ext <= 'b1; // extended
end
op_wr_i : begin
op_code_ok_lo <= 'b1; // good opcode
wr <= 'b1; // write
end
op_wr_ix : begin
op_code_ok_lo <= 'b1; // good opcode
wr <= 'b1; // write
ext <= 'b1; // extended
end
////////////////////////////////////////////
// immediate conditional jump - 384 codes //
////////////////////////////////////////////
op_jmp_iez, op_jmp_ilz, op_jmp_ilez : begin
op_code_ok_lo <= 'b1; // good opcode
jmp <= 'b1; // jump
imad_5b <= 'b1; // immediate address
tst_hi <= 'b1; // high field
end
op_jmp_ie, op_jmp_il, op_jmp_ile : begin
op_code_ok_lo <= 'b1; // good opcode
jmp <= 'b1; // jump
imad_5b <= 'b1; // immediate address
tst_hi <= 'b1; // high field
tst_ab <= 'b1; // a & b comparison
end
op_jmp_igz, op_jmp_igez, op_jmp_iglz : begin
op_code_ok_lo <= 'b1; // good opcode
jmp <= 'b1; // jump
imad_5b <= 'b1; // immediate address
tst_hi <= 'b1; // high field
end
op_jmp_iug, op_jmp_iuge, op_jmp_igl : begin // gl is sign neutral
op_code_ok_lo <= 'b1; // good opcode
jmp <= 'b1; // jump
imad_5b <= 'b1; // immediate address
tst_hi <= 'b1; // high field
tst_ab <= 'b1; // a & b comparison
sgn <= 'b0; // unsigned
end
/////////////////////////////////////////////
// immediate unconditional jump - 64 codes //
/////////////////////////////////////////////
op_jmp_i : begin
op_code_ok_lo <= 'b1; // good opcode
jmp <= 'b1; // jump
imad_6b <= 'b1; // immediate address
end
////////////////////////////////
// immediate data - 256 codes //
////////////////////////////////
op_byt_i : begin
op_code_ok_lo <= 'b1; // good opcode
push_lo <= 'b1; // push
imda_8b <= 'b1; // immediate data
cpy <= 'b1; // copy
end
/////////////////////////////////
// immediate shift - 128 codes //
/////////////////////////////////
op_shl_i : begin
op_code_ok_lo <= 'b1; // good opcode
push_lo <= 'b1; // push
imda_6b <= 'b1; // immediate data
shl <= 'b1; // shift left
end
op_shl_iu : begin
op_code_ok_lo <= 'b1; // good opcode
push_lo <= 'b1; // push
imda_6b <= 'b1; // immediate data
shl <= 'b1; // shift left
sgn <= 'b0; // unsigned
end
//////////////////////////////
// immediate add - 64 codes //
//////////////////////////////
op_add_i : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
imda_6b <= 'b1; // immediate data
add <= 'b1; // add
end
/////////////////////////////////////
// conditional jump - 7 of 8 codes //
/////////////////////////////////////
op_jmp_ez, op_jmp_lz, op_jmp_lez, op_jmp_gz, op_jmp_gez, op_jmp_glz, op_jmp : begin
op_code_ok_lo <= 'b1; // good opcode
jmp <= 'b1; // jump
tst_lo <= 'b1; // low field
end
/////////////////////////////////////
// conditional goto - 7 of 8 codes //
/////////////////////////////////////
op_gto_ez, op_gto_lz, op_gto_lez, op_gto_gz, op_gto_gez, op_gto_glz, op_gto : begin
op_code_ok_lo <= 'b1; // good opcode
gto <= 'b1; // goto
tst_lo <= 'b1; // low field
end
////////////////////////
// singles - 48 codes //
////////////////////////
/////////////
// group 1 //
/////////////
op_add : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
add <= 'b1; // add
end
op_add_x : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
add <= 'b1; // add
ext <= 'b1; // extended
end
op_add_ux : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
add <= 'b1; // add
ext <= 'b1; // extended
sgn <= 'b0; // unsigned
end
op_sub : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
sub <= 'b1; // sub
end
op_sub_x : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
sub <= 'b1; // sub
ext <= 'b1; // extended
end
op_sub_ux : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
sub <= 'b1; // sub
ext <= 'b1; // extended
sgn <= 'b0; // unsigned
end
op_mul : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
mul <= 'b1; // multiply
end
op_mul_x : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
mul <= 'b1; // multiply
ext <= 'b1; // extended
end
op_mul_ux : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
mul <= 'b1; // multiply
ext <= 'b1; // extended
sgn <= 'b0; // unsigned
end
op_shl : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
shl <= 'b1; // shift left
end
op_shl_u : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
shl <= 'b1; // shift left
sgn <= 'b0; // unsigned
end
/////////////
// group 2 //
/////////////
op_and : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
end
op_or : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lg <= 'd1;
end
op_xor : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lg <= 'd2;
end
op_not : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lg <= 'd3;
end
op_and_b : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
ext <= 'b1; // extended
end
op_or_b : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lg <= 'd1;
ext <= 'b1; // extended
end
op_xor_b : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lg <= 'd2;
ext <= 'b1; // extended
end
/////////////
// group 3 //
/////////////
op_lit : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lit <= 'b1; // lit
dm <= 'b1; // dm
end
op_lit_u : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lit <= 'b1; // lit
dm <= 'b1; // dm
sgn <= 'b0; // unsigned
end
op_lit_x : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
lit <= 'b1; // lit
dm <= 'b1; // dm
ext <= 'b1; // extended
end
op_cpy : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
cpy <= 'b1; // copy
end
op_pc : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
rtn <= 'b1; // push pc
end
op_gsb : begin
op_code_ok_hi <= 'b1; // good opcode
push_hi <= 'b1; // push
gto <= 'b1; // goto
rtn <= 'b1; // push pc
end
op_cls : begin
op_code_ok_hi <= 'b1; // good opcode
stk_clr <= 'b1; // stack clear
a_pop <= 'b0; // no pop
b_pop <= 'b0; // no pop
end
op_pop : begin
op_code_ok_hi <= 'b1; // good opcode
end
op_nop : begin
op_code_ok_hi <= 'b1; // good opcode
a_pop <= 'b0; // no pop
b_pop <= 'b0; // no pop
end
default: begin
// nothing here
end
endcase
end
end
end
 
// decode test
always @ ( * ) begin
casex ( { tst_hi, tst_lo } )
2'b00 : { tst_gt, tst_lt, tst_eq } <= 3'b111; // default is always
2'b01 : { tst_gt, tst_lt, tst_eq } <= tst_lo_field;
2'b1x : { tst_gt, tst_lt, tst_eq } <= tst_hi_field;
endcase
end
 
// decode immediate data
always @ ( * ) begin
case ( imda_6b )
1'b0 : im_data <= im_field; // byte default
1'b1 : im_data <= $signed( im_field[5:0] ); // signed 6 bit
endcase
end
 
// decode immediate address
always @ ( * ) begin
case ( imad_5b )
1'b0 : im_addr <= im_field[IM_ADDR_W-1:0]; // 6 bit default
1'b1 : im_addr <= $signed( im_field[4:0] ); // signed 5 bit
endcase
end
 
// decode control
assign imda = imda_8b | imda_6b;
assign imad = imad_6b | imad_5b;
 
// decode pop & push
assign pop = ( a_pop << a_sel ) | ( b_pop << b_sel );
assign push = ( ( push_lo | push_hi ) << a_sel );
// decode errors
assign op_code_er = ~( op_ok | op_code_ok_lo | op_code_ok_hi );
 
 
// optional output registers
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( 1+IM_ADDR_W+IM_DATA_W+10+STACKS+STACKS+STK_W+STK_W+9+LG_W+4 ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { op_code_er, im_addr, im_data, pc_clr, intr, gto, jmp, lit, tst_gt, tst_lt, tst_eq, tst_ab, stk_clr, pop, push, a_sel, b_sel, imda, imad, rtn, dm, cpy, shl, mul, sub, add, lg, ext, sgn, rd, wr } ),
.data_o ( { op_code_er_o, im_addr_o, im_data_o, pc_clr_o, intr_o, gto_o, jmp_o, lit_o, tst_gt_o, tst_lt_o, tst_eq_o, tst_ab_o, stk_clr_o, pop_o, push_o, a_sel_o, b_sel_o, imda_o, imad_o, rtn_o, dm_o, cpy_o, shl_o, mul_o, sub_o, add_o, lg_o, ext_o, sgn_o, rd_o, wr_o } )
);
 
endmodule
/hive/trunk/v01.09/pc_ring.v
0,0 → 1,186
/*
--------------------------------------------------------------------------------
 
Module : pc_ring.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor PC storage ring.
 
Instantiates:
- (2x) vector_sr.v
 
Notes:
- 8 stages.
- Loop feedback, so PC interstage pipe registering forms a storage ring.
 
--------------------------------------------------------------------------------
*/
 
module pc_ring
#(
parameter integer THREADS = 8, // threads
parameter integer THRD_W = 2, // thread width
parameter integer DATA_W = 32, // data width
parameter integer ADDR_W = 16, // address width
parameter integer IM_ADDR_W = 5, // immediate data width
parameter [ADDR_W-1:0] CLR_BASE = 'h8, // clear address base (concat)
parameter integer CLR_SPAN = 0, // clear address span (2^n)
parameter [ADDR_W-1:0] INTR_BASE = 'h0, // interrupt address base (concat)
parameter integer INTR_SPAN = 0 // interrupt address span (2^n)
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire [THRD_W-1:0] thrd_0_i, // thread
input wire [THRD_W-1:0] thrd_3_i, // thread
input wire clr_i, // 1=pc clear
input wire lit_i, // 1 : pc=pc++ for lit
input wire jmp_i, // 1 : pc=pc+B for jump (cond)
input wire gto_i, // 1 : pc=B for goto / gosub (cond)
input wire intr_i, // 1 : pc=int
input wire imad_i, // 1=immediate address
input wire tst_2_i, // 1=true; 0=false
// data I/O
input wire [DATA_W/2-1:0] b_lo_i, // b_lo
// address I/O
input wire [IM_ADDR_W-1:0] im_addr_i, // immediate address (offset)
output wire [ADDR_W-1:0] pc_0_o,
output wire [ADDR_W-1:0] pc_1_o,
output wire [ADDR_W-1:0] pc_2_o,
output wire [ADDR_W-1:0] pc_3_o,
output wire [ADDR_W-1:0] pc_4_o,
output wire [ADDR_W-1:0] pc_5_o,
output wire [ADDR_W-1:0] pc_6_o,
output wire [ADDR_W-1:0] pc_7_o
);
 
/*
----------------------
-- internal signals --
----------------------
*/
reg [ADDR_W-1:0] pc[0:THREADS-1];
//
wire [ADDR_W-1:0] clr_addr, intr_addr;
wire intr_2, gto_2, jmp_2, lit_2;
wire intr_3, gto_3;
wire tst_3;
wire signed [DATA_W/2-1:0] b_im, b_im_2, b_im_3;
reg [ADDR_W-1:0] pc_1_mux, pc_3_mux, pc_4_mux;
 
 
 
/*
================
== code start ==
================
*/
 
 
// form the clear address
assign clr_addr[ADDR_W-1:THRD_W+CLR_SPAN] = CLR_BASE[ADDR_W-1:THRD_W+CLR_SPAN];
assign clr_addr[THRD_W+CLR_SPAN-1:0] = thrd_0_i << CLR_SPAN;
 
// mux for clear, next
always @ ( * ) begin
casex ( { clr_i, intr_i } )
'b00 : pc_1_mux <= pc[0] + 1'b1; // inc for next
'b01 : pc_1_mux <= pc[0]; // no change for int
'b1x : pc_1_mux <= clr_addr; // clear
endcase
end
// decode immediate offset
assign b_im = ( imad_i ) ? $signed( im_addr_i ) : $signed( b_lo_i );
 
 
// in to 2 regs
vector_sr
#(
.REGS ( 2 ),
.DATA_W ( DATA_W/2+4 ),
.RESET_VAL ( 0 )
)
regs_in_2
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { b_im, intr_i, gto_i, jmp_i, lit_i } ),
.data_o ( { b_im_2, intr_2, gto_2, jmp_2, lit_2 } )
);
 
 
// mux for lit, jump
always @ ( * ) begin
casex ( { jmp_2, lit_2 } )
3'b00 : pc_3_mux <= pc[2]; // no change
3'b01 : pc_3_mux <= pc[2] + 1'b1; // inc for lit
3'b1x : pc_3_mux <= ( tst_2_i ) ? pc[2] + b_im_2 : pc[2]; // offset for jump
endcase
end
 
 
// 2 to 3 regs
vector_sr
#(
.REGS ( 1 ),
.DATA_W ( DATA_W/2+3 ),
.RESET_VAL ( 0 )
)
regs_2_3
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { b_im_2, intr_2, gto_2, tst_2_i } ),
.data_o ( { b_im_3, intr_3, gto_3, tst_3 } )
);
 
 
// form the interrupt address
assign intr_addr[ADDR_W-1:THRD_W+INTR_SPAN] = INTR_BASE[ADDR_W-1:THRD_W+INTR_SPAN];
assign intr_addr[THRD_W+INTR_SPAN-1:0] = thrd_3_i << INTR_SPAN;
 
// mux for goto, gosub, interrupt
always @ ( * ) begin
casex ( { intr_3, gto_3 } )
'b00 : pc_4_mux <= pc[3]; // no change
'b01 : pc_4_mux <= ( tst_3 ) ? b_im_3 : pc[3]; // absolute goto / gosub
'b1x : pc_4_mux <= intr_addr; // interrupt address
endcase
end
 
// pc storage ring
integer j;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
for ( j = 0; j < THREADS; j = j + 1 ) begin
pc[j] <= 'b0;
end
end else begin
for ( j = 0; j < THREADS; j = j + 1 ) begin
if ( j == 0 ) pc[j] <= pc[THREADS-1]; // wrap around
else if ( j == 1 ) pc[j] <= pc_1_mux;
else if ( j == 3 ) pc[j] <= pc_3_mux;
else if ( j == 4 ) pc[j] <= pc_4_mux;
else pc[j] <= pc[j-1];
end
end
end
 
// output pc
assign pc_0_o = pc[0];
assign pc_1_o = pc[1];
assign pc_2_o = pc[2];
assign pc_3_o = pc[3];
assign pc_4_o = pc[4];
assign pc_5_o = pc[5];
assign pc_6_o = pc[6];
assign pc_7_o = pc[7];
 
 
endmodule
/hive/trunk/v01.09/cond_test.v
0,0 → 1,115
/*
--------------------------------------------------------------------------------
 
Module : cond_test.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor tests for conditional jumps, etc.
 
Instantiates:
- (2x) vector_sr.v
 
Notes:
- Parameterized register(s) test inputs.
- Parameterized register(s) @ output.
 
--------------------------------------------------------------------------------
*/
 
module cond_test
#(
parameter integer REGS_TST = 0, // reg option input to test
parameter integer REGS_OUT = 0 // reg option test to output
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// flags (combinatorial)
input wire nez_i, // a != 0
input wire ne_i, // a != b
input wire ltz_i, // a < 0
input wire lt_i, // a < b
// tests (optionally registered)
input wire tst_gt_i, // > test
input wire tst_lt_i, // < test
input wire tst_eq_i, // = test
input wire tst_ab_i, // 1=a/b test; 0=a/z test
// output (optionally registered)
output wire tst_o // 1=true; 0=false
);
 
/*
----------------------
-- internal signals --
----------------------
*/
wire tst_ab, tst_gt, tst_lt, tst_eq;
wire eqz, gtz;
wire eq, gt;
wire [2:0] t_cat, az_cat, ab_cat;
wire res_az, res_ab, tst;
 
 
/*
================
== code start ==
================
*/
 
 
// input to test regs
vector_sr
#(
.REGS ( REGS_TST ),
.DATA_W ( 4 ),
.RESET_VAL ( 0 )
)
tst_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { tst_ab_i, tst_gt_i, tst_lt_i, tst_eq_i } ),
.data_o ( { tst_ab, tst_gt, tst_lt, tst_eq } )
);
 
// concat tests
assign t_cat = { tst_gt, tst_lt, tst_eq };
 
// decode conditionals, & mask, | bit reduction => results
assign eqz = ~nez_i;
assign gtz = ~( ltz_i | eqz );
assign az_cat = { gtz, ltz_i, eqz };
assign res_az = |( t_cat & az_cat );
//
assign eq = ~ne_i;
assign gt = ~( lt_i | eq );
assign ab_cat = { gt, lt_i, eq };
assign res_ab = |( t_cat & ab_cat );
 
// select result
assign tst = ( tst_ab ) ? res_ab : res_az;
 
 
// result to output regs
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( 1 ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( tst ),
.data_o ( tst_o )
);
 
 
endmodule
/hive/trunk/v01.09/core.vwf
0,0 → 1,4809
/*
WARNING: Do NOT edit the input and output ports in this file in a text
editor if you plan to continue editing the block that represents it in
the Block Editor! File corruption is VERY likely to occur.
*/
 
/*
Copyright (C) 1991-2010 Altera Corporation
Your use of Altera Corporation's design tools, logic functions
and other software and tools, and its AMPP partner logic
functions, and any output files from any of the foregoing
(including device programming or simulation files), and any
associated documentation or information are expressly subject
to the terms and conditions of the Altera Program License
Subscription Agreement, Altera MegaCore Function License
Agreement, or other applicable license agreement, including,
without limitation, that your use is for the sole purpose of
programming logic devices manufactured by Altera and sold by
Altera or its authorized distributors. Please refer to the
applicable agreement for further details.
*/
 
HEADER
{
VERSION = 1;
TIME_UNIT = ns;
DATA_OFFSET = 0.0;
DATA_DURATION = 130000.0;
SIMULATION_TIME = 0.0;
GRID_PHASE = 0.0;
GRID_PERIOD = 50.0;
GRID_DUTY_CYCLE = 50;
}
 
SIGNAL("clk_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("intr_req_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 8;
LSB_INDEX = 0;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("intr_req_i[7]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[6]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("intr_req_i[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "intr_req_i";
}
 
SIGNAL("io_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 32;
LSB_INDEX = 0;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("io_i[31]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[30]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[29]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[28]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[27]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[26]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[25]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[24]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[23]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[22]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[21]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[20]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[19]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[18]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[17]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[16]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[15]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[14]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[13]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[12]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[11]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[10]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[9]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[8]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[7]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[6]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_i[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "io_i";
}
 
SIGNAL("io_o")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 32;
LSB_INDEX = 0;
DIRECTION = OUTPUT;
PARENT = "";
}
 
SIGNAL("io_o[31]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[30]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[29]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[28]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[27]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[26]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[25]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[24]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[23]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[22]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[21]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[20]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[19]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[18]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[17]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[16]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[15]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[14]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[13]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[12]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[11]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[10]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[9]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[8]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[7]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[6]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("io_o[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "io_o";
}
 
SIGNAL("rst_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("divider 681")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("divider 477")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("divider 1788")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("divider 1264")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("divider 1510")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|vector_sr:regs_in_2|stage[0][2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][45]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][46]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][47]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][48]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][49]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][31]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][30]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][29]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("divider 622")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 16;
LSB_INDEX = 0;
DIRECTION = BURIED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][15]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][14]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][13]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][12]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][11]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][10]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][9]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][8]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][7]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][6]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("control_ring:control_ring|pc_ring:pc_ring|pc[0][0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
}
 
SIGNAL("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 4;
LSB_INDEX = 0;
DIRECTION = BURIED;
PARENT = "";
}
 
SIGNAL("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3]";
}
 
SIGNAL("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3]";
}
 
SIGNAL("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3]";
}
 
SIGNAL("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 32;
LSB_INDEX = 0;
DIRECTION = BURIED;
PARENT = "";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][31]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][30]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][29]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][28]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][27]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][26]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][25]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][24]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][23]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][22]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][21]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][20]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][19]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][18]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][17]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][16]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][15]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][14]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][13]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][12]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][11]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][10]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][9]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][8]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][7]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][6]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = BURIED;
PARENT = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][32]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][33]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][34]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 3;
LSB_INDEX = 0;
DIRECTION = REGISTERED;
PARENT = "";
}
 
SIGNAL("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o";
}
 
SIGNAL("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o";
}
 
SIGNAL("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = REGISTERED;
PARENT = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o";
}
 
GROUP("io_o_char")
{
MEMBERS = "io_o[31]", "io_o[30]", "io_o[29]", "io_o[28]", "io_o[27]";
}
 
GROUP("io_o_mant")
{
MEMBERS = "io_o[26]", "io_o[25]", "io_o[24]", "io_o[23]", "io_o[22]", "io_o[21]", "io_o[20]", "io_o[19]", "io_o[18]", "io_o[17]", "io_o[16]", "io_o[15]", "io_o[14]", "io_o[13]", "io_o[12]", "io_o[11]", "io_o[10]", "io_o[9]", "io_o[8]", "io_o[7]", "io_o[6]", "io_o[5]", "io_o[4]", "io_o[3]", "io_o[2]", "io_o[1]", "io_o[0]";
}
 
GROUP("test")
{
MEMBERS = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][31]", "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][30]", "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][29]";
}
 
GROUP("im_addr")
{
MEMBERS = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][49]", "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][48]", "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][47]", "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][46]", "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][45]";
}
 
TRANSITION_LIST("clk_i")
{
NODE
{
REPEAT = 1;
NODE
{
REPEAT = 2600;
LEVEL 0 FOR 25.0;
LEVEL 1 FOR 25.0;
}
}
}
 
TRANSITION_LIST("intr_req_i[7]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 12800.0;
LEVEL 1 FOR 49600.0;
LEVEL 0 FOR 25600.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 40400.0;
}
}
 
TRANSITION_LIST("intr_req_i[6]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 38400.0;
LEVEL 1 FOR 24000.0;
LEVEL 0 FOR 22400.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 43600.0;
}
}
 
TRANSITION_LIST("intr_req_i[5]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 57600.0;
LEVEL 1 FOR 4800.0;
LEVEL 0 FOR 19200.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 46800.0;
}
}
 
TRANSITION_LIST("intr_req_i[4]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 51200.0;
LEVEL 1 FOR 11200.0;
LEVEL 0 FOR 16000.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 50000.0;
}
}
 
TRANSITION_LIST("intr_req_i[3]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 25600.0;
LEVEL 1 FOR 36800.0;
LEVEL 0 FOR 12800.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 53200.0;
}
}
 
TRANSITION_LIST("intr_req_i[2]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 32000.0;
LEVEL 1 FOR 30400.0;
LEVEL 0 FOR 9600.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 56400.0;
}
}
 
TRANSITION_LIST("intr_req_i[1]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 44800.0;
LEVEL 1 FOR 17600.0;
LEVEL 0 FOR 6400.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 59600.0;
}
}
 
TRANSITION_LIST("intr_req_i[0]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 19200.0;
LEVEL 1 FOR 43200.0;
LEVEL 0 FOR 3200.0;
LEVEL 1 FOR 1600.0;
LEVEL 0 FOR 62800.0;
}
}
 
TRANSITION_LIST("io_i[31]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[30]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[29]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[28]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[27]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[26]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[25]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[24]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[23]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[22]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[21]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[20]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[19]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[18]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[17]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[16]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[15]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[14]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[13]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[12]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[11]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[10]")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 4800.0;
LEVEL 0 FOR 5000.0;
LEVEL 1 FOR 120200.0;
}
}
 
TRANSITION_LIST("io_i[9]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[8]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[7]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[6]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[5]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[4]")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 4800.0;
LEVEL 0 FOR 5000.0;
LEVEL 1 FOR 120200.0;
}
}
 
TRANSITION_LIST("io_i[3]")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[2]")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 4800.0;
LEVEL 0 FOR 5000.0;
LEVEL 1 FOR 120200.0;
}
}
 
TRANSITION_LIST("io_i[1]")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 130000.0;
}
}
 
TRANSITION_LIST("io_i[0]")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 4800.0;
LEVEL 0 FOR 5000.0;
LEVEL 1 FOR 120200.0;
}
}
 
TRANSITION_LIST("io_o[31]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[30]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[29]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[28]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[27]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[26]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[25]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[24]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[23]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[22]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[21]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[20]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[19]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[18]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[17]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[16]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[15]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[14]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[13]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[12]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[11]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[10]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[9]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[8]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[7]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[6]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[5]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[4]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[3]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[2]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[1]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("io_o[0]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 130000.0;
}
}
 
TRANSITION_LIST("rst_i")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 129950.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|vector_sr:regs_in_2|stage[0][2]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][45]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][46]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][47]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][48]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][49]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][31]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][30]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][29]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][15]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][14]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][13]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][12]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][11]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][10]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][9]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][8]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][7]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][6]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][5]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][4]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][3]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][2]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][1]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|pc_ring:pc_ring|pc[0][0]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][3]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][2]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][1]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][0]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][31]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][30]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][29]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][28]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][27]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][26]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][25]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][24]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][23]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][22]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][21]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][20]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][19]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][18]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][17]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][16]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][15]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][14]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][13]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][12]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][11]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][10]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][9]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][8]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][7]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][6]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][5]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][4]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][3]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][2]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][1]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][0]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][32]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][33]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][34]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[2]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[1]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
TRANSITION_LIST("control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[0]")
{
NODE
{
REPEAT = 1;
LEVEL U FOR 130000.0;
}
}
 
DISPLAY_LINE
{
CHANNEL = "rst_i";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 0;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "clk_i";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 1;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 681";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 2;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i";
EXPAND_STATUS = EXPANDED;
RADIX = Unsigned;
TREE_INDEX = 3;
TREE_LEVEL = 0;
CHILDREN = 4, 5, 6, 7, 8, 9, 10, 11;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 4;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 5;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 6;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 7;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 8;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 9;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 10;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "intr_req_i[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 11;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 477";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 12;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 13;
TREE_LEVEL = 0;
CHILDREN = 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[31]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 14;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[30]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 15;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[29]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 16;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[28]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 17;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[27]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 18;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[26]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 19;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[25]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 20;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[24]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 21;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[23]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 22;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[22]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 23;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[21]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 24;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[20]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 25;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[19]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 26;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[18]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 27;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[17]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 28;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[16]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 29;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[15]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 30;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[14]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 31;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[13]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 32;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[12]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 33;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[11]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 34;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[10]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 35;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[9]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 36;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[8]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 37;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 38;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 39;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 40;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 41;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 42;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 43;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 44;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_i[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 45;
TREE_LEVEL = 1;
PARENT = 13;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o_char";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 46;
TREE_LEVEL = 0;
CHILDREN = 47, 48, 49, 50, 51;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[31]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 47;
TREE_LEVEL = 1;
PARENT = 46;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[30]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 48;
TREE_LEVEL = 1;
PARENT = 46;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[29]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 49;
TREE_LEVEL = 1;
PARENT = 46;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[28]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 50;
TREE_LEVEL = 1;
PARENT = 46;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[27]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 51;
TREE_LEVEL = 1;
PARENT = 46;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o_mant";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 52;
TREE_LEVEL = 0;
CHILDREN = 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[26]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 53;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[25]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 54;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[24]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 55;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[23]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 56;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[22]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 57;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[21]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 58;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[20]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 59;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[19]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 60;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[18]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 61;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[17]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 62;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[16]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 63;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[15]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 64;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[14]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 65;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[13]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 66;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[12]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 67;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[11]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 68;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[10]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 69;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[9]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 70;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[8]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 71;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 72;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 73;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 74;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 75;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 76;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 77;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 78;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 79;
TREE_LEVEL = 1;
PARENT = 52;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 80;
TREE_LEVEL = 0;
CHILDREN = 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[31]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 81;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[30]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 82;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[29]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 83;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[28]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 84;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[27]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 85;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[26]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 86;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[25]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 87;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[24]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 88;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[23]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 89;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[22]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 90;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[21]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 91;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[20]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 92;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[19]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 93;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[18]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 94;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[17]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 95;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[16]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 96;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[15]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 97;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[14]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 98;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[13]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 99;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[12]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 100;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[11]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 101;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[10]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 102;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[9]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 103;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[8]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 104;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 105;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 106;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 107;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 108;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 109;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 110;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 111;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "io_o[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 112;
TREE_LEVEL = 1;
PARENT = 80;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 1788";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 113;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "im_addr";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 114;
TREE_LEVEL = 0;
CHILDREN = 115, 116, 117, 118, 119;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][49]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 115;
TREE_LEVEL = 1;
PARENT = 114;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][48]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 116;
TREE_LEVEL = 1;
PARENT = 114;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][47]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 117;
TREE_LEVEL = 1;
PARENT = 114;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][46]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 118;
TREE_LEVEL = 1;
PARENT = 114;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][45]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 119;
TREE_LEVEL = 1;
PARENT = 114;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 622";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 120;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "test";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 121;
TREE_LEVEL = 0;
CHILDREN = 122, 123, 124;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][31]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 122;
TREE_LEVEL = 1;
PARENT = 121;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][30]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 123;
TREE_LEVEL = 1;
PARENT = 121;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][29]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 124;
TREE_LEVEL = 1;
PARENT = 121;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 125;
TREE_LEVEL = 0;
CHILDREN = 126, 127, 128;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 126;
TREE_LEVEL = 1;
PARENT = 125;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 127;
TREE_LEVEL = 1;
PARENT = 125;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|thread_ring:thread_ring|thrd_0_o[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 128;
TREE_LEVEL = 1;
PARENT = 125;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 129;
TREE_LEVEL = 0;
CHILDREN = 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][15]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 130;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][14]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 131;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][13]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 132;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][12]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 133;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][11]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 134;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][10]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 135;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][9]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 136;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][8]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 137;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 138;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 139;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 140;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 141;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 142;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 143;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 144;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|pc[0][0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 145;
TREE_LEVEL = 1;
PARENT = 129;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 1264";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 146;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][34]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 147;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][33]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 148;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|op_decode:op_decode|vector_sr:out_regs|stage[0][32]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 149;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 1510";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 150;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "control_ring:control_ring|pc_ring:pc_ring|vector_sr:regs_in_2|stage[0][2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 151;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 152;
TREE_LEVEL = 0;
CHILDREN = 153, 154, 155, 156;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 153;
TREE_LEVEL = 1;
PARENT = 152;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 154;
TREE_LEVEL = 1;
PARENT = 152;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 155;
TREE_LEVEL = 1;
PARENT = 152;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|pointer_ring:pointer_ring|vector_sr:wr_pipe|stage[3][0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 156;
TREE_LEVEL = 1;
PARENT = 152;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 157;
TREE_LEVEL = 0;
CHILDREN = 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][31]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 158;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][30]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 159;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][29]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 160;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][28]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 161;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][27]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 162;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][26]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 163;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][25]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 164;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][24]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 165;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][23]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 166;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][22]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 167;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][21]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 168;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][20]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 169;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][19]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 170;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][18]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 171;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][17]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 172;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][16]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 173;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][15]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 174;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][14]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 175;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][13]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 176;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][12]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 177;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][11]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 178;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][10]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 179;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][9]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 180;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][8]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 181;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 182;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 183;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 184;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 185;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 186;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 187;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 188;
TREE_LEVEL = 1;
PARENT = 157;
}
 
DISPLAY_LINE
{
CHANNEL = "data_ring:data_ring|alu_top:alu_top|alu_mux:alu_mux|vector_sr:d_out_regs|stage[0][0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Hexadecimal;
TREE_INDEX = 189;
TREE_LEVEL = 1;
PARENT = 157;
}
 
TIME_BAR
{
TIME = 16850;
MASTER = TRUE;
}
;
/hive/trunk/v01.09/core.v
0,0 → 1,401
/*
--------------------------------------------------------------------------------
 
Module : core.v
 
--------------------------------------------------------------------------------
 
Function:
- Processor core with 8 stage pipeline, 8 threads, and 4 stacks per thread.
 
Instantiates:
- control_ring.v
- data_ring.v
- reg_set.v
- reg_set_shim.v
- dp_ram_infer.v
 
 
--------------------
- Revision History -
--------------------
 
v01.09 - 2013-06-24
- First public release.
- Shuffled opcode encoding again:
- Unused never jmp_i fits read/write perfectly.
- Unused always jmp_i zero comparison allows for 1 bit immediate field
expansion of jmp_i(gle).
- Removed all skip instructions (redundant w/ jmp_i).
- All the above allows add_i immediate field expansion to 6 bits.
- Opcode encoding is now more straightforward with fewer immediate field sizes.
- Worked on pc_ring.v and pointer_ring.v, now use simple loops rather than
generate, the logic produced better tracks the module paramters.
- Removed "skp" control bit from pc_ring.v, op_decode.v, control_ring.v.
- Removed intr_ack_o from core I/O.
- Renamed "register_set*" => "reg_set*".
- (Considering adding a leading zero count opcode, it doesn't take many LEs.)
- Seeing a write to thread 7 stack 0 memory at startup, don't think it
means anything due to clearing.
- Passes boot code verification for:
- Interrupts.
- Stack ops, depth, error reporting (all threads).
- All branch / conditional ops.
- All logical / arithmetic / shift ops.
 
v01.08 - 2013-06-14
- Added parameter options for stack pointer error protections & brought them
to the top level.
- The unsigned restoring division subroutine works!
 
v01.07 - 2013-06-11
- Changed opcodes to make swapping of (A?B) operands cover all logical needs:
- op_skp_ul => op_skp_l
- op_skp_ge => op_skp_uge
- op_jmp_iul => op_jmp_il
- op_jmp_ige => op_jmp_iuge
- Changed verification boot code tests to reflect above (passes).
 
v01.06 - 2013-06-10
- Fixed latency of test fields in op_decode.v (were only registered 1x, s/b 2x).
- Fixed subtle immediate address offset sign issue in pc_ring.v.
- Fixed subtle immediate data sign issue in stacks_mux.v.
- Minor style edits to align port names @ vector_sr.v instances.
- The log2 subroutine works!
 
v01.05 - 2013-06-07
- Put the skip instructions back (for convenience & clarity).
- Changes to op_decode.v, separate immediate data and address decodes,
misc. edits to improve speed.
- Renamed "op_codes.h" => "op_encode.h".
- Lots of minor edits at the higher levels.
- Added "copyright.txt" to directory.
 
v01.04 - 2013-06-06
- Added op_jmp_i (A?B) instructions.
- Removed all skip instructions (redundant).
 
v01.03 - 2013-06-04
- Changed op_jmp_i to be conditional (A?0).
- Renamed "addr_regs.h" => "register_set_addr.h".
- New boot code does log2.
 
v01.02 (cont) - 2013-05-23
- Old boot code file renamed: "boot_code.h" => "boot_code_00.h".
- New boot code file tests all op_codes and gives final report.
 
v01.02 - 2013-05-22
- Memory writes now work, the fix was to swap pc/op_code ROM side A with
data RW side B of main memory "dp_ram_infer.v". It seems side A is
incorrectly used as the master mode for both ports.
- Renamed "alu_input_mux.v" => "stacks_mux.v".
- Removed enable from "register_set.v" and "register_set_shim.v".
- Monkeyed with "register_set_shim.v" a bit.
- Removed async resets from "dp_ram_infer.v" and "dq_ram_infer.v".
- Passes boot code tests 0, 1, 2, 3, 4.
 
v01.01 - 2013-05-22
- Added clear and interrupt BASE and SPAN parameters.
- Because BASE is a simple MSB concatenation, for it to be effective
make BASE >= 2^(THRD_W+SPAN). BASE LSBs below this point are ignored.
- Individual clear and interrupt address interspacing = 2^SPAN.
- Example:
CLR_BASE ='h0 positions thread 0 clear @ 0.
CLR_SPAN =2 positions thread 1 clear @ 4, thread 2 @ 8, etc.
INTR_BASE='h20 positions thread 0 interrupt @ 'd32.
INTR_SPAN=2 positions thread 1 interrupt @ 'd36, thread 2 @ 'd40, etc.
- Moved most core top port parameters to localparam.
- Modified boot code tests accordingly.
- Passes boot code tests 0, 1, 2.
- Memory writes still don't work!
 
v01.00 - 2013-05-21 - born
- EP3C5E144C8: ~180MHz, ~1785 LEs (34% of logic).
- Fixed immediate value bug (was only registered 1x in op_decode.v, s/b 2x).
- Passes boot code tests 0, 1, 2.
- Memory writes don't work!
 
--------------------------------------------------------------------------------
*/
 
module core
#(
parameter integer DATA_W = 32, // data width
parameter integer THREADS = 8, // threads
parameter [DATA_W/4-1:0] VER_MAJ = 'h01, // core version
parameter [DATA_W/4-1:0] VER_MIN = 'h09 // core version
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
//
input wire [THREADS-1:0] intr_req_i, // event request, active high
//
input wire [DATA_W-1:0] io_i, // gpio
output wire [DATA_W-1:0] io_o
);
 
/*
----------------------
-- internal signals --
----------------------
*/
`include "functions.h" // for clog2()
//
localparam integer ADDR_W = 16; // address width
localparam integer PNTR_W = 5; // stack pointer width
localparam integer MEM_ADDR_W = 13; // main memory width
localparam [ADDR_W-1:0] CLR_BASE = 'h0; // clear address base (concat)
localparam integer CLR_SPAN = 2; // clear address span (2^n)
localparam [ADDR_W-1:0] INTR_BASE = 'h20; // interrupt address base (concat)
localparam integer INTR_SPAN = 2; // interrupt address span (2^n)
localparam integer THRD_W = clog2( THREADS );
localparam integer STACKS = 4; // number of stacks
localparam integer STK_W = clog2( STACKS );
localparam integer IM_DATA_W = 8; // immediate data width
localparam integer IM_ADDR_W = 6; // immediate address width
localparam integer LG_W = 2;
localparam integer OP_CODE_W = DATA_W/2;
localparam integer REG_ADDR_W = 4;
localparam integer IM_RW_W = 4;
localparam integer POP_PROT = 1; // 1=error protection, 0=none
localparam integer PUSH_PROT = 1; // 1=error protection, 0=none
//
wire [THREADS-1:0] clr_req;
wire [THREADS-1:0] intr_en;
wire [OP_CODE_W-1:0] op_code;
wire op_code_er;
wire [STK_W-1:0] a_sel, b_sel;
wire imda, sgn, ext;
wire [LG_W-1:0] lg;
wire add, sub, mul, shl, cpy, dm, rtn, rd, wr;
wire stk_clr;
wire [STACKS-1:0] pop, push, pop_er, push_er;
wire [DATA_W-1:0] a, b;
wire [IM_DATA_W-1:0] im_data;
wire [IM_ADDR_W-1:0] im_addr;
wire nez, ne, ltz, lt;
wire [THRD_W-1:0] thrd_0, thrd_2, thrd_3, thrd_6;
wire [ADDR_W-1:0] pc_1, pc_3, pc_4;
wire [DATA_W/2-1:0] dm_rd_data;
wire [DATA_W/2-1:0] rd_data, wr_data;
wire [ADDR_W-1:0] addr;
wire regs_wr, regs_rd, dm_wr;
 
 
/*
================
== code start ==
================
*/
 
 
// the control ring
control_ring
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.THREADS ( THREADS ),
.THRD_W ( THRD_W ),
.STACKS ( STACKS ),
.STK_W ( STK_W ),
.IM_DATA_W ( IM_DATA_W ),
.IM_ADDR_W ( IM_ADDR_W ),
.OP_CODE_W ( OP_CODE_W ),
.LG_W ( LG_W ),
.CLR_BASE ( CLR_BASE ),
.CLR_SPAN ( CLR_SPAN ),
.INTR_BASE ( INTR_BASE ),
.INTR_SPAN ( INTR_SPAN )
)
control_ring
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.clr_req_i ( clr_req ),
.clr_ack_o ( ), // unused
.intr_en_i ( intr_en ),
.intr_req_i ( intr_req_i ),
.intr_ack_o ( ), // unused
.op_code_i ( op_code ),
.op_code_er_o ( op_code_er ),
.b_lo_i ( b[DATA_W/2-1:0] ),
.im_data_o ( im_data ),
.a_sel_o ( a_sel ),
.b_sel_o ( b_sel ),
.imda_o ( imda ),
.sgn_o ( sgn ),
.ext_o ( ext ),
.lg_o ( lg ),
.add_o ( add ),
.sub_o ( sub ),
.mul_o ( mul ),
.shl_o ( shl ),
.cpy_o ( cpy ),
.dm_o ( dm ),
.rtn_o ( rtn ),
.rd_o ( rd ),
.wr_o ( wr ),
.stk_clr_o ( stk_clr ),
.pop_o ( pop ),
.push_o ( push ),
.nez_i ( nez ),
.ne_i ( ne ),
.ltz_i ( ltz ),
.lt_i ( lt ),
.thrd_0_o ( thrd_0 ),
.thrd_2_o ( thrd_2 ),
.thrd_3_o ( thrd_3 ),
.thrd_6_o ( thrd_6 ),
.im_addr_o ( im_addr ),
.pc_1_o ( pc_1 ),
.pc_3_o ( pc_3 ),
.pc_4_o ( pc_4 )
);
 
 
// the data ring
data_ring
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.THREADS ( THREADS ),
.THRD_W ( THRD_W ),
.STACKS ( STACKS ),
.STK_W ( STK_W ),
.PNTR_W ( PNTR_W ),
.IM_DATA_W ( IM_DATA_W ),
.LG_W ( LG_W ),
.POP_PROT ( POP_PROT ),
.PUSH_PROT ( PUSH_PROT )
)
data_ring
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.a_sel_i ( a_sel ),
.b_sel_i ( b_sel ),
.imda_i ( imda ),
.sgn_i ( sgn ),
.ext_i ( ext ),
.lg_i ( lg ),
.add_i ( add ),
.sub_i ( sub ),
.mul_i ( mul ),
.shl_i ( shl ),
.cpy_i ( cpy ),
.dm_i ( dm ),
.rtn_i ( rtn ),
.stk_clr_i ( stk_clr ),
.pop_i ( pop ),
.push_i ( push ),
.thrd_6_i ( thrd_6 ),
.im_data_i ( im_data ),
.dm_data_i ( rd_data ),
.pc_3_i ( pc_3 ),
.a_o ( a ),
.b_o ( b ),
.nez_o ( nez ),
.ne_o ( ne ),
.ltz_o ( ltz ),
.lt_o ( lt ),
.pop_er_o ( pop_er ),
.push_er_o ( push_er )
);
 
 
// shim for memory and register set access
reg_set_shim
#(
.REGS_IN ( 1 ),
.REGS_OUT ( 1 ),
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.REG_ADDR_W ( REG_ADDR_W ),
.IM_ADDR_W ( IM_RW_W )
)
reg_set_shim
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.a_i ( a ),
.ext_i ( ext ),
.wr_data_o ( wr_data ),
.b_lo_i ( b[DATA_W/2-1:0] ),
.im_addr_i ( im_addr[IM_RW_W-1:0] ),
.pc_1_i ( pc_1 ),
.addr_o ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.regs_wr_o ( regs_wr ),
.regs_rd_o ( regs_rd ),
.dm_wr_o ( dm_wr )
);
 
 
// internal register set
reg_set
#(
.REGS_IN ( 1 ),
.REGS_OUT ( 1 ),
.DATA_W ( DATA_W/2 ),
.ADDR_W ( REG_ADDR_W ),
.THREADS ( THREADS ),
.THRD_W ( THRD_W ),
.STACKS ( STACKS ),
.STK_W ( STK_W ),
.VER_MAJ ( VER_MAJ ),
.VER_MIN ( VER_MIN )
)
reg_set
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr[REG_ADDR_W-1:0] ),
.wr_i ( regs_wr ),
.rd_i ( regs_rd ),
.data_i ( wr_data ),
.data_o ( rd_data ),
.dm_data_i ( dm_rd_data ),
.clr_req_o ( clr_req ),
.intr_en_o ( intr_en ),
.thrd_0_i ( thrd_0 ),
.op_code_er_i ( op_code_er ),
.thrd_2_i ( thrd_2 ),
.pop_er_i ( pop_er ),
.thrd_3_i ( thrd_3 ),
.push_er_i ( push_er ),
.io_lo_i ( io_i[DATA_W/2-1:0] ),
.io_hi_i ( io_i[DATA_W-1:DATA_W/2] ),
.io_lo_o ( io_o[DATA_W/2-1:0] ),
.io_hi_o ( io_o[DATA_W-1:DATA_W/2] )
);
 
 
// instruction and data memory
dp_ram_infer
#(
.REG_A_OUT ( 1 ),
.REG_B_OUT ( 1 ),
.DATA_W ( OP_CODE_W ),
.ADDR_W ( MEM_ADDR_W ),
.RD_MODE ( "WR_DATA" ) // functional don't care
)
main_mem
(
.a_clk_i ( clk_i ),
.a_addr_i ( addr ),
.a_wr_i ( dm_wr ),
.a_data_i ( wr_data ),
.a_data_o ( dm_rd_data ),
.b_clk_i ( clk_i ),
.b_addr_i ( pc_4 ),
.b_wr_i ( 1'b0 ), // unused
.b_data_i ( ), // unused
.b_data_o ( op_code )
);
 
 
endmodule
/hive/trunk/v01.09/reg_set.v
0,0 → 1,501
/*
--------------------------------------------------------------------------------
 
Module: reg_set.v
 
Function:
- Internal register set for a processor.
 
Instantiates:
- (8x) proc_reg.v
- (2x) vector_sr.v
 
Notes:
- Processor bus IN/OUT optionally registered.
 
Decode:
- 0x0 : Core version register - ver_reg
- 0x1 : Thread ID register - thrd_id_reg
- 0x2 : Clear register - clr_reg
- 0x3 : Interrupt enable register - intr_en_reg
- 0x4 : Opcode error register - op_er_reg
- 0x5 : Stack error register - stk_er_reg
- 0x6 - 0x7 : UNUSED
- 0x8 : I/O low register - io_lo_reg
- 0x9 : I/O high register - io_hi_reg
- 0xA - 0xF : UNUSED
 
 
================================================================================
- 0x0 : Core version register - ver_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
7-0 ver_min[7:0] minor version info
15-8 ver_maj[7:0] major version info
 
Notes:
- Read-only.
- Nibbles S/B BCD (0-9; no A-F) to be easily human readable,
and to eliminate confusion between decimal and hex here.
- Major version changes when op_code binary decode changes (incompatibilty).
 
================================================================================
- 0x1 : Thread ID register - thrd_id_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
2-0 thrd_id[2:0] thread ID
15-3 - 0000000000000
 
Notes:
- Read-only.
- Threads can read this to discover their thread ID.
 
================================================================================
- 0x2 : Clear register - clr_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
7-0 clr[7:0] 0=>1 clear thread; 1=>0 no effect;
15-8 - 00000000
 
Notes:
- Read / write.
- Per thread clearing.
- All bits cleared on async reset.
 
================================================================================
- 0x3 : Interrupt enable register - intr_en_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
7-0 intr_en[7:0] 1=thread interrupt enable; 0=disable
15-8 - 00000000
 
Notes:
- Read / write.
- Per thread enabling of interrupts.
- All bits cleared on async reset.
 
================================================================================
- 0x4 : Opcode error register - op_er_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
7-0 op_er[7:0] 1=opcode error; 0=OK
15-8 - 00000000
 
Notes:
- Clear on write one.
- Per thread opcode error reporting.
 
================================================================================
- 0x5 : Stack error register - stk_er_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
7-0 pop_er[7:0] 1=lifo pop when empty; 0=OK
15-8 push_er[7:0] 1=lifo push when full; 0=OK
 
Notes:
- Clear on write one.
- Per thread LIFO stack error reporting.
 
================================================================================
- 0x6 - 0x7 : UNUSED
================================================================================
- 0x8 : I/O low register - io_lo_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
15-0 io_lo[15:0] I/O data
 
Notes:
- Separate read / write.
- Reads of io_lo_reg freeze data in io_hi_reg, so read io_lo_reg first then
read io_hi_reg for contiguous wide (32 bit) data reads.
- Writes function normally.
 
================================================================================
- 0x9 : I/O high register - io_hi_reg
--------------------------------------------------------------------------------
 
bit name description
----- ---- -----------
15-0 io_hi[15:0] I/O data
 
Notes:
- Separate read / write.
- Reads of io_lo_reg freeze data in io_hi_reg, so read io_lo_reg first then
read io_hi_reg for contiguous wide (32 bit) data reads.
- Writes function normally.
 
================================================================================
- 0xA - 0xF : UNUSED
================================================================================
*/
 
module reg_set
#(
parameter integer REGS_IN = 1, // bus in register option
parameter integer REGS_OUT = 1, // bus out register option
parameter integer DATA_W = 16, // data width (bits)
parameter integer ADDR_W = 4, // address width (bits)
parameter integer THREADS = 8, // threads
parameter integer THRD_W = 3, // thread selector width
parameter integer STACKS = 4, // stacks
parameter integer STK_W = 2, // stack selector width
//
parameter [DATA_W/2-1:0] VER_MAJ = 'h1, // core version
parameter [DATA_W/2-1:0] VER_MIN = 'h0
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// bus interface
input wire [ADDR_W-1:0] addr_i, // address
input wire wr_i, // data write enable, active high
input wire rd_i, // data read enable, active high
input wire [DATA_W-1:0] data_i, // write data
output wire [DATA_W-1:0] data_o, // read data
// data memory interface
input wire [DATA_W-1:0] dm_data_i, // dm read data
// clear
output wire [THREADS-1:0] clr_req_o, // clr request, active high
// interrupt
output wire [THREADS-1:0] intr_en_o, // interrupt enable, active high
// errors
input wire [THRD_W-1:0] thrd_0_i, // thread
input wire op_code_er_i, // 1=illegal op code encountered
input wire [THRD_W-1:0] thrd_2_i, // thread
input wire [STACKS-1:0] pop_er_i, // pop when empty, active high
input wire [THRD_W-1:0] thrd_3_i, // thread
input wire [STACKS-1:0] push_er_i, // push when full, active high
// I/O
input wire [DATA_W-1:0] io_lo_i, // gpio linked to io_hi_i
input wire [DATA_W-1:0] io_hi_i,
output wire [DATA_W-1:0] io_lo_o, // unlinked gpio
output wire [DATA_W-1:0] io_hi_o
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
`include "reg_set_addr.h"
//
wire [ADDR_W-1:0] addr;
wire en, reg_en, wr, rd;
wire [DATA_W-1:0] rd_data, wr_data, reg_rd_data;
wire [DATA_W-1:0] ver_data,
thrd_id_data,
clr_data,
intr_en_data,
op_er_data,
stk_er_data,
io_lo_data,
io_hi_data;
//
wire io_lo_reg_rd;
wire [THREADS-1:0] op_code_errors, push_errors, pop_errors;
 
 
 
/*
================
== code start ==
================
*/
 
 
 
// optional bus input regs
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( ADDR_W+2+DATA_W ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { addr_i, wr_i, rd_i, data_i } ),
.data_o ( { addr, wr, rd, wr_data } )
);
 
 
// big ORing of read data
assign rd_data =
ver_data |
thrd_id_data |
clr_data |
intr_en_data |
op_er_data |
stk_er_data |
io_lo_data |
io_hi_data;
 
// decode enable
assign en = ( rd | wr );
 
 
// optional output regs
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( 1+DATA_W ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { en, rd_data } ),
.data_o ( { reg_en, reg_rd_data } )
);
 
 
// output mux
assign data_o = ( reg_en ) ? reg_rd_data : dm_data_i;
 
 
/*
-------------
-- ver_reg --
-------------
*/
 
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( VER_ADDR ),
.OUT_MODE ( "ZERO" ),
.READ_MODE ( "THRU" )
)
ver_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( ver_data ),
.reg_data_i ( { VER_MAJ, VER_MIN } )
);
 
 
/*
-----------------
-- thrd_id_reg --
-----------------
*/
 
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( THRD_ID_ADDR ),
.OUT_MODE ( "ZERO" ),
.READ_MODE ( "THRU" ),
.LIVE_MASK ( { THRD_W{ 1'b1 } } )
)
thrd_id_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( thrd_id_data ),
.reg_data_i ( thrd_3_i )
);
 
 
/*
-------------
-- clr_reg --
-------------
*/
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( CLR_ADDR ),
.OUT_MODE ( "LTCH" ),
.READ_MODE ( "OUT" ),
.LIVE_MASK ( { THREADS{ 1'b1 } } )
)
clr_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( clr_data ),
.reg_data_o ( clr_req_o )
);
 
/*
-----------------
-- intr_en_reg --
-----------------
*/
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( INTR_EN_ADDR ),
.OUT_MODE ( "LTCH" ),
.READ_MODE ( "OUT" ),
.LIVE_MASK ( { THREADS{ 1'b1 } } )
)
intr_en_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( intr_en_data ),
.reg_data_o ( intr_en_o )
);
 
/*
---------------
-- op_er_reg --
---------------
*/
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( OP_ER_ADDR ),
.OUT_MODE ( "ZERO" ),
.READ_MODE ( "COW1" ),
.LIVE_MASK ( { THREADS{ 1'b1 } } )
)
op_er_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( op_er_data ),
.reg_data_i ( op_code_errors )
);
 
// decode errors
assign op_code_errors = op_code_er_i << thrd_0_i;
 
 
/*
----------------
-- stk_er_reg --
----------------
*/
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( STK_ER_ADDR ),
.OUT_MODE ( "ZERO" ),
.READ_MODE ( "COW1" ),
.LIVE_MASK ( { (THREADS+THREADS){ 1'b1 } } )
)
stk_er_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( stk_er_data ),
.reg_data_i ( { push_errors, pop_errors } )
);
 
// decode errors
assign push_errors = |push_er_i << thrd_3_i;
assign pop_errors = |pop_er_i << thrd_2_i;
 
/*
---------------
-- io_lo_reg --
---------------
*/
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( IO_LO_ADDR ),
.OUT_MODE ( "LTCH" ),
.READ_MODE ( "THRU" )
)
io_lo_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( io_lo_data ),
.reg_rd_o ( io_lo_reg_rd ),
.reg_data_i ( io_lo_i ),
.reg_data_o ( io_lo_o )
);
 
 
/*
---------------
-- io_hi_reg --
---------------
*/
proc_reg
#(
.DATA_W ( DATA_W ),
.ADDR_W ( ADDR_W ),
.ADDRESS ( IO_HI_ADDR ),
.OUT_MODE ( "LTCH" ),
.READ_MODE ( "DFFE" )
)
io_hi_reg
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.addr_i ( addr ),
.wr_i ( wr ),
.rd_i ( rd ),
.data_i ( wr_data ),
.data_o ( io_hi_data ),
.reg_en_i ( io_lo_reg_rd ), // enable on lo read
.reg_data_i ( io_hi_i ),
.reg_data_o ( io_hi_o )
);
 
 
endmodule
/hive/trunk/v01.09/boot_code/boot_code_v_stacks.h
0,0 → 1,314
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
// Thread 0 : test stack 1 for depth and error reporting
// Thread 1 : test stack 1 clear instruction
// All other threads : loop forever
 
///////////////
// clr space //
///////////////
 
// thread 0
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h100 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
//
// thread 1
i='h4; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h200 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// and the rest (are here on Gilligan's Isle)
i='h8; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
////////////////
// intr space //
////////////////
 
///////////////////////
// code & data space //
///////////////////////
 
 
// test correct stack depth and error reporting, result in s0
// Correct functioning is s0 = 'd6 ('h6).
//
// s0 : final test result
// s1 : test stack
// s2 : sub addr
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h100; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// fill s1
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h940 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// check for push error
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_shl_iu, -6'd8, `_, `P, `s0, `s0 }; // s0>>8=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// pop&push s/b OK
i=i+1; ram[i] = { op_cpy, `_, `P, `s2, `s1 }; // s2=>s1
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s/b one push over the line
i=i+1; ram[i] = { op_cpy, `_, `_, `s2, `s1 }; // s2=>s1
// check for a push error
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_shl_iu, -6'd8, `_, `P, `s0, `s0 }; // s0>>8=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s0 }; // (s0<>0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// empty s1
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h950 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s/b one pop under the line
i=i+1; ram[i] = { op_pop, `_, `P, `s0, `s1 }; // pop s1
// check for a pop error
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_shl_i, 6'd24, `_, `P, `s0, `s0 }; // s0<<24=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s0 }; // (s0<>0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `P, `s3, `s0 }; // s3=>s0, pop both
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
// test stack clearing, result in s0
// Correct functioning is s0 = 'd2 ('h2).
//
// s0 : final test result
// s1 : test stack
// s2 : sub addr
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h200; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// fill s1
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h940 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// save s3
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'ha00 ; // addr
i=i+1; ram[i] = { `op_wr_i, 4'd0, `P, `_, `s2, `s3 }; // write s3=>(s2+offset), pop s2
// clear all stacks
i=i+1; ram[i] = { op_cls, `_, `_, `s0, `s0 }; // clear stacks
// restore s3
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'ha00 ; // addr
i=i+1; ram[i] = { `op_rd_i, 4'd0, `P, `_, `s2, `s3 }; // read (s2+offset) => s3, pop s2
// fill s1 again
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h940 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `P, `s3, `s0 }; // s3=>s0, pop both
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
/////////////////
// subroutines //
/////////////////
 
 
// sub : read & clear opcode errors for this thread => s0, return to (s3)
i='h900; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { `op_rd_i, OP_ER_ADDR, `_, `_, `s2, `s3 }; // read (s2+offset)=>s3
i=i+1; ram[i] = { op_and, `P, `P, `s3, `s0 }; // s0&s3=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, OP_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
// sub : read & clear stack errors for this thread => s0, return to (s3)
i='h910; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { op_cpy, `_, `_, `s0, `s3 }; // s0=>s3
i=i+1; ram[i] = { `op_shl_i, 6'd8, `_, `P, `s0, `s3 }; // s3<<8=>s3, pop s3
i=i+1; ram[i] = { op_or, `P, `P, `s3, `s0 }; // s0|s3=>s0, pop both
i=i+1; ram[i] = { `op_rd_i, STK_ER_ADDR, `_, `_, `s2, `s3 }; // read (s2+offset)=>s3
i=i+1; ram[i] = { op_and, `P, `P, `s3, `s0 }; // s0&s3=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, STK_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
// sub : read 32 bit GPIO => s0, return to (s3)
i='h920; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // read (s1+offset) => s0
i=i+1; ram[i] = { `op_rd_ix, IO_HI_ADDR, `P, `P, `s1, `s0 }; // read (s1+offset) => s0, pop s1 & s0
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
// sub : write s0 => 32 bit GPIO, return to (s3)
i='h930; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_wr_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // write s0 => (s1+offset)
i=i+1; ram[i] = { `op_wr_ix, IO_HI_ADDR, `P, `_, `s1, `s0 }; // write s0 => (s1+offset), pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
// sub : loop until empty s1 is full, return to (s3)
// loop setup:
i='h940; ram[i] = { `op_byt_i, 8'd32, `_, `_, `s0, `s2 }; // 32=>s2
// loop
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s2 }; // s2--=>s2, pop s2
i=i+1; ram[i] = { op_cpy, `_, `_, `s2, `s1 }; // s2=>s1
i=i+1; ram[i] = { `op_jmp_igz, -5'd3, `_, `_, `s0, `s2 }; // (s2>0) ? do again
i=i+1; ram[i] = { op_gto, `P, `P, `s3, `s2 }; // return, pop s3 & s2
 
// sub : loop until full s1 is empty, return to (s3)
// loop setup:
i='h950; ram[i] = { `op_byt_i, 8'd32, `_, `_, `s0, `s2 }; // 32=>s2
// loop
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s2 }; // s2+1=>s2, pop s2
i=i+1; ram[i] = { op_pop, `_, `P, `s0, `s1 }; // pop s1
i=i+1; ram[i] = { `op_jmp_igz, -5'd3, `_, `_, `s0, `s2 }; // (s2>0) ? do again
i=i+1; ram[i] = { op_gto, `P, `P, `s3, `s2 }; // return, pop s3 & s2
 
 
end
/hive/trunk/v01.09/boot_code/boot_code_log2.h
0,0 → 1,223
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
/*
------------
-- TEST 0 --
------------
*/
 
// Log base 2
// Thread 0 : Get input 32 bit GPIO, calculate log2, output 32 bit GPIO.
// Other threads : do nothing, loop forever
 
///////////////
// clr space //
///////////////
 
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h040 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // goto, pop s1 (addr)
//
i='h4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
////////////////
// intr space //
////////////////
 
///////////////////////
// code & data space //
///////////////////////
 
// read 32 bit GPIO data to s0
i='h40; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h050 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
 
// write s0 data to 32 bit GPIO
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h058 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
 
// do log2 of s0
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h060 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
 
// write s0 data to 32 bit GPIO
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h058 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
 
// loop forever
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
 
 
// sub : read 32 bit GPIO => s0, return to (s3)
i='h50; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // read (s1+offset) => s0
i=i+1; ram[i] = { `op_rd_ix, IO_HI_ADDR, `P, `P, `s1, `s0 }; // read (s1+offset) => s0, pop s1 & s0
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
// sub : write s0 => 32 bit GPIO, return to (s3)
i='h58; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_wr_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // write s0 => (s1+offset)
i=i+1; ram[i] = { `op_wr_ix, IO_HI_ADDR, `P, `_, `s1, `s0 }; // write s0 => (s1+offset), pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
// sub : log2(s0)=>s0, return to (s3)
//
// s0 : input, normalize, square, output
// s1 : characteristic (5 MSBs of output) and mantissa (27 LSBs of output)
// s2 : loop index
// s3 : subroutine return address
//
// input 0 is an error, return
i='h60; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s0 }; // (s0!==0) ? skip return
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
// normalize binary search
i=i+1; ram[i] = { `op_byt_i, 8'd31, `_, `_, `s0, `s1 }; // 31=>s1, characteristic
//
i=i+1; ram[i] = { `op_shl_iu, -6'd16, `_, `_, `s0, `s0 }; // s0>>16=>s0
i=i+1; ram[i] = { `op_jmp_iglz, 5'd2, `_, `P, `s0, `s0 }; // (s0<>0) ? jump, pop s0
i=i+1; ram[i] = { `op_shl_i, 6'd16, `_, `P, `s0, `s0 }; // s0<<16=>s0, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd16, `_, `P, `s0, `s1 }; // s1-16=>s1, pop s1
//
i=i+1; ram[i] = { `op_shl_iu, -6'd24, `_, `_, `s0, `s0 }; // s0>>24=>s0
i=i+1; ram[i] = { `op_jmp_iglz, 5'd2, `_, `P, `s0, `s0 }; // (s0<>0) ? jump, pop s0
i=i+1; ram[i] = { `op_shl_i, 6'd8, `_, `P, `s0, `s0 }; // s0<<8=>s0, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd8, `_, `P, `s0, `s1 }; // s1-8=>s1, pop s1
//
i=i+1; ram[i] = { `op_shl_iu, -6'd28, `_, `_, `s0, `s0 }; // s0>>28=>s0
i=i+1; ram[i] = { `op_jmp_iglz, 5'd2, `_, `P, `s0, `s0 }; // (s0<>0) ? jump, pop s0
i=i+1; ram[i] = { `op_shl_i, 6'd4, `_, `P, `s0, `s0 }; // s0<<4=>s0, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd4, `_, `P, `s0, `s1 }; // s1-4=>s1, pop s1
//
i=i+1; ram[i] = { `op_shl_iu, -6'd30, `_, `_, `s0, `s0 }; // s0>>30=>s0
i=i+1; ram[i] = { `op_jmp_iglz, 5'd2, `_, `P, `s0, `s0 }; // (s0<>0) ? jump, pop s0
i=i+1; ram[i] = { `op_shl_i, 6'd2, `_, `P, `s0, `s0 }; // s0<<2=>s0, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s1 }; // s1-2=>s1, pop s1
//
i=i+1; ram[i] = { `op_jmp_ilz, 5'd2, `_, `_, `s0, `s0 }; // (s0<0) ? jump
i=i+1; ram[i] = { `op_shl_i, 6'd1, `_, `P, `s0, `s0 }; // s0<<1=>s0, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s1 }; // s1-1=>s1, pop s1
// loop setup
i=i+1; ram[i] = { `op_byt_i, 8'd27, `_, `_, `s0, `s2 }; // 27=>s2
// square loop
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s2 }; // s2--=>s2, pop s2
i=i+1; ram[i] = { `op_shl_i, 6'd1, `_, `P, `s0, `s1 }; // s1<<1=>s1, pop s1
i=i+1; ram[i] = { op_mul_ux, `_, `P, `s0, `s0 }; // s0*s0=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_igez, 5'd2, `_, `_, `s0, `s0 }; // (s0[31]==0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s1 }; // s1++=>s1, pop s1
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s0, `s0 }; // skip
i=i+1; ram[i] = { `op_shl_i, 6'd1, `_, `P, `s0, `s0 }; // s0<<1=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_igz, -5'd8, `_, `_, `s3, `s2 }; // (s2>0) ? do again
// s1=>s0; cleanup, return
i=i+1; ram[i] = { op_cpy, `P, `P, `s1, `s0 }; // s1=>s0, pop both
i=i+1; ram[i] = { op_gto, `P, `P, `s3, `s2 }; // return, pop s3 & s2
// end sub
 
end
/hive/trunk/v01.09/boot_code/boot_code_divide.h
0,0 → 1,216
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
/*
------------
-- TEST 0 --
------------
*/
 
// Divide - restoring, both inputs positive.
// Thread 0 : Get input 32 bit GPIO 2x, divide, output 32 bit GPIO 2x.
// Other threads : do nothing, loop forever
 
///////////////
// clr space //
///////////////
 
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h040 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // goto, pop s1 (addr)
//
i='h4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
////////////////
// intr space //
////////////////
 
///////////////////////
// code & data space //
///////////////////////
 
// read 32 bit GPIO data to s0
i='h40; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h060 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// write s0 data to 32 bit GPIO
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h068 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// read 32 bit GPIO data to s0
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h060 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// write s0 data to 32 bit GPIO
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h068 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// do s0/s1 divide
i=i+1; ram[i] = { op_cpy, `P, `_, `s0, `s1 }; // s0=>s1, pop s0
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h070 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// write s0 data to 32 bit GPIO
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h068 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// write s1 data to 32 bit GPIO
i=i+1; ram[i] = { op_cpy, `P, `P, `s1, `s0 }; // s1=>s0, pop both
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h068 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
 
// loop forever
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
 
 
// sub : read 32 bit GPIO => s0, return to (s3)
i='h60; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // read (s1+offset) => s0
i=i+1; ram[i] = { `op_rd_ix, IO_HI_ADDR, `P, `P, `s1, `s0 }; // read (s1+offset) => s0, pop s1 & s0
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
// sub : write s0 => 32 bit GPIO, return to (s3)
i='h68; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_wr_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // write s0 => (s1+offset)
i=i+1; ram[i] = { `op_wr_ix, IO_HI_ADDR, `P, `_, `s1, `s0 }; // write s0 => (s1+offset), pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
// sub : divide s0/s1 => result in s0, remainder in s1, return to (s3)
//
// s0 : A input, A/B output
// s1 : B input, A%B output
// s2 : loop index
// s3 : subroutine return address, A%B
//
// 0 input s1 is an error, return
i='h70; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s1 }; // (s1!==0) ? skip return
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
// loop setup
i=i+1; ram[i] = { `op_byt_i, 8'd32, `_, `_, `s0, `s2 }; // 32=>s2
i=i+1; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// divide loop
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s2 }; // s2--=>s2, pop s2
i=i+1; ram[i] = { `op_shl_i, 6'd1, `_, `P, `s0, `s3 }; // s3<<1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igez, 5'd1, `_, `_, `s0, `s0 }; // (s0[31]==0) ? skip
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3++=>s3, pop s3
i=i+1; ram[i] = { `op_shl_i, 6'd1, `_, `P, `s0, `s0 }; // s0<<1=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_iug, 5'd2, `_, `_, `s3, `s1 }; // (s1u>s3) ? jump
i=i+1; ram[i] = { op_sub, `_, `P, `s1, `s3 }; // s3-s1=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s0 }; // s0++=>s0, pop s0
i=i+1; ram[i] = { `op_jmp_igz, -5'd9, `_, `_, `s0, `s2 }; // (s2>0) ? do again
// s3=>s1; cleanup, return
i=i+1; ram[i] = { op_cpy, `P, `P, `s3, `s1 }; // s3=>s1, pop both
i=i+1; ram[i] = { op_gto, `P, `P, `s3, `s2 }; // return to (s3), pop s3 & s2
// end sub
 
end
/hive/trunk/v01.09/boot_code/boot_code_v_interrupts.h
0,0 → 1,186
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
// Thread 0 : enable interrupts
// All threads : output thread ID @ interrupt
 
///////////////
// clr space //
///////////////
 
// thread 0 : enable interrupts & loop forever
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h100 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
// all others : loop forever
i='h4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
////////////////
// intr space //
////////////////
 
// all threads : read and output thread ID
i='h20; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
//
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s3 }; // lit => s3
i=i+1; ram[i] = 16'h110 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s3, `s3 }; // gsb, pop s3 (addr)
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
///////////////////////
// code & data space //
///////////////////////
 
 
 
/////////////////
// subroutines //
/////////////////
 
 
// sub : enable all ints, return to (s3)
i='h100; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_byt_i, -8'd1, `_, `_, `s0, `s0 }; // -1=>s0
i=i+1; ram[i] = { `op_wr_i, INTR_EN_ADDR, `P, `P, `s1, `s0 }; // write s0 => (s1+offset), pop both
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
// sub : read thread ID, write to GPIO, pop, return to (s3)
i='h110; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s1, `s0 }; // read (s1+offset) => s0, pop s1
i=i+1; ram[i] = { `op_wr_i, IO_LO_ADDR, `P, `P, `s1, `s0 }; // write s0 => (s1+offset), pop both
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
end
/hive/trunk/v01.09/boot_code/boot_code_v_logic_arith_shift.h
0,0 → 1,512
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
// Thread 0 : test ALU logical functions
// Thread 1 : test ALU arithmetic functions
// Thread 2 : test ALU shift functions
// All other threads : loop forever
 
///////////////
// clr space //
///////////////
 
// thread 0
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h100 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// thread 1
i='h4; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h200 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// thread 2
i='h8; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h300 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s2, `s0 }; // goto, pop s2 (addr)
// and the rest (are here on Gilligan's Isle)
i='hc; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
////////////////
// intr space //
////////////////
 
///////////////////////
// code & data space //
///////////////////////
 
 
// test ALU logical functions, result in s0
// Correct functioning is s0 = 'd12 ('hc).
//
// s0 : final test result
// s1 : test value
// s2 : test value
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h100; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// load s1 & s2 values
i=i+1; ram[i] = { `op_byt_i, -8'h1, `_, `_, `s1, `s1 }; // -1 => s1
i=i+1; ram[i] = { `op_byt_i, 8'h1, `_, `_, `s2, `s2 }; // 1 => s2
// AND_B ( &(-1)=-1; &(1)= 0 )
i=i+1; ram[i] = { op_and_b, `_, `_, `s1, `s0 }; // &s1=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_and_b, `_, `_, `s2, `s0 }; // &s2=>s0
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// OR_B ( |(-1)=-1; |(1)=-1 )
i=i+1; ram[i] = { op_or_b, `_, `_, `s1, `s0 }; // |s1=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_or_b, `_, `_, `s2, `s0 }; // |s2=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// XOR_B ( ^(-1)= 0; ^(1)=-1 )
i=i+1; ram[i] = { op_xor_b, `_, `_, `s1, `s0 }; // ^s1=>s0
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_xor_b, `_, `_, `s2, `s0 }; // ^s2=>s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `P, `s1, `s0 }; // (s0==-1) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// clean up
i=i+1; ram[i] = { op_pop, `P, `P, `s2, `s1 }; // pop s2 & s1
// load s1 & s2 values
i=i+1; ram[i] = { op_lit, `_, `_, `s1, `s1 }; // lit => s1
i=i+1; ram[i] = 16'ha53c ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s1, `s1 }; // lit => s1, pop combine
i=i+1; ram[i] = 16'h36c9 ; // hi data
//
i=i+1; ram[i] = { op_lit, `_, `_, `s2, `s2 }; // lit => s2
i=i+1; ram[i] = 16'hc396 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s2, `s2 }; // lit => s2, pop combine
i=i+1; ram[i] = 16'h5ca3 ; // hi data
// AND (s/b 'h1481,8114)
i=i+1; ram[i] = { op_and, `_, `_, `s2, `s1 }; // s1&s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h8114 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h1481 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// OR (s/b 'h7eeb,e7be)
i=i+1; ram[i] = { op_or, `_, `_, `s2, `s1 }; // s1|s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'he7be ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h7eeb ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// XOR (s/b 'h6a6a,66aa)
i=i+1; ram[i] = { op_xor, `_, `_, `s2, `s1 }; // s1^s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h66aa ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h6a6a ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// NOT (s/b 'hc936,5ac3)
i=i+1; ram[i] = { op_not, `_, `_, `s1, `s1 }; // ~s1=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h5ac3 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hc936 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `_, `s3, `s0 }; // s3=>s0, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
 
// test ALU arithmetic functions, result in s0
// Correct functioning is s0 = 'd13 ('hd).
//
// s0 : final test result
// s1 : test value
// s2 : test value
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h200; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// load s1 & s2 values
i=i+1; ram[i] = { op_lit, `_, `_, `s1, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h36c9 ; // hi data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s1, `s1 }; // lit => s1, pop combine
i=i+1; ram[i] = 16'ha53c ; // lo data
//
i=i+1; ram[i] = { op_lit, `_, `_, `s2, `s2 }; // lit => s2
i=i+1; ram[i] = 16'hc396 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s2, `s2 }; // lit => s2, pop combine
i=i+1; ram[i] = 16'h5ca3 ; // hi data
// ADD_I -32 (s/b 'ha53c,36a9)
i=i+1; ram[i] = { `op_add_i, -6'd32, `_, `_, `s1, `s1 }; // s1-32=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h36a9 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'ha53c ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD_I +31 (s/b 'ha53c,36e8)
i=i+1; ram[i] = { `op_add_i, 6'd31, `_, `_, `s1, `s1 }; // s1+31=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h36e8 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'ha53c ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD (s/b 'h01df,fa5f)
i=i+1; ram[i] = { op_add, `_, `_, `s2, `s1 }; // s1+s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hfa5f ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h01df ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD_X (s/b 0)
i=i+1; ram[i] = { op_add_x, `_, `_, `s2, `s1 }; // s1+s2=>s1
i=i+1; ram[i] = { `op_byt_i, 8'h0, `_, `_, `s0, `s0 }; // 0 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// ADD_UX (s/b 1)
i=i+1; ram[i] = { op_add_ux, `_, `_, `s2, `s1 }; // s1+s2=>s1
i=i+1; ram[i] = { `op_byt_i, 8'h1, `_, `_, `s0, `s0 }; // 1 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SUB (s/b 'h4898,7333)
i=i+1; ram[i] = { op_sub, `_, `_, `s2, `s1 }; // s1-s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h7333 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h4898 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SUB_X (s/b -1)
i=i+1; ram[i] = { op_sub_x, `_, `_, `s2, `s1 }; // s1-s2=>s1
i=i+1; ram[i] = { `op_byt_i, -8'h1, `_, `_, `s0, `s0 }; // -1 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SUB_UX (s/b 0)
i=i+1; ram[i] = { op_sub_ux, `_, `_, `s2, `s1 }; // s1-s2=>s1
i=i+1; ram[i] = { `op_byt_i, 8'h0, `_, `_, `s0, `s0 }; // 0 => s0
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// MUL (s/b 'hccfe,34c6)
i=i+1; ram[i] = { op_mul, `_, `_, `s2, `s1 }; // s1*s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h34c6 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hccfe ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// MUL_X (s/b 'hdf27,93ae)
i=i+1; ram[i] = { op_mul_x, `_, `_, `s2, `s1 }; // s1*s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h93ae ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hdf27 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// MUL_UX (s/b 'h3bcb,5744)
i=i+1; ram[i] = { op_mul_ux, `_, `_, `s2, `s1 }; // s1*s2=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h5744 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h3bcb ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `_, `s3, `s0 }; // s3=>s0, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
// test ALU shift functions, result in s0
// Correct functioning is s0 = 'd10 ('ha).
//
// s0 : final test result
// s1 : test value
// s2 : test value
// s3 : running test result, subroutine return address
//
// setup running test result:
i='h300; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 0=>s3
// load s1 value 0xa53c36c9
i=i+1; ram[i] = { op_lit, `_, `_, `s1, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h36c9 ; // hi data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s1, `s1 }; // lit => s1, pop combine
i=i+1; ram[i] = 16'ha53c ; // lo data
// SHL_I -28 (s/b 'hffff,fffa)
i=i+1; ram[i] = { `op_shl_i, -6'd28, `_, `_, `s1, `s1 }; // s1<<-28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hfffa ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hffff ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_I +28 (s/b 'h9000,0000)
i=i+1; ram[i] = { `op_shl_i, 6'd28, `_, `_, `s1, `s1 }; // s1<<28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h0000 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h9000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_IU -28 (s/b 'h0000,000a)
i=i+1; ram[i] = { `op_shl_iu, -6'd28, `_, `_, `s1, `s1 }; // s1<<-28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h000a ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h0000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_IU +28 (s/b 'h1000,0000)
i=i+1; ram[i] = { `op_shl_iu, 6'd28, `_, `_, `s1, `s1 }; // 1<<28=>s1
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h0000 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h1000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL -4 (s/b 'hfa53,c36c)
i=i+1; ram[i] = { `op_byt_i, -8'd4, `_, `_, `s2, `s2 }; // -4=>s2
i=i+1; ram[i] = { op_shl, `P, `_, `s2, `s1 }; // s1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hc36c ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'hfa53 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL +4 (s/b 'h53c3,6c90)
i=i+1; ram[i] = { `op_byt_i, 8'd4, `_, `_, `s2, `s2 }; // 4=>s2
i=i+1; ram[i] = { op_shl, `P, `_, `s2, `s1 }; // s1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h6c90 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h53c3 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL_U -4 (s/b 'h0a53,c36c)
i=i+1; ram[i] = { `op_byt_i, -8'd4, `_, `_, `s2, `s2 }; // -4=>s2
i=i+1; ram[i] = { op_shl_u, `P, `_, `s2, `s1 }; // s1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'hc36c ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h0a53 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// SHL +4 (s/b 'h0000,0010)
i=i+1; ram[i] = { `op_byt_i, 8'd4, `_, `_, `s2, `s2 }; // 4=>s2
i=i+1; ram[i] = { op_shl_u, `P, `_, `s2, `s1 }; // 1<<s2=>s1, pop s2
i=i+1; ram[i] = { op_lit, `_, `_, `s0, `s0 }; // lit => s0
i=i+1; ram[i] = 16'h0010 ; // lo data
i=i+1; ram[i] = { op_lit_x, `_, `P, `s0, `s0 }; // lit => s0, pop combine
i=i+1; ram[i] = 16'h0000 ; // hi data
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `P, `P, `s1, `s0 }; // (s0==s1) ? skip, pop both
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// check for no stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `P, `s0, `s0 }; // (s0==0) ? skip, pop s0
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// s3=>s0, loop forever
i=i+1; ram[i] = { op_cpy, `P, `_, `s3, `s0 }; // s3=>s0, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
 
 
/////////////////
// subroutines //
/////////////////
 
 
// sub : read & clear opcode errors for this thread => s0, return to (s3)
i='h900; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { `op_rd_i, OP_ER_ADDR, `_, `_, `s2, `s3 }; // read (s2+offset)=>s3
i=i+1; ram[i] = { op_and, `P, `P, `s3, `s0 }; // s0&s3=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, OP_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
// sub : read & clear stack errors for this thread => s0, return to (s3)
i='h910; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { op_cpy, `_, `_, `s0, `s3 }; // s0=>s3
i=i+1; ram[i] = { `op_shl_i, 6'd8, `_, `P, `s0, `s3 }; // s3<<8=>s3, pop s3
i=i+1; ram[i] = { op_or, `P, `P, `s3, `s0 }; // s0|s3=>s0, pop both
i=i+1; ram[i] = { `op_rd_i, STK_ER_ADDR, `_, `_, `s2, `s3 }; // read (s2+offset)=>s3
i=i+1; ram[i] = { op_and, `P, `P, `s3, `s0 }; // s0&s3=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, STK_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
 
end
/hive/trunk/v01.09/boot_code/boot_code_v_branches.h
0,0 → 1,865
/*
--------------------------------------------------------------------------------
 
Module : boot_code.h
 
--------------------------------------------------------------------------------
 
Function:
- Boot code for a processor core.
 
Instantiates:
- Nothing.
 
Notes:
- For testing (@ core.v):
CLR_BASE = 'h0;
CLR_SPAN = 2; // gives 4 instructions
INTR_BASE = 'h20; // 'd32
INTR_SPAN = 2; // gives 4 instructions
 
 
--------------------------------------------------------------------------------
*/
 
/*
-------------------------
-- external parameters --
-------------------------
*/
`include "op_encode.h"
`include "reg_set_addr.h"
 
/*
------------------------------------------------------------
-- defines that make programming code more human readable --
------------------------------------------------------------
*/
`define s0 2'd0
`define s1 2'd1
`define s2 2'd2
`define s3 2'd3
`define _ 1'b0
`define P 1'b1
//
`define op_rd_i op_rd_i[9:4]
`define op_rd_ix op_rd_ix[9:4]
`define op_wr_i op_wr_i[9:4]
`define op_wr_ix op_wr_ix[9:4]
//
`define op_jmp_ie op_jmp_ie[9:5]
`define op_jmp_iez op_jmp_iez[9:5]
`define op_jmp_il op_jmp_il[9:5]
`define op_jmp_ilz op_jmp_ilz[9:5]
`define op_jmp_ile op_jmp_ile[9:5]
`define op_jmp_ilez op_jmp_ilez[9:5]
`define op_jmp_iug op_jmp_iug[9:5]
`define op_jmp_igz op_jmp_igz[9:5]
`define op_jmp_iuge op_jmp_iuge[9:5]
`define op_jmp_igez op_jmp_igez[9:5]
`define op_jmp_igl op_jmp_igl[9:5]
`define op_jmp_iglz op_jmp_iglz[9:5]
//
`define op_jmp_i op_jmp_i[9:6]
//
`define op_byt_i op_byt_i[9:8]
//
`define op_shl_i op_shl_i[9:6]
`define op_shl_iu op_shl_iu[9:6]
//
`define op_add_i op_add_i[9:6]
/*
----------------------------------------
-- initialize: fill with default data --
----------------------------------------
*/
integer i;
 
initial begin
 
/* // fill with nop (some compilers need this)
for ( i = 0; i < CAPACITY; i = i+1 ) begin
ram[i] = { op_nop, `_, `_, `s0, `s0 };
end
*/
 
/*
---------------
-- boot code --
---------------
*/
 
 
// Thread 0 : test all jmp_i instructions
// Thread 1 : test all jmp instructions
// Thread 2 : test all gto instructions
// Other threads : do nothing, loop forever
 
///////////////
// clr space //
///////////////
 
i='h0; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h040 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // goto, pop s1 (addr)
//
i='h4; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h044 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // goto, pop s1 (addr)
//
i='h8; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = 16'h048 ; // addr
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // goto, pop s1 (addr)
//
i='hc; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
i=i+4; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
////////////////
// intr space //
////////////////
 
///////////////////////
// code & data space //
///////////////////////
 
// thread 0 : do jmp_i tests
i='h40; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h300 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// loop forever
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
// thread 1 : do jmp tests
i='h44; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h500 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// loop forever
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
// thread 2 : do gto tests
i='h48; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h700 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
// loop forever
i=i+1; ram[i] = { `op_jmp_i, -6'h1, `_, `_, `s0, `s0 }; // loop forever
 
 
/////////////////
// subroutines //
/////////////////
 
 
 
// sub : test all jmp_i instructions, result in s0, return to (s3)
// Correct functioning is s0 = 'd99 ('h63).
//
// s0 : 0 (ez), final test result
// s1 : +1 (gz)
// s2 : -2 (lz)
// s3 : running test result, subroutine return address
//
// setup test values and running test result:
i='h300; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s0 }; // 0=>s0
i=i+1; ram[i] = { `op_byt_i, 8'd1, `_, `_, `s0, `s1 }; // 1=>s1
i=i+1; ram[i] = { `op_byt_i, -8'd2, `_, `_, `s0, `s2 }; // -2=>s2
i=i+1; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 1=>s1
//
// distance testing
//
i=i+1; ram[i] = { `op_jmp_i, 6'd31, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (won't happen)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd26, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd22, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd18, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd14, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd10, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd6, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd2, `_, `_, `s0, `s1 }; // jump forward
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd16, `_, `_, `s0, `s1 }; // jump forward (and out)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd4, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd8, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd12, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd16, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd20, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd24, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd28, `_, `_, `s0, `s1 }; // jump back
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, -6'd32, `_, `_, `s0, `s1 }; // jump back
//
// unconditional testing
//
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s0, `s1 }; // jump (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s0, `s2 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s0, `s0 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s1, `s1 }; // jump (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s1, `s2 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s1, `s0 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s2, `s1 }; // jump (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s2, `s2 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_i, 6'd1, `_, `_, `s2, `s0 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
// (A?0) testing
// ez
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s1 }; // (s1==0) ? jump (NNY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s2 }; // (s2==0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// lz
i=i+1; ram[i] = { `op_jmp_ilz, 5'd1, `_, `_, `s0, `s1 }; // (s1<0) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ilz, 5'd1, `_, `_, `s0, `s2 }; // (s2<0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ilz, 5'd1, `_, `_, `s0, `s0 }; // (s0<0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// lez
i=i+1; ram[i] = { `op_jmp_ilez, 5'd1, `_, `_, `s0, `s1 }; // (s1<=0) ? jump (NYY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ilez, 5'd1, `_, `_, `s0, `s2 }; // (s2<=0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ilez, 5'd1, `_, `_, `s0, `s0 }; // (s0<=0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// gz
i=i+1; ram[i] = { `op_jmp_igz, 5'd1, `_, `_, `s0, `s1 }; // (s1>0) ? jump (YNN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igz, 5'd1, `_, `_, `s0, `s2 }; // (s2>0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igz, 5'd1, `_, `_, `s0, `s0 }; // (s0>0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// gez
i=i+1; ram[i] = { `op_jmp_igez, 5'd1, `_, `_, `s0, `s1 }; // (s1>=0) ? jump (YNY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igez, 5'd1, `_, `_, `s0, `s2 }; // (s2>=0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igez, 5'd1, `_, `_, `s0, `s0 }; // (s0>=0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// glz
i=i+1; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s1 }; // (s1<>0) ? jump (YYN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s2 }; // (s2<>0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iglz, 5'd1, `_, `_, `s0, `s0 }; // (s0<>0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
// (A?B) testing
//
// e
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s0, `s1 }; // (s1==s0) ? jump (NNY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s0, `s2 }; // (s2==s0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s0, `s0 }; // (s0==s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s1, `s1 }; // (s1==s1) ? jump (YNN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s1, `s2 }; // (s2==s1) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s1, `s0 }; // (s0==s1) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s2, `s1 }; // (s1==s2) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s2, `s2 }; // (s2==s2) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ie, 5'd1, `_, `_, `s2, `s0 }; // (s0==s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// l
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s0, `s1 }; // (s1<s0) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s0, `s2 }; // (s2<s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s0, `s0 }; // (s0<s0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s1, `s1 }; // (s1<s1) ? jump (NYY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s1, `s2 }; // (s2<s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s1, `s0 }; // (s0<s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s2, `s1 }; // (s1<s2) ? jump (NNN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s2, `s2 }; // (s2<s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_il, 5'd1, `_, `_, `s2, `s0 }; // (s0<s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// le
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s0, `s1 }; // (s1<=s0) ? jump (NYY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s0, `s2 }; // (s2<=s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s0, `s0 }; // (s0<=s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s1, `s1 }; // (s1<=s1) ? jump (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s1, `s2 }; // (s2<=s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s1, `s0 }; // (s0<=s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s2, `s1 }; // (s1<=s2) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s2, `s2 }; // (s2<=s2) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_ile, 5'd1, `_, `_, `s2, `s0 }; // (s0<=s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// ug
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s0, `s1 }; // (s1>s0) ? jump (YYN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s0, `s2 }; // (s2>s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s0, `s0 }; // (s0>s0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s1, `s1 }; // (s1>s1) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s1, `s2 }; // (s2>s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s1, `s0 }; // (s0>s1) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s2, `s1 }; // (s1>s2) ? jump (NNN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s2, `s2 }; // (s2>s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iug, 5'd1, `_, `_, `s2, `s0 }; // (s0>s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// uge
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s0, `s1 }; // (s1>=s0) ? jump (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s0, `s2 }; // (s2>=s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s0, `s0 }; // (s0>=s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s1, `s1 }; // (s1>=s1) ? jump (YYN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s1, `s2 }; // (s2>=s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s1, `s0 }; // (s0>=s1) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s2, `s1 }; // (s1>=s2) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s2, `s2 }; // (s2>=s2) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_iuge, 5'd1, `_, `_, `s2, `s0 }; // (s0>=s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// gl
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s0, `s1 }; // (s1<>s0) ? jump (YYN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s0, `s2 }; // (s2<>s0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s0, `s0 }; // (s0<>s0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s1, `s1 }; // (s1<>s1) ? jump (NYY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s1, `s2 }; // (s2<>s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s1, `s0 }; // (s0<>s1) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s2, `s1 }; // (s1<>s2) ? jump (YNY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s2, `s2 }; // (s2<>s2) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { `op_jmp_igl, 5'd1, `_, `_, `s2, `s0 }; // (s0<>s2) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// cleanup
i=i+1; ram[i] = { op_pop, `P, `P, `s2, `s1 }; // pop s1 & s2
// check for opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// check for stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s3=>s0, return
i=i+1; ram[i] = { op_cpy, `P, `P, `s3, `s0 }; // s3=>s0, pop both
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
// end sub
 
// sub : test all jmp instructions, result in s0, return to (s3)
// Correct functioning is s0 = 'd29 ('h1D).
//
// s0 : 0 (ez), final test result
// s1 : +1 (gz)
// s2 : -2 (lz)
// s3 : running test result, subroutine return address
//
// setup test values and running test result:
i='h500; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s0 }; // 0=>s0
i=i+1; ram[i] = { `op_byt_i, 8'd1, `_, `_, `s0, `s1 }; // 1=>s1
i=i+1; ram[i] = { `op_byt_i, -8'd2, `_, `_, `s0, `s2 }; // -2=>s2
i=i+1; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 1=>s1
//
// distance testing
//
i=i+1; ram[i] = { `op_byt_i, 8'd15, `_, `_, `s0, `s2 }; // 15=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump forward, pop s2
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_byt_i, 8'd9, `_, `_, `s0, `s2 }; // 9=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump forward, pop s2
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_byt_i, 8'd3, `_, `_, `s0, `s2 }; // 3=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump forward, pop s2
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_byt_i, 8'd9, `_, `_, `s0, `s2 }; // 9=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump forward (and out), pop s2
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_byt_i, -8'd6, `_, `_, `s0, `s2 }; // -6=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump back, pop s2
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_byt_i, -8'd12, `_, `_, `s0, `s2 }; // -12=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump back, pop s2
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { `op_byt_i, -8'd18, `_, `_, `s0, `s2 }; // -18=>s2
i=i+1; ram[i] = { op_jmp, `P, `_, `s2, `s0 }; // jump back, pop s2
//
// unconditional testing
//
i=i+1; ram[i] = { op_jmp, `_, `_, `s1, `s1 }; // jump (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp, `_, `_, `s1, `s2 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp, `_, `_, `s1, `s0 }; // jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
// (A?0) testing
// ez
i=i+1; ram[i] = { op_jmp_ez, `_, `_, `s1, `s1 }; // (s1==0) ? jump (NNY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_ez, `_, `_, `s1, `s2 }; // (s2==0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_ez, `_, `_, `s1, `s0 }; // (s0==0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// lz
i=i+1; ram[i] = { op_jmp_lz, `_, `_, `s1, `s1 }; // (s1<0) ? jump (NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_lz, `_, `_, `s1, `s2 }; // (s2<0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_lz, `_, `_, `s1, `s0 }; // (s0<0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// lez
i=i+1; ram[i] = { op_jmp_lez, `_, `_, `s1, `s1 }; // (s1<=0) ? jump (NYY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_lez, `_, `_, `s1, `s2 }; // (s2<=0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_lez, `_, `_, `s1, `s0 }; // (s0<=0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// gz
i=i+1; ram[i] = { op_jmp_gz, `_, `_, `s1, `s1 }; // (s1>0) ? jump (YNN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_gz, `_, `_, `s1, `s2 }; // (s2>0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_gz, `_, `_, `s1, `s0 }; // (s0>0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// gez
i=i+1; ram[i] = { op_jmp_gez, `_, `_, `s1, `s1 }; // (s1>=0) ? jump (YNY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_gez, `_, `_, `s1, `s2 }; // (s2>=0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_gez, `_, `_, `s1, `s0 }; // (s0>=0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// glz
i=i+1; ram[i] = { op_jmp_glz, `_, `_, `s1, `s1 }; // (s1<>0) ? jump (YYN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_glz, `_, `_, `s1, `s2 }; // (s2<>0) ? jump
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_jmp_glz, `_, `_, `s1, `s0 }; // (s0<>0) ? jump
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// cleanup
i=i+1; ram[i] = { op_pop, `P, `P, `s2, `s1 }; // pop s1 & s2
// check for opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// check for stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s3=>s0, return
i=i+1; ram[i] = { op_cpy, `P, `P, `s3, `s0 }; // s3=>s0, pop both
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
// end sub
 
 
// sub : test all gto instructions, result in s0, return to (s3)
// Correct functioning is s0 = 'd25 ('h19).
//
// s0 : 0 (ez), final test result
// s1 : PC (gz)
// s2 : -2 (lz)
// s3 : running test result, subroutine return address
//
// setup test values and running test result:
i='h700; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s0 }; // 0=>s0
i=i+1; ram[i] = { `op_byt_i, -8'd2, `_, `_, `s0, `s2 }; // -2=>s2
i=i+1; ram[i] = { `op_byt_i, 8'd0, `_, `_, `s0, `s3 }; // 1=>s1
//
// distance testing
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd6, `_, `P, `s0, `s1 }; // s1+6=>s1, pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // go forward, pop s1
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd6, `_, `P, `s0, `s1 }; // s1+6=>s1, pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // go forward, pop s1
//
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, -6'd6, `_, `P, `s0, `s1 }; // s1-6=>s1, pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // go back, pop s1
//
// unconditional testing
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s1 }; // go, pop s1 (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s2 }; // go, pop s1 (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s1, `s0 }; // go, pop s1 (YYY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
// (A?0) testing
// ez
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_ez, `P, `_, `s1, `s1 }; // (s1==0) ? go, pop s1(NNY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_ez, `P, `_, `s1, `s2 }; // (s2==0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_ez, `P, `_, `s1, `s0 }; // (s0==0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// lz
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_lz, `P, `_, `s1, `s1 }; // (s1<0) ? go, pop s1(NYN)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_lz, `P, `_, `s1, `s2 }; // (s2<0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_lz, `P, `_, `s1, `s0 }; // (s0<0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// lez
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_lez, `P, `_, `s1, `s1 }; // (s1<=0) ? go, pop s1(NYY)
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_lez, `P, `_, `s1, `s2 }; // (s2<=0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_lez, `P, `_, `s1, `s0 }; // (s0<=0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// gz
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_gz, `P, `_, `s1, `s1 }; // (s1>0) ? go, pop s1(YNN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_gz, `P, `_, `s1, `s2 }; // (s2>0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_gz, `P, `_, `s1, `s0 }; // (s0>0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// gez
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_gez, `P, `_, `s1, `s1 }; // (s1>=0) ? go, pop s1(YNY)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_gez, `P, `_, `s1, `s2 }; // (s2>=0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_gez, `P, `_, `s1, `s0 }; // (s0>=0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
// glz
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_glz, `P, `_, `s1, `s1 }; // (s1<>0) ? go, pop s1(YYN)
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_glz, `P, `_, `s1, `s2 }; // (s2<>0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `_, `P, `s0, `s3 }; // s3+1=>s3, pop s3
//
i=i+1; ram[i] = { op_pc, `_, `_, `s0, `s1 }; // pc => s1
i=i+1; ram[i] = { `op_add_i, 6'd3, `_, `P, `s0, `s1 }; // s1+3=>s1, pop s1
i=i+1; ram[i] = { op_gto_glz, `P, `_, `s1, `s0 }; // (s0<>0) ? go, pop s1
i=i+1; ram[i] = { `op_add_i, 6'd2, `_, `P, `s0, `s3 }; // s3+2=>s3, pop s3 (N)
i=i+1; ram[i] = { `op_add_i, -6'd1, `_, `P, `s0, `s3 }; // s3-1=>s3, pop s3
// cleanup
i=i+1; ram[i] = { op_pop, `_, `P, `s0, `s2 }; // pop s2
// check for opcode errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h900 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// check for stack errors
i=i+1; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = 16'h910 ; // addr
i=i+1; ram[i] = { op_gsb, `P, `_, `s2, `s3 }; // gsb, pop s2 (addr)
i=i+1; ram[i] = { `op_jmp_iez, 5'd1, `_, `_, `s0, `s0 }; // (s0==0) ? skip
i=i+1; ram[i] = { `op_add_i, -6'd2, `_, `P, `s0, `s3 }; // s3-2=>s3, pop s3 (Y)
i=i+1; ram[i] = { `op_add_i, 6'd1, `P, `P, `s0, `s3 }; // s3+1=>s3, pop both
// s3=>s0, return
i=i+1; ram[i] = { op_cpy, `P, `P, `s3, `s0 }; // s3=>s0, pop both
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
// end sub
 
 
// sub : read & clear opcode errors for this thread => s0, return to (s3)
i='h900; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { `op_rd_i, OP_ER_ADDR, `_, `_, `s2, `s1 }; // read (s2+offset)=>s1
i=i+1; ram[i] = { op_and, `P, `P, `s1, `s0 }; // s0&s1=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, OP_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
// sub : read & clear stack errors for this thread => s0, return to (s3)
i='h910; ram[i] = { op_lit_u, `_, `_, `s0, `s2 }; // lit => s2
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, THRD_ID_ADDR, `_, `_, `s2, `s0 }; // read (s2+offset)=>s0
i=i+1; ram[i] = { op_shl_u, `_, `P, `s0, `s0 }; // 1<<s0=>s0, pop s0
i=i+1; ram[i] = { op_cpy, `_, `_, `s0, `s1 }; // s0=>s1
i=i+1; ram[i] = { `op_shl_i, 6'd8, `_, `P, `s0, `s1 }; // s1<<8=>s1, pop s1
i=i+1; ram[i] = { op_or, `P, `P, `s1, `s0 }; // s0|s1=>s0, pop both
i=i+1; ram[i] = { `op_rd_i, STK_ER_ADDR, `_, `_, `s2, `s1 }; // read (s2+offset)=>s1
i=i+1; ram[i] = { op_and, `P, `P, `s1, `s0 }; // s0&s1=>s0, pop both
i=i+1; ram[i] = { `op_wr_i, STK_ER_ADDR, `P, `_, `s2, `s0 }; // write s0=>(s2+offset), pop s2
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return to (s3), pop s3
 
 
// sub : read 32 bit GPIO => s0, return to (s3)
i='h920; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_rd_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // read (s1+offset) => s0
i=i+1; ram[i] = { `op_rd_ix, IO_HI_ADDR, `P, `P, `s1, `s0 }; // read (s1+offset) => s0, pop s1 & s0
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
// sub : write s0 => 32 bit GPIO, return to (s3)
i='h930; ram[i] = { op_lit_u, `_, `_, `s0, `s1 }; // lit => s1
i=i+1; ram[i] = REG_BASE_ADDR ; // reg base addr
i=i+1; ram[i] = { `op_wr_i, IO_LO_ADDR, `_, `_, `s1, `s0 }; // write s0 => (s1+offset)
i=i+1; ram[i] = { `op_wr_ix, IO_HI_ADDR, `P, `_, `s1, `s0 }; // write s0 => (s1+offset), pop s1
i=i+1; ram[i] = { op_gto, `P, `_, `s3, `s0 }; // return, pop s3
 
 
end
/hive/trunk/v01.09/core.sdc
0,0 → 1,108
## Generated SDC file "core.sdc"
 
## Copyright (C) 1991-2010 Altera Corporation
## Your use of Altera Corporation's design tools, logic functions
## and other software and tools, and its AMPP partner logic
## functions, and any output files from any of the foregoing
## (including device programming or simulation files), and any
## associated documentation or information are expressly subject
## to the terms and conditions of the Altera Program License
## Subscription Agreement, Altera MegaCore Function License
## Agreement, or other applicable license agreement, including,
## without limitation, that your use is for the sole purpose of
## programming logic devices manufactured by Altera and sold by
## Altera or its authorized distributors. Please refer to the
## applicable agreement for further details.
 
 
## VENDOR "Altera"
## PROGRAM "Quartus II"
## VERSION "Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Web Edition"
 
## DATE "Wed May 15 09:26:03 2013"
 
##
## DEVICE "EP3C5E144C8"
##
 
 
#**************************************************************
# Time Information
#**************************************************************
 
set_time_format -unit ns -decimal_places 3
 
 
 
#**************************************************************
# Create Clock
#**************************************************************
 
create_clock -name clk_i clk_i -period "200 MHz"
 
 
#**************************************************************
# Create Generated Clock
#**************************************************************
 
 
 
#**************************************************************
# Set Clock Latency
#**************************************************************
 
 
 
#**************************************************************
# Set Clock Uncertainty
#**************************************************************
 
derive_clock_uncertainty
 
 
#**************************************************************
# Set Input Delay
#**************************************************************
 
 
 
#**************************************************************
# Set Output Delay
#**************************************************************
 
 
 
#**************************************************************
# Set Clock Groups
#**************************************************************
 
 
 
#**************************************************************
# Set False Path
#**************************************************************
 
 
 
#**************************************************************
# Set Multicycle Path
#**************************************************************
 
 
 
#**************************************************************
# Set Maximum Delay
#**************************************************************
 
 
 
#**************************************************************
# Set Minimum Delay
#**************************************************************
 
 
 
#**************************************************************
# Set Input Transition
#**************************************************************
 
/hive/trunk/v01.09/core.qws
0,0 → 1,18
[ProjectWorkspace]
ptn_Child1=Frames
[ProjectWorkspace.Frames]
ptn_Child1=ChildFrames
[ProjectWorkspace.Frames.ChildFrames]
ptn_Child1=Document-0
ptn_Child2=Document-1
ptn_Child3=Document-2
[ProjectWorkspace.Frames.ChildFrames.Document-2]
ptn_Child1=ViewFrame-0
[ProjectWorkspace.Frames.ChildFrames.Document-2.ViewFrame-0]
DocPathName=op_encode.h
DocumentCLSID={0b720e69-67da-11d0-bf4f-0000c08cb0c0}
IsChildFrameDetached=False
IsActiveChildFrame=True
ptn_Child1=StateMap
[ProjectWorkspace.Frames.ChildFrames.Document-2.ViewFrame-0.StateMap]
AFC_IN_REPORT=False
/hive/trunk/v01.09/unused/clz.vwf
0,0 → 1,4188
/*
WARNING: Do NOT edit the input and output ports in this file in a text
editor if you plan to continue editing the block that represents it in
the Block Editor! File corruption is VERY likely to occur.
*/
 
/*
Copyright (C) 1991-2010 Altera Corporation
Your use of Altera Corporation's design tools, logic functions
and other software and tools, and its AMPP partner logic
functions, and any output files from any of the foregoing
(including device programming or simulation files), and any
associated documentation or information are expressly subject
to the terms and conditions of the Altera Program License
Subscription Agreement, Altera MegaCore Function License
Agreement, or other applicable license agreement, including,
without limitation, that your use is for the sole purpose of
programming logic devices manufactured by Altera and sold by
Altera or its authorized distributors. Please refer to the
applicable agreement for further details.
*/
 
HEADER
{
VERSION = 1;
TIME_UNIT = ns;
DATA_OFFSET = 0.0;
DATA_DURATION = 10000.0;
SIMULATION_TIME = 0.0;
GRID_PHASE = 0.0;
GRID_PERIOD = 50.0;
GRID_DUTY_CYCLE = 50;
}
 
SIGNAL("clk_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("data_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 32;
LSB_INDEX = 0;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("data_i[31]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[30]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[29]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[28]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[27]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[26]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[25]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[24]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[23]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[22]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[21]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[20]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[19]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[18]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[17]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[16]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[15]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[14]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[13]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[12]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[11]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[10]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[9]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[8]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[7]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[6]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("data_i[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "data_i";
}
 
SIGNAL("rst_i")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("divider 518")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = "";
}
 
SIGNAL("clz_o")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = BUS;
WIDTH = 6;
LSB_INDEX = 0;
DIRECTION = OUTPUT;
PARENT = "";
}
 
SIGNAL("clz_o[5]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "clz_o";
}
 
SIGNAL("clz_o[4]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "clz_o";
}
 
SIGNAL("clz_o[3]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "clz_o";
}
 
SIGNAL("clz_o[2]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "clz_o";
}
 
SIGNAL("clz_o[1]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "clz_o";
}
 
SIGNAL("clz_o[0]")
{
VALUE_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = OUTPUT;
PARENT = "clz_o";
}
 
TRANSITION_LIST("clk_i")
{
NODE
{
REPEAT = 1;
NODE
{
REPEAT = 200;
LEVEL 0 FOR 25.0;
LEVEL 1 FOR 25.0;
}
}
}
 
TRANSITION_LIST("data_i[31]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1750.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
}
}
 
TRANSITION_LIST("data_i[30]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1700.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[29]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1650.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[28]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1600.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 400.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[27]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1550.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[26]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1500.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[25]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1450.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[24]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1400.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[23]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1350.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[22]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1300.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 450.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[21]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1250.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[20]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1200.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[19]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1150.0;
LEVEL 1 FOR 550.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 450.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 550.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[18]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1100.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[17]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1050.0;
LEVEL 1 FOR 500.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
}
}
 
TRANSITION_LIST("data_i[16]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1000.0;
LEVEL 1 FOR 550.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[15]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 950.0;
LEVEL 1 FOR 700.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[14]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 900.0;
LEVEL 1 FOR 700.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
}
}
 
TRANSITION_LIST("data_i[13]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 850.0;
LEVEL 1 FOR 700.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[12]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 800.0;
LEVEL 1 FOR 750.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[11]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 750.0;
LEVEL 1 FOR 800.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[10]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 700.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 400.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[9]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 650.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[8]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 600.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[7]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 550.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[6]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 500.0;
LEVEL 1 FOR 500.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[5]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 450.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
}
}
 
TRANSITION_LIST("data_i[4]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[3]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 650.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 450.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
 
TRANSITION_LIST("data_i[2]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 500.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
}
}
 
TRANSITION_LIST("data_i[1]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 600.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 250.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
}
}
 
TRANSITION_LIST("data_i[0]")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 600.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 150.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 350.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 200.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 300.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 250.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 300.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 100.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 150.0;
LEVEL 0 FOR 400.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 100.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 350.0;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 200.0;
LEVEL 1 FOR 100.0;
}
}
 
TRANSITION_LIST("rst_i")
{
NODE
{
REPEAT = 1;
LEVEL 1 FOR 50.0;
LEVEL 0 FOR 9950.0;
}
}
 
TRANSITION_LIST("clz_o[5]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 10000.0;
}
}
 
TRANSITION_LIST("clz_o[4]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 10000.0;
}
}
 
TRANSITION_LIST("clz_o[3]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 10000.0;
}
}
 
TRANSITION_LIST("clz_o[2]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 10000.0;
}
}
 
TRANSITION_LIST("clz_o[1]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 10000.0;
}
}
 
TRANSITION_LIST("clz_o[0]")
{
NODE
{
REPEAT = 1;
LEVEL X FOR 10000.0;
}
}
 
DISPLAY_LINE
{
CHANNEL = "rst_i";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 0;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "clk_i";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 1;
TREE_LEVEL = 0;
}
 
DISPLAY_LINE
{
CHANNEL = "divider 518";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 2;
TREE_LEVEL = 0;
IS_DIVIDER = ON;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i";
EXPAND_STATUS = EXPANDED;
RADIX = Binary;
TREE_INDEX = 3;
TREE_LEVEL = 0;
CHILDREN = 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[31]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 4;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[30]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 5;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[29]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 6;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[28]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 7;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[27]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 8;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[26]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 9;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[25]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 10;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[24]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 11;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[23]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 12;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[22]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 13;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[21]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 14;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[20]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 15;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[19]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 16;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[18]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 17;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[17]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 18;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[16]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 19;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[15]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 20;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[14]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 21;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[13]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 22;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[12]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 23;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[11]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 24;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[10]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 25;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[9]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 26;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[8]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 27;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[7]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 28;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[6]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 29;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 30;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 31;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 32;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 33;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 34;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "data_i[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Binary;
TREE_INDEX = 35;
TREE_LEVEL = 1;
PARENT = 3;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 36;
TREE_LEVEL = 0;
CHILDREN = 37, 38, 39, 40, 41, 42;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o[5]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 37;
TREE_LEVEL = 1;
PARENT = 36;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o[4]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 38;
TREE_LEVEL = 1;
PARENT = 36;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o[3]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 39;
TREE_LEVEL = 1;
PARENT = 36;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o[2]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 40;
TREE_LEVEL = 1;
PARENT = 36;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o[1]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 41;
TREE_LEVEL = 1;
PARENT = 36;
}
 
DISPLAY_LINE
{
CHANNEL = "clz_o[0]";
EXPAND_STATUS = COLLAPSED;
RADIX = Unsigned;
TREE_INDEX = 42;
TREE_LEVEL = 1;
PARENT = 36;
}
 
TIME_BAR
{
TIME = 17275;
MASTER = TRUE;
}
;
/hive/trunk/v01.09/unused/clz.v
0,0 → 1,113
/*
--------------------------------------------------------------------------------
 
Module : clz.v
 
--------------------------------------------------------------------------------
 
Function:
- Count leading zeros.
 
Instantiates:
- (2x) vector_sr.v
 
Notes:
- IN/OUT optionally registered.
 
--------------------------------------------------------------------------------
*/
 
module clz
#(
parameter integer REGS_IN = 1, // in register option
parameter integer REGS_OUT = 1, // out register option
parameter integer DATA_W = 32, // data width
parameter integer CLZ_W = 6 // s/b clog2( DATA_W ) + 1;
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// data I/O
input wire [DATA_W-1:0] data_i, // input
output wire [CLZ_W-1:0] clz_o // result
);
 
/*
----------------------
-- internal signals --
----------------------
*/
`include "functions.h" // for clog2()
//
localparam integer LOG2_W = clog2( DATA_W );
//
wire [DATA_W-1:0] data;
reg all_0;
reg [LOG2_W-1:0] hi_1;
wire [CLZ_W-1:0] clz;
 
 
/*
================
== code start ==
================
*/
 
 
// optional input regs
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( DATA_W ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( data_i ),
.data_o ( data )
);
 
 
// looped priority encoder
integer j;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
hi_1 <= { LOG2_W{ 1'b1 } };
all_0 <= 'b1;
end else begin
hi_1 <= { LOG2_W{ 1'b1 } };
all_0 <= 'b1;
for ( j = 0; j < DATA_W; j = j + 1 ) begin
if ( data[j] ) begin
hi_1 <= j[LOG2_W-1:0];
all_0 <= 'b0;
end
end
end
end
// invert & concat to get zero count
assign clz = { all_0, ~hi_1 };
 
 
// optional output regs
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( CLZ_W ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( clz ),
.data_o ( clz_o )
);
 
 
endmodule
/hive/trunk/v01.09/alu_add_sub.v
0,0 → 1,165
/*
--------------------------------------------------------------------------------
 
Module : alu_add_sub.v
 
--------------------------------------------------------------------------------
 
Function:
- Add & subtract unit for a processor ALU.
 
Instantiates:
- (4x) vector_sr.v
 
Notes:
- IN/MID/OUT/FLG optionally registered.
 
--------------------------------------------------------------------------------
*/
 
module alu_add_sub
#(
parameter integer REGS_IN = 1, // in register option
parameter integer REGS_MID = 1, // mid register option
parameter integer REGS_OUT = 1, // out register option
parameter integer REGS_FLG = 1, // flag register option
parameter integer DATA_W = 3 // data width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// control I/O
input wire sgn_i, // 1=signed
input wire ext_i, // 1=extended result
input wire sub_i, // 1=subtract; 0=add
// data I/O
input wire [DATA_W-1:0] a_i, // operand
input wire [DATA_W-1:0] b_i, // operand
output wire [DATA_W-1:0] result_o, // = ( a +/- b )
// flags
output wire ltz_o, // a < 0
output wire lt_o // a < b
);
 
/*
----------------------
-- internal signals --
----------------------
*/
localparam integer ZSX_W = DATA_W+1; // +1 extra bit
localparam integer ADD_W = DATA_W+2; // +2 extra bits
localparam integer DBL_W = DATA_W*2; // double width
//
wire sgn, sub, ext, sub_r, ext_r;
wire signed [DATA_W-1:0] a, b;
wire signed [ZSX_W-1:0] a_zsx, b_zsx;
wire signed [ADD_W-1:0] ab_add, ab_sub, ab_add_r, ab_sub_r;
reg signed [DBL_W-1:0] res_dbl;
reg signed [DATA_W-1:0] result;
wire ltz, lt;
 
 
/*
================
== code start ==
================
*/
 
 
// optional input regs
vector_sr
#(
.REGS ( REGS_IN ),
.DATA_W ( DATA_W+DATA_W+3 ),
.RESET_VAL ( 0 )
)
in_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { a_i, b_i, sub_i, ext_i, sgn_i } ),
.data_o ( { a, b, sub, ext, sgn } )
);
 
// zero|sign extend results
assign a_zsx = { ( sgn & a[DATA_W-1] ), a };
assign b_zsx = { ( sgn & b[DATA_W-1] ), b };
 
// arithmetic results (signed)
assign ab_add = a_zsx + b_zsx;
assign ab_sub = a_zsx - b_zsx;
// flags
assign ltz = a[DATA_W-1];
assign lt = ab_sub[ZSX_W-1];
 
 
// optional flag regs
vector_sr
#(
.REGS ( REGS_FLG ),
.DATA_W ( 2 ),
.RESET_VAL ( 0 )
)
regs_flags
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { ltz, lt } ),
.data_o ( { ltz_o, lt_o } )
);
 
 
// optional mid regs
vector_sr
#(
.REGS ( REGS_MID ),
.DATA_W ( ADD_W+ADD_W+2 ),
.RESET_VAL ( 0 )
)
mid_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( { ab_sub, ab_add, sub, ext } ),
.data_o ( { ab_sub_r, ab_add_r, sub_r, ext_r } )
);
 
 
// multiplex
always @ ( * ) begin
case ( sub_r )
'b0 : res_dbl <= ab_add_r;
'b1 : res_dbl <= ab_sub_r;
endcase
end
 
// multiplex & extend
always @ ( * ) begin
case ( ext_r )
'b0 : result <= res_dbl[DATA_W-1:0];
'b1 : result <= res_dbl[DBL_W-1:DATA_W];
endcase
end
 
 
// optional output regs
vector_sr
#(
.REGS ( REGS_OUT ),
.DATA_W ( DATA_W ),
.RESET_VAL ( 0 )
)
out_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( result ),
.data_o ( result_o )
);
 
 
endmodule
/hive/trunk/v01.09/event_ctrl.v
0,0 → 1,114
/*
--------------------------------------------------------------------------------
 
Module: event_ctrl.v
 
Function:
- Event (clear & interrupt) controller for multi-threaded processor.
 
Instantiates:
- (1x) vector_sr.v
 
Notes:
- Request is latched and acked until serviced.
- Event output is valid for the stage following this one.
- Optional req regs & resync.
- Optional req level / edge operation.
- For automatic clearing @ async reset, set RESET_VAL to 1.
 
--------------------------------------------------------------------------------
*/
 
module event_ctrl
#(
parameter integer REGS_REQ = 2, // input registers option
parameter integer EDGE_REQ = 0, // edge/level input option
parameter integer RESET_VAL = 1, // async reset value option
parameter integer THREADS = 4, // number of threads
parameter integer THRD_W = 2 // thread width
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// I/O
input wire [THRD_W-1:0] thrd_i, // thread
input wire [THREADS-1:0] en_i, // event enable, active high
input wire [THREADS-1:0] req_i, // event request, active high
output reg [THREADS-1:0] ack_o, // event ack, active high until serviced
output reg event_o // event, active high for one clock
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
wire [THREADS-1:0] req_0, req_2, thread_flag;
 
 
 
/*
================
== code start ==
================
*/
 
 
// optional input req regs
vector_sr
#(
.REGS ( REGS_REQ ),
.DATA_W ( THREADS ),
.RESET_VAL ( 0 )
)
req_regs
(
.clk_i ( clk_i ),
.rst_i ( rst_i ),
.data_i ( req_i ),
.data_o ( req_0 )
);
 
 
// optional input req edge detect
generate
if ( EDGE_REQ ) begin
reg [THREADS-1:0] req_1;
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
req_1 <= 'b0;
end else begin
req_1 <= req_0;
end
end
assign req_2 = req_0 & ~req_1;
end else begin
assign req_2 = req_0;
end
endgenerate
 
// decode thread flags (one hot)
assign thread_flag = 1'b1 << thrd_i;
 
// register & latch events
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
ack_o <= { THREADS{ RESET_VAL[0] } };
end else begin
ack_o <= ( en_i & req_2 ) | ( ack_o & ~thread_flag );
end
end
 
// output event (use in following stage)
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
event_o <= 'b0;
end else begin
event_o <= |( ack_o & thread_flag );
end
end
 
 
endmodule
/hive/trunk/v01.09/vector_sr.v
0,0 → 1,71
/*
--------------------------------------------------------------------------------
 
Module: vector_sr.v
 
Function:
- Vector I/O shift register.
 
Instantiates:
- Nothing.
 
Notes:
- Parameters for regs depth, data width, and async reset value.
- REGS=0 generates a wire.
 
--------------------------------------------------------------------------------
*/
 
 
module vector_sr
#(
parameter integer REGS = 4, // number of registers
parameter integer DATA_W = 2, // I/O data width
parameter [DATA_W-1:0] RESET_VAL = 0 // regs async reset value
)
(
// clocks & resets
input wire clk_i, // clock
input wire rst_i, // async. reset, active high
// I/O
input wire [DATA_W-1:0] data_i, // data in
output wire [DATA_W-1:0] data_o // data out
);
 
 
/*
----------------------
-- internal signals --
----------------------
*/
genvar i;
 
 
/*
================
== code start ==
================
*/
 
 
// generate regs pipeline
generate
if ( REGS == 0 ) begin
assign data_o = data_i;
end else begin
reg [DATA_W-1:0] stage[0:REGS-1];
for ( i=0; i<REGS; i=i+1 ) begin : loop
always @ ( posedge clk_i or posedge rst_i ) begin
if ( rst_i ) begin
stage[i] <= RESET_VAL;
end else begin
stage[i] <= ( i == REGS-1 ) ? data_i : stage[i+1];
end
end
end // endfor : loop
assign data_o = stage[0];
end
endgenerate
 
 
endmodule
/hive/trunk/v01.09/README.txt
0,0 → 1,16
* Hive soft processor core readme file *
 
- All *.v verilog and include *.h files are in a single directory,
where "core.v" is the top level entry.
- There are several boot code files in the "boot_code" directory,
to use one, bring it into the main directory and rename it
"boot_code.h".
- There is also an "unused" directory which contains files that aren't
currently part of the project but may be of interest.
- There is a "core.qpf" project file for Altera Quartus II9.1sp2 Web Edition.
With this tool you can compile to a target, and with the file "core.vwf" you
and simulate. I recommend functional simulation when fiddling around
because the compile is much faster.
- There is also a "core.sdc" file which sets the target top speed to
200 MHz in Quartus, and "core.qsf" which is a project settings file.
- Don't forget to assign pins for a real project.
/hive/trunk/v01.09/core.qpf
0,0 → 1,30
# -------------------------------------------------------------------------- #
#
# Copyright (C) 1991-2010 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus II
# Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Web Edition
# Date created = 16:30:24 June 18, 2013
#
# -------------------------------------------------------------------------- #
 
QUARTUS_VERSION = "9.1"
DATE = "16:30:24 June 18, 2013"
 
# Revisions
 
PROJECT_REVISION = "core"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.