Remove Sv compilation files
diff --git a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/surelog.log
deleted file mode 100644
index 097fa38..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/surelog.log
+++ /dev/null
@@ -1,51 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:37:16
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/aes_cipher_top.v rtl/aes_key_expand_128.v rtl/aes_rcon.v rtl/aes_sbox.v sim/bench.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/aes_cipher_top.v:48 Compile module "work@aes_cipher_top".
-
-[INFO :CP0303] rtl/aes_rcon.v:42 Compile module "work@aes_rcon".
-
-[INFO :CP0303] rtl/aes_key_expand_128.v:42 Compile module "work@aes_key_expand_128".
-
-[INFO :CP0303] rtl/aes_sbox.v:43 Compile module "work@aes_sbox".
-
-[INFO :CP0303] sim/bench.v:70 Compile module "work@testbench".
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] sim/bench.v:70 Top level module "work@testbench".
-
-[NOTE :EL0508] Nb Top level modules: 1.
-
-[NOTE :EL0509] Max instance depth: 4.
-
-[NOTE :EL0510] Nb instances: 44.
-
-[NOTE :EL0511] Nb leaf instances: 40.
-
-[ FATAL] : 0
-[ ERROR] : 0
-[WARNING] : 0
-[ NOTE] : 5
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_cipher_top.v b/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_cipher_top.v
deleted file mode 100644
index ff20ec6..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_cipher_top.v
+++ /dev/null
@@ -1,482 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// AES Cipher Top Level ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2000-2002 Rudolf Usselmann ////
-//// www.asics.ws ////
-//// rudi@asics.ws ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer.////
-//// ////
-//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
-//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
-//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
-//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
-//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
-//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
-//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
-//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
-//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
-//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
-//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
-//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
-//// POSSIBILITY OF SUCH DAMAGE. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-//// Modified to achieve 5 cycles - stage functionality ////
-//// By Tariq Bashir Ahmad ////
-//// tariq.bashir@gmail.com ////
-//// http://www.ecs.umass.edu/~tbashir ////
-
-
-
-`timescale 1 ns/1 ps
-
-module aes_cipher_top(clk, rst, ld, done, key, text_in, text_out);
-
-input clk, rst;
-input ld;
-output done;
-input [127:0] key;
-input [127:0] text_in;
-output [127:0] text_out;
-
-
-////////////////////////////////////////////////////////////////////
-//
-// Local Wires
-//
-
-wire [31:0] w0, w1, w2, w3, w4, w5, w6, w7;
-/*wire [127:0] key_odd,key_even;
-*/
-reg [127:0] text_in_r;
-reg [127:0] text_out;
-
-reg [127:0] text_out_temp;
-
-reg [7:0] sa00, sa01, sa02, sa03;
-reg [7:0] sa10, sa11, sa12, sa13;
-reg [7:0] sa20, sa21, sa22, sa23;
-reg [7:0] sa30, sa31, sa32, sa33;
-
-wire [7:0] sa00_next, sa01_next, sa02_next, sa03_next;
-wire [7:0] sa10_next, sa11_next, sa12_next, sa13_next;
-wire [7:0] sa20_next, sa21_next, sa22_next, sa23_next;
-wire [7:0] sa30_next, sa31_next, sa32_next, sa33_next;
-
-wire [7:0] sa00_sub, sa01_sub, sa02_sub, sa03_sub;
-wire [7:0] sa10_sub, sa11_sub, sa12_sub, sa13_sub;
-wire [7:0] sa20_sub, sa21_sub, sa22_sub, sa23_sub;
-wire [7:0] sa30_sub, sa31_sub, sa32_sub, sa33_sub;
-
-wire [7:0] sa00_sr, sa01_sr, sa02_sr, sa03_sr;
-wire [7:0] sa10_sr, sa11_sr, sa12_sr, sa13_sr;
-wire [7:0] sa20_sr, sa21_sr, sa22_sr, sa23_sr;
-wire [7:0] sa30_sr, sa31_sr, sa32_sr, sa33_sr;
-
-wire [7:0] sa00_mc, sa01_mc, sa02_mc, sa03_mc;
-wire [7:0] sa10_mc, sa11_mc, sa12_mc, sa13_mc;
-wire [7:0] sa20_mc, sa21_mc, sa22_mc, sa23_mc;
-wire [7:0] sa30_mc, sa31_mc, sa32_mc, sa33_mc;
-
-
-wire [7:0] sa00_next_round2, sa01_next_round2, sa02_next_round2, sa03_next_round2;
-wire [7:0] sa10_next_round2, sa11_next_round2, sa12_next_round2, sa13_next_round2;
-wire [7:0] sa20_next_round2, sa21_next_round2, sa22_next_round2, sa23_next_round2;
-wire [7:0] sa30_next_round2, sa31_next_round2, sa32_next_round2, sa33_next_round2;
-
-wire [7:0] sa00_sub_round2, sa01_sub_round2, sa02_sub_round2, sa03_sub_round2;
-wire [7:0] sa10_sub_round2, sa11_sub_round2, sa12_sub_round2, sa13_sub_round2;
-wire [7:0] sa20_sub_round2, sa21_sub_round2, sa22_sub_round2, sa23_sub_round2;
-wire [7:0] sa30_sub_round2, sa31_sub_round2, sa32_sub_round2, sa33_sub_round2;
-
-wire [7:0] sa00_sr_round2, sa01_sr_round2, sa02_sr_round2, sa03_sr_round2;
-wire [7:0] sa10_sr_round2, sa11_sr_round2, sa12_sr_round2, sa13_sr_round2;
-wire [7:0] sa20_sr_round2, sa21_sr_round2, sa22_sr_round2, sa23_sr_round2;
-wire [7:0] sa30_sr_round2, sa31_sr_round2, sa32_sr_round2, sa33_sr_round2;
-
-wire [7:0] sa00_mc_round2, sa01_mc_round2, sa02_mc_round2, sa03_mc_round2;
-wire [7:0] sa10_mc_round2, sa11_mc_round2, sa12_mc_round2, sa13_mc_round2;
-wire [7:0] sa20_mc_round2, sa21_mc_round2, sa22_mc_round2, sa23_mc_round2;
-wire [7:0] sa30_mc_round2, sa31_mc_round2, sa32_mc_round2, sa33_mc_round2;
-
-
-
-
-reg done, ld_r;
-reg [3:0] dcnt;
-reg done2;
-
-////////////////////////////////////////////////////////////////////
-//
-// Misc Logic
-//
-
-always @(posedge clk)
-begin
- if(~rst) begin dcnt <= 4'h0; end
- else
- if(ld) begin dcnt <= 4'h6; end
- else
- if(|dcnt) begin dcnt <= dcnt - 4'h1; end
-
-end
-
-always @(posedge clk) done <= !(|dcnt[3:1]) & dcnt[0] & !ld;
-always @(posedge clk) if(ld) text_in_r <= text_in;
-always @(posedge clk) ld_r <= ld;
-
-
-
-////////////////////////////////////////////////////////////////////
-// key expansion
-
-
-aes_key_expand_128 u0(
- .clk( clk ),
- .kld( ld_r ),
- .key( key ),
- .w0( w0 ),
- .w1( w1 ),
- .w2( w2 ),
- .w3( w3 ),
- .w4_reg( w4 ),
- .w5_reg( w5 ),
- .w6_reg( w6 ),
- .w7_reg( w7 )
- );
-/*assign key_odd = {w0,w1,w2,w3};
-assign key_even = {w4,w5,w6,w7};
-*/
-
-/*assign {w0,w1,w2,w3} = 128'h0;
-
-assign {w4,w5,w6,w7} = 128'h62636363626363636263636362636363;
-*/
-// Initial Permutation (AddRoundKey)
-//
-/*
-always @(posedge clk)
-begin
- w0 <= w0_net;
- w1 <= w1_net;
- w2 <= w2_net;
- w3 <= w3_net;
- w4 <= w4_net;
- w5 <= w5_net;
- w6 <= w6_net;
- w7 <= w7_net;
-end
-*/
-always @(posedge clk)
-begin
- sa33 <= ld_r ? text_in_r[007:000] ^ w3[07:00] : sa33_mc_round2 ^ w3[07:00];
- sa23 <= ld_r ? text_in_r[015:008] ^ w3[15:08] : sa23_mc_round2 ^ w3[15:08];
- sa13 <= ld_r ? text_in_r[023:016] ^ w3[23:16] : sa13_mc_round2 ^ w3[23:16];
- sa03 <= ld_r ? text_in_r[031:024] ^ w3[31:24] : sa03_mc_round2 ^ w3[31:24];
- sa32 <= ld_r ? text_in_r[039:032] ^ w2[07:00] : sa32_mc_round2 ^ w2[07:00];
- sa22 <= ld_r ? text_in_r[047:040] ^ w2[15:08] : sa22_mc_round2 ^ w2[15:08];
- sa12 <= ld_r ? text_in_r[055:048] ^ w2[23:16] : sa12_mc_round2 ^ w2[23:16];
- sa02 <= ld_r ? text_in_r[063:056] ^ w2[31:24] : sa02_mc_round2 ^ w2[31:24];
- sa31 <= ld_r ? text_in_r[071:064] ^ w1[07:00] : sa31_mc_round2 ^ w1[07:00];
- sa21 <= ld_r ? text_in_r[079:072] ^ w1[15:08] : sa21_mc_round2 ^ w1[15:08];
- sa11 <= ld_r ? text_in_r[087:080] ^ w1[23:16] : sa11_mc_round2 ^ w1[23:16];
- sa01 <= ld_r ? text_in_r[095:088] ^ w1[31:24] : sa01_mc_round2 ^ w1[31:24];
- sa30 <= ld_r ? text_in_r[103:096] ^ w0[07:00] : sa30_mc_round2 ^ w0[07:00];
- sa20 <= ld_r ? text_in_r[111:104] ^ w0[15:08] : sa20_mc_round2 ^ w0[15:08];
- sa10 <= ld_r ? text_in_r[119:112] ^ w0[23:16] : sa10_mc_round2 ^ w0[23:16];
- sa00 <= ld_r ? text_in_r[127:120] ^ w0[31:24] : sa00_mc_round2 ^ w0[31:24];
-
- /*$strobe($time,": roundkeyodd = %h\n",{w0,w1,w2,w3});
- $strobe($time,": state is %h\n",{sa00, sa01, sa02, sa03,
- sa10, sa11, sa12, sa13,
- sa20, sa21, sa22, sa23,
- sa30, sa31, sa32, sa33});*/
-
-end
-
-////////////////////////////////////////////////////////////////////
-//
-// Modules instantiation
-//
-
-//sbox lookup
-aes_sbox us00( .a( sa00 ), .d( sa00_sub ));
-aes_sbox us01( .a( sa01 ), .d( sa01_sub ));
-aes_sbox us02( .a( sa02 ), .d( sa02_sub ));
-aes_sbox us03( .a( sa03 ), .d( sa03_sub ));
-aes_sbox us10( .a( sa10 ), .d( sa10_sub ));
-aes_sbox us11( .a( sa11 ), .d( sa11_sub ));
-aes_sbox us12( .a( sa12 ), .d( sa12_sub ));
-aes_sbox us13( .a( sa13 ), .d( sa13_sub ));
-aes_sbox us20( .a( sa20 ), .d( sa20_sub ));
-aes_sbox us21( .a( sa21 ), .d( sa21_sub ));
-aes_sbox us22( .a( sa22 ), .d( sa22_sub ));
-aes_sbox us23( .a( sa23 ), .d( sa23_sub ));
-aes_sbox us30( .a( sa30 ), .d( sa30_sub ));
-aes_sbox us31( .a( sa31 ), .d( sa31_sub ));
-aes_sbox us32( .a( sa32 ), .d( sa32_sub ));
-aes_sbox us33( .a( sa33 ), .d( sa33_sub ));
-
-////////////////////////////////////////////////////////////////////
-//
-// Round Permutations
-//
-
-assign sa00_sr = sa00_sub; //
-assign sa01_sr = sa01_sub; //no shift
-assign sa02_sr = sa02_sub; //
-assign sa03_sr = sa03_sub; //
-
-assign sa10_sr = sa11_sub; //
-assign sa11_sr = sa12_sub; // left shift by 1
-assign sa12_sr = sa13_sub; //
-assign sa13_sr = sa10_sub; //
-
-assign sa20_sr = sa22_sub; //
-assign sa21_sr = sa23_sub; // left shift by 2
-assign sa22_sr = sa20_sub; //
-assign sa23_sr = sa21_sub; //
-
-assign sa30_sr = sa33_sub; //
-assign sa31_sr = sa30_sub; // left shift by 3
-assign sa32_sr = sa31_sub; //
-assign sa33_sr = sa32_sub; //
-
-// mix column operation
-assign {sa00_mc, sa10_mc, sa20_mc, sa30_mc} = mix_col(sa00_sr,sa10_sr,sa20_sr,sa30_sr);
-assign {sa01_mc, sa11_mc, sa21_mc, sa31_mc} = mix_col(sa01_sr,sa11_sr,sa21_sr,sa31_sr);
-assign {sa02_mc, sa12_mc, sa22_mc, sa32_mc} = mix_col(sa02_sr,sa12_sr,sa22_sr,sa32_sr);
-assign {sa03_mc, sa13_mc, sa23_mc, sa33_mc} = mix_col(sa03_sr,sa13_sr,sa23_sr,sa33_sr);
-
-//// add round key
-assign sa00_next_round2 = sa00_mc ^ w4[31:24];
-assign sa01_next_round2 = sa01_mc ^ w5[31:24];
-assign sa02_next_round2 = sa02_mc ^ w6[31:24];
-assign sa03_next_round2 = sa03_mc ^ w7[31:24];
-assign sa10_next_round2 = sa10_mc ^ w4[23:16];
-assign sa11_next_round2 = sa11_mc ^ w5[23:16];
-assign sa12_next_round2 = sa12_mc ^ w6[23:16];
-assign sa13_next_round2 = sa13_mc ^ w7[23:16];
-assign sa20_next_round2 = sa20_mc ^ w4[15:08];
-assign sa21_next_round2 = sa21_mc ^ w5[15:08];
-assign sa22_next_round2 = sa22_mc ^ w6[15:08];
-assign sa23_next_round2 = sa23_mc ^ w7[15:08];
-assign sa30_next_round2 = sa30_mc ^ w4[07:00];
-assign sa31_next_round2 = sa31_mc ^ w5[07:00];
-assign sa32_next_round2 = sa32_mc ^ w6[07:00];
-assign sa33_next_round2 = sa33_mc ^ w7[07:00];
-
-
-always @(posedge clk)
-begin
-
- /* $strobe($time,": roundkeyodd = %h, text_out_odd is %h\n",{w0,w1,w2,w3},text_out_temp);
- $strobe($time,": roundkeyeven is %h\n",{w4,w5,w6,w7}); */
- text_out_temp[127:120] <= sa00_sr ^ w4[31:24];
- text_out_temp[095:088] <= sa01_sr ^ w5[31:24];
- text_out_temp[063:056] <= sa02_sr ^ w6[31:24];
- text_out_temp[031:024] <= sa03_sr ^ w7[31:24];
- text_out_temp[119:112] <= sa10_sr ^ w4[23:16];
- text_out_temp[087:080] <= sa11_sr ^ w5[23:16];
- text_out_temp[055:048] <= sa12_sr ^ w6[23:16];
- text_out_temp[023:016] <= sa13_sr ^ w7[23:16];
- text_out_temp[111:104] <= sa20_sr ^ w4[15:08];
- text_out_temp[079:072] <= sa21_sr ^ w5[15:08];
- text_out_temp[047:040] <= sa22_sr ^ w6[15:08];
- text_out_temp[015:008] <= sa23_sr ^ w7[15:08];
- text_out_temp[103:096] <= sa30_sr ^ w4[07:00];
- text_out_temp[071:064] <= sa31_sr ^ w5[07:00];
- text_out_temp[039:032] <= sa32_sr ^ w6[07:00];
- text_out_temp[007:000] <= sa33_sr ^ w7[07:00];
-end
-
-
-
-
-////////////////////// round i + 1 //////////////////////////////////
-//sbox lookup
-aes_sbox us00_round2( .a( sa00_next_round2 ), .d( sa00_sub_round2 ));
-aes_sbox us01_round2( .a( sa01_next_round2 ), .d( sa01_sub_round2 ));
-aes_sbox us02_round2( .a( sa02_next_round2 ), .d( sa02_sub_round2 ));
-aes_sbox us03_round2( .a( sa03_next_round2 ), .d( sa03_sub_round2 ));
-aes_sbox us10_round2( .a( sa10_next_round2 ), .d( sa10_sub_round2 ));
-aes_sbox us11_round2( .a( sa11_next_round2 ), .d( sa11_sub_round2 ));
-aes_sbox us12_round2( .a( sa12_next_round2 ), .d( sa12_sub_round2 ));
-aes_sbox us13_round2( .a( sa13_next_round2 ), .d( sa13_sub_round2 ));
-aes_sbox us20_round2( .a( sa20_next_round2 ), .d( sa20_sub_round2 ));
-aes_sbox us21_round2( .a( sa21_next_round2 ), .d( sa21_sub_round2 ));
-aes_sbox us22_round2( .a( sa22_next_round2 ), .d( sa22_sub_round2 ));
-aes_sbox us23_round2( .a( sa23_next_round2 ), .d( sa23_sub_round2 ));
-aes_sbox us30_round2( .a( sa30_next_round2 ), .d( sa30_sub_round2 ));
-aes_sbox us31_round2( .a( sa31_next_round2 ), .d( sa31_sub_round2 ));
-aes_sbox us32_round2( .a( sa32_next_round2 ), .d( sa32_sub_round2 ));
-aes_sbox us33_round2( .a( sa33_next_round2 ), .d( sa33_sub_round2 ));
-
-
-// Round Permutations
-//
-
-assign sa00_sr_round2 = sa00_sub_round2; //
-assign sa01_sr_round2 = sa01_sub_round2; //no shift
-assign sa02_sr_round2 = sa02_sub_round2; //
-assign sa03_sr_round2 = sa03_sub_round2; //
-
-assign sa10_sr_round2 = sa11_sub_round2; //
-assign sa11_sr_round2 = sa12_sub_round2; // left shift by 1
-assign sa12_sr_round2 = sa13_sub_round2; //
-assign sa13_sr_round2 = sa10_sub_round2; //
-
-assign sa20_sr_round2 = sa22_sub_round2; //
-assign sa21_sr_round2 = sa23_sub_round2; // left shift by 2
-assign sa22_sr_round2 = sa20_sub_round2; //
-assign sa23_sr_round2 = sa21_sub_round2; //
-
-assign sa30_sr_round2 = sa33_sub_round2; //
-assign sa31_sr_round2 = sa30_sub_round2; // left shift by 3
-assign sa32_sr_round2 = sa31_sub_round2; //
-assign sa33_sr_round2 = sa32_sub_round2; //
-
-// mix column operation
-assign {sa00_mc_round2, sa10_mc_round2, sa20_mc_round2, sa30_mc_round2} = mix_col(sa00_sr_round2,sa10_sr_round2,sa20_sr_round2,sa30_sr_round2);
-assign {sa01_mc_round2, sa11_mc_round2, sa21_mc_round2, sa31_mc_round2} = mix_col(sa01_sr_round2,sa11_sr_round2,sa21_sr_round2,sa31_sr_round2);
-assign {sa02_mc_round2, sa12_mc_round2, sa22_mc_round2, sa32_mc_round2} = mix_col(sa02_sr_round2,sa12_sr_round2,sa22_sr_round2,sa32_sr_round2);
-assign {sa03_mc_round2, sa13_mc_round2, sa23_mc_round2, sa33_mc_round2} = mix_col(sa03_sr_round2,sa13_sr_round2,sa23_sr_round2,sa33_sr_round2);
-
-////////////////////////////////////////////////////////////////////
-//
-// Final text output
-//
-
-
-always @(posedge clk)
- begin
- /* $strobe($time,": round_key2 is %h\n",{w4,w5,w6,w7});
- $strobe($time,": roundkeyeven = %h, text_out_even is %h\n",{w4,w5,w6,w7},text_out);*/
- text_out[127:120] <= sa00_sr_round2 ^ w0[31:24];
- text_out[095:088] <= sa01_sr_round2 ^ w1[31:24];
- text_out[063:056] <= sa02_sr_round2 ^ w2[31:24];
- text_out[031:024] <= sa03_sr_round2 ^ w3[31:24];
- text_out[119:112] <= sa10_sr_round2 ^ w0[23:16];
- text_out[087:080] <= sa11_sr_round2 ^ w1[23:16];
- text_out[055:048] <= sa12_sr_round2 ^ w2[23:16];
- text_out[023:016] <= sa13_sr_round2 ^ w3[23:16];
- text_out[111:104] <= sa20_sr_round2 ^ w0[15:08];
- text_out[079:072] <= sa21_sr_round2 ^ w1[15:08];
- text_out[047:040] <= sa22_sr_round2 ^ w2[15:08];
- text_out[015:008] <= sa23_sr_round2 ^ w3[15:08];
- text_out[103:096] <= sa30_sr_round2 ^ w0[07:00];
- text_out[071:064] <= sa31_sr_round2 ^ w1[07:00];
- text_out[039:032] <= sa32_sr_round2 ^ w2[07:00];
- text_out[007:000] <= sa33_sr_round2 ^ w3[07:00];
- end
-
-
-/* -----\/----- EXCLUDED -----\/-----
-always @(posedge clk)
- begin
-/-* $strobe($time,": text_out_temp is %h\n",text_out_temp);
-
-
-*-/ /-*
- $strobe($time,": subbytes is %h\n",{sa00_sub, sa01_sub, sa02_sub, sa03_sub,
- sa10_sub, sa11_sub, sa12_sub, sa13_sub,
- sa20_sub, sa21_sub, sa22_sub, sa23_sub,
- sa30_sub, sa31_sub, sa32_sub, sa33_sub});
-
- $strobe($time,": shiftrows is %h\n",{sa00_sr, sa01_sr, sa02_sr, sa03_sr,
- sa10_sr, sa11_sr, sa12_sr, sa13_sr,
- sa20_sr, sa21_sr, sa22_sr, sa23_sr,
- sa30_sr, sa31_sr, sa32_sr, sa33_sr});
-
- $strobe($time,": mixcolumn is %h\n",{sa00_mc, sa01_mc, sa02_mc, sa03_mc,
- sa10_mc, sa11_mc, sa12_mc, sa13_mc,
- sa20_mc, sa21_mc, sa22_mc, sa23_mc,
- sa30_mc, sa31_mc, sa32_mc, sa33_mc});
-
- $strobe($time,": sa_next_into_even is %h\n",{sa00_next_round2, sa01_next_round2, sa02_next_round2, sa03_next_round2,
- sa10_next_round2, sa11_next_round2, sa12_next_round2, sa13_next_round2,
- sa20_next_round2, sa21_next_round2, sa22_next_round2, sa23_next_round2,
- sa30_next_round2, sa31_next_round2, sa32_next_round2, sa33_next_round2});
-
- $strobe($time,": subbytes_e is %h\n",{sa00_sub_round2, sa01_sub_round2, sa02_sub_round2, sa03_sub_round2,
- sa10_sub_round2, sa11_sub_round2, sa12_sub_round2, sa13_sub_round2,
- sa20_sub_round2, sa21_sub_round2, sa22_sub_round2, sa23_sub_round2,
- sa30_sub_round2, sa31_sub_round2, sa32_sub_round2, sa33_sub_round2});
-
- $strobe($time,": shiftrows_e is %h\n",{sa00_sr_round2, sa01_sr_round2, sa02_sr_round2, sa03_sr_round2,
- sa10_sr_round2, sa11_sr_round2, sa12_sr_round2, sa13_sr_round2,
- sa20_sr_round2, sa21_sr_round2, sa22_sr_round2, sa23_sr_round2,
- sa30_sr_round2, sa31_sr_round2, sa32_sr_round2, sa33_sr_round2});
-
- $strobe($time,": mixcolumn_e is %h\n",{sa00_mc_round2, sa01_mc_round2, sa02_mc_round2, sa03_mc_round2,
- sa10_mc_round2, sa11_mc_round2, sa12_mc_round2, sa13_mc_round2,
- sa20_mc_round2, sa21_mc_round2, sa22_mc_round2, sa23_mc_round2,
- sa30_mc_round2, sa31_mc_round2, sa32_mc_round2, sa33_mc_round2});
- *-/
- end
-
-
-/-*
-always @(posedge clk)
- begin
- if(done)
- begin
- text_out_64 <= text_out[127:64];
-// done2 <= 1;
- end
- else if(~done)
- text_out_64 <= text_out[63:0];
- end
- *-/
-
-/-*
-always @(posedge clk)
- begin
- if(done2)
- begin
- text_out_64 <= text_out[63:0];
- end
- end
-*-/
- -----/\----- EXCLUDED -----/\----- */
-////////////////////////////////////////////////////////////////////
-//
-// Generic Functions
-//
-
-function [31:0] mix_col;
-input [7:0] s0,s1,s2,s3;
-//reg [7:0] s0_o,s1_o,s2_o,s3_o;
-begin
-mix_col[31:24]=xtime(s0)^xtime(s1)^s1^s2^s3;
-mix_col[23:16]=s0^xtime(s1)^xtime(s2)^s2^s3;
-mix_col[15:08]=s0^s1^xtime(s2)^xtime(s3)^s3;
-mix_col[07:00]=xtime(s0)^s0^s1^s2^xtime(s3);
-end
-endfunction
-
-function [7:0] xtime;
-input [7:0] b; xtime={b[6:0],1'b0}^(8'h1b&{8{b[7]}});
-endfunction
-
-
-
-endmodule
-
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_key_expand_128.v b/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_key_expand_128.v
deleted file mode 100644
index 21d302c..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_key_expand_128.v
+++ /dev/null
@@ -1,110 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// AES Key Expand Block (for 128 bit keys) ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2000-2002 Rudolf Usselmann ////
-//// www.asics.ws ////
-//// rudi@asics.ws ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer.////
-//// ////
-//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
-//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
-//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
-//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
-//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
-//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
-//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
-//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
-//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
-//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
-//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
-//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
-//// POSSIBILITY OF SUCH DAMAGE. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-
-`timescale 1 ns/1 ps
-
-module aes_key_expand_128(clk, kld, key, w0,w1,w2,w3,w4_reg,w5_reg,w6_reg,w7_reg);
-input clk;
-input kld;
-input [127:0] key;
-output reg [31:0] w0,w1,w2,w3;
- reg [31:0] w4,w5,w6,w7;
-
-output reg [31:0] w4_reg,w5_reg,w6_reg,w7_reg;
-wire [31:0] tmp_w,tmp_w2;
-wire [31:0] subword, subword2;
-wire [31:0] rcon, rcon2; //round constant
-
-
-
-always @(posedge clk)
-begin
- w4_reg <= w4;
- w5_reg <= w5;
- w6_reg <= w6;
- w7_reg <= w7;
-/* $strobe($time,": next round_key is %h\n",{w4_reg,w5_reg,w6_reg,w7_reg});
-*/end
-
-
-always @*
-begin
-
-w0 = kld ? key[127:096] :w4_reg^subword2^{rcon[31:24],24'b0};
-w1 = kld ? key[095:064] :w5_reg^w4_reg^subword2^{rcon[31:24],24'b0};
-w2 = kld ? key[063:032] :w6_reg^w5_reg^w4_reg^subword2^{rcon[31:24],24'b0};
-w3 = kld ? key[031:000] :w7_reg^w6_reg^w5_reg^w4_reg^subword2^{rcon[31:24],24'b0};
-
-w4 = (1'b0)? key[127:096]^subword^{8'h01,24'b0} : w0^subword^{rcon2[31:24],24'b0};
-w5 = (1'b0)? key[095:064]^key[127:096]^subword^{8'h01,24'b0} :w1^w0^subword^{rcon2[31:24],24'b0};
-w6 = (1'b0)? key[063:032]^key[095:064]^key[127:096]^subword^{8'h01,24'b0} : w2^w1^w0^subword^{rcon2[31:24],24'b0};
-w7 = (1'b0)? key[127:096]^key[095:064]^key[063:032]^key[031:000]^subword^{8'h01,24'b0} : w3^w2^w1^w0^subword^{rcon2[31:24],24'b0};
-
-/*$display($time,": rcon is %d, rcon2 is %d\n",rcon[31:24],rcon2[31:24]);*/
-/*$display($time,": round_key is %h\n",{w0,w1,w2,w3});
-$display($time,": next_round_key is %h\n",{w4,w5,w6,w7});*/
-end
-
-
-/*assign tmp_w = w3; //subword
-assign tmp_w2 = w7 ; //subword2
-*/
-/*
-assign subword[31:24] = aes_sbox(tmp_w[23:16]);
-assign subword[23:16] = aes_sbox(tmp_w[15:08]);
-assign subword[15:08] = aes_sbox(tmp_w[07:00]);
-assign subword[07:00] = aes_sbox(tmp_w[31:24]);
-*/
-
-aes_sbox inst1( .a(w3[23:16]), .d(subword[31:24]));
-aes_sbox inst2( .a(w3[15:08]), .d(subword[23:16]));
-aes_sbox inst3( .a(w3[07:00]), .d(subword[15:08]));
-aes_sbox inst4( .a(w3[31:24]), .d(subword[07:00]));
-aes_rcon inst5(.clk(clk), .kld(kld), .out(rcon[31:24]), .out2(rcon2[31:24]));
-
-
-aes_sbox u4( .a(w7_reg[23:16]), .d(subword2[31:24]));
-aes_sbox u5( .a(w7_reg[15:08]), .d(subword2[23:16]));
-aes_sbox u6( .a(w7_reg[07:00]), .d(subword2[15:08]));
-aes_sbox u7( .a(w7_reg[31:24]), .d(subword2[07:00]));
-
-
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_rcon.v b/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_rcon.v
deleted file mode 100644
index 7c11e12..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_rcon.v
+++ /dev/null
@@ -1,90 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// AES RCON Block ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2000-2002 Rudolf Usselmann ////
-//// www.asics.ws ////
-//// rudi@asics.ws ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer.////
-//// ////
-//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
-//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
-//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
-//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
-//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
-//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
-//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
-//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
-//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
-//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
-//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
-//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
-//// POSSIBILITY OF SUCH DAMAGE. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-
-`timescale 1 ns/1 ps
-
-module aes_rcon(clk, kld,out,out2);
-
-input clk;
-input kld;
-
-output reg [7:0] out,out2;
-
-reg [3:0] rcnt_reg;
-wire [3:0] rcnt_next;
-
-
-assign rcnt_next = (kld) ? 0 : rcnt_reg+2;
-
-
-always @*
-begin
- out = kld ? 8'h01:frcon(rcnt_next-1);
- out2 = kld ? 8'h01:frcon(rcnt_next);
-end
-
-
-always @(posedge clk)
-begin
-
- rcnt_reg <= rcnt_next;
-/* $strobe($time,": out is %h, out2 is %h\n",out,out2);
-*/
-end
-
-
-
-function [7:0] frcon;
-input [3:0] i;
-case(i) // synopsys parallel_case
- 4'h0: frcon=8'h01; //1
- 4'h1: frcon=8'h02; //x
- 4'h2: frcon=8'h04; //x^2
- 4'h3: frcon=8'h08; //x^3
- 4'h4: frcon=8'h10; //x^4
- 4'h5: frcon=8'h20; //x^5
- 4'h6: frcon=8'h40; //x^6
- 4'h7: frcon=8'h80; //x^7
- 4'h8: frcon=8'h1b; //x^8
- 4'h9: frcon=8'h36; //x^9
- default: frcon=8'h00;
-endcase
-endfunction
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_sbox.v b/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_sbox.v
deleted file mode 100644
index 251f6bf..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/rtl/aes_sbox.v
+++ /dev/null
@@ -1,310 +0,0 @@
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// AES SBOX (ROM) ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2000-2002 Rudolf Usselmann ////
-//// www.asics.ws ////
-//// rudi@asics.ws ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer.////
-//// ////
-//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
-//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
-//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
-//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
-//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
-//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
-//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
-//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
-//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
-//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
-//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
-//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
-//// POSSIBILITY OF SUCH DAMAGE. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-
-`timescale 1 ns/1 ps
-
-
-module aes_sbox(a,d);
-input [7:0] a;
-output [7:0] d;
-reg [7:0] d;
-
-always @(a)
- case(a) // synopsys full_case parallel_case
- 8'h00: d=8'h63;
- 8'h01: d=8'h7c;
- 8'h02: d=8'h77;
- 8'h03: d=8'h7b;
- 8'h04: d=8'hf2;
- 8'h05: d=8'h6b;
- 8'h06: d=8'h6f;
- 8'h07: d=8'hc5;
- 8'h08: d=8'h30;
- 8'h09: d=8'h01;
- 8'h0a: d=8'h67;
- 8'h0b: d=8'h2b;
- 8'h0c: d=8'hfe;
- 8'h0d: d=8'hd7;
- 8'h0e: d=8'hab;
- 8'h0f: d=8'h76;
- 8'h10: d=8'hca;
- 8'h11: d=8'h82;
- 8'h12: d=8'hc9;
- 8'h13: d=8'h7d;
- 8'h14: d=8'hfa;
- 8'h15: d=8'h59;
- 8'h16: d=8'h47;
- 8'h17: d=8'hf0;
- 8'h18: d=8'had;
- 8'h19: d=8'hd4;
- 8'h1a: d=8'ha2;
- 8'h1b: d=8'haf;
- 8'h1c: d=8'h9c;
- 8'h1d: d=8'ha4;
- 8'h1e: d=8'h72;
- 8'h1f: d=8'hc0;
- 8'h20: d=8'hb7;
- 8'h21: d=8'hfd;
- 8'h22: d=8'h93;
- 8'h23: d=8'h26;
- 8'h24: d=8'h36;
- 8'h25: d=8'h3f;
- 8'h26: d=8'hf7;
- 8'h27: d=8'hcc;
- 8'h28: d=8'h34;
- 8'h29: d=8'ha5;
- 8'h2a: d=8'he5;
- 8'h2b: d=8'hf1;
- 8'h2c: d=8'h71;
- 8'h2d: d=8'hd8;
- 8'h2e: d=8'h31;
- 8'h2f: d=8'h15;
- 8'h30: d=8'h04;
- 8'h31: d=8'hc7;
- 8'h32: d=8'h23;
- 8'h33: d=8'hc3;
- 8'h34: d=8'h18;
- 8'h35: d=8'h96;
- 8'h36: d=8'h05;
- 8'h37: d=8'h9a;
- 8'h38: d=8'h07;
- 8'h39: d=8'h12;
- 8'h3a: d=8'h80;
- 8'h3b: d=8'he2;
- 8'h3c: d=8'heb;
- 8'h3d: d=8'h27;
- 8'h3e: d=8'hb2;
- 8'h3f: d=8'h75;
- 8'h40: d=8'h09;
- 8'h41: d=8'h83;
- 8'h42: d=8'h2c;
- 8'h43: d=8'h1a;
- 8'h44: d=8'h1b;
- 8'h45: d=8'h6e;
- 8'h46: d=8'h5a;
- 8'h47: d=8'ha0;
- 8'h48: d=8'h52;
- 8'h49: d=8'h3b;
- 8'h4a: d=8'hd6;
- 8'h4b: d=8'hb3;
- 8'h4c: d=8'h29;
- 8'h4d: d=8'he3;
- 8'h4e: d=8'h2f;
- 8'h4f: d=8'h84;
- 8'h50: d=8'h53;
- 8'h51: d=8'hd1;
- 8'h52: d=8'h00;
- 8'h53: d=8'hed;
- 8'h54: d=8'h20;
- 8'h55: d=8'hfc;
- 8'h56: d=8'hb1;
- 8'h57: d=8'h5b;
- 8'h58: d=8'h6a;
- 8'h59: d=8'hcb;
- 8'h5a: d=8'hbe;
- 8'h5b: d=8'h39;
- 8'h5c: d=8'h4a;
- 8'h5d: d=8'h4c;
- 8'h5e: d=8'h58;
- 8'h5f: d=8'hcf;
- 8'h60: d=8'hd0;
- 8'h61: d=8'hef;
- 8'h62: d=8'haa;
- 8'h63: d=8'hfb;
- 8'h64: d=8'h43;
- 8'h65: d=8'h4d;
- 8'h66: d=8'h33;
- 8'h67: d=8'h85;
- 8'h68: d=8'h45;
- 8'h69: d=8'hf9;
- 8'h6a: d=8'h02;
- 8'h6b: d=8'h7f;
- 8'h6c: d=8'h50;
- 8'h6d: d=8'h3c;
- 8'h6e: d=8'h9f;
- 8'h6f: d=8'ha8;
- 8'h70: d=8'h51;
- 8'h71: d=8'ha3;
- 8'h72: d=8'h40;
- 8'h73: d=8'h8f;
- 8'h74: d=8'h92;
- 8'h75: d=8'h9d;
- 8'h76: d=8'h38;
- 8'h77: d=8'hf5;
- 8'h78: d=8'hbc;
- 8'h79: d=8'hb6;
- 8'h7a: d=8'hda;
- 8'h7b: d=8'h21;
- 8'h7c: d=8'h10;
- 8'h7d: d=8'hff;
- 8'h7e: d=8'hf3;
- 8'h7f: d=8'hd2;
- 8'h80: d=8'hcd;
- 8'h81: d=8'h0c;
- 8'h82: d=8'h13;
- 8'h83: d=8'hec;
- 8'h84: d=8'h5f;
- 8'h85: d=8'h97;
- 8'h86: d=8'h44;
- 8'h87: d=8'h17;
- 8'h88: d=8'hc4;
- 8'h89: d=8'ha7;
- 8'h8a: d=8'h7e;
- 8'h8b: d=8'h3d;
- 8'h8c: d=8'h64;
- 8'h8d: d=8'h5d;
- 8'h8e: d=8'h19;
- 8'h8f: d=8'h73;
- 8'h90: d=8'h60;
- 8'h91: d=8'h81;
- 8'h92: d=8'h4f;
- 8'h93: d=8'hdc;
- 8'h94: d=8'h22;
- 8'h95: d=8'h2a;
- 8'h96: d=8'h90;
- 8'h97: d=8'h88;
- 8'h98: d=8'h46;
- 8'h99: d=8'hee;
- 8'h9a: d=8'hb8;
- 8'h9b: d=8'h14;
- 8'h9c: d=8'hde;
- 8'h9d: d=8'h5e;
- 8'h9e: d=8'h0b;
- 8'h9f: d=8'hdb;
- 8'ha0: d=8'he0;
- 8'ha1: d=8'h32;
- 8'ha2: d=8'h3a;
- 8'ha3: d=8'h0a;
- 8'ha4: d=8'h49;
- 8'ha5: d=8'h06;
- 8'ha6: d=8'h24;
- 8'ha7: d=8'h5c;
- 8'ha8: d=8'hc2;
- 8'ha9: d=8'hd3;
- 8'haa: d=8'hac;
- 8'hab: d=8'h62;
- 8'hac: d=8'h91;
- 8'had: d=8'h95;
- 8'hae: d=8'he4;
- 8'haf: d=8'h79;
- 8'hb0: d=8'he7;
- 8'hb1: d=8'hc8;
- 8'hb2: d=8'h37;
- 8'hb3: d=8'h6d;
- 8'hb4: d=8'h8d;
- 8'hb5: d=8'hd5;
- 8'hb6: d=8'h4e;
- 8'hb7: d=8'ha9;
- 8'hb8: d=8'h6c;
- 8'hb9: d=8'h56;
- 8'hba: d=8'hf4;
- 8'hbb: d=8'hea;
- 8'hbc: d=8'h65;
- 8'hbd: d=8'h7a;
- 8'hbe: d=8'hae;
- 8'hbf: d=8'h08;
- 8'hc0: d=8'hba;
- 8'hc1: d=8'h78;
- 8'hc2: d=8'h25;
- 8'hc3: d=8'h2e;
- 8'hc4: d=8'h1c;
- 8'hc5: d=8'ha6;
- 8'hc6: d=8'hb4;
- 8'hc7: d=8'hc6;
- 8'hc8: d=8'he8;
- 8'hc9: d=8'hdd;
- 8'hca: d=8'h74;
- 8'hcb: d=8'h1f;
- 8'hcc: d=8'h4b;
- 8'hcd: d=8'hbd;
- 8'hce: d=8'h8b;
- 8'hcf: d=8'h8a;
- 8'hd0: d=8'h70;
- 8'hd1: d=8'h3e;
- 8'hd2: d=8'hb5;
- 8'hd3: d=8'h66;
- 8'hd4: d=8'h48;
- 8'hd5: d=8'h03;
- 8'hd6: d=8'hf6;
- 8'hd7: d=8'h0e;
- 8'hd8: d=8'h61;
- 8'hd9: d=8'h35;
- 8'hda: d=8'h57;
- 8'hdb: d=8'hb9;
- 8'hdc: d=8'h86;
- 8'hdd: d=8'hc1;
- 8'hde: d=8'h1d;
- 8'hdf: d=8'h9e;
- 8'he0: d=8'he1;
- 8'he1: d=8'hf8;
- 8'he2: d=8'h98;
- 8'he3: d=8'h11;
- 8'he4: d=8'h69;
- 8'he5: d=8'hd9;
- 8'he6: d=8'h8e;
- 8'he7: d=8'h94;
- 8'he8: d=8'h9b;
- 8'he9: d=8'h1e;
- 8'hea: d=8'h87;
- 8'heb: d=8'he9;
- 8'hec: d=8'hce;
- 8'hed: d=8'h55;
- 8'hee: d=8'h28;
- 8'hef: d=8'hdf;
- 8'hf0: d=8'h8c;
- 8'hf1: d=8'ha1;
- 8'hf2: d=8'h89;
- 8'hf3: d=8'h0d;
- 8'hf4: d=8'hbf;
- 8'hf5: d=8'he6;
- 8'hf6: d=8'h42;
- 8'hf7: d=8'h68;
- 8'hf8: d=8'h41;
- 8'hf9: d=8'h99;
- 8'hfa: d=8'h2d;
- 8'hfb: d=8'h0f;
- 8'hfc: d=8'hb0;
- 8'hfd: d=8'h54;
- 8'hfe: d=8'hbb;
- 8'hff: d=8'h16;
- endcase
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/sim/bench.v b/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/sim/bench.v
deleted file mode 100644
index e2411d7..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/aes_5cycle_2stage/slpp_unit/work/sim/bench.v
+++ /dev/null
@@ -1,509 +0,0 @@
-
-///////////////////////////////////////////////////////////////////
-//// ////
-//// AES Test Bench ////
-//// ////
-//// ////
-//// Author: Rudolf Usselmann ////
-//// rudi@asics.ws ////
-//// ////
-//// ////
-//// Downloaded from: http://www.opencores.org/cores/aes_core/ ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2000-2002 Rudolf Usselmann ////
-//// www.asics.ws ////
-//// rudi@asics.ws ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer.////
-//// ////
-//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
-//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
-//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
-//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
-//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
-//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
-//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
-//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
-//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
-//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
-//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
-//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
-//// POSSIBILITY OF SUCH DAMAGE. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-
-// CVS Log
-//
-// $Id: test_bench_top.v,v 1.1.1.1 2005/08/03 14:59:38 kesava Exp $
-//
-// $Date: 2005/08/03 14:59:38 $
-// $Revision: 1.1.1.1 $
-// $Author: kesava $
-// $Locker: $
-// $State: Exp $
-//
-// Change History:
-// $Log: test_bench_top.v,v $
-// Revision 1.1.1.1 2005/08/03 14:59:38 kesava
-// ssi3Aug05
-//
-// Revision 1.2 2002/11/12 16:10:12 rudi
-//
-// Improved test bench, added missing timescale file.
-//
-// Revision 1.1.1.1 2002/11/09 11:22:56 rudi
-// Initial Checkin
-//
-//
-//
-//
-//
-//
-`timescale 1ns/1ps
-//`include "timescale.v"
-//`delay_mode_path
-module testbench;
-
- reg clk;
- reg rst;
-
- reg [383:0] tv[512:0]; // Test vectors
- wire [383:0] tmp;
- reg kld;
- wire [127:0] key, plain, ciph;
- wire [127:0] text_in;
- wire [127:0] text_out;
- wire [127:0] text_out2;
- reg [127:0] text_exp;
- wire done, done2;
- integer n, error_cnt;
-
-
- initial
- begin
- $display("\n\n");
- $display("*****************************************************");
- $display("* AES Test bench ...");
- $display("*****************************************************");
- $display("\n");
-
- // while(1)
- begin
- kld = 0;
- rst = 0;
- error_cnt = 0;
- repeat(4) @(posedge clk);
- rst = 1;
- repeat(20) @(posedge clk);
-
- $display("");
- $display("");
- $display("Started random test ...");
-
- tv[0]= 384'h00000000000000000000000000000000f34481ec3cc627bacd5dc3fb08f273e60336763e966d92595a567cc9ce537f5e;
- tv[1]= 384'h000000000000000000000000000000009798c4640bad75c7c3227db910174e72a9a1631bf4996954ebc093957b234589;
- tv[2]= 384'h0000000000000000000000000000000096ab5c2ff612d9dfaae8c31f30c42168ff4f8391a6a40ca5b25d23bedd44a597;
- tv[3]= 384'h000000000000000000000000000000006a118a874519e64e9963798a503f1d35dc43be40be0e53712f7e2bf5ca707209;
- tv[4]= 384'h00000000000000000000000000000000cb9fceec81286ca3e989bd979b0cb28492beedab1895a94faa69b632e5cc47ce;
- tv[5]= 384'h00000000000000000000000000000000b26aeb1874e47ca8358ff22378f09144459264f4798f6a78bacb89c15ed3d601;
- tv[6]= 384'h0000000000000000000000000000000058c8e00b2631686d54eab84b91f0aca108a4e2efec8a8e3312ca7460b9040bbf;
- tv[7]= 384'h10a58869d74be5a374cf867cfb473859000000000000000000000000000000006d251e6944b051e04eaa6fb4dbf78465;
- tv[8]= 384'hcaea65cdbb75e9169ecd22ebe6e54675000000000000000000000000000000006e29201190152df4ee058139def610bb;
- tv[9]= 384'ha2e2fa9baf7d20822ca9f0542f764a4100000000000000000000000000000000c3b44b95d9d2f25670eee9a0de099fa3;
- tv[10]= 384'hb6364ac4e1de1e285eaf144a2415f7a0000000000000000000000000000000005d9b05578fc944b3cf1ccf0e746cd581;
- tv[11]= 384'h64cf9c7abc50b888af65f49d521944b200000000000000000000000000000000f7efc89d5dba578104016ce5ad659c05;
- tv[12]= 384'h47d6742eefcc0465dc96355e851b64d9000000000000000000000000000000000306194f666d183624aa230a8b264ae7;
- tv[13]= 384'h3eb39790678c56bee34bbcdeccf6cdb500000000000000000000000000000000858075d536d79ccee571f7d7204b1f67;
- tv[14]= 384'h64110a924f0743d500ccadae72c134270000000000000000000000000000000035870c6a57e9e92314bcb8087cde72ce;
- tv[15]= 384'h18d8126516f8a12ab1a36d9f04d68e51000000000000000000000000000000006c68e9be5ec41e22c825b7c7affb4363;
- tv[16]= 384'hf530357968578480b398a3c251cd109300000000000000000000000000000000f5df39990fc688f1b07224cc03e86cea;
- tv[17]= 384'hda84367f325d42d601b4326964802e8e00000000000000000000000000000000bba071bcb470f8f6586e5d3add18bc66;
- tv[18]= 384'he37b1c6aa2846f6fdb413f238b089f230000000000000000000000000000000043c9f7e62f5d288bb27aa40ef8fe1ea8;
- tv[19]= 384'h6c002b682483e0cabcc731c253be5674000000000000000000000000000000003580d19cff44f1014a7c966a69059de5;
- tv[20]= 384'h143ae8ed6555aba96110ab58893a8ae100000000000000000000000000000000806da864dd29d48deafbe764f8202aef;
- tv[21]= 384'hb69418a85332240dc82492353956ae0c00000000000000000000000000000000a303d940ded8f0baff6f75414cac5243;
- tv[22]= 384'h71b5c08a1993e1362e4d0ce9b22b78d500000000000000000000000000000000c2dabd117f8a3ecabfbb11d12194d9d0;
- tv[23]= 384'he234cdca2606b81f29408d5f6da2120600000000000000000000000000000000fff60a4740086b3b9c56195b98d91a7b;
- tv[24]= 384'h13237c49074a3da078dc1d828bb78c6f000000000000000000000000000000008146a08e2357f0caa30ca8c94d1a0544;
- tv[25]= 384'h3071a2a48fe6cbd04f1a129098e308f8000000000000000000000000000000004b98e06d356deb07ebb824e5713f7be3;
- tv[26]= 384'h90f42ec0f68385f2ffc5dfc03a654dce000000000000000000000000000000007a20a53d460fc9ce0423a7a0764c6cf2;
- tv[27]= 384'hfebd9a24d8b65c1c787d50a4ed3619a900000000000000000000000000000000f4a70d8af877f9b02b4c40df57d45b17;
- tv[28]= 384'h80000000000000000000000000000000000000000000000000000000000000000edd33d3c621e546455bd8ba1418bec8;
- tv[29]= 384'hc0000000000000000000000000000000000000000000000000000000000000004bc3f883450c113c64ca42e1112a9e87;
- tv[30]= 384'he00000000000000000000000000000000000000000000000000000000000000072a1da770f5d7ac4c9ef94d822affd97;
- tv[31]= 384'hf000000000000000000000000000000000000000000000000000000000000000970014d634e2b7650777e8e84d03ccd8;
- tv[32]= 384'hf800000000000000000000000000000000000000000000000000000000000000f17e79aed0db7e279e955b5f493875a7;
- tv[33]= 384'hfc000000000000000000000000000000000000000000000000000000000000009ed5a75136a940d0963da379db4af26a;
- tv[34]= 384'hfe00000000000000000000000000000000000000000000000000000000000000c4295f83465c7755e8fa364bac6a7ea5;
- tv[35]= 384'hff00000000000000000000000000000000000000000000000000000000000000b1d758256b28fd850ad4944208cf1155;
- tv[36]= 384'hff8000000000000000000000000000000000000000000000000000000000000042ffb34c743de4d88ca38011c990890b;
- tv[37]= 384'hffc00000000000000000000000000000000000000000000000000000000000009958f0ecea8b2172c0c1995f9182c0f3;
- tv[38]= 384'hffe0000000000000000000000000000000000000000000000000000000000000956d7798fac20f82a8823f984d06f7f5;
- tv[39]= 384'hfff0000000000000000000000000000000000000000000000000000000000000a01bf44f2d16be928ca44aaf7b9b106b;
- tv[40]= 384'hfff8000000000000000000000000000000000000000000000000000000000000b5f1a33e50d40d103764c76bd4c6b6f8;
- tv[41]= 384'hfffc0000000000000000000000000000000000000000000000000000000000002637050c9fc0d4817e2d69de878aee8d;
- tv[42]= 384'hfffe000000000000000000000000000000000000000000000000000000000000113ecbe4a453269a0dd26069467fb5b5;
- tv[43]= 384'hffff00000000000000000000000000000000000000000000000000000000000097d0754fe68f11b9e375d070a608c884;
- tv[44]= 384'hffff800000000000000000000000000000000000000000000000000000000000c6a0b3e998d05068a5399778405200b4;
- tv[45]= 384'hffffc00000000000000000000000000000000000000000000000000000000000df556a33438db87bc41b1752c55e5e49;
- tv[46]= 384'hffffe0000000000000000000000000000000000000000000000000000000000090fb128d3a1af6e548521bb962bf1f05;
- tv[47]= 384'hfffff0000000000000000000000000000000000000000000000000000000000026298e9c1db517c215fadfb7d2a8d691;
- tv[48]= 384'hfffff80000000000000000000000000000000000000000000000000000000000a6cb761d61f8292d0df393a279ad0380;
- tv[49]= 384'hfffffc000000000000000000000000000000000000000000000000000000000012acd89b13cd5f8726e34d44fd486108;
- tv[50]= 384'hfffffe000000000000000000000000000000000000000000000000000000000095b1703fc57ba09fe0c3580febdd7ed4;
- tv[51]= 384'hffffff0000000000000000000000000000000000000000000000000000000000de11722d893e9f9121c381becc1da59a;
- tv[52]= 384'hffffff80000000000000000000000000000000000000000000000000000000006d114ccb27bf391012e8974c546d9bf2;
- tv[53]= 384'hffffffc0000000000000000000000000000000000000000000000000000000005ce37e17eb4646ecfac29b9cc38d9340;
- tv[54]= 384'hffffffe00000000000000000000000000000000000000000000000000000000018c1b6e2157122056d0243d8a165cddb;
- tv[55]= 384'hfffffff00000000000000000000000000000000000000000000000000000000099693e6a59d1366c74d823562d7e1431;
- tv[56]= 384'hfffffff8000000000000000000000000000000000000000000000000000000006c7c64dc84a8bba758ed17eb025a57e3;
- tv[57]= 384'hfffffffc00000000000000000000000000000000000000000000000000000000e17bc79f30eaab2fac2cbbe3458d687a;
- tv[58]= 384'hfffffffe000000000000000000000000000000000000000000000000000000001114bc2028009b923f0b01915ce5e7c4;
- tv[59]= 384'hffffffff000000000000000000000000000000000000000000000000000000009c28524a16a1e1c1452971caa8d13476;
- tv[60]= 384'hffffffff80000000000000000000000000000000000000000000000000000000ed62e16363638360fdd6ad62112794f0;
- tv[61]= 384'hffffffffc00000000000000000000000000000000000000000000000000000005a8688f0b2a2c16224c161658ffd4044;
- tv[62]= 384'hffffffffe000000000000000000000000000000000000000000000000000000023f710842b9bb9c32f26648c786807ca;
- tv[63]= 384'hfffffffff000000000000000000000000000000000000000000000000000000044a98bf11e163f632c47ec6a49683a89;
- tv[64]= 384'hfffffffff80000000000000000000000000000000000000000000000000000000f18aff94274696d9b61848bd50ac5e5;
- tv[65]= 384'hfffffffffc00000000000000000000000000000000000000000000000000000082408571c3e2424540207f833b6dda69;
- tv[66]= 384'hfffffffffe000000000000000000000000000000000000000000000000000000303ff996947f0c7d1f43c8f3027b9b75;
- tv[67]= 384'hffffffffff0000000000000000000000000000000000000000000000000000007df4daf4ad29a3615a9b6ece5c99518a;
- tv[68]= 384'hffffffffff800000000000000000000000000000000000000000000000000000c72954a48d0774db0b4971c526260415;
- tv[69]= 384'hffffffffffc000000000000000000000000000000000000000000000000000001df9b76112dc6531e07d2cfda04411f0;
- tv[70]= 384'hffffffffffe000000000000000000000000000000000000000000000000000008e4d8e699119e1fc87545a647fb1d34f;
- tv[71]= 384'hfffffffffff00000000000000000000000000000000000000000000000000000e6c4807ae11f36f091c57d9fb68548d1;
- tv[72]= 384'hfffffffffff800000000000000000000000000000000000000000000000000008ebf73aad49c82007f77a5c1ccec6ab4;
- tv[73]= 384'hfffffffffffc00000000000000000000000000000000000000000000000000004fb288cc2040049001d2c7585ad123fc;
- tv[74]= 384'hfffffffffffe000000000000000000000000000000000000000000000000000004497110efb9dceb13e2b13fb4465564;
- tv[75]= 384'hffffffffffff000000000000000000000000000000000000000000000000000075550e6cb5a88e49634c9ab69eda0430;
- tv[76]= 384'hffffffffffff8000000000000000000000000000000000000000000000000000b6768473ce9843ea66a81405dd50b345;
- tv[77]= 384'hffffffffffffc000000000000000000000000000000000000000000000000000cb2f430383f9084e03a653571e065de6;
- tv[78]= 384'hffffffffffffe000000000000000000000000000000000000000000000000000ff4e66c07bae3e79fb7d210847a3b0ba;
- tv[79]= 384'hfffffffffffff0000000000000000000000000000000000000000000000000007b90785125505fad59b13c186dd66ce3;
- tv[80]= 384'hfffffffffffff8000000000000000000000000000000000000000000000000008b527a6aebdaec9eaef8eda2cb7783e5;
- tv[81]= 384'hfffffffffffffc0000000000000000000000000000000000000000000000000043fdaf53ebbc9880c228617d6a9b548b;
- tv[82]= 384'hfffffffffffffe0000000000000000000000000000000000000000000000000053786104b9744b98f052c46f1c850d0b;
- tv[83]= 384'hffffffffffffff00000000000000000000000000000000000000000000000000b5ab3013dd1e61df06cbaf34ca2aee78;
- tv[84]= 384'hffffffffffffff800000000000000000000000000000000000000000000000007470469be9723030fdcc73a8cd4fbb10;
- tv[85]= 384'hffffffffffffffc0000000000000000000000000000000000000000000000000a35a63f5343ebe9ef8167bcb48ad122e;
- tv[86]= 384'hffffffffffffffe0000000000000000000000000000000000000000000000000fd8687f0757a210e9fdf181204c30863;
- tv[87]= 384'hfffffffffffffff00000000000000000000000000000000000000000000000007a181e84bd5457d26a88fbae96018fb0;
- tv[88]= 384'hfffffffffffffff8000000000000000000000000000000000000000000000000653317b9362b6f9b9e1a580e68d494b5;
- tv[89]= 384'hfffffffffffffffc000000000000000000000000000000000000000000000000995c9dc0b689f03c45867b5faa5c18d1;
- tv[90]= 384'hfffffffffffffffe00000000000000000000000000000000000000000000000077a4d96d56dda398b9aabecfc75729fd;
- tv[91]= 384'hffffffffffffffff00000000000000000000000000000000000000000000000084be19e053635f09f2665e7bae85b42d;
- tv[92]= 384'hffffffffffffffff80000000000000000000000000000000000000000000000032cd652842926aea4aa6137bb2be2b5e;
- tv[93]= 384'hffffffffffffffffc00000000000000000000000000000000000000000000000493d4a4f38ebb337d10aa84e9171a554;
- tv[94]= 384'hffffffffffffffffe00000000000000000000000000000000000000000000000d9bff7ff454b0ec5a4a2a69566e2cb84;
- tv[95]= 384'hfffffffffffffffff000000000000000000000000000000000000000000000003535d565ace3f31eb249ba2cc6765d7a;
- tv[96]= 384'hfffffffffffffffff80000000000000000000000000000000000000000000000f60e91fc3269eecf3231c6e9945697c6;
- tv[97]= 384'hfffffffffffffffffc0000000000000000000000000000000000000000000000ab69cfadf51f8e604d9cc37182f6635a;
- tv[98]= 384'hfffffffffffffffffe00000000000000000000000000000000000000000000007866373f24a0b6ed56e0d96fcdafb877;
- tv[99]= 384'hffffffffffffffffff00000000000000000000000000000000000000000000001ea448c2aac954f5d812e9d78494446a;
- tv[100]= 384'hffffffffffffffffff8000000000000000000000000000000000000000000000acc5599dd8ac02239a0fef4a36dd1668;
- tv[101]= 384'hffffffffffffffffffc000000000000000000000000000000000000000000000d8764468bb103828cf7e1473ce895073;
- tv[102]= 384'hffffffffffffffffffe0000000000000000000000000000000000000000000001b0d02893683b9f180458e4aa6b73982;
- tv[103]= 384'hfffffffffffffffffff00000000000000000000000000000000000000000000096d9b017d302df410a937dcdb8bb6e43;
- tv[104]= 384'hfffffffffffffffffff800000000000000000000000000000000000000000000ef1623cc44313cff440b1594a7e21cc6;
- tv[105]= 384'hfffffffffffffffffffc00000000000000000000000000000000000000000000284ca2fa35807b8b0ae4d19e11d7dbd7;
- tv[106]= 384'hfffffffffffffffffffe00000000000000000000000000000000000000000000f2e976875755f9401d54f36e2a23a594;
- tv[107]= 384'hffffffffffffffffffff00000000000000000000000000000000000000000000ec198a18e10e532403b7e20887c8dd80;
- tv[108]= 384'hffffffffffffffffffff80000000000000000000000000000000000000000000545d50ebd919e4a6949d96ad47e46a80;
- tv[109]= 384'hffffffffffffffffffffc0000000000000000000000000000000000000000000dbdfb527060e0a71009c7bb0c68f1d44;
- tv[110]= 384'hffffffffffffffffffffe00000000000000000000000000000000000000000009cfa1322ea33da2173a024f2ff0d896d;
- tv[111]= 384'hfffffffffffffffffffff00000000000000000000000000000000000000000008785b1a75b0f3bd958dcd0e29318c521;
- tv[112]= 384'hfffffffffffffffffffff800000000000000000000000000000000000000000038f67b9e98e4a97b6df030a9fcdd0104;
- tv[113]= 384'hfffffffffffffffffffffc000000000000000000000000000000000000000000192afffb2c880e82b05926d0fc6c448b;
- tv[114]= 384'hfffffffffffffffffffffe0000000000000000000000000000000000000000006a7980ce7b105cf530952d74daaf798c;
- tv[115]= 384'hffffffffffffffffffffff000000000000000000000000000000000000000000ea3695e1351b9d6858bd958cf513ef6c;
- tv[116]= 384'hffffffffffffffffffffff8000000000000000000000000000000000000000006da0490ba0ba0343b935681d2cce5ba1;
- tv[117]= 384'hffffffffffffffffffffffc00000000000000000000000000000000000000000f0ea23af08534011c60009ab29ada2f1;
- tv[118]= 384'hffffffffffffffffffffffe00000000000000000000000000000000000000000ff13806cf19cc38721554d7c0fcdcd4b;
- tv[119]= 384'hfffffffffffffffffffffff000000000000000000000000000000000000000006838af1f4f69bae9d85dd188dcdf0688;
- tv[120]= 384'hfffffffffffffffffffffff8000000000000000000000000000000000000000036cf44c92d550bfb1ed28ef583ddf5d7;
- tv[121]= 384'hfffffffffffffffffffffffc0000000000000000000000000000000000000000d06e3195b5376f109d5c4ec6c5d62ced;
- tv[122]= 384'hfffffffffffffffffffffffe0000000000000000000000000000000000000000c440de014d3d610707279b13242a5c36;
- tv[123]= 384'hffffffffffffffffffffffff0000000000000000000000000000000000000000f0c5c6ffa5e0bd3a94c88f6b6f7c16b9;
- tv[124]= 384'hffffffffffffffffffffffff80000000000000000000000000000000000000003e40c3901cd7effc22bffc35dee0b4d9;
- tv[125]= 384'hffffffffffffffffffffffffc000000000000000000000000000000000000000b63305c72bedfab97382c406d0c49bc6;
- tv[126]= 384'hffffffffffffffffffffffffe00000000000000000000000000000000000000036bbaab22a6bd4925a99a2b408d2dbae;
- tv[127]= 384'hfffffffffffffffffffffffff000000000000000000000000000000000000000307c5b8fcd0533ab98bc51e27a6ce461;
- tv[128]= 384'hfffffffffffffffffffffffff800000000000000000000000000000000000000829c04ff4c07513c0b3ef05c03e337b5;
- tv[129]= 384'hfffffffffffffffffffffffffc00000000000000000000000000000000000000f17af0e895dda5eb98efc68066e84c54;
- tv[130]= 384'hfffffffffffffffffffffffffe00000000000000000000000000000000000000277167f3812afff1ffacb4a934379fc3;
- tv[131]= 384'hffffffffffffffffffffffffff000000000000000000000000000000000000002cb1dc3a9c72972e425ae2ef3eb597cd;
- tv[132]= 384'hffffffffffffffffffffffffff8000000000000000000000000000000000000036aeaa3a213e968d4b5b679d3a2c97fe;
- tv[133]= 384'hffffffffffffffffffffffffffc00000000000000000000000000000000000009241daca4fdd034a82372db50e1a0f3f;
- tv[134]= 384'hffffffffffffffffffffffffffe0000000000000000000000000000000000000c14574d9cd00cf2b5a7f77e53cd57885;
- tv[135]= 384'hfffffffffffffffffffffffffff0000000000000000000000000000000000000793de39236570aba83ab9b737cb521c9;
- tv[136]= 384'hfffffffffffffffffffffffffff800000000000000000000000000000000000016591c0f27d60e29b85a96c33861a7ef;
- tv[137]= 384'hfffffffffffffffffffffffffffc00000000000000000000000000000000000044fb5c4d4f5cb79be5c174a3b1c97348;
- tv[138]= 384'hfffffffffffffffffffffffffffe000000000000000000000000000000000000674d2b61633d162be59dde04222f4740;
- tv[139]= 384'hffffffffffffffffffffffffffff000000000000000000000000000000000000b4750ff263a65e1f9e924ccfd98f3e37;
- tv[140]= 384'hffffffffffffffffffffffffffff80000000000000000000000000000000000062d0662d6eaeddedebae7f7ea3a4f6b6;
- tv[141]= 384'hffffffffffffffffffffffffffffc0000000000000000000000000000000000070c46bb30692be657f7eaa93ebad9897;
- tv[142]= 384'hffffffffffffffffffffffffffffe00000000000000000000000000000000000323994cfb9da285a5d9642e1759b224a;
- tv[143]= 384'hfffffffffffffffffffffffffffff000000000000000000000000000000000001dbf57877b7b17385c85d0b54851e371;
- tv[144]= 384'hfffffffffffffffffffffffffffff80000000000000000000000000000000000dfa5c097cdc1532ac071d57b1d28d1bd;
- tv[145]= 384'hfffffffffffffffffffffffffffffc00000000000000000000000000000000003a0c53fa37311fc10bd2a9981f513174;
- tv[146]= 384'hfffffffffffffffffffffffffffffe0000000000000000000000000000000000ba4f970c0a25c41814bdae2e506be3b4;
- tv[147]= 384'hffffffffffffffffffffffffffffff00000000000000000000000000000000002dce3acb727cd13ccd76d425ea56e4f6;
- tv[148]= 384'hffffffffffffffffffffffffffffff80000000000000000000000000000000005160474d504b9b3eefb68d35f245f4b3;
- tv[149]= 384'hffffffffffffffffffffffffffffffc00000000000000000000000000000000041a8a947766635dec37553d9a6c0cbb7;
- tv[150]= 384'hffffffffffffffffffffffffffffffe00000000000000000000000000000000025d6cfe6881f2bf497dd14cd4ddf445b;
- tv[151]= 384'hfffffffffffffffffffffffffffffff00000000000000000000000000000000041c78c135ed9e98c096640647265da1e;
- tv[152]= 384'hfffffffffffffffffffffffffffffff8000000000000000000000000000000005a4d404d8917e353e92a21072c3b2305;
- tv[153]= 384'hfffffffffffffffffffffffffffffffc0000000000000000000000000000000002bc96846b3fdc71643f384cd3cc3eaf;
- tv[154]= 384'hfffffffffffffffffffffffffffffffe000000000000000000000000000000009ba4a9143f4e5d4048521c4f8877d88e;
- tv[155]= 384'hffffffffffffffffffffffffffffffff00000000000000000000000000000000a1f6258c877d5fcd8964484538bfc92c;
- tv[156]= 384'h00000000000000000000000000000000800000000000000000000000000000003ad78e726c1ec02b7ebfe92b23d9ec34;
- tv[157]= 384'h00000000000000000000000000000000c0000000000000000000000000000000aae5939c8efdf2f04e60b9fe7117b2c2;
- tv[158]= 384'h00000000000000000000000000000000e0000000000000000000000000000000f031d4d74f5dcbf39daaf8ca3af6e527;
- tv[159]= 384'h00000000000000000000000000000000f000000000000000000000000000000096d9fd5cc4f07441727df0f33e401a36;
- tv[160]= 384'h00000000000000000000000000000000f800000000000000000000000000000030ccdb044646d7e1f3ccea3dca08b8c0;
- tv[161]= 384'h00000000000000000000000000000000fc00000000000000000000000000000016ae4ce5042a67ee8e177b7c587ecc82;
- tv[162]= 384'h00000000000000000000000000000000fe000000000000000000000000000000b6da0bb11a23855d9c5cb1b4c6412e0a;
- tv[163]= 384'h00000000000000000000000000000000ff000000000000000000000000000000db4f1aa530967d6732ce4715eb0ee24b;
- tv[164]= 384'h00000000000000000000000000000000ff800000000000000000000000000000a81738252621dd180a34f3455b4baa2f;
- tv[165]= 384'h00000000000000000000000000000000ffc0000000000000000000000000000077e2b508db7fd89234caf7939ee5621a;
- tv[166]= 384'h00000000000000000000000000000000ffe00000000000000000000000000000b8499c251f8442ee13f0933b688fcd19;
- tv[167]= 384'h00000000000000000000000000000000fff00000000000000000000000000000965135f8a81f25c9d630b17502f68e53;
- tv[168]= 384'h00000000000000000000000000000000fff800000000000000000000000000008b87145a01ad1c6cede995ea3670454f;
- tv[169]= 384'h00000000000000000000000000000000fffc00000000000000000000000000008eae3b10a0c8ca6d1d3b0fa61e56b0b2;
- tv[170]= 384'h00000000000000000000000000000000fffe000000000000000000000000000064b4d629810fda6bafdf08f3b0d8d2c5;
- tv[171]= 384'h00000000000000000000000000000000ffff0000000000000000000000000000d7e5dbd3324595f8fdc7d7c571da6c2a;
- tv[172]= 384'h00000000000000000000000000000000ffff8000000000000000000000000000f3f72375264e167fca9de2c1527d9606;
- tv[173]= 384'h00000000000000000000000000000000ffffc0000000000000000000000000008ee79dd4f401ff9b7ea945d86666c13b;
- tv[174]= 384'h00000000000000000000000000000000ffffe000000000000000000000000000dd35cea2799940b40db3f819cb94c08b;
- tv[175]= 384'h00000000000000000000000000000000fffff0000000000000000000000000006941cb6b3e08c2b7afa581ebdd607b87;
- tv[176]= 384'h00000000000000000000000000000000fffff8000000000000000000000000002c20f439f6bb097b29b8bd6d99aad799;
- tv[177]= 384'h00000000000000000000000000000000fffffc00000000000000000000000000625d01f058e565f77ae86378bd2c49b3;
- tv[178]= 384'h00000000000000000000000000000000fffffe00000000000000000000000000c0b5fd98190ef45fbb4301438d095950;
- tv[179]= 384'h00000000000000000000000000000000ffffff0000000000000000000000000013001ff5d99806efd25da34f56be854b;
- tv[180]= 384'h00000000000000000000000000000000ffffff800000000000000000000000003b594c60f5c8277a5113677f94208d82;
- tv[181]= 384'h00000000000000000000000000000000ffffffc0000000000000000000000000e9c0fc1818e4aa46bd2e39d638f89e05;
- tv[182]= 384'h00000000000000000000000000000000ffffffe0000000000000000000000000f8023ee9c3fdc45a019b4e985c7e1a54;
- tv[183]= 384'h00000000000000000000000000000000fffffff000000000000000000000000035f40182ab4662f3023baec1ee796b57;
- tv[184]= 384'h00000000000000000000000000000000fffffff80000000000000000000000003aebbad7303649b4194a6945c6cc3694;
- tv[185]= 384'h00000000000000000000000000000000fffffffc000000000000000000000000a2124bea53ec2834279bed7f7eb0f938;
- tv[186]= 384'h00000000000000000000000000000000fffffffe000000000000000000000000b9fb4399fa4facc7309e14ec98360b0a;
- tv[187]= 384'h00000000000000000000000000000000ffffffff000000000000000000000000c26277437420c5d634f715aea81a9132;
- tv[188]= 384'h00000000000000000000000000000000ffffffff800000000000000000000000171a0e1b2dd424f0e089af2c4c10f32f;
- tv[189]= 384'h00000000000000000000000000000000ffffffffc000000000000000000000007cadbe402d1b208fe735edce00aee7ce;
- tv[190]= 384'h00000000000000000000000000000000ffffffffe0000000000000000000000043b02ff929a1485af6f5c6d6558baa0f;
- tv[191]= 384'h00000000000000000000000000000000fffffffff00000000000000000000000092faacc9bf43508bf8fa8613ca75dea;
- tv[192]= 384'h00000000000000000000000000000000fffffffff80000000000000000000000cb2bf8280f3f9742c7ed513fe802629c;
- tv[193]= 384'h00000000000000000000000000000000fffffffffc0000000000000000000000215a41ee442fa992a6e323986ded3f68;
- tv[194]= 384'h00000000000000000000000000000000fffffffffe0000000000000000000000f21e99cf4f0f77cea836e11a2fe75fb1;
- tv[195]= 384'h00000000000000000000000000000000ffffffffff000000000000000000000095e3a0ca9079e646331df8b4e70d2cd6;
- tv[196]= 384'h00000000000000000000000000000000ffffffffff80000000000000000000004afe7f120ce7613f74fc12a01a828073;
- tv[197]= 384'h00000000000000000000000000000000ffffffffffc000000000000000000000827f000e75e2c8b9d479beed913fe678;
- tv[198]= 384'h00000000000000000000000000000000ffffffffffe00000000000000000000035830c8e7aaefe2d30310ef381cbf691;
- tv[199]= 384'h00000000000000000000000000000000fffffffffff000000000000000000000191aa0f2c8570144f38657ea4085ebe5;
- tv[200]= 384'h00000000000000000000000000000000fffffffffff80000000000000000000085062c2c909f15d9269b6c18ce99c4f0;
- tv[201]= 384'h00000000000000000000000000000000fffffffffffc00000000000000000000678034dc9e41b5a560ed239eeab1bc78;
- tv[202]= 384'h00000000000000000000000000000000fffffffffffe00000000000000000000c2f93a4ce5ab6d5d56f1b93cf19911c1;
- tv[203]= 384'h00000000000000000000000000000000ffffffffffff000000000000000000001c3112bcb0c1dcc749d799743691bf82;
- tv[204]= 384'h00000000000000000000000000000000ffffffffffff8000000000000000000000c55bd75c7f9c881989d3ec1911c0d4;
- tv[205]= 384'h00000000000000000000000000000000ffffffffffffc0000000000000000000ea2e6b5ef182b7dff3629abd6a12045f;
- tv[206]= 384'h00000000000000000000000000000000ffffffffffffe000000000000000000022322327e01780b17397f24087f8cc6f;
- tv[207]= 384'h00000000000000000000000000000000fffffffffffff0000000000000000000c9cacb5cd11692c373b2411768149ee7;
- tv[208]= 384'h00000000000000000000000000000000fffffffffffff8000000000000000000a18e3dbbca577860dab6b80da3139256;
- tv[209]= 384'h00000000000000000000000000000000fffffffffffffc00000000000000000079b61c37bf328ecca8d743265a3d425c;
- tv[210]= 384'h00000000000000000000000000000000fffffffffffffe000000000000000000d2d99c6bcc1f06fda8e27e8ae3f1ccc7;
- tv[211]= 384'h00000000000000000000000000000000ffffffffffffff0000000000000000001bfd4b91c701fd6b61b7f997829d663b;
- tv[212]= 384'h00000000000000000000000000000000ffffffffffffff80000000000000000011005d52f25f16bdc9545a876a63490a;
- tv[213]= 384'h00000000000000000000000000000000ffffffffffffffc000000000000000003a4d354f02bb5a5e47d39666867f246a;
- tv[214]= 384'h00000000000000000000000000000000ffffffffffffffe00000000000000000d451b8d6e1e1a0ebb155fbbf6e7b7dc3;
- tv[215]= 384'h00000000000000000000000000000000fffffffffffffff000000000000000006898d4f42fa7ba6a10ac05e87b9f2080;
- tv[216]= 384'h00000000000000000000000000000000fffffffffffffff80000000000000000b611295e739ca7d9b50f8e4c0e754a3f;
- tv[217]= 384'h00000000000000000000000000000000fffffffffffffffc00000000000000007d33fc7d8abe3ca1936759f8f5deaf20;
- tv[218]= 384'h00000000000000000000000000000000fffffffffffffffe00000000000000003b5e0f566dc96c298f0c12637539b25c;
- tv[219]= 384'h00000000000000000000000000000000ffffffffffffffff0000000000000000f807c3e7985fe0f5a50e2cdb25c5109e;
- tv[220]= 384'h00000000000000000000000000000000ffffffffffffffff800000000000000041f992a856fb278b389a62f5d274d7e9;
- tv[221]= 384'h00000000000000000000000000000000ffffffffffffffffc00000000000000010d3ed7a6fe15ab4d91acbc7d0767ab1;
- tv[222]= 384'h00000000000000000000000000000000ffffffffffffffffe00000000000000021feecd45b2e675973ac33bf0c5424fc;
- tv[223]= 384'h00000000000000000000000000000000fffffffffffffffff0000000000000001480cb3955ba62d09eea668f7c708817;
- tv[224]= 384'h00000000000000000000000000000000fffffffffffffffff80000000000000066404033d6b72b609354d5496e7eb511;
- tv[225]= 384'h00000000000000000000000000000000fffffffffffffffffc000000000000001c317a220a7d700da2b1e075b00266e1;
- tv[226]= 384'h00000000000000000000000000000000fffffffffffffffffe00000000000000ab3b89542233f1271bf8fd0c0f403545;
- tv[227]= 384'h00000000000000000000000000000000ffffffffffffffffff00000000000000d93eae966fac46dca927d6b114fa3f9e;
- tv[228]= 384'h00000000000000000000000000000000ffffffffffffffffff800000000000001bdec521316503d9d5ee65df3ea94ddf;
- tv[229]= 384'h00000000000000000000000000000000ffffffffffffffffffc0000000000000eef456431dea8b4acf83bdae3717f75f;
- tv[230]= 384'h00000000000000000000000000000000ffffffffffffffffffe000000000000006f2519a2fafaa596bfef5cfa15c21b9;
- tv[231]= 384'h00000000000000000000000000000000fffffffffffffffffff0000000000000251a7eac7e2fe809e4aa8d0d7012531a;
- tv[232]= 384'h00000000000000000000000000000000fffffffffffffffffff80000000000003bffc16e4c49b268a20f8d96a60b4058;
- tv[233]= 384'h00000000000000000000000000000000fffffffffffffffffffc000000000000e886f9281999c5bb3b3e8862e2f7c988;
- tv[234]= 384'h00000000000000000000000000000000fffffffffffffffffffe000000000000563bf90d61beef39f48dd625fcef1361;
- tv[235]= 384'h00000000000000000000000000000000ffffffffffffffffffff0000000000004d37c850644563c69fd0acd9a049325b;
- tv[236]= 384'h00000000000000000000000000000000ffffffffffffffffffff800000000000b87c921b91829ef3b13ca541ee1130a6;
- tv[237]= 384'h00000000000000000000000000000000ffffffffffffffffffffc000000000002e65eb6b6ea383e109accce8326b0393;
- tv[238]= 384'h00000000000000000000000000000000ffffffffffffffffffffe000000000009ca547f7439edc3e255c0f4d49aa8990;
- tv[239]= 384'h00000000000000000000000000000000fffffffffffffffffffff00000000000a5e652614c9300f37816b1f9fd0c87f9;
- tv[240]= 384'h00000000000000000000000000000000fffffffffffffffffffff8000000000014954f0b4697776f44494fe458d814ed;
- tv[241]= 384'h00000000000000000000000000000000fffffffffffffffffffffc00000000007c8d9ab6c2761723fe42f8bb506cbcf7;
- tv[242]= 384'h00000000000000000000000000000000fffffffffffffffffffffe0000000000db7e1932679fdd99742aab04aa0d5a80;
- tv[243]= 384'h00000000000000000000000000000000ffffffffffffffffffffff00000000004c6a1c83e568cd10f27c2d73ded19c28;
- tv[244]= 384'h00000000000000000000000000000000ffffffffffffffffffffff800000000090ecbe6177e674c98de412413f7ac915;
- tv[245]= 384'h00000000000000000000000000000000ffffffffffffffffffffffc00000000090684a2ac55fe1ec2b8ebd5622520b73;
- tv[246]= 384'h00000000000000000000000000000000ffffffffffffffffffffffe0000000007472f9a7988607ca79707795991035e6;
- tv[247]= 384'h00000000000000000000000000000000fffffffffffffffffffffff00000000056aff089878bf3352f8df172a3ae47d8;
- tv[248]= 384'h00000000000000000000000000000000fffffffffffffffffffffff80000000065c0526cbe40161b8019a2a3171abd23;
- tv[249]= 384'h00000000000000000000000000000000fffffffffffffffffffffffc00000000377be0be33b4e3e310b4aabda173f84f;
- tv[250]= 384'h00000000000000000000000000000000fffffffffffffffffffffffe000000009402e9aa6f69de6504da8d20c4fcaa2f;
- tv[251]= 384'h00000000000000000000000000000000ffffffffffffffffffffffff00000000123c1f4af313ad8c2ce648b2e71fb6e1;
- tv[252]= 384'h00000000000000000000000000000000ffffffffffffffffffffffff800000001ffc626d30203dcdb0019fb80f726cf4;
- tv[253]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffc000000076da1fbe3a50728c50fd2e621b5ad885;
- tv[254]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffe0000000082eb8be35f442fb52668e16a591d1d6;
- tv[255]= 384'h00000000000000000000000000000000fffffffffffffffffffffffff0000000e656f9ecf5fe27ec3e4a73d00c282fb3;
- tv[256]= 384'h00000000000000000000000000000000fffffffffffffffffffffffff80000002ca8209d63274cd9a29bb74bcd77683a;
- tv[257]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffc00000079bf5dce14bb7dd73a8e3611de7ce026;
- tv[258]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffe0000003c849939a5d29399f344c4a0eca8a576;
- tv[259]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffff000000ed3c0a94d59bece98835da7aa4f07ca2;
- tv[260]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffff80000063919ed4ce10196438b6ad09d99cd795;
- tv[261]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffc000007678f3a833f19fea95f3c6029e2bc610;
- tv[262]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffe000003aa426831067d36b92be7c5f81c13c56;
- tv[263]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffff000009272e2d2cdd11050998c845077a30ea0;
- tv[264]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffff80000088c4b53f5ec0ff814c19adae7f6246c;
- tv[265]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffc00004010a5e401fdf0a0354ddbcc0d012b17;
- tv[266]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffe0000a87a385736c0a6189bd6589bd8445a93;
- tv[267]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffff0000545f2b83d9616dccf60fa9830e9cd287;
- tv[268]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffff80004b706f7f92406352394037a6d4f4688d;
- tv[269]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffc000b7972b3941c44b90afa7b264bfba7387;
- tv[270]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffe0006f45732cf10881546f0fd23896d2bb60;
- tv[271]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffff0002e3579ca15af27f64b3c955a5bfc30ba;
- tv[272]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffff80034a2c5a91ae2aec99b7d1b5fa6780447;
- tv[273]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffffc00a4d6616bd04f87335b0e53351227a9ee;
- tv[274]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffffe007f692b03945867d16179a8cefc83ea3f;
- tv[275]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffff003bd141ee84a0e6414a26e7a4f281f8a2;
- tv[276]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffff80d1788f572d98b2b16ec5d5f3922b99bc;
- tv[277]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffffc00833ff6f61d98a57b288e8c3586b85a6;
- tv[278]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffffe08568261797de176bf0b43becc6285afb;
- tv[279]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffffff0f9b0fda0c4a898f5b9e6f661c4ce4d07;
- tv[280]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffffff88ade895913685c67c5269f8aae42983e;
- tv[281]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffffffc39bde67d5c8ed8a8b1c37eb8fa9f5ac0;
- tv[282]= 384'h00000000000000000000000000000000fffffffffffffffffffffffffffffffe5c005e72c1418c44f569f2ea33ba54f3;
- tv[283]= 384'h00000000000000000000000000000000ffffffffffffffffffffffffffffffff3f5b8cc9ea855a0afa7347d23e8d664e;
-
-
- // for(n=0;n<284;n=n+1)
- for(n=0;n<28;n=n+1)
- begin
- @(posedge clk);
- #1;
- kld = 1;
- @(posedge clk);
- #1;
- kld = 0;
- @(posedge clk);
-
- while(!done) @(posedge clk);
-
- // $display("INFO: (a) Vector %3d/284: xpected %x, Got %x %t", n, ciph, text_out, $time);
- $display("INFO: (a) Vector %2d/28: xpected %x, Got %x %t", n, ciph, text_out, $time);
-
- if(text_out != ciph | (|text_out)==1'bx)
- begin
- $display("ERROR: (a) Vector %0d mismatch. Expected %x, Got %x",
- n, ciph, text_out);
- error_cnt = error_cnt + 1;
- end
-
-
-/* -----\/----- EXCLUDED -----\/-----
- while(!done2) @(posedge clk);
-
- //$display("INFO: (b) Vector %0d: xpected %x, Got %x", n, plain, text_out2);
-
- if(text_out2 != plain | (|text_out2)==1'bx)
- begin
- $display("ERROR: (b) Vector %0d mismatch. Expected %x, Got %x",
- n, plain, text_out2);
- error_cnt = error_cnt + 1;
- end
- -----/\----- EXCLUDED -----/\----- */
-
-
- $fflush;
- @(posedge clk);
- #1;
- end // for (n=0;n<284;n=n+1)
-
-
-
- $display("");
- $display("");
- $display("Test Done. Found %0d Errors.", error_cnt);
- $display("");
- $display("");
- repeat(10) @(posedge clk);
- end // while (1)
-
- $finish;
- end // initial begin
-
-
- assign tmp = tv[n];
- assign key = tmp[383:256]; //kld ? tmp[383:256] : 128'hx;
- assign text_in = tmp[255:128]; //kld ? tmp[255:128] : 128'hx;
- assign plain = tmp[255:128];
- assign ciph = tmp[127:0];
-
- initial begin
- clk <= 0;
- forever begin
- // $display("CLK: %b", clk);
- #5; clk <= ~clk;
- end
- end
-
- aes_cipher_top u0
- (
- .clk( clk ),
- .rst( rst ),
- .ld( kld ),
- .done( done ),
- .key( key ),
- .text_in( text_in ),
- .text_out( text_out )
- );
-
-/*
- initial
- begin
- #107000000
- $finish;
- end
-*/
-
-/* -----\/----- EXCLUDED -----\/-----
- initial
- begin
- $vcdpluson;
- end
- -----/\----- EXCLUDED -----/\----- */
-
- integer cycle = 0;
- always @(posedge clk) begin
- cycle = cycle + 1;
- // $display("CYCLE %d", cycle);
- if (cycle == 10000) begin
- $display("Reached limit of 10000 cycles.");
- $finish;
- end
- end
-
- initial begin
- // $dumpfile("bench.vcd");
- // $dumpvars(0, testbench);
- end
-
-endmodule
-// Local Variables:
-// verilog-library-directories:("." "./gl")
-// End:
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/surelog.log
deleted file mode 100644
index 8cf1427..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/surelog.log
+++ /dev/null
@@ -1,163 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:40:17
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/a23_alu.v rtl/a23_barrel_shift.v rtl/a23_barrel_shift_fpga.v rtl/a23_cache.v rtl/a23_config_defines.v rtl/a23_coprocessor.v rtl/a23_core.v rtl/a23_decode.v rtl/a23_decompile.v rtl/a23_execute.v rtl/a23_fetch.v rtl/a23_functions.v rtl/a23_localparams.v rtl/a23_multiply.v rtl/a23_ram_register_bank.v rtl/a23_register_bank.v rtl/a23_wishbone.v rtl/debug_functions.v rtl/generic_sram_byte_en.v rtl/generic_sram_line_en.v rtl/global_defines.v rtl/memory_configuration.v sim/bench.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[ERROR:PA0207] rtl/a23_decode.v:174 Syntax error: mismatched input 'type' expecting {'new', 'byte', 'bit', 'logic', 'signed', 'unsigned', 'var', 'expect', 'soft', 'global', 'do', 'this', 'randomize', 'final', 'sample', Escaped_identifier, Simple_identifier},
-reg [3:0] type;
- ^-- ./slpp_unit/work/rtl/a23_decode.v:518 col:23.
-
-[WARNI:PA0205] rtl/a23_barrel_shift.v:42 No timescale set for "a23_barrel_shift".
-
-[WARNI:PA0205] rtl/a23_decompile.v:44 No timescale set for "a23_decompile".
-
-[WARNI:PA0205] rtl/a23_alu.v:43 No timescale set for "a23_alu".
-
-[WARNI:PA0205] rtl/a23_fetch.v:45 No timescale set for "a23_fetch".
-
-[WARNI:PA0205] rtl/a23_coprocessor.v:41 No timescale set for "a23_coprocessor".
-
-[WARNI:PA0205] rtl/a23_barrel_shift_fpga.v:46 No timescale set for "a23_barrel_shift_fpga".
-
-[WARNI:PA0205] rtl/a23_core.v:43 No timescale set for "a23_core".
-
-[WARNI:PA0205] rtl/a23_multiply.v:56 No timescale set for "a23_multiply".
-
-[WARNI:PA0205] rtl/a23_execute.v:45 No timescale set for "a23_execute".
-
-[WARNI:PA0205] rtl/a23_register_bank.v:44 No timescale set for "a23_register_bank".
-
-[WARNI:PA0205] rtl/generic_sram_byte_en.v:43 No timescale set for "generic_sram_byte_en".
-
-[WARNI:PA0205] rtl/a23_wishbone.v:58 No timescale set for "a23_wishbone".
-
-[WARNI:PA0205] rtl/generic_sram_line_en.v:42 No timescale set for "generic_sram_line_en".
-
-[WARNI:PA0205] rtl/a23_decode.v:43 No timescale set for "a23_decode".
-
-[WARNI:PA0205] sim/bench.v:2 No timescale set for "testbench".
-
-[WARNI:PA0205] rtl/a23_cache.v:47 No timescale set for "a23_cache".
-
-[WARNI:PA0205] rtl/a23_ram_register_bank.v:44 No timescale set for "a23_ram_register_bank".
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/a23_alu.v:43 Compile module "work@a23_alu".
-
-[INFO :CP0303] rtl/a23_barrel_shift_fpga.v:46 Compile module "work@a23_barrel_shift_fpga".
-
-[INFO :CP0303] rtl/a23_barrel_shift.v:42 Compile module "work@a23_barrel_shift".
-
-[INFO :CP0303] rtl/a23_coprocessor.v:41 Compile module "work@a23_coprocessor".
-
-[INFO :CP0303] rtl/a23_cache.v:47 Compile module "work@a23_cache".
-
-[INFO :CP0303] rtl/a23_execute.v:45 Compile module "work@a23_execute".
-
-[INFO :CP0303] rtl/a23_decode.v:43 Compile module "work@a23_decode".
-
-[INFO :CP0303] rtl/a23_decompile.v:44 Compile module "work@a23_decompile".
-
-[INFO :CP0303] rtl/a23_core.v:43 Compile module "work@a23_core".
-
-[INFO :CP0303] rtl/a23_ram_register_bank.v:44 Compile module "work@a23_ram_register_bank".
-
-[INFO :CP0303] rtl/a23_fetch.v:45 Compile module "work@a23_fetch".
-
-[INFO :CP0303] rtl/a23_register_bank.v:44 Compile module "work@a23_register_bank".
-
-[INFO :CP0303] rtl/a23_wishbone.v:58 Compile module "work@a23_wishbone".
-
-[INFO :CP0303] rtl/generic_sram_line_en.v:42 Compile module "work@generic_sram_line_en".
-
-[INFO :CP0303] sim/bench.v:2 Compile module "work@testbench".
-
-[INFO :CP0303] rtl/a23_multiply.v:56 Compile module "work@a23_multiply".
-
-[INFO :CP0303] rtl/generic_sram_byte_en.v:43 Compile module "work@generic_sram_byte_en".
-
-[NOTE :CP0309] rtl/a23_alu.v:51 Implicit port type (wire) for "o_out",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_coprocessor.v:58 Implicit port type (wire) for "o_cache_enable",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_execute.v:63 Implicit port type (wire) for "o_address_nxt",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_register_bank.v:71 Implicit port type (wire) for "o_rm",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_barrel_shift.v:50 Implicit port type (wire) for "o_out",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_core.v:53 Implicit port type (wire) for "o_wb_adr",
-there are 5 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_fetch.v:54 Implicit port type (wire) for "o_read_data",
-there are 7 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_wishbone.v:70 Implicit port type (wire) for "o_stall".
-
-[NOTE :CP0309] rtl/a23_barrel_shift_fpga.v:54 Implicit port type (wire) for "o_out",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_decode.v:81 Implicit port type (wire) for "o_rm_sel_nxt",
-there are 8 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_multiply.v:65 Implicit port type (wire) for "o_out",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_cache.v:98 Implicit port type (wire) for "o_read_data",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/a23_ram_register_bank.v:69 Implicit port type (wire) for "o_rm",
-there are 4 more instances of this message.
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] rtl/a23_decompile.v:44 Top level module "work@a23_decompile".
-
-[NOTE :EL0503] rtl/a23_barrel_shift_fpga.v:46 Top level module "work@a23_barrel_shift_fpga".
-
-[NOTE :EL0503] sim/bench.v:2 Top level module "work@testbench".
-
-[NOTE :EL0503] rtl/a23_ram_register_bank.v:44 Top level module "work@a23_ram_register_bank".
-
-[NOTE :EL0504] Multiple top level modules in design.
-
-[ERROR:EL0514] rtl/a23_decode.v:806 Undefined variable: instruction.
-
-[ERROR:EL0514] rtl/a23_decode.v:832 Undefined variable: instruction.
-
-[NOTE :EL0508] Nb Top level modules: 4.
-
-[NOTE :EL0509] Max instance depth: 6.
-
-[NOTE :EL0510] Nb instances: 23.
-
-[NOTE :EL0511] Nb leaf instances: 3.
-
-[ FATAL] : 0
-[ ERROR] : 3
-[WARNING] : 17
-[ NOTE] : 22
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_alu.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_alu.v
deleted file mode 100644
index 6359680..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_alu.v
+++ /dev/null
@@ -1,154 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Arithmetic Logic Unit (ALU) for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Supported functions: 32-bit add and subtract, AND, OR, //
-// XOR, NOT, Zero extent 8-bit numbers //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_alu (
-
-input [31:0] i_a_in,
-input [31:0] i_b_in,
-input i_barrel_shift_carry,
-input i_status_bits_carry,
-input [8:0] i_function,
-
-output [31:0] o_out,
-output [3:0] o_flags
-);
-
-wire [31:0] a, b, b_not;
-wire [31:0] and_out, or_out, xor_out;
-wire [31:0] sign_ex8_out, sign_ex_16_out;
-wire [31:0] zero_ex8_out, zero_ex_16_out;
-wire [32:0] fadder_out;
-wire swap_sel;
-wire not_sel;
-wire [1:0] cin_sel;
-wire cout_sel;
-wire [3:0] out_sel;
-wire carry_in;
-wire carry_out;
-wire overflow_out;
-wire fadder_carry_out;
-
-assign { swap_sel, not_sel, cin_sel, cout_sel, out_sel } = i_function;
-
-
-// ========================================================
-// A Select
-// ========================================================
-assign a = (swap_sel ) ? i_b_in : i_a_in ;
-
-// ========================================================
-// B Select
-// ========================================================
-assign b = (swap_sel ) ? i_a_in : i_b_in ;
-
-// ========================================================
-// Not Select
-// ========================================================
-assign b_not = (not_sel ) ? ~b : b ;
-
-// ========================================================
-// Cin Select
-// ========================================================
-assign carry_in = (cin_sel==2'd0 ) ? 1'd0 :
- (cin_sel==2'd1 ) ? 1'd1 :
- i_status_bits_carry ; // add with carry
-
-// ========================================================
-// Cout Select
-// ========================================================
-assign carry_out = (cout_sel==1'd0 ) ? fadder_carry_out :
- i_barrel_shift_carry ;
-
-// For non-addition/subtractions that incorporate a shift
-// operation, C is set to the last bit
-// shifted out of the value by the shifter.
-
-
-// ========================================================
-// Overflow out
-// ========================================================
-// Only assert the overflow flag when using the adder
-assign overflow_out = out_sel == 4'd1 &&
- // overflow if adding two positive numbers and get a negative number
- ( (!a[31] && !b_not[31] && fadder_out[31]) ||
- // or adding two negative numbers and get a positive number
- (a[31] && b_not[31] && !fadder_out[31]) );
-
-
-// ========================================================
-// ALU Operations
-// ========================================================
-
-assign fadder_out = { 1'd0,a} + {1'd0,b_not} + {32'd0,carry_in};
-
-assign fadder_carry_out = fadder_out[32];
-assign and_out = a & b_not;
-assign or_out = a | b_not;
-assign xor_out = a ^ b_not;
-assign zero_ex8_out = {24'd0, b_not[7:0]};
-assign zero_ex_16_out = {16'd0, b_not[15:0]};
-assign sign_ex8_out = {{24{b_not[7]}}, b_not[7:0]};
-assign sign_ex_16_out = {{16{b_not[15]}}, b_not[15:0]};
-
-// ========================================================
-// Out Select
-// ========================================================
-assign o_out = out_sel == 4'd0 ? b_not :
- out_sel == 4'd1 ? fadder_out[31:0] :
- out_sel == 4'd2 ? zero_ex_16_out :
- out_sel == 4'd3 ? zero_ex8_out :
- out_sel == 4'd4 ? sign_ex_16_out :
- out_sel == 4'd5 ? sign_ex8_out :
- out_sel == 4'd6 ? xor_out :
- out_sel == 4'd7 ? or_out :
- and_out ;
-
-assign o_flags = { o_out[31], // negative
- |o_out == 1'd0, // zero
- carry_out, // carry
- overflow_out // overflow
- };
-
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_barrel_shift.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_barrel_shift.v
deleted file mode 100644
index 54cc19b..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_barrel_shift.v
+++ /dev/null
@@ -1,367 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Barrel Shifter for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Provides 32-bit shifts LSL, LSR, ASR and ROR //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_barrel_shift (
-
-input [31:0] i_in,
-input i_carry_in,
-input [7:0] i_shift_amount, // uses 8 LSBs of Rs, or a 5 bit immediate constant
-input i_shift_imm_zero, // high when immediate shift value of zero selected
-input [1:0] i_function,
-
-output [31:0] o_out,
-output o_carry_out
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-
- // MSB is carry out
-wire [32:0] lsl_out;
-wire [32:0] lsr_out;
-wire [32:0] asr_out;
-wire [32:0] ror_out;
-
-
-// Logical shift right zero is redundant as it is the same as logical shift left zero, so
-// the assembler will convert LSR #0 (and ASR #0 and ROR #0) into LSL #0, and allow
-// lsr #32 to be specified.
-
-// lsl #0 is a special case, where the shifter carry out is the old value of the status flags
-// C flag. The contents of Rm are used directly as the second operand.
-assign lsl_out = i_shift_imm_zero ? {i_carry_in, i_in } : // fall through case
-
- i_shift_amount == 8'd0 ? {i_carry_in, i_in } : // fall through case
- i_shift_amount == 8'd1 ? {i_in[31], i_in[30: 0], 1'd0} :
-
- i_shift_amount == 8'd2 ? {i_in[30], i_in[29: 0], 2'd0} :
- i_shift_amount == 8'd3 ? {i_in[29], i_in[28: 0], 3'd0} :
- i_shift_amount == 8'd4 ? {i_in[28], i_in[27: 0], 4'd0} :
- i_shift_amount == 8'd5 ? {i_in[27], i_in[26: 0], 5'd0} :
- i_shift_amount == 8'd6 ? {i_in[26], i_in[25: 0], 6'd0} :
- i_shift_amount == 8'd7 ? {i_in[25], i_in[24: 0], 7'd0} :
- i_shift_amount == 8'd8 ? {i_in[24], i_in[23: 0], 8'd0} :
- i_shift_amount == 8'd9 ? {i_in[23], i_in[22: 0], 9'd0} :
- i_shift_amount == 8'd10 ? {i_in[22], i_in[21: 0], 10'd0} :
- i_shift_amount == 8'd11 ? {i_in[21], i_in[20: 0], 11'd0} :
-
- i_shift_amount == 8'd12 ? {i_in[20], i_in[19: 0], 12'd0} :
- i_shift_amount == 8'd13 ? {i_in[19], i_in[18: 0], 13'd0} :
- i_shift_amount == 8'd14 ? {i_in[18], i_in[17: 0], 14'd0} :
- i_shift_amount == 8'd15 ? {i_in[17], i_in[16: 0], 15'd0} :
- i_shift_amount == 8'd16 ? {i_in[16], i_in[15: 0], 16'd0} :
- i_shift_amount == 8'd17 ? {i_in[15], i_in[14: 0], 17'd0} :
- i_shift_amount == 8'd18 ? {i_in[14], i_in[13: 0], 18'd0} :
- i_shift_amount == 8'd19 ? {i_in[13], i_in[12: 0], 19'd0} :
- i_shift_amount == 8'd20 ? {i_in[12], i_in[11: 0], 20'd0} :
- i_shift_amount == 8'd21 ? {i_in[11], i_in[10: 0], 21'd0} :
-
- i_shift_amount == 8'd22 ? {i_in[10], i_in[ 9: 0], 22'd0} :
- i_shift_amount == 8'd23 ? {i_in[ 9], i_in[ 8: 0], 23'd0} :
- i_shift_amount == 8'd24 ? {i_in[ 8], i_in[ 7: 0], 24'd0} :
- i_shift_amount == 8'd25 ? {i_in[ 7], i_in[ 6: 0], 25'd0} :
- i_shift_amount == 8'd26 ? {i_in[ 6], i_in[ 5: 0], 26'd0} :
- i_shift_amount == 8'd27 ? {i_in[ 5], i_in[ 4: 0], 27'd0} :
- i_shift_amount == 8'd28 ? {i_in[ 4], i_in[ 3: 0], 28'd0} :
- i_shift_amount == 8'd29 ? {i_in[ 3], i_in[ 2: 0], 29'd0} :
- i_shift_amount == 8'd30 ? {i_in[ 2], i_in[ 1: 0], 30'd0} :
- i_shift_amount == 8'd31 ? {i_in[ 1], i_in[ 0: 0], 31'd0} :
- i_shift_amount == 8'd32 ? {i_in[ 0], 32'd0 } : // 32
- {1'd0, 32'd0 } ; // > 32
-
-
-// The form of the shift field which might be expected to correspond to LSR #0 is used
-// to encode LSR #32, which has a zero result with bit 31 of Rm as the carry output.
- // carry out, < -------- out ---------->
-assign lsr_out = i_shift_imm_zero ? {i_in[31], 32'd0 } :
-
- i_shift_amount == 8'd0 ? {i_carry_in, i_in } : // fall through case
- i_shift_amount == 8'd1 ? {i_in[ 0], 1'd0, i_in[31: 1]} :
- i_shift_amount == 8'd2 ? {i_in[ 1], 2'd0, i_in[31: 2]} :
- i_shift_amount == 8'd3 ? {i_in[ 2], 3'd0, i_in[31: 3]} :
- i_shift_amount == 8'd4 ? {i_in[ 3], 4'd0, i_in[31: 4]} :
- i_shift_amount == 8'd5 ? {i_in[ 4], 5'd0, i_in[31: 5]} :
- i_shift_amount == 8'd6 ? {i_in[ 5], 6'd0, i_in[31: 6]} :
- i_shift_amount == 8'd7 ? {i_in[ 6], 7'd0, i_in[31: 7]} :
- i_shift_amount == 8'd8 ? {i_in[ 7], 8'd0, i_in[31: 8]} :
- i_shift_amount == 8'd9 ? {i_in[ 8], 9'd0, i_in[31: 9]} :
-
- i_shift_amount == 8'd10 ? {i_in[ 9], 10'd0, i_in[31:10]} :
- i_shift_amount == 8'd11 ? {i_in[10], 11'd0, i_in[31:11]} :
- i_shift_amount == 8'd12 ? {i_in[11], 12'd0, i_in[31:12]} :
- i_shift_amount == 8'd13 ? {i_in[12], 13'd0, i_in[31:13]} :
- i_shift_amount == 8'd14 ? {i_in[13], 14'd0, i_in[31:14]} :
- i_shift_amount == 8'd15 ? {i_in[14], 15'd0, i_in[31:15]} :
- i_shift_amount == 8'd16 ? {i_in[15], 16'd0, i_in[31:16]} :
- i_shift_amount == 8'd17 ? {i_in[16], 17'd0, i_in[31:17]} :
- i_shift_amount == 8'd18 ? {i_in[17], 18'd0, i_in[31:18]} :
- i_shift_amount == 8'd19 ? {i_in[18], 19'd0, i_in[31:19]} :
-
- i_shift_amount == 8'd20 ? {i_in[19], 20'd0, i_in[31:20]} :
- i_shift_amount == 8'd21 ? {i_in[20], 21'd0, i_in[31:21]} :
- i_shift_amount == 8'd22 ? {i_in[21], 22'd0, i_in[31:22]} :
- i_shift_amount == 8'd23 ? {i_in[22], 23'd0, i_in[31:23]} :
- i_shift_amount == 8'd24 ? {i_in[23], 24'd0, i_in[31:24]} :
- i_shift_amount == 8'd25 ? {i_in[24], 25'd0, i_in[31:25]} :
- i_shift_amount == 8'd26 ? {i_in[25], 26'd0, i_in[31:26]} :
- i_shift_amount == 8'd27 ? {i_in[26], 27'd0, i_in[31:27]} :
- i_shift_amount == 8'd28 ? {i_in[27], 28'd0, i_in[31:28]} :
- i_shift_amount == 8'd29 ? {i_in[28], 29'd0, i_in[31:29]} :
-
- i_shift_amount == 8'd30 ? {i_in[29], 30'd0, i_in[31:30]} :
- i_shift_amount == 8'd31 ? {i_in[30], 31'd0, i_in[31 ]} :
- i_shift_amount == 8'd32 ? {i_in[31], 32'd0 } :
- {1'd0, 32'd0 } ; // > 32
-
-
-// The form of the shift field which might be expected to give ASR #0 is used to encode
-// ASR #32. Bit 31 of Rm is again used as the carry output, and each bit of operand 2 is
-// also equal to bit 31 of Rm. The result is therefore all ones or all zeros, according to
-// the value of bit 31 of Rm.
-
- // carry out, < -------- out ---------->
-assign asr_out = i_shift_imm_zero ? {i_in[31], {32{i_in[31]}} } :
-
- i_shift_amount == 8'd0 ? {i_carry_in, i_in } : // fall through case
- i_shift_amount == 8'd1 ? {i_in[ 0], { 2{i_in[31]}}, i_in[30: 1]} :
- i_shift_amount == 8'd2 ? {i_in[ 1], { 3{i_in[31]}}, i_in[30: 2]} :
- i_shift_amount == 8'd3 ? {i_in[ 2], { 4{i_in[31]}}, i_in[30: 3]} :
- i_shift_amount == 8'd4 ? {i_in[ 3], { 5{i_in[31]}}, i_in[30: 4]} :
- i_shift_amount == 8'd5 ? {i_in[ 4], { 6{i_in[31]}}, i_in[30: 5]} :
- i_shift_amount == 8'd6 ? {i_in[ 5], { 7{i_in[31]}}, i_in[30: 6]} :
- i_shift_amount == 8'd7 ? {i_in[ 6], { 8{i_in[31]}}, i_in[30: 7]} :
- i_shift_amount == 8'd8 ? {i_in[ 7], { 9{i_in[31]}}, i_in[30: 8]} :
- i_shift_amount == 8'd9 ? {i_in[ 8], {10{i_in[31]}}, i_in[30: 9]} :
-
- i_shift_amount == 8'd10 ? {i_in[ 9], {11{i_in[31]}}, i_in[30:10]} :
- i_shift_amount == 8'd11 ? {i_in[10], {12{i_in[31]}}, i_in[30:11]} :
- i_shift_amount == 8'd12 ? {i_in[11], {13{i_in[31]}}, i_in[30:12]} :
- i_shift_amount == 8'd13 ? {i_in[12], {14{i_in[31]}}, i_in[30:13]} :
- i_shift_amount == 8'd14 ? {i_in[13], {15{i_in[31]}}, i_in[30:14]} :
- i_shift_amount == 8'd15 ? {i_in[14], {16{i_in[31]}}, i_in[30:15]} :
- i_shift_amount == 8'd16 ? {i_in[15], {17{i_in[31]}}, i_in[30:16]} :
- i_shift_amount == 8'd17 ? {i_in[16], {18{i_in[31]}}, i_in[30:17]} :
- i_shift_amount == 8'd18 ? {i_in[17], {19{i_in[31]}}, i_in[30:18]} :
- i_shift_amount == 8'd19 ? {i_in[18], {20{i_in[31]}}, i_in[30:19]} :
-
- i_shift_amount == 8'd20 ? {i_in[19], {21{i_in[31]}}, i_in[30:20]} :
- i_shift_amount == 8'd21 ? {i_in[20], {22{i_in[31]}}, i_in[30:21]} :
- i_shift_amount == 8'd22 ? {i_in[21], {23{i_in[31]}}, i_in[30:22]} :
- i_shift_amount == 8'd23 ? {i_in[22], {24{i_in[31]}}, i_in[30:23]} :
- i_shift_amount == 8'd24 ? {i_in[23], {25{i_in[31]}}, i_in[30:24]} :
- i_shift_amount == 8'd25 ? {i_in[24], {26{i_in[31]}}, i_in[30:25]} :
- i_shift_amount == 8'd26 ? {i_in[25], {27{i_in[31]}}, i_in[30:26]} :
- i_shift_amount == 8'd27 ? {i_in[26], {28{i_in[31]}}, i_in[30:27]} :
- i_shift_amount == 8'd28 ? {i_in[27], {29{i_in[31]}}, i_in[30:28]} :
- i_shift_amount == 8'd29 ? {i_in[28], {30{i_in[31]}}, i_in[30:29]} :
-
- i_shift_amount == 8'd30 ? {i_in[29], {31{i_in[31]}}, i_in[30 ]} :
- i_shift_amount == 8'd31 ? {i_in[30], {32{i_in[31]}} } :
- {i_in[31], {32{i_in[31]}} } ; // >= 32
-
-
- // carry out, < ------- out --------->
-assign ror_out = i_shift_imm_zero ? {i_in[ 0], i_carry_in, i_in[31: 1]} : // RXR, (ROR w/ imm 0)
-
- i_shift_amount[7:0] == 8'd0 ? {i_carry_in, i_in } : // fall through case
-
- i_shift_amount[4:0] == 5'd0 ? {i_in[31], i_in } : // Rs > 31
- i_shift_amount[4:0] == 5'd1 ? {i_in[ 0], i_in[ 0], i_in[31: 1]} :
- i_shift_amount[4:0] == 5'd2 ? {i_in[ 1], i_in[ 1: 0], i_in[31: 2]} :
- i_shift_amount[4:0] == 5'd3 ? {i_in[ 2], i_in[ 2: 0], i_in[31: 3]} :
- i_shift_amount[4:0] == 5'd4 ? {i_in[ 3], i_in[ 3: 0], i_in[31: 4]} :
- i_shift_amount[4:0] == 5'd5 ? {i_in[ 4], i_in[ 4: 0], i_in[31: 5]} :
- i_shift_amount[4:0] == 5'd6 ? {i_in[ 5], i_in[ 5: 0], i_in[31: 6]} :
- i_shift_amount[4:0] == 5'd7 ? {i_in[ 6], i_in[ 6: 0], i_in[31: 7]} :
- i_shift_amount[4:0] == 5'd8 ? {i_in[ 7], i_in[ 7: 0], i_in[31: 8]} :
- i_shift_amount[4:0] == 5'd9 ? {i_in[ 8], i_in[ 8: 0], i_in[31: 9]} :
-
- i_shift_amount[4:0] == 5'd10 ? {i_in[ 9], i_in[ 9: 0], i_in[31:10]} :
- i_shift_amount[4:0] == 5'd11 ? {i_in[10], i_in[10: 0], i_in[31:11]} :
- i_shift_amount[4:0] == 5'd12 ? {i_in[11], i_in[11: 0], i_in[31:12]} :
- i_shift_amount[4:0] == 5'd13 ? {i_in[12], i_in[12: 0], i_in[31:13]} :
- i_shift_amount[4:0] == 5'd14 ? {i_in[13], i_in[13: 0], i_in[31:14]} :
- i_shift_amount[4:0] == 5'd15 ? {i_in[14], i_in[14: 0], i_in[31:15]} :
- i_shift_amount[4:0] == 5'd16 ? {i_in[15], i_in[15: 0], i_in[31:16]} :
- i_shift_amount[4:0] == 5'd17 ? {i_in[16], i_in[16: 0], i_in[31:17]} :
- i_shift_amount[4:0] == 5'd18 ? {i_in[17], i_in[17: 0], i_in[31:18]} :
- i_shift_amount[4:0] == 5'd19 ? {i_in[18], i_in[18: 0], i_in[31:19]} :
-
- i_shift_amount[4:0] == 5'd20 ? {i_in[19], i_in[19: 0], i_in[31:20]} :
- i_shift_amount[4:0] == 5'd21 ? {i_in[20], i_in[20: 0], i_in[31:21]} :
- i_shift_amount[4:0] == 5'd22 ? {i_in[21], i_in[21: 0], i_in[31:22]} :
- i_shift_amount[4:0] == 5'd23 ? {i_in[22], i_in[22: 0], i_in[31:23]} :
- i_shift_amount[4:0] == 5'd24 ? {i_in[23], i_in[23: 0], i_in[31:24]} :
- i_shift_amount[4:0] == 5'd25 ? {i_in[24], i_in[24: 0], i_in[31:25]} :
- i_shift_amount[4:0] == 5'd26 ? {i_in[25], i_in[25: 0], i_in[31:26]} :
- i_shift_amount[4:0] == 5'd27 ? {i_in[26], i_in[26: 0], i_in[31:27]} :
- i_shift_amount[4:0] == 5'd28 ? {i_in[27], i_in[27: 0], i_in[31:28]} :
- i_shift_amount[4:0] == 5'd29 ? {i_in[28], i_in[28: 0], i_in[31:29]} :
-
- i_shift_amount[4:0] == 5'd30 ? {i_in[29], i_in[29: 0], i_in[31:30]} :
- {i_in[30], i_in[30: 0], i_in[31:31]} ;
-
-
-
-assign {o_carry_out, o_out} = i_function == LSL ? lsl_out :
- i_function == LSR ? lsr_out :
- i_function == ASR ? asr_out :
- ror_out ;
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_barrel_shift_fpga.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_barrel_shift_fpga.v
deleted file mode 100644
index 9ffc3e6..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_barrel_shift_fpga.v
+++ /dev/null
@@ -1,417 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Barrel Shifter for Amber 2 Core //
-// //
-// The design is optimized for Altera family of FPGAs, //
-// and it can be used directly or adapted other N-to-1 LUT //
-// FPGA platforms. //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Provides 32-bit shifts LSL, LSR, ASR and ROR //
-// //
-// Author(s): //
-// - Dmitry Tarnyagin, dmitry.tarnyagin@lockless.no //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010-2013 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_barrel_shift_fpga (
-
-input [31:0] i_in,
-input i_carry_in,
-input [7:0] i_shift_amount, // uses 8 LSBs of Rs, or a 5 bit immediate constant
-input i_shift_imm_zero, // high when immediate shift value of zero selected
-input [1:0] i_function,
-
-output [31:0] o_out,
-output o_carry_out
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-
-wire [31:0] rot_prod; // Input rotated by the shift amount
-
-wire [1:0] lsl_out; // LSL: {carry, bit_31}
-wire [1:0] lsr_out; // LSR: {carry, bit_31}
-wire [1:0] asr_out; // ASR: {carry, bit_31}
-wire [1:0] ror_out; // ROR: {carry, bit_31}
-
-reg [32:0] lsl_mask; // Left-hand mask
-reg [32:0] lsr_mask; // Right-hand mask
-reg [15:0] low_mask; // Mask calculation helper
-
-reg [4:0] shift_amount; // Shift amount for the low-level shifter
-
-reg [2:0] lsl_selector; // Left shift {shift_32, shift_over, shift_amount[4]}
-reg [2:0] lsr_selector; // Right shift {shift_32, shift_over, shift_amount[4]}
-reg [3:0] low_selector; // {shift_amount[3:0]}
-
-reg shift_nzero; // Amount is not zero
-reg shift_over; // Amount is 32 or higher
-reg shift_32; // Amount is exactly 32
-reg asr_sign; // Sign for ASR shift
-reg direction; // Shift direction
-
-wire [31:0] p_r; // 1 bit rotated rot_prod
-wire [31:0] p_l; // Alias for the rot_prod
-
-
-// Implementation details:
-// Design is based on masking of rotated input by a left- and right- hand masks.
-// Rotated product calculation requires 5 levels of combinational logic, and masks
-// must be ready before the product is ready. In fact masks require just 3 to 4 levels
-// of logic cells using 4-to-1/2x3-to-1 Altera.
-
-always @*
-begin
- shift_32 = i_shift_amount == 32;
-
- shift_over = |i_shift_amount[7:5];
-
- shift_nzero = |i_shift_amount[7:0];
-
- shift_amount = i_shift_amount[4:0];
-
- if (i_shift_imm_zero) begin
- if (i_function == LSR || i_function == ASR) begin
- // The form of the shift field which might be
- // expected to correspond to LSR #0 is used
- // to encode LSR #32, which has a zero result
- // with bit 31 of Rm as the carry output.
- shift_nzero = 1'b1;
- shift_over = 1'b1;
- // Redundant and can be optimized out
- // shift_32 = 1'b1;
- end else if (i_function == ROR) begin
- // RXR, (ROR w/ imm 0)
- shift_amount[0] = 1'b1;
- shift_nzero = 1'b1;
- end
- end
-
- // LSB sub-selector calculation. Usually it is taken
- // directly from the shift_amount, but ROR requires
- // no masking at all.
- case (i_function)
- LSL: low_selector = shift_amount[3:0];
- LSR: low_selector = shift_amount[3:0];
- ASR: low_selector = shift_amount[3:0];
- ROR: low_selector = 4'b0000;
- endcase
-
- // Left-hand MSB sub-selector calculation. Opaque for every function but LSL.
- case (i_function)
- LSL: lsl_selector = {shift_32, shift_over, shift_amount[4]};
- LSR: lsl_selector = 3'b0_1_0; // Opaque mask selector
- ASR: lsl_selector = 3'b0_1_0; // Opaque mask selector
- ROR: lsl_selector = 3'b0_1_0; // Opaque mask selector
- endcase
-
- // Right-hand MSB sub-selector calculation. Opaque for LSL, transparent for ROR.
- case (i_function)
- LSL: lsr_selector = 3'b0_1_0; // Opaque mask selector
- LSR: lsr_selector = {shift_32, shift_over, shift_amount[4]};
- ASR: lsr_selector = {shift_32, shift_over, shift_amount[4]};
- ROR: lsr_selector = 3'b0_0_0; // Transparent mask selector
- endcase
-
- // Direction
- case (i_function)
- LSL: direction = 1'b0; // Left shift
- LSR: direction = 1'b1; // Right shift
- ASR: direction = 1'b1; // Right shift
- ROR: direction = 1'b1; // Right shift
- endcase
-
- // Sign for ASR shift
- asr_sign = 1'b0;
- if (i_function == ASR && i_in[31])
- asr_sign = 1'b1;
-end
-
-// Generic rotate. Theoretical cost: 32x5 4-to-1 LUTs.
-// Practically a bit higher due to high fanout of "direction".
-generate
-genvar i, j;
- for (i = 0; i < 5; i = i + 1)
- begin : netgen
- wire [31:0] in;
- reg [31:0] out;
- for (j = 0; j < 32; j = j + 1)
- begin : net
- always @*
- out[j] = in[j] & (~shift_amount[i] ^ direction) |
- in[wrap(j, i)] & (shift_amount[i] ^ direction);
- end
- end
-
- // Order is reverted with respect to volatile shift_amount[0]
- assign netgen[4].in = i_in;
- for (i = 1; i < 5; i = i + 1)
- begin : router
- assign netgen[i-1].in = netgen[i].out;
- end
-endgenerate
-
-// Aliasing
-assign rot_prod = netgen[0].out;
-
-// Submask calculated from LSB sub-selector.
-// Cost: 16 4-to-1 LUTs.
-always @*
-case (low_selector) // synthesis full_case parallel_case
- 4'b0000: low_mask = 16'hffff;
- 4'b0001: low_mask = 16'hfffe;
- 4'b0010: low_mask = 16'hfffc;
- 4'b0011: low_mask = 16'hfff8;
- 4'b0100: low_mask = 16'hfff0;
- 4'b0101: low_mask = 16'hffe0;
- 4'b0110: low_mask = 16'hffc0;
- 4'b0111: low_mask = 16'hff80;
- 4'b1000: low_mask = 16'hff00;
- 4'b1001: low_mask = 16'hfe00;
- 4'b1010: low_mask = 16'hfc00;
- 4'b1011: low_mask = 16'hf800;
- 4'b1100: low_mask = 16'hf000;
- 4'b1101: low_mask = 16'he000;
- 4'b1110: low_mask = 16'hc000;
- 4'b1111: low_mask = 16'h8000;
-endcase
-
-// Left-hand mask calculation.
-// Cost: 33 4-to-1 LUTs.
-always @*
-casez (lsl_selector) // synthesis full_case parallel_case
- 7'b1??: lsl_mask = 33'h1_0000_0000;
- 7'b01?: lsl_mask = 33'h0_0000_0000;
- 7'b001: lsl_mask = { 1'h1, low_mask, 16'h0000};
- 7'b000: lsl_mask = {17'h1_ffff, low_mask};
-endcase
-
-// Right-hand mask calculation.
-// Cost: 33 4-to-1 LUTs.
-always @*
-casez (lsr_selector) // synthesis full_case parallel_case
- 7'b1??: lsr_mask = 33'h1_0000_0000;
- 7'b01?: lsr_mask = 33'h0_0000_0000;
- 7'b000: lsr_mask = { 1'h1, bit_swap(low_mask), 16'hffff};
- 7'b001: lsr_mask = {17'h1_0000, bit_swap(low_mask)};
-endcase
-
-// Alias: right-rotated
-assign p_r = {rot_prod[30:0], rot_prod[31]};
-
-// Alias: left-rotated
-assign p_l = rot_prod[31:0];
-
-// ROR MSB, handling special cases
-assign ror_out[0] = i_shift_imm_zero ? i_carry_in :
- p_r[31];
-
-// ROR carry, handling special cases
-assign ror_out[1] = i_shift_imm_zero ? i_in[0] :
- shift_nzero ? p_r[31] :
- i_carry_in;
-
-// LSL MSB
-assign lsl_out[0] = p_l[31] & lsl_mask[31];
-
-// LSL carry, handling special cases
-assign lsl_out[1] = shift_nzero ? p_l[0] & lsl_mask[32]:
- i_carry_in;
-
-// LSR MSB
-assign lsr_out[0] = p_r[31] & lsr_mask[31];
-
-// LSR carry, handling special cases
-assign lsr_out[1] = i_shift_imm_zero ? i_in[31] :
- shift_nzero ? p_r[31] & lsr_mask[32]:
- i_carry_in;
-
-// ASR MSB
-assign asr_out[0] = i_in[31] ? i_in[31] :
- p_r[31] & lsr_mask[31] ;
-
-// LSR carry, handling special cases
-assign asr_out[1] = shift_over ? i_in[31] :
- shift_nzero ? p_r[31] :
- i_carry_in;
-
-// Carry and MSB are calculated as above
-assign {o_carry_out, o_out[31]} = i_function == LSL ? lsl_out :
- i_function == LSR ? lsr_out :
- i_function == ASR ? asr_out :
- ror_out ;
-
-// And the rest of result is the masked rotated input.
-assign o_out[30:0] = (p_l[30:0] & lsl_mask[30:0]) |
- (p_r[30:0] & lsr_mask[30:0]) |
- (~lsr_mask[30:0] & {31{asr_sign}});
-
-// Rotate: calculate bit pos for level "level" and offset "pos"
-function [4:0] wrap;
-input integer pos;
-input integer level;
-integer out;
-begin
- out = pos - (1 << level);
- wrap = out[4:0];
-end
-endfunction
-
-// Swap bits in the input 16-bit value
-function [15:0] bit_swap;
-input [15:0] value;
-integer i;
-begin
- for (i = 0; i < 16; i = i + 1)
- bit_swap[i] = value[15 - i];
-end
-endfunction
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_cache.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_cache.v
deleted file mode 100644
index 45792bb..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_cache.v
+++ /dev/null
@@ -1,1296 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// L1 Cache for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Synthesizable L1 Unified Data and Instruction Cache //
-// Cache is 4-way, 256 line and 16 bytes per line for //
-// a total of 16KB. The cache policy is write-through and //
-// read allocate. For swap instructions (SWP and SWPB) the //
-// location is evicted from the cache and read from main //
-// memory. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////
-// //
-// Global testbench defines //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines for each module so if the module //
-// hierarchy changes, hierarchical references to signals //
-// will still work as long as this file is updated. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// ---------------------------------------------------------------
-// Module hierarchy defines
-// ---------------------------------------------------------------
-
-
-
-
- // ---------------------------------------------------------------
-
-
-
-// Simplified Main Memory Model
-
-//////////////////////////////////////////////////////////////////
-// //
-// Amber Configuration and Debug for the AMber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines used to configure and debug //
-// the Amber core //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Cache Ways
-// Changing this parameter is the recommended
-// way to change the Amber cache size; 2, 3, 4 and 8 ways are supported.
-// 2 ways -> 8KB cache
-// 3 ways -> 12KB cache
-// 4 ways -> 16KB cache
-// 8 ways -> 32KB cache
-
-// Use ram-based register bank implementation
-// `define A23_RAM_REGISTER_BANK
-
-// --------------------------------------------------------------------
-// Debug switches
-// --------------------------------------------------------------------
-
-// Enable the decompiler. The default output file is amber.dis
-//`define A23_DECOMPILE
-
-// Co-processor 15 debug. Registers in here control the cache
-//`define A23_COPRO15_DEBUG
-
-// Cache debug
-//`define A23_CACHE_DEBUG
-
-// --------------------------------------------------------------------
-
-
-// --------------------------------------------------------------------
-// File Names
-// --------------------------------------------------------------------
-
-
-
-module a23_cache
-#(
-
-// ---------------------------------------------------------
-// Cache Configuration
-
-// Limited to Linux 4k page sizes -> 256 lines
-parameter CACHE_LINES = 256,
-
-// This cannot be changed without some major surgeory on
-// this module
-parameter CACHE_WORDS_PER_LINE = 4,
-
-// Changing this parameter is the recommended
-// way to change the overall cache size; 2, 4 and 8 ways are supported.
-// 2 ways -> 8KB cache
-// 4 ways -> 16KB cache
-// 8 ways -> 32KB cache
-parameter WAYS = 4 ,
-
-// derived configuration parameters
-parameter CACHE_ADDR_WIDTH = 8, // log2 ( CACHE_LINES ), // = 8
-parameter WORD_SEL_WIDTH = 2, // log2 ( CACHE_WORDS_PER_LINE ), // = 2
-parameter TAG_ADDR_WIDTH = 32 - CACHE_ADDR_WIDTH - WORD_SEL_WIDTH - 2, // = 20
-parameter TAG_WIDTH = TAG_ADDR_WIDTH + 1, // = 21, including Valid flag
-parameter CACHE_LINE_WIDTH = CACHE_WORDS_PER_LINE * 32, // = 128
-parameter TAG_ADDR32_LSB = CACHE_ADDR_WIDTH + WORD_SEL_WIDTH + 2, // = 12
-parameter CACHE_ADDR32_MSB = CACHE_ADDR_WIDTH + WORD_SEL_WIDTH + 2 - 1, // = 11
-parameter CACHE_ADDR32_LSB = WORD_SEL_WIDTH + 2 , // = 4
-parameter WORD_SEL_MSB = WORD_SEL_WIDTH + 2 - 1, // = 3
-parameter WORD_SEL_LSB = 2 // = 2
-// ---------------------------------------------------------
-)
-
-
-(
-input i_clk,
-
-// Read / Write requests from core
-input i_select,
-input i_exclusive, // exclusive access, part of swap instruction
-input [31:0] i_write_data,
-input i_write_enable, // core issued write request
-input [31:0] i_address, // registered address from execute
-input [31:0] i_address_nxt, // un-registered version of address from execute stage
-input [3:0] i_byte_enable,
-input i_cache_enable, // from co-processor 15 configuration register
-input i_cache_flush, // from co-processor 15 register
-
-output [31:0] o_read_data,
-input i_core_stall,
-output o_stall,
-
-// WB Read Request
-output o_wb_req, // Read Request
-input [31:0] i_wb_address, // wb bus
-input [31:0] i_wb_read_data, // wb bus
-input i_wb_stall // wb_stb && !wb_ack
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-//////////////////////////////////////////////////////////////////
-// //
-// Functions for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Functions used in more than one module //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// ========================================================
-// PC Filter - Remove the status bits
-// ========================================================
-function [31:0] pcf;
-input [31:0] pc_reg;
- begin
- pcf = {6'd0, pc_reg[25:2], 2'd0};
- end
-endfunction
-
-
-// ========================================================
-// 4-bit to 16-bit 1-hot decode
-// ========================================================
-function [14:0] decode;
-input [3:0] reg_sel;
-begin
-case ( reg_sel )
- 4'h0: decode = 15'h0001;
- 4'h1: decode = 15'h0002;
- 4'h2: decode = 15'h0004;
- 4'h3: decode = 15'h0008;
- 4'h4: decode = 15'h0010;
- 4'h5: decode = 15'h0020;
- 4'h6: decode = 15'h0040;
- 4'h7: decode = 15'h0080;
- 4'h8: decode = 15'h0100;
- 4'h9: decode = 15'h0200;
- 4'ha: decode = 15'h0400;
- 4'hb: decode = 15'h0800;
- 4'hc: decode = 15'h1000;
- 4'hd: decode = 15'h2000;
- 4'he: decode = 15'h4000;
- default: decode = 15'h0000;
-endcase
-end
-endfunction
-
-
-// ========================================================
-// Convert Stats Bits Mode to one-hot encoded version
-// ========================================================
-function [3:0] oh_status_bits_mode;
-input [1:0] fn_status_bits_mode;
-begin
-oh_status_bits_mode =
- fn_status_bits_mode == SVC ? 1'd1 << OH_SVC :
- fn_status_bits_mode == IRQ ? 1'd1 << OH_IRQ :
- fn_status_bits_mode == FIRQ ? 1'd1 << OH_FIRQ :
- 1'd1 << OH_USR ;
-end
-endfunction
-
-// ========================================================
-// Convert mode into ascii name
-// ========================================================
-function [(14*8)-1:0] mode_name;
-input [4:0] mode;
-begin
-
-mode_name = mode == USR ? "User " :
- mode == SVC ? "Supervisor " :
- mode == IRQ ? "Interrupt " :
- mode == FIRQ ? "Fast Interrupt" :
- "UNKNOWN " ;
-end
-endfunction
-
-
-// ========================================================
-// Conditional Execution Function
-// ========================================================
-// EQ Z set
-// NE Z clear
-// CS C set
-// CC C clear
-// MI N set
-// PL N clear
-// VS V set
-// VC V clear
-// HI C set and Z clear
-// LS C clear or Z set
-// GE N == V
-// LT N != V
-// GT Z == 0,N == V
-// LE Z == 1 or N != V
-// AL Always (unconditional)
-// NV Never
-
-function conditional_execute;
-input [3:0] condition;
-input [3:0] flags;
-begin
-conditional_execute
- = ( condition == AL ) ||
- ( condition == EQ && flags[2] ) ||
- ( condition == NE && !flags[2] ) ||
- ( condition == CS && flags[1] ) ||
- ( condition == CC && !flags[1] ) ||
- ( condition == MI && flags[3] ) ||
- ( condition == PL && !flags[3] ) ||
- ( condition == VS && flags[0] ) ||
- ( condition == VC && !flags[0] ) ||
-
- ( condition == HI && flags[1] && !flags[2] ) ||
- ( condition == LS && (!flags[1] || flags[2]) ) ||
-
- ( condition == GE && flags[3] == flags[0] ) ||
- ( condition == LT && flags[3] != flags[0] ) ||
-
- ( condition == GT && !flags[2] && flags[3] == flags[0] ) ||
- ( condition == LE && (flags[2] || flags[3] != flags[0])) ;
-
-end
-endfunction
-
-
-// ========================================================
-// Log 2
-// ========================================================
-
-function [31:0] log2;
-input [31:0] num;
-integer i;
-integer out;
-begin
- out = 32'd0;
- for (i=0; i<30; i=i+1)
- if ((2**i > num) && (out == 0))
- out = i-1;
- log2 = out;
-end
-endfunction
-
-// One-hot encoded
-localparam C_INIT = 0,
- C_CORE = 1,
- C_FILL = 2,
- C_INVA = 3,
- C_STATES = 4;
-
-localparam [3:0] CS_INIT = 4'd0,
- CS_IDLE = 4'd1,
- CS_FILL1 = 4'd2,
- CS_FILL2 = 4'd3,
- CS_FILL3 = 4'd4,
- CS_FILL4 = 4'd5,
- CS_FILL_COMPLETE = 4'd6,
- CS_TURN_AROUND = 4'd7,
- CS_WRITE_HIT1 = 4'd8,
- CS_EX_DELETE = 4'd9;
-
-
-reg [3:0] c_state = CS_IDLE;
-reg [C_STATES-1:0] source_sel = 1'd1 << C_CORE;
-reg [CACHE_ADDR_WIDTH:0] init_count = 'd0;
-
-wire [TAG_WIDTH-1:0] tag_rdata_way [WAYS-1:0];
-wire [CACHE_LINE_WIDTH-1:0] data_rdata_way[WAYS-1:0];
-wire [WAYS-1:0] data_wenable_way;
-wire [WAYS-1:0] data_hit_way;
-wire [WAYS-1:0] tag_wenable_way;
-reg [WAYS-1:0] select_way = 'd0;
-wire [WAYS-1:0] next_way;
-reg [WAYS-1:0] valid_bits_r = 'd0;
-
-reg [3:0] random_num = 4'hf;
-
-wire [CACHE_ADDR_WIDTH-1:0] tag_address;
-wire [TAG_WIDTH-1:0] tag_wdata;
-wire tag_wenable;
-
-wire [CACHE_LINE_WIDTH-1:0] read_miss_wdata;
-wire [CACHE_LINE_WIDTH-1:0] write_hit_wdata;
-wire [CACHE_LINE_WIDTH-1:0] data_wdata;
-wire [CACHE_ADDR_WIDTH-1:0] data_address;
-wire [31:0] write_data_word;
-
-wire hit;
-wire read_miss;
-wire write_miss;
-wire write_hit;
-
-reg [31:0] miss_address = 'd0;
-wire [CACHE_LINE_WIDTH-1:0] hit_rdata;
-
-wire write_stall;
-wire cache_busy_stall;
-wire read_stall;
-
-wire enable;
-wire [CACHE_ADDR_WIDTH-1:0] address;
-
-reg [CACHE_LINE_WIDTH-1:0] wb_rdata_burst = 'd0;
-reg wb_read_buf_valid = 'd0;
-reg [31:0] wb_read_buf_address = 'd0;
-reg [31:0] wb_read_buf_data = 'd0;
-wire wb_read_buf_hit;
-
-wire exclusive_access;
-wire ex_read_hit;
-reg ex_read_hit_r = 'd0;
-reg [WAYS-1:0] ex_read_hit_way = 'd0;
-reg [CACHE_ADDR_WIDTH-1:0] ex_read_address;
-wire ex_read_hit_clear;
-wire ex_read_cache_busy;
-
-genvar i;
-
-// ======================================
-// Address to use for cache access
-// ======================================
-// If currently stalled then the address for the next
-// cycle will be the same as it is in the current cycle
-//
-assign address = i_core_stall ? i_address [CACHE_ADDR32_MSB:CACHE_ADDR32_LSB] :
- i_address_nxt[CACHE_ADDR32_MSB:CACHE_ADDR32_LSB] ;
-
-// ======================================
-// Outputs
-// ======================================
-assign o_read_data = wb_read_buf_hit ? wb_read_buf_data :
- i_address[WORD_SEL_MSB:WORD_SEL_LSB] == 2'd0 ? hit_rdata [31:0] :
- i_address[WORD_SEL_MSB:WORD_SEL_LSB] == 2'd1 ? hit_rdata [63:32] :
- i_address[WORD_SEL_MSB:WORD_SEL_LSB] == 2'd2 ? hit_rdata [95:64] :
- hit_rdata [127:96] ;
-
-// Don't allow the cache to stall the wb i/f for an exclusive access
-// The cache needs a couple of cycles to flush a potential copy of the exclusive
-// address, but the wb can do the access in parallel. So there is no
-// stall in the state CS_EX_DELETE, even though the cache is out of action.
-// This works fine as long as the wb is stalling the core
-assign o_stall = read_stall || write_stall || cache_busy_stall || ex_read_cache_busy;
-
-assign o_wb_req = (( read_miss || write_miss ) && c_state == CS_IDLE ) ||
- c_state == CS_WRITE_HIT1;
-
-
-// ======================================
-// Cache State Machine
-// ======================================
-
-// Little State Machine to Flush Tag RAMS
-always @ ( posedge i_clk )
- if ( i_cache_flush )
- begin
- c_state <= C_INIT;
- source_sel <= 1'd1 << C_INIT;
- init_count <= 'd0;
- end
- else
- case ( c_state )
- CS_INIT :
- if ( init_count < CACHE_LINES [CACHE_ADDR_WIDTH:0] )
- begin
- init_count <= init_count + 1'd1;
- source_sel <= 1'd1 << C_INIT;
- end
- else
- begin
- source_sel <= 1'd1 << C_CORE;
- c_state <= CS_TURN_AROUND;
- end
-
- CS_IDLE :
- begin
- source_sel <= 1'd1 << C_CORE;
-
- if ( ex_read_hit || ex_read_hit_r )
- begin
- select_way <= data_hit_way | ex_read_hit_way;
- c_state <= CS_EX_DELETE;
- source_sel <= 1'd1 << C_INVA;
- end
- else if ( read_miss )
- begin
- // wb read request asserted, wait for ack
- if ( !i_wb_stall )
- c_state <= CS_FILL1;
- end
- else if ( write_hit )
- c_state <= CS_WRITE_HIT1;
- end
-
-
- CS_FILL1 :
- begin
- // wb read request asserted, wait for ack
- if ( !i_wb_stall )
- c_state <= CS_FILL2;
- end
-
-
- CS_FILL2 :
- // first read of burst of 4
- // wb read request asserted, wait for ack
- if ( !i_wb_stall )
- c_state <= CS_FILL3;
-
-
- CS_FILL3 :
- // second read of burst of 4
- // wb read request asserted, wait for ack
- if ( !i_wb_stall )
- c_state <= CS_FILL4;
-
-
- CS_FILL4 :
- // third read of burst of 4
- // wb read request asserted, wait for ack
- if ( !i_wb_stall )
- begin
- c_state <= CS_FILL_COMPLETE;
- source_sel <= 1'd1 << C_FILL;
-
- // Pick a way to write the cache update into
- // Either pick one of the invalid caches, or if all are valid, then pick
- // one randomly
-
- select_way <= next_way;
- random_num <= {random_num[2], random_num[1], random_num[0],
- random_num[3]^random_num[2]};
- end
-
-
- // Write the read fetch data in this cycle
- CS_FILL_COMPLETE :
- // fourth read of burst of 4
- // wb read request asserted, wait for ack
- if ( !i_wb_stall )
- begin
- // Back to normal cache operations, but
- // use physical address for first read as
- // address moved before the stall was asserted for the read_miss
- // However don't use it if its a non-cached address!
- source_sel <= 1'd1 << C_CORE;
- c_state <= CS_TURN_AROUND;
- end
-
-
- // Ignore the tag read data in this cycle
- // Wait 1 cycle to pre-read the cache and return to normal operation
- CS_TURN_AROUND :
- begin
- c_state <= CS_IDLE;
- end
-
-
- // Flush the entry matching an exclusive access
- CS_EX_DELETE:
- begin
- c_state <= CS_TURN_AROUND;
- source_sel <= 1'd1 << C_CORE;
- end
-
-
- CS_WRITE_HIT1:
- begin
- // wait for an ack on the wb bus to complete the write
- if ( !i_wb_stall )
- c_state <= CS_IDLE;
-
- end
- endcase
-
-
-// ======================================
-// Capture WB Block Read - burst of 4 words
-// ======================================
-always @ ( posedge i_clk )
- if ( !i_wb_stall )
- wb_rdata_burst <= {i_wb_read_data, wb_rdata_burst[127:32]};
-
-
-// ======================================
-// WB Read Buffer
-// ======================================
-always @ ( posedge i_clk )
- begin
- if ( c_state == CS_FILL1 || c_state == CS_FILL2 ||
- c_state == CS_FILL3 || c_state == CS_FILL4 )
- begin
- if ( !i_wb_stall )
- begin
- wb_read_buf_valid <= 1'd1;
- wb_read_buf_address <= i_wb_address;
- wb_read_buf_data <= i_wb_read_data;
- end
- end
- else
- wb_read_buf_valid <= 1'd0;
- end
-
-
-// ======================================
-// Miss Address
-// ======================================
-always @ ( posedge i_clk )
- if ( o_wb_req )
- miss_address <= i_address;
-
-
-// ======================================
-// Remember Read-Modify-Write Hit
-// ======================================
-assign ex_read_hit_clear = c_state == CS_EX_DELETE;
-
-always @ ( posedge i_clk )
- if ( ex_read_hit_clear )
- begin
- ex_read_hit_r <= 1'd0;
- ex_read_hit_way <= 'd0;
- end
- else if ( ex_read_hit )
- begin
-
-
- ex_read_hit_r <= 1'd1;
- ex_read_hit_way <= data_hit_way;
- end
- else if ( c_state == CS_FILL_COMPLETE && ex_read_hit_r )
- ex_read_hit_way <= select_way;
-
-
-always @ (posedge i_clk)
- if ( ex_read_hit )
- ex_read_address <= i_address[CACHE_ADDR32_MSB:CACHE_ADDR32_LSB];
-
-
-assign tag_address = source_sel[C_FILL] ? miss_address [CACHE_ADDR32_MSB:CACHE_ADDR32_LSB] :
- source_sel[C_INVA] ? ex_read_address :
- source_sel[C_INIT] ? init_count[CACHE_ADDR_WIDTH-1:0] :
- source_sel[C_CORE] ? address :
- {CACHE_ADDR_WIDTH{1'd0}} ;
-
-
-assign data_address = write_hit ? i_address [CACHE_ADDR32_MSB:CACHE_ADDR32_LSB] :
- source_sel[C_FILL] ? miss_address[CACHE_ADDR32_MSB:CACHE_ADDR32_LSB] :
- source_sel[C_CORE] ? address :
- {CACHE_ADDR_WIDTH{1'd0}} ;
-
-
-assign tag_wdata = source_sel[C_FILL] ? {1'd1, miss_address[31:TAG_ADDR32_LSB]} :
- {TAG_WIDTH{1'd0}} ;
-
-
- // Data comes in off the WB bus in wrap4 with the missed data word first
-assign data_wdata = write_hit && c_state == CS_IDLE ? write_hit_wdata : read_miss_wdata;
-
-assign read_miss_wdata = miss_address[3:2] == 2'd0 ? wb_rdata_burst :
- miss_address[3:2] == 2'd1 ? { wb_rdata_burst[95:0], wb_rdata_burst[127:96] }:
- miss_address[3:2] == 2'd2 ? { wb_rdata_burst[63:0], wb_rdata_burst[127:64] }:
- { wb_rdata_burst[31:0], wb_rdata_burst[127:32] };
-
-
-assign write_hit_wdata = i_address[3:2] == 2'd0 ? {hit_rdata[127:32], write_data_word } :
- i_address[3:2] == 2'd1 ? {hit_rdata[127:64], write_data_word, hit_rdata[31:0] } :
- i_address[3:2] == 2'd2 ? {hit_rdata[127:96], write_data_word, hit_rdata[63:0] } :
- { write_data_word, hit_rdata[95:0] } ;
-
-// Use Byte Enables
-assign write_data_word = i_byte_enable == 4'b0001 ? { o_read_data[31: 8], i_write_data[ 7: 0] } :
- i_byte_enable == 4'b0010 ? { o_read_data[31:16], i_write_data[15: 8], o_read_data[ 7:0]} :
- i_byte_enable == 4'b0100 ? { o_read_data[31:24], i_write_data[23:16], o_read_data[15:0]} :
- i_byte_enable == 4'b1000 ? { i_write_data[31:24], o_read_data[23:0]} :
- i_byte_enable == 4'b0011 ? { o_read_data[31:16], i_write_data[15: 0] } :
- i_byte_enable == 4'b1100 ? { i_write_data[31:16], o_read_data[15:0]} :
- i_write_data ;
-
-
-assign tag_wenable = source_sel[C_INVA] ? 1'd1 :
- source_sel[C_FILL] ? 1'd1 :
- source_sel[C_INIT] ? 1'd1 :
- source_sel[C_CORE] ? 1'd0 :
- 1'd0 ;
-
-
-assign enable = i_select && i_cache_enable;
-
-assign exclusive_access = i_exclusive && i_cache_enable;
-
-
- // the wb read buffer returns data directly from the wb bus to the
- // core during a read miss operation
-assign wb_read_buf_hit = enable && wb_read_buf_address == i_address && wb_read_buf_valid;
-
-assign hit = |data_hit_way;
-
-assign write_hit = enable && i_write_enable && hit;
-
-assign write_miss = enable && i_write_enable && !hit && c_state != CS_WRITE_HIT1;
-
-assign read_miss = enable && !i_write_enable && !(hit || wb_read_buf_hit);
-
- // Exclusive read hit
-assign ex_read_hit = exclusive_access && !i_write_enable && (hit || wb_read_buf_hit);
-
- // Added to fix rare swap bug which occurs when the cache starts
- // a fill just as the swap instruction starts to execute. The cache
- // fails to check for a read hit on the swap read cycle.
- // This signal stalls the core in that case until after the
- // fill has completed.
-assign ex_read_cache_busy = exclusive_access && !i_write_enable && c_state != CS_IDLE;
-
- // Need to stall for a write miss to wait for the current wb
- // read miss access to complete. Also for a write hit, need
- // to stall for 1 cycle while the data cache is being written to
-assign write_stall = ( write_hit && c_state != CS_WRITE_HIT1 ) ||
- ( write_miss && ( c_state != CS_IDLE ) ) ||
- i_wb_stall ;
-
-assign read_stall = read_miss;
-
- // Core may or may not be trying to access cache memory during
- // this phase of the read fetch. It could be doing e.g. a wb access
-assign cache_busy_stall = ((c_state == CS_TURN_AROUND || c_state == CS_FILL1) && enable) ||
- c_state == CS_INIT;
-
-
-// ======================================
-// Instantiate RAMS
-// ======================================
-
-generate
- for ( i=0; i<WAYS;i=i+1 ) begin : rams
-
- // Tag RAMs
-
-
- generic_sram_line_en
-
- #(
- .DATA_WIDTH ( TAG_WIDTH ),
- .INITIALIZE_TO_ZERO ( 1 ),
- .ADDRESS_WIDTH ( CACHE_ADDR_WIDTH ))
- u_tag (
- .i_clk ( i_clk ),
- .i_write_data ( tag_wdata ),
- .i_write_enable ( tag_wenable_way[i] ),
- .i_address ( tag_address ),
-
- .o_read_data ( tag_rdata_way[i] )
- );
-
- // Data RAMs
-
-
- generic_sram_byte_en
-
- #(
- .DATA_WIDTH ( CACHE_LINE_WIDTH) ,
- .ADDRESS_WIDTH ( CACHE_ADDR_WIDTH) )
- u_data (
- .i_clk ( i_clk ),
- .i_write_data ( data_wdata ),
- .i_write_enable ( data_wenable_way[i] ),
- .i_address ( data_address ),
- .i_byte_enable ( {CACHE_LINE_WIDTH/8{1'd1}} ),
- .o_read_data ( data_rdata_way[i] )
- );
-
-
- // Per tag-ram write-enable
- assign tag_wenable_way[i] = tag_wenable && ( select_way[i] || source_sel[C_INIT] );
-
- // Per data-ram write-enable
- assign data_wenable_way[i] = (source_sel[C_FILL] && select_way[i]) ||
- (write_hit && data_hit_way[i] && c_state == CS_IDLE);
- // Per data-ram hit flag
- assign data_hit_way[i] = tag_rdata_way[i][TAG_WIDTH-1] &&
- tag_rdata_way[i][TAG_ADDR_WIDTH-1:0] == i_address[31:TAG_ADDR32_LSB] &&
- c_state == CS_IDLE;
- end
-endgenerate
-
-
-// ======================================
-// Register Valid Bits
-// ======================================
-generate
-if ( WAYS == 2 ) begin : valid_bits_2ways
-
- always @ ( posedge i_clk )
- if ( c_state == CS_IDLE )
- valid_bits_r <= {tag_rdata_way[1][TAG_WIDTH-1],
- tag_rdata_way[0][TAG_WIDTH-1]};
-
-end
-else if ( WAYS == 3 ) begin : valid_bits_3ways
-
- always @ ( posedge i_clk )
- if ( c_state == CS_IDLE )
- valid_bits_r <= {tag_rdata_way[2][TAG_WIDTH-1],
- tag_rdata_way[1][TAG_WIDTH-1],
- tag_rdata_way[0][TAG_WIDTH-1]};
-
-end
-else if ( WAYS == 4 ) begin : valid_bits_4ways
-
- always @ ( posedge i_clk )
- if ( c_state == CS_IDLE )
- valid_bits_r <= {tag_rdata_way[3][TAG_WIDTH-1],
- tag_rdata_way[2][TAG_WIDTH-1],
- tag_rdata_way[1][TAG_WIDTH-1],
- tag_rdata_way[0][TAG_WIDTH-1]};
-
-end
-else begin : valid_bits_8ways
-
- always @ ( posedge i_clk )
- if ( c_state == CS_IDLE )
- valid_bits_r <= {tag_rdata_way[7][TAG_WIDTH-1],
- tag_rdata_way[6][TAG_WIDTH-1],
- tag_rdata_way[5][TAG_WIDTH-1],
- tag_rdata_way[4][TAG_WIDTH-1],
- tag_rdata_way[3][TAG_WIDTH-1],
- tag_rdata_way[2][TAG_WIDTH-1],
- tag_rdata_way[1][TAG_WIDTH-1],
- tag_rdata_way[0][TAG_WIDTH-1]};
-
-end
-endgenerate
-
-
-// ======================================
-// Select read hit data
-// ======================================
-generate
-if ( WAYS == 2 ) begin : read_data_2ways
-
- assign hit_rdata = data_hit_way[0] ? data_rdata_way[0] :
- data_hit_way[1] ? data_rdata_way[1] :
- {CACHE_LINE_WIDTH{1'd1}} ; // all 1's for debug
-
-end
-else if ( WAYS == 3 ) begin : read_data_3ways
-
- assign hit_rdata = data_hit_way[0] ? data_rdata_way[0] :
- data_hit_way[1] ? data_rdata_way[1] :
- data_hit_way[2] ? data_rdata_way[2] :
- {CACHE_LINE_WIDTH{1'd1}} ; // all 1's for debug
-
-end
-else if ( WAYS == 4 ) begin : read_data_4ways
-
- assign hit_rdata = data_hit_way[0] ? data_rdata_way[0] :
- data_hit_way[1] ? data_rdata_way[1] :
- data_hit_way[2] ? data_rdata_way[2] :
- data_hit_way[3] ? data_rdata_way[3] :
- {CACHE_LINE_WIDTH{1'd1}} ; // all 1's for debug
-
-end
-else begin : read_data_8ways
-
- assign hit_rdata = data_hit_way[0] ? data_rdata_way[0] :
- data_hit_way[1] ? data_rdata_way[1] :
- data_hit_way[2] ? data_rdata_way[2] :
- data_hit_way[3] ? data_rdata_way[3] :
- data_hit_way[4] ? data_rdata_way[4] :
- data_hit_way[5] ? data_rdata_way[5] :
- data_hit_way[6] ? data_rdata_way[6] :
- data_hit_way[7] ? data_rdata_way[7] :
- {CACHE_LINE_WIDTH{1'd1}} ; // all 1's for debug
-
-end
-endgenerate
-
-
-// ======================================
-// Function to select the way to use
-// for fills
-// ======================================
-generate
-if ( WAYS == 2 ) begin : pick_way_2ways
-
- assign next_way = pick_way ( valid_bits_r, random_num );
-
- function [WAYS-1:0] pick_way;
- input [WAYS-1:0] valid_bits;
- input [3:0] random_num;
- begin
- if ( valid_bits[0] == 1'd0 )
- // way 0 not occupied so use it
- pick_way = 2'b01;
- else if ( valid_bits[1] == 1'd0 )
- // way 1 not occupied so use it
- pick_way = 2'b10;
- else
- begin
- // All ways occupied so pick one randomly
- case (random_num[3:1])
- 3'd0, 3'd3,
- 3'd5, 3'd6: pick_way = 2'b10;
- default: pick_way = 2'b01;
- endcase
- end
- end
- endfunction
-
-end
-else if ( WAYS == 3 ) begin : pick_way_3ways
-
- assign next_way = pick_way ( valid_bits_r, random_num );
-
- function [WAYS-1:0] pick_way;
- input [WAYS-1:0] valid_bits;
- input [3:0] random_num;
- begin
- if ( valid_bits[0] == 1'd0 )
- // way 0 not occupied so use it
- pick_way = 3'b001;
- else if ( valid_bits[1] == 1'd0 )
- // way 1 not occupied so use it
- pick_way = 3'b010;
- else if ( valid_bits[2] == 1'd0 )
- // way 2 not occupied so use it
- pick_way = 3'b100;
- else
- begin
- // All ways occupied so pick one randomly
- case (random_num[3:1])
- 3'd0, 3'd1, 3'd2: pick_way = 3'b010;
- 3'd2, 3'd3, 3'd4: pick_way = 3'b100;
- default: pick_way = 3'b001;
- endcase
- end
- end
- endfunction
-
-end
-else if ( WAYS == 4 ) begin : pick_way_4ways
-
- assign next_way = pick_way ( valid_bits_r, random_num );
-
- function [WAYS-1:0] pick_way;
- input [WAYS-1:0] valid_bits;
- input [3:0] random_num;
- begin
- if ( valid_bits[0] == 1'd0 )
- // way 0 not occupied so use it
- pick_way = 4'b0001;
- else if ( valid_bits[1] == 1'd0 )
- // way 1 not occupied so use it
- pick_way = 4'b0010;
- else if ( valid_bits[2] == 1'd0 )
- // way 2 not occupied so use it
- pick_way = 4'b0100;
- else if ( valid_bits[3] == 1'd0 )
- // way 3 not occupied so use it
- pick_way = 4'b1000;
- else
- begin
- // All ways occupied so pick one randomly
- case (random_num[3:1])
- 3'd0, 3'd1: pick_way = 4'b0100;
- 3'd2, 3'd3: pick_way = 4'b1000;
- 3'd4, 3'd5: pick_way = 4'b0001;
- default: pick_way = 4'b0010;
- endcase
- end
- end
- endfunction
-
-end
-else begin : pick_way_8ways
-
- assign next_way = pick_way ( valid_bits_r, random_num );
-
- function [WAYS-1:0] pick_way;
- input [WAYS-1:0] valid_bits;
- input [3:0] random_num;
- begin
- if ( valid_bits[0] == 1'd0 )
- // way 0 not occupied so use it
- pick_way = 8'b00000001;
- else if ( valid_bits[1] == 1'd0 )
- // way 1 not occupied so use it
- pick_way = 8'b00000010;
- else if ( valid_bits[2] == 1'd0 )
- // way 2 not occupied so use it
- pick_way = 8'b00000100;
- else if ( valid_bits[3] == 1'd0 )
- // way 3 not occupied so use it
- pick_way = 8'b00001000;
- else if ( valid_bits[4] == 1'd0 )
- // way 3 not occupied so use it
- pick_way = 8'b00010000;
- else if ( valid_bits[5] == 1'd0 )
- // way 3 not occupied so use it
- pick_way = 8'b00100000;
- else if ( valid_bits[6] == 1'd0 )
- // way 3 not occupied so use it
- pick_way = 8'b01000000;
- else if ( valid_bits[7] == 1'd0 )
- // way 3 not occupied so use it
- pick_way = 8'b10000000;
- else
- begin
- // All ways occupied so pick one randomly
- case (random_num[3:1])
- 3'd0: pick_way = 8'b00010000;
- 3'd1: pick_way = 8'b00100000;
- 3'd2: pick_way = 8'b01000000;
- 3'd3: pick_way = 8'b10000000;
- 3'd4: pick_way = 8'b00000001;
- 3'd5: pick_way = 8'b00000010;
- 3'd6: pick_way = 8'b00000100;
- default: pick_way = 8'b00001000;
- endcase
- end
- end
- endfunction
-
-end
-endgenerate
-
-
-// ========================================================
-// Debug WB bus - not synthesizable
-// ========================================================
-//synopsys translate_off
-wire [(6*8)-1:0] xSOURCE_SEL;
-wire [(20*8)-1:0] xC_STATE;
-
-assign xSOURCE_SEL = source_sel[C_CORE] ? "C_CORE" :
- source_sel[C_INIT] ? "C_INIT" :
- source_sel[C_FILL] ? "C_FILL" :
- source_sel[C_INVA] ? "C_INVA" :
- "UNKNON" ;
-
-assign xC_STATE = c_state == CS_INIT ? "CS_INIT" :
- c_state == CS_IDLE ? "CS_IDLE" :
- c_state == CS_FILL1 ? "CS_FILL1" :
- c_state == CS_FILL2 ? "CS_FILL2" :
- c_state == CS_FILL3 ? "CS_FILL3" :
- c_state == CS_FILL4 ? "CS_FILL4" :
- c_state == CS_FILL_COMPLETE ? "CS_FILL_COMPLETE" :
- c_state == CS_EX_DELETE ? "CS_EX_DELETE" :
- c_state == CS_TURN_AROUND ? "CS_TURN_AROUND" :
- c_state == CS_WRITE_HIT1 ? "CS_WRITE_HIT1" :
- "UNKNOWN" ;
-
-
-generate
-if ( WAYS == 2 ) begin : check_hit_2ways
-
- always @( posedge i_clk )
- if ( (data_hit_way[0] + data_hit_way[1] ) > 4'd1 )
- begin
- $display("FATAL ERROR"); $stop;
- $display("Hit in more than one cache ways!");
- end
-
-end
-else if ( WAYS == 3 ) begin : check_hit_3ways
-
- always @( posedge i_clk )
- if ( (data_hit_way[0] + data_hit_way[1] + data_hit_way[2] ) > 4'd1 )
- begin
- $display("FATAL ERROR"); $stop;
- $display("Hit in more than one cache ways!");
- end
-
-end
-else if ( WAYS == 4 ) begin : check_hit_4ways
-
- always @( posedge i_clk )
- if ( (data_hit_way[0] + data_hit_way[1] +
- data_hit_way[2] + data_hit_way[3] ) > 4'd1 )
- begin
- $display("FATAL ERROR"); $stop;
- $display("Hit in more than one cache ways!");
- end
-
-end
-else if ( WAYS == 8 ) begin : check_hit_8ways
-
- always @( posedge i_clk )
- if ( (data_hit_way[0] + data_hit_way[1] +
- data_hit_way[2] + data_hit_way[3] +
- data_hit_way[4] + data_hit_way[5] +
- data_hit_way[6] + data_hit_way[7] ) > 4'd1 )
- begin
- $display("FATAL ERROR"); $stop;
- $display("Hit in more than one cache ways!");
- end
-
-end
-else begin : check_hit_nways
-
- initial
- begin
- $display("FATAL ERROR"); $stop;
- $display("Unsupported number of ways %0d", WAYS);
- $display("Set A23_CACHE_WAYS in a23_config_defines.v to either 2,3,4 or 8");
- end
-
-end
-endgenerate
-
-//synopsys translate_on
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_config_defines.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_config_defines.v
deleted file mode 100644
index 0888dde..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_config_defines.v
+++ /dev/null
@@ -1,74 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Amber Configuration and Debug for the AMber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines used to configure and debug //
-// the Amber core //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Cache Ways
-// Changing this parameter is the recommended
-// way to change the Amber cache size; 2, 3, 4 and 8 ways are supported.
-// 2 ways -> 8KB cache
-// 3 ways -> 12KB cache
-// 4 ways -> 16KB cache
-// 8 ways -> 32KB cache
-
-// Use ram-based register bank implementation
-// `define A23_RAM_REGISTER_BANK
-
-// --------------------------------------------------------------------
-// Debug switches
-// --------------------------------------------------------------------
-
-// Enable the decompiler. The default output file is amber.dis
-//`define A23_DECOMPILE
-
-// Co-processor 15 debug. Registers in here control the cache
-//`define A23_COPRO15_DEBUG
-
-// Cache debug
-//`define A23_CACHE_DEBUG
-
-// --------------------------------------------------------------------
-
-
-// --------------------------------------------------------------------
-// File Names
-// --------------------------------------------------------------------
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_coprocessor.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_coprocessor.v
deleted file mode 100644
index 1e839c2..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_coprocessor.v
+++ /dev/null
@@ -1,156 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Co-processor module for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Co_processor 15 registers and control signals // //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_coprocessor
-(
-input i_clk,
-input i_fetch_stall, // stall all stages of the cpu at the same time
-input [2:0] i_copro_opcode1,
-input [2:0] i_copro_opcode2,
-input [3:0] i_copro_crn, // Register Number
-input [3:0] i_copro_crm,
-input [3:0] i_copro_num,
-input [1:0] i_copro_operation,
-input [31:0] i_copro_write_data,
-
-input i_fault, // high to latch the fault address and status
-input [7:0] i_fault_status,
-input [31:0] i_fault_address, // the address that caused the fault
-
-output reg [31:0] o_copro_read_data,
-output o_cache_enable,
-output o_cache_flush,
-output [31:0] o_cacheable_area
-);
-
-// Bit 0 - Cache on(1)/off
-// Bit 1 - Shared (1) or seperate User/Supervisor address space
-// Bit 2 - address monitor mode(1)
-reg [2:0] cache_control = 3'b000;
-
-// Bit 0 - 2MB memory from 0 to 0x01fffff cacheable(1)/not cachable
-// Bit 1 - next 2MB region etc.
-reg [31:0] cacheable_area = 32'h0;
-
-// Marks memory regions as read only so writes are ignored by the cache
-// Bit 0 - 2MB memory from 0 to 0x01fffff updateable(1)/not updateable
-// Bit 1 - next 2MB region etc.
-reg [31:0] updateable_area = 32'h0;
-
-// Accesses to a region with a flag set in this register cause the
-// cache to flush
-// Bit 0 - 2MB memory from 0 to 0x01fffff
-// Bit 1 - next 2MB region etc.
-reg [31:0] disruptive_area = 32'h0;
-
-
-reg [7:0] fault_status = 'd0;
-reg [31:0] fault_address = 'd0; // the address that caused the fault
-
-wire copro15_reg1_write;
-
-
-// ---------------------------
-// Outputs
-// ---------------------------
-assign o_cache_enable = cache_control[0];
-assign o_cache_flush = copro15_reg1_write;
-assign o_cacheable_area = cacheable_area;
-
-// ---------------------------
-// Capture an access fault address and status
-// ---------------------------
-always @ ( posedge i_clk )
- if ( !i_fetch_stall )
- begin
- if ( i_fault )
- begin
-
- fault_status <= i_fault_status;
- fault_address <= i_fault_address;
- end
- end
-
-
-// ---------------------------
-// Register Writes
-// ---------------------------
-always @ ( posedge i_clk )
- if ( !i_fetch_stall )
- begin
- if ( i_copro_operation == 2'd2 )
- case ( i_copro_crn )
- 4'd2: cache_control <= i_copro_write_data[2:0];
- 4'd3: cacheable_area <= i_copro_write_data[31:0];
- 4'd4: updateable_area <= i_copro_write_data[31:0];
- 4'd5: disruptive_area <= i_copro_write_data[31:0];
- endcase
- end
-
-// Flush the cache
-assign copro15_reg1_write = !i_fetch_stall && i_copro_operation == 2'd2 && i_copro_crn == 4'd1;
-
-
-// ---------------------------
-// Register Reads
-// ---------------------------
-always @ ( posedge i_clk )
- if ( !i_fetch_stall )
- case ( i_copro_crn )
- // ID Register - [31:24] Company id, [23:16] Manuf id, [15:8] Part type, [7:0] revision
- 4'd0: o_copro_read_data <= 32'h4156_0300;
- 4'd2: o_copro_read_data <= {29'd0, cache_control};
- 4'd3: o_copro_read_data <= cacheable_area;
- 4'd4: o_copro_read_data <= updateable_area;
- 4'd5: o_copro_read_data <= disruptive_area;
- 4'd6: o_copro_read_data <= {24'd0, fault_status };
- 4'd7: o_copro_read_data <= fault_address;
- default: o_copro_read_data <= 32'd0;
- endcase
-
-
-
-// ========================================================
-// Debug code - not synthesizable
-// ========================================================
-
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_core.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_core.v
deleted file mode 100644
index 021e0d8..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_core.v
+++ /dev/null
@@ -1,358 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Amber 2 Core top-Level module //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Instantiates the core consisting of fetch, instruction //
-// decode, execute, and co-processor. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_core
-(
-input i_clk,
-
-input i_irq, // Interrupt request, active high
-input i_firq, // Fast Interrupt request, active high
-
-input i_system_rdy, // Amber is stalled when this is low
-
-// Wishbone Master I/F
-output [31:0] o_wb_adr,
-output [3:0] o_wb_sel,
-output o_wb_we,
-input [31:0] i_wb_dat,
-output [31:0] o_wb_dat,
-output o_wb_cyc,
-output o_wb_stb,
-input i_wb_ack,
-input i_wb_err,
-
-// Global Reset
-input globrst
-);
-
-wire [31:0] execute_address;
-wire execute_address_valid;
-wire [31:0] execute_address_nxt; // un-registered version of execute_address to the cache rams
-wire [31:0] write_data;
-wire write_enable;
-wire [31:0] read_data;
-wire priviledged;
-wire exclusive_exec;
-wire data_access_exec;
-wire [3:0] byte_enable;
-wire data_access; // high for data petch, low for instruction fetch
-wire exclusive; // swap access
-wire cache_enable; // Enabel the cache
-wire cache_flush; // Flush the cache
-wire [31:0] cacheable_area;
-
-wire fetch_stall; // when this is asserted all registers in all 3 pipeline
- // stages are held
- // at their current values
-wire [1:0] status_bits_mode;
-wire status_bits_irq_mask;
-wire status_bits_firq_mask;
-wire status_bits_flags_wen;
-wire status_bits_mode_wen;
-wire status_bits_irq_mask_wen;
-wire status_bits_firq_mask_wen;
-wire [31:0] execute_status_bits;
-
-wire [31:0] imm32;
-wire [4:0] imm_shift_amount;
-wire shift_imm_zero;
-wire [3:0] condition;
-wire [31:0] read_data_s2;
-wire [4:0] read_data_alignment;
-
-wire [3:0] rm_sel;
-wire [3:0] rds_sel;
-wire [3:0] rn_sel;
-wire [3:0] rm_sel_nxt;
-wire [3:0] rds_sel_nxt;
-wire [3:0] rn_sel_nxt;
-wire [1:0] barrel_shift_amount_sel;
-wire [1:0] barrel_shift_data_sel;
-wire [1:0] barrel_shift_function;
-wire [8:0] alu_function;
-wire [1:0] multiply_function;
-wire [2:0] interrupt_vector_sel;
-wire [3:0] address_sel;
-wire [1:0] pc_sel;
-wire [1:0] byte_enable_sel;
-wire [2:0] status_bits_sel;
-wire [2:0] reg_write_sel;
-wire user_mode_regs_load;
-wire user_mode_regs_store_nxt;
-wire firq_not_user_mode;
-
-wire write_data_wen;
-wire copro_write_data_wen;
-wire base_address_wen;
-wire pc_wen;
-wire [14:0] reg_bank_wen;
-wire [3:0] reg_bank_wsel;
-
-wire [2:0] copro_opcode1;
-wire [2:0] copro_opcode2;
-wire [3:0] copro_crn;
-wire [3:0] copro_crm;
-wire [3:0] copro_num;
-wire [1:0] copro_operation;
-wire [31:0] copro_read_data;
-wire [31:0] copro_write_data;
-wire multiply_done;
-
-wire decode_fault;
-wire iabt_trigger;
-wire dabt_trigger;
-
-wire [7:0] decode_fault_status;
-wire [7:0] iabt_fault_status;
-wire [7:0] dabt_fault_status;
-
-wire [31:0] decode_fault_address;
-wire [31:0] iabt_fault_address;
-wire [31:0] dabt_fault_address;
-
-wire adex;
-
-
-// data abort has priority
-assign decode_fault_status = dabt_trigger ? dabt_fault_status : iabt_fault_status;
-assign decode_fault_address = dabt_trigger ? dabt_fault_address : iabt_fault_address;
-assign decode_fault = dabt_trigger | iabt_trigger;
-
-
-a23_fetch u_fetch (
- .i_clk ( i_clk ),
-
- .i_address ( {execute_address[31:2], 2'd0} ),
- .i_address_valid ( execute_address_valid ),
- .i_address_nxt ( execute_address_nxt ),
- .i_write_data ( write_data ),
- .i_write_enable ( write_enable ),
- .o_read_data ( read_data ),
- .i_priviledged ( priviledged ),
- .i_byte_enable ( byte_enable ),
- .i_data_access ( data_access ),
- .i_exclusive ( exclusive ),
- .i_cache_enable ( cache_enable ),
- .i_cache_flush ( cache_flush ),
- .i_cacheable_area ( cacheable_area ),
-
- .i_system_rdy ( i_system_rdy ),
- .o_fetch_stall ( fetch_stall ),
-
- .o_wb_adr ( o_wb_adr ),
- .o_wb_sel ( o_wb_sel ),
- .o_wb_we ( o_wb_we ),
- .i_wb_dat ( i_wb_dat ),
- .o_wb_dat ( o_wb_dat ),
- .o_wb_cyc ( o_wb_cyc ),
- .o_wb_stb ( o_wb_stb ),
- .i_wb_ack ( i_wb_ack ),
- .i_wb_err ( i_wb_err )
-);
-
-
-a23_decode u_decode (
- .i_clk ( i_clk ),
-
- // Instruction fetch or data read signals
- .i_read_data ( read_data ),
- .i_execute_address ( execute_address ),
- .i_adex ( adex ),
- .i_iabt ( 1'd0 ),
- .i_dabt ( 1'd0 ),
- .i_abt_status ( 8'd0 ),
-
- .o_read_data ( read_data_s2 ),
- .o_read_data_alignment ( read_data_alignment ),
-
- .i_irq ( i_irq ),
- .i_firq ( i_firq ),
- .i_fetch_stall ( fetch_stall ),
- .i_execute_status_bits ( execute_status_bits ),
- .i_multiply_done ( multiply_done ),
-
- .o_status_bits_mode ( status_bits_mode ),
- .o_status_bits_irq_mask ( status_bits_irq_mask ),
- .o_status_bits_firq_mask ( status_bits_firq_mask ),
- .o_imm32 ( imm32 ),
- .o_imm_shift_amount ( imm_shift_amount ),
- .o_shift_imm_zero ( shift_imm_zero ),
- .o_condition ( condition ),
- .o_exclusive_exec ( exclusive_exec ),
- .o_data_access_exec ( data_access_exec ),
- .o_rm_sel ( rm_sel ),
- .o_rds_sel ( rds_sel ),
- .o_rn_sel ( rn_sel ),
- .o_rm_sel_nxt ( rm_sel_nxt ),
- .o_rds_sel_nxt ( rds_sel_nxt ),
- .o_rn_sel_nxt ( rn_sel_nxt ),
- .o_barrel_shift_amount_sel ( barrel_shift_amount_sel ),
- .o_barrel_shift_data_sel ( barrel_shift_data_sel ),
- .o_barrel_shift_function ( barrel_shift_function ),
- .o_alu_function ( alu_function ),
- .o_multiply_function ( multiply_function ),
- .o_interrupt_vector_sel ( interrupt_vector_sel ),
- .o_address_sel ( address_sel ),
- .o_pc_sel ( pc_sel ),
- .o_byte_enable_sel ( byte_enable_sel ),
- .o_status_bits_sel ( status_bits_sel ),
- .o_reg_write_sel ( reg_write_sel ),
- .o_user_mode_regs_load ( user_mode_regs_load ),
- .o_user_mode_regs_store_nxt ( user_mode_regs_store_nxt ),
- .o_firq_not_user_mode ( firq_not_user_mode ),
- .o_write_data_wen ( write_data_wen ),
- .o_base_address_wen ( base_address_wen ),
- .o_pc_wen ( pc_wen ),
- .o_reg_bank_wen ( reg_bank_wen ),
- .o_reg_bank_wsel ( reg_bank_wsel ),
- .o_status_bits_flags_wen ( status_bits_flags_wen ),
- .o_status_bits_mode_wen ( status_bits_mode_wen ),
- .o_status_bits_irq_mask_wen ( status_bits_irq_mask_wen ),
- .o_status_bits_firq_mask_wen ( status_bits_firq_mask_wen ),
-
- .o_copro_opcode1 ( copro_opcode1 ),
- .o_copro_opcode2 ( copro_opcode2 ),
- .o_copro_crn ( copro_crn ),
- .o_copro_crm ( copro_crm ),
- .o_copro_num ( copro_num ),
- .o_copro_operation ( copro_operation ),
- .o_copro_write_data_wen ( copro_write_data_wen ),
-
- .o_iabt_trigger ( iabt_trigger ),
- .o_iabt_address ( iabt_fault_address ),
- .o_iabt_status ( iabt_fault_status ),
- .o_dabt_trigger ( dabt_trigger ),
- .o_dabt_address ( dabt_fault_address ),
- .o_dabt_status ( dabt_fault_status )
-);
-
-
-a23_execute u_execute (
- .i_clk ( i_clk ),
-
- .i_read_data ( read_data_s2 ),
- .i_read_data_alignment ( read_data_alignment ),
- .i_copro_read_data ( copro_read_data ),
-
- .o_write_data ( write_data ),
- .o_copro_write_data ( copro_write_data ),
- .o_address ( execute_address ),
- .o_address_valid ( execute_address_valid ),
- .o_address_nxt ( execute_address_nxt ),
- .o_adex ( adex ),
-
- .o_byte_enable ( byte_enable ),
- .o_data_access ( data_access ),
- .o_write_enable ( write_enable ),
- .o_exclusive ( exclusive ),
- .o_priviledged ( priviledged ),
- .o_status_bits ( execute_status_bits ),
- .o_multiply_done ( multiply_done ),
-
- .i_fetch_stall ( fetch_stall ),
- .i_status_bits_mode ( status_bits_mode ),
- .i_status_bits_irq_mask ( status_bits_irq_mask ),
- .i_status_bits_firq_mask ( status_bits_firq_mask ),
- .i_imm32 ( imm32 ),
- .i_imm_shift_amount ( imm_shift_amount ),
- .i_shift_imm_zero ( shift_imm_zero ),
- .i_condition ( condition ),
- .i_exclusive_exec ( exclusive_exec ),
- .i_data_access_exec ( data_access_exec ),
- .i_rm_sel ( rm_sel ),
- .i_rds_sel ( rds_sel ),
- .i_rn_sel ( rn_sel ),
- .i_rm_sel_nxt ( rm_sel_nxt ),
- .i_rds_sel_nxt ( rds_sel_nxt ),
- .i_rn_sel_nxt ( rn_sel_nxt ),
- .i_barrel_shift_amount_sel ( barrel_shift_amount_sel ),
- .i_barrel_shift_data_sel ( barrel_shift_data_sel ),
- .i_barrel_shift_function ( barrel_shift_function ),
- .i_alu_function ( alu_function ),
- .i_multiply_function ( multiply_function ),
- .i_interrupt_vector_sel ( interrupt_vector_sel ),
- .i_address_sel ( address_sel ),
- .i_pc_sel ( pc_sel ),
- .i_byte_enable_sel ( byte_enable_sel ),
- .i_status_bits_sel ( status_bits_sel ),
- .i_reg_write_sel ( reg_write_sel ),
- .i_user_mode_regs_load ( user_mode_regs_load ),
- .i_user_mode_regs_store_nxt ( user_mode_regs_store_nxt ),
- .i_firq_not_user_mode ( firq_not_user_mode ),
- .i_write_data_wen ( write_data_wen ),
- .i_base_address_wen ( base_address_wen ),
- .i_pc_wen ( pc_wen ),
- .i_reg_bank_wen ( reg_bank_wen ),
- .i_reg_bank_wsel ( reg_bank_wsel ),
- .i_status_bits_flags_wen ( status_bits_flags_wen ),
- .i_status_bits_mode_wen ( status_bits_mode_wen ),
- .i_status_bits_irq_mask_wen ( status_bits_irq_mask_wen ),
- .i_status_bits_firq_mask_wen ( status_bits_firq_mask_wen ),
- .i_copro_write_data_wen ( copro_write_data_wen )
-);
-
-
-a23_coprocessor u_coprocessor (
- .i_clk ( i_clk ),
-
- .i_fetch_stall ( fetch_stall ),
- .i_copro_opcode1 ( copro_opcode1 ),
- .i_copro_opcode2 ( copro_opcode2 ),
- .i_copro_crn ( copro_crn ),
- .i_copro_crm ( copro_crm ),
- .i_copro_num ( copro_num ),
- .i_copro_operation ( copro_operation ),
- .i_copro_write_data ( copro_write_data ),
-
- .i_fault ( decode_fault ),
- .i_fault_status ( decode_fault_status ),
- .i_fault_address ( decode_fault_address ),
-
- .o_copro_read_data ( copro_read_data ),
- .o_cache_enable ( cache_enable ),
- .o_cache_flush ( cache_flush ),
- .o_cacheable_area ( cacheable_area )
-);
-
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_decode.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_decode.v
deleted file mode 100644
index 35f6d8e..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_decode.v
+++ /dev/null
@@ -1,1981 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Decode stage of Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// This module is the most complex part of the Amber core //
-// It decodes and sequences all instructions and handles all //
-// interrupts //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////
-// //
-// Global testbench defines //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines for each module so if the module //
-// hierarchy changes, hierarchical references to signals //
-// will still work as long as this file is updated. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// ---------------------------------------------------------------
-// Module hierarchy defines
-// ---------------------------------------------------------------
-
-
-
-
- // ---------------------------------------------------------------
-
-
-
-// Simplified Main Memory Model
-
-
-module a23_decode
-(
-input i_clk,
-input [31:0] i_read_data,
-input i_fetch_stall, // stall all stages of the cpu at the same time
-input i_irq, // interrupt request
-input i_firq, // Fast interrupt request
-input i_dabt, // data abort interrupt request
-input i_iabt, // instruction pre-fetch abort flag
-input i_adex, // Address Exception
-input [31:0] i_execute_address, // Registered address output by execute stage
- // 2 LSBs of read address used for calculating
- // shift in LDRB ops
-input [7:0] i_abt_status, // Abort status
-input [31:0] i_execute_status_bits, // current status bits values in execute stage
-input i_multiply_done, // multiply unit is nearly done
-
-
-// --------------------------------------------------
-// Control signals to execute stage
-// --------------------------------------------------
-output reg [31:0] o_read_data = 1'd0,
-output reg [4:0] o_read_data_alignment = 1'd0, // 2 LSBs of read address used for calculating shift in LDRB ops
-
-output reg [31:0] o_imm32 = 'd0,
-output reg [4:0] o_imm_shift_amount = 'd0,
-output reg o_shift_imm_zero = 'd0,
-output reg [3:0] o_condition = 4'he, // 4'he = al
-output reg o_exclusive_exec = 'd0, // exclusive access request ( swap instruction )
-output reg o_data_access_exec = 'd0, // high means the memory access is a read
- // read or write, low for instruction
-output reg [1:0] o_status_bits_mode = 2'b11, // SVC
-output reg o_status_bits_irq_mask = 1'd1,
-output reg o_status_bits_firq_mask = 1'd1,
-
-output reg [3:0] o_rm_sel = 'd0,
-output reg [3:0] o_rds_sel = 'd0,
-output reg [3:0] o_rn_sel = 'd0,
-output [3:0] o_rm_sel_nxt,
-output [3:0] o_rds_sel_nxt,
-output [3:0] o_rn_sel_nxt,
-output reg [1:0] o_barrel_shift_amount_sel = 'd0,
-output reg [1:0] o_barrel_shift_data_sel = 'd0,
-output reg [1:0] o_barrel_shift_function = 'd0,
-output reg [8:0] o_alu_function = 'd0,
-output reg [1:0] o_multiply_function = 'd0,
-output reg [2:0] o_interrupt_vector_sel = 'd0,
-output reg [3:0] o_address_sel = 4'd2,
-output reg [1:0] o_pc_sel = 2'd2,
-output reg [1:0] o_byte_enable_sel = 'd0, // byte, halfword or word write
-output reg [2:0] o_status_bits_sel = 'd0,
-output reg [2:0] o_reg_write_sel,
-output reg o_user_mode_regs_load,
-output reg o_user_mode_regs_store_nxt,
-output reg o_firq_not_user_mode,
-
-output reg o_write_data_wen = 'd0,
-output reg o_base_address_wen = 'd0, // save LDM base address register
- // in case of data abort
-output reg o_pc_wen = 1'd1,
-output reg [14:0] o_reg_bank_wen = 'd0,
-output reg [3:0] o_reg_bank_wsel = 'd0,
-output reg o_status_bits_flags_wen = 'd0,
-output reg o_status_bits_mode_wen = 'd0,
-output reg o_status_bits_irq_mask_wen = 'd0,
-output reg o_status_bits_firq_mask_wen = 'd0,
-
-// --------------------------------------------------
-// Co-Processor interface
-// --------------------------------------------------
-output reg [2:0] o_copro_opcode1 = 'd0,
-output reg [2:0] o_copro_opcode2 = 'd0,
-output reg [3:0] o_copro_crn = 'd0,
-output reg [3:0] o_copro_crm = 'd0,
-output reg [3:0] o_copro_num = 'd0,
-output reg [1:0] o_copro_operation = 'd0, // 0 = no operation,
- // 1 = Move to Amber Core Register from Coprocessor
- // 2 = Move to Coprocessor from Amber Core Register
-output reg o_copro_write_data_wen = 'd0,
-output o_iabt_trigger,
-output [31:0] o_iabt_address,
-output [7:0] o_iabt_status,
-output o_dabt_trigger,
-output [31:0] o_dabt_address,
-output [7:0] o_dabt_status
-
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-//////////////////////////////////////////////////////////////////
-// //
-// Functions for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Functions used in more than one module //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// ========================================================
-// PC Filter - Remove the status bits
-// ========================================================
-function [31:0] pcf;
-input [31:0] pc_reg;
- begin
- pcf = {6'd0, pc_reg[25:2], 2'd0};
- end
-endfunction
-
-
-// ========================================================
-// 4-bit to 16-bit 1-hot decode
-// ========================================================
-function [14:0] decode;
-input [3:0] reg_sel;
-begin
-case ( reg_sel )
- 4'h0: decode = 15'h0001;
- 4'h1: decode = 15'h0002;
- 4'h2: decode = 15'h0004;
- 4'h3: decode = 15'h0008;
- 4'h4: decode = 15'h0010;
- 4'h5: decode = 15'h0020;
- 4'h6: decode = 15'h0040;
- 4'h7: decode = 15'h0080;
- 4'h8: decode = 15'h0100;
- 4'h9: decode = 15'h0200;
- 4'ha: decode = 15'h0400;
- 4'hb: decode = 15'h0800;
- 4'hc: decode = 15'h1000;
- 4'hd: decode = 15'h2000;
- 4'he: decode = 15'h4000;
- default: decode = 15'h0000;
-endcase
-end
-endfunction
-
-
-// ========================================================
-// Convert Stats Bits Mode to one-hot encoded version
-// ========================================================
-function [3:0] oh_status_bits_mode;
-input [1:0] fn_status_bits_mode;
-begin
-oh_status_bits_mode =
- fn_status_bits_mode == SVC ? 1'd1 << OH_SVC :
- fn_status_bits_mode == IRQ ? 1'd1 << OH_IRQ :
- fn_status_bits_mode == FIRQ ? 1'd1 << OH_FIRQ :
- 1'd1 << OH_USR ;
-end
-endfunction
-
-// ========================================================
-// Convert mode into ascii name
-// ========================================================
-function [(14*8)-1:0] mode_name;
-input [4:0] mode;
-begin
-
-mode_name = mode == USR ? "User " :
- mode == SVC ? "Supervisor " :
- mode == IRQ ? "Interrupt " :
- mode == FIRQ ? "Fast Interrupt" :
- "UNKNOWN " ;
-end
-endfunction
-
-
-// ========================================================
-// Conditional Execution Function
-// ========================================================
-// EQ Z set
-// NE Z clear
-// CS C set
-// CC C clear
-// MI N set
-// PL N clear
-// VS V set
-// VC V clear
-// HI C set and Z clear
-// LS C clear or Z set
-// GE N == V
-// LT N != V
-// GT Z == 0,N == V
-// LE Z == 1 or N != V
-// AL Always (unconditional)
-// NV Never
-
-function conditional_execute;
-input [3:0] condition;
-input [3:0] flags;
-begin
-conditional_execute
- = ( condition == AL ) ||
- ( condition == EQ && flags[2] ) ||
- ( condition == NE && !flags[2] ) ||
- ( condition == CS && flags[1] ) ||
- ( condition == CC && !flags[1] ) ||
- ( condition == MI && flags[3] ) ||
- ( condition == PL && !flags[3] ) ||
- ( condition == VS && flags[0] ) ||
- ( condition == VC && !flags[0] ) ||
-
- ( condition == HI && flags[1] && !flags[2] ) ||
- ( condition == LS && (!flags[1] || flags[2]) ) ||
-
- ( condition == GE && flags[3] == flags[0] ) ||
- ( condition == LT && flags[3] != flags[0] ) ||
-
- ( condition == GT && !flags[2] && flags[3] == flags[0] ) ||
- ( condition == LE && (flags[2] || flags[3] != flags[0])) ;
-
-end
-endfunction
-
-
-// ========================================================
-// Log 2
-// ========================================================
-
-function [31:0] log2;
-input [31:0] num;
-integer i;
-integer out;
-begin
- out = 32'd0;
- for (i=0; i<30; i=i+1)
- if ((2**i > num) && (out == 0))
- out = i-1;
- log2 = out;
-end
-endfunction
-
-localparam [4:0] RST_WAIT1 = 5'd0,
- RST_WAIT2 = 5'd1,
- INT_WAIT1 = 5'd2,
- INT_WAIT2 = 5'd3,
- EXECUTE = 5'd4,
- PRE_FETCH_EXEC = 5'd5, // Execute the Pre-Fetched Instruction
- MEM_WAIT1 = 5'd6, // conditionally decode current instruction, in case
- // previous instruction does not execute in S2
- MEM_WAIT2 = 5'd7,
- PC_STALL1 = 5'd8, // Program Counter altered
- // conditionally decude current instruction, in case
- // previous instruction does not execute in S2
- PC_STALL2 = 5'd9,
- MTRANS_EXEC1 = 5'd10,
- MTRANS_EXEC2 = 5'd11,
- MTRANS_EXEC3 = 5'd12,
- MTRANS_EXEC3B = 5'd13,
- MTRANS_EXEC4 = 5'd14,
- MTRANS5_ABORT = 5'd15,
- MULT_PROC1 = 5'd16, // first cycle, save pre fetch instruction
- MULT_PROC2 = 5'd17, // do multiplication
- MULT_STORE = 5'd19, // save RdLo
- MULT_ACCUMU = 5'd20, // Accumulate add lower 32 bits
- SWAP_WRITE = 5'd22,
- SWAP_WAIT1 = 5'd23,
- SWAP_WAIT2 = 5'd24,
- COPRO_WAIT = 5'd25;
-
-
-// ========================================================
-// Internal signals
-// ========================================================
-wire [31:0] instruction;
-wire instruction_iabt; // abort flag, follows the instruction
-wire instruction_adex; // address exception flag, follows the instruction
-wire [31:0] instruction_address; // instruction virtual address, follows
- // the instruction
-wire [7:0] instruction_iabt_status; // abort status, follows the instruction
-wire [1:0] instruction_sel;
-reg [3:0] type;
-wire [3:0] opcode;
-wire [7:0] imm8;
-wire [31:0] offset12;
-wire [31:0] offset24;
-wire [4:0] shift_imm;
-
-wire opcode_compare;
-wire mem_op;
-wire load_op;
-wire store_op;
-wire write_pc;
-wire immediate_shifter_operand;
-wire rds_use_rs;
-wire branch;
-wire mem_op_pre_indexed;
-wire mem_op_post_indexed;
-
-// Flop inputs
-wire [31:0] imm32_nxt;
-wire [4:0] imm_shift_amount_nxt;
-wire shift_imm_zero_nxt;
-wire [3:0] condition_nxt;
-reg exclusive_exec_nxt;
-reg data_access_exec_nxt;
-
-reg [1:0] barrel_shift_function_nxt;
-wire [8:0] alu_function_nxt;
-reg [1:0] multiply_function_nxt;
-reg [1:0] status_bits_mode_nxt;
-reg status_bits_irq_mask_nxt;
-reg status_bits_firq_mask_nxt;
-
-reg [1:0] barrel_shift_amount_sel_nxt;
-reg [1:0] barrel_shift_data_sel_nxt;
-reg [3:0] address_sel_nxt;
-reg [1:0] pc_sel_nxt;
-reg [1:0] byte_enable_sel_nxt;
-reg [2:0] status_bits_sel_nxt;
-reg [2:0] reg_write_sel_nxt;
-reg user_mode_regs_load_nxt;
-wire firq_not_user_mode_nxt;
-
-// ALU Function signals
-reg alu_swap_sel_nxt;
-reg alu_not_sel_nxt;
-reg [1:0] alu_cin_sel_nxt;
-reg alu_cout_sel_nxt;
-reg [3:0] alu_out_sel_nxt;
-
-reg write_data_wen_nxt;
-reg copro_write_data_wen_nxt;
-reg base_address_wen_nxt;
-reg pc_wen_nxt;
-reg [3:0] reg_bank_wsel_nxt;
-reg status_bits_flags_wen_nxt;
-reg status_bits_mode_wen_nxt;
-reg status_bits_irq_mask_wen_nxt;
-reg status_bits_firq_mask_wen_nxt;
-
-reg saved_current_instruction_wen; // saved load instruction
-reg pre_fetch_instruction_wen; // pre-fetch instruction
-
-reg [4:0] control_state = RST_WAIT1;
-reg [4:0] control_state_nxt;
-
-
-wire dabt;
-reg dabt_reg = 'd0;
-reg dabt_reg_d1;
-reg iabt_reg = 'd0;
-reg adex_reg = 'd0;
-reg [31:0] abt_address_reg = 'd0;
-reg [7:0] abt_status_reg = 'd0;
-reg [31:0] saved_current_instruction = 'd0;
-reg saved_current_instruction_iabt = 'd0; // access abort flag
-reg saved_current_instruction_adex = 'd0; // address exception
-reg [31:0] saved_current_instruction_address = 'd0; // virtual address of abort instruction
-reg [7:0] saved_current_instruction_iabt_status = 'd0; // status of abort instruction
-reg [31:0] pre_fetch_instruction = 'd0;
-reg pre_fetch_instruction_iabt = 'd0; // access abort flag
-reg pre_fetch_instruction_adex = 'd0; // address exception
-reg [31:0] pre_fetch_instruction_address = 'd0; // virtual address of abort instruction
-reg [7:0] pre_fetch_instruction_iabt_status = 'd0; // status of abort instruction
-
-wire instruction_valid;
-wire instruction_execute;
-
-reg [3:0] mtrans_reg; // the current register being accessed as part of STM/LDM
-reg [3:0] mtrans_reg_d1 = 'd0; // delayed by 1 period
-reg [3:0] mtrans_reg_d2 = 'd0; // delayed by 2 periods
-reg [31:0] mtrans_instruction_nxt;
-
-wire [31:0] mtrans_base_reg_change;
-wire [4:0] mtrans_num_registers;
-wire use_saved_current_instruction;
-wire use_pre_fetch_instruction;
-wire interrupt;
-wire [1:0] interrupt_mode;
-wire [2:0] next_interrupt;
-reg irq = 'd0;
-reg firq = 'd0;
-wire firq_request;
-wire irq_request;
-wire swi_request;
-wire und_request;
-wire dabt_request;
-reg [1:0] copro_operation_nxt;
-reg mtrans_r15 = 'd0;
-reg mtrans_r15_nxt;
-reg restore_base_address = 'd0;
-reg restore_base_address_nxt;
-
-wire regop_set_flags;
-
-
-// ========================================================
-// Instruction Abort and Data Abort outputs
-// ========================================================
-
-assign o_iabt_trigger = instruction_iabt && o_status_bits_mode == SVC && control_state == INT_WAIT1;
-assign o_iabt_address = instruction_address;
-assign o_iabt_status = instruction_iabt_status;
-
-assign o_dabt_trigger = dabt_reg && !dabt_reg_d1;
-assign o_dabt_address = abt_address_reg;
-assign o_dabt_status = abt_status_reg;
-
-
-// ========================================================
-// Instruction Decode
-// ========================================================
-
-// for instructions that take more than one cycle
-// the instruction is saved in the 'saved_mem_instruction'
-// register and then that register is used for the rest of
-// the execution of the instruction.
-// But if the instruction does not execute because of the
-// condition, then need to select the next instruction to
-// decode
-assign use_saved_current_instruction = instruction_execute &&
- ( control_state == MEM_WAIT1 ||
- control_state == MEM_WAIT2 ||
- control_state == MTRANS_EXEC1 ||
- control_state == MTRANS_EXEC2 ||
- control_state == MTRANS_EXEC3 ||
- control_state == MTRANS_EXEC3B ||
- control_state == MTRANS_EXEC4 ||
- control_state == MTRANS5_ABORT ||
- control_state == MULT_PROC1 ||
- control_state == MULT_PROC2 ||
- control_state == MULT_ACCUMU ||
- control_state == MULT_STORE ||
- control_state == INT_WAIT1 ||
- control_state == INT_WAIT2 ||
- control_state == SWAP_WRITE ||
- control_state == SWAP_WAIT1 ||
- control_state == SWAP_WAIT2 ||
- control_state == COPRO_WAIT );
-
-assign use_pre_fetch_instruction = control_state == PRE_FETCH_EXEC;
-
-
-assign instruction_sel = use_saved_current_instruction ? 2'd1 : // saved_current_instruction
- use_pre_fetch_instruction ? 2'd2 : // pre_fetch_instruction
- 2'd0 ; // o_read_data
-
-assign instruction = instruction_sel == 2'd0 ? o_read_data :
- instruction_sel == 2'd1 ? saved_current_instruction :
- pre_fetch_instruction ;
-
-// abort flag
-assign instruction_iabt = instruction_sel == 2'd0 ? iabt_reg :
- instruction_sel == 2'd1 ? saved_current_instruction_iabt :
- pre_fetch_instruction_iabt ;
-
-assign instruction_address = instruction_sel == 2'd0 ? abt_address_reg :
- instruction_sel == 2'd1 ? saved_current_instruction_address :
- pre_fetch_instruction_address ;
-
-assign instruction_iabt_status = instruction_sel == 2'd0 ? abt_status_reg :
- instruction_sel == 2'd1 ? saved_current_instruction_iabt_status :
- pre_fetch_instruction_iabt_status ;
-
-// instruction address exception
-assign instruction_adex = instruction_sel == 2'd0 ? adex_reg :
- instruction_sel == 2'd1 ? saved_current_instruction_adex :
- pre_fetch_instruction_adex ;
-
-// Instruction Decode - Order is important!
-always @*
- casez ({instruction[27:20], instruction[7:4]})
- 12'b00010?001001 : type = SWAP;
- 12'b000000??1001 : type = MULT;
- 12'b00?????????? : type = REGOP;
- 12'b01?????????? : type = TRANS;
- 12'b100????????? : type = MTRANS;
- 12'b101????????? : type = BRANCH;
- 12'b110????????? : type = CODTRANS;
- 12'b1110???????0 : type = COREGOP;
- 12'b1110???????1 : type = CORTRANS;
- default: type = SWI;
- endcase
-
-
-// ========================================================
-// Fixed fields within the instruction
-// ========================================================
-
-assign opcode = instruction[24:21];
-assign condition_nxt = instruction[31:28];
-
-assign o_rm_sel_nxt = instruction[3:0];
-
-assign o_rn_sel_nxt = branch ? 4'd15 : // Use PC to calculate branch destination
- instruction[19:16] ;
-
-assign o_rds_sel_nxt = control_state == SWAP_WRITE ? instruction[3:0] : // Rm gets written out to memory
- type == MTRANS ? mtrans_reg :
- branch ? 4'd15 : // Update the PC
- rds_use_rs ? instruction[11:8] :
- instruction[15:12] ;
-
-
-assign shift_imm = instruction[11:7];
-assign offset12 = { 20'h0, instruction[11:0]};
-assign offset24 = {{6{instruction[23]}}, instruction[23:0], 2'd0 }; // sign extend
-assign imm8 = instruction[7:0];
-
-assign immediate_shifter_operand = instruction[25];
-assign rds_use_rs = (type == REGOP && !instruction[25] && instruction[4]) ||
- (type == MULT &&
- (control_state == MULT_PROC1 ||
- control_state == MULT_PROC2 ||
- instruction_valid && !interrupt )) ;
-assign branch = type == BRANCH;
-assign opcode_compare =
- opcode == CMP ||
- opcode == CMN ||
- opcode == TEQ ||
- opcode == TST ;
-
-
-assign mem_op = type == TRANS;
-assign load_op = mem_op && instruction[20];
-assign store_op = mem_op && !instruction[20];
-assign write_pc = pc_wen_nxt && pc_sel_nxt != 2'd0;
-assign regop_set_flags = type == REGOP && instruction[20];
-
-assign mem_op_pre_indexed = instruction[24] && instruction[21];
-assign mem_op_post_indexed = !instruction[24];
-
-assign imm32_nxt = // add 0 to Rm
- type == MULT ? { 32'd0 } :
-
- // 4 x number of registers
- type == MTRANS ? { mtrans_base_reg_change } :
- type == BRANCH ? { offset24 } :
- type == TRANS ? { offset12 } :
- instruction[11:8] == 4'h0 ? { 24'h0, imm8[7:0] } :
- instruction[11:8] == 4'h1 ? { imm8[1:0], 24'h0, imm8[7:2] } :
- instruction[11:8] == 4'h2 ? { imm8[3:0], 24'h0, imm8[7:4] } :
- instruction[11:8] == 4'h3 ? { imm8[5:0], 24'h0, imm8[7:6] } :
- instruction[11:8] == 4'h4 ? { imm8[7:0], 24'h0 } :
- instruction[11:8] == 4'h5 ? { 2'h0, imm8[7:0], 22'h0 } :
- instruction[11:8] == 4'h6 ? { 4'h0, imm8[7:0], 20'h0 } :
- instruction[11:8] == 4'h7 ? { 6'h0, imm8[7:0], 18'h0 } :
- instruction[11:8] == 4'h8 ? { 8'h0, imm8[7:0], 16'h0 } :
- instruction[11:8] == 4'h9 ? { 10'h0, imm8[7:0], 14'h0 } :
- instruction[11:8] == 4'ha ? { 12'h0, imm8[7:0], 12'h0 } :
- instruction[11:8] == 4'hb ? { 14'h0, imm8[7:0], 10'h0 } :
- instruction[11:8] == 4'hc ? { 16'h0, imm8[7:0], 8'h0 } :
- instruction[11:8] == 4'hd ? { 18'h0, imm8[7:0], 6'h0 } :
- instruction[11:8] == 4'he ? { 20'h0, imm8[7:0], 4'h0 } :
- { 22'h0, imm8[7:0], 2'h0 } ;
-
-
-assign imm_shift_amount_nxt = shift_imm ;
-
- // This signal is encoded in the decode stage because
- // it is on the critical path in the execute stage
-assign shift_imm_zero_nxt = imm_shift_amount_nxt == 5'd0 && // immediate amount = 0
- barrel_shift_amount_sel_nxt == 2'd2; // shift immediate amount
-
-assign alu_function_nxt = { alu_swap_sel_nxt,
- alu_not_sel_nxt,
- alu_cin_sel_nxt,
- alu_cout_sel_nxt,
- alu_out_sel_nxt };
-
-
-// ========================================================
-// MTRANS Operations
-// ========================================================
-
- // Bit 15 = r15
- // Bit 0 = R0
- // In LDM and STM instructions R0 is loaded or stored first
-always @*
- casez (instruction[15:0])
- 16'b???????????????1 : mtrans_reg = 4'h0 ;
- 16'b??????????????10 : mtrans_reg = 4'h1 ;
- 16'b?????????????100 : mtrans_reg = 4'h2 ;
- 16'b????????????1000 : mtrans_reg = 4'h3 ;
- 16'b???????????10000 : mtrans_reg = 4'h4 ;
- 16'b??????????100000 : mtrans_reg = 4'h5 ;
- 16'b?????????1000000 : mtrans_reg = 4'h6 ;
- 16'b????????10000000 : mtrans_reg = 4'h7 ;
- 16'b???????100000000 : mtrans_reg = 4'h8 ;
- 16'b??????1000000000 : mtrans_reg = 4'h9 ;
- 16'b?????10000000000 : mtrans_reg = 4'ha ;
- 16'b????100000000000 : mtrans_reg = 4'hb ;
- 16'b???1000000000000 : mtrans_reg = 4'hc ;
- 16'b??10000000000000 : mtrans_reg = 4'hd ;
- 16'b?100000000000000 : mtrans_reg = 4'he ;
- default : mtrans_reg = 4'hf ;
- endcase
-
-always @*
- casez (instruction[15:0])
- 16'b???????????????1 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 1], 1'd0};
- 16'b??????????????10 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 2], 2'd0};
- 16'b?????????????100 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 3], 3'd0};
- 16'b????????????1000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 4], 4'd0};
- 16'b???????????10000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 5], 5'd0};
- 16'b??????????100000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 6], 6'd0};
- 16'b?????????1000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 7], 7'd0};
- 16'b????????10000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 8], 8'd0};
- 16'b???????100000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15: 9], 9'd0};
- 16'b??????1000000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15:10], 10'd0};
- 16'b?????10000000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15:11], 11'd0};
- 16'b????100000000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15:12], 12'd0};
- 16'b???1000000000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15:13], 13'd0};
- 16'b??10000000000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15:14], 14'd0};
- 16'b?100000000000000 : mtrans_instruction_nxt = {instruction[31:16], instruction[15 ], 15'd0};
- default : mtrans_instruction_nxt = {instruction[31:16], 16'd0};
- endcase
-
-
-// number of registers to be stored
-assign mtrans_num_registers = {4'd0, instruction[15]} +
- {4'd0, instruction[14]} +
- {4'd0, instruction[13]} +
- {4'd0, instruction[12]} +
- {4'd0, instruction[11]} +
- {4'd0, instruction[10]} +
- {4'd0, instruction[ 9]} +
- {4'd0, instruction[ 8]} +
- {4'd0, instruction[ 7]} +
- {4'd0, instruction[ 6]} +
- {4'd0, instruction[ 5]} +
- {4'd0, instruction[ 4]} +
- {4'd0, instruction[ 3]} +
- {4'd0, instruction[ 2]} +
- {4'd0, instruction[ 1]} +
- {4'd0, instruction[ 0]} ;
-
-// 4 x number of registers to be stored
-assign mtrans_base_reg_change = {25'd0, mtrans_num_registers, 2'd0};
-
-// ========================================================
-// Interrupts
-// ========================================================
-
-assign firq_request = firq && !i_execute_status_bits[26];
-assign irq_request = irq && !i_execute_status_bits[27];
-assign swi_request = type == SWI;
-assign dabt_request = dabt_reg;
-
-// copro15 and copro13 only supports reg trans opcodes
-// all other opcodes involving co-processors cause an
-// undefined instrution interrupt
-assign und_request = type == CODTRANS ||
- type == COREGOP ||
- ( type == CORTRANS && instruction[11:8] != 4'd15 );
-
-
- // in order of priority !!
- // Highest
- // 1 Reset
- // 2 Data Abort (including data TLB miss)
- // 3 FIRQ
- // 4 IRQ
- // 5 Prefetch Abort (including prefetch TLB miss)
- // 6 Undefined instruction, SWI
- // Lowest
-assign next_interrupt = dabt_request ? 3'd1 : // Data Abort
- firq_request ? 3'd2 : // FIRQ
- irq_request ? 3'd3 : // IRQ
- instruction_adex ? 3'd4 : // Address Exception
- instruction_iabt ? 3'd5 : // PreFetch Abort, only triggered
- // if the instruction is used
- und_request ? 3'd6 : // Undefined Instruction
- swi_request ? 3'd7 : // SWI
- 3'd0 ; // none
-
- // SWI and undefined instructions do not cause an interrupt in the decode
- // stage. They only trigger interrupts if they arfe executed, so the
- // interrupt is triggered if the execute condition is met in the execute stage
-assign interrupt = next_interrupt != 3'd0 &&
- next_interrupt != 3'd7 && // SWI
- next_interrupt != 3'd6 ; // undefined interrupt
-
-
-assign interrupt_mode = next_interrupt == 3'd2 ? FIRQ :
- next_interrupt == 3'd3 ? IRQ :
- next_interrupt == 3'd4 ? SVC :
- next_interrupt == 3'd5 ? SVC :
- next_interrupt == 3'd6 ? SVC :
- next_interrupt == 3'd7 ? SVC :
- next_interrupt == 3'd1 ? SVC :
- USR ;
-
-
-
-
-// ========================================================
-// Generate control signals
-// ========================================================
-always @*
- begin
- // default mode
- status_bits_mode_nxt = i_execute_status_bits[1:0]; // change to mode in execute stage get reflected
- // back to this stage automatically
- status_bits_irq_mask_nxt = o_status_bits_irq_mask;
- status_bits_firq_mask_nxt = o_status_bits_firq_mask;
- exclusive_exec_nxt = 1'd0;
- data_access_exec_nxt = 1'd0;
- copro_operation_nxt = 'd0;
-
- // Save an instruction to use later
- saved_current_instruction_wen = 1'd0;
- pre_fetch_instruction_wen = 1'd0;
- mtrans_r15_nxt = mtrans_r15;
- restore_base_address_nxt = restore_base_address;
-
- // default Mux Select values
- barrel_shift_amount_sel_nxt = 'd0; // don't shift the input
- barrel_shift_data_sel_nxt = 'd0; // immediate value
- barrel_shift_function_nxt = 'd0;
- multiply_function_nxt = 'd0;
- address_sel_nxt = 'd0;
- pc_sel_nxt = 'd0;
- byte_enable_sel_nxt = 'd0;
- status_bits_sel_nxt = 'd0;
- reg_write_sel_nxt = 'd0;
- user_mode_regs_load_nxt = 'd0;
- o_user_mode_regs_store_nxt = 'd0;
-
- // ALU Muxes
- alu_swap_sel_nxt = 'd0;
- alu_not_sel_nxt = 'd0;
- alu_cin_sel_nxt = 'd0;
- alu_cout_sel_nxt = 'd0;
- alu_out_sel_nxt = 'd0;
-
- // default Flop Write Enable values
- write_data_wen_nxt = 'd0;
- copro_write_data_wen_nxt = 'd0;
- base_address_wen_nxt = 'd0;
- pc_wen_nxt = 'd1;
- reg_bank_wsel_nxt = 'hF; // Don't select any
- status_bits_flags_wen_nxt = 'd0;
- status_bits_mode_wen_nxt = 'd0;
- status_bits_irq_mask_wen_nxt = 'd0;
- status_bits_firq_mask_wen_nxt = 'd0;
-
- if ( instruction_valid && !interrupt )
- begin
- if ( type == REGOP )
- begin
- if ( !opcode_compare )
- begin
- // Check is the load destination is the PC
- if (instruction[15:12] == 4'd15)
- begin
- pc_sel_nxt = 2'd1; // alu_out
- address_sel_nxt = 4'd1; // alu_out
- end
- else
- reg_bank_wsel_nxt = instruction[15:12];
- end
-
- if ( !immediate_shifter_operand )
- barrel_shift_function_nxt = instruction[6:5];
-
- if ( !immediate_shifter_operand )
- barrel_shift_data_sel_nxt = 2'd2; // Shift value from Rm register
-
- if ( !immediate_shifter_operand && instruction[4] )
- barrel_shift_amount_sel_nxt = 2'd1; // Shift amount from Rs registter
-
- if ( !immediate_shifter_operand && !instruction[4] )
- barrel_shift_amount_sel_nxt = 2'd2; // Shift immediate amount
-
- if ( opcode == ADD || opcode == CMN ) // CMN is just like an ADD
- begin
- alu_out_sel_nxt = 4'd1; // Add
- end
-
- if ( opcode == ADC ) // Add with Carry
- begin
- alu_out_sel_nxt = 4'd1; // Add
- alu_cin_sel_nxt = 2'd2; // carry in from status_bits
- end
-
- if ( opcode == SUB || opcode == CMP ) // Subtract
- begin
- alu_out_sel_nxt = 4'd1; // Add
- alu_cin_sel_nxt = 2'd1; // cin = 1
- alu_not_sel_nxt = 1'd1; // invert B
- end
-
- // SBC (Subtract with Carry) subtracts the value of its
- // second operand and the value of NOT(Carry flag) from
- // the value of its first operand.
- // Rd = Rn - shifter_operand - NOT(C Flag)
- if ( opcode == SBC ) // Subtract with Carry
- begin
- alu_out_sel_nxt = 4'd1; // Add
- alu_cin_sel_nxt = 2'd2; // carry in from status_bits
- alu_not_sel_nxt = 1'd1; // invert B
- end
-
- if ( opcode == RSB ) // Reverse Subtract
- begin
- alu_out_sel_nxt = 4'd1; // Add
- alu_cin_sel_nxt = 2'd1; // cin = 1
- alu_not_sel_nxt = 1'd1; // invert B
- alu_swap_sel_nxt = 1'd1; // swap A and B
- end
-
- if ( opcode == RSC ) // Reverse Subtract with carry
- begin
- alu_out_sel_nxt = 4'd1; // Add
- alu_cin_sel_nxt = 2'd2; // carry in from status_bits
- alu_not_sel_nxt = 1'd1; // invert B
- alu_swap_sel_nxt = 1'd1; // swap A and B
- end
-
- if ( opcode == AND || opcode == TST ) // Logical AND, Test (using AND operator)
- begin
- alu_out_sel_nxt = 4'd8; // AND
- alu_cout_sel_nxt = 1'd1; // i_barrel_shift_carry
- end
-
- if ( opcode == EOR || opcode == TEQ ) // Logical Exclusive OR, Test Equivalence (using EOR operator)
- begin
- alu_out_sel_nxt = 4'd6; // XOR
- alu_cout_sel_nxt = 1'd1; // i_barrel_shift_carry
- end
-
- if ( opcode == ORR )
- begin
- alu_out_sel_nxt = 4'd7; // OR
- alu_cout_sel_nxt = 1'd1; // i_barrel_shift_carry
- end
-
- if ( opcode == BIC ) // Bit Clear (using AND & NOT operators)
- begin
- alu_out_sel_nxt = 4'd8; // AND
- alu_not_sel_nxt = 1'd1; // invert B
- alu_cout_sel_nxt = 1'd1; // i_barrel_shift_carry
- end
-
- if ( opcode == MOV ) // Move
- begin
- alu_cout_sel_nxt = 1'd1; // i_barrel_shift_carry
- end
-
- if ( opcode == MVN ) // Move NOT
- begin
- alu_not_sel_nxt = 1'd1; // invert B
- alu_cout_sel_nxt = 1'd1; // i_barrel_shift_carry
- end
- end
-
- // Load & Store instructions
- if ( mem_op )
- begin
- saved_current_instruction_wen = 1'd1; // Save the memory access instruction to refer back to later
- pc_wen_nxt = 1'd0; // hold current PC value
- data_access_exec_nxt = 1'd1; // indicate that its a data read or write,
- // rather than an instruction fetch
- alu_out_sel_nxt = 4'd1; // Add
-
- if ( !instruction[23] ) // U: Subtract offset
- begin
- alu_cin_sel_nxt = 2'd1; // cin = 1
- alu_not_sel_nxt = 1'd1; // invert B
- end
-
- if ( store_op )
- begin
- write_data_wen_nxt = 1'd1;
- if ( type == TRANS && instruction[22] )
- byte_enable_sel_nxt = 2'd1; // Save byte
- end
-
- // need to update the register holding the address ?
- // This is Rn bits [19:16]
- if ( mem_op_pre_indexed || mem_op_post_indexed )
- begin
- // Check is the load destination is the PC
- if ( o_rn_sel_nxt == 4'd15 )
- pc_sel_nxt = 2'd1;
- else
- reg_bank_wsel_nxt = o_rn_sel_nxt;
- end
-
- // if post-indexed, then use Rn rather than ALU output, as address
- if ( mem_op_post_indexed )
- address_sel_nxt = 4'd4; // Rn
- else
- address_sel_nxt = 4'd1; // alu out
-
- if ( instruction[25] && type == TRANS )
- barrel_shift_data_sel_nxt = 2'd2; // Shift value from Rm register
-
- if ( type == TRANS && instruction[25] && shift_imm != 5'd0 )
- begin
- barrel_shift_function_nxt = instruction[6:5];
- barrel_shift_amount_sel_nxt = 2'd2; // imm_shift_amount
- end
- end
-
- if ( type == BRANCH )
- begin
- pc_sel_nxt = 2'd1; // alu_out
- address_sel_nxt = 4'd1; // alu_out
- alu_out_sel_nxt = 4'd1; // Add
-
- if ( instruction[24] ) // Link
- begin
- reg_bank_wsel_nxt = 4'd14; // Save PC to LR
- reg_write_sel_nxt = 3'd1; // pc - 32'd4
- end
- end
-
- if ( type == MTRANS )
- begin
- saved_current_instruction_wen = 1'd1; // Save the memory access instruction to refer back to later
- pc_wen_nxt = 1'd0; // hold current PC value
- data_access_exec_nxt = 1'd1; // indicate that its a data read or write,
- // rather than an instruction fetch
- alu_out_sel_nxt = 4'd1; // Add
- mtrans_r15_nxt = instruction[15]; // load or save r15 ?
- base_address_wen_nxt = 1'd1; // Save the value of the register used for the base address,
- // in case of a data abort, and need to restore the value
-
- // The spec says -
- // If the instruction would have overwritten the base with data
- // (that is, it has the base in the transfer list), the overwriting is prevented.
- // This is true even when the abort occurs after the base word gets loaded
- restore_base_address_nxt = instruction[20] &&
- (instruction[15:0] & (1'd1 << instruction[19:16]));
-
- // Increment or Decrement
- if ( instruction[23] ) // increment
- begin
- if ( instruction[24] ) // increment before
- address_sel_nxt = 4'd7; // Rn + 4
- else
- address_sel_nxt = 4'd4; // Rn
- end
- else // decrement
- begin
- alu_cin_sel_nxt = 2'd1; // cin = 1
- alu_not_sel_nxt = 1'd1; // invert B
- if ( !instruction[24] ) // decrement after
- address_sel_nxt = 4'd6; // alu out + 4
- else
- address_sel_nxt = 4'd1; // alu out
- end
-
- // Load or store ?
- if ( !instruction[20] ) // Store
- write_data_wen_nxt = 1'd1;
-
- // LDM: load into user mode registers, when in priviledged mode
- // DOnt use mtrans_r15 here because its not loaded yet
- if ( {instruction[22:20],instruction[15]} == 4'b1010 )
- user_mode_regs_load_nxt = 1'd1;
-
- // SDM: store the user mode registers, when in priviledged mode
- if ( {instruction[22:20]} == 3'b100 )
- o_user_mode_regs_store_nxt = 1'd1;
-
- // update the base register ?
- if ( instruction[21] ) // the W bit
- reg_bank_wsel_nxt = o_rn_sel_nxt;
- end
-
-
- if ( type == MULT )
- begin
- multiply_function_nxt[0] = 1'd1; // set enable
- // some bits can be changed just below
- saved_current_instruction_wen = 1'd1; // Save the Multiply instruction to
- // refer back to later
- pc_wen_nxt = 1'd0; // hold current PC value
-
- if ( instruction[21] )
- multiply_function_nxt[1] = 1'd1; // accumulate
- end
-
-
- // swp - do read part first
- if ( type == SWAP )
- begin
- saved_current_instruction_wen = 1'd1; // Save the memory access instruction to refer back to later
- pc_wen_nxt = 1'd0; // hold current PC value
- data_access_exec_nxt = 1'd1; // indicate that its a data read or write,
- // rather than an instruction fetch
- barrel_shift_data_sel_nxt = 2'd2; // Shift value from Rm register
- address_sel_nxt = 4'd4; // Rn
- exclusive_exec_nxt = 1'd1; // signal an exclusive access
- end
-
-
- // mcr & mrc - takes two cycles
- if ( type == CORTRANS && !und_request )
- begin
- saved_current_instruction_wen = 1'd1; // Save the memory access instruction to refer back to later
- pc_wen_nxt = 1'd0; // hold current PC value
- address_sel_nxt = 4'd3; // pc (not pc + 4)
-
- if ( instruction[20] ) // MRC
- copro_operation_nxt = 2'd1; // Register transfer from Co-Processor
- else // MCR
- begin
- // Don't enable operation to Co-Processor until next period
- // So it gets the Rd value from the execution stage at the same time
- copro_operation_nxt = 2'd0;
- copro_write_data_wen_nxt = 1'd1; // Rd register value to co-processor
- end
- end
-
-
- if ( type == SWI || und_request )
- begin
- // save address of next instruction to Supervisor Mode LR
- reg_write_sel_nxt = 3'd1; // pc -4
- reg_bank_wsel_nxt = 4'd14; // LR
-
- address_sel_nxt = 4'd2; // interrupt_vector
- pc_sel_nxt = 2'd2; // interrupt_vector
-
- status_bits_mode_nxt = interrupt_mode; // e.g. Supervisor mode
- status_bits_mode_wen_nxt = 1'd1;
-
- // disable normal interrupts
- status_bits_irq_mask_nxt = 1'd1;
- status_bits_irq_mask_wen_nxt = 1'd1;
- end
-
-
- if ( regop_set_flags )
- begin
- status_bits_flags_wen_nxt = 1'd1;
-
- // If <Rd> is r15, the ALU output is copied to the Status Bits.
- // Not allowed to use r15 for mul or lma instructions
- if ( instruction[15:12] == 4'd15 )
- begin
- status_bits_sel_nxt = 3'd1; // alu out
-
- // Priviledged mode? Then also update the other status bits
- if ( i_execute_status_bits[1:0] != USR )
- begin
- status_bits_mode_wen_nxt = 1'd1;
- status_bits_irq_mask_wen_nxt = 1'd1;
- status_bits_firq_mask_wen_nxt = 1'd1;
- end
- end
- end
-
- end
-
- // Handle asynchronous interrupts.
- // interrupts are processed only during execution states
- // multicycle instructions must complete before the interrupt starts
- // SWI, Address Exception and Undefined Instruction interrupts are only executed if the
- // instruction that causes the interrupt is conditionally executed so
- // its not handled here
- if ( instruction_valid && interrupt && next_interrupt != 3'd6 )
- begin
- // Save the interrupt causing instruction to refer back to later
- // This also saves the instruction abort vma and status, in the case of an
- // instruction abort interrupt
- saved_current_instruction_wen = 1'd1;
-
- // save address of next instruction to Supervisor Mode LR
- // Address Exception ?
- if ( next_interrupt == 3'd4 )
- reg_write_sel_nxt = 3'd7; // pc
- else
- reg_write_sel_nxt = 3'd1; // pc -4
-
- reg_bank_wsel_nxt = 4'd14; // LR
-
- address_sel_nxt = 4'd2; // interrupt_vector
- pc_sel_nxt = 2'd2; // interrupt_vector
-
- status_bits_mode_nxt = interrupt_mode; // e.g. Supervisor mode
- status_bits_mode_wen_nxt = 1'd1;
-
- // disable normal interrupts
- status_bits_irq_mask_nxt = 1'd1;
- status_bits_irq_mask_wen_nxt = 1'd1;
-
- // disable fast interrupts
- if ( next_interrupt == 3'd2 ) // FIRQ
- begin
- status_bits_firq_mask_nxt = 1'd1;
- status_bits_firq_mask_wen_nxt = 1'd1;
- end
- end
-
-
- // previous instruction was either ldr or sdr
- // if it is currently executing in the execute stage do the following
- if ( control_state == MEM_WAIT1 )
- begin
- // Save the next instruction to execute later
- // Do this even if this instruction does not execute because of Condition
- pre_fetch_instruction_wen = 1'd1;
-
- if ( instruction_execute ) // conditional execution state
- begin
- address_sel_nxt = 4'd3; // pc (not pc + 4)
- pc_wen_nxt = 1'd0; // hold current PC value
- end
- end
-
-
- // completion of load operation
- if ( control_state == MEM_WAIT2 && load_op )
- begin
- barrel_shift_data_sel_nxt = 2'd1; // load word from memory
- barrel_shift_amount_sel_nxt = 2'd3; // shift by address[1:0] x 8
-
- // shift needed
- if ( i_execute_address[1:0] != 2'd0 )
- barrel_shift_function_nxt = ROR;
-
- // load a byte
- if ( type == TRANS && instruction[22] )
- alu_out_sel_nxt = 4'd3; // zero_extend8
-
- if ( !dabt ) // dont load data there is an abort on the data read
- begin
- // Check if the load destination is the PC
- if (instruction[15:12] == 4'd15)
- begin
- pc_sel_nxt = 2'd1; // alu_out
- address_sel_nxt = 4'd1; // alu_out
- end
- else
- reg_bank_wsel_nxt = instruction[15:12];
- end
- end
-
-
- // second cycle of multiple load or store
- if ( control_state == MTRANS_EXEC1 )
- begin
- // Save the next instruction to execute later
- // Do this even if this instruction does not execute because of Condition
- pre_fetch_instruction_wen = 1'd1;
-
- if ( instruction_execute ) // conditional execution state
- begin
- address_sel_nxt = 4'd5; // o_address
- pc_wen_nxt = 1'd0; // hold current PC value
- data_access_exec_nxt = 1'd1; // indicate that its a data read or write,
- // rather than an instruction fetch
-
- if ( !instruction[20] ) // Store
- write_data_wen_nxt = 1'd1;
-
- // LDM: load into user mode registers, when in priviledged mode
- if ( {instruction[22:20],mtrans_r15} == 4'b1010 )
- user_mode_regs_load_nxt = 1'd1;
-
- // SDM: store the user mode registers, when in priviledged mode
- if ( {instruction[22:20]} == 3'b100 )
- o_user_mode_regs_store_nxt = 1'd1;
- end
- end
-
-
- // third cycle of multiple load or store
- if ( control_state == MTRANS_EXEC2 )
- begin
- address_sel_nxt = 4'd5; // o_address
- pc_wen_nxt = 1'd0; // hold current PC value
- data_access_exec_nxt = 1'd1; // indicate that its a data read or write,
- // rather than an instruction fetch
- barrel_shift_data_sel_nxt = 2'd1; // load word from memory
-
- // Load or Store
- if ( instruction[20] ) // Load
- begin
- // Can never be loading the PC in this state, as the PC is always
- // the last register in the set to be loaded
- if ( !dabt )
- reg_bank_wsel_nxt = mtrans_reg_d2;
- end
- else // Store
- write_data_wen_nxt = 1'd1;
-
- // LDM: load into user mode registers, when in priviledged mode
- if ( {instruction[22:20],mtrans_r15} == 4'b1010 )
- user_mode_regs_load_nxt = 1'd1;
-
- // SDM: store the user mode registers, when in priviledged mode
- if ( {instruction[22:20]} == 3'b100 )
- o_user_mode_regs_store_nxt = 1'd1;
- end
-
-
- // second or fourth cycle of multiple load or store
- if ( control_state == MTRANS_EXEC3 && instruction_execute )
- begin
- address_sel_nxt = 4'd3; // pc (not pc + 4)
- pc_wen_nxt = 1'd0; // hold current PC value
- barrel_shift_data_sel_nxt = 2'd1; // load word from memory
-
- // Can never be loading the PC in this state, as the PC is always
- // the last register in the set to be loaded
- if ( instruction[20] && !dabt ) // Load
- reg_bank_wsel_nxt = mtrans_reg_d2;
-
- // LDM: load into user mode registers, when in priviledged mode
- if ( {instruction[22:20],mtrans_r15} == 4'b1010 )
- user_mode_regs_load_nxt = 1'd1;
-
- // SDM: store the user mode registers, when in priviledged mode
- if ( {instruction[22:20]} == 3'b100 )
- o_user_mode_regs_store_nxt = 1'd1;
- end
-
- // state is used for LMD/STM of a single register
- if ( control_state == MTRANS_EXEC3B && instruction_execute )
- begin
- // Save the next instruction to execute later
- // Do this even if this instruction does not execute because of Condition
- pre_fetch_instruction_wen = 1'd1;
-
- address_sel_nxt = 4'd3; // pc (not pc + 4)
- pc_wen_nxt = 1'd0; // hold current PC value
-
- // LDM: load into user mode registers, when in priviledged mode
- if ( {instruction[22:20],mtrans_r15} == 4'b1010 )
- user_mode_regs_load_nxt = 1'd1;
-
- // SDM: store the user mode registers, when in priviledged mode
- if ( {instruction[22:20]} == 3'b100 )
- o_user_mode_regs_store_nxt = 1'd1;
- end
-
- if ( control_state == MTRANS_EXEC4 )
- begin
- barrel_shift_data_sel_nxt = 2'd1; // load word from memory
-
- if ( instruction[20] ) // Load
- begin
- if (!dabt) // dont overwrite registers or status if theres a data abort
- begin
- if ( mtrans_reg_d2 == 4'd15 ) // load new value into PC
- begin
- address_sel_nxt = 4'd1; // alu_out - read instructions using new PC value
- pc_sel_nxt = 2'd1; // alu_out
- pc_wen_nxt = 1'd1; // write PC
-
- // ldm with S bit and pc: the Status bits are updated
- // Node this must be done only at the end
- // so the register set is the set in the mode before it
- // gets changed.
- if ( instruction[22] )
- begin
- status_bits_sel_nxt = 3'd1; // alu out
- status_bits_flags_wen_nxt = 1'd1;
-
- // Can't change the mode or mask bits in User mode
- if ( i_execute_status_bits[1:0] != USR )
- begin
- status_bits_mode_wen_nxt = 1'd1;
- status_bits_irq_mask_wen_nxt = 1'd1;
- status_bits_firq_mask_wen_nxt = 1'd1;
- end
- end
- end
- else
- begin
- reg_bank_wsel_nxt = mtrans_reg_d2;
- end
- end
- end
-
- // we have a data abort interrupt
- if ( dabt )
- begin
- pc_wen_nxt = 1'd0; // hold current PC value
- end
-
- // LDM: load into user mode registers, when in priviledged mode
- if ( {instruction[22:20],mtrans_r15} == 4'b1010 )
- user_mode_regs_load_nxt = 1'd1;
-
- // SDM: store the user mode registers, when in priviledged mode
- if ( {instruction[22:20]} == 3'b100 )
- o_user_mode_regs_store_nxt = 1'd1;
- end
-
-
- // state is for when a data abort interrupt is triggered during an LDM
- if ( control_state == MTRANS5_ABORT )
- begin
- // Restore the Base Address, if the base register is included in the
- // list of registers being loaded
- if (restore_base_address) // LDM with base address in register list
- begin
- reg_write_sel_nxt = 3'd6; // write base_register
- reg_bank_wsel_nxt = instruction[19:16]; // to Rn
- end
- end
-
-
- // Multiply or Multiply-Accumulate
- if ( control_state == MULT_PROC1 && instruction_execute )
- begin
- // Save the next instruction to execute later
- // Do this even if this instruction does not execute because of Condition
- pre_fetch_instruction_wen = 1'd1;
- pc_wen_nxt = 1'd0; // hold current PC value
- multiply_function_nxt = o_multiply_function;
- end
-
-
- // Multiply or Multiply-Accumulate
- // Do multiplication
- // Wait for done or accumulate signal
- if ( control_state == MULT_PROC2 )
- begin
- // Save the next instruction to execute later
- // Do this even if this instruction does not execute because of Condition
- pc_wen_nxt = 1'd0; // hold current PC value
- address_sel_nxt = 4'd3; // pc (not pc + 4)
- multiply_function_nxt = o_multiply_function;
- end
-
-
- // Save RdLo
- // always last cycle of all multiply or multiply accumulate operations
- if ( control_state == MULT_STORE )
- begin
- reg_write_sel_nxt = 3'd2; // multiply_out
- multiply_function_nxt = o_multiply_function;
-
- if ( type == MULT ) // 32-bit
- reg_bank_wsel_nxt = instruction[19:16]; // Rd
- else // 64-bit / Long
- reg_bank_wsel_nxt = instruction[15:12]; // RdLo
-
- if ( instruction[20] ) // the 'S' bit
- begin
- status_bits_sel_nxt = 3'd4; // { multiply_flags, status_bits_flags[1:0] }
- status_bits_flags_wen_nxt = 1'd1;
- end
- end
-
- // Add lower 32 bits to multiplication product
- if ( control_state == MULT_ACCUMU )
- begin
- multiply_function_nxt = o_multiply_function;
- pc_wen_nxt = 1'd0; // hold current PC value
- address_sel_nxt = 4'd3; // pc (not pc + 4)
- end
-
- // swp - do write request in 2nd cycle
- if ( control_state == SWAP_WRITE && instruction_execute )
- begin
- barrel_shift_data_sel_nxt = 2'd2; // Shift value from Rm register
- address_sel_nxt = 4'd4; // Rn
- write_data_wen_nxt = 1'd1;
- data_access_exec_nxt = 1'd1; // indicate that its a data read or write,
- // rather than an instruction fetch
-
- if ( instruction[22] )
- byte_enable_sel_nxt = 2'd1; // Save byte
-
- if ( instruction_execute ) // conditional execution state
- pc_wen_nxt = 1'd0; // hold current PC value
-
- // Save the next instruction to execute later
- // Do this even if this instruction does not execute because of Condition
- pre_fetch_instruction_wen = 1'd1;
-
- end
-
-
- // swp - receive read response in 3rd cycle
- if ( control_state == SWAP_WAIT1 )
- begin
- barrel_shift_data_sel_nxt = 2'd1; // load word from memory
- barrel_shift_amount_sel_nxt = 2'd3; // shift by address[1:0] x 8
-
- // shift needed
- if ( i_execute_address[1:0] != 2'd0 )
- barrel_shift_function_nxt = ROR;
-
- if ( instruction_execute ) // conditional execution state
- begin
- address_sel_nxt = 4'd3; // pc (not pc + 4)
- pc_wen_nxt = 1'd0; // hold current PC value
- end
-
- // load a byte
- if ( instruction[22] )
- alu_out_sel_nxt = 4'd3; // zero_extend8
-
- if ( !dabt )
- begin
- // Check is the load destination is the PC
- if ( instruction[15:12] == 4'd15 )
- begin
- pc_sel_nxt = 2'd1; // alu_out
- address_sel_nxt = 4'd1; // alu_out
- end
- else
- reg_bank_wsel_nxt = instruction[15:12];
- end
- end
-
- // 1 cycle delay for Co-Processor Register access
- if ( control_state == COPRO_WAIT && instruction_execute )
- begin
- pre_fetch_instruction_wen = 1'd1;
-
- if ( instruction[20] ) // mrc instruction
- begin
- // Check is the load destination is the PC
- if ( instruction[15:12] == 4'd15 )
- begin
- // If r15 is specified for <Rd>, the condition code flags are
- // updated instead of a general-purpose register.
- status_bits_sel_nxt = 3'd3; // i_copro_data
- status_bits_flags_wen_nxt = 1'd1;
-
- // Can't change these in USR mode
- if ( i_execute_status_bits[1:0] != USR )
- begin
- status_bits_mode_wen_nxt = 1'd1;
- status_bits_irq_mask_wen_nxt = 1'd1;
- status_bits_firq_mask_wen_nxt = 1'd1;
- end
- end
- else
- reg_bank_wsel_nxt = instruction[15:12];
-
- reg_write_sel_nxt = 3'd5; // i_copro_data
- end
- else // mcr instruction
- begin
- copro_operation_nxt = 2'd2; // Register transfer to Co-Processor
- end
- end
-
-
- // Have just changed the status_bits mode but this
- // creates a 1 cycle gap with the old mode
- // coming back from execute into instruction_decode
- // So squash that old mode value during this
- // cycle of the interrupt transition
- if ( control_state == INT_WAIT1 )
- status_bits_mode_nxt = o_status_bits_mode; // Supervisor mode
-
- end
-
-
-// Speed up the long path from u_decode/o_read_data to u_register_bank/r8_firq
-// This pre-encodes the firq_s3 signal thats used in u_register_bank
-assign firq_not_user_mode_nxt = !user_mode_regs_load_nxt && status_bits_mode_nxt == FIRQ;
-
-
-// ========================================================
-// Next State Logic
-// ========================================================
-
-// this replicates the current value of the execute signal in the execute stage
-assign instruction_execute = conditional_execute ( o_condition, i_execute_status_bits[31:28] );
-
-assign instruction_valid = (control_state == EXECUTE || control_state == PRE_FETCH_EXEC) ||
- // when last instruction was multi-cycle instruction but did not execute
- // because condition was false then act like you're in the execute state
- (!instruction_execute && (control_state == PC_STALL1 ||
- control_state == MEM_WAIT1 ||
- control_state == COPRO_WAIT ||
- control_state == SWAP_WRITE ||
- control_state == MULT_PROC1 ||
- control_state == MTRANS_EXEC1 ||
- control_state == MTRANS_EXEC3 ||
- control_state == MTRANS_EXEC3B ) );
-
-
- always @*
- begin
- // default is to hold the current state
- control_state_nxt = control_state;
-
- // Note: The order is important here
- if ( control_state == RST_WAIT1 ) control_state_nxt = RST_WAIT2;
- if ( control_state == RST_WAIT2 ) control_state_nxt = EXECUTE;
- if ( control_state == INT_WAIT1 ) control_state_nxt = INT_WAIT2;
- if ( control_state == INT_WAIT2 ) control_state_nxt = EXECUTE;
- if ( control_state == COPRO_WAIT ) control_state_nxt = PRE_FETCH_EXEC;
- if ( control_state == PC_STALL1 ) control_state_nxt = PC_STALL2;
- if ( control_state == PC_STALL2 ) control_state_nxt = EXECUTE;
- if ( control_state == SWAP_WRITE ) control_state_nxt = SWAP_WAIT1;
- if ( control_state == SWAP_WAIT1 ) control_state_nxt = SWAP_WAIT2;
- if ( control_state == MULT_STORE ) control_state_nxt = PRE_FETCH_EXEC;
- if ( control_state == MTRANS5_ABORT ) control_state_nxt = PRE_FETCH_EXEC;
-
- if ( control_state == MEM_WAIT1 )
- control_state_nxt = MEM_WAIT2;
-
- if ( control_state == MEM_WAIT2 ||
- control_state == SWAP_WAIT2 )
- begin
- if ( write_pc ) // writing to the PC!!
- control_state_nxt = PC_STALL1;
- else
- control_state_nxt = PRE_FETCH_EXEC;
- end
-
- if ( control_state == MTRANS_EXEC1 )
- begin
- if (mtrans_instruction_nxt[15:0] != 16'd0)
- control_state_nxt = MTRANS_EXEC2;
- else // if the register list holds a single register
- control_state_nxt = MTRANS_EXEC3;
- end
-
- // Stay in State MTRANS_EXEC2 until the full list of registers to
- // load or store has been processed
- if ( control_state == MTRANS_EXEC2 && mtrans_num_registers == 5'd1 )
- control_state_nxt = MTRANS_EXEC3;
-
- if ( control_state == MTRANS_EXEC3 ) control_state_nxt = MTRANS_EXEC4;
-
- if ( control_state == MTRANS_EXEC3B ) control_state_nxt = MTRANS_EXEC4;
-
- if ( control_state == MTRANS_EXEC4 )
- begin
- if ( dabt ) // data abort
- control_state_nxt = MTRANS5_ABORT;
- else if (write_pc) // writing to the PC!!
- control_state_nxt = PC_STALL1;
- else
- control_state_nxt = PRE_FETCH_EXEC;
- end
-
- if ( control_state == MULT_PROC1 )
- begin
- if (!instruction_execute)
- control_state_nxt = PRE_FETCH_EXEC;
- else
- control_state_nxt = MULT_PROC2;
- end
-
- if ( control_state == MULT_PROC2 )
- begin
- if ( i_multiply_done )
- if ( o_multiply_function[1] ) // Accumulate ?
- control_state_nxt = MULT_ACCUMU;
- else
- control_state_nxt = MULT_STORE;
- end
-
-
- if ( control_state == MULT_ACCUMU )
- begin
- control_state_nxt = MULT_STORE;
- end
-
-
- // This should come at the end, so that conditional execution works
- // correctly
- if ( instruction_valid )
- begin
- // default is to stay in execute state, or to move into this
- // state from a conditional execute state
- control_state_nxt = EXECUTE;
-
- if ( mem_op ) // load or store word or byte
- control_state_nxt = MEM_WAIT1;
- if ( write_pc )
- control_state_nxt = PC_STALL1;
- if ( type == MTRANS )
- begin
- if ( mtrans_num_registers != 5'd0 )
- begin
- // check for LDM/STM of a single register
- if ( mtrans_num_registers == 5'd1 )
- control_state_nxt = MTRANS_EXEC3B;
- else
- control_state_nxt = MTRANS_EXEC1;
- end
- else
- control_state_nxt = MTRANS_EXEC3;
- end
-
- if ( type == MULT )
- control_state_nxt = MULT_PROC1;
-
- if ( type == SWAP )
- control_state_nxt = SWAP_WRITE;
-
- if ( type == CORTRANS && !und_request )
- control_state_nxt = COPRO_WAIT;
-
- // interrupt overrides everything else so its last
- if ( interrupt )
- control_state_nxt = INT_WAIT1;
- end
- end
-
-
-// ========================================================
-// Register Update
-// ========================================================
-always @ ( posedge i_clk )
- if (!i_fetch_stall)
- begin
- o_read_data <= i_read_data;
- o_read_data_alignment <= {i_execute_address[1:0], 3'd0};
- abt_address_reg <= i_execute_address;
- iabt_reg <= i_iabt;
- adex_reg <= i_adex;
- abt_status_reg <= i_abt_status;
- o_status_bits_mode <= status_bits_mode_nxt;
- o_status_bits_irq_mask <= status_bits_irq_mask_nxt;
- o_status_bits_firq_mask <= status_bits_firq_mask_nxt;
- o_imm32 <= imm32_nxt;
- o_imm_shift_amount <= imm_shift_amount_nxt;
- o_shift_imm_zero <= shift_imm_zero_nxt;
-
- // when have an interrupt, execute the interrupt operation
- // unconditionally in the execute stage
- // ensures that status_bits register gets updated correctly
- // Likewise when in middle of multi-cycle instructions
- // execute them unconditionally
- o_condition <= instruction_valid && !interrupt ? condition_nxt : AL;
- o_exclusive_exec <= exclusive_exec_nxt;
- o_data_access_exec <= data_access_exec_nxt;
-
- o_rm_sel <= o_rm_sel_nxt;
- o_rds_sel <= o_rds_sel_nxt;
- o_rn_sel <= o_rn_sel_nxt;
- o_barrel_shift_amount_sel <= barrel_shift_amount_sel_nxt;
- o_barrel_shift_data_sel <= barrel_shift_data_sel_nxt;
- o_barrel_shift_function <= barrel_shift_function_nxt;
- o_alu_function <= alu_function_nxt;
- o_multiply_function <= multiply_function_nxt;
- o_interrupt_vector_sel <= next_interrupt;
- o_address_sel <= address_sel_nxt;
- o_pc_sel <= pc_sel_nxt;
- o_byte_enable_sel <= byte_enable_sel_nxt;
- o_status_bits_sel <= status_bits_sel_nxt;
- o_reg_write_sel <= reg_write_sel_nxt;
- o_user_mode_regs_load <= user_mode_regs_load_nxt;
- o_firq_not_user_mode <= firq_not_user_mode_nxt;
- o_write_data_wen <= write_data_wen_nxt;
- o_base_address_wen <= base_address_wen_nxt;
- o_pc_wen <= pc_wen_nxt;
- o_reg_bank_wsel <= reg_bank_wsel_nxt;
- o_reg_bank_wen <= decode ( reg_bank_wsel_nxt );
- o_status_bits_flags_wen <= status_bits_flags_wen_nxt;
- o_status_bits_mode_wen <= status_bits_mode_wen_nxt;
- o_status_bits_irq_mask_wen <= status_bits_irq_mask_wen_nxt;
- o_status_bits_firq_mask_wen <= status_bits_firq_mask_wen_nxt;
-
- o_copro_opcode1 <= instruction[23:21];
- o_copro_opcode2 <= instruction[7:5];
- o_copro_crn <= instruction[19:16];
- o_copro_crm <= instruction[3:0];
- o_copro_num <= instruction[11:8];
- o_copro_operation <= copro_operation_nxt;
- o_copro_write_data_wen <= copro_write_data_wen_nxt;
- mtrans_r15 <= mtrans_r15_nxt;
- restore_base_address <= restore_base_address_nxt;
- control_state <= control_state_nxt;
- mtrans_reg_d1 <= mtrans_reg;
- mtrans_reg_d2 <= mtrans_reg_d1;
- end
-
-
-
-always @ ( posedge i_clk )
- if ( !i_fetch_stall )
- begin
- // sometimes this is a pre-fetch instruction
- // e.g. two ldr instructions in a row. The second ldr will be saved
- // to the pre-fetch instruction register
- // then when its decoded, a copy is saved to the saved_current_instruction
- // register
- if (type == MTRANS)
- begin
- saved_current_instruction <= mtrans_instruction_nxt;
- saved_current_instruction_iabt <= instruction_iabt;
- saved_current_instruction_adex <= instruction_adex;
- saved_current_instruction_address <= instruction_address;
- saved_current_instruction_iabt_status <= instruction_iabt_status;
- end
- else if (saved_current_instruction_wen)
- begin
- saved_current_instruction <= instruction;
- saved_current_instruction_iabt <= instruction_iabt;
- saved_current_instruction_adex <= instruction_adex;
- saved_current_instruction_address <= instruction_address;
- saved_current_instruction_iabt_status <= instruction_iabt_status;
- end
-
- if (pre_fetch_instruction_wen)
- begin
- pre_fetch_instruction <= o_read_data;
- pre_fetch_instruction_iabt <= iabt_reg;
- pre_fetch_instruction_adex <= adex_reg;
- pre_fetch_instruction_address <= abt_address_reg;
- pre_fetch_instruction_iabt_status <= abt_status_reg;
- end
- end
-
-
-
-always @ ( posedge i_clk )
- if ( !i_fetch_stall )
- begin
- irq <= i_irq;
- firq <= i_firq;
-
- if ( control_state == INT_WAIT1 && o_status_bits_mode == SVC )
- begin
- dabt_reg <= 1'd0;
- end
- else
- begin
- dabt_reg <= dabt_reg || i_dabt;
- end
-
- dabt_reg_d1 <= dabt_reg;
- end
-
-assign dabt = dabt_reg || i_dabt;
-
-// ========================================================
-// Decompiler for debugging core - not synthesizable
-// ========================================================
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_decompile.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_decompile.v
deleted file mode 100644
index e06a930..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_decompile.v
+++ /dev/null
@@ -1,308 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Decompiler for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Decompiler for debugging core - not synthesizable //
-// Shows instruction in Execute Stage at last clock of //
-// the instruction //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////
-// //
-// Global testbench defines //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines for each module so if the module //
-// hierarchy changes, hierarchical references to signals //
-// will still work as long as this file is updated. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// ---------------------------------------------------------------
-// Module hierarchy defines
-// ---------------------------------------------------------------
-
-
-
-
- // ---------------------------------------------------------------
-
-
-
-// Simplified Main Memory Model
-
-//////////////////////////////////////////////////////////////////
-// //
-// Amber Configuration and Debug for the AMber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines used to configure and debug //
-// the Amber core //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Cache Ways
-// Changing this parameter is the recommended
-// way to change the Amber cache size; 2, 3, 4 and 8 ways are supported.
-// 2 ways -> 8KB cache
-// 3 ways -> 12KB cache
-// 4 ways -> 16KB cache
-// 8 ways -> 32KB cache
-
-// Use ram-based register bank implementation
-// `define A23_RAM_REGISTER_BANK
-
-// --------------------------------------------------------------------
-// Debug switches
-// --------------------------------------------------------------------
-
-// Enable the decompiler. The default output file is amber.dis
-//`define A23_DECOMPILE
-
-// Co-processor 15 debug. Registers in here control the cache
-//`define A23_COPRO15_DEBUG
-
-// Cache debug
-//`define A23_CACHE_DEBUG
-
-// --------------------------------------------------------------------
-
-
-// --------------------------------------------------------------------
-// File Names
-// --------------------------------------------------------------------
-
-
-
-module a23_decompile
-(
-input i_clk,
-input i_fetch_stall,
-input [31:0] i_instruction,
-input i_instruction_valid,
-input i_instruction_undefined,
-input i_instruction_execute,
-input [2:0] i_interrupt, // non-zero value means interrupt triggered
-input i_interrupt_state,
-input [31:0] i_instruction_address,
-input [1:0] i_pc_sel,
-input i_pc_wen
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_execute.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_execute.v
deleted file mode 100644
index ae6c24b..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_execute.v
+++ /dev/null
@@ -1,914 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Execute stage of Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Executes instructions. Instantiates the register file, ALU //
-// multiplication unit and barrel shifter. This stage is //
-// relitively simple. All the complex stuff is done in the //
-// decode stage. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////////////
-// //
-// Amber Configuration and Debug for the AMber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines used to configure and debug //
-// the Amber core //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Cache Ways
-// Changing this parameter is the recommended
-// way to change the Amber cache size; 2, 3, 4 and 8 ways are supported.
-// 2 ways -> 8KB cache
-// 3 ways -> 12KB cache
-// 4 ways -> 16KB cache
-// 8 ways -> 32KB cache
-
-// Use ram-based register bank implementation
-// `define A23_RAM_REGISTER_BANK
-
-// --------------------------------------------------------------------
-// Debug switches
-// --------------------------------------------------------------------
-
-// Enable the decompiler. The default output file is amber.dis
-//`define A23_DECOMPILE
-
-// Co-processor 15 debug. Registers in here control the cache
-//`define A23_COPRO15_DEBUG
-
-// Cache debug
-//`define A23_CACHE_DEBUG
-
-// --------------------------------------------------------------------
-
-
-// --------------------------------------------------------------------
-// File Names
-// --------------------------------------------------------------------
-
-
-
-module a23_execute (
-
-input i_clk,
-input [31:0] i_read_data,
-input [4:0] i_read_data_alignment, // 2 LSBs of address in [4:3], appended
- // with 3 zeros
-input [31:0] i_copro_read_data, // From Co-Processor, to either Register
- // or Memory
-input i_data_access_exec, // from Instruction Decode stage
- // high means the memory access is a read
- // read or write, low for instruction
-
-output reg [31:0] o_copro_write_data = 'd0,
-output reg [31:0] o_write_data = 'd0,
-output reg [31:0] o_address = 32'hdead_dead,
-output reg o_adex = 'd0, // Address Exception
-output reg o_address_valid = 'd0, // Prevents the reset address value being a
- // wishbone access
-output [31:0] o_address_nxt, // un-registered version of address to the
- // cache rams address ports
-output reg o_priviledged = 'd0, // Priviledged access
-output reg o_exclusive = 'd0, // swap access
-output reg o_write_enable = 'd0,
-output reg [3:0] o_byte_enable = 'd0,
-output reg o_data_access = 'd0, // To Fetch stage. high = data fetch,
- // low = instruction fetch
-output [31:0] o_status_bits, // Full PC will all status bits, but PC part zero'ed out
-output o_multiply_done,
-
-
-// --------------------------------------------------
-// Control signals from Instruction Decode stage
-// --------------------------------------------------
-input i_fetch_stall, // stall all stages of the cpu at the same time
-input [1:0] i_status_bits_mode,
-input i_status_bits_irq_mask,
-input i_status_bits_firq_mask,
-input [31:0] i_imm32,
-input [4:0] i_imm_shift_amount,
-input i_shift_imm_zero,
-input [3:0] i_condition,
-input i_exclusive_exec, // swap access
-
-input [3:0] i_rm_sel,
-input [3:0] i_rds_sel,
-input [3:0] i_rn_sel,
-input [3:0] i_rm_sel_nxt,
-input [3:0] i_rds_sel_nxt,
-input [3:0] i_rn_sel_nxt,
-input [1:0] i_barrel_shift_amount_sel,
-input [1:0] i_barrel_shift_data_sel,
-input [1:0] i_barrel_shift_function,
-input [8:0] i_alu_function,
-input [1:0] i_multiply_function,
-input [2:0] i_interrupt_vector_sel,
-input [3:0] i_address_sel,
-input [1:0] i_pc_sel,
-input [1:0] i_byte_enable_sel,
-input [2:0] i_status_bits_sel,
-input [2:0] i_reg_write_sel,
-input i_user_mode_regs_load,
-input i_user_mode_regs_store_nxt,
-input i_firq_not_user_mode,
-input i_firq_not_user_mode_nxt,
-
-input i_write_data_wen,
-input i_base_address_wen, // save LDM base address register,
- // in case of data abort
-input i_pc_wen,
-input [14:0] i_reg_bank_wen,
-input [3:0] i_reg_bank_wsel,
-input i_status_bits_flags_wen,
-input i_status_bits_mode_wen,
-input i_status_bits_irq_mask_wen,
-input i_status_bits_firq_mask_wen,
-input i_copro_write_data_wen
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-//////////////////////////////////////////////////////////////////
-// //
-// Functions for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Functions used in more than one module //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// ========================================================
-// PC Filter - Remove the status bits
-// ========================================================
-function [31:0] pcf;
-input [31:0] pc_reg;
- begin
- pcf = {6'd0, pc_reg[25:2], 2'd0};
- end
-endfunction
-
-
-// ========================================================
-// 4-bit to 16-bit 1-hot decode
-// ========================================================
-function [14:0] decode;
-input [3:0] reg_sel;
-begin
-case ( reg_sel )
- 4'h0: decode = 15'h0001;
- 4'h1: decode = 15'h0002;
- 4'h2: decode = 15'h0004;
- 4'h3: decode = 15'h0008;
- 4'h4: decode = 15'h0010;
- 4'h5: decode = 15'h0020;
- 4'h6: decode = 15'h0040;
- 4'h7: decode = 15'h0080;
- 4'h8: decode = 15'h0100;
- 4'h9: decode = 15'h0200;
- 4'ha: decode = 15'h0400;
- 4'hb: decode = 15'h0800;
- 4'hc: decode = 15'h1000;
- 4'hd: decode = 15'h2000;
- 4'he: decode = 15'h4000;
- default: decode = 15'h0000;
-endcase
-end
-endfunction
-
-
-// ========================================================
-// Convert Stats Bits Mode to one-hot encoded version
-// ========================================================
-function [3:0] oh_status_bits_mode;
-input [1:0] fn_status_bits_mode;
-begin
-oh_status_bits_mode =
- fn_status_bits_mode == SVC ? 1'd1 << OH_SVC :
- fn_status_bits_mode == IRQ ? 1'd1 << OH_IRQ :
- fn_status_bits_mode == FIRQ ? 1'd1 << OH_FIRQ :
- 1'd1 << OH_USR ;
-end
-endfunction
-
-// ========================================================
-// Convert mode into ascii name
-// ========================================================
-function [(14*8)-1:0] mode_name;
-input [4:0] mode;
-begin
-
-mode_name = mode == USR ? "User " :
- mode == SVC ? "Supervisor " :
- mode == IRQ ? "Interrupt " :
- mode == FIRQ ? "Fast Interrupt" :
- "UNKNOWN " ;
-end
-endfunction
-
-
-// ========================================================
-// Conditional Execution Function
-// ========================================================
-// EQ Z set
-// NE Z clear
-// CS C set
-// CC C clear
-// MI N set
-// PL N clear
-// VS V set
-// VC V clear
-// HI C set and Z clear
-// LS C clear or Z set
-// GE N == V
-// LT N != V
-// GT Z == 0,N == V
-// LE Z == 1 or N != V
-// AL Always (unconditional)
-// NV Never
-
-function conditional_execute;
-input [3:0] condition;
-input [3:0] flags;
-begin
-conditional_execute
- = ( condition == AL ) ||
- ( condition == EQ && flags[2] ) ||
- ( condition == NE && !flags[2] ) ||
- ( condition == CS && flags[1] ) ||
- ( condition == CC && !flags[1] ) ||
- ( condition == MI && flags[3] ) ||
- ( condition == PL && !flags[3] ) ||
- ( condition == VS && flags[0] ) ||
- ( condition == VC && !flags[0] ) ||
-
- ( condition == HI && flags[1] && !flags[2] ) ||
- ( condition == LS && (!flags[1] || flags[2]) ) ||
-
- ( condition == GE && flags[3] == flags[0] ) ||
- ( condition == LT && flags[3] != flags[0] ) ||
-
- ( condition == GT && !flags[2] && flags[3] == flags[0] ) ||
- ( condition == LE && (flags[2] || flags[3] != flags[0])) ;
-
-end
-endfunction
-
-
-// ========================================================
-// Log 2
-// ========================================================
-
-function [31:0] log2;
-input [31:0] num;
-integer i;
-integer out;
-begin
- out = 32'd0;
- for (i=0; i<30; i=i+1)
- if ((2**i > num) && (out == 0))
- out = i-1;
- log2 = out;
-end
-endfunction
-
-// ========================================================
-// Internal signals
-// ========================================================
-wire [31:0] write_data_nxt;
-wire [3:0] byte_enable_nxt;
-wire [31:0] pc_plus4;
-wire [31:0] pc_minus4;
-wire [31:0] address_plus4;
-wire [31:0] alu_plus4;
-wire [31:0] rn_plus4;
-wire [31:0] alu_out;
-wire [3:0] alu_flags;
-wire [31:0] rm;
-wire [31:0] rs;
-wire [31:0] rd;
-wire [31:0] rn;
-wire [31:0] pc;
-wire [31:0] pc_nxt;
-wire write_enable_nxt;
-wire [31:0] interrupt_vector;
-wire [7:0] shift_amount;
-wire [31:0] barrel_shift_in;
-wire [31:0] barrel_shift_out;
-wire barrel_shift_carry;
-
-wire [3:0] status_bits_flags_nxt;
-reg [3:0] status_bits_flags = 'd0;
-wire [1:0] status_bits_mode_nxt;
-wire [1:0] status_bits_mode_nr;
-reg [1:0] status_bits_mode = SVC;
- // raw rs select
-wire [1:0] status_bits_mode_rds_nxt;
-wire [1:0] status_bits_mode_rds_nr;
-reg [1:0] status_bits_mode_rds;
- // one-hot encoded rs select
-wire [3:0] status_bits_mode_rds_oh_nxt;
-reg [3:0] status_bits_mode_rds_oh = 1'd1 << OH_SVC;
-wire status_bits_mode_rds_oh_update;
-wire status_bits_irq_mask_nxt;
-reg status_bits_irq_mask = 1'd1;
-wire status_bits_firq_mask_nxt;
-reg status_bits_firq_mask = 1'd1;
-
-wire execute; // high when condition execution is true
-wire [31:0] reg_write_nxt;
-wire pc_wen;
-wire [14:0] reg_bank_wen;
-wire [3:0] reg_bank_wsel;
-wire [31:0] multiply_out;
-wire [1:0] multiply_flags;
-reg [31:0] base_address = 'd0; // Saves base address during LDM instruction in
- // case of data abort
-
-wire priviledged_nxt;
-wire priviledged_update;
-wire address_update;
-wire base_address_update;
-wire write_data_update;
-wire copro_write_data_update;
-wire byte_enable_update;
-wire data_access_update;
-wire write_enable_update;
-wire exclusive_update;
-wire status_bits_flags_update;
-wire status_bits_mode_update;
-wire status_bits_irq_mask_update;
-wire status_bits_firq_mask_update;
-
-wire [31:0] alu_out_pc_filtered;
-wire adex_nxt;
-
-// ========================================================
-// Status Bits in PC register
-// ========================================================
-wire [1:0] status_bits_out;
-assign status_bits_out = (i_status_bits_mode_wen && i_status_bits_sel == 3'd1) ?
- alu_out[1:0] : status_bits_mode ;
-
-
-assign o_status_bits = { status_bits_flags, // 31:28
- status_bits_irq_mask, // 7
- status_bits_firq_mask, // 6
- 24'd0,
- status_bits_out}; // 1:0 = mode
-
-// ========================================================
-// Status Bits Select
-// ========================================================
-assign status_bits_flags_nxt = i_status_bits_sel == 3'd0 ? alu_flags :
- i_status_bits_sel == 3'd1 ? alu_out [31:28] :
- i_status_bits_sel == 3'd3 ? i_copro_read_data[31:28] :
- // 4 = update flags after a multiply operation
- { multiply_flags, status_bits_flags[1:0] } ;
-
-assign status_bits_mode_nxt = i_status_bits_sel == 3'd0 ? i_status_bits_mode :
- i_status_bits_sel == 3'd1 ? alu_out [1:0] :
- i_copro_read_data [1:0] ;
-
-
-// Used for the Rds output of register_bank - this special version of
-// status_bits_mode speeds up the critical path from status_bits_mode through the
-// register_bank, barrel_shifter and alu. It moves a mux needed for the
-// i_user_mode_regs_store_nxt signal back into the previous stage -
-// so its really part of the decode stage even though the logic is right here
-// In addition the signal is one-hot encoded to further speed up the logic
-// Raw version is also kept for ram-based register bank implementation.
-
-assign status_bits_mode_rds_nxt = i_user_mode_regs_store_nxt ? USR :
- status_bits_mode_update ? status_bits_mode_nxt :
- status_bits_mode ;
-
-assign status_bits_mode_rds_oh_nxt = oh_status_bits_mode(status_bits_mode_rds_nxt);
-
-
-assign status_bits_irq_mask_nxt = i_status_bits_sel == 3'd0 ? i_status_bits_irq_mask :
- i_status_bits_sel == 3'd1 ? alu_out [27] :
- i_copro_read_data [27] ;
-
-assign status_bits_firq_mask_nxt = i_status_bits_sel == 3'd0 ? i_status_bits_firq_mask :
- i_status_bits_sel == 3'd1 ? alu_out [26] :
- i_copro_read_data [26] ;
-
-
-
-// ========================================================
-// Adders
-// ========================================================
-assign pc_plus4 = pc + 32'd4;
-assign pc_minus4 = pc - 32'd4;
-assign address_plus4 = o_address + 32'd4;
-assign alu_plus4 = alu_out + 32'd4;
-assign rn_plus4 = rn + 32'd4;
-
-// ========================================================
-// Barrel Shift Amount Select
-// ========================================================
-// An immediate shift value of 0 is translated into 32
-assign shift_amount = i_barrel_shift_amount_sel == 2'd0 ? 8'd0 :
- i_barrel_shift_amount_sel == 2'd1 ? rs[7:0] :
- i_barrel_shift_amount_sel == 2'd2 ? {3'd0, i_imm_shift_amount } :
- {3'd0, i_read_data_alignment } ;
-
-// ========================================================
-// Barrel Shift Data Select
-// ========================================================
-assign barrel_shift_in = i_barrel_shift_data_sel == 2'd0 ? i_imm32 :
- i_barrel_shift_data_sel == 2'd1 ? i_read_data :
- rm ;
-
-// ========================================================
-// Interrupt vector Select
-// ========================================================
-
-assign interrupt_vector = // Reset vector
- (i_interrupt_vector_sel == 3'd0) ? 32'h00000000 :
- // Data abort interrupt vector
- (i_interrupt_vector_sel == 3'd1) ? 32'h00000010 :
- // Fast interrupt vector
- (i_interrupt_vector_sel == 3'd2) ? 32'h0000001c :
- // Regular interrupt vector
- (i_interrupt_vector_sel == 3'd3) ? 32'h00000018 :
- // Prefetch abort interrupt vector
- (i_interrupt_vector_sel == 3'd5) ? 32'h0000000c :
- // Undefined instruction interrupt vector
- (i_interrupt_vector_sel == 3'd6) ? 32'h00000004 :
- // Software (SWI) interrupt vector
- (i_interrupt_vector_sel == 3'd7) ? 32'h00000008 :
- // Default is the address exception interrupt
- 32'h00000014 ;
-
-
-// ========================================================
-// Address Select
-// ========================================================
-
-// If rd is the pc, then seperate the address bits from the status bits for
-// generating the next address to fetch
-assign alu_out_pc_filtered = pc_wen && i_pc_sel == 2'd1 ? pcf(alu_out) : alu_out;
-
-// if current instruction does not execute because it does not meet the condition
-// then address advances to next instruction
-assign o_address_nxt = (!execute) ? pc_plus4 :
- (i_address_sel == 4'd0) ? pc_plus4 :
- (i_address_sel == 4'd1) ? alu_out_pc_filtered :
- (i_address_sel == 4'd2) ? interrupt_vector :
- (i_address_sel == 4'd3) ? pc :
- (i_address_sel == 4'd4) ? rn :
- (i_address_sel == 4'd5) ? address_plus4 : // MTRANS address incrementer
- (i_address_sel == 4'd6) ? alu_plus4 : // MTRANS decrement after
- rn_plus4 ; // MTRANS increment before
-
-// Data accesses use 32-bit address space, but instruction
-// accesses are restricted to 26 bit space
-assign adex_nxt = |o_address_nxt[31:26] && !i_data_access_exec;
-
-// ========================================================
-// Program Counter Select
-// ========================================================
-// If current instruction does not execute because it does not meet the condition
-// then PC advances to next instruction
-assign pc_nxt = (!execute) ? pc_plus4 :
- i_pc_sel == 2'd0 ? pc_plus4 :
- i_pc_sel == 2'd1 ? alu_out :
- interrupt_vector ;
-
-
-// ========================================================
-// Register Write Select
-// ========================================================
-wire [31:0] save_int_pc;
-wire [31:0] save_int_pc_m4;
-
-assign save_int_pc = { status_bits_flags,
- status_bits_irq_mask,
- status_bits_firq_mask,
- pc[25:2],
- status_bits_mode };
-
-
-assign save_int_pc_m4 = { status_bits_flags,
- status_bits_irq_mask,
- status_bits_firq_mask,
- pc_minus4[25:2],
- status_bits_mode };
-
-
-assign reg_write_nxt = i_reg_write_sel == 3'd0 ? alu_out :
- // save pc to lr on an interrupt
- i_reg_write_sel == 3'd1 ? save_int_pc_m4 :
- // to update Rd at the end of Multiplication
- i_reg_write_sel == 3'd2 ? multiply_out :
- i_reg_write_sel == 3'd3 ? o_status_bits :
- i_reg_write_sel == 3'd5 ? i_copro_read_data : // mrc
- i_reg_write_sel == 3'd6 ? base_address :
- save_int_pc ;
-
-
-// ========================================================
-// Byte Enable Select
-// ========================================================
-assign byte_enable_nxt = i_byte_enable_sel == 2'd0 ? 4'b1111 : // word write
- i_byte_enable_sel == 2'd2 ? // halfword write
- ( o_address_nxt[1] == 1'd0 ? 4'b0011 :
- 4'b1100 ) :
-
- o_address_nxt[1:0] == 2'd0 ? 4'b0001 : // byte write
- o_address_nxt[1:0] == 2'd1 ? 4'b0010 :
- o_address_nxt[1:0] == 2'd2 ? 4'b0100 :
- 4'b1000 ;
-
-
-// ========================================================
-// Write Data Select
-// ========================================================
-assign write_data_nxt = i_byte_enable_sel == 2'd0 ? rd :
- {4{rd[ 7:0]}} ;
-
-
-// ========================================================
-// Conditional Execution
-// ========================================================
-assign execute = conditional_execute ( i_condition, status_bits_flags );
-
-// allow the PC to increment to the next instruction when current
-// instruction does not execute
-assign pc_wen = i_pc_wen || !execute;
-
-// only update register bank if current instruction executes
-assign reg_bank_wen = {{15{execute}} & i_reg_bank_wen};
-
-assign reg_bank_wsel = {{4{~execute}} | i_reg_bank_wsel};
-
-
-// ========================================================
-// Priviledged output flag
-// ========================================================
-// Need to look at status_bits_mode_nxt so switch to priviledged mode
-// at the same time as assert interrupt vector address
-assign priviledged_nxt = ( i_status_bits_mode_wen ? status_bits_mode_nxt : status_bits_mode ) != USR ;
-
-
-// ========================================================
-// Write Enable
-// ========================================================
-// This must be de-asserted when execute is fault
-assign write_enable_nxt = execute && i_write_data_wen;
-
-
-// ========================================================
-// Register Update
-// ========================================================
-
-assign priviledged_update = !i_fetch_stall;
-assign data_access_update = !i_fetch_stall && execute;
-assign write_enable_update = !i_fetch_stall;
-assign write_data_update = !i_fetch_stall && execute && i_write_data_wen;
-assign exclusive_update = !i_fetch_stall && execute;
-assign address_update = !i_fetch_stall;
-assign byte_enable_update = !i_fetch_stall && execute && i_write_data_wen;
-assign copro_write_data_update = !i_fetch_stall && execute && i_copro_write_data_wen;
-
-assign base_address_update = !i_fetch_stall && execute && i_base_address_wen;
-assign status_bits_flags_update = !i_fetch_stall && execute && i_status_bits_flags_wen;
-assign status_bits_mode_update = !i_fetch_stall && execute && i_status_bits_mode_wen;
-assign status_bits_mode_rds_oh_update = !i_fetch_stall;
-assign status_bits_irq_mask_update = !i_fetch_stall && execute && i_status_bits_irq_mask_wen;
-assign status_bits_firq_mask_update = !i_fetch_stall && execute && i_status_bits_firq_mask_wen;
-
-assign status_bits_mode_rds_nr = status_bits_mode_rds_oh_update ? status_bits_mode_rds_nxt :
- status_bits_mode_rds ;
-
-assign status_bits_mode_nr = status_bits_mode_update ? status_bits_mode_nxt :
- status_bits_mode ;
-
-always @( posedge i_clk )
- begin
- o_priviledged <= priviledged_update ? priviledged_nxt : o_priviledged;
- o_exclusive <= exclusive_update ? i_exclusive_exec : o_exclusive;
- o_data_access <= data_access_update ? i_data_access_exec : o_data_access;
- o_write_enable <= write_enable_update ? write_enable_nxt : o_write_enable;
- o_write_data <= write_data_update ? write_data_nxt : o_write_data;
- o_address <= address_update ? o_address_nxt : o_address;
- o_adex <= address_update ? adex_nxt : o_adex;
- o_address_valid <= address_update ? 1'd1 : o_address_valid;
- o_byte_enable <= byte_enable_update ? byte_enable_nxt : o_byte_enable;
- o_copro_write_data <= copro_write_data_update ? write_data_nxt : o_copro_write_data;
-
- base_address <= base_address_update ? rn : base_address;
-
- status_bits_flags <= status_bits_flags_update ? status_bits_flags_nxt : status_bits_flags;
- status_bits_mode <= status_bits_mode_nr;
- status_bits_mode_rds_oh <= status_bits_mode_rds_oh_update ? status_bits_mode_rds_oh_nxt : status_bits_mode_rds_oh;
- status_bits_mode_rds <= status_bits_mode_rds_nr;
- status_bits_irq_mask <= status_bits_irq_mask_update ? status_bits_irq_mask_nxt : status_bits_irq_mask;
- status_bits_firq_mask <= status_bits_firq_mask_update ? status_bits_firq_mask_nxt : status_bits_firq_mask;
- end
-
-
-// ========================================================
-// Instantiate Barrel Shift
-// ========================================================
-a23_barrel_shift u_barrel_shift (
- .i_in ( barrel_shift_in ),
- .i_carry_in ( status_bits_flags[1] ),
- .i_shift_amount ( shift_amount ),
- .i_shift_imm_zero ( i_shift_imm_zero ),
- .i_function ( i_barrel_shift_function ),
-
- .o_out ( barrel_shift_out ),
- .o_carry_out ( barrel_shift_carry )
-);
-
-
-// ========================================================
-// Instantiate ALU
-// ========================================================
-a23_alu u_alu (
- .i_a_in ( rn ),
- .i_b_in ( barrel_shift_out ),
- .i_barrel_shift_carry ( barrel_shift_carry ),
- .i_status_bits_carry ( status_bits_flags[1] ),
- .i_function ( i_alu_function ),
-
- .o_out ( alu_out ),
- .o_flags ( alu_flags )
-);
-
-
-// ========================================================
-// Instantiate Booth 64-bit Multiplier-Accumulator
-// ========================================================
-a23_multiply u_multiply (
- .i_clk ( i_clk ),
- .i_fetch_stall ( i_fetch_stall ),
- .i_a_in ( rs ),
- .i_b_in ( rm ),
- .i_function ( i_multiply_function ),
- .i_execute ( execute ),
- .o_out ( multiply_out ),
- .o_flags ( multiply_flags ), // [1] = N, [0] = Z
- .o_done ( o_multiply_done )
-);
-
-
-// ========================================================
-// Instantiate Register Bank
-// ========================================================
-a23_register_bank u_register_bank(
- .i_clk ( i_clk ),
- .i_fetch_stall ( i_fetch_stall ),
- .i_rm_sel ( i_rm_sel ),
- .i_rds_sel ( i_rds_sel ),
- .i_rn_sel ( i_rn_sel ),
- .i_pc_wen ( pc_wen ),
- .i_reg_bank_wen ( reg_bank_wen ),
- .i_pc ( pc_nxt[25:2] ),
- .i_reg ( reg_write_nxt ),
- .i_mode_idec ( i_status_bits_mode ),
- .i_mode_exec ( status_bits_mode ),
-
- .i_status_bits_flags ( status_bits_flags ),
- .i_status_bits_irq_mask ( status_bits_irq_mask ),
- .i_status_bits_firq_mask ( status_bits_firq_mask ),
-
- // pre-encoded in decode stage to speed up long path
- .i_firq_not_user_mode ( i_firq_not_user_mode ),
-
- // use one-hot version for speed, combine with i_user_mode_regs_store
- .i_mode_rds_exec ( status_bits_mode_rds_oh ),
-
- .i_user_mode_regs_load ( i_user_mode_regs_load ),
- .o_rm ( rm ),
- .o_rs ( rs ),
- .o_rd ( rd ),
- .o_rn ( rn ),
- .o_pc ( pc )
-);
-
-// ========================================================
-// Debug - non-synthesizable code
-// ========================================================
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_fetch.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_fetch.v
deleted file mode 100644
index 93c8227..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_fetch.v
+++ /dev/null
@@ -1,331 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Fetch - Instantiates the fetch stage sub-modules of //
-// the Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Instantiates the Cache and Wishbone I/F //
-// Also contains a little bit of logic to decode memory //
-// accesses to decide if they are cached or not //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_fetch
-(
-input i_clk,
-
-input [31:0] i_address,
-input i_address_valid,
-input [31:0] i_address_nxt, // un-registered version of address to the cache rams
-input [31:0] i_write_data,
-input i_write_enable,
-output [31:0] o_read_data,
-input i_priviledged,
-input i_exclusive, // high for read part of swap access
-input [3:0] i_byte_enable,
-input i_data_access, // high for data petch, low for instruction fetch
-input i_cache_enable, // cache enable
-input i_cache_flush, // cache flush
-input [31:0] i_cacheable_area, // each bit corresponds to 2MB address space
-input i_system_rdy,
-output o_fetch_stall, // when this is asserted all registers
- // in all 3 pipeline stages are held
- // at their current values
-
-// Wishbone Master I/F
-output [31:0] o_wb_adr,
-output [3:0] o_wb_sel,
-output o_wb_we,
-input [31:0] i_wb_dat,
-output [31:0] o_wb_dat,
-output o_wb_cyc,
-output o_wb_stb,
-input i_wb_ack,
-input i_wb_err
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Memory configuration and Wishbone address decoding //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// This module provides a set of functions that are used to //
-// decode memory addresses so other modules know if an address //
-// is for example in main memory, or boot memory, or a UART //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// e.g. 24 for 32MBytes, 26 for 128MBytes
-localparam MAIN_MSB = 26;
-
-// e.g. 13 for 4k words
-localparam BOOT_MSB = 13;
-
-localparam MAIN_BASE = 32'h0000_0000; /* Main Memory */
-localparam BOOT_BASE = 32'h0000_0000; /* Cachable Boot Memory */
-localparam AMBER_TM_BASE = 16'h1300; /* Timers Module */
-localparam AMBER_IC_BASE = 16'h1400; /* Interrupt Controller */
-localparam AMBER_UART0_BASE = 16'h1600; /* UART 0 */
-localparam AMBER_UART1_BASE = 16'h1700; /* UART 1 */
-localparam ETHMAC_BASE = 16'h2000; /* Ethernet MAC */
-localparam HIBOOT_BASE = 32'h2800_0000; /* Uncachable Boot Memory */
-localparam TEST_BASE = 16'hf000; /* Test Module */
-
-
-
-function in_loboot_mem;
- input [31:0] address;
-begin
-in_loboot_mem = (address >= BOOT_BASE &&
- address < (BOOT_BASE + 2**(BOOT_MSB+1)-1));
-end
-endfunction
-
-
-function in_hiboot_mem;
- input [31:0] address;
-begin
-in_hiboot_mem = (address[31:BOOT_MSB+1] == HIBOOT_BASE[31:BOOT_MSB+1]);
-end
-endfunction
-
-
-function in_boot_mem;
- input [31:0] address;
-begin
-in_boot_mem = in_loboot_mem(address) || in_hiboot_mem(address);
-end
-endfunction
-
-
-function in_main_mem;
- input [31:0] address;
-begin
-in_main_mem = (address >= MAIN_BASE &&
- address < (MAIN_BASE + 2**(MAIN_MSB+1)-1)) &&
- !in_boot_mem ( address );
-end
-endfunction
-
-
-// UART 0 address space
-function in_uart0;
- input [31:0] address;
-begin
- in_uart0 = address [31:16] == AMBER_UART0_BASE;
-end
-endfunction
-
-
-// UART 1 address space
-function in_uart1;
- input [31:0] address;
-begin
- in_uart1 = address [31:16] == AMBER_UART1_BASE;
-end
-endfunction
-
-
-// Interrupt Controller address space
-function in_ic;
- input [31:0] address;
-begin
- in_ic = address [31:16] == AMBER_IC_BASE;
-end
-endfunction
-
-
-// Timer Module address space
-function in_tm;
- input [31:0] address;
-begin
- in_tm = address [31:16] == AMBER_TM_BASE;
-end
-endfunction
-
-
-// Test module
-function in_test;
- input [31:0] address;
-begin
- in_test = address [31:16] == TEST_BASE;
-end
-endfunction
-
-
-// Ethernet MAC
-function in_ethmac;
- input [31:0] address;
-begin
- in_ethmac = address [31:16] == ETHMAC_BASE;
-end
-endfunction
-
-
-// Used in fetch.v and l2cache.v to allow accesses to these addresses
-// to be cached
-function in_cachable_mem;
- input [31:0] address;
-begin
- in_cachable_mem = in_loboot_mem ( address ) ||
- in_main_mem ( address ) ;
-end
-endfunction
-
-
-wire cache_stall;
-wire wb_stall;
-wire [31:0] cache_read_data;
-wire sel_cache;
-wire sel_wb;
-wire cache_wb_req;
-wire address_cachable;
-
-// ======================================
-// Memory Decode
-// ======================================
-assign address_cachable = in_cachable_mem( i_address ) && i_cacheable_area[i_address[25:21]];
-
-assign sel_cache = address_cachable && i_address_valid && i_cache_enable && !i_exclusive;
-
-// Don't start wishbone transfers when the cache is stalling the core
-// The cache stalls the core during its initialization sequence
-assign sel_wb = !sel_cache && i_address_valid && !(cache_stall);
-
-// Return read data either from the wishbone bus or the cache
-assign o_read_data = sel_cache ? cache_read_data :
- sel_wb ? i_wb_dat :
- 32'hffeeddcc ;
-
-// Stall the instruction decode and execute stages of the core
-// when the fetch stage needs more than 1 cycle to return the requested
-// read data
-assign o_fetch_stall = !i_system_rdy || wb_stall || cache_stall;
-
-
-// ======================================
-// L1 Cache (Unified Instruction and Data)
-// ======================================
-a23_cache u_cache (
- .i_clk ( i_clk ),
-
- .i_select ( sel_cache ),
- .i_exclusive ( i_exclusive ),
- .i_write_data ( i_write_data ),
- .i_write_enable ( i_write_enable ),
- .i_address ( i_address ),
- .i_address_nxt ( i_address_nxt ),
- .i_byte_enable ( i_byte_enable ),
- .i_cache_enable ( i_cache_enable ),
- .i_cache_flush ( i_cache_flush ),
- .o_read_data ( cache_read_data ),
-
- .o_stall ( cache_stall ),
- .i_core_stall ( o_fetch_stall ),
- .o_wb_req ( cache_wb_req ),
- .i_wb_address ( o_wb_adr ),
- .i_wb_read_data ( i_wb_dat ),
- .i_wb_stall ( o_wb_stb & ~i_wb_ack )
-);
-
-
-
-// ======================================
-// Wishbone Master I/F
-// ======================================
-a23_wishbone u_wishbone (
- // CPU Side
- .i_clk ( i_clk ),
-
- // Core Accesses to Wishbone bus
- .i_select ( sel_wb ),
- .i_write_data ( i_write_data ),
- .i_write_enable ( i_write_enable ),
- .i_byte_enable ( i_byte_enable ),
- .i_data_access ( i_data_access ),
- .i_exclusive ( i_exclusive ),
- .i_address ( i_address ),
- .o_stall ( wb_stall ),
-
- // Cache Accesses to Wishbone bus
- // L1 Cache enable - used for hprot
- .i_cache_req ( cache_wb_req ),
-
- .o_wb_adr ( o_wb_adr ),
- .o_wb_sel ( o_wb_sel ),
- .o_wb_we ( o_wb_we ),
- .i_wb_dat ( i_wb_dat ),
- .o_wb_dat ( o_wb_dat ),
- .o_wb_cyc ( o_wb_cyc ),
- .o_wb_stb ( o_wb_stb ),
- .i_wb_ack ( i_wb_ack ),
- .i_wb_err ( i_wb_err )
-);
-
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_functions.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_functions.v
deleted file mode 100644
index b4d9081..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_functions.v
+++ /dev/null
@@ -1,174 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Functions for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Functions used in more than one module //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// ========================================================
-// PC Filter - Remove the status bits
-// ========================================================
-function [31:0] pcf;
-input [31:0] pc_reg;
- begin
- pcf = {6'd0, pc_reg[25:2], 2'd0};
- end
-endfunction
-
-
-// ========================================================
-// 4-bit to 16-bit 1-hot decode
-// ========================================================
-function [14:0] decode;
-input [3:0] reg_sel;
-begin
-case ( reg_sel )
- 4'h0: decode = 15'h0001;
- 4'h1: decode = 15'h0002;
- 4'h2: decode = 15'h0004;
- 4'h3: decode = 15'h0008;
- 4'h4: decode = 15'h0010;
- 4'h5: decode = 15'h0020;
- 4'h6: decode = 15'h0040;
- 4'h7: decode = 15'h0080;
- 4'h8: decode = 15'h0100;
- 4'h9: decode = 15'h0200;
- 4'ha: decode = 15'h0400;
- 4'hb: decode = 15'h0800;
- 4'hc: decode = 15'h1000;
- 4'hd: decode = 15'h2000;
- 4'he: decode = 15'h4000;
- default: decode = 15'h0000;
-endcase
-end
-endfunction
-
-
-// ========================================================
-// Convert Stats Bits Mode to one-hot encoded version
-// ========================================================
-function [3:0] oh_status_bits_mode;
-input [1:0] fn_status_bits_mode;
-begin
-oh_status_bits_mode =
- fn_status_bits_mode == SVC ? 1'd1 << OH_SVC :
- fn_status_bits_mode == IRQ ? 1'd1 << OH_IRQ :
- fn_status_bits_mode == FIRQ ? 1'd1 << OH_FIRQ :
- 1'd1 << OH_USR ;
-end
-endfunction
-
-// ========================================================
-// Convert mode into ascii name
-// ========================================================
-function [(14*8)-1:0] mode_name;
-input [4:0] mode;
-begin
-
-mode_name = mode == USR ? "User " :
- mode == SVC ? "Supervisor " :
- mode == IRQ ? "Interrupt " :
- mode == FIRQ ? "Fast Interrupt" :
- "UNKNOWN " ;
-end
-endfunction
-
-
-// ========================================================
-// Conditional Execution Function
-// ========================================================
-// EQ Z set
-// NE Z clear
-// CS C set
-// CC C clear
-// MI N set
-// PL N clear
-// VS V set
-// VC V clear
-// HI C set and Z clear
-// LS C clear or Z set
-// GE N == V
-// LT N != V
-// GT Z == 0,N == V
-// LE Z == 1 or N != V
-// AL Always (unconditional)
-// NV Never
-
-function conditional_execute;
-input [3:0] condition;
-input [3:0] flags;
-begin
-conditional_execute
- = ( condition == AL ) ||
- ( condition == EQ && flags[2] ) ||
- ( condition == NE && !flags[2] ) ||
- ( condition == CS && flags[1] ) ||
- ( condition == CC && !flags[1] ) ||
- ( condition == MI && flags[3] ) ||
- ( condition == PL && !flags[3] ) ||
- ( condition == VS && flags[0] ) ||
- ( condition == VC && !flags[0] ) ||
-
- ( condition == HI && flags[1] && !flags[2] ) ||
- ( condition == LS && (!flags[1] || flags[2]) ) ||
-
- ( condition == GE && flags[3] == flags[0] ) ||
- ( condition == LT && flags[3] != flags[0] ) ||
-
- ( condition == GT && !flags[2] && flags[3] == flags[0] ) ||
- ( condition == LE && (flags[2] || flags[3] != flags[0])) ;
-
-end
-endfunction
-
-
-// ========================================================
-// Log 2
-// ========================================================
-
-function [31:0] log2;
-input [31:0] num;
-integer i;
-integer out;
-begin
- out = 32'd0;
- for (i=0; i<30; i=i+1)
- if ((2**i > num) && (out == 0))
- out = i-1;
- log2 = out;
-end
-endfunction
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_localparams.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_localparams.v
deleted file mode 100644
index 33c8845..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_localparams.v
+++ /dev/null
@@ -1,117 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_multiply.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_multiply.v
deleted file mode 100644
index c6922ed..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_multiply.v
+++ /dev/null
@@ -1,160 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Multiplication Module for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// 64-bit Booth signed or unsigned multiply and //
-// multiply-accumulate supported. It takes about 38 clock //
-// cycles to complete an operation. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-
-// bit 0 go, bit 1 accumulate
-// Command:
-// 4'b01 : MUL - 32 bit multiplication
-// 4'b11 : MLA - 32 bit multiply and accumulate
-//
-// 34-bit Booth adder
-// The adder needs to be 34 bit to deal with signed and unsigned 32-bit
-// multiplication inputs. This adds 1 extra bit. Then to deal with the
-// case of two max negative numbers another bit is required.
-//
-
-module a23_multiply (
-input i_clk,
-input i_fetch_stall,
-
-input [31:0] i_a_in, // Rds
-input [31:0] i_b_in, // Rm
-input [1:0] i_function,
-input i_execute,
-
-output [31:0] o_out,
-output [1:0] o_flags, // [1] = N, [0] = Z
-output reg o_done = 'd0 // goes high 2 cycles before completion
-);
-
-
-wire enable;
-wire accumulate;
-wire [33:0] multiplier;
-wire [33:0] multiplier_bar;
-wire [33:0] sum;
-wire [33:0] sum34_b;
-
-reg [5:0] count = 'd0;
-reg [5:0] count_nxt;
-reg [67:0] product = 'd0;
-reg [67:0] product_nxt;
-reg [1:0] flags_nxt;
-wire [32:0] sum_acc1; // the MSB is the carry out for the upper 32 bit addition
-
-
-assign enable = i_function[0];
-assign accumulate = i_function[1];
-
-assign multiplier = { 2'd0, i_a_in} ;
-assign multiplier_bar = ~{ 2'd0, i_a_in} + 34'd1 ;
-
-assign sum34_b = product[1:0] == 2'b01 ? multiplier :
- product[1:0] == 2'b10 ? multiplier_bar :
- 34'd0 ;
-
-
-// Use DSP modules from Xilinx Spartan6 FPGA devices
-
- // -----------------------------------
- // 34-bit adder - booth multiplication
- // -----------------------------------
- assign sum = product[67:34] + sum34_b;
-
- // ------------------------------------
- // 33-bit adder - accumulate operations
- // ------------------------------------
- assign sum_acc1 = {1'd0, product[32:1]} + {1'd0, i_a_in};
-
-
-
-always @*
- begin
- // Defaults
- count_nxt = count;
- product_nxt = product;
-
- // update Negative and Zero flags
- // Use registered value of product so this adds an extra cycle
- // but this avoids having the 64-bit zero comparator on the
- // main adder path
- flags_nxt = { product[32], product[32:1] == 32'd0 };
-
-
- if ( count == 6'd0 )
- product_nxt = {33'd0, 1'd0, i_b_in, 1'd0 } ;
- else if ( count <= 6'd33 )
- product_nxt = { sum[33], sum, product[33:1]} ;
- else if ( count == 6'd34 && accumulate )
- begin
- // Note that bit 0 is not part of the product. It is used during the booth
- // multiplication algorithm
- product_nxt = { product[64:33], sum_acc1[31:0], 1'd0}; // Accumulate
- end
-
- // Multiplication state counter
- if (count == 6'd0) // start
- count_nxt = enable ? 6'd1 : 6'd0;
- else if ((count == 6'd34 && !accumulate) || // MUL
- (count == 6'd35 && accumulate) ) // MLA
- count_nxt = 6'd0;
- else
- count_nxt = count + 1'd1;
- end
-
-
-always @ ( posedge i_clk )
- if ( !i_fetch_stall )
- begin
- count <= i_execute ? count_nxt : count;
- product <= i_execute ? product_nxt : product;
- o_done <= i_execute ? count == 6'd31 : o_done;
- end
-
-// Outputs
-assign o_out = product[32:1];
-assign o_flags = flags_nxt;
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_ram_register_bank.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_ram_register_bank.v
deleted file mode 100644
index b5c97ac..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_ram_register_bank.v
+++ /dev/null
@@ -1,615 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// RAM-based register Bank for Amber Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains 37 32-bit registers, 16 of which are visible //
-// ina any one operating mode. //
-// The block is designed using syncronous RAM primitive, //
-// and fits well into an FPGA design //
-// //
-// Author(s): //
-// - Dmitry Tarnyagin, dmitry.tarnyagin@lockless.no //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-module a23_ram_register_bank (
-
-input i_clk,
-input i_fetch_stall,
-
-input [1:0] i_mode_exec, // registered cpu mode from execution stage
-input [1:0] i_mode_exec_nxt, // 1 periods delayed from i_mode_idec
- // Used for register reads
-input [1:0] i_mode_rds_exec, // Use raw version in this implementation,
- // includes i_user_mode_regs_store
-input i_user_mode_regs_load,
-input [3:0] i_rm_sel,
-input [3:0] i_rds_sel,
-input [3:0] i_rn_sel,
-
-input i_pc_wen,
-input [3:0] i_reg_bank_wsel,
-
-input [23:0] i_pc, // program counter [25:2]
-input [31:0] i_reg,
-
-input [3:0] i_status_bits_flags,
-input i_status_bits_irq_mask,
-input i_status_bits_firq_mask,
-
-output [31:0] o_rm,
-output [31:0] o_rs,
-output [31:0] o_rd,
-output [31:0] o_rn,
-output [31:0] o_pc
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-//////////////////////////////////////////////////////////////////
-// //
-// Functions for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Functions used in more than one module //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// ========================================================
-// PC Filter - Remove the status bits
-// ========================================================
-function [31:0] pcf;
-input [31:0] pc_reg;
- begin
- pcf = {6'd0, pc_reg[25:2], 2'd0};
- end
-endfunction
-
-
-// ========================================================
-// 4-bit to 16-bit 1-hot decode
-// ========================================================
-function [14:0] decode;
-input [3:0] reg_sel;
-begin
-case ( reg_sel )
- 4'h0: decode = 15'h0001;
- 4'h1: decode = 15'h0002;
- 4'h2: decode = 15'h0004;
- 4'h3: decode = 15'h0008;
- 4'h4: decode = 15'h0010;
- 4'h5: decode = 15'h0020;
- 4'h6: decode = 15'h0040;
- 4'h7: decode = 15'h0080;
- 4'h8: decode = 15'h0100;
- 4'h9: decode = 15'h0200;
- 4'ha: decode = 15'h0400;
- 4'hb: decode = 15'h0800;
- 4'hc: decode = 15'h1000;
- 4'hd: decode = 15'h2000;
- 4'he: decode = 15'h4000;
- default: decode = 15'h0000;
-endcase
-end
-endfunction
-
-
-// ========================================================
-// Convert Stats Bits Mode to one-hot encoded version
-// ========================================================
-function [3:0] oh_status_bits_mode;
-input [1:0] fn_status_bits_mode;
-begin
-oh_status_bits_mode =
- fn_status_bits_mode == SVC ? 1'd1 << OH_SVC :
- fn_status_bits_mode == IRQ ? 1'd1 << OH_IRQ :
- fn_status_bits_mode == FIRQ ? 1'd1 << OH_FIRQ :
- 1'd1 << OH_USR ;
-end
-endfunction
-
-// ========================================================
-// Convert mode into ascii name
-// ========================================================
-function [(14*8)-1:0] mode_name;
-input [4:0] mode;
-begin
-
-mode_name = mode == USR ? "User " :
- mode == SVC ? "Supervisor " :
- mode == IRQ ? "Interrupt " :
- mode == FIRQ ? "Fast Interrupt" :
- "UNKNOWN " ;
-end
-endfunction
-
-
-// ========================================================
-// Conditional Execution Function
-// ========================================================
-// EQ Z set
-// NE Z clear
-// CS C set
-// CC C clear
-// MI N set
-// PL N clear
-// VS V set
-// VC V clear
-// HI C set and Z clear
-// LS C clear or Z set
-// GE N == V
-// LT N != V
-// GT Z == 0,N == V
-// LE Z == 1 or N != V
-// AL Always (unconditional)
-// NV Never
-
-function conditional_execute;
-input [3:0] condition;
-input [3:0] flags;
-begin
-conditional_execute
- = ( condition == AL ) ||
- ( condition == EQ && flags[2] ) ||
- ( condition == NE && !flags[2] ) ||
- ( condition == CS && flags[1] ) ||
- ( condition == CC && !flags[1] ) ||
- ( condition == MI && flags[3] ) ||
- ( condition == PL && !flags[3] ) ||
- ( condition == VS && flags[0] ) ||
- ( condition == VC && !flags[0] ) ||
-
- ( condition == HI && flags[1] && !flags[2] ) ||
- ( condition == LS && (!flags[1] || flags[2]) ) ||
-
- ( condition == GE && flags[3] == flags[0] ) ||
- ( condition == LT && flags[3] != flags[0] ) ||
-
- ( condition == GT && !flags[2] && flags[3] == flags[0] ) ||
- ( condition == LE && (flags[2] || flags[3] != flags[0])) ;
-
-end
-endfunction
-
-
-// ========================================================
-// Log 2
-// ========================================================
-
-function [31:0] log2;
-input [31:0] num;
-integer i;
-integer out;
-begin
- out = 32'd0;
- for (i=0; i<30; i=i+1)
- if ((2**i > num) && (out == 0))
- out = i-1;
- log2 = out;
-end
-endfunction
-
-wire [1:0] mode_idec;
-wire [1:0] mode_exec;
-wire [1:0] mode_rds;
-
-wire [4:0] rm_addr;
-wire [4:0] rds_addr;
-wire [4:0] rn_addr;
-wire [4:0] wr_addr;
-
-// Register pool in embedded ram memory
-reg [31:0] reg_ram_n[31:0];
-reg [31:0] reg_ram_m[31:0];
-reg [31:0] reg_ram_ds[31:0];
-
-wire [31:0] rds_out;
-wire [31:0] rm_out;
-wire [31:0] rn_out;
-
-// Synchronous ram input buffering
-reg [4:0] rm_addr_reg;
-reg [4:0] rds_addr_reg;
-reg [4:0] rn_addr_reg;
-
-// User Mode Registers
-reg [23:0] r15 = 24'hc0_ffee;
-
-wire [31:0] r15_out_rm;
-wire [31:0] r15_out_rm_nxt;
-wire [31:0] r15_out_rn;
-
-// r15 selectors
-reg rn_15 = 1'b0;
-reg rm_15 = 1'b0;
-reg rds_15 = 1'b0;
-
-// Write Enables from execute stage
-assign mode_idec = i_mode_exec_nxt & ~{2{i_user_mode_regs_load}};
-assign wr_addr = reg_addr(mode_idec, i_reg_bank_wsel);
-
-// Read Enables from stage 1 (fetch)
-assign mode_exec = i_mode_exec_nxt;
-assign rm_addr = reg_addr(mode_exec, i_rm_sel);
-assign rn_addr = reg_addr(mode_exec, i_rn_sel);
-
-// Rds
-assign mode_rds = i_mode_rds_exec;
-assign rds_addr = reg_addr(mode_rds, i_rds_sel);
-
-
-// ========================================================
-// r15 Register Read based on Mode
-// ========================================================
-assign r15_out_rm = { i_status_bits_flags,
- i_status_bits_irq_mask,
- i_status_bits_firq_mask,
- r15,
- i_mode_exec};
-
-assign r15_out_rm_nxt = { i_status_bits_flags,
- i_status_bits_irq_mask,
- i_status_bits_firq_mask,
- i_pc,
- i_mode_exec};
-
-assign r15_out_rn = {6'd0, r15, 2'd0};
-
-
-// ========================================================
-// Program Counter out
-// ========================================================
-assign o_pc = r15_out_rn;
-
-// ========================================================
-// Rm Selector
-// ========================================================
-assign rm_out = reg_ram_m[rm_addr_reg];
-
-assign o_rm = rm_15 ? r15_out_rm :
- rm_out;
-
-// ========================================================
-// Rds Selector
-// ========================================================
-assign rds_out = reg_ram_ds[rds_addr_reg];
-
-assign o_rs = rds_15 ? r15_out_rn :
- rds_out;
-
-// ========================================================
-// Rd Selector
-// ========================================================
-assign o_rd = rds_15 ? r15_out_rm_nxt :
- rds_out;
-
-// ========================================================
-// Rn Selector
-// ========================================================
-assign rn_out = reg_ram_n[rn_addr_reg];
-
-assign o_rn = rn_15 ? r15_out_rn :
- rn_out;
-// ========================================================
-// Register Update
-// ========================================================
-always @ ( posedge i_clk )
- if (!i_fetch_stall)
- begin
-
- // Register write.
- // Actually the code is synthesed as a syncronous ram
- // with an additional pass-through multiplexor for
- // read-when-write handling.
- reg_ram_n[wr_addr] <= i_reg;
- reg_ram_m[wr_addr] <= i_reg;
- reg_ram_ds[wr_addr] <= i_reg;
- r15 <= i_pc_wen ? i_pc : r15;
-
- // The latching is actually implemented in a hard block.
- rn_addr_reg <= rn_addr;
- rm_addr_reg <= rm_addr;
- rds_addr_reg <= rds_addr;
-
- rn_15 <= i_rn_sel == 4'hF;
- rm_15 <= i_rm_sel == 4'hF;
- rds_15 <= i_rds_sel == 4'hF;
- end
-
-// ========================================================
-// Register mapping:
-// ========================================================
-// 0xxxx : r0 - r14
-// 10xxx : r8_firq - r14_firq
-// 110xx : r13_irq - r14_irq
-// 111xx : r13_svc - r14_svc
-
-function [4:0] reg_addr;
-input [1:0] mode;
-input [3:0] sel;
-begin
- casez ({mode, sel}) // synthesis full_case parallel_case
- 6'b??0???: reg_addr = {1'b0, sel}; // r0 - r7
- 6'b1?1100: reg_addr = {1'b0, sel}; // irq and svc r12
- 6'b001???: reg_addr = {1'b0, sel}; // user r8 - r14
- 6'b011???: reg_addr = {2'b10, sel[2:0]}; // fiq r8-r14
- 6'b1?10??: reg_addr = {1'b0, sel}; // irq and svc r8-r11
- 6'b101101: reg_addr = {3'b110, sel[1:0]}; // irq r13
- 6'b101110: reg_addr = {3'b110, sel[1:0]}; // irq r14
- 6'b101111: reg_addr = {3'b110, sel[1:0]}; // irq r15, just to make the case full
- 6'b111101: reg_addr = {3'b111, sel[1:0]}; // svc r13
- 6'b111110: reg_addr = {3'b111, sel[1:0]}; // svc r14
- 6'b111111: reg_addr = {3'b111, sel[1:0]}; // svc r15, just to make the case full
- endcase
-end
-endfunction
-
-// `ifdef A23_SIMULATION
-// synthesis translate_off
-// To be used as probes...
-wire [31:0] r0;
-wire [31:0] r1;
-wire [31:0] r2;
-wire [31:0] r3;
-wire [31:0] r4;
-wire [31:0] r5;
-wire [31:0] r6;
-wire [31:0] r7;
-wire [31:0] r8;
-wire [31:0] r9;
-wire [31:0] r10;
-wire [31:0] r11;
-wire [31:0] r12;
-wire [31:0] r13;
-wire [31:0] r14;
-wire [31:0] r13_svc;
-wire [31:0] r14_svc;
-wire [31:0] r13_irq;
-wire [31:0] r14_irq;
-wire [31:0] r8_firq;
-wire [31:0] r9_firq;
-wire [31:0] r10_firq;
-wire [31:0] r11_firq;
-wire [31:0] r12_firq;
-wire [31:0] r13_firq;
-wire [31:0] r14_firq;
-wire [31:0] r0_out;
-wire [31:0] r1_out;
-wire [31:0] r2_out;
-wire [31:0] r3_out;
-wire [31:0] r4_out;
-wire [31:0] r5_out;
-wire [31:0] r6_out;
-wire [31:0] r7_out;
-wire [31:0] r8_out;
-wire [31:0] r9_out;
-wire [31:0] r10_out;
-wire [31:0] r11_out;
-wire [31:0] r12_out;
-wire [31:0] r13_out;
-wire [31:0] r14_out;
-
-assign r0 = reg_ram_m[ 0];
-assign r1 = reg_ram_m[ 1];
-assign r2 = reg_ram_m[ 2];
-assign r3 = reg_ram_m[ 3];
-assign r4 = reg_ram_m[ 4];
-assign r5 = reg_ram_m[ 5];
-assign r6 = reg_ram_m[ 6];
-assign r7 = reg_ram_m[ 7];
-assign r8 = reg_ram_m[ 8];
-assign r9 = reg_ram_m[ 9];
-assign r10 = reg_ram_m[10];
-assign r11 = reg_ram_m[11];
-assign r12 = reg_ram_m[12];
-assign r13 = reg_ram_m[13];
-assign r14 = reg_ram_m[14];
-assign r13_svc = reg_ram_m[29];
-assign r14_svc = reg_ram_m[30];
-assign r13_irq = reg_ram_m[25];
-assign r14_irq = reg_ram_m[26];
-assign r8_firq = reg_ram_m[16];
-assign r9_firq = reg_ram_m[17];
-assign r10_firq = reg_ram_m[18];
-assign r11_firq = reg_ram_m[19];
-assign r12_firq = reg_ram_m[20];
-assign r13_firq = reg_ram_m[21];
-assign r14_firq = reg_ram_m[22];
-assign r0_out = reg_ram_m[reg_addr(mode_exec, 0)];
-assign r1_out = reg_ram_m[reg_addr(mode_exec, 1)];
-assign r2_out = reg_ram_m[reg_addr(mode_exec, 2)];
-assign r3_out = reg_ram_m[reg_addr(mode_exec, 3)];
-assign r4_out = reg_ram_m[reg_addr(mode_exec, 4)];
-assign r5_out = reg_ram_m[reg_addr(mode_exec, 5)];
-assign r6_out = reg_ram_m[reg_addr(mode_exec, 6)];
-assign r7_out = reg_ram_m[reg_addr(mode_exec, 7)];
-assign r8_out = reg_ram_m[reg_addr(mode_exec, 8)];
-assign r9_out = reg_ram_m[reg_addr(mode_exec, 9)];
-assign r10_out = reg_ram_m[reg_addr(mode_exec, 10)];
-assign r11_out = reg_ram_m[reg_addr(mode_exec, 11)];
-assign r12_out = reg_ram_m[reg_addr(mode_exec, 12)];
-assign r13_out = reg_ram_m[reg_addr(mode_exec, 13)];
-assign r14_out = reg_ram_m[reg_addr(mode_exec, 14)];
-// synthesis translate_on
-// `endif
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_register_bank.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_register_bank.v
deleted file mode 100644
index 8b2779f..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_register_bank.v
+++ /dev/null
@@ -1,663 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Register Bank for Amber Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains 37 32-bit registers, 16 of which are visible //
-// ina any one operating mode. Registers use real flipflops, //
-// rather than SRAM. This makes sense for an FPGA //
-// implementation, where flipflops are plentiful. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-module a23_register_bank (
-
-input i_clk,
-input i_fetch_stall,
-
-input [1:0] i_mode_idec, // user, supervisor, irq_idec, firq_idec etc.
- // Used for register writes
-input [1:0] i_mode_exec, // 1 periods delayed from i_mode_idec
- // Used for register reads
-input [3:0] i_mode_rds_exec, // Use one-hot version specifically for rds,
- // includes i_user_mode_regs_store
-input i_user_mode_regs_load,
-input i_firq_not_user_mode,
-input [3:0] i_rm_sel,
-input [3:0] i_rds_sel,
-input [3:0] i_rn_sel,
-
-input i_pc_wen,
-input [14:0] i_reg_bank_wen,
-
-input [23:0] i_pc, // program counter [25:2]
-input [31:0] i_reg,
-
-input [3:0] i_status_bits_flags,
-input i_status_bits_irq_mask,
-input i_status_bits_firq_mask,
-
-output [31:0] o_rm,
-output reg [31:0] o_rs,
-output reg [31:0] o_rd,
-output [31:0] o_rn,
-output [31:0] o_pc
-
-);
-
-//////////////////////////////////////////////////////////////////
-// //
-// Parameters file for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Holds general parameters that are used is several core //
-// modules //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// Instruction Types
-localparam [3:0] REGOP = 4'h0, // Data processing
- MULT = 4'h1, // Multiply
- SWAP = 4'h2, // Single Data Swap
- TRANS = 4'h3, // Single data transfer
- MTRANS = 4'h4, // Multi-word data transfer
- BRANCH = 4'h5, // Branch
- CODTRANS = 4'h6, // Co-processor data transfer
- COREGOP = 4'h7, // Co-processor data operation
- CORTRANS = 4'h8, // Co-processor register transfer
- SWI = 4'h9; // software interrupt
-
-
-// Opcodes
-localparam [3:0] AND = 4'h0, // Logical AND
- EOR = 4'h1, // Logical Exclusive OR
- SUB = 4'h2, // Subtract
- RSB = 4'h3, // Reverse Subtract
- ADD = 4'h4, // Add
- ADC = 4'h5, // Add with Carry
- SBC = 4'h6, // Subtract with Carry
- RSC = 4'h7, // Reverse Subtract with Carry
- TST = 4'h8, // Test (using AND operator)
- TEQ = 4'h9, // Test Equivalence (using EOR operator)
- CMP = 4'ha, // Compare (using Subtract operator)
- CMN = 4'hb, // Compare Negated
- ORR = 4'hc, // Logical OR
- MOV = 4'hd, // Move
- BIC = 4'he, // Bit Clear (using AND & NOT operators)
- MVN = 4'hf; // Move NOT
-
-// Condition Encoding
-localparam [3:0] EQ = 4'h0, // Equal / Z set
- NE = 4'h1, // Not equal / Z clear
- CS = 4'h2, // Carry set / C set
- CC = 4'h3, // Carry clear / C clear
- MI = 4'h4, // Minus / N set
- PL = 4'h5, // Plus / N clear
- VS = 4'h6, // Overflow / V set
- VC = 4'h7, // No overflow / V clear
- HI = 4'h8, // Unsigned higher / C set and Z clear
- LS = 4'h9, // Unsigned lower
- // or same / C clear or Z set
- GE = 4'ha, // Signed greater
- // than or equal / N == V
- LT = 4'hb, // Signed less than / N != V
- GT = 4'hc, // Signed greater
- // than / Z == 0, N == V
- LE = 4'hd, // Signed less than
- // or equal / Z == 1, N != V
- AL = 4'he, // Always
- NV = 4'hf; // Never
-
-// Any instruction with a condition field of 0b1111 is UNPREDICTABLE.
-
-// Shift Types
-localparam [1:0] LSL = 2'h0,
- LSR = 2'h1,
- ASR = 2'h2,
- RRX = 2'h3,
- ROR = 2'h3;
-
-// Modes
-localparam [1:0] SVC = 2'b11, // Supervisor
- IRQ = 2'b10, // Interrupt
- FIRQ = 2'b01, // Fast Interrupt
- USR = 2'b00; // User
-
-// One-Hot Mode encodings
-localparam [5:0] OH_USR = 0,
- OH_IRQ = 1,
- OH_FIRQ = 2,
- OH_SVC = 3;
-
-
-//////////////////////////////////////////////////////////////////
-// //
-// Functions for Amber 2 Core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Functions used in more than one module //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-// ========================================================
-// PC Filter - Remove the status bits
-// ========================================================
-function [31:0] pcf;
-input [31:0] pc_reg;
- begin
- pcf = {6'd0, pc_reg[25:2], 2'd0};
- end
-endfunction
-
-
-// ========================================================
-// 4-bit to 16-bit 1-hot decode
-// ========================================================
-function [14:0] decode;
-input [3:0] reg_sel;
-begin
-case ( reg_sel )
- 4'h0: decode = 15'h0001;
- 4'h1: decode = 15'h0002;
- 4'h2: decode = 15'h0004;
- 4'h3: decode = 15'h0008;
- 4'h4: decode = 15'h0010;
- 4'h5: decode = 15'h0020;
- 4'h6: decode = 15'h0040;
- 4'h7: decode = 15'h0080;
- 4'h8: decode = 15'h0100;
- 4'h9: decode = 15'h0200;
- 4'ha: decode = 15'h0400;
- 4'hb: decode = 15'h0800;
- 4'hc: decode = 15'h1000;
- 4'hd: decode = 15'h2000;
- 4'he: decode = 15'h4000;
- default: decode = 15'h0000;
-endcase
-end
-endfunction
-
-
-// ========================================================
-// Convert Stats Bits Mode to one-hot encoded version
-// ========================================================
-function [3:0] oh_status_bits_mode;
-input [1:0] fn_status_bits_mode;
-begin
-oh_status_bits_mode =
- fn_status_bits_mode == SVC ? 1'd1 << OH_SVC :
- fn_status_bits_mode == IRQ ? 1'd1 << OH_IRQ :
- fn_status_bits_mode == FIRQ ? 1'd1 << OH_FIRQ :
- 1'd1 << OH_USR ;
-end
-endfunction
-
-// ========================================================
-// Convert mode into ascii name
-// ========================================================
-function [(14*8)-1:0] mode_name;
-input [4:0] mode;
-begin
-
-mode_name = mode == USR ? "User " :
- mode == SVC ? "Supervisor " :
- mode == IRQ ? "Interrupt " :
- mode == FIRQ ? "Fast Interrupt" :
- "UNKNOWN " ;
-end
-endfunction
-
-
-// ========================================================
-// Conditional Execution Function
-// ========================================================
-// EQ Z set
-// NE Z clear
-// CS C set
-// CC C clear
-// MI N set
-// PL N clear
-// VS V set
-// VC V clear
-// HI C set and Z clear
-// LS C clear or Z set
-// GE N == V
-// LT N != V
-// GT Z == 0,N == V
-// LE Z == 1 or N != V
-// AL Always (unconditional)
-// NV Never
-
-function conditional_execute;
-input [3:0] condition;
-input [3:0] flags;
-begin
-conditional_execute
- = ( condition == AL ) ||
- ( condition == EQ && flags[2] ) ||
- ( condition == NE && !flags[2] ) ||
- ( condition == CS && flags[1] ) ||
- ( condition == CC && !flags[1] ) ||
- ( condition == MI && flags[3] ) ||
- ( condition == PL && !flags[3] ) ||
- ( condition == VS && flags[0] ) ||
- ( condition == VC && !flags[0] ) ||
-
- ( condition == HI && flags[1] && !flags[2] ) ||
- ( condition == LS && (!flags[1] || flags[2]) ) ||
-
- ( condition == GE && flags[3] == flags[0] ) ||
- ( condition == LT && flags[3] != flags[0] ) ||
-
- ( condition == GT && !flags[2] && flags[3] == flags[0] ) ||
- ( condition == LE && (flags[2] || flags[3] != flags[0])) ;
-
-end
-endfunction
-
-
-// ========================================================
-// Log 2
-// ========================================================
-
-function [31:0] log2;
-input [31:0] num;
-integer i;
-integer out;
-begin
- out = 32'd0;
- for (i=0; i<30; i=i+1)
- if ((2**i > num) && (out == 0))
- out = i-1;
- log2 = out;
-end
-endfunction
-
-
-// User Mode Registers
-reg [31:0] r0 = 32'hdead_beef;
-reg [31:0] r1 = 32'hdead_beef;
-reg [31:0] r2 = 32'hdead_beef;
-reg [31:0] r3 = 32'hdead_beef;
-reg [31:0] r4 = 32'hdead_beef;
-reg [31:0] r5 = 32'hdead_beef;
-reg [31:0] r6 = 32'hdead_beef;
-reg [31:0] r7 = 32'hdead_beef;
-reg [31:0] r8 = 32'hdead_beef;
-reg [31:0] r9 = 32'hdead_beef;
-reg [31:0] r10 = 32'hdead_beef;
-reg [31:0] r11 = 32'hdead_beef;
-reg [31:0] r12 = 32'hdead_beef;
-reg [31:0] r13 = 32'hdead_beef;
-reg [31:0] r14 = 32'hdead_beef;
-reg [23:0] r15 = 24'hc0_ffee;
-
-wire [31:0] r0_out;
-wire [31:0] r1_out;
-wire [31:0] r2_out;
-wire [31:0] r3_out;
-wire [31:0] r4_out;
-wire [31:0] r5_out;
-wire [31:0] r6_out;
-wire [31:0] r7_out;
-wire [31:0] r8_out;
-wire [31:0] r9_out;
-wire [31:0] r10_out;
-wire [31:0] r11_out;
-wire [31:0] r12_out;
-wire [31:0] r13_out;
-wire [31:0] r14_out;
-wire [31:0] r15_out_rm;
-wire [31:0] r15_out_rm_nxt;
-wire [31:0] r15_out_rn;
-
-wire [31:0] r8_rds;
-wire [31:0] r9_rds;
-wire [31:0] r10_rds;
-wire [31:0] r11_rds;
-wire [31:0] r12_rds;
-wire [31:0] r13_rds;
-wire [31:0] r14_rds;
-
-// Supervisor Mode Registers
-reg [31:0] r13_svc = 32'hdead_beef;
-reg [31:0] r14_svc = 32'hdead_beef;
-
-// Interrupt Mode Registers
-reg [31:0] r13_irq = 32'hdead_beef;
-reg [31:0] r14_irq = 32'hdead_beef;
-
-// Fast Interrupt Mode Registers
-reg [31:0] r8_firq = 32'hdead_beef;
-reg [31:0] r9_firq = 32'hdead_beef;
-reg [31:0] r10_firq = 32'hdead_beef;
-reg [31:0] r11_firq = 32'hdead_beef;
-reg [31:0] r12_firq = 32'hdead_beef;
-reg [31:0] r13_firq = 32'hdead_beef;
-reg [31:0] r14_firq = 32'hdead_beef;
-
-wire usr_exec;
-wire svc_exec;
-wire irq_exec;
-wire firq_exec;
-
-wire usr_idec;
-wire svc_idec;
-wire irq_idec;
-wire firq_idec;
-
- // Write Enables from execute stage
-assign usr_idec = i_user_mode_regs_load || i_mode_idec == USR;
-assign svc_idec = !i_user_mode_regs_load && i_mode_idec == SVC;
-assign irq_idec = !i_user_mode_regs_load && i_mode_idec == IRQ;
-
-// pre-encoded in decode stage to speed up long path
-assign firq_idec = i_firq_not_user_mode;
-
- // Read Enables from stage 1 (fetch)
-assign usr_exec = i_mode_exec == USR;
-assign svc_exec = i_mode_exec == SVC;
-assign irq_exec = i_mode_exec == IRQ;
-assign firq_exec = i_mode_exec == FIRQ;
-
-
-// ========================================================
-// Register Update
-// ========================================================
-always @ ( posedge i_clk )
- if (!i_fetch_stall)
- begin
- r0 <= i_reg_bank_wen[0 ] ? i_reg : r0;
- r1 <= i_reg_bank_wen[1 ] ? i_reg : r1;
- r2 <= i_reg_bank_wen[2 ] ? i_reg : r2;
- r3 <= i_reg_bank_wen[3 ] ? i_reg : r3;
- r4 <= i_reg_bank_wen[4 ] ? i_reg : r4;
- r5 <= i_reg_bank_wen[5 ] ? i_reg : r5;
- r6 <= i_reg_bank_wen[6 ] ? i_reg : r6;
- r7 <= i_reg_bank_wen[7 ] ? i_reg : r7;
-
- r8 <= (i_reg_bank_wen[8 ] && !firq_idec) ? i_reg : r8;
- r9 <= (i_reg_bank_wen[9 ] && !firq_idec) ? i_reg : r9;
- r10 <= (i_reg_bank_wen[10] && !firq_idec) ? i_reg : r10;
- r11 <= (i_reg_bank_wen[11] && !firq_idec) ? i_reg : r11;
- r12 <= (i_reg_bank_wen[12] && !firq_idec) ? i_reg : r12;
-
- r8_firq <= (i_reg_bank_wen[8 ] && firq_idec) ? i_reg : r8_firq;
- r9_firq <= (i_reg_bank_wen[9 ] && firq_idec) ? i_reg : r9_firq;
- r10_firq <= (i_reg_bank_wen[10] && firq_idec) ? i_reg : r10_firq;
- r11_firq <= (i_reg_bank_wen[11] && firq_idec) ? i_reg : r11_firq;
- r12_firq <= (i_reg_bank_wen[12] && firq_idec) ? i_reg : r12_firq;
-
- r13 <= (i_reg_bank_wen[13] && usr_idec) ? i_reg : r13;
- r14 <= (i_reg_bank_wen[14] && usr_idec) ? i_reg : r14;
-
- r13_svc <= (i_reg_bank_wen[13] && svc_idec) ? i_reg : r13_svc;
- r14_svc <= (i_reg_bank_wen[14] && svc_idec) ? i_reg : r14_svc;
-
- r13_irq <= (i_reg_bank_wen[13] && irq_idec) ? i_reg : r13_irq;
- r14_irq <= (i_reg_bank_wen[14] && irq_idec) ? i_reg : r14_irq;
-
- r13_firq <= (i_reg_bank_wen[13] && firq_idec) ? i_reg : r13_firq;
- r14_firq <= (i_reg_bank_wen[14] && firq_idec) ? i_reg : r14_firq;
-
- r15 <= i_pc_wen ? i_pc : r15;
- end
-
-
-// ========================================================
-// Register Read based on Mode
-// ========================================================
-assign r0_out = r0;
-assign r1_out = r1;
-assign r2_out = r2;
-assign r3_out = r3;
-assign r4_out = r4;
-assign r5_out = r5;
-assign r6_out = r6;
-assign r7_out = r7;
-
-assign r8_out = firq_exec ? r8_firq : r8;
-assign r9_out = firq_exec ? r9_firq : r9;
-assign r10_out = firq_exec ? r10_firq : r10;
-assign r11_out = firq_exec ? r11_firq : r11;
-assign r12_out = firq_exec ? r12_firq : r12;
-
-assign r13_out = usr_exec ? r13 :
- svc_exec ? r13_svc :
- irq_exec ? r13_irq :
- r13_firq ;
-
-assign r14_out = usr_exec ? r14 :
- svc_exec ? r14_svc :
- irq_exec ? r14_irq :
- r14_firq ;
-
-
-assign r15_out_rm = { i_status_bits_flags,
- i_status_bits_irq_mask,
- i_status_bits_firq_mask,
- r15,
- i_mode_exec};
-
-assign r15_out_rm_nxt = { i_status_bits_flags,
- i_status_bits_irq_mask,
- i_status_bits_firq_mask,
- i_pc,
- i_mode_exec};
-
-assign r15_out_rn = {6'd0, r15, 2'd0};
-
-
-// rds outputs
-assign r8_rds = i_mode_rds_exec[OH_FIRQ] ? r8_firq : r8;
-assign r9_rds = i_mode_rds_exec[OH_FIRQ] ? r9_firq : r9;
-assign r10_rds = i_mode_rds_exec[OH_FIRQ] ? r10_firq : r10;
-assign r11_rds = i_mode_rds_exec[OH_FIRQ] ? r11_firq : r11;
-assign r12_rds = i_mode_rds_exec[OH_FIRQ] ? r12_firq : r12;
-
-assign r13_rds = i_mode_rds_exec[OH_USR] ? r13 :
- i_mode_rds_exec[OH_SVC] ? r13_svc :
- i_mode_rds_exec[OH_IRQ] ? r13_irq :
- r13_firq ;
-
-assign r14_rds = i_mode_rds_exec[OH_USR] ? r14 :
- i_mode_rds_exec[OH_SVC] ? r14_svc :
- i_mode_rds_exec[OH_IRQ] ? r14_irq :
- r14_firq ;
-
-// ========================================================
-// Program Counter out
-// ========================================================
-assign o_pc = r15_out_rn;
-
-// ========================================================
-// Rm Selector
-// ========================================================
-assign o_rm = i_rm_sel == 4'd0 ? r0_out :
- i_rm_sel == 4'd1 ? r1_out :
- i_rm_sel == 4'd2 ? r2_out :
- i_rm_sel == 4'd3 ? r3_out :
- i_rm_sel == 4'd4 ? r4_out :
- i_rm_sel == 4'd5 ? r5_out :
- i_rm_sel == 4'd6 ? r6_out :
- i_rm_sel == 4'd7 ? r7_out :
- i_rm_sel == 4'd8 ? r8_out :
- i_rm_sel == 4'd9 ? r9_out :
- i_rm_sel == 4'd10 ? r10_out :
- i_rm_sel == 4'd11 ? r11_out :
- i_rm_sel == 4'd12 ? r12_out :
- i_rm_sel == 4'd13 ? r13_out :
- i_rm_sel == 4'd14 ? r14_out :
- r15_out_rm ;
-
-
-
-
-// ========================================================
-// Rds Selector
-// ========================================================
-always @*
- case (i_rds_sel)
- 4'd0 : o_rs = r0_out ;
- 4'd1 : o_rs = r1_out ;
- 4'd2 : o_rs = r2_out ;
- 4'd3 : o_rs = r3_out ;
- 4'd4 : o_rs = r4_out ;
- 4'd5 : o_rs = r5_out ;
- 4'd6 : o_rs = r6_out ;
- 4'd7 : o_rs = r7_out ;
- 4'd8 : o_rs = r8_rds ;
- 4'd9 : o_rs = r9_rds ;
- 4'd10 : o_rs = r10_rds ;
- 4'd11 : o_rs = r11_rds ;
- 4'd12 : o_rs = r12_rds ;
- 4'd13 : o_rs = r13_rds ;
- 4'd14 : o_rs = r14_rds ;
- default: o_rs = r15_out_rn ;
- endcase
-
-
-
-// ========================================================
-// Rd Selector
-// ========================================================
-always @*
- case (i_rds_sel)
- 4'd0 : o_rd = r0_out ;
- 4'd1 : o_rd = r1_out ;
- 4'd2 : o_rd = r2_out ;
- 4'd3 : o_rd = r3_out ;
- 4'd4 : o_rd = r4_out ;
- 4'd5 : o_rd = r5_out ;
- 4'd6 : o_rd = r6_out ;
- 4'd7 : o_rd = r7_out ;
- 4'd8 : o_rd = r8_rds ;
- 4'd9 : o_rd = r9_rds ;
- 4'd10 : o_rd = r10_rds ;
- 4'd11 : o_rd = r11_rds ;
- 4'd12 : o_rd = r12_rds ;
- 4'd13 : o_rd = r13_rds ;
- 4'd14 : o_rd = r14_rds ;
- default: o_rd = r15_out_rm_nxt ;
- endcase
-
-
-// ========================================================
-// Rn Selector
-// ========================================================
-assign o_rn = i_rn_sel == 4'd0 ? r0_out :
- i_rn_sel == 4'd1 ? r1_out :
- i_rn_sel == 4'd2 ? r2_out :
- i_rn_sel == 4'd3 ? r3_out :
- i_rn_sel == 4'd4 ? r4_out :
- i_rn_sel == 4'd5 ? r5_out :
- i_rn_sel == 4'd6 ? r6_out :
- i_rn_sel == 4'd7 ? r7_out :
- i_rn_sel == 4'd8 ? r8_out :
- i_rn_sel == 4'd9 ? r9_out :
- i_rn_sel == 4'd10 ? r10_out :
- i_rn_sel == 4'd11 ? r11_out :
- i_rn_sel == 4'd12 ? r12_out :
- i_rn_sel == 4'd13 ? r13_out :
- i_rn_sel == 4'd14 ? r14_out :
- r15_out_rn ;
-
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_wishbone.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_wishbone.v
deleted file mode 100644
index 40560f4..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/a23_wishbone.v
+++ /dev/null
@@ -1,292 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Wishbone master interface for the Amber core //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Turns memory access requests from the execute stage and //
-// cache into wishbone bus cycles. For 4-word read requests //
-// from the cache and swap accesses ( read followed by write //
-// to the same address) from the execute stage, //
-// a block transfer is done. All other requests result in //
-// single word transfers. //
-// //
-// Write accesses can be done in a single clock cycle on //
-// the wishbone bus, is the destination allows it. The //
-// next transfer will begin immediately on the //
-// next cycle on the bus. This looks like a block transfer //
-// and does hold ownership of the wishbone bus, preventing //
-// the other master ( the ethernet MAC) from gaining //
-// ownership between those two cycles. But otherwise it would //
-// be necessary to insert a wait cycle after every write, //
-// slowing down the performance of the core by around 5 to //
-// 10%. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module a23_wishbone
-(
-input i_clk,
-
-// Core Accesses to Wishbone bus
-input i_select,
-input [31:0] i_write_data,
-input i_write_enable,
-input [3:0] i_byte_enable, // valid for writes only
-input i_data_access,
-input i_exclusive, // high for read part of swap access
-input [31:0] i_address,
-output o_stall,
-
-// Cache Accesses to Wishbone bus
-input i_cache_req,
-
-// Wishbone Bus
-output reg [31:0] o_wb_adr = 'd0,
-output reg [3:0] o_wb_sel = 'd0,
-output reg o_wb_we = 'd0,
-input [31:0] i_wb_dat,
-output reg [31:0] o_wb_dat = 'd0,
-output reg o_wb_cyc = 'd0,
-output reg o_wb_stb = 'd0,
-input i_wb_ack,
-input i_wb_err
-
-);
-
-
-localparam [3:0] WB_IDLE = 3'd0,
- WB_BURST1 = 3'd1,
- WB_BURST2 = 3'd2,
- WB_BURST3 = 3'd3,
- WB_WAIT_ACK = 3'd4;
-
-reg [2:0] wishbone_st = WB_IDLE;
-
-wire core_read_request;
-wire core_write_request;
-wire cache_read_request;
-wire cache_write_request;
-wire start_access;
-reg servicing_cache = 'd0;
-wire [3:0] byte_enable;
-reg exclusive_access = 'd0;
-wire read_ack;
-wire wait_write_ack;
-wire wb_wait;
-
-// Write buffer
-reg [31:0] wbuf_addr_r = 'd0;
-reg [3:0] wbuf_sel_r = 'd0;
-reg wbuf_busy_r = 'd0;
-
-
-assign read_ack = !o_wb_we && i_wb_ack;
-assign o_stall = ( core_read_request && !read_ack ) ||
- ( core_read_request && servicing_cache ) ||
- ( core_write_request && servicing_cache ) ||
- ( core_write_request && wishbone_st == WB_WAIT_ACK) ||
- ( cache_write_request && wishbone_st == WB_WAIT_ACK) ||
- wbuf_busy_r;
-
- // Don't stall on writes
- // Wishbone is doing burst read so make core wait to execute the write
- // ( core_write_request && !i_wb_ack ) ;
-
-assign core_read_request = i_select && !i_write_enable;
-assign core_write_request = i_select && i_write_enable;
-
-assign cache_read_request = i_cache_req && !i_write_enable;
-assign cache_write_request = i_cache_req && i_write_enable;
-
-assign wb_wait = o_wb_stb && !i_wb_ack;
-assign start_access = (core_read_request || core_write_request || i_cache_req) && !wb_wait ;
-
-// For writes the byte enable is always 4'hf
-assign byte_enable = wbuf_busy_r ? wbuf_sel_r :
- ( core_write_request || cache_write_request ) ? i_byte_enable :
- 4'hf ;
-
-
-
-// ======================================
-// Write buffer
-// ======================================
-
-
-always @( posedge i_clk )
- if ( wb_wait && !wbuf_busy_r && (core_write_request || cache_write_request) )
- begin
- wbuf_addr_r <= i_address;
- wbuf_sel_r <= i_byte_enable;
- wbuf_busy_r <= 1'd1;
- end
- else if (!o_wb_stb)
- wbuf_busy_r <= 1'd0;
-
-// ======================================
-// Register Accesses
-// ======================================
-always @( posedge i_clk )
- if ( start_access )
- o_wb_dat <= i_write_data;
-
-
-assign wait_write_ack = o_wb_stb && o_wb_we && !i_wb_ack;
-
-
-always @( posedge i_clk )
- case ( wishbone_st )
- WB_IDLE :
- begin
-
- if ( start_access )
- begin
- o_wb_stb <= 1'd1;
- o_wb_cyc <= 1'd1;
- o_wb_sel <= byte_enable;
- end
- else if ( !wait_write_ack )
- begin
- o_wb_stb <= 1'd0;
-
- // Hold cyc high after an exclusive access
- // to hold ownership of the wishbone bus
- o_wb_cyc <= exclusive_access;
- end
-
- // cache has priority over the core
- servicing_cache <= cache_read_request && !wait_write_ack;
-
- if ( wait_write_ack )
- begin
- // still waiting for last (write) access to complete
- wishbone_st <= WB_WAIT_ACK;
- end
- // do a burst of 4 read to fill a cache line
- else if ( cache_read_request )
- begin
- wishbone_st <= WB_BURST1;
- exclusive_access <= 1'd0;
- end
- else if ( core_read_request )
- begin
- wishbone_st <= WB_WAIT_ACK;
- exclusive_access <= i_exclusive;
- end
- // The core does not currently issue exclusive write requests
- // but there's no reason why this might not be added some
- // time in the future so allow for it here
- else if ( core_write_request )
- exclusive_access <= i_exclusive;
-
-
- if ( start_access )
- begin
- if (wbuf_busy_r)
- begin
- o_wb_we <= 1'd1;
- o_wb_adr[31:2] <= wbuf_addr_r[31:2];
- end
- else
- begin
- o_wb_we <= core_write_request || cache_write_request;
- // only update these on new wb access to make debug easier
- o_wb_adr[31:2] <= i_address[31:2];
- end
-
- o_wb_adr[1:0] <= byte_enable == 4'b0001 ? 2'd0 :
- byte_enable == 4'b0010 ? 2'd1 :
- byte_enable == 4'b0100 ? 2'd2 :
- byte_enable == 4'b1000 ? 2'd3 :
-
- byte_enable == 4'b0011 ? 2'd0 :
- byte_enable == 4'b1100 ? 2'd2 :
-
- 2'd0 ;
- end
- end
-
-
- // Read burst, wait for first ack
- WB_BURST1:
- if ( i_wb_ack )
- begin
- // burst of 4 that wraps
- o_wb_adr[3:2] <= o_wb_adr[3:2] + 1'd1;
- wishbone_st <= WB_BURST2;
- end
-
-
- // Read burst, wait for second ack
- WB_BURST2:
- if ( i_wb_ack )
- begin
- // burst of 4 that wraps
- o_wb_adr[3:2] <= o_wb_adr[3:2] + 1'd1;
- wishbone_st <= WB_BURST3;
- end
-
-
- // Read burst, wait for third ack
- WB_BURST3:
- if ( i_wb_ack )
- begin
- // burst of 4 that wraps
- o_wb_adr[3:2] <= o_wb_adr[3:2] + 1'd1;
- wishbone_st <= WB_WAIT_ACK;
- end
-
-
- // Wait for the wishbone ack to be asserted
- WB_WAIT_ACK:
- if ( i_wb_ack )
- begin
- wishbone_st <= WB_IDLE;
- o_wb_stb <= 1'd0;
- o_wb_cyc <= exclusive_access;
- o_wb_we <= 1'd0;
- servicing_cache <= 1'd0;
- end
-
- endcase
-
-
-
-// ========================================================
-// Debug Wishbone bus - not synthesizable
-// ========================================================
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/debug_functions.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/debug_functions.v
deleted file mode 100644
index dc20575..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/debug_functions.v
+++ /dev/null
@@ -1,228 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Debug Functions //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// A bunch of non-synthesizable testbench functions //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// Testbench Functions used in more than one module
-
-
-function [31:0] hex_chars_to_32bits;
-input [8*8-1:0] hex_chars;
-begin
-hex_chars_to_32bits[31:28] = hex_chars_to_4bits (hex_chars[8*8-1:7*8]);
-hex_chars_to_32bits[27:24] = hex_chars_to_4bits (hex_chars[7*8-1:6*8]);
-hex_chars_to_32bits[23:20] = hex_chars_to_4bits (hex_chars[6*8-1:5*8]);
-hex_chars_to_32bits[19:16] = hex_chars_to_4bits (hex_chars[5*8-1:4*8]);
-hex_chars_to_32bits[15:12] = hex_chars_to_4bits (hex_chars[4*8-1:3*8]);
-hex_chars_to_32bits[11: 8] = hex_chars_to_4bits (hex_chars[3*8-1:2*8]);
-hex_chars_to_32bits[ 7: 4] = hex_chars_to_4bits (hex_chars[2*8-1:1*8]);
-hex_chars_to_32bits[ 3: 0] = hex_chars_to_4bits (hex_chars[1*8-1: 0]);
-end
-endfunction
-
-
-function [7:0] hex_chars_to_8bits;
-input [8*2-1:0] hex_chars;
-begin
-hex_chars_to_8bits[ 7: 4] = hex_chars_to_4bits (hex_chars[2*8-1:1*8]);
-hex_chars_to_8bits[ 3: 0] = hex_chars_to_4bits (hex_chars[1*8-1: 0]);
-end
-endfunction
-
-
-function [3:0] hex_chars_to_4bits;
-input [7:0] hex_chars;
-begin
-case (hex_chars)
- "0" : hex_chars_to_4bits = 4'h0;
- "1" : hex_chars_to_4bits = 4'h1;
- "2" : hex_chars_to_4bits = 4'h2;
- "3" : hex_chars_to_4bits = 4'h3;
- "4" : hex_chars_to_4bits = 4'h4;
- "5" : hex_chars_to_4bits = 4'h5;
- "6" : hex_chars_to_4bits = 4'h6;
- "7" : hex_chars_to_4bits = 4'h7;
- "8" : hex_chars_to_4bits = 4'h8;
- "9" : hex_chars_to_4bits = 4'h9;
- "a" : hex_chars_to_4bits = 4'ha;
- "b" : hex_chars_to_4bits = 4'hb;
- "c" : hex_chars_to_4bits = 4'hc;
- "d" : hex_chars_to_4bits = 4'hd;
- "e" : hex_chars_to_4bits = 4'he;
- "f" : hex_chars_to_4bits = 4'hf;
- "A" : hex_chars_to_4bits = 4'ha;
- "B" : hex_chars_to_4bits = 4'hb;
- "C" : hex_chars_to_4bits = 4'hc;
- "D" : hex_chars_to_4bits = 4'hd;
- "E" : hex_chars_to_4bits = 4'he;
- "F" : hex_chars_to_4bits = 4'hf;
-endcase
-end
-endfunction
-
-
-function [120*8-1:0] align_line;
-input [120*8-1:0] line;
-begin
-case (1'd1)
- line[1 *8-1: 0] == 8'd0 : align_line = 960'd0;
- line[2 *8-1:1 *8] == 8'd0 : align_line = {line[1 *8-1: 0], 952'd0};
- line[3 *8-1:2 *8] == 8'd0 : align_line = {line[2 *8-1: 0], 944'd0};
- line[4 *8-1:3 *8] == 8'd0 : align_line = {line[3 *8-1: 0], 936'd0};
- line[5 *8-1:4 *8] == 8'd0 : align_line = {line[4 *8-1: 0], 928'd0};
- line[6 *8-1:5 *8] == 8'd0 : align_line = {line[5 *8-1: 0], 920'd0};
- line[7 *8-1:6 *8] == 8'd0 : align_line = {line[6 *8-1: 0], 912'd0};
- line[8 *8-1:7 *8] == 8'd0 : align_line = {line[7 *8-1: 0], 904'd0};
- line[9 *8-1:8 *8] == 8'd0 : align_line = {line[8 *8-1: 0], 896'd0};
- line[10 *8-1:9 *8] == 8'd0 : align_line = {line[9 *8-1: 0], 888'd0};
- line[11 *8-1:10 *8] == 8'd0 : align_line = {line[10 *8-1: 0], 880'd0};
- line[12 *8-1:11 *8] == 8'd0 : align_line = {line[11 *8-1: 0], 872'd0};
- line[13 *8-1:12 *8] == 8'd0 : align_line = {line[12 *8-1: 0], 864'd0};
- line[14 *8-1:13 *8] == 8'd0 : align_line = {line[13 *8-1: 0], 856'd0};
- line[15 *8-1:14 *8] == 8'd0 : align_line = {line[14 *8-1: 0], 848'd0};
- line[16 *8-1:15 *8] == 8'd0 : align_line = {line[15 *8-1: 0], 840'd0};
- line[17 *8-1:16 *8] == 8'd0 : align_line = {line[16 *8-1: 0], 832'd0};
- line[18 *8-1:17 *8] == 8'd0 : align_line = {line[17 *8-1: 0], 824'd0};
- line[19 *8-1:18 *8] == 8'd0 : align_line = {line[18 *8-1: 0], 816'd0};
- line[20 *8-1:19 *8] == 8'd0 : align_line = {line[19 *8-1: 0], 808'd0};
- line[21 *8-1:20 *8] == 8'd0 : align_line = {line[20 *8-1: 0], 800'd0};
- line[22 *8-1:21 *8] == 8'd0 : align_line = {line[21 *8-1: 0], 792'd0};
- line[23 *8-1:22 *8] == 8'd0 : align_line = {line[22 *8-1: 0], 784'd0};
- line[24 *8-1:23 *8] == 8'd0 : align_line = {line[23 *8-1: 0], 776'd0};
- line[25 *8-1:24 *8] == 8'd0 : align_line = {line[24 *8-1: 0], 768'd0};
- line[26 *8-1:25 *8] == 8'd0 : align_line = {line[25 *8-1: 0], 760'd0};
- line[27 *8-1:26 *8] == 8'd0 : align_line = {line[26 *8-1: 0], 752'd0};
- line[28 *8-1:27 *8] == 8'd0 : align_line = {line[27 *8-1: 0], 744'd0};
- line[29 *8-1:28 *8] == 8'd0 : align_line = {line[28 *8-1: 0], 736'd0};
- line[30 *8-1:29 *8] == 8'd0 : align_line = {line[29 *8-1: 0], 728'd0};
- line[31 *8-1:30 *8] == 8'd0 : align_line = {line[30 *8-1: 0], 720'd0};
- line[32 *8-1:31 *8] == 8'd0 : align_line = {line[31 *8-1: 0], 712'd0};
- line[33 *8-1:32 *8] == 8'd0 : align_line = {line[32 *8-1: 0], 704'd0};
- line[34 *8-1:33 *8] == 8'd0 : align_line = {line[33 *8-1: 0], 696'd0};
- line[35 *8-1:34 *8] == 8'd0 : align_line = {line[34 *8-1: 0], 688'd0};
- line[36 *8-1:35 *8] == 8'd0 : align_line = {line[35 *8-1: 0], 680'd0};
- line[37 *8-1:36 *8] == 8'd0 : align_line = {line[36 *8-1: 0], 672'd0};
- line[38 *8-1:37 *8] == 8'd0 : align_line = {line[37 *8-1: 0], 664'd0};
- line[39 *8-1:38 *8] == 8'd0 : align_line = {line[38 *8-1: 0], 656'd0};
- line[40 *8-1:39 *8] == 8'd0 : align_line = {line[39 *8-1: 0], 648'd0};
- line[41 *8-1:40 *8] == 8'd0 : align_line = {line[40 *8-1: 0], 640'd0};
- line[42 *8-1:41 *8] == 8'd0 : align_line = {line[41 *8-1: 0], 632'd0};
- line[43 *8-1:42 *8] == 8'd0 : align_line = {line[42 *8-1: 0], 624'd0};
- line[44 *8-1:43 *8] == 8'd0 : align_line = {line[43 *8-1: 0], 616'd0};
- line[45 *8-1:44 *8] == 8'd0 : align_line = {line[44 *8-1: 0], 608'd0};
- line[46 *8-1:45 *8] == 8'd0 : align_line = {line[45 *8-1: 0], 600'd0};
- line[47 *8-1:46 *8] == 8'd0 : align_line = {line[46 *8-1: 0], 592'd0};
- line[48 *8-1:47 *8] == 8'd0 : align_line = {line[47 *8-1: 0], 584'd0};
- line[49 *8-1:48 *8] == 8'd0 : align_line = {line[48 *8-1: 0], 576'd0};
- line[50 *8-1:49 *8] == 8'd0 : align_line = {line[49 *8-1: 0], 568'd0};
- line[51 *8-1:50 *8] == 8'd0 : align_line = {line[50 *8-1: 0], 560'd0};
- line[52 *8-1:51 *8] == 8'd0 : align_line = {line[51 *8-1: 0], 552'd0};
- line[53 *8-1:52 *8] == 8'd0 : align_line = {line[52 *8-1: 0], 544'd0};
- line[54 *8-1:53 *8] == 8'd0 : align_line = {line[53 *8-1: 0], 536'd0};
- line[55 *8-1:54 *8] == 8'd0 : align_line = {line[54 *8-1: 0], 528'd0};
- line[56 *8-1:55 *8] == 8'd0 : align_line = {line[55 *8-1: 0], 520'd0};
- line[57 *8-1:56 *8] == 8'd0 : align_line = {line[56 *8-1: 0], 512'd0};
- line[58 *8-1:57 *8] == 8'd0 : align_line = {line[57 *8-1: 0], 504'd0};
- line[59 *8-1:58 *8] == 8'd0 : align_line = {line[58 *8-1: 0], 496'd0};
- line[60 *8-1:59 *8] == 8'd0 : align_line = {line[59 *8-1: 0], 488'd0};
- line[61 *8-1:60 *8] == 8'd0 : align_line = {line[60 *8-1: 0], 480'd0};
- line[62 *8-1:61 *8] == 8'd0 : align_line = {line[61 *8-1: 0], 472'd0};
- line[63 *8-1:62 *8] == 8'd0 : align_line = {line[62 *8-1: 0], 464'd0};
- line[64 *8-1:63 *8] == 8'd0 : align_line = {line[63 *8-1: 0], 456'd0};
- line[65 *8-1:64 *8] == 8'd0 : align_line = {line[64 *8-1: 0], 448'd0};
- line[66 *8-1:65 *8] == 8'd0 : align_line = {line[65 *8-1: 0], 440'd0};
- line[67 *8-1:66 *8] == 8'd0 : align_line = {line[66 *8-1: 0], 432'd0};
- line[68 *8-1:67 *8] == 8'd0 : align_line = {line[67 *8-1: 0], 424'd0};
- line[69 *8-1:68 *8] == 8'd0 : align_line = {line[68 *8-1: 0], 416'd0};
- line[70 *8-1:69 *8] == 8'd0 : align_line = {line[69 *8-1: 0], 408'd0};
- line[71 *8-1:70 *8] == 8'd0 : align_line = {line[70 *8-1: 0], 400'd0};
- line[72 *8-1:71 *8] == 8'd0 : align_line = {line[71 *8-1: 0], 392'd0};
- line[73 *8-1:72 *8] == 8'd0 : align_line = {line[72 *8-1: 0], 384'd0};
- line[74 *8-1:73 *8] == 8'd0 : align_line = {line[73 *8-1: 0], 376'd0};
- line[75 *8-1:74 *8] == 8'd0 : align_line = {line[74 *8-1: 0], 368'd0};
- line[76 *8-1:75 *8] == 8'd0 : align_line = {line[75 *8-1: 0], 360'd0};
- line[77 *8-1:76 *8] == 8'd0 : align_line = {line[76 *8-1: 0], 352'd0};
- line[78 *8-1:77 *8] == 8'd0 : align_line = {line[77 *8-1: 0], 344'd0};
- line[79 *8-1:78 *8] == 8'd0 : align_line = {line[78 *8-1: 0], 336'd0};
- line[80 *8-1:79 *8] == 8'd0 : align_line = {line[79 *8-1: 0], 328'd0};
- line[81 *8-1:80 *8] == 8'd0 : align_line = {line[80 *8-1: 0], 320'd0};
- line[82 *8-1:81 *8] == 8'd0 : align_line = {line[81 *8-1: 0], 312'd0};
- line[83 *8-1:82 *8] == 8'd0 : align_line = {line[82 *8-1: 0], 304'd0};
- line[84 *8-1:83 *8] == 8'd0 : align_line = {line[83 *8-1: 0], 296'd0};
- line[85 *8-1:84 *8] == 8'd0 : align_line = {line[84 *8-1: 0], 288'd0};
- line[86 *8-1:85 *8] == 8'd0 : align_line = {line[85 *8-1: 0], 280'd0};
- line[87 *8-1:86 *8] == 8'd0 : align_line = {line[86 *8-1: 0], 272'd0};
- line[88 *8-1:87 *8] == 8'd0 : align_line = {line[87 *8-1: 0], 264'd0};
- line[89 *8-1:88 *8] == 8'd0 : align_line = {line[88 *8-1: 0], 256'd0};
- line[90 *8-1:89 *8] == 8'd0 : align_line = {line[89 *8-1: 0], 248'd0};
- line[91 *8-1:90 *8] == 8'd0 : align_line = {line[90 *8-1: 0], 240'd0};
- line[92 *8-1:91 *8] == 8'd0 : align_line = {line[91 *8-1: 0], 232'd0};
- line[93 *8-1:92 *8] == 8'd0 : align_line = {line[92 *8-1: 0], 224'd0};
- line[94 *8-1:93 *8] == 8'd0 : align_line = {line[93 *8-1: 0], 216'd0};
- line[95 *8-1:94 *8] == 8'd0 : align_line = {line[94 *8-1: 0], 208'd0};
- line[96 *8-1:95 *8] == 8'd0 : align_line = {line[95 *8-1: 0], 200'd0};
- line[97 *8-1:96 *8] == 8'd0 : align_line = {line[96 *8-1: 0], 192'd0};
- line[98 *8-1:97 *8] == 8'd0 : align_line = {line[97 *8-1: 0], 184'd0};
- line[99 *8-1:98 *8] == 8'd0 : align_line = {line[98 *8-1: 0], 176'd0};
- line[100*8-1:99 *8] == 8'd0 : align_line = {line[99 *8-1: 0], 168'd0};
- line[101*8-1:100*8] == 8'd0 : align_line = {line[100*8-1: 0], 160'd0};
- line[102*8-1:101*8] == 8'd0 : align_line = {line[101*8-1: 0], 152'd0};
- line[103*8-1:102*8] == 8'd0 : align_line = {line[102*8-1: 0], 144'd0};
- line[104*8-1:103*8] == 8'd0 : align_line = {line[103*8-1: 0], 136'd0};
- line[105*8-1:104*8] == 8'd0 : align_line = {line[104*8-1: 0], 128'd0};
- line[106*8-1:105*8] == 8'd0 : align_line = {line[105*8-1: 0], 120'd0};
- line[107*8-1:106*8] == 8'd0 : align_line = {line[106*8-1: 0], 112'd0};
- line[108*8-1:107*8] == 8'd0 : align_line = {line[107*8-1: 0], 104'd0};
- line[109*8-1:108*8] == 8'd0 : align_line = {line[108*8-1: 0], 96'd0};
- line[110*8-1:109*8] == 8'd0 : align_line = {line[109*8-1: 0], 88'd0};
- line[111*8-1:110*8] == 8'd0 : align_line = {line[110*8-1: 0], 80'd0};
- line[112*8-1:111*8] == 8'd0 : align_line = {line[111*8-1: 0], 72'd0};
- line[113*8-1:112*8] == 8'd0 : align_line = {line[112*8-1: 0], 64'd0};
- line[114*8-1:113*8] == 8'd0 : align_line = {line[113*8-1: 0], 56'd0};
- line[115*8-1:114*8] == 8'd0 : align_line = {line[114*8-1: 0], 48'd0};
- line[116*8-1:115*8] == 8'd0 : align_line = {line[115*8-1: 0], 40'd0};
- line[117*8-1:116*8] == 8'd0 : align_line = {line[116*8-1: 0], 32'd0};
- line[118*8-1:117*8] == 8'd0 : align_line = {line[117*8-1: 0], 24'd0};
- line[119*8-1:118*8] == 8'd0 : align_line = {line[118*8-1: 0], 16'd0};
- line[120*8-1:119*8] == 8'd0 : align_line = {line[119*8-1: 0], 8'd0};
-
- default: align_line = 960'd0;
-endcase
-end
-endfunction
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/generic_sram_byte_en.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/generic_sram_byte_en.v
deleted file mode 100644
index 5f5f0f4..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/generic_sram_byte_en.v
+++ /dev/null
@@ -1,82 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Generic Library SRAM with per byte write enable //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Configurable depth and width. The DATA_WIDTH must be a //
-// multiple of 8. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module generic_sram_byte_en
-#(
-parameter DATA_WIDTH = 128,
-parameter ADDRESS_WIDTH = 7
-)
-
-(
-input i_clk,
-input [DATA_WIDTH-1:0] i_write_data,
-input i_write_enable,
-input [ADDRESS_WIDTH-1:0] i_address,
-input [DATA_WIDTH/8-1:0] i_byte_enable,
-output reg [DATA_WIDTH-1:0] o_read_data
- );
-
-reg [DATA_WIDTH-1:0] mem [0:2**ADDRESS_WIDTH-1];
-integer i;
-
-always @(posedge i_clk)
- begin
- // read
- o_read_data <= i_write_enable ? {DATA_WIDTH{1'd0}} : mem[i_address];
-
- // write
- if (i_write_enable)
- for (i=0;i<DATA_WIDTH/8;i=i+1)
- begin
- mem[i_address][i*8+0] <= i_byte_enable[i] ? i_write_data[i*8+0] : mem[i_address][i*8+0] ;
- mem[i_address][i*8+1] <= i_byte_enable[i] ? i_write_data[i*8+1] : mem[i_address][i*8+1] ;
- mem[i_address][i*8+2] <= i_byte_enable[i] ? i_write_data[i*8+2] : mem[i_address][i*8+2] ;
- mem[i_address][i*8+3] <= i_byte_enable[i] ? i_write_data[i*8+3] : mem[i_address][i*8+3] ;
- mem[i_address][i*8+4] <= i_byte_enable[i] ? i_write_data[i*8+4] : mem[i_address][i*8+4] ;
- mem[i_address][i*8+5] <= i_byte_enable[i] ? i_write_data[i*8+5] : mem[i_address][i*8+5] ;
- mem[i_address][i*8+6] <= i_byte_enable[i] ? i_write_data[i*8+6] : mem[i_address][i*8+6] ;
- mem[i_address][i*8+7] <= i_byte_enable[i] ? i_write_data[i*8+7] : mem[i_address][i*8+7] ;
- end
- end
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/generic_sram_line_en.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/generic_sram_line_en.v
deleted file mode 100644
index 13954d2..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/generic_sram_line_en.v
+++ /dev/null
@@ -1,84 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Generic Library SRAM with single write enable //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Configurable depth and width. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-
-module generic_sram_line_en
-#(
-parameter DATA_WIDTH = 128,
-parameter ADDRESS_WIDTH = 7,
-parameter INITIALIZE_TO_ZERO = 0
-)
-
-(
-input i_clk,
-input [DATA_WIDTH-1:0] i_write_data,
-input i_write_enable,
-input [ADDRESS_WIDTH-1:0] i_address,
-output reg [DATA_WIDTH-1:0] o_read_data
-);
-
-reg [DATA_WIDTH-1:0] mem [0:2**ADDRESS_WIDTH-1];
-
-generate
-if ( INITIALIZE_TO_ZERO ) begin : init0
-integer i;
-initial
- begin
- for (i=0;i<2**ADDRESS_WIDTH;i=i+1)
- mem[i] <= 'd0;
- end
-end
-endgenerate
-
-
-always @(posedge i_clk)
- begin
- // read
- o_read_data <= i_write_enable ? {DATA_WIDTH{1'd0}} : mem[i_address];
-
- // write
- if (i_write_enable)
- mem[i_address] <= i_write_data;
- end
-
-
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/global_defines.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/global_defines.v
deleted file mode 100644
index a7b1173..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/global_defines.v
+++ /dev/null
@@ -1,55 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Global testbench defines //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// Contains a set of defines for each module so if the module //
-// hierarchy changes, hierarchical references to signals //
-// will still work as long as this file is updated. //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// ---------------------------------------------------------------
-// Module hierarchy defines
-// ---------------------------------------------------------------
-
-
-
-
- // ---------------------------------------------------------------
-
-
-
-// Simplified Main Memory Model
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/memory_configuration.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/memory_configuration.v
deleted file mode 100644
index 50738ea..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/rtl/memory_configuration.v
+++ /dev/null
@@ -1,159 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// //
-// Memory configuration and Wishbone address decoding //
-// //
-// This file is part of the Amber project //
-// http://www.opencores.org/project,amber //
-// //
-// Description //
-// This module provides a set of functions that are used to //
-// decode memory addresses so other modules know if an address //
-// is for example in main memory, or boot memory, or a UART //
-// //
-// Author(s): //
-// - Conor Santifort, csantifort.amber@gmail.com //
-// //
-//////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2010 Authors and OPENCORES.ORG //
-// //
-// This source file may be used and distributed without //
-// restriction provided that this copyright statement is not //
-// removed from the file and that any derivative work contains //
-// the original copyright notice and the associated disclaimer. //
-// //
-// This source file is free software; you can redistribute it //
-// and/or modify it under the terms of the GNU Lesser General //
-// Public License as published by the Free Software Foundation; //
-// either version 2.1 of the License, or (at your option) any //
-// later version. //
-// //
-// This source is distributed in the hope that it will be //
-// useful, but WITHOUT ANY WARRANTY; without even the implied //
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
-// PURPOSE. See the GNU Lesser General Public License for more //
-// details. //
-// //
-// You should have received a copy of the GNU Lesser General //
-// Public License along with this source; if not, download it //
-// from http://www.opencores.org/lgpl.shtml //
-// //
-//////////////////////////////////////////////////////////////////
-
-// e.g. 24 for 32MBytes, 26 for 128MBytes
-localparam MAIN_MSB = 26;
-
-// e.g. 13 for 4k words
-localparam BOOT_MSB = 13;
-
-localparam MAIN_BASE = 32'h0000_0000; /* Main Memory */
-localparam BOOT_BASE = 32'h0000_0000; /* Cachable Boot Memory */
-localparam AMBER_TM_BASE = 16'h1300; /* Timers Module */
-localparam AMBER_IC_BASE = 16'h1400; /* Interrupt Controller */
-localparam AMBER_UART0_BASE = 16'h1600; /* UART 0 */
-localparam AMBER_UART1_BASE = 16'h1700; /* UART 1 */
-localparam ETHMAC_BASE = 16'h2000; /* Ethernet MAC */
-localparam HIBOOT_BASE = 32'h2800_0000; /* Uncachable Boot Memory */
-localparam TEST_BASE = 16'hf000; /* Test Module */
-
-
-
-function in_loboot_mem;
- input [31:0] address;
-begin
-in_loboot_mem = (address >= BOOT_BASE &&
- address < (BOOT_BASE + 2**(BOOT_MSB+1)-1));
-end
-endfunction
-
-
-function in_hiboot_mem;
- input [31:0] address;
-begin
-in_hiboot_mem = (address[31:BOOT_MSB+1] == HIBOOT_BASE[31:BOOT_MSB+1]);
-end
-endfunction
-
-
-function in_boot_mem;
- input [31:0] address;
-begin
-in_boot_mem = in_loboot_mem(address) || in_hiboot_mem(address);
-end
-endfunction
-
-
-function in_main_mem;
- input [31:0] address;
-begin
-in_main_mem = (address >= MAIN_BASE &&
- address < (MAIN_BASE + 2**(MAIN_MSB+1)-1)) &&
- !in_boot_mem ( address );
-end
-endfunction
-
-
-// UART 0 address space
-function in_uart0;
- input [31:0] address;
-begin
- in_uart0 = address [31:16] == AMBER_UART0_BASE;
-end
-endfunction
-
-
-// UART 1 address space
-function in_uart1;
- input [31:0] address;
-begin
- in_uart1 = address [31:16] == AMBER_UART1_BASE;
-end
-endfunction
-
-
-// Interrupt Controller address space
-function in_ic;
- input [31:0] address;
-begin
- in_ic = address [31:16] == AMBER_IC_BASE;
-end
-endfunction
-
-
-// Timer Module address space
-function in_tm;
- input [31:0] address;
-begin
- in_tm = address [31:16] == AMBER_TM_BASE;
-end
-endfunction
-
-
-// Test module
-function in_test;
- input [31:0] address;
-begin
- in_test = address [31:16] == TEST_BASE;
-end
-endfunction
-
-
-// Ethernet MAC
-function in_ethmac;
- input [31:0] address;
-begin
- in_ethmac = address [31:16] == ETHMAC_BASE;
-end
-endfunction
-
-
-// Used in fetch.v and l2cache.v to allow accesses to these addresses
-// to be cached
-function in_cachable_mem;
- input [31:0] address;
-begin
- in_cachable_mem = in_loboot_mem ( address ) ||
- in_main_mem ( address ) ;
-end
-endfunction
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/sim/bench.v b/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/sim/bench.v
deleted file mode 100644
index e325f19..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/amber23/slpp_unit/work/sim/bench.v
+++ /dev/null
@@ -1,183 +0,0 @@
-
-module testbench;
-
-// Generic Inputs
-reg clk;
-reg i_irq; // Interrupt request, active high
-reg i_firq; // Fast Interrupt request, active high
-reg i_system_rdy; // Amber is stalled when this is low
-reg globrst;
-
-// Wishbone Inputs
-reg [31:0] i_wb_dat;
-wire i_wb_ack;
-wire i_wb_err;
-
-// Wishbone Outputs
-wire [31:0] o_wb_adr;
-wire [ 3:0] o_wb_sel;
-wire o_wb_we;
-wire [31:0] o_wb_dat;
-wire o_wb_cyc;
-wire o_wb_stb;
-
-
-a23_core UUT (
- clk,
- i_irq,
- i_firq,
- i_system_rdy,
- o_wb_adr,
- o_wb_sel,
- o_wb_we,
- i_wb_dat,
- o_wb_dat,
- o_wb_cyc,
- o_wb_stb,
- i_wb_ack,
- i_wb_err,
- globrst
-);
-
-
-initial begin
- clk <= 0;
- #100;
- forever begin
- clk <= ~clk;
- #50;
- end
-end
-
-initial begin
- i_irq <= 0;
- i_firq <= 0;
- i_wb_dat <= 0;
- i_system_rdy <= 0;
- globrst <= 0;
- repeat (5) @(posedge clk);
- globrst <= 1;
- repeat (2) @(posedge clk);
- globrst <= 0;
- repeat (3) @(posedge clk);
- i_system_rdy <= 1;
- repeat (5000) @(posedge clk);
- $display("Reached limit of 5000 cpu cycles.");
- $finish;
-end
-
-integer output_idx;
-reg [7:0] output_buf [1023:0];
-event output_eof;
-
-localparam mem_size = 16*1024; // = 64kB
-reg [31:0] mem [0:mem_size-1];
-reg [31:0] tmp;
-integer i;
-
-initial begin
- output_idx = 0;
- for (i=0; i<mem_size; i=i+1)
- mem[i] = 0;
-mem[ 0] = 32'he3a00000;
-mem[ 1] = 32'he13ff000;
-mem[ 2] = 32'he3a00001;
-mem[ 3] = 32'hee030f10;
-mem[ 4] = 32'he3a00001;
-mem[ 5] = 32'hee020f10;
-mem[ 6] = 32'he3a0d801;
-mem[ 7] = 32'heb000000;
-mem[ 8] = 32'heafffffe;
-mem[ 9] = 32'he3a01201;
-mem[ 10] = 32'he3a03002;
-mem[ 11] = 32'he59f0084;
-mem[ 12] = 32'he92d40f0;
-mem[ 13] = 32'he3a02003;
-mem[ 14] = 32'he5813000;
-mem[ 15] = 32'he3a0c001;
-mem[ 16] = 32'he3a03000;
-mem[ 17] = 32'he1a06001;
-mem[ 18] = 32'he1a012a3;
-mem[ 19] = 32'he7901101;
-mem[ 20] = 32'he203401f;
-mem[ 21] = 32'he011141c;
-mem[ 22] = 32'h1a00000e;
-mem[ 23] = 32'he5862000;
-mem[ 24] = 32'he1a01082;
-mem[ 25] = 32'he3110001;
-mem[ 26] = 32'h0a000008;
-mem[ 27] = 32'he2414003;
-mem[ 28] = 32'he1a050a4;
-mem[ 29] = 32'he355003f;
-mem[ 30] = 32'h8a000006;
-mem[ 31] = 32'he1a04324;
-mem[ 32] = 32'he7907104;
-mem[ 33] = 32'he205501f;
-mem[ 34] = 32'he187551c;
-mem[ 35] = 32'he7805104;
-mem[ 36] = 32'he0811002;
-mem[ 37] = 32'heafffff2;
-mem[ 38] = 32'he2833001;
-mem[ 39] = 32'he3530040;
-mem[ 40] = 32'he2822002;
-mem[ 41] = 32'h1affffe7;
-mem[ 42] = 32'he3a00000;
-mem[ 43] = 32'he3a03201;
-mem[ 44] = 32'he5830000;
-mem[ 45] = 32'he8bd80f0;
-mem[ 46] = 32'h000000bc;
-mem[ 47] = 32'h00000000;
-mem[ 48] = 32'h00000000;
-end
-
-reg wb_start_read_d1;
-wire wb_start_write = o_wb_stb && o_wb_we && !wb_start_read_d1;
-wire wb_start_read = o_wb_stb && !o_wb_we && !i_wb_ack;
-assign i_wb_ack = o_wb_stb && ( wb_start_write || wb_start_read_d1 );
-assign i_wb_err = 0;
-
-always @(posedge clk)
- wb_start_read_d1 <= wb_start_read;
-
-always @(posedge clk) begin
- if (wb_start_write || wb_start_read) begin
- if (o_wb_adr < mem_size*4) begin
- tmp = mem[o_wb_adr >> 2];
- if (wb_start_write) begin
- if (o_wb_sel[0]) tmp = { tmp[31:24], tmp[23:16], tmp[15:8], o_wb_dat[7:0] };
- if (o_wb_sel[1]) tmp = { tmp[31:24], tmp[23:16], o_wb_dat[15:8], tmp[7:0] };
- if (o_wb_sel[2]) tmp = { tmp[31:24], o_wb_dat[23:16], tmp[15:8], tmp[7:0] };
- if (o_wb_sel[3]) tmp = { o_wb_dat[31:24], tmp[23:16], tmp[15:8], tmp[7:0] };
- mem[o_wb_adr >> 2] <= tmp;
- end
- if (wb_start_read)
- i_wb_dat <= tmp;
- $display("%t MEM %s ADDR %08x: %08x (%b)", $time, o_wb_we ? "WRITE" : "READ ", o_wb_adr, tmp, o_wb_sel);
- end
- if (wb_start_write && o_wb_adr == 32'h10000000) begin
- $display("%t OUTPUT %d", $time, o_wb_dat);
- if (o_wb_dat == 0) begin
- -> output_eof;
- end else begin
- output_buf[output_idx] = o_wb_dat;
- output_idx = output_idx + 1;
- end
- end
- end
-end
-
-always @(output_eof) begin
- #1001;
- $display("Got EOF marker on IO port.");
- for (i = 0; i < output_idx; i = i + 1) begin
- $display("+OUT+ %d", output_buf[i]);
- end
- $finish;
-end
-
-initial begin
- // $dumpfile("bench.vcd");
- // $dumpvars(0, testbench);
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/surelog.log
deleted file mode 100644
index 9d9c789..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/surelog.log
+++ /dev/null
@@ -1,208 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:41:27
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/lm32_adder.v rtl/lm32_addsub.v rtl/lm32_config.v rtl/lm32_cpu.v rtl/lm32_dcache.v rtl/lm32_debug.v rtl/lm32_decoder.v rtl/lm32_dp_ram.v rtl/lm32_dtlb.v rtl/lm32_icache.v rtl/lm32_include.v rtl/lm32_instruction_unit.v rtl/lm32_interrupt.v rtl/lm32_itlb.v rtl/lm32_jtag.v rtl/lm32_load_store_unit.v rtl/lm32_logic_op.v rtl/lm32_mc_arithmetic.v rtl/lm32_multiplier.v rtl/lm32_ram.v rtl/lm32_shifter.v rtl/lm32_top.v sim/tb_lm32_system.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[ERROR:PP0107] rtl/lm32_dcache.v:118 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_dcache.v:119 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_dcache.v:129 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_dtlb.v:89 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_dtlb.v:90 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_icache.v:128 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_icache.v:129 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_icache.v:139 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_instruction_unit.v:196 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_itlb.v:88 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_itlb.v:89 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[ERROR:PP0107] rtl/lm32_load_store_unit.v:159 Too many arguments (1) for macro "CLOG2",
- ./rtl/lm32_config.v:57 macro definition takes 0.
-
-[WARNI:PA0205] rtl/lm32_addsub.v:54 No timescale set for "lm32_addsub".
-
-[WARNI:PA0205] rtl/lm32_adder.v:55 No timescale set for "lm32_adder".
-
-[WARNI:PA0205] rtl/lm32_decoder.v:65 No timescale set for "lm32_decoder".
-
-[WARNI:PA0205] rtl/lm32_dcache.v:62 No timescale set for "lm32_dcache".
-
-[WARNI:PA0205] rtl/lm32_icache.v:67 No timescale set for "lm32_icache".
-
-[WARNI:PA0205] rtl/lm32_debug.v:61 No timescale set for "lm32_debug".
-
-[WARNI:PA0205] rtl/lm32_dp_ram.v:36 No timescale set for "lm32_dp_ram".
-
-[WARNI:PA0205] rtl/lm32_dtlb.v:41 No timescale set for "lm32_dtlb".
-
-[WARNI:PA0205] rtl/lm32_itlb.v:40 No timescale set for "lm32_itlb".
-
-[WARNI:PA0205] rtl/lm32_logic_op.v:55 No timescale set for "lm32_logic_op".
-
-[WARNI:PA0205] rtl/lm32_multiplier.v:55 No timescale set for "lm32_multiplier".
-
-[WARNI:PA0205] rtl/lm32_shifter.v:55 No timescale set for "lm32_shifter".
-
-[WARNI:PA0205] rtl/lm32_interrupt.v:55 No timescale set for "lm32_interrupt".
-
-[WARNI:PA0205] rtl/lm32_instruction_unit.v:76 No timescale set for "lm32_instruction_unit".
-
-[WARNI:PA0205] rtl/lm32_load_store_unit.v:68 No timescale set for "lm32_load_store_unit".
-
-[WARNI:PA0205] rtl/lm32_mc_arithmetic.v:56 No timescale set for "lm32_mc_arithmetic".
-
-[WARNI:PA0205] rtl/lm32_ram.v:60 No timescale set for "lm32_ram".
-
-[WARNI:PA0205] rtl/lm32_top.v:55 No timescale set for "lm32_top".
-
-[WARNI:PA0205] rtl/lm32_cpu.v:98 No timescale set for "lm32_cpu".
-
-[WARNI:PA0205] sim/tb_lm32_system.v:33 No timescale set for "testbench".
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/lm32_adder.v:55 Compile module "work@lm32_adder".
-
-[INFO :CP0303] rtl/lm32_cpu.v:98 Compile module "work@lm32_cpu".
-
-[INFO :CP0303] rtl/lm32_dcache.v:62 Compile module "work@lm32_dcache".
-
-[INFO :CP0303] rtl/lm32_addsub.v:54 Compile module "work@lm32_addsub".
-
-[INFO :CP0303] rtl/lm32_debug.v:61 Compile module "work@lm32_debug".
-
-[INFO :CP0303] rtl/lm32_decoder.v:65 Compile module "work@lm32_decoder".
-
-[INFO :CP0303] rtl/lm32_icache.v:67 Compile module "work@lm32_icache".
-
-[INFO :CP0303] rtl/lm32_dtlb.v:41 Compile module "work@lm32_dtlb".
-
-[INFO :CP0303] rtl/lm32_load_store_unit.v:68 Compile module "work@lm32_load_store_unit".
-
-[INFO :CP0303] rtl/lm32_itlb.v:40 Compile module "work@lm32_itlb".
-
-[INFO :CP0303] rtl/lm32_instruction_unit.v:76 Compile module "work@lm32_instruction_unit".
-
-[INFO :CP0303] rtl/lm32_multiplier.v:55 Compile module "work@lm32_multiplier".
-
-[INFO :CP0303] sim/tb_lm32_system.v:33 Compile module "work@testbench".
-
-[INFO :CP0303] rtl/lm32_dp_ram.v:36 Compile module "work@lm32_dp_ram".
-
-[INFO :CP0303] rtl/lm32_ram.v:60 Compile module "work@lm32_ram".
-
-[INFO :CP0303] rtl/lm32_interrupt.v:55 Compile module "work@lm32_interrupt".
-
-[INFO :CP0303] rtl/lm32_logic_op.v:55 Compile module "work@lm32_logic_op".
-
-[INFO :CP0303] rtl/lm32_mc_arithmetic.v:56 Compile module "work@lm32_mc_arithmetic".
-
-[INFO :CP0303] rtl/lm32_shifter.v:55 Compile module "work@lm32_shifter".
-
-[INFO :CP0303] rtl/lm32_top.v:55 Compile module "work@lm32_top".
-
-[NOTE :CP0309] rtl/lm32_adder.v:62 Implicit port type (wire) for "adder_result_x",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_debug.v:81 Implicit port type (wire) for "bp_match",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_icache.v:83 Implicit port type (wire) for "stall_request",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_load_store_unit.v:106 Implicit port type (wire) for "dcache_refill_request",
-there are 8 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_ram.v:72 Implicit port type (wire) for "read_data".
-
-[NOTE :CP0309] rtl/lm32_addsub.v:61 Implicit port type (wire) for "Result",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_decoder.v:80 Implicit port type (wire) for "x_bypass_enable",
-there are 28 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_instruction_unit.v:116 Implicit port type (wire) for "icache_stall_request",
-there are 11 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_shifter.v:65 Implicit port type (wire) for "shifter_result_m".
-
-[NOTE :CP0309] rtl/lm32_cpu.v:118 Implicit port type (wire) for "I_DAT_O",
-there are 17 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_dp_ram.v:49 Implicit port type (wire) for "do_a",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_interrupt.v:71 Implicit port type (wire) for "interrupt_exception".
-
-[NOTE :CP0309] rtl/lm32_mc_arithmetic.v:69 Implicit port type (wire) for "stall_request_x".
-
-[NOTE :CP0309] rtl/lm32_top.v:75 Implicit port type (wire) for "I_DAT_O",
-there are 17 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_dcache.v:80 Implicit port type (wire) for "stall_request",
-there are 1 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_dtlb.v:62 Implicit port type (wire) for "physical_load_store_address_m",
-there are 5 more instances of this message.
-
-[NOTE :CP0309] rtl/lm32_itlb.v:60 Implicit port type (wire) for "stall_request",
-there are 2 more instances of this message.
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] rtl/lm32_dp_ram.v:36 Top level module "work@lm32_dp_ram".
-
-[NOTE :EL0503] sim/tb_lm32_system.v:33 Top level module "work@testbench".
-
-[NOTE :EL0504] Multiple top level modules in design.
-
-[NOTE :EL0508] Nb Top level modules: 2.
-
-[NOTE :EL0509] Max instance depth: 8.
-
-[NOTE :EL0510] Nb instances: 27.
-
-[NOTE :EL0511] Nb leaf instances: 10.
-
-[ FATAL] : 0
-[ ERROR] : 12
-[WARNING] : 20
-[ NOTE] : 24
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_adder.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_adder.v
deleted file mode 100644
index e20946b..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_adder.v
+++ /dev/null
@@ -1,298 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_adder.v
-// Title : Integer adder / subtractor with comparison flag generation
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_adder (
- // ----- Inputs -------
- adder_op_x,
- adder_op_x_n,
- operand_0_x,
- operand_1_x,
- // ----- Outputs -------
- adder_result_x,
- adder_carry_n_x,
- adder_overflow_x
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input adder_op_x; // Operating to perform, 0 for addition, 1 for subtraction
-input adder_op_x_n; // Inverted version of adder_op_x
-input [(32-1):0] operand_0_x; // Operand to add, or subtract from
-input [(32-1):0] operand_1_x; // Opearnd to add, or subtract by
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [(32-1):0] adder_result_x; // Result of addition or subtraction
-wire [(32-1):0] adder_result_x;
-output adder_carry_n_x; // Inverted carry
-wire adder_carry_n_x;
-output adder_overflow_x; // Indicates if overflow occured, only valid for subtractions
-reg adder_overflow_x;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire a_sign; // Sign (i.e. positive or negative) of operand 0
-wire b_sign; // Sign of operand 1
-wire result_sign; // Sign of result
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-lm32_addsub addsub (
- // ----- Inputs -----
- .DataA (operand_0_x),
- .DataB (operand_1_x),
- .Cin (adder_op_x),
- .Add_Sub (adder_op_x_n),
- // ----- Ouputs -----
- .Result (adder_result_x),
- .Cout (adder_carry_n_x)
- );
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Extract signs of operands and result
-
-assign a_sign = operand_0_x[32-1];
-assign b_sign = operand_1_x[32-1];
-assign result_sign = adder_result_x[32-1];
-
-// Determine whether an overflow occured when performing a subtraction
-
-always @(*)
-begin
- // +ve - -ve = -ve -> overflow
- // -ve - +ve = +ve -> overflow
- if ( (!a_sign & b_sign & result_sign)
- || (a_sign & !b_sign & !result_sign)
- )
- adder_overflow_x = 1'b1;
- else
- adder_overflow_x = 1'b0;
-end
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_addsub.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_addsub.v
deleted file mode 100644
index c3290a9..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_addsub.v
+++ /dev/null
@@ -1,257 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_addsub.v
-// Title : PMI adder/subtractor.
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_addsub (
- // ----- Inputs -------
- DataA,
- DataB,
- Cin,
- Add_Sub,
- // ----- Outputs -------
- Result,
- Cout
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input [31:0] DataA;
-input [31:0] DataB;
-input Cin;
-input Add_Sub;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [31:0] Result;
-wire [31:0] Result;
-output Cout;
-wire Cout;
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-// Modified for Milkymist: removed non-portable instantiated block
-wire [32:0] tmp_addResult = DataA + DataB + Cin;
-wire [32:0] tmp_subResult = DataA - DataB - !Cin;
-
-assign Result = (Add_Sub == 1) ? tmp_addResult[31:0] : tmp_subResult[31:0];
-assign Cout = (Add_Sub == 1) ? tmp_addResult[32] : !tmp_subResult[32];
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_config.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_config.v
deleted file mode 100644
index 95a31c2..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_config.v
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_cpu.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_cpu.v
deleted file mode 100644
index 659ecc9..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_cpu.v
+++ /dev/null
@@ -1,2172 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// Copyright (c) 2011-2012 Yann Sionneau <yann.sionneau@gmail.com>
-// Copyright (c) 2012 Michael Walle <michael@walle.cc>
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_cpu.v
-// Title : Top-level of CPU.
-// Dependencies : lm32_include.v
-//
-// Version 3.8
-// 1. Feature: Support for dynamically switching EBA to DEBA via a GPIO.
-// 2. Bug: EA now reports instruction that caused the data abort, rather than
-// next instruction.
-//
-// Version 3.4
-// 1. Bug Fix: In a tight infinite loop (add, sw, bi) incoming interrupts were
-// never serviced.
-//
-// Version 3.3
-// 1. Feature: Support for memory that is tightly coupled to processor core, and
-// has a single-cycle access latency (same as caches). Instruction port has
-// access to a dedicated physically-mapped memory. Data port has access to
-// a dedicated physically-mapped memory. In order to be able to manipulate
-// values in both these memories via the debugger, these memories also
-// interface with the data port of LM32.
-// 2. Feature: Extended Configuration Register
-// 3. Bug Fix: Removed port names that conflict with keywords reserved in System-
-// Verilog.
-//
-// Version 3.2
-// 1. Bug Fix: Single-stepping a load/store to invalid address causes debugger to
-// hang. At the same time CPU fails to register data bus error exception. Bug
-// is caused because (a) data bus error exception occurs after load/store has
-// passed X stage and next sequential instruction (e.g., brk) is already in X
-// stage, and (b) data bus error exception had lower priority than, say, brk
-// exception.
-// 2. Bug Fix: If a brk (or scall/eret/bret) sequentially follows a load/store to
-// invalid location, CPU will fail to register data bus error exception. The
-// solution is to stall scall/eret/bret/brk instructions in D pipeline stage
-// until load/store has completed.
-// 3. Feature: Enable precise identification of load/store that causes seg fault.
-// 4. SYNC resets used for register file when implemented in EBRs.
-//
-// Version 3.1
-// 1. Feature: LM32 Register File can now be mapped in to on-chip block RAM (EBR)
-// instead of distributed memory by enabling the option in LM32 GUI.
-// 2. Feature: LM32 also adds a static branch predictor to improve branch
-// performance. All immediate-based forward-pointing branches are predicted
-// not-taken. All immediate-based backward-pointing branches are predicted taken.
-//
-// Version 7.0SP2, 3.0
-// No Change
-//
-// Version 6.1.17
-// Initial Release
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_cpu (
- // ----- Inputs -------
- clk_i,
- rst_i,
- // From external devices
- interrupt,
- // From user logic
- ext_break,
- // Instruction Wishbone master
- I_DAT_I,
- I_ACK_I,
- I_ERR_I,
- I_RTY_I,
- // Data Wishbone master
- D_DAT_I,
- D_ACK_I,
- D_ERR_I,
- D_RTY_I,
- // ----- Outputs -------
- // Instruction Wishbone master
- I_DAT_O,
- I_ADR_O,
- I_CYC_O,
- I_SEL_O,
- I_STB_O,
- I_WE_O,
- I_CTI_O,
- I_LOCK_O,
- I_BTE_O,
- // Data Wishbone master
- D_DAT_O,
- D_ADR_O,
- D_CYC_O,
- D_SEL_O,
- D_STB_O,
- D_WE_O,
- D_CTI_O,
- D_LOCK_O,
- D_BTE_O
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter eba_reset = 32'h0; // Reset value for EBA CSR
-parameter deba_reset = 32'h0; // Reset value for DEBA CSR
-
-parameter icache_associativity = 1; // Associativity of the cache (Number of ways)
-parameter icache_sets = 256; // Number of sets
-parameter icache_bytes_per_line = 16; // Number of bytes per cache line
-parameter icache_base_address = 32'h0; // Base address of cachable memory
-parameter icache_limit = 32'h7fffffff; // Limit (highest address) of cachable memory
-
-parameter dcache_associativity = 1; // Associativity of the cache (Number of ways)
-parameter dcache_sets = 256; // Number of sets
-parameter dcache_bytes_per_line = 16; // Number of bytes per cache line
-parameter dcache_base_address = 32'h0; // Base address of cachable memory
-parameter dcache_limit = 32'h7fffffff; // Limit (highest address) of cachable memory
-
-parameter watchpoints = 32'h4; // Number of h/w watchpoint CSRs
-parameter breakpoints = 32'h4; // Number of h/w breakpoint CSRs
-
-parameter interrupts = 32; // Number of interrupts
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-
-input [(32-1):0] interrupt; // Interrupt pins
-
-
-
-input [(32-1):0] I_DAT_I; // Instruction Wishbone interface read data
-input I_ACK_I; // Instruction Wishbone interface acknowledgement
-input I_ERR_I; // Instruction Wishbone interface error
-input I_RTY_I; // Instruction Wishbone interface retry
-
-input [(32-1):0] D_DAT_I; // Data Wishbone interface read data
-input D_ACK_I; // Data Wishbone interface acknowledgement
-input D_ERR_I; // Data Wishbone interface error
-input D_RTY_I; // Data Wishbone interface retry
-
-input ext_break;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-
-
-
-output [(32-1):0] I_DAT_O; // Instruction Wishbone interface write data
-wire [(32-1):0] I_DAT_O;
-output [(32-1):0] I_ADR_O; // Instruction Wishbone interface address
-wire [(32-1):0] I_ADR_O;
-output I_CYC_O; // Instruction Wishbone interface cycle
-wire I_CYC_O;
-output [(4-1):0] I_SEL_O; // Instruction Wishbone interface byte select
-wire [(4-1):0] I_SEL_O;
-output I_STB_O; // Instruction Wishbone interface strobe
-wire I_STB_O;
-output I_WE_O; // Instruction Wishbone interface write enable
-wire I_WE_O;
-output [(3-1):0] I_CTI_O; // Instruction Wishbone interface cycle type
-wire [(3-1):0] I_CTI_O;
-output I_LOCK_O; // Instruction Wishbone interface lock bus
-wire I_LOCK_O;
-output [(2-1):0] I_BTE_O; // Instruction Wishbone interface burst type
-wire [(2-1):0] I_BTE_O;
-
-output [(32-1):0] D_DAT_O; // Data Wishbone interface write data
-wire [(32-1):0] D_DAT_O;
-output [(32-1):0] D_ADR_O; // Data Wishbone interface address
-wire [(32-1):0] D_ADR_O;
-output D_CYC_O; // Data Wishbone interface cycle
-wire D_CYC_O;
-output [(4-1):0] D_SEL_O; // Data Wishbone interface byte select
-wire [(4-1):0] D_SEL_O;
-output D_STB_O; // Data Wishbone interface strobe
-wire D_STB_O;
-output D_WE_O; // Data Wishbone interface write enable
-wire D_WE_O;
-output [(3-1):0] D_CTI_O; // Data Wishbone interface cycle type
-wire [(3-1):0] D_CTI_O;
-output D_LOCK_O; // Date Wishbone interface lock bus
-wire D_LOCK_O;
-output [(2-1):0] D_BTE_O; // Data Wishbone interface burst type
-wire [(2-1):0] D_BTE_O;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-// Pipeline registers
-
-reg valid_a; // Instruction in A stage is valid
-reg valid_f; // Instruction in F stage is valid
-reg valid_d; // Instruction in D stage is valid
-reg valid_x; // Instruction in X stage is valid
-reg valid_m; // Instruction in M stage is valid
-reg valid_w; // Instruction in W stage is valid
-
-wire q_x;
-wire [(32-1):0] immediate_d; // Immediate operand
-wire load_d; // Indicates a load instruction
-reg load_x;
-reg load_m;
-wire load_q_x;
-wire store_q_x;
-wire store_d; // Indicates a store instruction
-reg store_x;
-reg store_m;
-wire [1:0] size_d; // Size of load/store (byte, hword, word)
-reg [1:0] size_x;
-wire branch_d; // Indicates a branch instruction
-wire branch_predict_d; // Indicates a branch is predicted
-wire branch_predict_taken_d; // Indicates a branch is predicted taken
-wire [((32-2)+2-1):2] branch_predict_address_d; // Address to which predicted branch jumps
-wire [((32-2)+2-1):2] branch_target_d;
-wire bi_unconditional;
-wire bi_conditional;
-reg branch_x;
-reg branch_predict_x;
-reg branch_predict_taken_x;
-reg branch_m;
-reg branch_predict_m;
-reg branch_predict_taken_m;
-wire branch_mispredict_taken_m; // Indicates a branch was mispredicted as taken
-wire branch_flushX_m; // Indicates that instruction in X stage must be squashed
-wire branch_reg_d; // Branch to register or immediate
-wire [((32-2)+2-1):2] branch_offset_d; // Branch offset for immediate branches
-reg [((32-2)+2-1):2] branch_target_x; // Address to branch to
-reg [((32-2)+2-1):2] branch_target_m;
-wire [0:0] d_result_sel_0_d; // Which result should be selected in D stage for operand 0
-wire [1:0] d_result_sel_1_d; // Which result should be selected in D stage for operand 1
-
-wire x_result_sel_csr_d; // Select X stage result from CSRs
-reg x_result_sel_csr_x;
-wire x_result_sel_mc_arith_d; // Select X stage result from multi-cycle arithmetic unit
-reg x_result_sel_mc_arith_x;
-wire x_result_sel_sext_d; // Select X stage result from sign-extend logic
-reg x_result_sel_sext_x;
-wire x_result_sel_logic_d; // Select X stage result from logic op unit
-reg x_result_sel_logic_x;
-wire x_result_sel_add_d; // Select X stage result from adder
-reg x_result_sel_add_x;
-wire m_result_sel_compare_d; // Select M stage result from comparison logic
-reg m_result_sel_compare_x;
-reg m_result_sel_compare_m;
-wire m_result_sel_shift_d; // Select M stage result from shifter
-reg m_result_sel_shift_x;
-reg m_result_sel_shift_m;
-wire w_result_sel_load_d; // Select W stage result from load/store unit
-reg w_result_sel_load_x;
-reg w_result_sel_load_m;
-reg w_result_sel_load_w;
-wire w_result_sel_mul_d; // Select W stage result from multiplier
-reg w_result_sel_mul_x;
-reg w_result_sel_mul_m;
-reg w_result_sel_mul_w;
-wire x_bypass_enable_d; // Whether result is bypassable in X stage
-reg x_bypass_enable_x;
-wire m_bypass_enable_d; // Whether result is bypassable in M stage
-reg m_bypass_enable_x;
-reg m_bypass_enable_m;
-wire sign_extend_d; // Whether to sign-extend or zero-extend
-reg sign_extend_x;
-wire write_enable_d; // Register file write enable
-reg write_enable_x;
-wire write_enable_q_x;
-reg write_enable_m;
-wire write_enable_q_m;
-reg write_enable_w;
-wire write_enable_q_w;
-wire read_enable_0_d; // Register file read enable 0
-wire [(5-1):0] read_idx_0_d; // Register file read index 0
-wire read_enable_1_d; // Register file read enable 1
-wire [(5-1):0] read_idx_1_d; // Register file read index 1
-wire [(5-1):0] write_idx_d; // Register file write index
-reg [(5-1):0] write_idx_x;
-reg [(5-1):0] write_idx_m;
-reg [(5-1):0] write_idx_w;
-wire [(5-1):0] csr_d; // CSR read/write index
-reg [(5-1):0] csr_x;
-wire [(3-1):0] condition_d; // Branch condition
-reg [(3-1):0] condition_x;
-wire break_d; // Indicates a break instruction
-reg break_x;
-wire scall_d; // Indicates a scall instruction
-reg scall_x;
-wire eret_d; // Indicates an eret instruction
-reg eret_x;
-wire eret_q_x;
-wire eret_k_q_x;
-reg eret_m;
-wire bret_d; // Indicates a bret instruction
-reg bret_x;
-wire bret_q_x;
-wire bret_k_q_x;
-reg bret_m;
-wire csr_write_enable_d; // CSR write enable
-reg csr_write_enable_x;
-wire csr_write_enable_q_x;
-wire csr_write_enable_k_q_x;
-
-wire bus_error_d; // Indicates an bus error occured while fetching the instruction in this pipeline stage
-reg bus_error_x;
-reg data_bus_error_exception_m;
-reg [((32-2)+2-1):2] memop_pc_w;
-
-reg [(32-1):0] d_result_0; // Result of instruction in D stage (operand 0)
-reg [(32-1):0] d_result_1; // Result of instruction in D stage (operand 1)
-reg [(32-1):0] x_result; // Result of instruction in X stage
-reg [(32-1):0] m_result; // Result of instruction in M stage
-reg [(32-1):0] w_result; // Result of instruction in W stage
-
-reg [(32-1):0] operand_0_x; // Operand 0 for X stage instruction
-reg [(32-1):0] operand_1_x; // Operand 1 for X stage instruction
-reg [(32-1):0] store_operand_x; // Data read from register to store
-reg [(32-1):0] operand_m; // Operand for M stage instruction
-reg [(32-1):0] operand_w; // Operand for W stage instruction
-
-// To/from register file
-reg [(32-1):0] reg_data_live_0;
-reg [(32-1):0] reg_data_live_1;
-reg use_buf; // Whether to use reg_data_live or reg_data_buf
-reg [(32-1):0] reg_data_buf_0;
-reg [(32-1):0] reg_data_buf_1;
-wire [(32-1):0] reg_data_0; // Register file read port 0 data
-wire [(32-1):0] reg_data_1; // Register file read port 1 data
-reg [(32-1):0] bypass_data_0; // Register value 0 after bypassing
-reg [(32-1):0] bypass_data_1; // Register value 1 after bypassing
-wire reg_write_enable_q_w;
-
-reg interlock; // Indicates pipeline should be stalled because of a read-after-write hazzard
-
-wire stall_a; // Stall instruction in A pipeline stage
-wire stall_f; // Stall instruction in F pipeline stage
-wire stall_d; // Stall instruction in D pipeline stage
-wire stall_x; // Stall instruction in X pipeline stage
-wire stall_m; // Stall instruction in M pipeline stage
-
-// To/from adder
-wire adder_op_d; // Whether to add or subtract
-reg adder_op_x;
-reg adder_op_x_n; // Inverted version of adder_op_x
-wire [(32-1):0] adder_result_x; // Result from adder
-wire adder_overflow_x; // Whether a signed overflow occured
-wire adder_carry_n_x; // Whether a carry was generated
-
-// To/from logical operations unit
-wire [3:0] logic_op_d; // Which operation to perform
-reg [3:0] logic_op_x;
-wire [(32-1):0] logic_result_x; // Result of logical operation
-
-// From sign-extension unit
-wire [(32-1):0] sextb_result_x; // Result of byte sign-extension
-wire [(32-1):0] sexth_result_x; // Result of half-word sign-extenstion
-wire [(32-1):0] sext_result_x; // Result of sign-extension specified by instruction
-
-// To/from shifter
-wire direction_d; // Which direction to shift in
-reg direction_x;
-wire [(32-1):0] shifter_result_m; // Result of shifter
-
-// To/from multiplier
-wire [(32-1):0] multiplier_result_w; // Result from multiplier
-
-// To/from divider
-wire divide_d; // Indicates whether to perform a divider or not
-wire divide_q_d;
-wire modulus_d;
-wire modulus_q_d;
-wire divide_by_zero_x; // Indicates an attempt was made to divide by zero
-
-// To from multi-cycle arithmetic unit
-wire mc_stall_request_x; // Multi-cycle arithmetic unit stall request
-wire [(32-1):0] mc_result_x;
-
-// From CSRs
-wire [(32-1):0] interrupt_csr_read_data_x;// Data read from interrupt CSRs
-wire [(32-1):0] cfg; // Configuration CSR
-wire [(32-1):0] cfg2; // Extended Configuration CSR
-wire [(32-1):0] psw; // Processor Status Word CSR
-reg [(32-1):0] csr_read_data_x; // Data read from CSRs
-
-// To/from instruction unit
-wire [((32-2)+2-1):2] pc_f; // PC of instruction in F stage
-wire [((32-2)+2-1):2] pc_d; // PC of instruction in D stage
-wire [((32-2)+2-1):2] pc_x; // PC of instruction in X stage
-wire [((32-2)+2-1):2] pc_m; // PC of instruction in M stage
-wire [((32-2)+2-1):2] pc_w; // PC of instruction in W stage
-wire [(32-1):0] instruction_f; // Instruction in F stage
-//pragma attribute instruction_d preserve_signal true
-//pragma attribute instruction_d preserve_driver true
-wire [(32-1):0] instruction_d; // Instruction in D stage
-wire iflush; // Flush instruction cache
-wire icache_stall_request; // Stall pipeline because instruction cache is busy
-wire icache_restart_request; // Restart instruction that caused an instruction cache miss
-wire icache_refill_request; // Request to refill instruction cache
-wire icache_refilling; // Indicates the instruction cache is being refilled
-
-// To/from load/store unit
-wire dflush_x; // Flush data cache
-reg dflush_m;
-wire dcache_stall_request; // Stall pipeline because data cache is busy
-wire dcache_restart_request; // Restart instruction that caused a data cache miss
-wire dcache_refill_request; // Request to refill data cache
-wire dcache_refilling; // Indicates the data cache is being refilled
-wire [(32-1):0] load_data_w; // Result of a load instruction
-wire stall_wb_load; // Stall pipeline because of a load via the data Wishbone interface
-
-// To/from JTAG interface
-
-// Hazzard detection
-wire raw_x_0; // RAW hazzard between instruction in X stage and read port 0
-wire raw_x_1; // RAW hazzard between instruction in X stage and read port 1
-wire raw_m_0; // RAW hazzard between instruction in M stage and read port 0
-wire raw_m_1; // RAW hazzard between instruction in M stage and read port 1
-wire raw_w_0; // RAW hazzard between instruction in W stage and read port 0
-wire raw_w_1; // RAW hazzard between instruction in W stage and read port 1
-
-// Control flow
-wire cmp_zero; // Result of comparison is zero
-wire cmp_negative; // Result of comparison is negative
-wire cmp_overflow; // Comparison produced an overflow
-wire cmp_carry_n; // Comparison produced a carry, inverted
-reg condition_met_x; // Condition of branch instruction is met
-reg condition_met_m;
-wire branch_taken_m; // Branch is taken in M stage
-
-wire kill_f; // Kill instruction in F stage
-wire kill_d; // Kill instruction in D stage
-wire kill_x; // Kill instruction in X stage
-wire kill_m; // Kill instruction in M stage
-wire kill_w; // Kill instruction in W stage
-
-reg [((32-2)+2-1):(4+3+2)] eba; // Exception Base Address (EBA) CSR
-reg [((32-2)+2-1):(4+3+2)] deba; // Debug Exception Base Address (DEBA) CSR
-reg [(4-1):0] eid_x; // Exception ID in X stage
-
-wire dc_ss; // Is single-step enabled
-wire dc_re; // Remap all exceptions
-wire exception_x; // An exception occured in the X stage
-reg exception_m; // An instruction that caused an exception is in the M stage
-wire debug_exception_x; // Indicates if a debug exception has occured
-reg debug_exception_m;
-reg debug_exception_w;
-wire debug_exception_q_w;
-wire non_debug_exception_x; // Indicates if a non debug exception has occured
-reg non_debug_exception_m;
-reg non_debug_exception_w;
-wire non_debug_exception_q_w;
-
-wire interrupt_exception; // Indicates if an interrupt exception has occured
-wire breakpoint_exception; // Indicates if a breakpoint exception has occured
-wire watchpoint_exception; // Indicates if a watchpoint exception has occured
-wire instruction_bus_error_exception; // Indicates if an instruction bus error exception has occured
-wire data_bus_error_exception; // Indicates if a data bus error exception has occured
-wire divide_by_zero_exception; // Indicates if a divide by zero exception has occured
-wire system_call_exception; // Indicates if a system call exception has occured
-
-reg data_bus_error_seen; // Indicates if a data bus error was seen
-
-reg ext_break_r;
-
-reg itlbe; // Instruction TLB enable
-reg dtlbe; // Data TLB enable
-reg usr; // User mode
-reg eitlbe; // Exception instruction enable
-reg edtlbe; // Exception data TLB enable
-reg eusr; // Exception user mode
-reg bitlbe; // Breakpoint instruction TLB enable
-reg bdtlbe; // Breakpoint data TLB enable
-reg busr; // Breakpoint user mode
-
-reg itlb_invalidate; // Invalidate an ITLB entry
-reg itlb_flush; // Flush all ITLB entries
-reg itlb_update; // Update an ITLB entry
-reg dtlb_invalidate; // Invalidate a DTLB entry
-reg dtlb_flush; // Flush all DTLB entries
-reg dtlb_update; // Update an DTLB entry
-reg [(32-1):0] tlbpaddr; // TLBPADDR CSR
-reg [(32-1):0] tlbvaddr; // TLBVADDR CSR
-reg [(32-1):0] tlbbadvaddr; // TLBBADVADDR CSR
-wire [(32-1):0] dtlb_miss_vfn; // VFN of the missed address
-wire [(32-1):0] itlb_miss_vfn; // VFN of the missed instruction
-wire itlb_miss_x; // Indicates if an ITLB miss has occured in the X stage
-wire itlb_stall_request; // Stall pipeline because instruction TLB is busy
-wire dtlb_miss_x; // Indicates if an DTLB miss has occured in the X stage
-wire dtlb_fault_x; // Indicates if an DTLB fault has occured in the X stage
-wire dtlb_stall_request; // Stall pipeline because data TLB is busy
-
-wire itlb_miss_exception; // Indicates if an ITLB miss exception has occured
-wire itlb_exception; // Indicates if an ITLB exception has occured
-wire dtlb_miss_exception; // Indicates if a DTLB miss exception has occured
-wire dtlb_fault_exception; // Indicates if a DTLB fault exception has occured
-wire dtlb_exception; // Indicates if a DTLB exception has occured
-wire privilege_exception; // Indicates if a privilege exception has occured
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-// Instruction unit
-lm32_instruction_unit #(
- .eba_reset (eba_reset),
- .associativity (icache_associativity),
- .sets (icache_sets),
- .bytes_per_line (icache_bytes_per_line),
- .base_address (icache_base_address),
- .limit (icache_limit)
- ) instruction_unit (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- // From pipeline
- .stall_a (stall_a),
- .stall_f (stall_f),
- .stall_d (stall_d),
- .stall_x (stall_x),
- .stall_m (stall_m),
- .valid_f (valid_f),
- .valid_d (valid_d),
- .kill_f (kill_f),
- .branch_predict_taken_d (branch_predict_taken_d),
- .branch_predict_address_d (branch_predict_address_d),
- .exception_m (exception_m),
- .branch_taken_m (branch_taken_m),
- .branch_mispredict_taken_m (branch_mispredict_taken_m),
- .branch_target_m (branch_target_m),
- .iflush (iflush),
- .dcache_restart_request (dcache_restart_request),
- .dcache_refill_request (dcache_refill_request),
- .dcache_refilling (dcache_refilling),
- .itlb_enable (itlbe),
- .tlbpaddr (tlbpaddr),
- .tlbvaddr (tlbvaddr),
- .itlb_update (itlb_update),
- .itlb_flush (itlb_flush),
- .itlb_invalidate (itlb_invalidate),
- // From Wishbone
- .i_dat_i (I_DAT_I),
- .i_ack_i (I_ACK_I),
- .i_err_i (I_ERR_I),
- // ----- Outputs -------
- // To pipeline
- .pc_f (pc_f),
- .pc_d (pc_d),
- .pc_x (pc_x),
- .pc_m (pc_m),
- .pc_w (pc_w),
- .icache_stall_request (icache_stall_request),
- .icache_restart_request (icache_restart_request),
- .icache_refill_request (icache_refill_request),
- .icache_refilling (icache_refilling),
- .itlb_stall_request (itlb_stall_request),
- .itlb_miss_vfn (itlb_miss_vfn),
- .itlb_miss_x (itlb_miss_x),
- // To Wishbone
- .i_dat_o (I_DAT_O),
- .i_adr_o (I_ADR_O),
- .i_cyc_o (I_CYC_O),
- .i_sel_o (I_SEL_O),
- .i_stb_o (I_STB_O),
- .i_we_o (I_WE_O),
- .i_cti_o (I_CTI_O),
- .i_lock_o (I_LOCK_O),
- .i_bte_o (I_BTE_O),
- .bus_error_d (bus_error_d),
- .instruction_f (instruction_f),
- .instruction_d (instruction_d)
- );
-
-// Instruction decoder
-lm32_decoder decoder (
- // ----- Inputs -------
- .instruction (instruction_d),
- // ----- Outputs -------
- .d_result_sel_0 (d_result_sel_0_d),
- .d_result_sel_1 (d_result_sel_1_d),
- .x_result_sel_csr (x_result_sel_csr_d),
- .x_result_sel_mc_arith (x_result_sel_mc_arith_d),
- .x_result_sel_sext (x_result_sel_sext_d),
- .x_result_sel_logic (x_result_sel_logic_d),
- .x_result_sel_add (x_result_sel_add_d),
- .m_result_sel_compare (m_result_sel_compare_d),
- .m_result_sel_shift (m_result_sel_shift_d),
- .w_result_sel_load (w_result_sel_load_d),
- .w_result_sel_mul (w_result_sel_mul_d),
- .x_bypass_enable (x_bypass_enable_d),
- .m_bypass_enable (m_bypass_enable_d),
- .read_enable_0 (read_enable_0_d),
- .read_idx_0 (read_idx_0_d),
- .read_enable_1 (read_enable_1_d),
- .read_idx_1 (read_idx_1_d),
- .write_enable (write_enable_d),
- .write_idx (write_idx_d),
- .immediate (immediate_d),
- .branch_offset (branch_offset_d),
- .load (load_d),
- .store (store_d),
- .size (size_d),
- .sign_extend (sign_extend_d),
- .adder_op (adder_op_d),
- .logic_op (logic_op_d),
- .direction (direction_d),
- .divide (divide_d),
- .modulus (modulus_d),
- .branch (branch_d),
- .bi_unconditional (bi_unconditional),
- .bi_conditional (bi_conditional),
- .branch_reg (branch_reg_d),
- .condition (condition_d),
- .break_opcode (break_d),
- .scall (scall_d),
- .eret (eret_d),
- .bret (bret_d),
- .csr_write_enable (csr_write_enable_d)
- );
-
-// Load/store unit
-lm32_load_store_unit #(
- .associativity (dcache_associativity),
- .sets (dcache_sets),
- .bytes_per_line (dcache_bytes_per_line),
- .base_address (dcache_base_address),
- .limit (dcache_limit)
- ) load_store_unit (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- // From pipeline
- .stall_a (stall_a),
- .stall_x (stall_x),
- .stall_m (stall_m),
- .kill_m (kill_m),
- .exception_m (exception_m),
- .store_operand_x (store_operand_x),
- .load_store_address_x (adder_result_x),
- .load_store_address_m (operand_m),
- .load_store_address_w (operand_w[1:0]),
- .load_d (load_d),
- .store_d (store_d),
- .load_x (load_x),
- .store_x (store_x),
- .load_q_x (load_q_x),
- .store_q_x (store_q_x),
- .load_q_m (load_q_m),
- .store_q_m (store_q_m),
- .sign_extend_x (sign_extend_x),
- .size_x (size_x),
- .dflush (dflush_m),
- .dtlb_enable (dtlbe),
- .tlbpaddr (tlbpaddr),
- .tlbvaddr (tlbvaddr),
- .dtlb_update (dtlb_update),
- .dtlb_flush (dtlb_flush),
- .dtlb_invalidate (dtlb_invalidate),
- // From Wishbone
- .d_dat_i (D_DAT_I),
- .d_ack_i (D_ACK_I),
- .d_err_i (D_ERR_I),
- .d_rty_i (D_RTY_I),
- // ----- Outputs -------
- // To pipeline
- .dcache_refill_request (dcache_refill_request),
- .dcache_restart_request (dcache_restart_request),
- .dcache_stall_request (dcache_stall_request),
- .dcache_refilling (dcache_refilling),
- .load_data_w (load_data_w),
- .stall_wb_load (stall_wb_load),
- .dtlb_stall_request (dtlb_stall_request),
- .dtlb_miss_vfn (dtlb_miss_vfn),
- .dtlb_miss_x (dtlb_miss_x),
- .dtlb_fault_x (dtlb_fault_x),
- // To Wishbone
- .d_dat_o (D_DAT_O),
- .d_adr_o (D_ADR_O),
- .d_cyc_o (D_CYC_O),
- .d_sel_o (D_SEL_O),
- .d_stb_o (D_STB_O),
- .d_we_o (D_WE_O),
- .d_cti_o (D_CTI_O),
- .d_lock_o (D_LOCK_O),
- .d_bte_o (D_BTE_O)
- );
-
-// Adder
-lm32_adder adder (
- // ----- Inputs -------
- .adder_op_x (adder_op_x),
- .adder_op_x_n (adder_op_x_n),
- .operand_0_x (operand_0_x),
- .operand_1_x (operand_1_x),
- // ----- Outputs -------
- .adder_result_x (adder_result_x),
- .adder_carry_n_x (adder_carry_n_x),
- .adder_overflow_x (adder_overflow_x)
- );
-
-// Logic operations
-lm32_logic_op logic_op (
- // ----- Inputs -------
- .logic_op_x (logic_op_x),
- .operand_0_x (operand_0_x),
-
- .operand_1_x (operand_1_x),
- // ----- Outputs -------
- .logic_result_x (logic_result_x)
- );
-
-// Pipelined barrel-shifter
-lm32_shifter shifter (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- .stall_x (stall_x),
- .direction_x (direction_x),
- .sign_extend_x (sign_extend_x),
- .operand_0_x (operand_0_x),
- .operand_1_x (operand_1_x),
- // ----- Outputs -------
- .shifter_result_m (shifter_result_m)
- );
-
-// Pipeline fixed-point multiplier
-lm32_multiplier multiplier (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- .stall_x (stall_x),
- .stall_m (stall_m),
- .operand_0 (d_result_0),
- .operand_1 (d_result_1),
- // ----- Outputs -------
- .result (multiplier_result_w)
- );
-
-// Multi-cycle arithmetic
-lm32_mc_arithmetic mc_arithmetic (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- .stall_d (stall_d),
- .kill_x (kill_x),
- .divide_d (divide_q_d),
- .modulus_d (modulus_q_d),
- .operand_0_d (d_result_0),
- .operand_1_d (d_result_1),
- // ----- Outputs -------
- .result_x (mc_result_x),
- .divide_by_zero_x (divide_by_zero_x),
- .stall_request_x (mc_stall_request_x)
- );
-
-// Interrupt unit
-lm32_interrupt interrupt_unit (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- // From external devices
- .interrupt (interrupt),
- // From pipeline
- .stall_x (stall_x),
- .non_debug_exception (non_debug_exception_q_w),
- .debug_exception (debug_exception_q_w),
- .eret_q_x (eret_k_q_x),
- .bret_q_x (bret_k_q_x),
- .csr (csr_x),
- .csr_write_data (operand_1_x),
- .csr_write_enable (csr_write_enable_k_q_x),
- // ----- Outputs -------
- .interrupt_exception (interrupt_exception),
- // To pipeline
- .csr_read_data (interrupt_csr_read_data_x)
- );
-
-
-// Debug unit
-lm32_debug #(
- .breakpoints (breakpoints),
- .watchpoints (watchpoints)
- ) hw_debug (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- .pc_x (pc_x),
- .load_x (load_x),
- .store_x (store_x),
- .load_store_address_x (adder_result_x),
- .csr_write_enable_x (csr_write_enable_k_q_x),
- .csr_write_data (operand_1_x),
- .csr_x (csr_x),
- .eret_q_x (eret_k_q_x),
- .bret_q_x (bret_k_q_x),
- .stall_x (stall_x),
- .exception_x (exception_x),
- .q_x (q_x),
- .dcache_refill_request (dcache_refill_request),
- // ----- Outputs -------
- .dc_ss (dc_ss),
- .dc_re (dc_re),
- .bp_match (bp_match),
- .wp_match (wp_match)
- );
-
-// Register file
-
- /*----------------------------------------------------------------------
- Register File is implemented using EBRs. There can be three accesses to
- the register file in each cycle: two reads and one write. On-chip block
- RAM has two read/write ports. To accomodate three accesses, two on-chip
- block RAMs are used (each register file "write" is made to both block
- RAMs).
-
- One limitation of the on-chip block RAMs is that one cannot perform a
- read and write to same location in a cycle (if this is done, then the
- data read out is indeterminate).
- ----------------------------------------------------------------------*/
- wire [31:0] regfile_data_0, regfile_data_1;
- reg [31:0] w_result_d;
- reg regfile_raw_0, regfile_raw_0_nxt;
- reg regfile_raw_1, regfile_raw_1_nxt;
-
- /*----------------------------------------------------------------------
- Check if read and write is being performed to same register in current
- cycle? This is done by comparing the read and write IDXs.
- ----------------------------------------------------------------------*/
- always @(reg_write_enable_q_w or write_idx_w or instruction_f)
- begin
- if (reg_write_enable_q_w
- && (write_idx_w == instruction_f[25:21]))
- regfile_raw_0_nxt = 1'b1;
- else
- regfile_raw_0_nxt = 1'b0;
-
- if (reg_write_enable_q_w
- && (write_idx_w == instruction_f[20:16]))
- regfile_raw_1_nxt = 1'b1;
- else
- regfile_raw_1_nxt = 1'b0;
- end
-
- /*----------------------------------------------------------------------
- Select latched (delayed) write value or data from register file. If
- read in previous cycle was performed to register written to in same
- cycle, then latched (delayed) write value is selected.
- ----------------------------------------------------------------------*/
- always @(regfile_raw_0 or w_result_d or regfile_data_0)
- if (regfile_raw_0)
- reg_data_live_0 = w_result_d;
- else
- reg_data_live_0 = regfile_data_0;
-
- /*----------------------------------------------------------------------
- Select latched (delayed) write value or data from register file. If
- read in previous cycle was performed to register written to in same
- cycle, then latched (delayed) write value is selected.
- ----------------------------------------------------------------------*/
- always @(regfile_raw_1 or w_result_d or regfile_data_1)
- if (regfile_raw_1)
- reg_data_live_1 = w_result_d;
- else
- reg_data_live_1 = regfile_data_1;
-
- /*----------------------------------------------------------------------
- Latch value written to register file
- ----------------------------------------------------------------------*/
- always @(posedge clk_i )
- if (rst_i == 1'b1)
- begin
- regfile_raw_0 <= 1'b0;
- regfile_raw_1 <= 1'b0;
- w_result_d <= 32'b0;
- end
- else
- begin
- regfile_raw_0 <= regfile_raw_0_nxt;
- regfile_raw_1 <= regfile_raw_1_nxt;
- w_result_d <= w_result;
- end
-
- /*----------------------------------------------------------------------
- Register file instantiation as Pseudo-Dual Port EBRs.
- ----------------------------------------------------------------------*/
- // Modified by GSI: removed non-portable RAM instantiation
- lm32_ram
- #(
- // ----- Parameters -----
- .data_width(32),
- .address_width(5)
- )
- reg_0
- (
- // ----- Inputs -----
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .enable_read (1'b1),
- .read_address (instruction_f[25:21]),
- .enable_write (1'b1),
- .write_address (write_idx_w),
- .write_data (w_result),
- .write_enable (reg_write_enable_q_w),
- // ----- Outputs -----
- .read_data (regfile_data_0)
- );
-
- lm32_ram
- #(
- .data_width(32),
- .address_width(5)
- )
- reg_1
- (
- // ----- Inputs -----
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .enable_read (1'b1),
- .read_address (instruction_f[20:16]),
- .enable_write (1'b1),
- .write_address (write_idx_w),
- .write_data (w_result),
- .write_enable (reg_write_enable_q_w),
- // ----- Outputs -----
- .read_data (regfile_data_1)
- );
-
-
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Select between buffered and live data from register file
-assign reg_data_0 = use_buf ? reg_data_buf_0 : reg_data_live_0;
-assign reg_data_1 = use_buf ? reg_data_buf_1 : reg_data_live_1;
-
-// Detect read-after-write hazzards
-assign raw_x_0 = (write_idx_x == read_idx_0_d) && (write_enable_q_x == 1'b1);
-assign raw_m_0 = (write_idx_m == read_idx_0_d) && (write_enable_q_m == 1'b1);
-assign raw_w_0 = (write_idx_w == read_idx_0_d) && (write_enable_q_w == 1'b1);
-assign raw_x_1 = (write_idx_x == read_idx_1_d) && (write_enable_q_x == 1'b1);
-assign raw_m_1 = (write_idx_m == read_idx_1_d) && (write_enable_q_m == 1'b1);
-assign raw_w_1 = (write_idx_w == read_idx_1_d) && (write_enable_q_w == 1'b1);
-
-// Interlock detection - Raise an interlock for RAW hazzards
-always @(*)
-begin
- if ( ( (x_bypass_enable_x == 1'b0)
- && ( ((read_enable_0_d == 1'b1) && (raw_x_0 == 1'b1))
- || ((read_enable_1_d == 1'b1) && (raw_x_1 == 1'b1))
- )
- )
- || ( (m_bypass_enable_m == 1'b0)
- && ( ((read_enable_0_d == 1'b1) && (raw_m_0 == 1'b1))
- || ((read_enable_1_d == 1'b1) && (raw_m_1 == 1'b1))
- )
- )
- )
- interlock = 1'b1;
- else
- interlock = 1'b0;
-end
-
-// Bypass for reg port 0
-always @(*)
-begin
- if (raw_x_0 == 1'b1)
- bypass_data_0 = x_result;
- else if (raw_m_0 == 1'b1)
- bypass_data_0 = m_result;
- else if (raw_w_0 == 1'b1)
- bypass_data_0 = w_result;
- else
- bypass_data_0 = reg_data_0;
-end
-
-// Bypass for reg port 1
-always @(*)
-begin
- if (raw_x_1 == 1'b1)
- bypass_data_1 = x_result;
- else if (raw_m_1 == 1'b1)
- bypass_data_1 = m_result;
- else if (raw_w_1 == 1'b1)
- bypass_data_1 = w_result;
- else
- bypass_data_1 = reg_data_1;
-end
-
- /*----------------------------------------------------------------------
- Branch prediction is performed in D stage of pipeline. Only PC-relative
- branches are predicted: forward-pointing conditional branches are not-
- taken, while backward-pointing conditional branches are taken.
- Unconditional branches are always predicted taken!
- ----------------------------------------------------------------------*/
- assign branch_predict_d = bi_unconditional | bi_conditional;
- assign branch_predict_taken_d = bi_unconditional ? 1'b1 : (bi_conditional ? instruction_d[15] : 1'b0);
-
- // Compute branch target address: Branch PC PLUS Offset
- assign branch_target_d = pc_d + branch_offset_d;
-
- // Compute fetch address. Address of instruction sequentially after the
- // branch if branch is not taken. Target address of branch is branch is
- // taken
- assign branch_predict_address_d = branch_predict_taken_d ? branch_target_d : pc_f;
-
-// D stage result selection
-always @(*)
-begin
- d_result_0 = d_result_sel_0_d[0] ? {pc_f, 2'b00} : bypass_data_0;
- case (d_result_sel_1_d)
- 2'b00: d_result_1 = {32{1'b0}};
- 2'b01: d_result_1 = bypass_data_1;
- 2'b10: d_result_1 = immediate_d;
- default: d_result_1 = {32{1'bx}};
- endcase
-end
-
-
-// Sign-extension
-assign sextb_result_x = {{24{operand_0_x[7]}}, operand_0_x[7:0]};
-assign sexth_result_x = {{16{operand_0_x[15]}}, operand_0_x[15:0]};
-assign sext_result_x = size_x == 2'b00 ? sextb_result_x : sexth_result_x;
-
-
-// Condition evaluation
-assign cmp_zero = operand_0_x == operand_1_x;
-assign cmp_negative = adder_result_x[32-1];
-assign cmp_overflow = adder_overflow_x;
-assign cmp_carry_n = adder_carry_n_x;
-always @(*)
-begin
- case (condition_x)
- 3'b000: condition_met_x = 1'b1;
- 3'b110: condition_met_x = 1'b1;
- 3'b001: condition_met_x = cmp_zero;
- 3'b111: condition_met_x = !cmp_zero;
- 3'b010: condition_met_x = !cmp_zero && (cmp_negative == cmp_overflow);
- 3'b101: condition_met_x = cmp_carry_n && !cmp_zero;
- 3'b011: condition_met_x = cmp_negative == cmp_overflow;
- 3'b100: condition_met_x = cmp_carry_n;
- default: condition_met_x = 1'bx;
- endcase
-end
-
-// X stage result selection
-always @(*)
-begin
- x_result = x_result_sel_add_x ? adder_result_x
- : x_result_sel_csr_x ? csr_read_data_x
- : x_result_sel_sext_x ? sext_result_x
- : x_result_sel_mc_arith_x ? mc_result_x
- : logic_result_x;
-end
-
-// M stage result selection
-always @(*)
-begin
- m_result = m_result_sel_compare_m ? {{32-1{1'b0}}, condition_met_m}
- : m_result_sel_shift_m ? shifter_result_m
- : operand_m;
-end
-
-// W stage result selection
-always @(*)
-begin
- w_result = w_result_sel_load_w ? load_data_w
- : w_result_sel_mul_w ? multiplier_result_w
- : operand_w;
-end
-
-
-// Indicate when a branch should be taken in M stage (exceptions are a type of branch)
-assign branch_taken_m = (stall_m == 1'b0)
- && ( ( (branch_m == 1'b1)
- && (valid_m == 1'b1)
- && ( ( (condition_met_m == 1'b1)
- && (branch_predict_taken_m == 1'b0)
- )
- || ( (condition_met_m == 1'b0)
- && (branch_predict_m == 1'b1)
- && (branch_predict_taken_m == 1'b1)
- )
- )
- )
- || (exception_m == 1'b1)
- );
-
-// Indicate when a branch in M stage is mispredicted as being taken
-assign branch_mispredict_taken_m = (condition_met_m == 1'b0)
- && (branch_predict_m == 1'b1)
- && (branch_predict_taken_m == 1'b1);
-
-// Indicate when a branch in M stage will cause flush in X stage
-assign branch_flushX_m = (stall_m == 1'b0)
- && ( ( (branch_m == 1'b1)
- && (valid_m == 1'b1)
- && ( (condition_met_m == 1'b1)
- || ( (condition_met_m == 1'b0)
- && (branch_predict_m == 1'b1)
- && (branch_predict_taken_m == 1'b1)
- )
- )
- )
- || (exception_m == 1'b1)
- );
-
-// Generate signal that will kill instructions in each pipeline stage when necessary
-assign kill_f = ( (valid_d == 1'b1)
- && (branch_predict_taken_d == 1'b1)
- )
- || (branch_taken_m == 1'b1)
- || (icache_refill_request == 1'b1)
- || (dcache_refill_request == 1'b1)
- || (itlb_miss_exception == 1'b1)
- ;
-assign kill_d = (branch_taken_m == 1'b1)
- || (icache_refill_request == 1'b1)
- || (dcache_refill_request == 1'b1)
- || (itlb_miss_exception == 1'b1)
- ;
-assign kill_x = (branch_flushX_m == 1'b1)
- || (dcache_refill_request == 1'b1)
- ;
-assign kill_m = 1'b0
- || (dcache_refill_request == 1'b1)
- ;
-assign kill_w = 1'b0
- || (dcache_refill_request == 1'b1)
- ;
-
-// Exceptions
-
-assign breakpoint_exception = ( ( (break_x == 1'b1)
- || (bp_match == 1'b1)
- )
- && (valid_x == 1'b1)
- )
- || (ext_break_r == 1'b1)
- ;
-
-assign watchpoint_exception = wp_match == 1'b1;
-
-assign instruction_bus_error_exception = ( (bus_error_x == 1'b1)
- && (valid_x == 1'b1)
- );
-assign data_bus_error_exception = data_bus_error_seen == 1'b1;
-
-assign divide_by_zero_exception = divide_by_zero_x == 1'b1;
-
-assign system_call_exception = ( (scall_x == 1'b1)
- && (valid_x == 1'b1)
- );
-
-assign itlb_miss_exception = ( (itlb_miss_x == 1'b1)
- && (itlbe == 1'b1)
- && (valid_x == 1'b1)
- );
-assign itlb_exception = (itlb_miss_exception == 1'b1);
-
-assign dtlb_miss_exception = ( (dtlb_miss_x == 1'b1)
- && (dtlbe == 1'b1)
- && (valid_x == 1'b1)
- );
-assign dtlb_fault_exception = ( (dtlb_fault_x == 1'b1)
- && (dtlbe == 1'b1)
- && (valid_x == 1'b1)
- );
-assign dtlb_exception = (dtlb_miss_exception == 1'b1) || (dtlb_fault_exception == 1'b1);
-
-assign privilege_exception = ( (usr == 1'b1)
- && ( (csr_write_enable_q_x == 1'b1)
- || (eret_q_x == 1'b1)
- || (bret_q_x == 1'b1)
- )
- );
-
-assign debug_exception_x = (breakpoint_exception == 1'b1)
- || (watchpoint_exception == 1'b1)
- ;
-
-assign non_debug_exception_x = (system_call_exception == 1'b1)
- || (instruction_bus_error_exception == 1'b1)
- || (data_bus_error_exception == 1'b1)
- || (divide_by_zero_exception == 1'b1)
- || ( (interrupt_exception == 1'b1)
- && (dc_ss == 1'b0)
- && (store_q_m == 1'b0)
- && (D_CYC_O == 1'b0)
- )
- || (itlb_exception == 1'b1)
- || (dtlb_exception == 1'b1)
- || (privilege_exception == 1'b1)
- ;
-
-assign exception_x = (debug_exception_x == 1'b1) || (non_debug_exception_x == 1'b1);
-
-// Exception ID
-always @(*)
-begin
- if (data_bus_error_exception == 1'b1)
- eid_x = 4'h4;
- else
- if (breakpoint_exception == 1'b1)
- eid_x = 4'h1;
- else
- if (data_bus_error_exception == 1'b1)
- eid_x = 4'h4;
- else
- if (instruction_bus_error_exception == 1'b1)
- eid_x = 4'h2;
- else
- if (watchpoint_exception == 1'b1)
- eid_x = 4'h3;
- else
- if (divide_by_zero_exception == 1'b1)
- eid_x = 4'h5;
- else
- if ( (interrupt_exception == 1'b1)
- && (dc_ss == 1'b0)
- )
- eid_x = 4'h6;
- else
- if (itlb_miss_exception == 1'b1)
- eid_x = 4'h8;
- else
- if (dtlb_miss_exception == 1'b1)
- eid_x = 4'h9;
- else
- if (dtlb_fault_exception == 1'b1)
- eid_x = 4'ha;
- else
- if (privilege_exception == 1'b1)
- eid_x = 4'hb;
- else
- eid_x = 4'h7;
-end
-
-// Stall generation
-
-assign stall_a = (stall_f == 1'b1);
-
-assign stall_f = (stall_d == 1'b1)
- // We need to stall for one cycle. Otherwise the icache
- // starts one cycle earlier and the restart address will be
- // wrong in case of a miss, that is one instruction is
- // skipped.
- || ( (itlbe == 1'b1)
- && ( (debug_exception_q_w == 1'b1)
- || (non_debug_exception_q_w == 1'b1)
- )
- )
- ;
-
-assign stall_d = (stall_x == 1'b1)
- || ( (interlock == 1'b1)
- && (kill_d == 1'b0)
- )
- || ( ( (eret_d == 1'b1)
- || (scall_d == 1'b1)
- || (bus_error_d == 1'b1)
- )
- && ( (load_q_x == 1'b1)
- || (load_q_m == 1'b1)
- || (store_q_x == 1'b1)
- || (store_q_m == 1'b1)
- || (D_CYC_O == 1'b1)
- )
- && (kill_d == 1'b0)
- )
- || ( ( (break_d == 1'b1)
- || (bret_d == 1'b1)
- )
- && ( (load_q_x == 1'b1)
- || (store_q_x == 1'b1)
- || (load_q_m == 1'b1)
- || (store_q_m == 1'b1)
- || (D_CYC_O == 1'b1)
- )
- && (kill_d == 1'b0)
- )
- || ( (csr_write_enable_d == 1'b1)
- && (load_q_x == 1'b1)
- )
- ;
-
-assign stall_x = (stall_m == 1'b1)
- || ( (mc_stall_request_x == 1'b1)
- && (kill_x == 1'b0)
- )
- ;
-
-assign stall_m = (stall_wb_load == 1'b1)
- || ( (D_CYC_O == 1'b1)
- && ( (store_m == 1'b1)
- /*
- Bug: Following loop does not allow interrupts to be services since
- either D_CYC_O or store_m is always high during entire duration of
- loop.
- L1: addi r1, r1, 1
- sw (r2,0), r1
- bi L1
-
- Introduce a single-cycle stall when a wishbone cycle is in progress
- and a new store instruction is in Execute stage and a interrupt
- exception has occured. This stall will ensure that D_CYC_O and
- store_m will both be low for one cycle.
- */
- || ((store_x == 1'b1) && (interrupt_exception == 1'b1))
- || (load_m == 1'b1)
- || (load_x == 1'b1)
- )
- )
- || (dcache_stall_request == 1'b1) // Need to stall in case a taken branch is in M stage and data cache is only being flush, so wont be restarted
- || (icache_stall_request == 1'b1) // Pipeline needs to be stalled otherwise branches may be lost
- || ((I_CYC_O == 1'b1) && ((branch_m == 1'b1) || (exception_m == 1'b1)))
- || (itlb_stall_request == 1'b1) // ITLB is busy
- || (dtlb_stall_request == 1'b1) // DTLB is busy or a lookup is in progress
- ;
-
-// Qualify state changing control signals
-assign q_d = (valid_d == 1'b1) && (kill_d == 1'b0);
-assign divide_q_d = (divide_d == 1'b1) && (q_d == 1'b1);
-assign modulus_q_d = (modulus_d == 1'b1) && (q_d == 1'b1);
-assign q_x = (valid_x == 1'b1) && (kill_x == 1'b0);
-assign csr_write_enable_q_x = (csr_write_enable_x == 1'b1) && (q_x == 1'b1);
-assign csr_write_enable_k_q_x = (csr_write_enable_q_x == 1'b1)
- && (usr == 1'b0)
- ;
-assign eret_q_x = (eret_x == 1'b1) && (q_x == 1'b1);
-assign eret_k_q_x = (eret_q_x == 1'b1)
- && (usr == 1'b0)
- ;
-assign bret_q_x = (bret_x == 1'b1) && (q_x == 1'b1);
-assign bret_k_q_x = (bret_q_x == 1'b1)
- && (usr == 1'b0)
- ;
-assign load_q_x = (load_x == 1'b1)
- && (q_x == 1'b1)
- && (bp_match == 1'b0)
- ;
-assign store_q_x = (store_x == 1'b1)
- && (q_x == 1'b1)
- && (bp_match == 1'b0)
- ;
-assign q_m = (valid_m == 1'b1) && (kill_m == 1'b0) && (exception_m == 1'b0);
-assign load_q_m = (load_m == 1'b1) && (q_m == 1'b1);
-assign store_q_m = (store_m == 1'b1) && (q_m == 1'b1);
-assign debug_exception_q_w = ((debug_exception_w == 1'b1) && (valid_w == 1'b1));
-assign non_debug_exception_q_w = ((non_debug_exception_w == 1'b1) && (valid_w == 1'b1));
-// Don't qualify register write enables with kill, as the signal is needed early, and it doesn't matter if the instruction is killed (except for the actual write - but that is handled separately)
-assign write_enable_q_x = (write_enable_x == 1'b1) && (valid_x == 1'b1) && (branch_flushX_m == 1'b0);
-assign write_enable_q_m = (write_enable_m == 1'b1) && (valid_m == 1'b1);
-assign write_enable_q_w = (write_enable_w == 1'b1) && (valid_w == 1'b1);
-// The enable that actually does write the registers needs to be qualified with kill
-assign reg_write_enable_q_w = (write_enable_w == 1'b1) && (kill_w == 1'b0) && (valid_w == 1'b1) || rst_i;
-
-// Configuration (CFG) CSR
-assign cfg = {
- 6'h02,
- watchpoints[3:0],
- breakpoints[3:0],
- interrupts[5:0],
- 1'b0,
- 1'b1,
- 1'b0,
- 1'b1,
- 1'b1,
- 1'b1,
- 1'b0,
- 1'b0,
- 1'b1,
- 1'b1,
- 1'b1,
- 1'b1
- };
-
-assign cfg2 = {
- 1'b1,
- 29'b0,
- 1'b0,
- 1'b0
- };
-
-assign psw = {
- {32-12{1'b0}},
- busr,
- eusr,
- usr,
- bdtlbe,
- edtlbe,
- dtlbe,
- bitlbe,
- eitlbe,
- itlbe,
- interrupt_csr_read_data_x[2:0]
- };
-
-// Cache flush
-assign iflush = ( (csr_write_enable_d == 1'b1)
- && (csr_d == 5'h3)
- && (stall_d == 1'b0)
- && (kill_d == 1'b0)
- && (valid_d == 1'b1))
-// Added by GSI: needed to flush cache after loading firmware per JTAG
- ;
-assign dflush_x = ( (csr_write_enable_q_x == 1'b1)
- && (csr_x == 5'h4))
-// Added by GSI: needed to flush cache after loading firmware per JTAG
- ;
-
-// Extract CSR index
-assign csr_d = read_idx_0_d[(5-1):0];
-
-// CSR reads
-always @(*)
-begin
- case (csr_x)
- 5'h0,
- 5'h1,
- 5'h2: csr_read_data_x = interrupt_csr_read_data_x;
- 5'h6: csr_read_data_x = cfg;
- 5'h7: csr_read_data_x = {eba, {(32-((32-2)-4-3)){1'b0}}};
- 5'h9: csr_read_data_x = {deba, {(32-((32-2)-4-3)){1'b0}}};
- 5'ha: csr_read_data_x = cfg2;
- 5'h1d: csr_read_data_x = psw;
- 5'h1e: csr_read_data_x = tlbvaddr;
- 5'h1f : csr_read_data_x = tlbbadvaddr;
-
- default: csr_read_data_x = {32{1'bx}};
- endcase
-end
-
-/////////////////////////////////////////////////////
-// Sequential Logic
-/////////////////////////////////////////////////////
-
-// Processor status word (PSW) handling
-always @(posedge clk_i )
-begin
- if (rst_i)
- begin
- itlbe <= 1'b0;
- eitlbe <= 1'b0;
- dtlbe <= 1'b0;
- edtlbe <= 1'b0;
- usr <= 1'b0;
- eusr <= 1'b0;
- bitlbe <= 1'b0;
- bdtlbe <= 1'b0;
- busr <= 1'b0;
- end
- else
- begin
- if (non_debug_exception_q_w == 1'b1)
- begin
- // Save and then clear ITLB and DTLB enable
- eitlbe <= itlbe;
- itlbe <= 1'b0;
- edtlbe <= dtlbe;
- dtlbe <= 1'b0;
- eusr <= usr;
- usr <= 1'b0;
- end
- else if (debug_exception_q_w == 1'b1)
- begin
- // Save and then clear TLB enable
- bitlbe <= itlbe;
- itlbe <= 1'b0;
- bdtlbe <= dtlbe;
- dtlbe <= 1'b0;
- busr <= usr;
- usr <= 1'b0;
- end
-
- else if (stall_x == 1'b0)
- begin
- if (eret_k_q_x == 1'b1)
- begin
- // Restore ITLB and DTLB enable
- itlbe <= eitlbe;
- dtlbe <= edtlbe;
- usr <= eusr;
- end
- else if (bret_k_q_x == 1'b1)
- begin
- // Restore ITLB and DTLB enable
- itlbe <= bitlbe;
- dtlbe <= bdtlbe;
- usr <= busr;
- end
- else if (csr_write_enable_k_q_x == 1'b1)
- begin
- // Handle wcsr write
- if (csr_x == 5'h1d)
- begin
- // ie, eie and bie are shadowed from IE register
- itlbe <= operand_1_x[3];
- eitlbe <= operand_1_x[4];
- dtlbe <= operand_1_x[6];
- edtlbe <= operand_1_x[7];
- usr <= operand_1_x[9];
- eusr <= operand_1_x[10];
- bitlbe <= operand_1_x[5];
- bdtlbe <= operand_1_x[8];
- busr <= operand_1_x[11];
- end
- end
- end
- end
-end
-
-// TLBVADDR CSR
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- itlb_flush <= 1'b0;
- itlb_invalidate <= 1'b0;
- dtlb_flush <= 1'b0;
- dtlb_invalidate <= 1'b0;
- tlbvaddr <= {32{1'b0}};
- end
- else
- begin
- itlb_flush <= 1'b0;
- itlb_invalidate <= 1'b0;
- dtlb_flush <= 1'b0;
- dtlb_invalidate <= 1'b0;
- if (stall_x == 1'b0)
- begin
- if (dtlb_exception == 1'b1)
- tlbvaddr <= {dtlb_miss_vfn[32-1:1], 1'b1};
- else if (itlb_exception == 1'b1)
- tlbvaddr <= {itlb_miss_vfn[32-1:1], 1'b0};
- else if ((csr_write_enable_k_q_x == 1'b1) && (csr_x == 5'h1e))
- begin
- tlbvaddr <= operand_1_x;
- if (operand_1_x[0] == 1'b0)
- begin
- case (operand_1_x[2:1])
- 2'h1: itlb_flush <= 1'b1;
- 2'h2: itlb_invalidate <= 1'b1;
- endcase
- end
- if (operand_1_x[0] == 1'b1)
- begin
- case (operand_1_x[2:1])
- 2'h1: dtlb_flush <= 1'b1;
- 2'h2: dtlb_invalidate <= 1'b1;
- endcase
- end
- end
- end
- end
-end
-
-// TLBPADDR CSR
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- itlb_update <= 1'b0;
- dtlb_update <= 1'b0;
- tlbpaddr <= {32{1'b0}};
- end
- else
- begin
- itlb_update <= 1'b0;
- dtlb_update <= 1'b0;
- if ((csr_write_enable_k_q_x == 1'b1) && (csr_x == 5'h1f ) && (stall_x == 1'b0))
- begin
- /* updates take change in the M stage */
- tlbpaddr <= operand_1_x;
- if (operand_1_x[0] == 1'b0)
- itlb_update <= 1'b1;
- if (operand_1_x[0] == 1'b1)
- dtlb_update <= 1'b1;
- end
- end
-end
-
-// TLBBADVADDR CSR
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- tlbbadvaddr <= {32{1'b0}};
- else
- begin
- if (stall_x == 1'b0)
- begin
- if (dtlb_exception == 1'b1)
- tlbbadvaddr <= adder_result_x;
- else if (itlb_exception == 1'b1)
- tlbbadvaddr <= {pc_x, {32-(32-2){1'b0}}};
- end
- end
-end
-
-// Exception Base Address (EBA) CSR
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- eba <= eba_reset[((32-2)+2-1):(4+3+2)];
- else
- begin
- if ((csr_write_enable_k_q_x == 1'b1) && (csr_x == 5'h7) && (stall_x == 1'b0))
- eba <= operand_1_x[((32-2)+2-1):(4+3+2)];
- end
-end
-
-// Debug Exception Base Address (DEBA) CSR
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- deba <= deba_reset[((32-2)+2-1):(4+3+2)];
- else
- begin
- if ((csr_write_enable_k_q_x == 1'b1) && (csr_x == 5'h9) && (stall_x == 1'b0))
- deba <= operand_1_x[((32-2)+2-1):(4+3+2)];
- end
-end
-
-// Cycle Counter (CC) CSR
-
-// Watch for data bus errors
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- data_bus_error_seen <= 1'b0;
- else
- begin
- // Set flag when bus error is detected
- if ((D_ERR_I == 1'b1) && (D_CYC_O == 1'b1))
- data_bus_error_seen <= 1'b1;
- // Clear flag when exception is taken
- if ((exception_m == 1'b1) && (kill_m == 1'b0))
- data_bus_error_seen <= 1'b0;
- end
-end
-
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- ext_break_r <= 1'b0;
- else
- begin
- if (ext_break == 1'b1)
- ext_break_r <= 1'b1;
- if (debug_exception_q_w == 1'b1)
- ext_break_r <= 1'b0;
- end
-end
-
-// Valid bits to indicate whether an instruction in a partcular pipeline stage is valid or not
-
-always @(*)
-begin
- if ( (icache_refill_request == 1'b1)
- || (dcache_refill_request == 1'b1)
- )
- valid_a = 1'b0;
- else if ( (icache_restart_request == 1'b1)
- || (dcache_restart_request == 1'b1)
- )
- valid_a = 1'b1;
- else
- valid_a = !icache_refilling && !dcache_refilling;
-end
-
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- valid_f <= 1'b0;
- valid_d <= 1'b0;
- valid_x <= 1'b0;
- valid_m <= 1'b0;
- valid_w <= 1'b0;
- end
- else
- begin
- if ((kill_f == 1'b1) || (stall_a == 1'b0))
- valid_f <= valid_a;
- else if (stall_f == 1'b0)
- valid_f <= 1'b0;
-
- if (kill_d == 1'b1)
- valid_d <= 1'b0;
- else if (stall_f == 1'b0)
- valid_d <= valid_f & !kill_f;
- else if (stall_d == 1'b0)
- valid_d <= 1'b0;
-
- if (stall_d == 1'b0)
- valid_x <= valid_d & !kill_d;
- else if (kill_x == 1'b1)
- valid_x <= 1'b0;
- else if (stall_x == 1'b0)
- valid_x <= 1'b0;
-
- if (kill_m == 1'b1)
- valid_m <= 1'b0;
- else if (stall_x == 1'b0)
- valid_m <= valid_x & !kill_x;
- else if (stall_m == 1'b0)
- valid_m <= 1'b0;
-
- if (stall_m == 1'b0)
- valid_w <= valid_m & !kill_m;
- else
- valid_w <= 1'b0;
- end
-end
-
-// Microcode pipeline registers
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- operand_0_x <= {32{1'b0}};
- operand_1_x <= {32{1'b0}};
- store_operand_x <= {32{1'b0}};
- branch_target_x <= {(32-2){1'b0}};
- x_result_sel_csr_x <= 1'b0;
- x_result_sel_mc_arith_x <= 1'b0;
- x_result_sel_sext_x <= 1'b0;
- x_result_sel_logic_x <= 1'b0;
- x_result_sel_add_x <= 1'b0;
- m_result_sel_compare_x <= 1'b0;
- m_result_sel_shift_x <= 1'b0;
- w_result_sel_load_x <= 1'b0;
- w_result_sel_mul_x <= 1'b0;
- x_bypass_enable_x <= 1'b0;
- m_bypass_enable_x <= 1'b0;
- write_enable_x <= 1'b0;
- write_idx_x <= {5{1'b0}};
- csr_x <= {5{1'b0}};
- load_x <= 1'b0;
- store_x <= 1'b0;
- size_x <= {2{1'b0}};
- sign_extend_x <= 1'b0;
- adder_op_x <= 1'b0;
- adder_op_x_n <= 1'b0;
- logic_op_x <= 4'h0;
- direction_x <= 1'b0;
- branch_x <= 1'b0;
- branch_predict_x <= 1'b0;
- branch_predict_taken_x <= 1'b0;
- condition_x <= 3'b000;
- break_x <= 1'b0;
- scall_x <= 1'b0;
- eret_x <= 1'b0;
- bret_x <= 1'b0;
- bus_error_x <= 1'b0;
- data_bus_error_exception_m <= 1'b0;
- csr_write_enable_x <= 1'b0;
- operand_m <= {32{1'b0}};
- branch_target_m <= {(32-2){1'b0}};
- m_result_sel_compare_m <= 1'b0;
- m_result_sel_shift_m <= 1'b0;
- w_result_sel_load_m <= 1'b0;
- w_result_sel_mul_m <= 1'b0;
- m_bypass_enable_m <= 1'b0;
- branch_m <= 1'b0;
- branch_predict_m <= 1'b0;
- branch_predict_taken_m <= 1'b0;
- exception_m <= 1'b0;
- load_m <= 1'b0;
- store_m <= 1'b0;
- write_enable_m <= 1'b0;
- write_idx_m <= {5{1'b0}};
- condition_met_m <= 1'b0;
- dflush_m <= 1'b0;
- debug_exception_m <= 1'b0;
- non_debug_exception_m <= 1'b0;
- operand_w <= {32{1'b0}};
- w_result_sel_load_w <= 1'b0;
- w_result_sel_mul_w <= 1'b0;
- write_idx_w <= {5{1'b0}};
- write_enable_w <= 1'b0;
- debug_exception_w <= 1'b0;
- non_debug_exception_w <= 1'b0;
- memop_pc_w <= {(32-2){1'b0}};
- end
- else
- begin
- // D/X stage registers
-
- if (stall_x == 1'b0)
- begin
- operand_0_x <= d_result_0;
- operand_1_x <= d_result_1;
- store_operand_x <= bypass_data_1;
- branch_target_x <= branch_reg_d == 1'b1 ? bypass_data_0[((32-2)+2-1):2] : branch_target_d;
- x_result_sel_csr_x <= x_result_sel_csr_d;
- x_result_sel_mc_arith_x <= x_result_sel_mc_arith_d;
- x_result_sel_sext_x <= x_result_sel_sext_d;
- x_result_sel_logic_x <= x_result_sel_logic_d;
- x_result_sel_add_x <= x_result_sel_add_d;
- m_result_sel_compare_x <= m_result_sel_compare_d;
- m_result_sel_shift_x <= m_result_sel_shift_d;
- w_result_sel_load_x <= w_result_sel_load_d;
- w_result_sel_mul_x <= w_result_sel_mul_d;
- x_bypass_enable_x <= x_bypass_enable_d;
- m_bypass_enable_x <= m_bypass_enable_d;
- load_x <= load_d;
- store_x <= store_d;
- branch_x <= branch_d;
- branch_predict_x <= branch_predict_d;
- branch_predict_taken_x <= branch_predict_taken_d;
- write_idx_x <= write_idx_d;
- csr_x <= csr_d;
- size_x <= size_d;
- sign_extend_x <= sign_extend_d;
- adder_op_x <= adder_op_d;
- adder_op_x_n <= ~adder_op_d;
- logic_op_x <= logic_op_d;
- direction_x <= direction_d;
- condition_x <= condition_d;
- csr_write_enable_x <= csr_write_enable_d;
- break_x <= break_d;
- scall_x <= scall_d;
- bus_error_x <= bus_error_d;
- eret_x <= eret_d;
- bret_x <= bret_d;
- write_enable_x <= write_enable_d;
- end
-
- // X/M stage registers
-
- if (stall_m == 1'b0)
- begin
- operand_m <= x_result;
- m_result_sel_compare_m <= m_result_sel_compare_x;
- m_result_sel_shift_m <= m_result_sel_shift_x;
- if (exception_x == 1'b1)
- begin
- w_result_sel_load_m <= 1'b0;
- w_result_sel_mul_m <= 1'b0;
- end
- else
- begin
- w_result_sel_load_m <= w_result_sel_load_x;
- w_result_sel_mul_m <= w_result_sel_mul_x;
- end
- m_bypass_enable_m <= m_bypass_enable_x;
- load_m <= load_x;
- store_m <= store_x;
- branch_m <= branch_x;
- branch_predict_m <= branch_predict_x;
- branch_predict_taken_m <= branch_predict_taken_x;
- // Data bus errors are generated by the wishbone and are
- // made known to the processor only in next cycle (as a
- // non-debug exception). A break instruction can be seen
- // in same cycle (causing a debug exception). Handle non
- // -debug exception first!
- if (non_debug_exception_x == 1'b1)
- write_idx_m <= 5'd30;
- else if (debug_exception_x == 1'b1)
- write_idx_m <= 5'd31;
- else
- write_idx_m <= write_idx_x;
- condition_met_m <= condition_met_x;
- if (exception_x == 1'b1)
- if ( (dc_re == 1'b1)
- || ( (debug_exception_x == 1'b1)
- && (non_debug_exception_x == 1'b0))
- )
- branch_target_m <= {deba, eid_x, {3{1'b0}}};
- else
- branch_target_m <= {eba, eid_x, {3{1'b0}}};
- else
- branch_target_m <= branch_target_x;
- dflush_m <= dflush_x;
- eret_m <= eret_k_q_x;
- bret_m <= bret_k_q_x;
- write_enable_m <= exception_x == 1'b1 ? 1'b1 : write_enable_x;
- debug_exception_m <= debug_exception_x;
- non_debug_exception_m <= non_debug_exception_x;
- end
-
- // State changing regs
- if (stall_m == 1'b0)
- begin
- if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
- exception_m <= 1'b1;
- else
- exception_m <= 1'b0;
- data_bus_error_exception_m <= (data_bus_error_exception == 1'b1)
- ;
- end
-
- // M/W stage registers
- operand_w <= exception_m == 1'b1 ? (data_bus_error_exception_m ? {memop_pc_w, 2'b00} : {pc_m, 2'b00}) : m_result;
- w_result_sel_load_w <= w_result_sel_load_m;
- w_result_sel_mul_w <= w_result_sel_mul_m;
- write_idx_w <= write_idx_m;
- write_enable_w <= write_enable_m;
- debug_exception_w <= debug_exception_m;
- non_debug_exception_w <= non_debug_exception_m;
- if ( (stall_m == 1'b0)
- && (data_bus_error_exception == 1'b0)
- && ( (load_q_m == 1'b1)
- || (store_q_m == 1'b1)
- )
- )
- memop_pc_w <= pc_m;
- end
-end
-
-// Buffer data read from register file, in case a stall occurs, and watch for
-// any writes to the modified registers
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- use_buf <= 1'b0;
- reg_data_buf_0 <= {32{1'b0}};
- reg_data_buf_1 <= {32{1'b0}};
- end
- else
- begin
- if (stall_d == 1'b0)
- use_buf <= 1'b0;
- else if (use_buf == 1'b0)
- begin
- reg_data_buf_0 <= reg_data_live_0;
- reg_data_buf_1 <= reg_data_live_1;
- use_buf <= 1'b1;
- end
- if (reg_write_enable_q_w == 1'b1)
- begin
- if (write_idx_w == read_idx_0_d)
- reg_data_buf_0 <= w_result;
- if (write_idx_w == read_idx_1_d)
- reg_data_buf_1 <= w_result;
- end
- end
-end
-
-
-
-/////////////////////////////////////////////////////
-// Behavioural Logic
-/////////////////////////////////////////////////////
-
-// synthesis translate_off
-
-// Reset register 0. Only needed for simulation.
-initial
-begin
- reg_0.mem[0] = {32{1'b0}};
- reg_1.mem[0] = {32{1'b0}};
-end
-
-// synthesis translate_on
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dcache.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dcache.v
deleted file mode 100644
index b8b47ab..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dcache.v
+++ /dev/null
@@ -1,674 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_dcache.v
-// Title : Data cache
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : Support for user-selected resource usage when implementing
-// : cache memory. Additional parameters must be defined when
-// : invoking lm32_ram.v
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-
-
-
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_dcache (
- // ----- Inputs -----
- clk_i,
- rst_i,
- stall_a,
- stall_x,
- stall_m,
- address_x,
- address_m,
- load_q_m,
- store_q_m,
- store_data,
- store_byte_select,
- refill_ready,
- refill_data,
- dflush,
- dtlb_miss_x,
- // ----- Outputs -----
- stall_request,
- restart_request,
- refill_request,
- refill_address,
- refilling,
- load_data
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter associativity = 1; // Associativity of the cache (Number of ways)
-parameter sets = 512; // Number of sets
-parameter bytes_per_line = 16; // Number of bytes per cache line
-parameter base_address = 0; // Base address of cachable memory
-parameter limit = 0; // Limit (highest address) of cachable memory
-
-localparam addr_offset_width = $clog2-2;
-localparam addr_set_width = $clog2;
-localparam addr_offset_lsb = 2;
-localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
-localparam addr_set_lsb = (addr_offset_msb+1);
-localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
-localparam addr_tag_lsb = (addr_offset_msb+1);
-localparam addr_tag_msb = $clog2;
-localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input stall_a; // Stall A stage
-input stall_x; // Stall X stage
-input stall_m; // Stall M stage
-
-input [(32-1):0] address_x; // X stage load/store address
-input [(32-1):0] address_m; // M stage load/store address
-input load_q_m; // Load instruction in M stage
-input store_q_m; // Store instruction in M stage
-input [(32-1):0] store_data; // Data to store
-input [(4-1):0] store_byte_select; // Which bytes in store data should be modified
-
-input refill_ready; // Indicates next word of refill data is ready
-input [(32-1):0] refill_data; // Refill data
-
-input dflush; // Indicates cache should be flushed
-
-input dtlb_miss_x; // Indicates if a DTLB miss has occured
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output stall_request; // Request pipeline be stalled because cache is busy
-wire stall_request;
-output restart_request; // Request to restart instruction that caused the cache miss
-reg restart_request;
-output refill_request; // Request a refill
-reg refill_request;
-output [(32-1):0] refill_address; // Address to refill from
-reg [(32-1):0] refill_address;
-output refilling; // Indicates if the cache is currently refilling
-reg refilling;
-output [(32-1):0] load_data; // Data read from cache
-wire [(32-1):0] load_data;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire read_port_enable; // Cache memory read port clock enable
-wire write_port_enable; // Cache memory write port clock enable
-wire [0:associativity-1] way_tmem_we; // Tag memory write enable
-wire [0:associativity-1] way_dmem_we; // Data memory write enable
-wire [(32-1):0] way_data[0:associativity-1]; // Data read from data memory
-wire [((addr_tag_width+1)-1):1] way_tag[0:associativity-1];// Tag read from tag memory
-wire [0:associativity-1] way_valid; // Indicates which ways are valid
-wire [0:associativity-1] way_match; // Indicates which ways matched
-wire miss; // Indicates no ways matched
-
-wire [(addr_set_width-1):0] tmem_read_address; // Tag memory read address
-wire [(addr_set_width-1):0] tmem_write_address; // Tag memory write address
-wire [((addr_offset_width+addr_set_width)-1):0] dmem_read_address; // Data memory read address
-wire [((addr_offset_width+addr_set_width)-1):0] dmem_write_address; // Data memory write address
-wire [((addr_tag_width+1)-1):0] tmem_write_data; // Tag memory write data
-reg [(32-1):0] dmem_write_data; // Data memory write data
-
-reg [2:0] state; // Current state of FSM
-wire flushing; // Indicates if cache is currently flushing
-wire check; // Indicates if cache is currently checking for hits/misses
-wire refill; // Indicates if cache is currently refilling
-
-wire valid_store; // Indicates if there is a valid store instruction
-reg [associativity-1:0] refill_way_select; // Which way should be refilled
-reg [addr_offset_msb:addr_offset_lsb] refill_offset; // Which word in cache line should be refilled
-wire last_refill; // Indicates when on last cycle of cache refill
-reg [(addr_set_width-1):0] flush_set; // Which set is currently being flushed
-
-genvar i, j;
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
- generate
- for (i = 0; i < associativity; i = i + 1)
- begin : memories
- // Way data
- if ((addr_offset_width+addr_set_width) < 11)
- begin : data_memories
- lm32_ram
- #(
- // ----- Parameters -------
- .data_width (32),
- .address_width ((addr_offset_width+addr_set_width))
-// Modified for Milkymist: removed non-portable RAM parameters
- ) way_0_data_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (dmem_read_address),
- .enable_read (read_port_enable),
- .write_address (dmem_write_address),
- .enable_write (write_port_enable),
- .write_enable (way_dmem_we[i]),
- .write_data (dmem_write_data),
- // ----- Outputs -------
- .read_data (way_data[i])
- );
- end
- else
- begin
- for (j = 0; j < 4; j = j + 1)
- begin : byte_memories
- lm32_ram
- #(
- // ----- Parameters -------
- .data_width (8),
- .address_width ((addr_offset_width+addr_set_width))
-// Modified for Milkymist: removed non-portable RAM parameters
- ) way_0_data_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (dmem_read_address),
- .enable_read (read_port_enable),
- .write_address (dmem_write_address),
- .enable_write (write_port_enable),
- .write_enable (way_dmem_we[i] & (store_byte_select[j] | refill)),
- .write_data (dmem_write_data[(j+1)*8-1:j*8]),
- // ----- Outputs -------
- .read_data (way_data[i][(j+1)*8-1:j*8])
- );
- end
- end
-
- // Way tags
- lm32_ram
- #(
- // ----- Parameters -------
- .data_width ((addr_tag_width+1)),
- .address_width (addr_set_width)
-// Modified for Milkymist: removed non-portable RAM parameters
- ) way_0_tag_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (tmem_read_address),
- .enable_read (read_port_enable),
- .write_address (tmem_write_address),
- .enable_write (1'b1),
- .write_enable (way_tmem_we[i]),
- .write_data (tmem_write_data),
- // ----- Outputs -------
- .read_data ({way_tag[i], way_valid[i]})
- );
- end
-
- endgenerate
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Compute which ways in the cache match the address being read
-generate
- for (i = 0; i < associativity; i = i + 1)
- begin : match
-assign way_match[i] = ({way_tag[i], way_valid[i]} == {address_m[addr_tag_msb:addr_tag_lsb], 1'b1});
- end
-endgenerate
-
-// Select data from way that matched the address being read
-generate
- if (associativity == 1)
- begin : data_1
-assign load_data = way_data[0];
- end
- else if (associativity == 2)
- begin : data_2
-assign load_data = way_match[0] ? way_data[0] : way_data[1];
- end
-endgenerate
-
-generate
- if ((addr_offset_width+addr_set_width) < 11)
- begin
-// Select data to write to data memories
-always @(*)
-begin
- if (refill == 1'b1)
- dmem_write_data = refill_data;
- else
- begin
- dmem_write_data[7:0] = store_byte_select[0] ? store_data[7:0] : load_data[7:0];
- dmem_write_data[15:8] = store_byte_select[1] ? store_data[15:8] : load_data[15:8];
- dmem_write_data[23:16] = store_byte_select[2] ? store_data[23:16] : load_data[23:16];
- dmem_write_data[31:24] = store_byte_select[3] ? store_data[31:24] : load_data[31:24];
- end
-end
- end
- else
- begin
-// Select data to write to data memories - FIXME: Should use different write ports on dual port RAMs, but they don't work
-always @(*)
-begin
- if (refill == 1'b1)
- dmem_write_data = refill_data;
- else
- dmem_write_data = store_data;
-end
- end
-endgenerate
-
-// Compute address to use to index into the data memories
-generate
- if (bytes_per_line > 4)
-assign dmem_write_address = (refill == 1'b1)
- ? {refill_address[addr_set_msb:addr_set_lsb], refill_offset}
- : address_m[addr_set_msb:addr_offset_lsb];
- else
-assign dmem_write_address = (refill == 1'b1)
- ? refill_address[addr_set_msb:addr_set_lsb]
- : address_m[addr_set_msb:addr_offset_lsb];
-endgenerate
-assign dmem_read_address = address_x[addr_set_msb:addr_offset_lsb];
-// Compute address to use to index into the tag memories
-assign tmem_write_address = (flushing == 1'b1)
- ? flush_set
- : refill_address[addr_set_msb:addr_set_lsb];
-assign tmem_read_address = address_x[addr_set_msb:addr_set_lsb];
-
-// Compute signal to indicate when we are on the last refill accesses
-generate
- if (bytes_per_line > 4)
-assign last_refill = refill_offset == {addr_offset_width{1'b1}};
- else
-assign last_refill = 1'b1;
-endgenerate
-
-// Compute data and tag memory access enable
-assign read_port_enable = (stall_x == 1'b0);
-assign write_port_enable = (refill_ready == 1'b1) || !stall_m;
-
-// Determine when we have a valid store
-assign valid_store = (store_q_m == 1'b1) && (check == 1'b1);
-
-// Compute data and tag memory write enables
-generate
- if (associativity == 1)
- begin : we_1
-assign way_dmem_we[0] = (refill_ready == 1'b1) || ((valid_store == 1'b1) && (way_match[0] == 1'b1));
-assign way_tmem_we[0] = (refill_ready == 1'b1) || (flushing == 1'b1);
- end
- else
- begin : we_2
-assign way_dmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || ((valid_store == 1'b1) && (way_match[0] == 1'b1));
-assign way_dmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || ((valid_store == 1'b1) && (way_match[1] == 1'b1));
-assign way_tmem_we[0] = ((refill_ready == 1'b1) && (refill_way_select[0] == 1'b1)) || (flushing == 1'b1);
-assign way_tmem_we[1] = ((refill_ready == 1'b1) && (refill_way_select[1] == 1'b1)) || (flushing == 1'b1);
- end
-endgenerate
-
-// On the last refill cycle set the valid bit, for all other writes it should be cleared
-assign tmem_write_data[0] = ((last_refill == 1'b1) || (valid_store == 1'b1)) && (flushing == 1'b0);
-assign tmem_write_data[((addr_tag_width+1)-1):1] = refill_address[addr_tag_msb:addr_tag_lsb];
-
-// Signals that indicate which state we are in
-assign flushing = state[0];
-assign check = state[1];
-assign refill = state[2];
-
-assign miss = (~(|way_match)) && (load_q_m == 1'b1) && (stall_m == 1'b0)
- && (~dtlb_miss_x)
- ;
-assign stall_request = (check == 1'b0);
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-// Record way selected for replacement on a cache miss
-generate
- if (associativity >= 2)
- begin : way_select
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
- else
- begin
- if (refill_request == 1'b1)
- refill_way_select <= {refill_way_select[0], refill_way_select[1]};
- end
-end
- end
-endgenerate
-
-// Record whether we are currently refilling
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- refilling <= 1'b0;
- else
- refilling <= refill;
-end
-
-// Instruction cache control FSM
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- state <= 3'b001;
- flush_set <= {addr_set_width{1'b1}};
- refill_request <= 1'b0;
- refill_address <= {32{1'bx}};
- restart_request <= 1'b0;
- end
- else
- begin
- case (state)
-
- // Flush the cache
- 3'b001:
- begin
- if (flush_set == {addr_set_width{1'b0}})
- state <= 3'b010;
- flush_set <= flush_set - 1'b1;
- end
-
- // Check for cache misses
- 3'b010:
- begin
- if (stall_a == 1'b0)
- restart_request <= 1'b0;
- if (miss == 1'b1)
- begin
- refill_request <= 1'b1;
- refill_address <= address_m;
- state <= 3'b100;
- end
- else if (dflush == 1'b1)
- state <= 3'b001;
- end
-
- // Refill a cache line
- 3'b100:
- begin
- refill_request <= 1'b0;
- if (refill_ready == 1'b1)
- begin
- if (last_refill == 1'b1)
- begin
- restart_request <= 1'b1;
- state <= 3'b010;
- end
- end
- end
-
- endcase
- end
-end
-
-generate
- if (bytes_per_line > 4)
- begin
-// Refill offset
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- refill_offset <= {addr_offset_width{1'b0}};
- else
- begin
- case (state)
-
- // Check for cache misses
- 3'b010:
- begin
- if (miss == 1'b1)
- refill_offset <= {addr_offset_width{1'b0}};
- end
-
- // Refill a cache line
- 3'b100:
- begin
- if (refill_ready == 1'b1)
- refill_offset <= refill_offset + 1'b1;
- end
-
- endcase
- end
-end
- end
-endgenerate
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_debug.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_debug.v
deleted file mode 100644
index 12984d7..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_debug.v
+++ /dev/null
@@ -1,477 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_debug.v
-// Title : Hardware debug registers and associated logic.
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : Fixed simulation bug which flares up when number of
-// : watchpoints is zero.
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-
-// States for single-step FSM
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_debug (
- // ----- Inputs -------
- clk_i,
- rst_i,
- pc_x,
- load_x,
- store_x,
- load_store_address_x,
- csr_write_enable_x,
- csr_write_data,
- csr_x,
- eret_q_x,
- bret_q_x,
- stall_x,
- exception_x,
- q_x,
- dcache_refill_request,
- // ----- Outputs -------
- dc_ss,
- dc_re,
- bp_match,
- wp_match
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter breakpoints = 0; // Number of breakpoint CSRs
-parameter watchpoints = 0; // Number of watchpoint CSRs
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input [((32-2)+2-1):2] pc_x; // X stage PC
-input load_x; // Load instruction in X stage
-input store_x; // Store instruction in X stage
-input [(32-1):0] load_store_address_x; // Load or store effective address
-input csr_write_enable_x; // wcsr instruction in X stage
-input [(32-1):0] csr_write_data; // Data to write to CSR
-input [(5-1):0] csr_x; // Which CSR to write
-input eret_q_x; // eret instruction in X stage
-input bret_q_x; // bret instruction in X stage
-input stall_x; // Instruction in X stage is stalled
-input exception_x; // An exception has occured in X stage
-input q_x; // Indicates the instruction in the X stage is qualified
-input dcache_refill_request; // Indicates data cache wants to be refilled
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output dc_ss; // Single-step enable
-reg dc_ss;
-output dc_re; // Remap exceptions
-reg dc_re;
-output bp_match; // Indicates a breakpoint has matched
-wire bp_match;
-output wp_match; // Indicates a watchpoint has matched
-wire wp_match;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-genvar i; // Loop index for generate statements
-
-// Debug CSRs
-
-reg [((32-2)+2-1):2] bp_a[0:breakpoints-1]; // Instruction breakpoint address
-reg bp_e[0:breakpoints-1]; // Instruction breakpoint enable
-wire [0:breakpoints-1]bp_match_n; // Indicates if a h/w instruction breakpoint matched
-
-reg [1:0] wpc_c[0:watchpoints-1]; // Watchpoint enable
-reg [(32-1):0] wp[0:watchpoints-1]; // Watchpoint address
-wire [0:watchpoints-1]wp_match_n; // Indicates if a h/w data watchpoint matched
-
-wire debug_csr_write_enable; // Debug CSR write enable (from either a wcsr instruction of external debugger)
-wire [(32-1):0] debug_csr_write_data; // Data to write to debug CSR
-wire [(5-1):0] debug_csr; // Debug CSR to write to
-
-// FIXME: Declaring this as a reg causes ModelSim 6.1.15b to crash, so use integer for now
-//reg [`LM32_DEBUG_SS_STATE_RNG] state; // State of single-step FSM
-integer state; // State of single-step FSM
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Check for breakpoints
-generate
- for (i = 0; i < breakpoints; i = i + 1)
- begin : bp_comb
-assign bp_match_n[i] = ((bp_a[i] == pc_x) && (bp_e[i] == 1'b1));
- end
-endgenerate
-generate
- if (breakpoints > 0)
-assign bp_match = (|bp_match_n) || (state == 3'b011);
- else
-assign bp_match = state == 3'b011;
-endgenerate
-
-// Check for watchpoints
-generate
- for (i = 0; i < watchpoints; i = i + 1)
- begin : wp_comb
-assign wp_match_n[i] = (wp[i] == load_store_address_x) && ((load_x & wpc_c[i][0]) | (store_x & wpc_c[i][1]));
- end
-endgenerate
-generate
- if (watchpoints > 0)
-assign wp_match = |wp_match_n;
- else
-assign wp_match = 1'b0;
-endgenerate
-
-assign debug_csr_write_enable = csr_write_enable_x;
-assign debug_csr_write_data = csr_write_data;
-assign debug_csr = csr_x;
-
-/////////////////////////////////////////////////////
-// Sequential Logic
-/////////////////////////////////////////////////////
-
-// Breakpoint address and enable CSRs
-generate
- for (i = 0; i < breakpoints; i = i + 1)
- begin : bp_seq
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- bp_a[i] <= {(32-2){1'bx}};
- bp_e[i] <= 1'b0;
- end
- else
- begin
- if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h10 + i))
- begin
- bp_a[i] <= debug_csr_write_data[((32-2)+2-1):2];
- bp_e[i] <= debug_csr_write_data[0];
- end
- end
-end
- end
-endgenerate
-
-// Watchpoint address and control flags CSRs
-generate
- for (i = 0; i < watchpoints; i = i + 1)
- begin : wp_seq
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- wp[i] <= {32{1'bx}};
- wpc_c[i] <= 2'b00;
- end
- else
- begin
- if (debug_csr_write_enable == 1'b1)
- begin
- if (debug_csr == 5'h8)
- wpc_c[i] <= debug_csr_write_data[3+i*2:2+i*2];
- if (debug_csr == 5'h18 + i)
- wp[i] <= debug_csr_write_data;
- end
- end
-end
- end
-endgenerate
-
-// Remap exceptions control bit
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- dc_re <= 1'b0;
- else
- begin
- if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
- dc_re <= debug_csr_write_data[1];
- end
-end
-
-// Single-step control flag
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- state <= 3'b000;
- dc_ss <= 1'b0;
- end
- else
- begin
- if ((debug_csr_write_enable == 1'b1) && (debug_csr == 5'h8))
- begin
- dc_ss <= debug_csr_write_data[0];
- if (debug_csr_write_data[0] == 1'b0)
- state <= 3'b000;
- else
- state <= 3'b001;
- end
- case (state)
- 3'b001:
- begin
- // Wait for eret or bret instruction to be executed
- if ( ( (eret_q_x == 1'b1)
- || (bret_q_x == 1'b1)
- )
- && (stall_x == 1'b0)
- )
- state <= 3'b010;
- end
- 3'b010:
- begin
- // Wait for an instruction to be executed
- if ((q_x == 1'b1) && (stall_x == 1'b0))
- state <= 3'b011;
- end
- 3'b011:
- begin
- // Wait for exception to be raised
- if (dcache_refill_request == 1'b1)
- state <= 3'b010;
- else
- if ((exception_x == 1'b1) && (q_x == 1'b1) && (stall_x == 1'b0))
- begin
- dc_ss <= 1'b0;
- state <= 3'b100;
- end
- end
- 3'b100:
- begin
- // Watch to see if stepped instruction is restarted due to a cache miss
- if (dcache_refill_request == 1'b1)
- state <= 3'b010;
- else
- state <= 3'b000;
- end
- endcase
- end
-end
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_decoder.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_decoder.v
deleted file mode 100644
index d5babdd..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_decoder.v
+++ /dev/null
@@ -1,557 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_decoder.v
-// Title : Instruction decoder
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : Support for static branch prediction. Information about
-// : branch type is generated and passed on to the predictor.
-// Version : 3.2
-// : No change
-// Version : 3.3
-// : Renamed port names that conflict with keywords reserved
-// : in System-Verilog.
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-// Index of opcode field in an instruction
-
-// Opcodes - Some are only listed as 5 bits as their MSB is a don't care
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_decoder (
- // ----- Inputs -------
- instruction,
- // ----- Outputs -------
- d_result_sel_0,
- d_result_sel_1,
- x_result_sel_csr,
- x_result_sel_mc_arith,
- x_result_sel_sext,
- x_result_sel_logic,
- x_result_sel_add,
- m_result_sel_compare,
- m_result_sel_shift,
- w_result_sel_load,
- w_result_sel_mul,
- x_bypass_enable,
- m_bypass_enable,
- read_enable_0,
- read_idx_0,
- read_enable_1,
- read_idx_1,
- write_enable,
- write_idx,
- immediate,
- branch_offset,
- load,
- store,
- size,
- sign_extend,
- adder_op,
- logic_op,
- direction,
- divide,
- modulus,
- branch,
- branch_reg,
- condition,
- bi_conditional,
- bi_unconditional,
- break_opcode,
- scall,
- eret,
- bret,
- csr_write_enable
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input [(32-1):0] instruction; // Instruction to decode
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [0:0] d_result_sel_0;
-reg [0:0] d_result_sel_0;
-output [1:0] d_result_sel_1;
-reg [1:0] d_result_sel_1;
-output x_result_sel_csr;
-reg x_result_sel_csr;
-output x_result_sel_mc_arith;
-reg x_result_sel_mc_arith;
-output x_result_sel_sext;
-reg x_result_sel_sext;
-output x_result_sel_logic;
-reg x_result_sel_logic;
-output x_result_sel_add;
-reg x_result_sel_add;
-output m_result_sel_compare;
-reg m_result_sel_compare;
-output m_result_sel_shift;
-reg m_result_sel_shift;
-output w_result_sel_load;
-reg w_result_sel_load;
-output w_result_sel_mul;
-reg w_result_sel_mul;
-output x_bypass_enable;
-wire x_bypass_enable;
-output m_bypass_enable;
-wire m_bypass_enable;
-output read_enable_0;
-wire read_enable_0;
-output [(5-1):0] read_idx_0;
-wire [(5-1):0] read_idx_0;
-output read_enable_1;
-wire read_enable_1;
-output [(5-1):0] read_idx_1;
-wire [(5-1):0] read_idx_1;
-output write_enable;
-wire write_enable;
-output [(5-1):0] write_idx;
-wire [(5-1):0] write_idx;
-output [(32-1):0] immediate;
-wire [(32-1):0] immediate;
-output [((32-2)+2-1):2] branch_offset;
-wire [((32-2)+2-1):2] branch_offset;
-output load;
-wire load;
-output store;
-wire store;
-output [1:0] size;
-wire [1:0] size;
-output sign_extend;
-wire sign_extend;
-output adder_op;
-wire adder_op;
-output [3:0] logic_op;
-wire [3:0] logic_op;
-output direction;
-wire direction;
-output divide;
-wire divide;
-output modulus;
-wire modulus;
-output branch;
-wire branch;
-output branch_reg;
-wire branch_reg;
-output [(3-1):0] condition;
-wire [(3-1):0] condition;
-output bi_conditional;
-wire bi_conditional;
-output bi_unconditional;
-wire bi_unconditional;
-output break_opcode;
-wire break_opcode;
-output scall;
-wire scall;
-output eret;
-wire eret;
-output bret;
-wire bret;
-output csr_write_enable;
-wire csr_write_enable;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire [(32-1):0] extended_immediate; // Zero or sign extended immediate
-wire [(32-1):0] high_immediate; // Immediate as high 16 bits
-wire [(32-1):0] call_immediate; // Call immediate
-wire [(32-1):0] branch_immediate; // Conditional branch immediate
-wire sign_extend_immediate; // Whether the immediate should be sign extended (`TRUE) or zero extended (`FALSE)
-wire select_high_immediate; // Whether to select the high immediate
-wire select_call_immediate; // Whether to select the call immediate
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Determine opcode
-assign op_add = instruction[30:26] == 5'b01101;
-assign op_and = instruction[30:26] == 5'b01000;
-assign op_andhi = instruction[31:26] == 6'b011000;
-assign op_b = instruction[31:26] == 6'b110000;
-assign op_bi = instruction[31:26] == 6'b111000;
-assign op_be = instruction[31:26] == 6'b010001;
-assign op_bg = instruction[31:26] == 6'b010010;
-assign op_bge = instruction[31:26] == 6'b010011;
-assign op_bgeu = instruction[31:26] == 6'b010100;
-assign op_bgu = instruction[31:26] == 6'b010101;
-assign op_bne = instruction[31:26] == 6'b010111;
-assign op_call = instruction[31:26] == 6'b110110;
-assign op_calli = instruction[31:26] == 6'b111110;
-assign op_cmpe = instruction[30:26] == 5'b11001;
-assign op_cmpg = instruction[30:26] == 5'b11010;
-assign op_cmpge = instruction[30:26] == 5'b11011;
-assign op_cmpgeu = instruction[30:26] == 5'b11100;
-assign op_cmpgu = instruction[30:26] == 5'b11101;
-assign op_cmpne = instruction[30:26] == 5'b11111;
-assign op_divu = instruction[31:26] == 6'b100011;
-assign op_lb = instruction[31:26] == 6'b000100;
-assign op_lbu = instruction[31:26] == 6'b010000;
-assign op_lh = instruction[31:26] == 6'b000111;
-assign op_lhu = instruction[31:26] == 6'b001011;
-assign op_lw = instruction[31:26] == 6'b001010;
-assign op_modu = instruction[31:26] == 6'b110001;
-assign op_mul = instruction[30:26] == 5'b00010;
-assign op_nor = instruction[30:26] == 5'b00001;
-assign op_or = instruction[30:26] == 5'b01110;
-assign op_orhi = instruction[31:26] == 6'b011110;
-assign op_raise = instruction[31:26] == 6'b101011;
-assign op_rcsr = instruction[31:26] == 6'b100100;
-assign op_sb = instruction[31:26] == 6'b001100;
-assign op_sextb = instruction[31:26] == 6'b101100;
-assign op_sexth = instruction[31:26] == 6'b110111;
-assign op_sh = instruction[31:26] == 6'b000011;
-assign op_sl = instruction[30:26] == 5'b01111;
-assign op_sr = instruction[30:26] == 5'b00101;
-assign op_sru = instruction[30:26] == 5'b00000;
-assign op_sub = instruction[31:26] == 6'b110010;
-assign op_sw = instruction[31:26] == 6'b010110;
-assign op_user = instruction[31:26] == 6'b110011;
-assign op_wcsr = instruction[31:26] == 6'b110100;
-assign op_xnor = instruction[30:26] == 5'b01001;
-assign op_xor = instruction[30:26] == 5'b00110;
-
-// Group opcodes by function
-assign arith = op_add | op_sub;
-assign logical = op_and | op_andhi | op_nor | op_or | op_orhi | op_xor | op_xnor;
-assign cmp = op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne;
-assign bi_conditional = op_be | op_bg | op_bge | op_bgeu | op_bgu | op_bne;
-assign bi_unconditional = op_bi;
-assign bra = op_b | bi_unconditional | bi_conditional;
-assign call = op_call | op_calli;
-assign shift = op_sl | op_sr | op_sru;
-assign sext = op_sextb | op_sexth;
-assign multiply = op_mul;
-assign divide = op_divu;
-assign modulus = op_modu;
-assign load = op_lb | op_lbu | op_lh | op_lhu | op_lw;
-assign store = op_sb | op_sh | op_sw;
-
-// Select pipeline multiplexor controls
-always @(*)
-begin
- // D stage
- if (call)
- d_result_sel_0 = 1'b1;
- else
- d_result_sel_0 = 1'b0;
- if (call)
- d_result_sel_1 = 2'b00;
- else if ((instruction[31] == 1'b0) && !bra)
- d_result_sel_1 = 2'b10;
- else
- d_result_sel_1 = 2'b01;
- // X stage
- x_result_sel_csr = 1'b0;
- x_result_sel_mc_arith = 1'b0;
- x_result_sel_sext = 1'b0;
- x_result_sel_logic = 1'b0;
- x_result_sel_add = 1'b0;
- if (op_rcsr)
- x_result_sel_csr = 1'b1;
- else if (divide | modulus)
- x_result_sel_mc_arith = 1'b1;
- else if (sext)
- x_result_sel_sext = 1'b1;
- else if (logical)
- x_result_sel_logic = 1'b1;
- else
- x_result_sel_add = 1'b1;
-
- // M stage
-
- m_result_sel_compare = cmp;
- m_result_sel_shift = shift;
-
- // W stage
- w_result_sel_load = load;
- w_result_sel_mul = op_mul;
-end
-
-// Set if result is valid at end of X stage
-assign x_bypass_enable = arith
- | logical
- | divide
- | modulus
- | sext
- | op_rcsr
- ;
-// Set if result is valid at end of M stage
-assign m_bypass_enable = x_bypass_enable
- | shift
- | cmp
- ;
-// Register file read port 0
-assign read_enable_0 = ~(op_bi | op_calli);
-assign read_idx_0 = instruction[25:21];
-// Register file read port 1
-assign read_enable_1 = ~(op_bi | op_calli | load);
-assign read_idx_1 = instruction[20:16];
-// Register file write port
-assign write_enable = ~(bra | op_raise | store | op_wcsr);
-assign write_idx = call
- ? 5'd29
- : instruction[31] == 1'b0
- ? instruction[20:16]
- : instruction[15:11];
-
-// Size of load/stores
-assign size = instruction[27:26];
-// Whether to sign or zero extend
-assign sign_extend = instruction[28];
-// Set adder_op to 1 to perform a subtraction
-assign adder_op = op_sub | op_cmpe | op_cmpg | op_cmpge | op_cmpgeu | op_cmpgu | op_cmpne | bra;
-// Logic operation (and, or, etc)
-assign logic_op = instruction[29:26];
-// Shift direction
-assign direction = instruction[29];
-// Control flow microcodes
-assign branch = bra | call;
-assign branch_reg = op_call | op_b;
-assign condition = instruction[28:26];
-assign break_opcode = op_raise & ~instruction[2];
-assign scall = op_raise & instruction[2];
-assign eret = op_b & (instruction[25:21] == 5'd30);
-assign bret = op_b & (instruction[25:21] == 5'd31);
-// CSR read/write
-assign csr_write_enable = op_wcsr;
-
-// Extract immediate from instruction
-
-assign sign_extend_immediate = ~(op_and | op_cmpgeu | op_cmpgu | op_nor | op_or | op_xnor | op_xor);
-assign select_high_immediate = op_andhi | op_orhi;
-assign select_call_immediate = instruction[31];
-
-assign high_immediate = {instruction[15:0], 16'h0000};
-assign extended_immediate = {{16{sign_extend_immediate & instruction[15]}}, instruction[15:0]};
-assign call_immediate = {{6{instruction[25]}}, instruction[25:0]};
-assign branch_immediate = {{16{instruction[15]}}, instruction[15:0]};
-
-assign immediate = select_high_immediate == 1'b1
- ? high_immediate
- : extended_immediate;
-
-assign branch_offset = select_call_immediate == 1'b1
- ? call_immediate
- : branch_immediate;
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dp_ram.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dp_ram.v
deleted file mode 100644
index b33adcf..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dp_ram.v
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * LatticeMico32
- * True dual-ported RAM
- *
- * Copyright (c) 2012 Michael Walle <michael@walle.cc>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_dp_ram (
- // ----- Inputs -------
- clk_a,
- clk_b,
- ce_a,
- ce_b,
- addr_a,
- addr_b,
- di_a,
- di_b,
- we_a,
- we_b,
- // ----- Outputs -------
- do_a,
- do_b
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter data_width = 1; // Width of the data ports
-parameter address_width = 1; // Width of the address ports
-parameter init_file = "NONE"; // Initialization file
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_a; // Clock port A
-input clk_b; // Clock port B
-
-input ce_a; // Clock enable port A
-input ce_b; // Clock enable port B
-input [address_width-1:0] addr_a; // Read/write address port A
-input [address_width-1:0] addr_b; // Read/write address port B
-input [data_width-1:0] di_a; // Data input port A
-input [data_width-1:0] di_b; // Data input port B
-input we_a; // Write enable port A
-input we_b; // Write enable port B
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [data_width-1:0] do_a; // Data output port A
-wire [data_width-1:0] do_a;
-
-output [data_width-1:0] do_b; // Data output port B
-wire [data_width-1:0] do_b;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-reg [data_width-1:0] mem[0:(1<<address_width)-1];
-reg [address_width-1:0] ra_a; // Registered read address port A
-reg [address_width-1:0] ra_b; // Registered read address port B
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Read ports
-assign do_a = mem[ra_a];
-assign do_b = mem[ra_b];
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-// Write ports
-always @(posedge clk_a)
- if ((ce_a == 1'b1) && (we_a == 1'b1))
- mem[addr_a] <= di_a;
-
-always @(posedge clk_b)
- if ((ce_b == 1'b1) && (we_b == 1'b1))
- mem[addr_b] <= di_b;
-
-// Register read addresses for use on next cycle
-always @(posedge clk_a)
- if (ce_a == 1'b1)
- ra_a <= addr_a;
-
-always @(posedge clk_b)
- if (ce_b == 1'b1)
- ra_b <= addr_b;
-
-/////////////////////////////////////////////////////
-// Initialization
-/////////////////////////////////////////////////////
-
-generate
- if (init_file != "NONE")
- begin
-initial $readmemh(init_file, mem);
- end
-endgenerate
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dtlb.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dtlb.v
deleted file mode 100644
index 555c863..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_dtlb.v
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * LatticeMico32
- * Data Translation Lookaside Buffer
- *
- * Copyright (c) 2011-2012 Yann Sionneau <yann.sionneau@gmail.com>
- * Copyright (c) 2012 Michael Walle <michael@walle.cc>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-
-
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_dtlb (
- // ----- Inputs -------
- clk_i,
- rst_i,
- enable,
- stall_x,
- stall_m,
- address_x,
- address_m,
- load_d,
- store_d,
- load_q_x,
- store_q_x,
- load_q_m,
- store_q_m,
- tlbpaddr,
- tlbvaddr,
- update,
- flush,
- invalidate,
- // ----- Outputs -----
- physical_load_store_address_m,
- stall_request,
- miss_vfn,
- miss_x,
- fault_x,
- cache_inhibit_x
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter entries = 1024; // Number of entries in DTLB
-parameter page_size = 4096; // DTLB page size
-
-localparam offset_width = $clog2;
-localparam index_width = $clog2;
-localparam offset_lsb = 0;
-localparam offset_msb = (offset_lsb+offset_width-1);
-localparam index_lsb = (offset_msb+1);
-localparam index_msb = (index_lsb+index_width-1);
-localparam tag_lsb = (index_msb+1);
-localparam tag_msb = (32-1);
-localparam tag_width = (tag_msb-tag_lsb+1);
-localparam vpfn_lsb = (offset_msb+1);
-localparam vpfn_msb = (32-1);
-localparam vpfn_width = (vpfn_msb-vpfn_lsb+1);
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input enable; // Data TLB enable
-
-input stall_x; // Stall X stage
-input stall_m; // Stall M stage
-
-input [(32-1):0] address_x; // X stage load/store address
-input [(32-1):0] address_m; // M stage load/store address
-input load_d; // Load instruction in D stage
-input store_d; // Store instruction in D stage
-input load_q_x; // Load instruction in X stage
-input store_q_x; // Store instruction in X stage
-input load_q_m; // Load instruction in M stage
-input store_q_m; // Store instruction in M stage
-
-input [(32-1):0] tlbpaddr;
-input [(32-1):0] tlbvaddr;
-input update;
-input flush;
-input invalidate;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [(32-1):0] physical_load_store_address_m;
-wire [(32-1):0] physical_load_store_address_m;
-output stall_request;
-wire stall_request;
-output [(32-1):0] miss_vfn;
-wire [(32-1):0] miss_vfn;
-output miss_x;
-wire miss_x;
-output fault_x;
-wire fault_x;
-output cache_inhibit_x;
-wire cache_inhibit_x;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire [(index_width-1):0] read_address;
-wire [(index_width-1):0] write_address;
-wire [((vpfn_width+tag_width+3) -1):0] write_data;
-wire [((vpfn_width+tag_width+3) -1):0] tlbe;
-wire [((vpfn_width+tag_width+3) -1):0] tlbe_inval;
-wire [tag_msb:tag_lsb] tlbe_tag_x;
-wire [vpfn_msb:vpfn_lsb] tlbe_pfn_x;
-wire tlbe_valid_x;
-wire tlbe_ro_x;
-wire tlbe_ci_x;
-wire checking;
-wire flushing;
-wire write_port_enable;
-
-reg [1:0] state; // Current state of FSM
-reg [(index_width-1):0] flush_set;
-reg [vpfn_msb:vpfn_lsb] tlbe_pfn_m;
-reg lookup;
-
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-lm32_ram
- #(
- // ----- Parameters -------
- .data_width ((vpfn_width+tag_width+3) ),
- .address_width (index_width)
-// Modified for Milkymist: removed non-portable RAM parameters
- ) data_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (read_address),
- .enable_read (lookup),
- .write_address (write_address),
- .enable_write (1'b1),
- .write_enable (write_port_enable),
- .write_data (write_data),
- // ----- Outputs -------
- .read_data ({tlbe_pfn_x, tlbe_tag_x, tlbe_ci_x, tlbe_ro_x, tlbe_valid_x})
- );
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Compute address to use to index into the DTLB data memory
-assign read_address = address_x[index_msb:index_lsb];
-
-// tlb_update_address will receive data from a CSR register
-assign write_address = (flushing == 1'b1)
- ? flush_set
- : tlbvaddr[index_msb:index_lsb];
-
-assign write_port_enable = (update == 1'b1) || (invalidate == 1'b1) || (flushing == 1'b1);
-
-assign physical_load_store_address_m = (enable == 1'b0)
- ? address_m
- : {tlbe_pfn_m, address_m[offset_msb:offset_lsb]};
-
-assign tlbe = {
- tlbpaddr[vpfn_msb:vpfn_lsb], // pfn
- tlbvaddr[tag_msb:tag_lsb], // tag
- tlbpaddr[2], // cache inhibit
- tlbpaddr[1], // read only
- 1'b1}; // valid
-assign tlbe_inval = {{(vpfn_width+tag_width+3) -1{1'b0}}, 1'b0};
-assign write_data = ((invalidate == 1'b1) || (flushing)) ? tlbe_inval : tlbe;
-
-
-assign tlbe_match = ({tlbe_tag_x, tlbe_valid_x} == {address_x[tag_msb:tag_lsb], 1'b1});
-
-assign miss_vfn = {address_x[vpfn_msb:vpfn_lsb], {offset_width{1'b0}}};
-assign miss_x = ((enable == 1'b1) && ((load_q_x == 1'b1) || (store_q_x == 1'b1)) && (tlbe_match == 1'b0) && (lookup == 1'b0));
-assign cache_inhibit_x = ((enable == 1'b1) && (tlbe_ci_x == 1'b1));
-assign fault_x = ((enable == 1'b1) && (store_q_x == 1'b1) && (tlbe_match == 1'b1) && (tlbe_ro_x == 1'b1));
-
-assign checking = state[0];
-assign flushing = state[1];
-assign stall_request = (flushing == 1'b1) || (lookup == 1'b1);
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-// Lookup logic
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- lookup <= 1'b0;
- else
- begin
- if ((enable == 1'b1) && (stall_x == 1'b0) && ((load_d == 1'b1) || (store_d == 1'b1)))
- lookup <= 1'b1;
- else
- lookup <= 1'b0;
- end
-end
-
-// X/M stage registers
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- tlbe_pfn_m <= {vpfn_width{1'bx}};
- else if (stall_m == 1'b0)
- tlbe_pfn_m <= tlbe_pfn_x;
-end
-
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- flush_set <= {index_width{1'b1}};
- state <= 2'b10;
- end
- else
- begin
- case (state)
-
- 2'b01:
- begin
- if (flush == 1'b1) begin
- flush_set <= {index_width{1'b1}};
- state <= 2'b10;
- end
- end
-
- 2'b10:
- begin
- if (flush_set == {index_width{1'b0}})
- state <= 2'b01;
- flush_set <= flush_set - 1'b1;
- end
-
- endcase
- end
-end
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_icache.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_icache.v
deleted file mode 100644
index da82343..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_icache.v
+++ /dev/null
@@ -1,621 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_icache.v
-// Title : Instruction cache
-// Dependencies : lm32_include.v
-//
-// Version 3.5
-// 1. Bug Fix: Instruction cache flushes issued from Instruction Inline Memory
-// cause segmentation fault due to incorrect fetches.
-//
-// Version 3.1
-// 1. Feature: Support for user-selected resource usage when implementing
-// cache memory. Additional parameters must be defined when invoking module
-// lm32_ram. Instruction cache miss mechanism is dependent on branch
-// prediction being performed in D stage of pipeline.
-//
-// Version 7.0SP2, 3.0
-// No change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-
-
-
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_icache (
- // ----- Inputs -----
- clk_i,
- rst_i,
- stall_a,
- stall_f,
- address_a,
- address_f,
- physical_address_f,
- read_enable_f,
- refill_ready,
- refill_data,
- iflush,
- valid_d,
- branch_predict_taken_d,
- // ----- Outputs -----
- stall_request,
- restart_request,
- refill_request,
- refill_address,
- physical_refill_address,
- refilling,
- inst
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter associativity = 1; // Associativity of the cache (Number of ways)
-parameter sets = 512; // Number of sets
-parameter bytes_per_line = 16; // Number of bytes per cache line
-parameter base_address = 0; // Base address of cachable memory
-parameter limit = 0; // Limit (highest address) of cachable memory
-
-localparam addr_offset_width = $clog2-2;
-localparam addr_set_width = $clog2;
-localparam addr_offset_lsb = 2;
-localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
-localparam addr_set_lsb = (addr_offset_msb+1);
-localparam addr_set_msb = (addr_set_lsb+addr_set_width-1);
-localparam addr_tag_lsb = (addr_offset_msb+1);
-localparam addr_tag_msb = $clog2;
-localparam addr_tag_width = (addr_tag_msb-addr_tag_lsb+1);
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input stall_a; // Stall instruction in A stage
-input stall_f; // Stall instruction in F stage
-
-input valid_d; // Valid instruction in D stage
-input branch_predict_taken_d; // Instruction in D stage is a branch and is predicted taken
-
-input [((32-2)+2-1):2] address_a; // Address of instruction in A stage
-input [((32-2)+2-1):2] address_f; // Address of instruction in F stage
-input [((32-2)+2-1):2] physical_address_f; // Physical address of instruction in F stage
-input read_enable_f; // Indicates if cache access is valid
-
-input refill_ready; // Next word of refill data is ready
-input [(32-1):0] refill_data; // Data to refill the cache with
-
-input iflush; // Flush the cache
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output stall_request; // Request to stall the pipeline
-wire stall_request;
-output restart_request; // Request to restart instruction that caused the cache miss
-reg restart_request;
-output refill_request; // Request to refill a cache line
-wire refill_request;
-output [((32-2)+2-1):2] refill_address; // Base address of cache refill
-reg [((32-2)+2-1):2] refill_address;
-output [((32-2)+2-1):2] physical_refill_address; // Physical base address of cache refill
-reg [((32-2)+2-1):2] physical_refill_address;
-output refilling; // Indicates the instruction cache is currently refilling
-reg refilling;
-output [(32-1):0] inst; // Instruction read from cache
-wire [(32-1):0] inst;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire enable;
-wire [0:associativity-1] way_mem_we;
-wire [(32-1):0] way_data[0:associativity-1];
-wire [((addr_tag_width+1)-1):1] way_tag[0:associativity-1];
-wire [0:associativity-1] way_valid;
-wire [0:associativity-1] way_match;
-wire miss;
-
-wire [(addr_set_width-1):0] tmem_read_address;
-wire [(addr_set_width-1):0] tmem_write_address;
-wire [((addr_offset_width+addr_set_width)-1):0] dmem_read_address;
-wire [((addr_offset_width+addr_set_width)-1):0] dmem_write_address;
-wire [((addr_tag_width+1)-1):0] tmem_write_data;
-
-reg [3:0] state;
-wire flushing;
-wire check;
-wire refill;
-
-reg [associativity-1:0] refill_way_select;
-reg [addr_offset_msb:addr_offset_lsb] refill_offset;
-wire last_refill;
-reg [(addr_set_width-1):0] flush_set;
-
-genvar i;
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
- generate
- for (i = 0; i < associativity; i = i + 1)
- begin : memories
-
- lm32_ram
- #(
- // ----- Parameters -------
- .data_width (32),
- .address_width ((addr_offset_width+addr_set_width))
-// Modified for Milkymist: removed non-portable RAM parameters
-)
- way_0_data_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (dmem_read_address),
- .enable_read (enable),
- .write_address (dmem_write_address),
- .enable_write (1'b1),
- .write_enable (way_mem_we[i]),
- .write_data (refill_data),
- // ----- Outputs -------
- .read_data (way_data[i])
- );
-
- lm32_ram
- #(
- // ----- Parameters -------
- .data_width ((addr_tag_width+1)),
- .address_width (addr_set_width)
-// Modified for Milkymist: removed non-portable RAM parameters
- )
- way_0_tag_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (tmem_read_address),
- .enable_read (enable | flushing),
- .write_address (tmem_write_address),
- .enable_write (1'b1),
- .write_enable (way_mem_we[i] | flushing),
- .write_data (tmem_write_data),
- // ----- Outputs -------
- .read_data ({way_tag[i], way_valid[i]})
- );
-
- end
-endgenerate
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Compute which ways in the cache match the address address being read
-generate
- for (i = 0; i < associativity; i = i + 1)
- begin : match
-assign way_match[i] =
- ({way_tag[i], way_valid[i]} == {physical_address_f[addr_tag_msb:addr_tag_lsb], 1'b1});
- end
-endgenerate
-
-// Select data from way that matched the address being read
-generate
- if (associativity == 1)
- begin : inst_1
-assign inst = way_match[0] ? way_data[0] : 32'b0;
- end
- else if (associativity == 2)
- begin : inst_2
-assign inst = way_match[0] ? way_data[0] : (way_match[1] ? way_data[1] : 32'b0);
- end
-endgenerate
-
-// Compute address to use to index into the data memories
-generate
- if (bytes_per_line > 4)
-assign dmem_write_address = {refill_address[addr_set_msb:addr_set_lsb], refill_offset};
- else
-assign dmem_write_address = refill_address[addr_set_msb:addr_set_lsb];
-endgenerate
-
-assign dmem_read_address = address_a[addr_set_msb:addr_offset_lsb];
-
-// Compute address to use to index into the tag memories
-assign tmem_read_address = address_a[addr_set_msb:addr_set_lsb];
-assign tmem_write_address = flushing
- ? flush_set
- : refill_address[addr_set_msb:addr_set_lsb];
-
-// Compute signal to indicate when we are on the last refill accesses
-generate
- if (bytes_per_line > 4)
-assign last_refill = refill_offset == {addr_offset_width{1'b1}};
- else
-assign last_refill = 1'b1;
-endgenerate
-
-// Compute data and tag memory access enable
-assign enable = (stall_a == 1'b0);
-
-// Compute data and tag memory write enables
-generate
- if (associativity == 1)
- begin : we_1
-assign way_mem_we[0] = (refill_ready == 1'b1);
- end
- else
- begin : we_2
-assign way_mem_we[0] = (refill_ready == 1'b1) && (refill_way_select[0] == 1'b1);
-assign way_mem_we[1] = (refill_ready == 1'b1) && (refill_way_select[1] == 1'b1);
- end
-endgenerate
-
-// On the last refill cycle set the valid bit, for all other writes it should be cleared
-assign tmem_write_data[0] = last_refill & !flushing;
-assign tmem_write_data[((addr_tag_width+1)-1):1] =
- physical_refill_address[addr_tag_msb:addr_tag_lsb];
-
-// Signals that indicate which state we are in
-assign flushing = |state[1:0];
-assign check = state[2];
-assign refill = state[3];
-
-assign miss = (~(|way_match)) && (read_enable_f == 1'b1) && (stall_f == 1'b0) && !(valid_d && branch_predict_taken_d);
-assign stall_request = (check == 1'b0);
-assign refill_request = (refill == 1'b1);
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-// Record way selected for replacement on a cache miss
-generate
- if (associativity >= 2)
- begin : way_select
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- refill_way_select <= {{associativity-1{1'b0}}, 1'b1};
- else
- begin
- if (miss == 1'b1)
- refill_way_select <= {refill_way_select[0], refill_way_select[1]};
- end
-end
- end
-endgenerate
-
-// Record whether we are refilling
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- refilling <= 1'b0;
- else
- refilling <= refill;
-end
-
-// Instruction cache control FSM
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- state <= 4'b0001;
- flush_set <= {addr_set_width{1'b1}};
- refill_address <= {(32-2){1'b0}};
- physical_refill_address <= {(32-2){1'b0}};
- restart_request <= 1'b0;
- end
- else
- begin
- case (state)
-
- // Flush the cache for the first time after reset
- 4'b0001:
- begin
- if (flush_set == {addr_set_width{1'b0}})
- state <= 4'b0100;
- flush_set <= flush_set - 1'b1;
- end
-
- // Flush the cache in response to an write to the ICC CSR
- 4'b0010:
- begin
- if (flush_set == {addr_set_width{1'b0}})
- state <= 4'b0100;
-
- flush_set <= flush_set - 1'b1;
- end
-
- // Check for cache misses
- 4'b0100:
- begin
- if (stall_a == 1'b0)
- restart_request <= 1'b0;
- if (iflush == 1'b1)
- begin
- physical_refill_address <= physical_address_f;
- refill_address <= address_f;
- state <= 4'b0010;
- end
- else if (miss == 1'b1)
- begin
- physical_refill_address <= physical_address_f;
- refill_address <= address_f;
- state <= 4'b1000;
- end
- end
-
- // Refill a cache line
- 4'b1000:
- begin
- if (refill_ready == 1'b1)
- begin
- if (last_refill == 1'b1)
- begin
- restart_request <= 1'b1;
- state <= 4'b0100;
- end
- end
- end
-
- endcase
- end
-end
-
-generate
- if (bytes_per_line > 4)
- begin
-// Refill offset
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- refill_offset <= {addr_offset_width{1'b0}};
- else
- begin
- case (state)
-
- // Check for cache misses
- 4'b0100:
- begin
- if (iflush == 1'b1)
- refill_offset <= {addr_offset_width{1'b0}};
- else if (miss == 1'b1)
- refill_offset <= {addr_offset_width{1'b0}};
- end
-
- // Refill a cache line
- 4'b1000:
- begin
- if (refill_ready == 1'b1)
- refill_offset <= refill_offset + 1'b1;
- end
-
- endcase
- end
-end
- end
-endgenerate
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_include.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_include.v
deleted file mode 100644
index e03c77f..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_include.v
+++ /dev/null
@@ -1,163 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_instruction_unit.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_instruction_unit.v
deleted file mode 100644
index dd1dc9f..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_instruction_unit.v
+++ /dev/null
@@ -1,714 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_instruction_unit.v
-// Title : Instruction unit
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : Support for static branch prediction is added. Fetching of
-// : instructions can also be altered by branches predicted in D
-// : stage of pipeline, and mispredicted branches in the X and M
-// : stages of the pipeline.
-// Version : 3.2
-// : EBRs use SYNC resets instead of ASYNC resets.
-// Version : 3.3
-// : Support for a non-cacheable Instruction Memory that has a
-// : single-cycle access latency. This memory can be accessed by
-// : data port of LM32 (so that debugger has access to it).
-// Version : 3.4
-// : No change
-// Version : 3.5
-// : Bug fix: Inline memory is correctly generated if it is not a
-// : power-of-two.
-// : Bug fix: Fixed a bug that caused LM32 (configured without
-// : instruction cache) to lock up in to an infinite loop due to a
-// : instruction bus error when EBA was set to instruction inline
-// : memory.
-// Version : 3.8
-// : Feature: Support for dynamically switching EBA to DEBA via a
-// : GPIO.
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_instruction_unit (
- // ----- Inputs -------
- clk_i,
- rst_i,
- // From pipeline
- stall_a,
- stall_f,
- stall_d,
- stall_x,
- stall_m,
- valid_f,
- valid_d,
- kill_f,
- branch_predict_taken_d,
- branch_predict_address_d,
- exception_m,
- branch_taken_m,
- branch_mispredict_taken_m,
- branch_target_m,
- iflush,
- dcache_restart_request,
- dcache_refill_request,
- dcache_refilling,
- itlb_enable,
- tlbpaddr,
- tlbvaddr,
- itlb_update,
- itlb_flush,
- itlb_invalidate,
- // From Wishbone
- i_dat_i,
- i_ack_i,
- i_err_i,
- // ----- Outputs -------
- // To pipeline
- pc_f,
- pc_d,
- pc_x,
- pc_m,
- pc_w,
- icache_stall_request,
- icache_restart_request,
- icache_refill_request,
- icache_refilling,
- itlb_stall_request,
- itlb_miss_vfn,
- itlb_miss_x,
- // To Wishbone
- i_dat_o,
- i_adr_o,
- i_cyc_o,
- i_sel_o,
- i_stb_o,
- i_we_o,
- i_cti_o,
- i_lock_o,
- i_bte_o,
- bus_error_d,
- instruction_f,
- instruction_d
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter eba_reset = 32'h0;
-parameter associativity = 1; // Associativity of the cache (Number of ways)
-parameter sets = 512; // Number of sets
-parameter bytes_per_line = 16; // Number of bytes per cache line
-parameter base_address = 0; // Base address of cachable memory
-parameter limit = 0; // Limit (highest address) of cachable memory
-
-// For bytes_per_line == 4, we set 1 so part-select range isn't reversed, even though not really used
-localparam addr_offset_width = bytes_per_line == 4 ? 1 : $clog2-2;
-localparam addr_offset_lsb = 2;
-localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-
-input stall_a; // Stall A stage instruction
-input stall_f; // Stall F stage instruction
-input stall_d; // Stall D stage instruction
-input stall_x; // Stall X stage instruction
-input stall_m; // Stall M stage instruction
-input valid_f; // Instruction in F stage is valid
-input valid_d; // Instruction in D stage is valid
-input kill_f; // Kill instruction in F stage
-
-input branch_predict_taken_d; // Branch is predicted taken in D stage
-input [((32-2)+2-1):2] branch_predict_address_d; // Branch target address
-
-input exception_m;
-input branch_taken_m; // Branch instruction in M stage is taken
-input branch_mispredict_taken_m; // Branch instruction in M stage is mispredicted as taken
-input [((32-2)+2-1):2] branch_target_m; // Target PC of M stage branch instruction
-
-input iflush; // Flush instruction cache
-input dcache_restart_request; // Restart instruction that caused a data cache miss
-input dcache_refill_request; // Request to refill data cache
-input dcache_refilling;
-
-
-input itlb_enable; // Instruction TLB enable
-input [(32-1):0] tlbpaddr; // TLBPADDR CSR
-input [(32-1):0] tlbvaddr; // TLBVADDR CSR
-input itlb_update; // Instruction TLB update request
-input itlb_flush; // Instruction TLB flush request
-input itlb_invalidate; // Instruction TLB invalidate request
-
-input [(32-1):0] i_dat_i; // Instruction Wishbone interface read data
-input i_ack_i; // Instruction Wishbone interface acknowledgement
-input i_err_i; // Instruction Wishbone interface error
-
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [((32-2)+2-1):2] pc_f; // F stage PC
-reg [((32-2)+2-1):2] pc_f;
-output [((32-2)+2-1):2] pc_d; // D stage PC
-reg [((32-2)+2-1):2] pc_d;
-output [((32-2)+2-1):2] pc_x; // X stage PC
-reg [((32-2)+2-1):2] pc_x;
-output [((32-2)+2-1):2] pc_m; // M stage PC
-reg [((32-2)+2-1):2] pc_m;
-output [((32-2)+2-1):2] pc_w; // W stage PC
-reg [((32-2)+2-1):2] pc_w;
-
-output icache_stall_request; // Instruction cache stall request
-wire icache_stall_request;
-output icache_restart_request; // Request to restart instruction that cached instruction cache miss
-wire icache_restart_request;
-output icache_refill_request; // Instruction cache refill request
-wire icache_refill_request;
-output icache_refilling; // Indicates the icache is refilling
-wire icache_refilling;
-
-
-output itlb_stall_request; // Instruction TLB stall request
-wire itlb_stall_request;
-output [(32-1):0] itlb_miss_vfn; // Virtual frame number of missed instruction
-wire [(32-1):0] itlb_miss_vfn;
-output itlb_miss_x; // Indicates if an instruction TLB miss occured in X stage
-wire itlb_miss_x;
-
-output [(32-1):0] i_dat_o; // Instruction Wishbone interface write data
-wire [(32-1):0] i_dat_o;
-output [(32-1):0] i_adr_o; // Instruction Wishbone interface address
-reg [(32-1):0] i_adr_o;
-output i_cyc_o; // Instruction Wishbone interface cycle
-reg i_cyc_o;
-output [(4-1):0] i_sel_o; // Instruction Wishbone interface byte select
-wire [(4-1):0] i_sel_o;
-output i_stb_o; // Instruction Wishbone interface strobe
-reg i_stb_o;
-output i_we_o; // Instruction Wishbone interface write enable
-wire i_we_o;
-output [(3-1):0] i_cti_o; // Instruction Wishbone interface cycle type
-reg [(3-1):0] i_cti_o;
-output i_lock_o; // Instruction Wishbone interface lock bus
-reg i_lock_o;
-output [(2-1):0] i_bte_o; // Instruction Wishbone interface burst type
-wire [(2-1):0] i_bte_o;
-
-
-output bus_error_d; // Indicates a bus error occured while fetching the instruction
-reg bus_error_d;
-output [(32-1):0] instruction_f; // F stage instruction (only to have register indices extracted from)
-wire [(32-1):0] instruction_f;
-output [(32-1):0] instruction_d; // D stage instruction to be decoded
-reg [(32-1):0] instruction_d;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-reg [((32-2)+2-1):2] pc_a; // A stage PC
-
-reg [((32-2)+2-1):2] restart_address; // Address to restart from after a cache miss
-
-wire icache_read_enable_f; // Indicates if instruction cache miss is valid
-wire [((32-2)+2-1):2] icache_refill_address; // Address that caused cache miss
-wire [((32-2)+2-1):2] icache_physical_refill_address; // Physical address that caused cache miss
-reg icache_refill_ready; // Indicates when next word of refill data is ready to be written to cache
-reg [(32-1):0] icache_refill_data; // Next word of refill data, fetched from Wishbone
-wire [(32-1):0] icache_data_f; // Instruction fetched from instruction cache
-wire [(3-1):0] first_cycle_type; // First Wishbone cycle type
-wire [(3-1):0] next_cycle_type; // Next Wishbone cycle type
-wire last_word; // Indicates if this is the last word in the cache line
-wire [((32-2)+2-1):2] first_address; // First cache refill address
-reg bus_error_f; // Indicates if a bus error occured while fetching the instruction in the F stage
-
-
-
-wire [((32-2)+2-1):2] physical_pc_f; // F stage physical PC
-wire itlb_miss_f; // Indicates if an instruction TLB miss occured in F stage
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-// Instruction ROM
-
-// Instruction cache
-lm32_icache #(
- .associativity (associativity),
- .sets (sets),
- .bytes_per_line (bytes_per_line),
- .base_address (base_address),
- .limit (limit)
- ) icache (
- // ----- Inputs -----
- .clk_i (clk_i),
- .rst_i (rst_i),
- .stall_a (stall_a),
- .stall_f (stall_f),
- .branch_predict_taken_d (branch_predict_taken_d),
- .valid_d (valid_d),
- .address_a (pc_a),
- .address_f (pc_f),
- .physical_address_f (physical_pc_f),
- .read_enable_f (icache_read_enable_f),
- .refill_ready (icache_refill_ready),
- .refill_data (icache_refill_data),
- .iflush (iflush),
- // ----- Outputs -----
- .stall_request (icache_stall_request),
- .restart_request (icache_restart_request),
- .refill_request (icache_refill_request),
- .refill_address (icache_refill_address),
- .physical_refill_address(icache_physical_refill_address),
- .refilling (icache_refilling),
- .inst (icache_data_f)
- );
-
-// Instruction TLB
-lm32_itlb itlb (
- // ----- Inputs -----
- .clk_i (clk_i),
- .rst_i (rst_i),
- .enable (itlb_enable),
- .stall_a (stall_a),
- .stall_f (stall_f),
- .stall_d (stall_d),
- .stall_x (stall_x),
- .pc_a (pc_a),
- .pc_f (pc_f),
- .pc_x (pc_x),
- .read_enable_f (icache_read_enable_f),
- .tlbpaddr (tlbpaddr),
- .tlbvaddr (tlbvaddr),
- .update (itlb_update),
- .flush (itlb_flush),
- .invalidate (itlb_invalidate),
- // ----- Outputs -----
- .physical_pc_f (physical_pc_f),
- .stall_request (itlb_stall_request),
- .miss_vfn (itlb_miss_vfn),
- .miss_f (itlb_miss_f),
- .miss_x (itlb_miss_x)
- );
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Generate signal that indicates when instruction cache misses are valid
-assign icache_read_enable_f = (valid_f == 1'b1)
- && (kill_f == 1'b0)
- && (dcache_restart_request == 1'b0)
- && (itlb_miss_f == 1'b0)
- ;
-
-// Compute address of next instruction to fetch
-always @(*)
-begin
- // The request from the latest pipeline stage must take priority
- if (dcache_restart_request == 1'b1)
- pc_a = restart_address;
- else
- if (branch_taken_m == 1'b1)
- if ((branch_mispredict_taken_m == 1'b1) && (exception_m == 1'b0))
- pc_a = pc_x;
- else
- pc_a = branch_target_m;
- else
- if ( (valid_d == 1'b1) && (branch_predict_taken_d == 1'b1) )
- pc_a = branch_predict_address_d;
- else
- if (icache_restart_request == 1'b1)
- pc_a = restart_address;
- else
- pc_a = pc_f + 1'b1;
-end
-
-// Select where instruction should be fetched from
-
-// Select instruction from selected source
-assign instruction_f = icache_data_f;
-
-// Unused/constant Wishbone signals
-assign i_dat_o = 32'd0;
-assign i_we_o = 1'b0;
-assign i_sel_o = 4'b1111;
-assign i_bte_o = 2'b00;
-
-// Determine parameters for next cache refill Wishbone access
-generate
- case (bytes_per_line)
- 4:
- begin
-assign first_cycle_type = 3'b111;
-assign next_cycle_type = 3'b111;
-assign last_word = 1'b1;
-assign first_address = icache_physical_refill_address;
- end
- 8:
- begin
-assign first_cycle_type = 3'b010;
-assign next_cycle_type = 3'b111;
-assign last_word = i_adr_o[addr_offset_msb:addr_offset_lsb] == 1'b1;
-assign first_address = {icache_physical_refill_address[(32-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
- end
- default:
- begin
-assign first_cycle_type = 3'b010;
-assign next_cycle_type = i_adr_o[addr_offset_msb:addr_offset_lsb+1] == {addr_offset_width-1{1'b1}} ? 3'b111 : 3'b010;
-assign last_word = (&i_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
-assign first_address = {icache_physical_refill_address[(32-2)+2-1:addr_offset_msb+1], {addr_offset_width{1'b0}}};
- end
- endcase
-endgenerate
-
-/////////////////////////////////////////////////////
-// Sequential Logic
-/////////////////////////////////////////////////////
-
-// PC
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- pc_f <= (eba_reset-4)/4;
- pc_d <= {(32-2){1'b0}};
- pc_x <= {(32-2){1'b0}};
- pc_m <= {(32-2){1'b0}};
- pc_w <= {(32-2){1'b0}};
- end
- else
- begin
- if (stall_f == 1'b0)
- pc_f <= pc_a;
- if (stall_d == 1'b0)
- pc_d <= pc_f;
- if (stall_x == 1'b0)
- pc_x <= pc_d;
- if (stall_m == 1'b0)
- pc_m <= pc_x;
- pc_w <= pc_m;
- end
-end
-
-// Address to restart from after a cache miss has been handled
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- restart_address <= {(32-2){1'b0}};
- else
- begin
- // D-cache restart address must take priority, otherwise instructions will be lost
- if (dcache_refill_request == 1'b1)
- restart_address <= pc_w;
- else if ((icache_refill_request == 1'b1) && (!dcache_refilling) && (!dcache_restart_request))
- restart_address <= icache_refill_address;
- end
-end
-
-// Record where instruction was fetched from
-
-
-// Instruction Wishbone interface
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- i_cyc_o <= 1'b0;
- i_stb_o <= 1'b0;
- i_adr_o <= {32{1'b0}};
- i_cti_o <= 3'b111;
- i_lock_o <= 1'b0;
- icache_refill_data <= {32{1'b0}};
- icache_refill_ready <= 1'b0;
- bus_error_f <= 1'b0;
- end
- else
- begin
- icache_refill_ready <= 1'b0;
- // Is a cycle in progress?
- if (i_cyc_o == 1'b1)
- begin
- // Has cycle completed?
- if ((i_ack_i == 1'b1) || (i_err_i == 1'b1))
- begin
- begin
- if (last_word == 1'b1)
- begin
- // Cache line fill complete
- i_cyc_o <= 1'b0;
- i_stb_o <= 1'b0;
- i_lock_o <= 1'b0;
- end
- // Fetch next word in cache line
- i_adr_o[addr_offset_msb:addr_offset_lsb] <= i_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
- i_cti_o <= next_cycle_type;
- // Write fetched data into instruction cache
- icache_refill_ready <= 1'b1;
- icache_refill_data <= i_dat_i;
- end
- end
- if (i_err_i == 1'b1)
- begin
- bus_error_f <= 1'b1;
- $display ("Instruction bus error. Address: %x", i_adr_o);
- end
- end
- else
- begin
- if ((icache_refill_request == 1'b1) && (icache_refill_ready == 1'b0))
- begin
- // Read first word of cache line
- i_adr_o <= {first_address, 2'b00};
- i_cyc_o <= 1'b1;
- i_stb_o <= 1'b1;
- i_cti_o <= first_cycle_type;
- //i_lock_o <= `TRUE;
- bus_error_f <= 1'b0;
- end
- // Clear bus error when exception taken, otherwise they would be
- // continually generated if exception handler is cached
- if (branch_taken_m == 1'b1)
- bus_error_f <= 1'b0;
- end
- end
-end
-
-// Instruction register
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- instruction_d <= {32{1'b0}};
- bus_error_d <= 1'b0;
- end
- else
- begin
- if (stall_d == 1'b0)
- begin
- instruction_d <= instruction_f;
- bus_error_d <= bus_error_f;
- end
- end
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_interrupt.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_interrupt.v
deleted file mode 100644
index be45b70..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_interrupt.v
+++ /dev/null
@@ -1,467 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_interrupt.v
-// Title : Interrupt logic
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_interrupt (
- // ----- Inputs -------
- clk_i,
- rst_i,
- // From external devices
- interrupt,
- // From pipeline
- stall_x,
- non_debug_exception,
- debug_exception,
- eret_q_x,
- bret_q_x,
- csr,
- csr_write_data,
- csr_write_enable,
- // ----- Outputs -------
- interrupt_exception,
- // To pipeline
- csr_read_data
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter interrupts = 32; // Number of interrupts
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input [interrupts-1:0] interrupt; // Interrupt pins
-
-input stall_x; // Stall X pipeline stage
-
-input non_debug_exception; // Non-debug related exception has been raised
-input debug_exception; // Debug-related exception has been raised
-input eret_q_x; // Return from exception
-input bret_q_x; // Return from breakpoint
-
-input [(5-1):0] csr; // CSR read/write index
-input [(32-1):0] csr_write_data; // Data to write to specified CSR
-input csr_write_enable; // CSR write enable
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output interrupt_exception; // Request to raide an interrupt exception
-wire interrupt_exception;
-
-output [(32-1):0] csr_read_data; // Data read from CSR
-reg [(32-1):0] csr_read_data;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire [interrupts-1:0] asserted; // Which interrupts are currently being asserted
-//pragma attribute asserted preserve_signal true
-wire [interrupts-1:0] interrupt_n_exception;
-
-// Interrupt CSRs
-
-reg ie; // Interrupt enable
-reg eie; // Exception interrupt enable
-reg bie; // Breakpoint interrupt enable
-reg [interrupts-1:0] ip; // Interrupt pending
-reg [interrupts-1:0] im; // Interrupt mask
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Determine which interrupts have occured and are unmasked
-assign interrupt_n_exception = ip & im;
-
-// Determine if any unmasked interrupts have occured
-assign interrupt_exception = (|interrupt_n_exception) & ie;
-
-// Determine which interrupts are currently being asserted or are already pending
-assign asserted = ip | interrupt;
-
-assign ie_csr_read_data = {{32-3{1'b0}},
- bie,
- eie,
- ie
- };
-assign ip_csr_read_data = ip;
-assign im_csr_read_data = im;
-generate
- if (interrupts > 1)
- begin
-// CSR read
-always @(*)
-begin
- case (csr)
- 5'h1d,
- 5'h0: csr_read_data = {{32-3{1'b0}},
- bie,
- eie,
- ie
- };
- 5'h2: csr_read_data = ip;
- 5'h1: csr_read_data = im;
- default: csr_read_data = {32{1'bx}};
- endcase
-end
- end
- else
- begin
-// CSR read
-always @(*)
-begin
- case (csr)
- 5'h0: csr_read_data = {{32-3{1'b0}},
- bie,
- eie,
- ie
- };
- 5'h2: csr_read_data = ip;
- default: csr_read_data = {32{1'bx}};
- endcase
-end
- end
-endgenerate
-
-/////////////////////////////////////////////////////
-// Sequential Logic
-/////////////////////////////////////////////////////
-
-generate
- if (interrupts > 1)
- begin
-// IE, IM, IP - Interrupt Enable, Interrupt Mask and Interrupt Pending CSRs
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- ie <= 1'b0;
- eie <= 1'b0;
- bie <= 1'b0;
- im <= {interrupts{1'b0}};
- ip <= {interrupts{1'b0}};
- end
- else
- begin
- // Set IP bit when interrupt line is asserted
- ip <= asserted;
- if (non_debug_exception == 1'b1)
- begin
- // Save and then clear interrupt enable
- eie <= ie;
- ie <= 1'b0;
- end
- else if (debug_exception == 1'b1)
- begin
- // Save and then clear interrupt enable
- bie <= ie;
- ie <= 1'b0;
- end
- else if (stall_x == 1'b0)
- begin
- if (eret_q_x == 1'b1)
- // Restore interrupt enable
- ie <= eie;
- else if (bret_q_x == 1'b1)
- // Restore interrupt enable
- ie <= bie;
- else if (csr_write_enable == 1'b1)
- begin
- // Handle wcsr write
- if ( (csr == 5'h0)
- || (csr == 5'h1d)
- )
- begin
- ie <= csr_write_data[0];
- eie <= csr_write_data[1];
- bie <= csr_write_data[2];
- end
- if (csr == 5'h1)
- im <= csr_write_data[interrupts-1:0];
- if (csr == 5'h2)
- ip <= asserted & ~csr_write_data[interrupts-1:0];
- end
- end
- end
-end
- end
-else
- begin
-// IE, IM, IP - Interrupt Enable, Interrupt Mask and Interrupt Pending CSRs
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- ie <= 1'b0;
- eie <= 1'b0;
- bie <= 1'b0;
- ip <= {interrupts{1'b0}};
- end
- else
- begin
- // Set IP bit when interrupt line is asserted
- ip <= asserted;
- if (non_debug_exception == 1'b1)
- begin
- // Save and then clear interrupt enable
- eie <= ie;
- ie <= 1'b0;
- end
- else if (debug_exception == 1'b1)
- begin
- // Save and then clear interrupt enable
- bie <= ie;
- ie <= 1'b0;
- end
- else if (stall_x == 1'b0)
- begin
- if (eret_q_x == 1'b1)
- // Restore interrupt enable
- ie <= eie;
- else if (bret_q_x == 1'b1)
- // Restore interrupt enable
- ie <= bie;
- else if (csr_write_enable == 1'b1)
- begin
- // Handle wcsr write
- if ( (csr == 5'h0)
- || (csr == 5'h1d)
- )
- begin
- ie <= csr_write_data[0];
- eie <= csr_write_data[1];
- bie <= csr_write_data[2];
- end
- if (csr == 5'h2)
- ip <= asserted & ~csr_write_data[interrupts-1:0];
- end
- end
- end
-end
- end
-endgenerate
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_itlb.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_itlb.v
deleted file mode 100644
index 0c897fd..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_itlb.v
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
- * LatticeMico32
- * Instruction Translation Lookaside Buffer
- *
- * Copyright (c) 2011-2012 Yann Sionneau <yann.sionneau@gmail.com>
- * Copyright (c) 2012 Michael Walle <michael@walle.cc>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-
-
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-module lm32_itlb (
- // ----- Inputs -------
- clk_i,
- rst_i,
- enable,
- stall_a,
- stall_f,
- stall_d,
- stall_x,
- pc_a,
- pc_f,
- pc_x,
- read_enable_f,
- tlbpaddr,
- tlbvaddr,
- update,
- flush,
- invalidate,
- // ----- Outputs -------
- physical_pc_f,
- stall_request,
- miss_vfn,
- miss_f,
- miss_x
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter entries = 1024; // Number of entires in ITLB
-parameter page_size = 4096; // ITLB page size
-
-localparam offset_width = ($clog2-2);
-localparam index_width = $clog2;
-localparam offset_lsb = 2;
-localparam offset_msb = (offset_lsb+offset_width-1);
-localparam index_lsb = (offset_msb+1);
-localparam index_msb = (index_lsb+index_width-1);
-localparam tag_lsb = (index_msb+1);
-localparam tag_msb = (32-1);
-localparam tag_width = (tag_msb-tag_lsb+1);
-localparam vpfn_lsb = (offset_msb+1);
-localparam vpfn_msb = (32-1);
-localparam vpfn_width = (vpfn_msb-vpfn_lsb+1);
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input enable; // Instruction TLB enable
-input stall_a; // Stall instruction in A stage
-input stall_f; // Stall instruction in F stage
-input stall_d; // Stall instruction in D stage
-input stall_x; // Stall instruction in X stage
-
-input [((32-2)+2-1):2] pc_a; // Address of instruction in A stage
-input [((32-2)+2-1):2] pc_f; // Address of instruction in F stage
-input [((32-2)+2-1):2] pc_x; // Address of instruction in X stage
-
-input read_enable_f; // Indicates if cache access is valid
-
-input [(32-1):0] tlbpaddr;
-input [(32-1):0] tlbvaddr;
-input update;
-input flush;
-input invalidate;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-output [((32-2)+2-1):2] physical_pc_f;
-reg [((32-2)+2-1):2] physical_pc_f;
-output stall_request;
-wire stall_request;
-output [(32-1):0] miss_vfn;
-wire [(32-1):0] miss_vfn;
-output miss_f;
-wire miss_f;
-output miss_x;
-reg miss_x;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-wire [(index_width-1):0] read_address;
-wire [(index_width-1):0] write_address;
-wire read_port_enable;
-wire write_port_enable;
-wire [((vpfn_width+tag_width+1)-1):0] write_data;
-reg [1:0] state;
-reg [(index_width-1):0] flush_set;
-
-wire [tag_msb:tag_lsb] tlbe_tag_f;
-wire [vpfn_msb:vpfn_lsb] tlbe_pfn_f;
-wire tlbe_valid_f;
-
-reg miss_d;
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-lm32_ram
- #(
- // ----- Parameters -------
- .data_width ((vpfn_width+tag_width+1)),
- .address_width (index_width)
-// Modified for Milkymist: removed non-portable RAM parameters
- ) data_ram
- (
- // ----- Inputs -------
- .read_clk (clk_i),
- .write_clk (clk_i),
- .reset (rst_i),
- .read_address (read_address),
- .enable_read (read_port_enable),
- .write_address (write_address),
- .enable_write (1'b1),
- .write_enable (write_port_enable),
- .write_data (write_data),
- // ----- Outputs -------
- .read_data ({tlbe_pfn_f, tlbe_tag_f, tlbe_valid_f})
- );
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Compute address to use to index into the ITLB memory
-assign read_address = pc_a[index_msb:index_lsb];
-assign write_address = (flushing == 1'b1) ? flush_set : tlbvaddr[index_msb:index_lsb];
-
-assign read_port_enable = (stall_a == 1'b0);
-assign write_port_enable = (update == 1'b1) || (invalidate == 1'b1) || (flushing == 1'b1);
-
-assign write_data = ((invalidate == 1'b1) || (flushing == 1'b1))
- ? {{(vpfn_width+tag_width+1)-1{1'b0}}, 1'b0}
- : {tlbpaddr[vpfn_msb:vpfn_lsb], tlbvaddr[tag_msb:tag_lsb], 1'b1};
-
-assign tlbe_match_f = ({tlbe_tag_f, tlbe_valid_f} == {pc_f[tag_msb:tag_lsb], 1'b1});
-
-assign miss_vfn = {pc_x[vpfn_msb:vpfn_lsb], {offset_width{1'b0}}, 2'b0};
-assign miss_f = (enable == 1'b1) && (tlbe_match_f == 1'b0) && (stall_f == 1'b0);
-
-assign flushing = state[1];
-assign stall_request = (flushing == 1'b1);
-
-always @(*)
-begin
- if (enable == 1'b1)
- begin
- if (tlbe_match_f == 1'b1)
- physical_pc_f = {tlbe_pfn_f, pc_f[offset_msb:offset_lsb]};
- else
- physical_pc_f = {(32-2){1'b0}};
- end
- else
- physical_pc_f = pc_f;
-end
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- miss_d <= 1'b0;
- miss_x <= 1'b0;
- end
- else
- begin
- if (stall_d == 1'b0)
- miss_d <= miss_f;
- if (stall_x == 1'b0)
- miss_x <= miss_d;
- end
-end
-
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- flush_set <= {index_width{1'b1}};
- state <= 2'b10;
- end
- else
- begin
- case (state)
-
- 2'b01:
- begin
- if (flush == 1'b1)
- begin
- flush_set <= {index_width{1'b1}};
- state <= 2'b10;
- end
- end
-
- 2'b10:
- begin
- if (flush_set == {index_width{1'b0}})
- state <= 2'b01;
- flush_set <= flush_set - 1'b1;
- end
-
- endcase
- end
-end
-
-endmodule
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_jtag.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_jtag.v
deleted file mode 100644
index fb7e34d..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_jtag.v
+++ /dev/null
@@ -1,213 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_jtag.v
-// Title : JTAG interface
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_load_store_unit.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_load_store_unit.v
deleted file mode 100644
index 67c9209..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_load_store_unit.v
+++ /dev/null
@@ -1,775 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_load_store_unit.v
-// Title : Load and store unit
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : Instead of disallowing an instruction cache miss on a data cache
-// : miss, both can now occur at the same time. If both occur at same
-// : time, then restart address is the address of instruction that
-// : caused data cache miss.
-// Version : 3.2
-// : EBRs use SYNC resets instead of ASYNC resets.
-// Version : 3.3
-// : Support for new non-cacheable Data Memory that is accessible by
-// : the data port and has a one cycle access latency.
-// Version : 3.4
-// : No change
-// Version : 3.5
-// : Bug fix: Inline memory is correctly generated if it is not a
-// : power-of-two
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_load_store_unit (
- // ----- Inputs -------
- clk_i,
- rst_i,
- // From pipeline
- stall_a,
- stall_x,
- stall_m,
- kill_m,
- exception_m,
- store_operand_x,
- load_store_address_x,
- load_store_address_m,
- load_store_address_w,
- load_d,
- store_d,
- load_x,
- store_x,
- load_q_x,
- store_q_x,
- load_q_m,
- store_q_m,
- sign_extend_x,
- size_x,
- dflush,
- dtlb_enable,
- tlbpaddr,
- tlbvaddr,
- dtlb_update,
- dtlb_flush,
- dtlb_invalidate,
- // From Wishbone
- d_dat_i,
- d_ack_i,
- d_err_i,
- d_rty_i,
- // ----- Outputs -------
- // To pipeline
- dcache_refill_request,
- dcache_restart_request,
- dcache_stall_request,
- dcache_refilling,
- load_data_w,
- stall_wb_load,
- dtlb_stall_request,
- dtlb_miss_vfn,
- dtlb_miss_x,
- dtlb_fault_x,
- // To Wishbone
- d_dat_o,
- d_adr_o,
- d_cyc_o,
- d_sel_o,
- d_stb_o,
- d_we_o,
- d_cti_o,
- d_lock_o,
- d_bte_o
- );
-
-/////////////////////////////////////////////////////
-// Parameters
-/////////////////////////////////////////////////////
-
-parameter associativity = 1; // Associativity of the cache (Number of ways)
-parameter sets = 512; // Number of sets
-parameter bytes_per_line = 16; // Number of bytes per cache line
-parameter base_address = 0; // Base address of cachable memory
-parameter limit = 0; // Limit (highest address) of cachable memory
-
-// For bytes_per_line == 4, we set 1 so part-select range isn't reversed, even though not really used
-localparam addr_offset_width = bytes_per_line == 4 ? 1 : $clog2-2;
-localparam addr_offset_lsb = 2;
-localparam addr_offset_msb = (addr_offset_lsb+addr_offset_width-1);
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-input stall_a; // A stage stall
-input stall_x; // X stage stall
-input stall_m; // M stage stall
-input kill_m; // Kill instruction in M stage
-input exception_m; // An exception occured in the M stage
-
-input [(32-1):0] store_operand_x; // Data read from register to store
-input [(32-1):0] load_store_address_x; // X stage load/store address
-input [(32-1):0] load_store_address_m; // M stage load/store address
-input [1:0] load_store_address_w; // W stage load/store address (only least two significant bits are needed)
-input load_d; // Load instruction in D stage
-input store_d; // Store instruction in D stage
-input load_x; // Load instruction in X stage
-input store_x; // Store instruction in X stage
-input load_q_x; // Load instruction in X stage
-input store_q_x; // Store instruction in X stage
-input load_q_m; // Load instruction in M stage
-input store_q_m; // Store instruction in M stage
-input sign_extend_x; // Whether load instruction in X stage should sign extend or zero extend
-input [1:0] size_x; // Size of load or store (byte, hword, word)
-
-input dflush; // Flush the data cache
-
-
-input dtlb_enable; // Data TLB enable
-input [(32-1):0] tlbpaddr; // TLBPADDR CSR
-input [(32-1):0] tlbvaddr; // TLBVADDR CSR
-input dtlb_update; // Data TLB update
-input dtlb_flush; // Data TLB flush
-input dtlb_invalidate; // Data TLB invalidate
-
-input [(32-1):0] d_dat_i; // Data Wishbone interface read data
-input d_ack_i; // Data Wishbone interface acknowledgement
-input d_err_i; // Data Wishbone interface error
-input d_rty_i; // Data Wishbone interface retry
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output dcache_refill_request; // Request to refill data cache
-wire dcache_refill_request;
-output dcache_restart_request; // Request to restart the instruction that caused a data cache miss
-wire dcache_restart_request;
-output dcache_stall_request; // Data cache stall request
-wire dcache_stall_request;
-output dcache_refilling;
-wire dcache_refilling;
-
-
-output [(32-1):0] load_data_w; // Result of a load instruction
-reg [(32-1):0] load_data_w;
-output stall_wb_load; // Request to stall pipeline due to a load from the Wishbone interface
-reg stall_wb_load;
-
-output dtlb_stall_request; // Data TLB stall request
-wire dtlb_stall_request;
-output [(32-1):0] dtlb_miss_vfn; // Virtual frame number of missed load or store address
-wire [(32-1):0] dtlb_miss_vfn;
-output dtlb_miss_x; // Indicates if a data TLB miss has occured
-wire dtlb_miss_x;
-output dtlb_fault_x; // Indicates if a data TLB fault has occured in X stage
-wire dtlb_fault_x;
-
-output [(32-1):0] d_dat_o; // Data Wishbone interface write data
-reg [(32-1):0] d_dat_o;
-output [(32-1):0] d_adr_o; // Data Wishbone interface address
-reg [(32-1):0] d_adr_o;
-output d_cyc_o; // Data Wishbone interface cycle
-reg d_cyc_o;
-output [(4-1):0] d_sel_o; // Data Wishbone interface byte select
-reg [(4-1):0] d_sel_o;
-output d_stb_o; // Data Wishbone interface strobe
-reg d_stb_o;
-output d_we_o; // Data Wishbone interface write enable
-reg d_we_o;
-output [(3-1):0] d_cti_o; // Data Wishbone interface cycle type
-reg [(3-1):0] d_cti_o;
-output d_lock_o; // Date Wishbone interface lock bus
-reg d_lock_o;
-output [(2-1):0] d_bte_o; // Data Wishbone interface burst type
-wire [(2-1):0] d_bte_o;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-// Microcode pipeline registers - See inputs for description
-reg [1:0] size_m;
-reg [1:0] size_w;
-reg sign_extend_m;
-reg sign_extend_w;
-reg [(32-1):0] store_data_x;
-reg [(32-1):0] store_data_m;
-reg [(4-1):0] byte_enable_x;
-reg [(4-1):0] byte_enable_m;
-wire [(32-1):0] data_m;
-reg [(32-1):0] data_w;
-
-wire dcache_select_x; // Select data cache to load from / store to
-reg dcache_select_m;
-wire [(32-1):0] dcache_data_m; // Data read from cache
-wire [(32-1):0] dcache_refill_address; // Address to refill data cache from
-reg dcache_refill_ready; // Indicates the next word of refill data is ready
-wire [(3-1):0] first_cycle_type; // First Wishbone cycle type
-wire [(3-1):0] next_cycle_type; // Next Wishbone cycle type
-wire last_word; // Indicates if this is the last word in the cache line
-wire [(32-1):0] first_address; // First cache refill address
-wire wb_select_x; // Select Wishbone to load from / store to
-reg wb_select_m;
-reg [(32-1):0] wb_data_m; // Data read from Wishbone
-reg wb_load_complete; // Indicates when a Wishbone load is complete
-wire [(32-1):0] physical_load_store_address_m; // X stage physical load/store address
-wire cache_inhibit_x; // Indicates if data cache should be bypassed
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-
-// Data cache
-lm32_dcache #(
- .associativity (associativity),
- .sets (sets),
- .bytes_per_line (bytes_per_line),
- .base_address (base_address),
- .limit (limit)
- ) dcache (
- // ----- Inputs -----
- .clk_i (clk_i),
- .rst_i (rst_i),
- .stall_a (stall_a),
- .stall_x (stall_x),
- .stall_m (stall_m),
- .address_x (load_store_address_x),
- /* VIPT cache, address_m is (only) used for tag */
- .address_m (physical_load_store_address_m),
- .load_q_m (load_q_m & dcache_select_m),
- .store_q_m (store_q_m & dcache_select_m),
- .store_data (store_data_m),
- .store_byte_select (byte_enable_m & {4{dcache_select_m}}),
- .refill_ready (dcache_refill_ready),
- .refill_data (wb_data_m),
- .dflush (dflush),
- .dtlb_miss_x (dtlb_miss_x),
- // ----- Outputs -----
- .stall_request (dcache_stall_request),
- .restart_request (dcache_restart_request),
- .refill_request (dcache_refill_request),
- .refill_address (dcache_refill_address),
- .refilling (dcache_refilling),
- .load_data (dcache_data_m)
- );
-
-// Data TLB
-lm32_dtlb dtlb (
- // ----- Inputs -----
- .clk_i (clk_i),
- .rst_i (rst_i),
- .enable (dtlb_enable),
- .stall_x (stall_x),
- .stall_m (stall_m),
- .address_x (load_store_address_x),
- .address_m (load_store_address_m),
- .load_d (load_d),
- .store_d (store_d),
- .load_q_x (load_q_x),
- .store_q_x (store_q_x),
- .tlbpaddr (tlbpaddr),
- .tlbvaddr (tlbvaddr),
- .update (dtlb_update),
- .flush (dtlb_flush),
- .invalidate (dtlb_invalidate),
- // ----- Outputs -----
- .physical_load_store_address_m (physical_load_store_address_m),
- .stall_request (dtlb_stall_request),
- .miss_vfn (dtlb_miss_vfn),
- .miss_x (dtlb_miss_x),
- .fault_x (dtlb_fault_x),
- .cache_inhibit_x (cache_inhibit_x)
- );
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Select where data should be loaded from / stored to
-
-
- assign dcache_select_x = (load_store_address_x >= 32'h0)
- && (load_store_address_x <= 32'h7fffffff)
- && (cache_inhibit_x == 1'b0)
- ;
-
- assign wb_select_x = 1'b1
- && !dcache_select_x
- ;
-
-// Make sure data to store is in correct byte lane
-always @(*)
-begin
- case (size_x)
- 2'b00: store_data_x = {4{store_operand_x[7:0]}};
- 2'b11: store_data_x = {2{store_operand_x[15:0]}};
- 2'b10: store_data_x = store_operand_x;
- default: store_data_x = {32{1'bx}};
- endcase
-end
-
-// Generate byte enable accoring to size of load or store and address being accessed
-always @(*)
-begin
- casez ({size_x, load_store_address_x[1:0]})
- {2'b00, 2'b11}: byte_enable_x = 4'b0001;
- {2'b00, 2'b10}: byte_enable_x = 4'b0010;
- {2'b00, 2'b01}: byte_enable_x = 4'b0100;
- {2'b00, 2'b00}: byte_enable_x = 4'b1000;
- {2'b11, 2'b1?}: byte_enable_x = 4'b0011;
- {2'b11, 2'b0?}: byte_enable_x = 4'b1100;
- {2'b10, 2'b??}: byte_enable_x = 4'b1111;
- default: byte_enable_x = 4'bxxxx;
- endcase
-end
-
-
-
-
- // WB + DC
- assign data_m = wb_select_m == 1'b1
- ? wb_data_m
- : dcache_data_m;
-
-// Sub-word selection and sign/zero-extension for loads
-always @(*)
-begin
- casez ({size_w, load_store_address_w[1:0]})
- {2'b00, 2'b11}: load_data_w = {{24{sign_extend_w & data_w[7]}}, data_w[7:0]};
- {2'b00, 2'b10}: load_data_w = {{24{sign_extend_w & data_w[15]}}, data_w[15:8]};
- {2'b00, 2'b01}: load_data_w = {{24{sign_extend_w & data_w[23]}}, data_w[23:16]};
- {2'b00, 2'b00}: load_data_w = {{24{sign_extend_w & data_w[31]}}, data_w[31:24]};
- {2'b11, 2'b1?}: load_data_w = {{16{sign_extend_w & data_w[15]}}, data_w[15:0]};
- {2'b11, 2'b0?}: load_data_w = {{16{sign_extend_w & data_w[31]}}, data_w[31:16]};
- {2'b10, 2'b??}: load_data_w = data_w;
- default: load_data_w = {32{1'bx}};
- endcase
-end
-
-// Unused/constant Wishbone signals
-assign d_bte_o = 2'b00;
-
-// Generate signal to indicate last word in cache line
-generate
- case (bytes_per_line)
- 4:
- begin
-assign first_cycle_type = 3'b111;
-assign next_cycle_type = 3'b111;
-assign last_word = 1'b1;
-assign first_address = {dcache_refill_address[32-1:2], 2'b00};
- end
- 8:
- begin
-assign first_cycle_type = 3'b010;
-assign next_cycle_type = 3'b111;
-assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
-assign first_address = {dcache_refill_address[32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00};
- end
- default:
- begin
-assign first_cycle_type = 3'b010;
-assign next_cycle_type = d_adr_o[addr_offset_msb:addr_offset_lsb+1] == {addr_offset_width-1{1'b1}} ? 3'b111 : 3'b010;
-assign last_word = (&d_adr_o[addr_offset_msb:addr_offset_lsb]) == 1'b1;
-assign first_address = {dcache_refill_address[32-1:addr_offset_msb+1], {addr_offset_width{1'b0}}, 2'b00};
- end
- endcase
-endgenerate
-
-/////////////////////////////////////////////////////
-// Sequential Logic
-/////////////////////////////////////////////////////
-
-// Data Wishbone interface
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- d_cyc_o <= 1'b0;
- d_stb_o <= 1'b0;
- d_dat_o <= {32{1'b0}};
- d_adr_o <= {32{1'b0}};
- d_sel_o <= {4{1'b0}};
- d_we_o <= 1'b0;
- d_cti_o <= 3'b111;
- d_lock_o <= 1'b0;
- wb_data_m <= {32{1'b0}};
- wb_load_complete <= 1'b0;
- stall_wb_load <= 1'b0;
- dcache_refill_ready <= 1'b0;
- end
- else
- begin
- // Refill ready should only be asserted for a single cycle
- dcache_refill_ready <= 1'b0;
- // Is a Wishbone cycle already in progress?
- if (d_cyc_o == 1'b1)
- begin
- // Is the cycle complete?
- if ((d_ack_i == 1'b1) || (d_err_i == 1'b1))
- begin
- if ((dcache_refilling == 1'b1) && (!last_word))
- begin
- // Fetch next word of cache line
- d_adr_o[addr_offset_msb:addr_offset_lsb] <= d_adr_o[addr_offset_msb:addr_offset_lsb] + 1'b1;
- end
- else
- begin
- // Refill/access complete
- d_cyc_o <= 1'b0;
- d_stb_o <= 1'b0;
- d_lock_o <= 1'b0;
- end
- d_cti_o <= next_cycle_type;
- // If we are performing a refill, indicate to cache next word of data is ready
- dcache_refill_ready <= dcache_refilling;
- // Register data read from Wishbone interface
- wb_data_m <= d_dat_i;
- // Don't set when stores complete - otherwise we'll deadlock if load in m stage
- wb_load_complete <= !d_we_o;
- end
- // synthesis translate_off
- if (d_err_i == 1'b1)
- $display ("Data bus error. Address: %x", d_adr_o);
- // synthesis translate_on
- end
- else
- begin
- if (dcache_refill_request == 1'b1)
- begin
- // Start cache refill
- d_adr_o <= first_address;
- d_cyc_o <= 1'b1;
- d_sel_o <= {32/8{1'b1}};
- d_stb_o <= 1'b1;
- d_we_o <= 1'b0;
- d_cti_o <= first_cycle_type;
- //d_lock_o <= `TRUE;
- end
- else
- if ( (store_q_m == 1'b1)
- && (stall_m == 1'b0)
- )
- begin
- // Data cache is write through, so all stores go to memory
- d_dat_o <= store_data_m;
- d_adr_o <=
- (dtlb_enable) ? physical_load_store_address_m :
- load_store_address_m;
- d_cyc_o <= 1'b1;
- d_sel_o <= byte_enable_m;
- d_stb_o <= 1'b1;
- d_we_o <= 1'b1;
- d_cti_o <= 3'b111;
- end
- else if ( (load_q_m == 1'b1)
- && (wb_select_m == 1'b1)
- && (wb_load_complete == 1'b0)
- // stall_m will be TRUE, because stall_wb_load will be TRUE
- )
- begin
- // Read requested address
- stall_wb_load <= 1'b0;
- d_adr_o <=
- (dtlb_enable) ? physical_load_store_address_m :
- load_store_address_m;
- d_cyc_o <= 1'b1;
- d_sel_o <= byte_enable_m;
- d_stb_o <= 1'b1;
- d_we_o <= 1'b0;
- d_cti_o <= 3'b111;
- end
- end
- // Clear load/store complete flag when instruction leaves M stage
- if (stall_m == 1'b0)
- wb_load_complete <= 1'b0;
- // When a Wishbone load first enters the M stage, we need to stall it
- if ((load_q_x == 1'b1) && (wb_select_x == 1'b1) && (stall_x == 1'b0))
- stall_wb_load <= 1'b1;
- // Clear stall request if load instruction is killed
- if ((kill_m == 1'b1) || (exception_m == 1'b1))
- stall_wb_load <= 1'b0;
- end
-end
-
-// Pipeline registers
-
-// X/M stage pipeline registers
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- sign_extend_m <= 1'b0;
- size_m <= 2'b00;
- byte_enable_m <= 1'b0;
- store_data_m <= {32{1'b0}};
- dcache_select_m <= 1'b0;
- wb_select_m <= 1'b0;
- end
- else
- begin
- if (stall_m == 1'b0)
- begin
- sign_extend_m <= sign_extend_x;
- size_m <= size_x;
- byte_enable_m <= byte_enable_x;
- store_data_m <= store_data_x;
- dcache_select_m <= dcache_select_x;
- wb_select_m <= wb_select_x;
- end
- end
-end
-
-// M/W stage pipeline registers
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- size_w <= 2'b00;
- data_w <= {32{1'b0}};
- sign_extend_w <= 1'b0;
- end
- else
- begin
- size_w <= size_m;
- data_w <= data_m;
- sign_extend_w <= sign_extend_m;
- end
-end
-
-/////////////////////////////////////////////////////
-// Behavioural Logic
-/////////////////////////////////////////////////////
-
-// synthesis translate_off
-
-// Check for non-aligned loads or stores
-always @(posedge clk_i)
-begin
- if (((load_q_m == 1'b1) || (store_q_m == 1'b1)) && (stall_m == 1'b0))
- begin
- if ((size_m === 2'b11) && (load_store_address_m[0] !== 1'b0))
- $display ("Warning: Non-aligned halfword access. Address: 0x%0x Time: %0t.", load_store_address_m, $time);
- if ((size_m === 2'b10) && (load_store_address_m[1:0] !== 2'b00))
- $display ("Warning: Non-aligned word access. Address: 0x%0x Time: %0t.", load_store_address_m, $time);
- end
-end
-
-// synthesis translate_on
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_logic_op.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_logic_op.v
deleted file mode 100644
index a06b2da..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_logic_op.v
+++ /dev/null
@@ -1,259 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_logic_op.v
-// Title : Logic operations (and / or / not etc)
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_logic_op (
- // ----- Inputs -------
- logic_op_x,
- operand_0_x,
- operand_1_x,
- // ----- Outputs -------
- logic_result_x
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input [3:0] logic_op_x;
-input [(32-1):0] operand_0_x;
-input [(32-1):0] operand_1_x;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [(32-1):0] logic_result_x;
-reg [(32-1):0] logic_result_x;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-integer logic_idx;
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-always @(*)
-begin
- for(logic_idx = 0; logic_idx < 32; logic_idx = logic_idx + 1)
- logic_result_x[logic_idx] = logic_op_x[{operand_1_x[logic_idx], operand_0_x[logic_idx]}];
-end
-
-endmodule
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_mc_arithmetic.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_mc_arithmetic.v
deleted file mode 100644
index e894a82..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_mc_arithmetic.v
+++ /dev/null
@@ -1,364 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm_mc_arithmetic.v
-// Title : Multi-cycle arithmetic unit.
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_mc_arithmetic (
- // ----- Inputs -----
- clk_i,
- rst_i,
- stall_d,
- kill_x,
- divide_d,
- modulus_d,
- operand_0_d,
- operand_1_d,
- // ----- Ouputs -----
- result_x,
- divide_by_zero_x,
- stall_request_x
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-input stall_d; // Stall instruction in D stage
-input kill_x; // Kill instruction in X stage
-input divide_d; // Perform divide
-input modulus_d; // Perform modulus
-input [(32-1):0] operand_0_d;
-input [(32-1):0] operand_1_d;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [(32-1):0] result_x; // Result of operation
-reg [(32-1):0] result_x;
-output divide_by_zero_x; // A divide by zero was attempted
-reg divide_by_zero_x;
-output stall_request_x; // Request to stall pipeline from X stage back
-wire stall_request_x;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-reg [(32-1):0] p; // Temporary registers
-reg [(32-1):0] a;
-reg [(32-1):0] b;
-wire [32:0] t;
-
-reg [2:0] state; // Current state of FSM
-reg [5:0] cycles; // Number of cycles remaining in the operation
-
-
-/////////////////////////////////////////////////////
-// Combinational logic
-/////////////////////////////////////////////////////
-
-// Stall pipeline while any operation is being performed
-assign stall_request_x = state != 3'b000;
-
-// Subtraction
-assign t = {p[32-2:0], a[32-1]} - b;
-
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-// Perform right shift
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- cycles <= {6{1'b0}};
- p <= {32{1'b0}};
- a <= {32{1'b0}};
- b <= {32{1'b0}};
- divide_by_zero_x <= 1'b0;
- result_x <= {32{1'b0}};
- state <= 3'b000;
- end
- else
- begin
- divide_by_zero_x <= 1'b0;
- case (state)
- 3'b000:
- begin
- if (stall_d == 1'b0)
- begin
- cycles <= 32;
- p <= 32'b0;
- a <= operand_0_d;
- b <= operand_1_d;
- if (divide_d == 1'b1)
- state <= 3'b011;
- if (modulus_d == 1'b1)
- state <= 3'b010;
- end
- end
- 3'b011:
- begin
- if (t[32] == 1'b0)
- begin
- p <= t[31:0];
- a <= {a[32-2:0], 1'b1};
- end
- else
- begin
- p <= {p[32-2:0], a[32-1]};
- a <= {a[32-2:0], 1'b0};
- end
- result_x <= a;
- if ((cycles == 32'd0) || (kill_x == 1'b1))
- begin
- // Check for divide by zero
- divide_by_zero_x <= b == {32{1'b0}};
- state <= 3'b000;
- end
- cycles <= cycles - 1'b1;
- end
- 3'b010:
- begin
- if (t[32] == 1'b0)
- begin
- p <= t[31:0];
- a <= {a[32-2:0], 1'b1};
- end
- else
- begin
- p <= {p[32-2:0], a[32-1]};
- a <= {a[32-2:0], 1'b0};
- end
- result_x <= p;
- if ((cycles == 32'd0) || (kill_x == 1'b1))
- begin
- // Check for divide by zero
- divide_by_zero_x <= b == {32{1'b0}};
- state <= 3'b000;
- end
- cycles <= cycles - 1'b1;
- end
- endcase
- end
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_multiplier.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_multiplier.v
deleted file mode 100644
index 0866030..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_multiplier.v
+++ /dev/null
@@ -1,282 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_multiplier.v
-// Title : Pipelined multiplier.
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_multiplier (
- // ----- Inputs -----
- clk_i,
- rst_i,
- stall_x,
- stall_m,
- operand_0,
- operand_1,
- // ----- Ouputs -----
- result
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-input stall_x; // Stall instruction in X stage
-input stall_m; // Stall instruction in M stage
-input [(32-1):0] operand_0; // Muliplicand
-input [(32-1):0] operand_1; // Multiplier
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [(32-1):0] result; // Product of multiplication
-reg [(32-1):0] result;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-reg [(32-1):0] muliplicand;
-reg [(32-1):0] multiplier;
-reg [(32-1):0] product;
-
-/////////////////////////////////////////////////////
-// Sequential logic
-/////////////////////////////////////////////////////
-
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- muliplicand <= {32{1'b0}};
- multiplier <= {32{1'b0}};
- product <= {32{1'b0}};
- result <= {32{1'b0}};
- end
- else
- begin
- if (stall_x == 1'b0)
- begin
- muliplicand <= operand_0;
- multiplier <= operand_1;
- end
- if (stall_m == 1'b0)
- product <= muliplicand * multiplier;
- result <= product;
- end
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_ram.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_ram.v
deleted file mode 100644
index de661a3..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_ram.v
+++ /dev/null
@@ -1,300 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_ram.v
-// Title : Pseudo dual-port RAM.
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : Options added to select EBRs (True-DP, Psuedo-DP, DQ, or
-// : Distributed RAM).
-// Version : 3.2
-// : EBRs use SYNC resets instead of ASYNC resets.
-// Version : 3.5
-// : Added read-after-write hazard resolution when using true
-// : dual-port EBRs
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_ram (
- // ----- Inputs -------
- read_clk,
- write_clk,
- reset,
- enable_read,
- read_address,
- enable_write,
- write_address,
- write_data,
- write_enable,
- // ----- Outputs -------
- read_data
- );
-
-/*----------------------------------------------------------------------
- Parameters
- ----------------------------------------------------------------------*/
-parameter data_width = 1; // Width of the data ports
-parameter address_width = 1; // Width of the address ports
-parameter init_file = "NONE"; // Initialization file
-
-/*----------------------------------------------------------------------
- Inputs
- ----------------------------------------------------------------------*/
-input read_clk; // Read clock
-input write_clk; // Write clock
-input reset; // Reset
-
-input enable_read; // Access enable
-input [address_width-1:0] read_address; // Read/write address
-input enable_write; // Access enable
-input [address_width-1:0] write_address;// Read/write address
-input [data_width-1:0] write_data; // Data to write to specified address
-input write_enable; // Write enable
-
-/*----------------------------------------------------------------------
- Outputs
- ----------------------------------------------------------------------*/
-output [data_width-1:0] read_data; // Data read from specified addess
-wire [data_width-1:0] read_data;
-
-/*----------------------------------------------------------------------
- Internal nets and registers
- ----------------------------------------------------------------------*/
-reg [data_width-1:0] mem[0:(1<<address_width)-1]; // The RAM
-reg [address_width-1:0] ra; // Registered read address
-
-/*----------------------------------------------------------------------
- Combinational Logic
- ----------------------------------------------------------------------*/
-// Read port
-assign read_data = mem[ra];
-
-/*----------------------------------------------------------------------
- Sequential Logic
- ----------------------------------------------------------------------*/
-// Write port
-always @(posedge write_clk)
- if ((write_enable == 1'b1) && (enable_write == 1'b1))
- mem[write_address] <= write_data;
-
-// Register read address for use on next cycle
-always @(posedge read_clk)
- if (enable_read)
- ra <= read_address;
-
-/*----------------------------------------------------------------------
- Initialization
- ----------------------------------------------------------------------*/
-generate
- if (init_file != "NONE")
- begin
-initial $readmemh(init_file, mem);
- end
-endgenerate
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_shifter.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_shifter.v
deleted file mode 100644
index 90ea751..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_shifter.v
+++ /dev/null
@@ -1,317 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_shifter.v
-// Title : Barrel shifter
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_shifter (
- // ----- Inputs -------
- clk_i,
- rst_i,
- stall_x,
- direction_x,
- sign_extend_x,
- operand_0_x,
- operand_1_x,
- // ----- Outputs -------
- shifter_result_m
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-input stall_x; // Stall instruction in X stage
-input direction_x; // Direction to shift
-input sign_extend_x; // Whether shift is arithmetic (1'b1) or logical (1'b0)
-input [(32-1):0] operand_0_x; // Operand to shift
-input [(32-1):0] operand_1_x; // Operand that specifies how many bits to shift by
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-output [(32-1):0] shifter_result_m; // Result of shift
-wire [(32-1):0] shifter_result_m;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-reg direction_m;
-reg [(32-1):0] left_shift_result;
-reg [(32-1):0] right_shift_result;
-reg [(32-1):0] left_shift_operand;
-wire [(32-1):0] right_shift_operand;
-wire fill_value;
-wire [(32-1):0] right_shift_in;
-
-integer shift_idx_0;
-integer shift_idx_1;
-
-/////////////////////////////////////////////////////
-// Combinational Logic
-/////////////////////////////////////////////////////
-
-// Select operands - To perform a left shift, we reverse the bits and perform a right shift
-always @(*)
-begin
- for (shift_idx_0 = 0; shift_idx_0 < 32; shift_idx_0 = shift_idx_0 + 1)
- left_shift_operand[32-1-shift_idx_0] = operand_0_x[shift_idx_0];
-end
-assign right_shift_operand = direction_x == 1'b1 ? left_shift_operand : operand_0_x;
-
-// Determine fill value for right shift - Sign bit for arithmetic shift, or zero for logical shift
-assign fill_value = (sign_extend_x == 1'b1) && (direction_x == 1'b0)
- ? operand_0_x[32-1]
- : 1'b0;
-
-// Determine bits to shift in for right shift or rotate
-assign right_shift_in = {32{fill_value}};
-
-// Reverse bits to get left shift result
-always @(*)
-begin
- for (shift_idx_1 = 0; shift_idx_1 < 32; shift_idx_1 = shift_idx_1 + 1)
- left_shift_result[32-1-shift_idx_1] = right_shift_result[shift_idx_1];
-end
-
-// Select result
-assign shifter_result_m = direction_m == 1'b1 ? left_shift_result : right_shift_result;
-
-/////////////////////////////////////////////////////
-// Sequential Logic
-/////////////////////////////////////////////////////
-
-// Perform right shift
-always @(posedge clk_i )
-begin
- if (rst_i == 1'b1)
- begin
- right_shift_result <= {32{1'b0}};
- direction_m <= 1'b0;
- end
- else
- begin
- if (stall_x == 1'b0)
- begin
- right_shift_result <= {right_shift_in, right_shift_operand} >> operand_1_x[(5-1):0];
- direction_m <= direction_x;
- end
- end
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_top.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_top.v
deleted file mode 100644
index 4f6c942..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/rtl/lm32_top.v
+++ /dev/null
@@ -1,383 +0,0 @@
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_top.v
-// Title : Top-level of CPU.
-// Dependencies : lm32_include.v
-// Version : 6.1.17
-// : removed SPI - 04/12/07
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// =============================================================================
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-
-/////////////////////////////////////////////////////
-// Module interface
-/////////////////////////////////////////////////////
-
-module lm32_top (
- // ----- Inputs -------
- clk_i,
- rst_i,
- // From external devices
- interrupt,
- // From user logic
- // Instruction Wishbone master
- I_DAT_I,
- I_ACK_I,
- I_ERR_I,
- I_RTY_I,
- ext_break,
- // Data Wishbone master
- D_DAT_I,
- D_ACK_I,
- D_ERR_I,
- D_RTY_I,
- // ----- Outputs -------
- // Instruction Wishbone master
- I_DAT_O,
- I_ADR_O,
- I_CYC_O,
- I_SEL_O,
- I_STB_O,
- I_WE_O,
- I_CTI_O,
- I_LOCK_O,
- I_BTE_O,
- // Data Wishbone master
- D_DAT_O,
- D_ADR_O,
- D_CYC_O,
- D_SEL_O,
- D_STB_O,
- D_WE_O,
- D_CTI_O,
- D_LOCK_O,
- D_BTE_O
- );
-
-/////////////////////////////////////////////////////
-// Inputs
-/////////////////////////////////////////////////////
-
-input clk_i; // Clock
-input rst_i; // Reset
-
-
-input [(32-1):0] interrupt; // Interrupt pins
-
-
-input [(32-1):0] I_DAT_I; // Instruction Wishbone interface read data
-input I_ACK_I; // Instruction Wishbone interface acknowledgement
-input I_ERR_I; // Instruction Wishbone interface error
-input I_RTY_I; // Instruction Wishbone interface retry
-
-input [(32-1):0] D_DAT_I; // Data Wishbone interface read data
-input D_ACK_I; // Data Wishbone interface acknowledgement
-input D_ERR_I; // Data Wishbone interface error
-input D_RTY_I; // Data Wishbone interface retry
-
-input ext_break;
-
-/////////////////////////////////////////////////////
-// Outputs
-/////////////////////////////////////////////////////
-
-
-output [(32-1):0] I_DAT_O; // Instruction Wishbone interface write data
-wire [(32-1):0] I_DAT_O;
-output [(32-1):0] I_ADR_O; // Instruction Wishbone interface address
-wire [(32-1):0] I_ADR_O;
-output I_CYC_O; // Instruction Wishbone interface cycle
-wire I_CYC_O;
-output [(4-1):0] I_SEL_O; // Instruction Wishbone interface byte select
-wire [(4-1):0] I_SEL_O;
-output I_STB_O; // Instruction Wishbone interface strobe
-wire I_STB_O;
-output I_WE_O; // Instruction Wishbone interface write enable
-wire I_WE_O;
-output [(3-1):0] I_CTI_O; // Instruction Wishbone interface cycle type
-wire [(3-1):0] I_CTI_O;
-output I_LOCK_O; // Instruction Wishbone interface lock bus
-wire I_LOCK_O;
-output [(2-1):0] I_BTE_O; // Instruction Wishbone interface burst type
-wire [(2-1):0] I_BTE_O;
-
-output [(32-1):0] D_DAT_O; // Data Wishbone interface write data
-wire [(32-1):0] D_DAT_O;
-output [(32-1):0] D_ADR_O; // Data Wishbone interface address
-wire [(32-1):0] D_ADR_O;
-output D_CYC_O; // Data Wishbone interface cycle
-wire D_CYC_O;
-output [(4-1):0] D_SEL_O; // Data Wishbone interface byte select
-wire [(4-1):0] D_SEL_O;
-output D_STB_O; // Data Wishbone interface strobe
-wire D_STB_O;
-output D_WE_O; // Data Wishbone interface write enable
-wire D_WE_O;
-output [(3-1):0] D_CTI_O; // Data Wishbone interface cycle type
-wire [(3-1):0] D_CTI_O;
-output D_LOCK_O; // Date Wishbone interface lock bus
-wire D_LOCK_O;
-output [(2-1):0] D_BTE_O; // Data Wishbone interface burst type
-wire [(2-1):0] D_BTE_O;
-
-/////////////////////////////////////////////////////
-// Internal nets and registers
-/////////////////////////////////////////////////////
-
-
-// TODO: get the trace signals out
-
-/////////////////////////////////////////////////////
-// Functions
-/////////////////////////////////////////////////////
-
-/////////////////////////////////////////////////////
-// Instantiations
-/////////////////////////////////////////////////////
-
-// LM32 CPU
-lm32_cpu cpu (
- // ----- Inputs -------
- .clk_i (clk_i),
- .rst_i (rst_i),
- // From external devices
- .interrupt (interrupt),
- // From user logic
- .ext_break (ext_break),
- // Instruction Wishbone master
- .I_DAT_I (I_DAT_I),
- .I_ACK_I (I_ACK_I),
- .I_ERR_I (I_ERR_I),
- .I_RTY_I (I_RTY_I),
- // Data Wishbone master
- .D_DAT_I (D_DAT_I),
- .D_ACK_I (D_ACK_I),
- .D_ERR_I (D_ERR_I),
- .D_RTY_I (D_RTY_I),
- // ----- Outputs -------
- // Instruction Wishbone master
- .I_DAT_O (I_DAT_O),
- .I_ADR_O (I_ADR_O),
- .I_CYC_O (I_CYC_O),
- .I_SEL_O (I_SEL_O),
- .I_STB_O (I_STB_O),
- .I_WE_O (I_WE_O),
- .I_CTI_O (I_CTI_O),
- .I_LOCK_O (I_LOCK_O),
- .I_BTE_O (I_BTE_O),
- // Data Wishbone master
- .D_DAT_O (D_DAT_O),
- .D_ADR_O (D_ADR_O),
- .D_CYC_O (D_CYC_O),
- .D_SEL_O (D_SEL_O),
- .D_STB_O (D_STB_O),
- .D_WE_O (D_WE_O),
- .D_CTI_O (D_CTI_O),
- .D_LOCK_O (D_LOCK_O),
- .D_BTE_O (D_BTE_O)
- );
-
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/sim/tb_lm32_system.v b/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/sim/tb_lm32_system.v
deleted file mode 100644
index 3b97286..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/lm32/slpp_unit/work/sim/tb_lm32_system.v
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * LatticeMico32
- * System Test Bench
- *
- * Copyright (c) 2012 Michael Walle <michael@walle.cc>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// ==================================================================
-// >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
-// ------------------------------------------------------------------
-// Copyright (c) 2006-2011 by Lattice Semiconductor Corporation
-// ALL RIGHTS RESERVED
-// ------------------------------------------------------------------
-//
-// IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM.
-//
-// Permission:
-//
-// Lattice Semiconductor grants permission to use this code
-// pursuant to the terms of the Lattice Semiconductor Corporation
-// Open Source License Agreement.
-//
-// Disclaimer:
-//
-// Lattice Semiconductor provides no warranty regarding the use or
-// functionality of this code. It is the user's responsibility to
-// verify the user's design for consistency and functionality through
-// the use of formal verification methods.
-//
-// --------------------------------------------------------------------
-//
-// Lattice Semiconductor Corporation
-// 5555 NE Moore Court
-// Hillsboro, OR 97214
-// U.S.A
-//
-// TEL: 1-800-Lattice (USA and Canada)
-// 503-286-8001 (other locations)
-//
-// web: http://www.latticesemi.com/
-// email: techsupport@latticesemi.com
-//
-// --------------------------------------------------------------------
-// FILE DETAILS
-// Project : LatticeMico32
-// File : lm32_include.v
-// Title : CPU global macros
-// Version : 6.1.17
-// : Initial Release
-// Version : 7.0SP2, 3.0
-// : No Change
-// Version : 3.1
-// : No Change
-// Version : 3.2
-// : No Change
-// Version : 3.3
-// : Support for extended configuration register
-// =============================================================================
-
-
-//
-// Common configuration options
-//
-
-
-
-
-
-
-// Enable Debugging
-//`define CFG_JTAG_ENABLED
-//`define CFG_JTAG_UART_ENABLED
-//`define CFG_HW_DEBUG_ENABLED
-
-// Enable MMU
-
-
-
-//
-// End of common configuration options
-//
-
-
-// Wishbone configuration
-
-// Data-path width
-
-// Register file size
-
-// Standard register numbers
-
-// Range of Program Counter. Two LSBs are always 0.
-
-// Range of an instruction
-
-// Adder operation
-
-// Shift direction
-
-// Bus errors
-
-// Derive macro that indicates whether we have single-stepping or not
-
-// Derive macro that indicates whether JTAG interface is required
-
-// Derive macro that indicates whether ROM debug is required
-
-// Derive macro that indicates whether we have a barrel-shifter or not
-
-// Derive macro that indicates whether we have a multiplier or not
-
-// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
-
-// Derive macro that indicates if we are using an EBR register file
-
-// Revision number
-
-// Logical operations - Function encoded directly in instruction
-
-// Conditions for conditional branches
-
-// Size of load or store instruction - Encoding corresponds to opcode
-
-// Width and range of a CSR index
-
-// CSR indices
-
-// Values for WPC CSR
-
-// TLB operation codes
-
-// Exception IDs
-
-// Exception Base Address
-
-// Pipeline result selection mux controls
-
-
-
-
-// Derive a macro to indicate if either of the caches are implemented
-
-/////////////////////////////////////////////////////
-// Interrupts
-/////////////////////////////////////////////////////
-
-// Always enable interrupts
-
-// Currently this is fixed to 32 and should not be changed
-
-/////////////////////////////////////////////////////
-// General
-/////////////////////////////////////////////////////
-
-// Sub-word range types
-
-// Word sub-byte indicies
-
-// Word sub-halfword indices
-
-// Use a synchronous reset
-
-// Wishbone defines
-// Refer to Wishbone System-on-Chip Interconnection Architecture
-// These should probably be moved to a Wishbone common file
-
-// Wishbone cycle types
-
-// Wishbone burst types
-
-`timescale 1 ns / 1 ps
-
-module testbench();
-
-integer i;
-
-reg sys_rst;
-reg sys_clk;
-reg [31:0] interrupt;
-
-reg i_ack;
-wire [31:0] i_adr;
-wire i_cyc;
-wire [31:0] i_dat;
-wire i_stb;
-
-reg d_ack;
-wire [31:0] d_adr;
-wire d_cyc;
-wire [31:0] d_dat_i;
-wire [31:0] d_dat_o;
-wire [3:0] d_sel;
-wire d_stb;
-
-lm32_top lm32(
- .clk_i(sys_clk),
- .rst_i(sys_rst),
-
- .interrupt(interrupt),
- .ext_break(1'b0),
-
- .I_ACK_I(i_ack),
- .I_ADR_O(i_adr),
- .I_BTE_O(),
- .I_CTI_O(),
- .I_CYC_O(i_cyc),
- .I_DAT_I(i_dat),
- .I_DAT_O(),
- .I_ERR_I(1'b0),
- .I_LOCK_O(),
- .I_RTY_I(1'b0),
- .I_SEL_O(),
- .I_STB_O(i_stb),
- .I_WE_O(),
-
- .D_ACK_I(d_ack),
- .D_ADR_O(d_adr),
- .D_BTE_O(),
- .D_CTI_O(),
- .D_CYC_O(d_cyc),
- .D_DAT_I(d_dat_i),
- .D_DAT_O(d_dat_o),
- .D_ERR_I(1'b0),
- .D_LOCK_O(),
- .D_RTY_I(1'b0),
- .D_SEL_O(d_sel),
- .D_STB_O(d_stb),
- .D_WE_O(d_we)
-);
-
-// clock
-initial sys_clk = 1'b0;
-always #50 sys_clk = ~sys_clk;
-
-// reset
-initial begin
- sys_rst = 1'b0;
- repeat (500) @(posedge sys_clk);
- sys_rst = 1'b1;
- repeat (500) @(posedge sys_clk);
- sys_rst = 1'b0;
-end
-
-// memory
-reg [7:0] mem[0:65535];
-initial begin
- for(i=0;i<65536;i=i+1)
- mem[i] = 8'b0;
-end
-
-// memory monitor bitmap
-reg mem_monitor_prog_rd[0:'h4000];
-reg mem_monitor_data_rd[0:'h4000];
-reg mem_monitor_data_wr[0:'h4000];
-initial begin
- for(i=0;i<'h4000;i=i+1) begin
- // print prog read (until icache is hot) and non-stack data writes
- mem_monitor_prog_rd[i] = 1;
- mem_monitor_data_rd[i] = 0;
- mem_monitor_data_wr[i] = i < 'h3000;
- end
-end
-
-wire [31:0] dmem_dat_i;
-reg [31:0] dmem_dat_o;
-wire [13:0] dmem_adr;
-wire [3:0] dmem_we;
-always @(posedge sys_clk) begin
- if(dmem_we[0]) mem[{dmem_adr, 2'b11}] <= dmem_dat_i[7:0];
- if(dmem_we[1]) mem[{dmem_adr, 2'b10}] <= dmem_dat_i[15:8];
- if(dmem_we[2]) mem[{dmem_adr, 2'b01}] <= dmem_dat_i[23:16];
- if(dmem_we[3]) mem[{dmem_adr, 2'b00}] <= dmem_dat_i[31:24];
- dmem_dat_o[7:0] <= mem[{dmem_adr, 2'b11}];
- dmem_dat_o[15:8] <= mem[{dmem_adr, 2'b10}];
- dmem_dat_o[23:16] <= mem[{dmem_adr, 2'b01}];
- dmem_dat_o[31:24] <= mem[{dmem_adr, 2'b00}];
-
- if (dmem_we) begin
- if (mem_monitor_data_wr[dmem_adr] && !d_ack)
- $display("DATA WR: @%08x %02x%02x%02x%02x (%b)", {dmem_adr, 2'b00},
- dmem_we[3] ? dmem_dat_i[31:24] : 8'bz,
- dmem_we[2] ? dmem_dat_i[23:16] : 8'bz,
- dmem_we[1] ? dmem_dat_i[15: 8] : 8'bz,
- dmem_we[0] ? dmem_dat_i[ 7: 0] : 8'bz, dmem_we);
- end else if (d_cyc) begin
- if (mem_monitor_data_rd[dmem_adr] && !d_ack)
- $display("DATA RD: @%08x %02x%02x%02x%02x", {dmem_adr, 2'b00},
- mem[{dmem_adr, 2'b00}], mem[{dmem_adr, 2'b01}],
- mem[{dmem_adr, 2'b10}], mem[{dmem_adr, 2'b11}]);
- end
-end
-reg [31:0] pmem_dat_o;
-wire [13:0] pmem_adr;
-always @(posedge sys_clk) begin
- pmem_dat_o[7:0] <= mem[{pmem_adr, 2'b11}];
- pmem_dat_o[15:8] <= mem[{pmem_adr, 2'b10}];
- pmem_dat_o[23:16] <= mem[{pmem_adr, 2'b01}];
- pmem_dat_o[31:24] <= mem[{pmem_adr, 2'b00}];
-
- if (i_cyc && !i_ack && mem_monitor_prog_rd[pmem_adr])
- $display("PROG RD: @%08x %02x%02x%02x%02x", {pmem_adr, 2'b00},
- mem[{pmem_adr, 2'b00}], mem[{pmem_adr, 2'b01}],
- mem[{pmem_adr, 2'b10}], mem[{pmem_adr, 2'b11}]);
-end
-
-// uart
-always @(posedge sys_clk) begin
- if(d_cyc & d_stb & d_we & d_ack) begin
- if(d_adr == 32'hff000000)
- $write("%c", d_dat_o[7:0]);
- if(d_adr == 32'hff000004)
- $display("OUT: %d", d_dat_o);
- end
-end
-
-// wishbone interface for instruction bus
-always @(posedge sys_clk) begin
- if(sys_rst)
- i_ack <= 1'b0;
- else begin
- i_ack <= 1'b0;
- if(i_cyc & i_stb & ~i_ack)
- i_ack <= 1'b1;
- end
-end
-
-integer clock_counter = 0;
-always @(posedge sys_clk) begin
- clock_counter = clock_counter + 1;
- if (clock_counter == 1000) begin
- $display("-- 1000 sys_clk cycles --");
- clock_counter = 0;
- end
-end
-
-assign i_dat = pmem_dat_o;
-assign pmem_adr = i_adr[15:2];
-
-
-// wishbone interface for data bus
-always @(posedge sys_clk) begin
- if(sys_rst)
- d_ack <= 1'b0;
- else begin
- d_ack <= 1'b0;
- if(d_cyc & d_stb & ~d_ack)
- d_ack <= 1'b1;
- end
-end
-
-assign d_dat_i = dmem_dat_o;
-assign dmem_dat_i = d_dat_o;
-assign dmem_adr = d_adr[15:2];
-assign dmem_we = {4{d_cyc & d_stb & d_we & ~|d_adr[31:16]}} & d_sel;
-
-// interrupts
-initial interrupt <= 32'b0;
-
-// simulation end request
-always @(posedge sys_clk) begin
- if(d_cyc & d_stb & d_we & d_ack)
- if(d_adr == 32'hdead0000 && d_dat_o == 32'hbeef)
- $finish;
-end
-
-// traces
-
-
-// dump signals
-reg [256*8:0] vcdfile;
-initial begin
- if($value$plusargs("dump=%s", vcdfile)) begin
- $dumpfile(vcdfile);
- $dumpvars(0, testbench);
- end
-end
-
-// init memory
-reg [256*8:0] prog;
-initial begin
- if(! $value$plusargs("prog=%s", prog)) begin
- // $display("ERROR: please specify +prog=<file>.vh to start.");
- // $finish;
- prog = "lm32/sim/sieve.vh";
- end
-end
-
-initial $readmemh(prog, mem);
-
-// trace pipeline
-
-initial begin
- // $dumpfile("bench.vcd");
- // @(posedge sys_rst);
- // repeat (5) @(posedge sys_clk);
- // $dumpvars(0, testbench);
- // repeat (2500) @(posedge sys_clk);
- // $finish;
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/surelog.log
deleted file mode 100644
index d11cdac..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/surelog.log
+++ /dev/null
@@ -1,235 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:39:57
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/omsp_alu.v rtl/omsp_and_gate.v rtl/omsp_clock_gate.v rtl/omsp_clock_module.v rtl/omsp_clock_mux.v rtl/omsp_dbg.v rtl/omsp_dbg_hwbrk.v rtl/omsp_dbg_i2c.v rtl/omsp_dbg_uart.v rtl/omsp_execution_unit.v rtl/omsp_frontend.v rtl/omsp_mem_backbone.v rtl/omsp_multiplier.v rtl/omsp_register_file.v rtl/omsp_scan_mux.v rtl/omsp_sfr.v rtl/omsp_sync_cell.v rtl/omsp_sync_reset.v rtl/omsp_wakeup_cell.v rtl/omsp_watchdog.v rtl/openMSP430.v rtl/openMSP430_defines.v rtl/openMSP430_undefines.v sim/bench.v sim/sieve.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[WARNI:PP0103] ./rtl/openMSP430_undefines.v:249 Undefining an unknown macro "PMEM_CUSTOM_AWIDTH".
-
-[WARNI:PP0103] ./rtl/openMSP430_undefines.v:250 Undefining an unknown macro "PMEM_CUSTOM_SIZE".
-
-[WARNI:PP0103] ./rtl/openMSP430_undefines.v:251 Undefining an unknown macro "DMEM_CUSTOM_AWIDTH".
-
-[WARNI:PP0103] ./rtl/openMSP430_undefines.v:252 Undefining an unknown macro "DMEM_CUSTOM_SIZE".
-
-[WARNI:PP0103] ./rtl/openMSP430_undefines.v:253 Undefining an unknown macro "PER_CUSTOM_AWIDTH".
-
-[WARNI:PP0103] ./rtl/openMSP430_undefines.v:254 Undefining an unknown macro "PER_CUSTOM_SIZE".
-
-[ERROR:PP0102] ./rtl/openMSP430_defines.v:626 Unknown macro "PER_SIZE".
-
-[ERROR:PP0102] ./rtl/openMSP430_defines.v:629 Unknown macro "PMEM_AWIDTH".
-
-[ERROR:PP0102] ./rtl/openMSP430_defines.v:630 Unknown macro "DMEM_AWIDTH".
-
-[ERROR:PP0102] ./rtl/openMSP430_defines.v:631 Unknown macro "PER_AWIDTH".
-
-[ERROR:PP0102] ./rtl/openMSP430_defines.v:813 Unknown macro "DBG_DCO_FREQ".
-
-[ERROR:PP0102] ./rtl/openMSP430_defines.v:813 Unknown macro "DBG_UART_BAUD".
-
-[WARNI:PP0103] rtl/openMSP430_undefines.v:249 Undefining an unknown macro "PMEM_CUSTOM_AWIDTH".
-
-[WARNI:PP0103] rtl/openMSP430_undefines.v:250 Undefining an unknown macro "PMEM_CUSTOM_SIZE".
-
-[WARNI:PP0103] rtl/openMSP430_undefines.v:251 Undefining an unknown macro "DMEM_CUSTOM_AWIDTH".
-
-[WARNI:PP0103] rtl/openMSP430_undefines.v:252 Undefining an unknown macro "DMEM_CUSTOM_SIZE".
-
-[WARNI:PP0103] rtl/openMSP430_undefines.v:253 Undefining an unknown macro "PER_CUSTOM_AWIDTH".
-
-[WARNI:PP0103] rtl/openMSP430_undefines.v:254 Undefining an unknown macro "PER_CUSTOM_SIZE".
-
-[ERROR:PA0207] sim/sieve.v:1 Syntax error: missing {'new', 'byte', 'bit', 'logic', 'signed', 'unsigned', 'var', 'expect', 'soft', 'global', 'do', 'this', 'randomize', 'final', 'sample', Escaped_identifier, Simple_identifier} at '[',
-pmem[ 512] = 16'h4031;
- ^-- ./slpp_unit/work/sim/sieve.v:1 col:4.
-
-[WARNI:PA0205] rtl/omsp_and_gate.v:44 No timescale set for "omsp_and_gate".
-
-[WARNI:PA0205] rtl/omsp_clock_gate.v:44 No timescale set for "omsp_clock_gate".
-
-[WARNI:PA0205] rtl/omsp_clock_mux.v:44 No timescale set for "omsp_clock_mux".
-
-[WARNI:PA0205] rtl/omsp_dbg_hwbrk.v:46 No timescale set for "omsp_dbg_hwbrk".
-
-[WARNI:PA0205] rtl/omsp_clock_module.v:46 No timescale set for "omsp_clock_module".
-
-[WARNI:PA0205] rtl/omsp_alu.v:46 No timescale set for "omsp_alu".
-
-[WARNI:PA0205] rtl/omsp_dbg.v:46 No timescale set for "omsp_dbg".
-
-[WARNI:PA0205] rtl/omsp_execution_unit.v:46 No timescale set for "omsp_execution_unit".
-
-[WARNI:PA0205] rtl/omsp_dbg_uart.v:46 No timescale set for "omsp_dbg_uart".
-
-[WARNI:PA0205] rtl/omsp_register_file.v:46 No timescale set for "omsp_register_file".
-
-[WARNI:PA0205] rtl/openMSP430.v:46 No timescale set for "openMSP430".
-
-[WARNI:PA0205] rtl/omsp_dbg_i2c.v:46 No timescale set for "omsp_dbg_i2c".
-
-[WARNI:PA0205] rtl/omsp_mem_backbone.v:46 No timescale set for "omsp_mem_backbone".
-
-[WARNI:PA0205] rtl/omsp_sync_reset.v:44 No timescale set for "omsp_sync_reset".
-
-[WARNI:PA0205] rtl/omsp_wakeup_cell.v:46 No timescale set for "omsp_wakeup_cell".
-
-[WARNI:PA0205] rtl/omsp_multiplier.v:46 No timescale set for "omsp_multiplier".
-
-[WARNI:PA0205] rtl/omsp_sync_cell.v:44 No timescale set for "omsp_sync_cell".
-
-[WARNI:PA0205] rtl/omsp_watchdog.v:46 No timescale set for "omsp_watchdog".
-
-[WARNI:PA0205] rtl/omsp_frontend.v:46 No timescale set for "omsp_frontend".
-
-[WARNI:PA0205] rtl/omsp_scan_mux.v:44 No timescale set for "omsp_scan_mux".
-
-[WARNI:PA0205] rtl/omsp_sfr.v:47 No timescale set for "omsp_sfr".
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/omsp_alu.v:46 Compile module "work@omsp_alu".
-
-[INFO :CP0303] rtl/omsp_clock_gate.v:44 Compile module "work@omsp_clock_gate".
-
-[INFO :CP0303] rtl/omsp_clock_module.v:46 Compile module "work@omsp_clock_module".
-
-[INFO :CP0303] rtl/omsp_and_gate.v:44 Compile module "work@omsp_and_gate".
-
-[INFO :CP0303] rtl/omsp_dbg_hwbrk.v:46 Compile module "work@omsp_dbg_hwbrk".
-
-[INFO :CP0303] rtl/omsp_dbg.v:46 Compile module "work@omsp_dbg".
-
-[INFO :CP0303] rtl/omsp_clock_mux.v:44 Compile module "work@omsp_clock_mux".
-
-[INFO :CP0303] rtl/omsp_frontend.v:46 Compile module "work@omsp_frontend".
-
-[INFO :CP0303] rtl/omsp_dbg_uart.v:46 Compile module "work@omsp_dbg_uart".
-
-[INFO :CP0303] rtl/omsp_dbg_i2c.v:46 Compile module "work@omsp_dbg_i2c".
-
-[INFO :CP0303] rtl/omsp_multiplier.v:46 Compile module "work@omsp_multiplier".
-
-[INFO :CP0303] rtl/omsp_execution_unit.v:46 Compile module "work@omsp_execution_unit".
-
-[INFO :CP0303] rtl/omsp_mem_backbone.v:46 Compile module "work@omsp_mem_backbone".
-
-[INFO :CP0303] rtl/omsp_sync_cell.v:44 Compile module "work@omsp_sync_cell".
-
-[INFO :CP0303] rtl/openMSP430.v:46 Compile module "work@openMSP430".
-
-[INFO :CP0303] rtl/omsp_scan_mux.v:44 Compile module "work@omsp_scan_mux".
-
-[INFO :CP0303] rtl/omsp_sfr.v:47 Compile module "work@omsp_sfr".
-
-[INFO :CP0303] rtl/omsp_wakeup_cell.v:46 Compile module "work@omsp_wakeup_cell".
-
-[INFO :CP0303] rtl/omsp_register_file.v:46 Compile module "work@omsp_register_file".
-
-[INFO :CP0303] rtl/omsp_watchdog.v:46 Compile module "work@omsp_watchdog".
-
-[INFO :CP0303] rtl/omsp_sync_reset.v:44 Compile module "work@omsp_sync_reset".
-
-[INFO :CP0303] sim/bench.v:6 Compile module "work@testbench".
-
-[NOTE :CP0309] rtl/omsp_alu.v:49 Implicit port type (wire) for "alu_out",
-there are 3 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_clock_mux.v:47 Implicit port type (wire) for "clk_out".
-
-[NOTE :CP0309] rtl/omsp_dbg_uart.v:50 Implicit port type (wire) for "dbg_din",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_multiplier.v:49 Implicit port type (wire) for "per_dout".
-
-[NOTE :CP0309] rtl/omsp_sync_cell.v:47 Implicit port type (wire) for "data_out".
-
-[NOTE :CP0309] rtl/openMSP430.v:49 Implicit port type (wire) for "aclk",
-there are 25 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_and_gate.v:47 Implicit port type (wire) for "y".
-
-[NOTE :CP0309] rtl/omsp_dbg.v:49 Implicit port type (wire) for "dbg_cpu_reset",
-there are 9 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_execution_unit.v:49 Implicit port type (wire) for "cpuoff",
-there are 11 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_register_file.v:49 Implicit port type (wire) for "cpuoff",
-there are 9 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_sync_reset.v:47 Implicit port type (wire) for "rst_s".
-
-[NOTE :CP0309] rtl/omsp_clock_gate.v:47 Implicit port type (wire) for "gclk".
-
-[NOTE :CP0309] rtl/omsp_dbg_hwbrk.v:49 Implicit port type (wire) for "brk_halt",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_frontend.v:50 Implicit port type (wire) for "decode_noirq",
-there are 11 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_scan_mux.v:47 Implicit port type (wire) for "data_out".
-
-[NOTE :CP0309] rtl/omsp_clock_module.v:49 Implicit port type (wire) for "aclk",
-there are 14 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_dbg_i2c.v:50 Implicit port type (wire) for "dbg_din".
-
-[NOTE :CP0309] rtl/omsp_mem_backbone.v:49 Implicit port type (wire) for "dbg_mem_din",
-there are 15 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_sfr.v:50 Implicit port type (wire) for "cpu_id",
-there are 5 more instances of this message.
-
-[NOTE :CP0309] rtl/omsp_watchdog.v:49 Implicit port type (wire) for "per_dout",
-there are 3 more instances of this message.
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] rtl/omsp_and_gate.v:44 Top level module "work@omsp_and_gate".
-
-[NOTE :EL0503] rtl/omsp_clock_gate.v:44 Top level module "work@omsp_clock_gate".
-
-[NOTE :EL0503] rtl/omsp_clock_mux.v:44 Top level module "work@omsp_clock_mux".
-
-[NOTE :EL0503] rtl/omsp_dbg_hwbrk.v:46 Top level module "work@omsp_dbg_hwbrk".
-
-[NOTE :EL0503] rtl/omsp_dbg_i2c.v:46 Top level module "work@omsp_dbg_i2c".
-
-[NOTE :EL0503] rtl/omsp_wakeup_cell.v:46 Top level module "work@omsp_wakeup_cell".
-
-[NOTE :EL0503] sim/bench.v:6 Top level module "work@testbench".
-
-[NOTE :EL0503] rtl/omsp_scan_mux.v:44 Top level module "work@omsp_scan_mux".
-
-[NOTE :EL0504] Multiple top level modules in design.
-
-[NOTE :EL0508] Nb Top level modules: 8.
-
-[NOTE :EL0509] Max instance depth: 5.
-
-[NOTE :EL0510] Nb instances: 27.
-
-[NOTE :EL0511] Nb leaf instances: 17.
-
-[ FATAL] : 0
-[ ERROR] : 7
-[WARNING] : 33
-[ NOTE] : 33
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_alu.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_alu.v
deleted file mode 100644
index 99d314b..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_alu.v
+++ /dev/null
@@ -1,1171 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_alu.v
-//
-// *Module Description:
-// openMSP430 ALU
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 134 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2012-03-22 21:31:06 +0100 (Thu, 22 Mar 2012) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_alu (
-
-// OUTPUTs
- alu_out, // ALU output value
- alu_out_add, // ALU adder output value
- alu_stat, // ALU Status {V,N,Z,C}
- alu_stat_wr, // ALU Status write {V,N,Z,C}
-
-// INPUTs
- dbg_halt_st, // Halt/Run status from CPU
- exec_cycle, // Instruction execution cycle
- inst_alu, // ALU control signals
- inst_bw, // Decoded Inst: byte width
- inst_jmp, // Decoded Inst: Conditional jump
- inst_so, // Single-operand arithmetic
- op_dst, // Destination operand
- op_src, // Source operand
- status // R2 Status {V,N,Z,C}
-);
-
-// OUTPUTs
-//=========
-output [15:0] alu_out; // ALU output value
-output [15:0] alu_out_add; // ALU adder output value
-output [3:0] alu_stat; // ALU Status {V,N,Z,C}
-output [3:0] alu_stat_wr; // ALU Status write {V,N,Z,C}
-
-// INPUTs
-//=========
-input dbg_halt_st; // Halt/Run status from CPU
-input exec_cycle; // Instruction execution cycle
-input [11:0] inst_alu; // ALU control signals
-input inst_bw; // Decoded Inst: byte width
-input [7:0] inst_jmp; // Decoded Inst: Conditional jump
-input [7:0] inst_so; // Single-operand arithmetic
-input [15:0] op_dst; // Destination operand
-input [15:0] op_src; // Source operand
-input [3:0] status; // R2 Status {V,N,Z,C}
-
-
-//=============================================================================
-// 1) FUNCTIONS
-//=============================================================================
-
-function [4:0] bcd_add;
-
- input [3:0] X;
- input [3:0] Y;
- input C_;
-
- reg [4:0] Z_;
- begin
- Z_ = {1'b0,X}+{1'b0,Y}+{4'b0,C_};
- if (Z_<5'd10) bcd_add = Z_;
- else bcd_add = Z_+5'd6;
- end
-
-endfunction
-
-
-//=============================================================================
-// 2) INSTRUCTION FETCH/DECODE CONTROL STATE MACHINE
-//=============================================================================
-// SINGLE-OPERAND ARITHMETIC:
-//-----------------------------------------------------------------------------
-// Mnemonic S-Reg, Operation Status bits
-// D-Reg, V N Z C
-//
-// RRC dst C->MSB->...LSB->C * * * *
-// RRA dst MSB->MSB->...LSB->C 0 * * *
-// SWPB dst Swap bytes - - - -
-// SXT dst Bit7->Bit8...Bit15 0 * * *
-// PUSH src SP-2->SP, src->@SP - - - -
-// CALL dst SP-2->SP, PC+2->@SP, dst->PC - - - -
-// RETI TOS->SR, SP+2->SP, TOS->PC, SP+2->SP * * * *
-//
-//-----------------------------------------------------------------------------
-// TWO-OPERAND ARITHMETIC:
-//-----------------------------------------------------------------------------
-// Mnemonic S-Reg, Operation Status bits
-// D-Reg, V N Z C
-//
-// MOV src,dst src -> dst - - - -
-// ADD src,dst src + dst -> dst * * * *
-// ADDC src,dst src + dst + C -> dst * * * *
-// SUB src,dst dst + ~src + 1 -> dst * * * *
-// SUBC src,dst dst + ~src + C -> dst * * * *
-// CMP src,dst dst + ~src + 1 * * * *
-// DADD src,dst src + dst + C -> dst (decimaly) * * * *
-// BIT src,dst src & dst 0 * * *
-// BIC src,dst ~src & dst -> dst - - - -
-// BIS src,dst src | dst -> dst - - - -
-// XOR src,dst src ^ dst -> dst * * * *
-// AND src,dst src & dst -> dst 0 * * *
-//
-//-----------------------------------------------------------------------------
-// * the status bit is affected
-// - the status bit is not affected
-// 0 the status bit is cleared
-// 1 the status bit is set
-//-----------------------------------------------------------------------------
-
-// Invert source for substract and compare instructions.
-wire op_src_inv_cmd = exec_cycle & (inst_alu[0]);
-wire [15:0] op_src_inv = {16{op_src_inv_cmd}} ^ op_src;
-
-
-// Mask the bit 8 for the Byte instructions for correct flags generation
-wire op_bit8_msk = ~exec_cycle | ~inst_bw;
-wire [16:0] op_src_in = {1'b0, {op_src_inv[15:8] & {8{op_bit8_msk}}}, op_src_inv[7:0]};
-wire [16:0] op_dst_in = {1'b0, {op_dst[15:8] & {8{op_bit8_msk}}}, op_dst[7:0]};
-
-// Clear the source operand (= jump offset) for conditional jumps
-wire jmp_not_taken = (inst_jmp[6] & ~(status[3]^status[2])) |
- (inst_jmp[5] & (status[3]^status[2])) |
- (inst_jmp[4] & ~status[2]) |
- (inst_jmp[3] & ~status[0]) |
- (inst_jmp[2] & status[0]) |
- (inst_jmp[1] & ~status[1]) |
- (inst_jmp[0] & status[1]);
-wire [16:0] op_src_in_jmp = op_src_in & {17{~jmp_not_taken}};
-
-// Adder / AND / OR / XOR
-wire [16:0] alu_add = op_src_in_jmp + op_dst_in;
-wire [16:0] alu_and = op_src_in & op_dst_in;
-wire [16:0] alu_or = op_src_in | op_dst_in;
-wire [16:0] alu_xor = op_src_in ^ op_dst_in;
-
-
-// Incrementer
-wire alu_inc = exec_cycle & ((inst_alu[2] & status[0]) |
- inst_alu[1]);
-wire [16:0] alu_add_inc = alu_add + {16'h0000, alu_inc};
-
-
-
-// Decimal adder (DADD)
-wire [4:0] alu_dadd0 = bcd_add(op_src_in[3:0], op_dst_in[3:0], status[0]);
-wire [4:0] alu_dadd1 = bcd_add(op_src_in[7:4], op_dst_in[7:4], alu_dadd0[4]);
-wire [4:0] alu_dadd2 = bcd_add(op_src_in[11:8], op_dst_in[11:8], alu_dadd1[4]);
-wire [4:0] alu_dadd3 = bcd_add(op_src_in[15:12], op_dst_in[15:12],alu_dadd2[4]);
-wire [16:0] alu_dadd = {alu_dadd3, alu_dadd2[3:0], alu_dadd1[3:0], alu_dadd0[3:0]};
-
-
-// Shifter for rotate instructions (RRC & RRA)
-wire alu_shift_msb = inst_so[0] ? status[0] :
- inst_bw ? op_src[7] : op_src[15];
-wire alu_shift_7 = inst_bw ? alu_shift_msb : op_src[8];
-wire [16:0] alu_shift = {1'b0, alu_shift_msb, op_src[15:9], alu_shift_7, op_src[7:1]};
-
-
-// Swap bytes / Extend Sign
-wire [16:0] alu_swpb = {1'b0, op_src[7:0],op_src[15:8]};
-wire [16:0] alu_sxt = {1'b0, {8{op_src[7]}},op_src[7:0]};
-
-
-// Combine short paths toghether to simplify final ALU mux
-wire alu_short_thro = ~(inst_alu[4] |
- inst_alu[5] |
- inst_alu[6] |
- inst_alu[10] |
- inst_so[1] |
- inst_so[3]);
-
-wire [16:0] alu_short = ({17{inst_alu[4]}} & alu_and) |
- ({17{inst_alu[5]}} & alu_or) |
- ({17{inst_alu[6]}} & alu_xor) |
- ({17{inst_alu[10]}} & alu_shift) |
- ({17{inst_so[1]}} & alu_swpb) |
- ({17{inst_so[3]}} & alu_sxt) |
- ({17{alu_short_thro}} & op_src_in);
-
-
-// ALU output mux
-wire [16:0] alu_out_nxt = (inst_so[7] | dbg_halt_st |
- inst_alu[3]) ? alu_add_inc :
- inst_alu[7] ? alu_dadd : alu_short;
-
-assign alu_out = alu_out_nxt[15:0];
-assign alu_out_add = alu_add[15:0];
-
-
-//-----------------------------------------------------------------------------
-// STATUS FLAG GENERATION
-//-----------------------------------------------------------------------------
-
-wire V_xor = inst_bw ? (op_src_in[7] & op_dst_in[7]) :
- (op_src_in[15] & op_dst_in[15]);
-
-wire V = inst_bw ? ((~op_src_in[7] & ~op_dst_in[7] & alu_out[7]) |
- ( op_src_in[7] & op_dst_in[7] & ~alu_out[7])) :
- ((~op_src_in[15] & ~op_dst_in[15] & alu_out[15]) |
- ( op_src_in[15] & op_dst_in[15] & ~alu_out[15]));
-
-wire N = inst_bw ? alu_out[7] : alu_out[15];
-wire Z = inst_bw ? (alu_out[7:0]==0) : (alu_out==0);
-wire C = inst_bw ? alu_out[8] : alu_out_nxt[16];
-
-assign alu_stat = inst_alu[10] ? {1'b0, N,Z,op_src_in[0]} :
- inst_alu[8] ? {1'b0, N,Z,~Z} :
- inst_alu[6] ? {V_xor,N,Z,~Z} : {V,N,Z,C};
-
-assign alu_stat_wr = (inst_alu[9] & exec_cycle) ? 4'b1111 : 4'b0000;
-
-
-endmodule // omsp_alu
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_and_gate.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_and_gate.v
deleted file mode 100644
index 7ceeb8d..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_and_gate.v
+++ /dev/null
@@ -1,89 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_and_gate.v
-//
-// *Module Description:
-// Generic AND gate cell for the openMSP430
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-
-module omsp_and_gate (
-
-// OUTPUTs
- y, // AND gate output
-
-// INPUTs
- a, // AND gate input A
- b // AND gate input B
-);
-
-// OUTPUTs
-//=========
-output y; // AND gate output
-
-// INPUTs
-//=========
-input a; // AND gate input A
-input b; // AND gate input B
-
-
-//=============================================================================
-// 1) SOME COMMENTS ON THIS MODULE
-//=============================================================================
-//
-// In its ASIC version, some combinatorial pathes of the openMSP430 are
-// sensitive to glitches, in particular the ones generating the wakeup
-// signals.
-// To prevent synthesis from optmizing combinatorial clouds into glitchy
-// logic, this AND gate module has been instanciated in the critical places.
-//
-// Make sure that synthesis doesn't ungroup this module. As an alternative,
-// a standard cell from the library could also be directly instanciated here
-// (don't forget the "dont_touch" attribute)
-//
-//
-//=============================================================================
-// 2) AND GATE
-//=============================================================================
-
-assign y = a & b;
-
-
-endmodule // omsp_and_gate
-
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_gate.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_gate.v
deleted file mode 100644
index 8ffe8e0..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_gate.v
+++ /dev/null
@@ -1,86 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_clock_gate.v
-//
-// *Module Description:
-// Generic clock gate cell for the openMSP430
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-
-module omsp_clock_gate (
-
-// OUTPUTs
- gclk, // Gated clock
-
-// INPUTs
- clk, // Clock
- enable, // Clock enable
- scan_enable // Scan enable (active during scan shifting)
-);
-
-// OUTPUTs
-//=========
-output gclk; // Gated clock
-
-// INPUTs
-//=========
-input clk; // Clock
-input enable; // Clock enable
-input scan_enable; // Scan enable (active during scan shifting)
-
-
-//=============================================================================
-// CLOCK GATE: LATCH + AND
-//=============================================================================
-
-// Enable clock gate during scan shift
-// (the gate itself is checked with the scan capture cycle)
-wire enable_in = (enable | scan_enable);
-
-// LATCH the enable signal
-reg enable_latch;
-always @(clk or enable_in)
- if (~clk)
- enable_latch <= enable_in;
-
-// AND gate
-assign gclk = (clk & enable_latch);
-
-
-endmodule // omsp_clock_gate
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_module.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_module.v
deleted file mode 100644
index 0d38ba0..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_module.v
+++ /dev/null
@@ -1,1411 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_clock_module.v
-//
-// *Module Description:
-// Basic clock module implementation.
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_clock_module (
-
-// OUTPUTs
- aclk, // ACLK
- aclk_en, // ACLK enable
- cpu_en_s, // Enable CPU code execution (synchronous)
- dbg_clk, // Debug unit clock
- dbg_en_s, // Debug interface enable (synchronous)
- dbg_rst, // Debug unit reset
- dco_enable, // Fast oscillator enable
- dco_wkup, // Fast oscillator wake-up (asynchronous)
- lfxt_enable, // Low frequency oscillator enable
- lfxt_wkup, // Low frequency oscillator wake-up (asynchronous)
- mclk, // Main system clock
- per_dout, // Peripheral data output
- por, // Power-on reset
- puc_pnd_set, // PUC pending set for the serial debug interface
- puc_rst, // Main system reset
- smclk, // SMCLK
- smclk_en, // SMCLK enable
-
-// INPUTs
- cpu_en, // Enable CPU code execution (asynchronous)
- cpuoff, // Turns off the CPU
- dbg_cpu_reset, // Reset CPU from debug interface
- dbg_en, // Debug interface enable (asynchronous)
- dco_clk, // Fast oscillator (fast clock)
- lfxt_clk, // Low frequency oscillator (typ 32kHz)
- mclk_enable, // Main System Clock enable
- mclk_wkup, // Main System Clock wake-up (asynchronous)
- oscoff, // Turns off LFXT1 clock input
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_en, // Peripheral enable (high active)
- per_we, // Peripheral write enable (high active)
- reset_n, // Reset Pin (low active, asynchronous)
- scan_enable, // Scan enable (active during scan shifting)
- scan_mode, // Scan mode
- scg0, // System clock generator 1. Turns off the DCO
- scg1, // System clock generator 1. Turns off the SMCLK
- wdt_reset // Watchdog-timer reset
-);
-
-// OUTPUTs
-//=========
-output aclk; // ACLK
-output aclk_en; // ACLK enable
-output cpu_en_s; // Enable CPU code execution (synchronous)
-output dbg_clk; // Debug unit clock
-output dbg_en_s; // Debug unit enable (synchronous)
-output dbg_rst; // Debug unit reset
-output dco_enable; // Fast oscillator enable
-output dco_wkup; // Fast oscillator wake-up (asynchronous)
-output lfxt_enable; // Low frequency oscillator enable
-output lfxt_wkup; // Low frequency oscillator wake-up (asynchronous)
-output mclk; // Main system clock
-output [15:0] per_dout; // Peripheral data output
-output por; // Power-on reset
-output puc_pnd_set; // PUC pending set for the serial debug interface
-output puc_rst; // Main system reset
-output smclk; // SMCLK
-output smclk_en; // SMCLK enable
-
-// INPUTs
-//=========
-input cpu_en; // Enable CPU code execution (asynchronous)
-input cpuoff; // Turns off the CPU
-input dbg_cpu_reset;// Reset CPU from debug interface
-input dbg_en; // Debug interface enable (asynchronous)
-input dco_clk; // Fast oscillator (fast clock)
-input lfxt_clk; // Low frequency oscillator (typ 32kHz)
-input mclk_enable; // Main System Clock enable
-input mclk_wkup; // Main System Clock wake-up (asynchronous)
-input oscoff; // Turns off LFXT1 clock input
-input [13:0] per_addr; // Peripheral address
-input [15:0] per_din; // Peripheral data input
-input per_en; // Peripheral enable (high active)
-input [1:0] per_we; // Peripheral write enable (high active)
-input reset_n; // Reset Pin (low active, asynchronous)
-input scan_enable; // Scan enable (active during scan shifting)
-input scan_mode; // Scan mode
-input scg0; // System clock generator 1. Turns off the DCO
-input scg1; // System clock generator 1. Turns off the SMCLK
-input wdt_reset; // Watchdog-timer reset
-
-
-//=============================================================================
-// 1) WIRES & PARAMETER DECLARATION
-//=============================================================================
-
-// Register base address (must be aligned to decoder bit width)
-parameter [14:0] BASE_ADDR = 15'h0050;
-
-// Decoder bit width (defines how many bits are considered for address decoding)
-parameter DEC_WD = 4;
-
-// Register addresses offset
-parameter [DEC_WD-1:0] BCSCTL1 = 'h7,
- BCSCTL2 = 'h8;
-
-// Register one-hot decoder utilities
-parameter DEC_SZ = (1 << DEC_WD);
-parameter [DEC_SZ-1:0] BASE_REG = {{DEC_SZ-1{1'b0}}, 1'b1};
-
-// Register one-hot decoder
-parameter [DEC_SZ-1:0] BCSCTL1_D = (BASE_REG << BCSCTL1),
- BCSCTL2_D = (BASE_REG << BCSCTL2);
-
-// Local wire declarations
-wire nodiv_mclk;
-wire nodiv_mclk_n;
-wire nodiv_smclk;
-
-
-//============================================================================
-// 2) REGISTER DECODER
-//============================================================================
-
-// Local register selection
-wire reg_sel = per_en & (per_addr[13:DEC_WD-1]==BASE_ADDR[14:DEC_WD]);
-
-// Register local address
-wire [DEC_WD-1:0] reg_addr = {1'b0, per_addr[DEC_WD-2:0]};
-
-// Register address decode
-wire [DEC_SZ-1:0] reg_dec = (BCSCTL1_D & {DEC_SZ{(reg_addr==(BCSCTL1 >>1))}}) |
- (BCSCTL2_D & {DEC_SZ{(reg_addr==(BCSCTL2 >>1))}});
-
-// Read/Write probes
-wire reg_lo_write = per_we[0] & reg_sel;
-wire reg_hi_write = per_we[1] & reg_sel;
-wire reg_read = ~|per_we & reg_sel;
-
-// Read/Write vectors
-wire [DEC_SZ-1:0] reg_hi_wr = reg_dec & {DEC_SZ{reg_hi_write}};
-wire [DEC_SZ-1:0] reg_lo_wr = reg_dec & {DEC_SZ{reg_lo_write}};
-wire [DEC_SZ-1:0] reg_rd = reg_dec & {DEC_SZ{reg_read}};
-
-
-//============================================================================
-// 3) REGISTERS
-//============================================================================
-
-// BCSCTL1 Register
-//--------------
-reg [7:0] bcsctl1;
-wire bcsctl1_wr = BCSCTL1[0] ? reg_hi_wr[BCSCTL1] : reg_lo_wr[BCSCTL1];
-wire [7:0] bcsctl1_nxt = BCSCTL1[0] ? per_din[15:8] : per_din[7:0];
-
-wire [7:0] divax_mask = 8'h30;
-
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) bcsctl1 <= 8'h00;
- else if (bcsctl1_wr) bcsctl1 <= bcsctl1_nxt & divax_mask; // Mask unused bits
-
-
-// BCSCTL2 Register
-//--------------
-reg [7:0] bcsctl2;
-wire bcsctl2_wr = BCSCTL2[0] ? reg_hi_wr[BCSCTL2] : reg_lo_wr[BCSCTL2];
-wire [7:0] bcsctl2_nxt = BCSCTL2[0] ? per_din[15:8] : per_din[7:0];
-
-wire [7:0] selmx_mask = 8'h00;
-wire [7:0] divmx_mask = 8'h00;
-wire [7:0] sels_mask = 8'h08;
-wire [7:0] divsx_mask = 8'h06;
-
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) bcsctl2 <= 8'h00;
- else if (bcsctl2_wr) bcsctl2 <= bcsctl2_nxt & ( sels_mask | divsx_mask |
- selmx_mask | divmx_mask); // Mask unused bits
-
-
-//============================================================================
-// 4) DATA OUTPUT GENERATION
-//============================================================================
-
-// Data output mux
-wire [15:0] bcsctl1_rd = {8'h00, (bcsctl1 & {8{reg_rd[BCSCTL1]}})} << (8 & {4{BCSCTL1[0]}});
-wire [15:0] bcsctl2_rd = {8'h00, (bcsctl2 & {8{reg_rd[BCSCTL2]}})} << (8 & {4{BCSCTL2[0]}});
-
-wire [15:0] per_dout = bcsctl1_rd |
- bcsctl2_rd;
-
-
-//=============================================================================
-// 5) DCO_CLK / LFXT_CLK INTERFACES (WAKEUP, ENABLE, ...)
-//=============================================================================
-
-
-//-----------------------------------------------------------
-// 5.1) HIGH SPEED SYSTEM CLOCK GENERATOR (DCO_CLK)
-//-----------------------------------------------------------
-// Note1: switching off the DCO osillator is only
-// supported in ASIC mode with SCG0 low power mode
-//
-// Note2: unlike the original MSP430 specification,
-// we allow to switch off the DCO even
-// if it is selected by MCLK or SMCLK.
-
-wire por_a;
-wire dco_wkup;
-wire cpu_en_wkup;
-
- assign dco_enable = 1'b1;
- assign dco_wkup = 1'b1;
-
-
-//-----------------------------------------------------------
-// 5.2) LOW FREQUENCY CRYSTAL CLOCK GENERATOR (LFXT_CLK)
-//-----------------------------------------------------------
-
-// ASIC MODE
-//------------------------------------------------
-// Note: unlike the original MSP430 specification,
-// we allow to switch off the LFXT even
-// if it is selected by MCLK or SMCLK.
-
-wire lfxt_clk_s;
-
-omsp_sync_cell sync_cell_lfxt_clk (
- .data_out (lfxt_clk_s),
- .data_in (lfxt_clk),
- .clk (mclk),
- .rst (por)
-);
-
-reg lfxt_clk_dly;
-
-always @ (posedge mclk or posedge por)
- if (por) lfxt_clk_dly <= 1'b0;
- else lfxt_clk_dly <= lfxt_clk_s;
-
-wire lfxt_clk_en = (lfxt_clk_s & ~lfxt_clk_dly) & ~(oscoff & ~bcsctl2[3]);
-assign lfxt_enable = 1'b1;
-assign lfxt_wkup = 1'b0;
-
-
-//=============================================================================
-// 6) CLOCK GENERATION
-//=============================================================================
-
-//-----------------------------------------------------------
-// 6.1) GLOBAL CPU ENABLE
-//-----------------------------------------------------------
-// ACLK and SMCLK are directly switched-off
-// with the cpu_en pin (after synchronization).
-// MCLK will be switched off once the CPU reaches
-// its IDLE state (through the mclk_enable signal)
-
-
-// Synchronize CPU_EN signal to the MCLK domain
-//----------------------------------------------
- assign cpu_en_s = cpu_en;
- assign cpu_en_wkup = 1'b0;
-
-// Synchronize CPU_EN signal to the ACLK domain
-//----------------------------------------------
- wire cpu_en_aux_s = cpu_en_s;
-
-// Synchronize CPU_EN signal to the SMCLK domain
-//----------------------------------------------
-// Note: the synchronizer is only required if there is a SMCLK_MUX
-
-
-//-----------------------------------------------------------
-// 6.2) MCLK GENERATION
-//-----------------------------------------------------------
-
-// Clock MUX
-//----------------------------
-assign nodiv_mclk = dco_clk;
-assign nodiv_mclk_n = ~nodiv_mclk;
-
-
-// Wakeup synchronizer
-//----------------------------
-wire mclk_wkup_s;
-
- assign mclk_wkup_s = 1'b0;
-
-
-// Clock Divider
-//----------------------------
-// No need for extra synchronizer as bcsctl2
-// comes from the same clock domain.
-
-wire mclk_active = 1'b1;
-
- wire mclk_div_en = mclk_active;
-
-
-// Generate main system clock
-//----------------------------
- assign mclk = nodiv_mclk;
-
-
-//-----------------------------------------------------------
-// 6.3) ACLK GENERATION
-//-----------------------------------------------------------
-
-// ASIC MODE
-//----------------------------
- reg aclk_en;
- reg [2:0] aclk_div;
- wire aclk_en_nxt = lfxt_clk_en & ((bcsctl1[5:4]==2'b00) ? 1'b1 :
- (bcsctl1[5:4]==2'b01) ? aclk_div[0] :
- (bcsctl1[5:4]==2'b10) ? &aclk_div[1:0] :
- &aclk_div[2:0]);
-
- always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) aclk_div <= 3'h0;
- else if ((bcsctl1[5:4]!=2'b00) & lfxt_clk_en) aclk_div <= aclk_div+3'h1;
-
- always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) aclk_en <= 1'b0;
- else aclk_en <= aclk_en_nxt & cpu_en_s;
-
- assign aclk = mclk;
-
-//-----------------------------------------------------------
-// 6.4) SMCLK GENERATION
-//-----------------------------------------------------------
-
-// Clock MUX
-//----------------------------
-assign nodiv_smclk = dco_clk;
-
-
-// ASIC MODE
-//----------------------------
-reg smclk_en;
-reg [2:0] smclk_div;
-
-wire smclk_in = ~scg1 & (bcsctl2[3] ? lfxt_clk_en : 1'b1);
-
-wire smclk_en_nxt = smclk_in & ((bcsctl2[2:1]==2'b00) ? 1'b1 :
- (bcsctl2[2:1]==2'b01) ? smclk_div[0] :
- (bcsctl2[2:1]==2'b10) ? &smclk_div[1:0] :
- &smclk_div[2:0]);
-
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) smclk_en <= 1'b0;
- else smclk_en <= smclk_en_nxt & cpu_en_s;
-
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) smclk_div <= 3'h0;
- else if ((bcsctl2[2:1]!=2'b00) & smclk_in) smclk_div <= smclk_div+3'h1;
-
-wire smclk = mclk;
-
-
-//-----------------------------------------------------------
-// 6.5) DEBUG INTERFACE CLOCK GENERATION (DBG_CLK)
-//-----------------------------------------------------------
-
-// Synchronize DBG_EN signal to MCLK domain
-//------------------------------------------
- assign dbg_en_s = dbg_en;
- wire dbg_rst_nxt = ~dbg_en;
-
-
-// Serial Debug Interface Clock gate
-//------------------------------------------------
- assign dbg_clk = dco_clk;
-
-
-//=============================================================================
-// 7) RESET GENERATION
-//=============================================================================
-//
-// Whenever the reset pin (reset_n) is deasserted, the internal resets of the
-// openMSP430 will be released in the following order:
-// 1- POR
-// 2- DBG_RST (if the sdi interface is enabled, i.e. dbg_en=1)
-// 3- PUC
-//
-// Note: releasing the DBG_RST before PUC is particularly important in order
-// to allow the sdi interface to halt the cpu immediately after a PUC.
-//
-
-// Generate synchronized POR to MCLK domain
-//------------------------------------------
-
-// Asynchronous reset source
-assign por_a = !reset_n;
-wire por_noscan;
-
-// Reset Synchronizer
-omsp_sync_reset sync_reset_por (
- .rst_s (por_noscan),
- .clk (nodiv_mclk),
- .rst_a (por_a)
-);
-
-// Scan Reset Mux
- assign por = por_noscan;
-
-// Generate synchronized reset for the SDI
-//------------------------------------------
-
-// Reset Generation
-reg dbg_rst_noscan;
-always @ (posedge mclk or posedge por)
- if (por) dbg_rst_noscan <= 1'b1;
- else dbg_rst_noscan <= dbg_rst_nxt;
-
- // Scan Reset Mux
- assign dbg_rst = dbg_rst_noscan;
-
-
-
-// Generate main system reset (PUC_RST)
-//--------------------------------------
-wire puc_noscan_n;
-wire puc_a_scan;
-
-// Asynchronous PUC reset
-wire puc_a = por | wdt_reset;
-
-// Synchronous PUC reset
-wire puc_s = dbg_cpu_reset | // With the debug interface command
-
- (dbg_en_s & dbg_rst_noscan & ~puc_noscan_n); // Sequencing making sure PUC is released
- // after DBG_RST if the debug interface is
- // enabled at power-on-reset time
-// Scan Reset Mux
- assign puc_a_scan = puc_a;
-
-// Reset Synchronizer
-// (required because of the asynchronous watchdog reset)
-omsp_sync_cell sync_cell_puc (
- .data_out (puc_noscan_n),
- .data_in (~puc_s),
- .clk (mclk),
- .rst (puc_a_scan)
-);
-
-// Scan Reset Mux
- assign puc_rst = ~puc_noscan_n;
-
-// PUC pending set the serial debug interface
-assign puc_pnd_set = ~puc_noscan_n;
-
-
-endmodule // omsp_clock_module
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_mux.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_mux.v
deleted file mode 100644
index 5f8406a..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_clock_mux.v
+++ /dev/null
@@ -1,192 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_clock_mux.v
-//
-// *Module Description:
-// Standard clock mux for the openMSP430
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-
-module omsp_clock_mux (
-
-// OUTPUTs
- clk_out, // Clock output
-
-// INPUTs
- clk_in0, // Clock input 0
- clk_in1, // Clock input 1
- reset, // Reset
- scan_mode, // Scan mode (clk_in0 is selected in scan mode)
- select // Clock selection
-);
-
-// OUTPUTs
-//=========
-output clk_out; // Clock output
-
-// INPUTs
-//=========
-input clk_in0; // Clock input 0
-input clk_in1; // Clock input 1
-input reset; // Reset
-input scan_mode; // Scan mode (clk_in0 is selected in scan mode)
-input select; // Clock selection
-
-
-//===========================================================================================================================//
-// 1) CLOCK MUX //
-//===========================================================================================================================//
-// //
-// The following (glitch free) clock mux is implemented as following: //
-// //
-// //
-// //
-// //
-// +-----. +--------+ +--------+ //
-// select >>----+-------------O| \ | | | | +-----. //
-// | | |---| D Q |---| D Q |--+-------| \ //
-// | +-------O| / | | | | | | |O-+ //
-// | | +-----' | | | | | +--O| / | //
-// | | | /\ | | /\ | | | +-----' | //
-// | | +--+--+--+ +--+--+--+ | | | //
-// | | O | | | | //
-// | | | | | | | +-----. //
-// clk_in0 >>----------------------------------+------------+-----------+ +--| \ //
-// | | | | |----<< clk_out //
-// | | +---------------------------------------+ +--| / //
-// | | | | +-----' //
-// | +---------------------------------------------+ | //
-// | | | | //
-// | | +-----. +--------+ +--------+ | | //
-// | +-O| \ | | | | | +-----. | //
-// | | |---| D Q |---| D Q |--+-------| \ | //
-// +--------------| / | | | | | |O-+ //
-// +-----' | | | | +--O| / //
-// | /\ | | /\ | | +-----' //
-// +--+--+--+ +--+--+--+ | //
-// O | | //
-// | | | //
-// clk_in1 >>----------------------------------+------------+-----------+ //
-// //
-// //
-//===========================================================================================================================//
-
-//-----------------------------------------------------------------------------
-// Wire declarations
-//-----------------------------------------------------------------------------
-
-wire in0_select;
-reg in0_select_s;
-reg in0_select_ss;
-wire in0_enable;
-
-wire in1_select;
-reg in1_select_s;
-reg in1_select_ss;
-wire in1_enable;
-
-wire clk_in0_inv;
-wire clk_in1_inv;
-wire gated_clk_in0;
-wire gated_clk_in1;
-
-
-//-----------------------------------------------------------------------------
-// CLK_IN0 Selection
-//-----------------------------------------------------------------------------
-
-assign in0_select = ~select & ~in1_select_ss;
-
-always @ (posedge clk_in0_inv or posedge reset)
- if (reset) in0_select_s <= 1'b1;
- else in0_select_s <= in0_select;
-
-always @ (posedge clk_in0 or posedge reset)
- if (reset) in0_select_ss <= 1'b1;
- else in0_select_ss <= in0_select_s;
-
-assign in0_enable = in0_select_ss | scan_mode;
-
-
-//-----------------------------------------------------------------------------
-// CLK_IN1 Selection
-//-----------------------------------------------------------------------------
-
-assign in1_select = select & ~in0_select_ss;
-
-always @ (posedge clk_in1_inv or posedge reset)
- if (reset) in1_select_s <= 1'b0;
- else in1_select_s <= in1_select;
-
-always @ (posedge clk_in1 or posedge reset)
- if (reset) in1_select_ss <= 1'b0;
- else in1_select_ss <= in1_select_s;
-
-assign in1_enable = in1_select_ss & ~scan_mode;
-
-
-//-----------------------------------------------------------------------------
-// Clock MUX
-//-----------------------------------------------------------------------------
-//
-// IMPORTANT NOTE:
-// Because the clock network is a critical part of the design,
-// the following combinatorial logic should be replaced with
-// direct instanciation of standard cells from target library.
-// Don't forget the "dont_touch" attribute to make sure
-// synthesis won't mess it up.
-//
-
-// Replace with standard cell INVERTER
-assign clk_in0_inv = ~clk_in0;
-assign clk_in1_inv = ~clk_in1;
-
-
-// Replace with standard cell NAND2
-assign gated_clk_in0 = ~(clk_in0_inv & in0_enable);
-assign gated_clk_in1 = ~(clk_in1_inv & in1_enable);
-
-
-// Replace with standard cell AND2
-assign clk_out = (gated_clk_in0 & gated_clk_in1);
-
-
-
-endmodule // omsp_clock_gate
-
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg.v
deleted file mode 100644
index 5c505fa..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg.v
+++ /dev/null
@@ -1,1522 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_dbg.v
-//
-// *Module Description:
-// Debug interface
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 175 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-01-30 22:21:42 +0100 (Wed, 30 Jan 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_dbg (
-
-// OUTPUTs
- dbg_cpu_reset, // Reset CPU from debug interface
- dbg_freeze, // Freeze peripherals
- dbg_halt_cmd, // Halt CPU command
- dbg_i2c_sda_out, // Debug interface: I2C SDA OUT
- dbg_mem_addr, // Debug address for rd/wr access
- dbg_mem_dout, // Debug unit data output
- dbg_mem_en, // Debug unit memory enable
- dbg_mem_wr, // Debug unit memory write
- dbg_reg_wr, // Debug unit CPU register write
- dbg_uart_txd, // Debug interface: UART TXD
-
-// INPUTs
- cpu_en_s, // Enable CPU code execution (synchronous)
- cpu_id, // CPU ID
- cpu_nr_inst, // Current oMSP instance number
- cpu_nr_total, // Total number of oMSP instances-1
- dbg_clk, // Debug unit clock
- dbg_en_s, // Debug interface enable (synchronous)
- dbg_halt_st, // Halt/Run status from CPU
- dbg_i2c_addr, // Debug interface: I2C Address
- dbg_i2c_broadcast, // Debug interface: I2C Broadcast Address (for multicore systems)
- dbg_i2c_scl, // Debug interface: I2C SCL
- dbg_i2c_sda_in, // Debug interface: I2C SDA IN
- dbg_mem_din, // Debug unit Memory data input
- dbg_reg_din, // Debug unit CPU register data input
- dbg_rst, // Debug unit reset
- dbg_uart_rxd, // Debug interface: UART RXD (asynchronous)
- decode_noirq, // Frontend decode instruction
- eu_mab, // Execution-Unit Memory address bus
- eu_mb_en, // Execution-Unit Memory bus enable
- eu_mb_wr, // Execution-Unit Memory bus write transfer
- fe_mdb_in, // Frontend Memory data bus input
- pc, // Program counter
- puc_pnd_set // PUC pending set for the serial debug interface
-);
-
-// OUTPUTs
-//=========
-output dbg_cpu_reset; // Reset CPU from debug interface
-output dbg_freeze; // Freeze peripherals
-output dbg_halt_cmd; // Halt CPU command
-output dbg_i2c_sda_out; // Debug interface: I2C SDA OUT
-output [15:0] dbg_mem_addr; // Debug address for rd/wr access
-output [15:0] dbg_mem_dout; // Debug unit data output
-output dbg_mem_en; // Debug unit memory enable
-output [1:0] dbg_mem_wr; // Debug unit memory write
-output dbg_reg_wr; // Debug unit CPU register write
-output dbg_uart_txd; // Debug interface: UART TXD
-
-// INPUTs
-//=========
-input cpu_en_s; // Enable CPU code execution (synchronous)
-input [31:0] cpu_id; // CPU ID
-input [7:0] cpu_nr_inst; // Current oMSP instance number
-input [7:0] cpu_nr_total; // Total number of oMSP instances-1
-input dbg_clk; // Debug unit clock
-input dbg_en_s; // Debug interface enable (synchronous)
-input dbg_halt_st; // Halt/Run status from CPU
-input [6:0] dbg_i2c_addr; // Debug interface: I2C Address
-input [6:0] dbg_i2c_broadcast; // Debug interface: I2C Broadcast Address (for multicore systems)
-input dbg_i2c_scl; // Debug interface: I2C SCL
-input dbg_i2c_sda_in; // Debug interface: I2C SDA IN
-input [15:0] dbg_mem_din; // Debug unit Memory data input
-input [15:0] dbg_reg_din; // Debug unit CPU register data input
-input dbg_rst; // Debug unit reset
-input dbg_uart_rxd; // Debug interface: UART RXD (asynchronous)
-input decode_noirq; // Frontend decode instruction
-input [15:0] eu_mab; // Execution-Unit Memory address bus
-input eu_mb_en; // Execution-Unit Memory bus enable
-input [1:0] eu_mb_wr; // Execution-Unit Memory bus write transfer
-input [15:0] fe_mdb_in; // Frontend Memory data bus input
-input [15:0] pc; // Program counter
-input puc_pnd_set; // PUC pending set for the serial debug interface
-
-
-//=============================================================================
-// 1) WIRE & PARAMETER DECLARATION
-//=============================================================================
-
-// Diverse wires and registers
-wire [5:0] dbg_addr;
-wire [15:0] dbg_din;
-wire dbg_wr;
-reg mem_burst;
-wire dbg_reg_rd;
-wire dbg_mem_rd;
-reg dbg_mem_rd_dly;
-wire dbg_swbrk;
-wire dbg_rd;
-reg dbg_rd_rdy;
-wire mem_burst_rd;
-wire mem_burst_wr;
-wire brk0_halt;
-wire brk0_pnd;
-wire [15:0] brk0_dout;
-wire brk1_halt;
-wire brk1_pnd;
-wire [15:0] brk1_dout;
-wire brk2_halt;
-wire brk2_pnd;
-wire [15:0] brk2_dout;
-wire brk3_halt;
-wire brk3_pnd;
-wire [15:0] brk3_dout;
-
-// Number of registers
-parameter NR_REG = 25;
-
-// Register addresses
-parameter CPU_ID_LO = 6'h00;
-parameter CPU_ID_HI = 6'h01;
-parameter CPU_CTL = 6'h02;
-parameter CPU_STAT = 6'h03;
-parameter MEM_CTL = 6'h04;
-parameter MEM_ADDR = 6'h05;
-parameter MEM_DATA = 6'h06;
-parameter MEM_CNT = 6'h07;
-parameter CPU_NR = 6'h18;
-
-// Register one-hot decoder
-parameter BASE_D = {{NR_REG-1{1'b0}}, 1'b1};
-parameter CPU_ID_LO_D = (BASE_D << CPU_ID_LO);
-parameter CPU_ID_HI_D = (BASE_D << CPU_ID_HI);
-parameter CPU_CTL_D = (BASE_D << CPU_CTL);
-parameter CPU_STAT_D = (BASE_D << CPU_STAT);
-parameter MEM_CTL_D = (BASE_D << MEM_CTL);
-parameter MEM_ADDR_D = (BASE_D << MEM_ADDR);
-parameter MEM_DATA_D = (BASE_D << MEM_DATA);
-parameter MEM_CNT_D = (BASE_D << MEM_CNT);
-parameter CPU_NR_D = (BASE_D << CPU_NR);
-
-
-//============================================================================
-// 2) REGISTER DECODER
-//============================================================================
-
-// Select Data register during a burst
-wire [5:0] dbg_addr_in = mem_burst ? MEM_DATA : dbg_addr;
-
-// Register address decode
-reg [NR_REG-1:0] reg_dec;
-always @(dbg_addr_in)
- case (dbg_addr_in)
- CPU_ID_LO : reg_dec = CPU_ID_LO_D;
- CPU_ID_HI : reg_dec = CPU_ID_HI_D;
- CPU_CTL : reg_dec = CPU_CTL_D;
- CPU_STAT : reg_dec = CPU_STAT_D;
- MEM_CTL : reg_dec = MEM_CTL_D;
- MEM_ADDR : reg_dec = MEM_ADDR_D;
- MEM_DATA : reg_dec = MEM_DATA_D;
- MEM_CNT : reg_dec = MEM_CNT_D;
- CPU_NR : reg_dec = CPU_NR_D;
- // pragma coverage off
- default: reg_dec = {NR_REG{1'b0}};
- // pragma coverage on
- endcase
-
-// Read/Write probes
-wire reg_write = dbg_wr;
-wire reg_read = 1'b1;
-
-// Read/Write vectors
-wire [NR_REG-1:0] reg_wr = reg_dec & {NR_REG{reg_write}};
-wire [NR_REG-1:0] reg_rd = reg_dec & {NR_REG{reg_read}};
-
-
-//=============================================================================
-// 3) REGISTER: CORE INTERFACE
-//=============================================================================
-
-// CPU_ID Register
-//-----------------
-// -------------------------------------------------------------------
-// CPU_ID_LO: | 15 14 13 12 11 10 9 | 8 7 6 5 4 | 3 | 2 1 0 |
-// |----------------------------+-----------------+------+-------------|
-// | PER_SPACE | USER_VERSION | ASIC | CPU_VERSION |
-// --------------------------------------------------------------------
-// CPU_ID_HI: | 15 14 13 12 11 10 | 9 8 7 6 5 4 3 2 1 | 0 |
-// |----------------------------+-------------------------------+------|
-// | PMEM_SIZE | DMEM_SIZE | MPY |
-// -------------------------------------------------------------------
-
-// This register is assigned in the SFR module
-
-
-// CPU_NR Register
-//-----------------
-// -------------------------------------------------------------------
-// | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 |
-// |---------------------------------+---------------------------------|
-// | CPU_TOTAL_NR | CPU_INST_NR |
-// -------------------------------------------------------------------
-
-wire [15:0] cpu_nr = {cpu_nr_total, cpu_nr_inst};
-
-
-// CPU_CTL Register
-//-----------------------------------------------------------------------------
-// 7 6 5 4 3 2 1 0
-// Reserved CPU_RST RST_BRK_EN FRZ_BRK_EN SW_BRK_EN ISTEP RUN HALT
-//-----------------------------------------------------------------------------
-reg [6:3] cpu_ctl;
-
-wire cpu_ctl_wr = reg_wr[CPU_CTL];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) cpu_ctl <= 4'h6;
- else if (cpu_ctl_wr) cpu_ctl <= dbg_din[6:3];
-
-wire [7:0] cpu_ctl_full = {1'b0, cpu_ctl, 3'b000};
-
-wire halt_cpu = cpu_ctl_wr & dbg_din[0] & ~dbg_halt_st;
-wire run_cpu = cpu_ctl_wr & dbg_din[1] & dbg_halt_st;
-wire istep = cpu_ctl_wr & dbg_din[2] & dbg_halt_st;
-
-
-// CPU_STAT Register
-//------------------------------------------------------------------------------------
-// 7 6 5 4 3 2 1 0
-// HWBRK3_PND HWBRK2_PND HWBRK1_PND HWBRK0_PND SWBRK_PND PUC_PND Res. HALT_RUN
-//------------------------------------------------------------------------------------
-reg [3:2] cpu_stat;
-
-wire cpu_stat_wr = reg_wr[CPU_STAT];
-wire [3:2] cpu_stat_set = {dbg_swbrk, puc_pnd_set};
-wire [3:2] cpu_stat_clr = ~dbg_din[3:2];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) cpu_stat <= 2'b00;
- else if (cpu_stat_wr) cpu_stat <= ((cpu_stat & cpu_stat_clr) | cpu_stat_set);
- else cpu_stat <= (cpu_stat | cpu_stat_set);
-
-wire [7:0] cpu_stat_full = {brk3_pnd, brk2_pnd, brk1_pnd, brk0_pnd,
- cpu_stat, 1'b0, dbg_halt_st};
-
-
-//=============================================================================
-// 4) REGISTER: MEMORY INTERFACE
-//=============================================================================
-
-// MEM_CTL Register
-//-----------------------------------------------------------------------------
-// 7 6 5 4 3 2 1 0
-// Reserved B/W MEM/REG RD/WR START
-//
-// START : - 0 : Do nothing.
-// - 1 : Initiate memory transfer.
-//
-// RD/WR : - 0 : Read access.
-// - 1 : Write access.
-//
-// MEM/REG: - 0 : Memory access.
-// - 1 : CPU Register access.
-//
-// B/W : - 0 : 16 bit access.
-// - 1 : 8 bit access (not valid for CPU Registers).
-//
-//-----------------------------------------------------------------------------
-reg [3:1] mem_ctl;
-
-wire mem_ctl_wr = reg_wr[MEM_CTL];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_ctl <= 3'h0;
- else if (mem_ctl_wr) mem_ctl <= dbg_din[3:1];
-
-wire [7:0] mem_ctl_full = {4'b0000, mem_ctl, 1'b0};
-
-reg mem_start;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_start <= 1'b0;
- else mem_start <= mem_ctl_wr & dbg_din[0];
-
-wire mem_bw = mem_ctl[3];
-
-// MEM_DATA Register
-//------------------
-reg [15:0] mem_data;
-reg [15:0] mem_addr;
-wire mem_access;
-
-wire mem_data_wr = reg_wr[MEM_DATA];
-
-wire [15:0] dbg_mem_din_bw = ~mem_bw ? dbg_mem_din :
- mem_addr[0] ? {8'h00, dbg_mem_din[15:8]} :
- {8'h00, dbg_mem_din[7:0]};
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_data <= 16'h0000;
- else if (mem_data_wr) mem_data <= dbg_din;
- else if (dbg_reg_rd) mem_data <= dbg_reg_din;
- else if (dbg_mem_rd_dly) mem_data <= dbg_mem_din_bw;
-
-
-// MEM_ADDR Register
-//------------------
-reg [15:0] mem_cnt;
-
-wire mem_addr_wr = reg_wr[MEM_ADDR];
-wire dbg_mem_acc = (|dbg_mem_wr | (dbg_rd_rdy & ~mem_ctl[2]));
-wire dbg_reg_acc = ( dbg_reg_wr | (dbg_rd_rdy & mem_ctl[2]));
-
-wire [15:0] mem_addr_inc = (mem_cnt==16'h0000) ? 16'h0000 :
- (mem_burst & dbg_mem_acc & ~mem_bw) ? 16'h0002 :
- (mem_burst & (dbg_mem_acc | dbg_reg_acc)) ? 16'h0001 : 16'h0000;
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_addr <= 16'h0000;
- else if (mem_addr_wr) mem_addr <= dbg_din;
- else mem_addr <= mem_addr + mem_addr_inc;
-
-// MEM_CNT Register
-//------------------
-
-wire mem_cnt_wr = reg_wr[MEM_CNT];
-
-wire [15:0] mem_cnt_dec = (mem_cnt==16'h0000) ? 16'h0000 :
- (mem_burst & (dbg_mem_acc | dbg_reg_acc)) ? 16'hffff : 16'h0000;
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_cnt <= 16'h0000;
- else if (mem_cnt_wr) mem_cnt <= dbg_din;
- else mem_cnt <= mem_cnt + mem_cnt_dec;
-
-
-//=============================================================================
-// 5) BREAKPOINTS / WATCHPOINTS
-//=============================================================================
-
-assign brk0_halt = 1'b0;
-assign brk0_pnd = 1'b0;
-assign brk0_dout = 16'h0000;
-
-assign brk1_halt = 1'b0;
-assign brk1_pnd = 1'b0;
-assign brk1_dout = 16'h0000;
-
- assign brk2_halt = 1'b0;
-assign brk2_pnd = 1'b0;
-assign brk2_dout = 16'h0000;
-
-assign brk3_halt = 1'b0;
-assign brk3_pnd = 1'b0;
-assign brk3_dout = 16'h0000;
-
-
-//============================================================================
-// 6) DATA OUTPUT GENERATION
-//============================================================================
-
-wire [15:0] cpu_id_lo_rd = cpu_id[15:0] & {16{reg_rd[CPU_ID_LO]}};
-wire [15:0] cpu_id_hi_rd = cpu_id[31:16] & {16{reg_rd[CPU_ID_HI]}};
-wire [15:0] cpu_ctl_rd = {8'h00, cpu_ctl_full} & {16{reg_rd[CPU_CTL]}};
-wire [15:0] cpu_stat_rd = {8'h00, cpu_stat_full} & {16{reg_rd[CPU_STAT]}};
-wire [15:0] mem_ctl_rd = {8'h00, mem_ctl_full} & {16{reg_rd[MEM_CTL]}};
-wire [15:0] mem_data_rd = mem_data & {16{reg_rd[MEM_DATA]}};
-wire [15:0] mem_addr_rd = mem_addr & {16{reg_rd[MEM_ADDR]}};
-wire [15:0] mem_cnt_rd = mem_cnt & {16{reg_rd[MEM_CNT]}};
-wire [15:0] cpu_nr_rd = cpu_nr & {16{reg_rd[CPU_NR]}};
-
-wire [15:0] dbg_dout = cpu_id_lo_rd |
- cpu_id_hi_rd |
- cpu_ctl_rd |
- cpu_stat_rd |
- mem_ctl_rd |
- mem_data_rd |
- mem_addr_rd |
- mem_cnt_rd |
- brk0_dout |
- brk1_dout |
- brk2_dout |
- brk3_dout |
- cpu_nr_rd;
-
-// Tell UART/I2C interface that the data is ready to be read
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_rd_rdy <= 1'b0;
- else if (mem_burst | mem_burst_rd) dbg_rd_rdy <= (dbg_reg_rd | dbg_mem_rd_dly);
- else dbg_rd_rdy <= dbg_rd;
-
-
-//============================================================================
-// 7) CPU CONTROL
-//============================================================================
-
-// Reset CPU
-//--------------------------
-wire dbg_cpu_reset = cpu_ctl[6];
-
-
-// Break after reset
-//--------------------------
-wire halt_rst = cpu_ctl[5] & dbg_en_s & puc_pnd_set;
-
-
-// Freeze peripherals
-//--------------------------
-wire dbg_freeze = dbg_halt_st & (cpu_ctl[4] | ~cpu_en_s);
-
-
-// Software break
-//--------------------------
-assign dbg_swbrk = (fe_mdb_in==16'h4343) & decode_noirq & cpu_ctl[3];
-
-
-// Single step
-//--------------------------
-reg [1:0] inc_step;
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) inc_step <= 2'b00;
- else if (istep) inc_step <= 2'b11;
- else inc_step <= {inc_step[0], 1'b0};
-
-
-// Run / Halt
-//--------------------------
-reg halt_flag;
-
-wire mem_halt_cpu;
-wire mem_run_cpu;
-
-wire halt_flag_clr = run_cpu | mem_run_cpu;
-wire halt_flag_set = halt_cpu | halt_rst | dbg_swbrk | mem_halt_cpu |
- brk0_halt | brk1_halt | brk2_halt | brk3_halt;
-
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) halt_flag <= 1'b0;
- else if (halt_flag_clr) halt_flag <= 1'b0;
- else if (halt_flag_set) halt_flag <= 1'b1;
-
-wire dbg_halt_cmd = (halt_flag | halt_flag_set) & ~inc_step[1];
-
-
-//============================================================================
-// 8) MEMORY CONTROL
-//============================================================================
-
-// Control Memory bursts
-//------------------------------
-
-wire mem_burst_start = (mem_start & |mem_cnt);
-wire mem_burst_end = ((dbg_wr | dbg_rd_rdy) & ~|mem_cnt);
-
-// Detect when burst is on going
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_burst <= 1'b0;
- else if (mem_burst_start) mem_burst <= 1'b1;
- else if (mem_burst_end) mem_burst <= 1'b0;
-
-// Control signals for UART/I2C interface
-assign mem_burst_rd = (mem_burst_start & ~mem_ctl[1]);
-assign mem_burst_wr = (mem_burst_start & mem_ctl[1]);
-
-// Trigger CPU Register or memory access during a burst
-reg mem_startb;
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_startb <= 1'b0;
- else mem_startb <= (mem_burst & (dbg_wr | dbg_rd)) | mem_burst_rd;
-
-// Combine single and burst memory start of sequence
-wire mem_seq_start = ((mem_start & ~|mem_cnt) | mem_startb);
-
-
-// Memory access state machine
-//------------------------------
-reg [1:0] mem_state;
-reg [1:0] mem_state_nxt;
-
-// State machine definition
-parameter M_IDLE = 2'h0;
-parameter M_SET_BRK = 2'h1;
-parameter M_ACCESS_BRK = 2'h2;
-parameter M_ACCESS = 2'h3;
-
-// State transition
-always @(mem_state or mem_seq_start or dbg_halt_st)
- case (mem_state)
- M_IDLE : mem_state_nxt = ~mem_seq_start ? M_IDLE :
- dbg_halt_st ? M_ACCESS : M_SET_BRK;
- M_SET_BRK : mem_state_nxt = dbg_halt_st ? M_ACCESS_BRK : M_SET_BRK;
- M_ACCESS_BRK : mem_state_nxt = M_IDLE;
- M_ACCESS : mem_state_nxt = M_IDLE;
- // pragma coverage off
- default : mem_state_nxt = M_IDLE;
- // pragma coverage on
- endcase
-
-// State machine
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) mem_state <= M_IDLE;
- else mem_state <= mem_state_nxt;
-
-// Utility signals
-assign mem_halt_cpu = (mem_state==M_IDLE) & (mem_state_nxt==M_SET_BRK);
-assign mem_run_cpu = (mem_state==M_ACCESS_BRK) & (mem_state_nxt==M_IDLE);
-assign mem_access = (mem_state==M_ACCESS) | (mem_state==M_ACCESS_BRK);
-
-
-// Interface to CPU Registers and Memory bacbkone
-//------------------------------------------------
-assign dbg_mem_addr = mem_addr;
-assign dbg_mem_dout = ~mem_bw ? mem_data :
- mem_addr[0] ? {mem_data[7:0], 8'h00} :
- {8'h00, mem_data[7:0]};
-
-assign dbg_reg_wr = mem_access & mem_ctl[1] & mem_ctl[2];
-assign dbg_reg_rd = mem_access & ~mem_ctl[1] & mem_ctl[2];
-
-assign dbg_mem_en = mem_access & ~mem_ctl[2];
-assign dbg_mem_rd = dbg_mem_en & ~mem_ctl[1];
-
-wire [1:0] dbg_mem_wr_msk = ~mem_bw ? 2'b11 :
- mem_addr[0] ? 2'b10 : 2'b01;
-assign dbg_mem_wr = {2{dbg_mem_en & mem_ctl[1]}} & dbg_mem_wr_msk;
-
-
-// It takes one additional cycle to read from Memory as from registers
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_mem_rd_dly <= 1'b0;
- else dbg_mem_rd_dly <= dbg_mem_rd;
-
-
-//=============================================================================
-// 9) UART COMMUNICATION
-//=============================================================================
-omsp_dbg_uart dbg_uart_0 (
-
-// OUTPUTs
- .dbg_addr (dbg_addr), // Debug register address
- .dbg_din (dbg_din), // Debug register data input
- .dbg_rd (dbg_rd), // Debug register data read
- .dbg_uart_txd (dbg_uart_txd), // Debug interface: UART TXD
- .dbg_wr (dbg_wr), // Debug register data write
-
-// INPUTs
- .dbg_clk (dbg_clk), // Debug unit clock
- .dbg_dout (dbg_dout), // Debug register data output
- .dbg_rd_rdy (dbg_rd_rdy), // Debug register data is ready for read
- .dbg_rst (dbg_rst), // Debug unit reset
- .dbg_uart_rxd (dbg_uart_rxd), // Debug interface: UART RXD
- .mem_burst (mem_burst), // Burst on going
- .mem_burst_end (mem_burst_end), // End TX/RX burst
- .mem_burst_rd (mem_burst_rd), // Start TX burst
- .mem_burst_wr (mem_burst_wr), // Start RX burst
- .mem_bw (mem_bw) // Burst byte width
-);
-
-
-//=============================================================================
-// 10) I2C COMMUNICATION
-//=============================================================================
- assign dbg_i2c_sda_out = 1'b1;
-
-endmodule // omsp_dbg
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_hwbrk.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_hwbrk.v
deleted file mode 100644
index b534c03..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_hwbrk.v
+++ /dev/null
@@ -1,1172 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_dbg_hwbrk.v
-//
-// *Module Description:
-// Hardware Breakpoint / Watchpoint module
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 175 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-01-30 22:21:42 +0100 (Wed, 30 Jan 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_dbg_hwbrk (
-
-// OUTPUTs
- brk_halt, // Hardware breakpoint command
- brk_pnd, // Hardware break/watch-point pending
- brk_dout, // Hardware break/watch-point register data input
-
-// INPUTs
- brk_reg_rd, // Hardware break/watch-point register read select
- brk_reg_wr, // Hardware break/watch-point register write select
- dbg_clk, // Debug unit clock
- dbg_din, // Debug register data input
- dbg_rst, // Debug unit reset
- decode_noirq, // Frontend decode instruction
- eu_mab, // Execution-Unit Memory address bus
- eu_mb_en, // Execution-Unit Memory bus enable
- eu_mb_wr, // Execution-Unit Memory bus write transfer
- pc // Program counter
-);
-
-// OUTPUTs
-//=========
-output brk_halt; // Hardware breakpoint command
-output brk_pnd; // Hardware break/watch-point pending
-output [15:0] brk_dout; // Hardware break/watch-point register data input
-
-// INPUTs
-//=========
-input [3:0] brk_reg_rd; // Hardware break/watch-point register read select
-input [3:0] brk_reg_wr; // Hardware break/watch-point register write select
-input dbg_clk; // Debug unit clock
-input [15:0] dbg_din; // Debug register data input
-input dbg_rst; // Debug unit reset
-input decode_noirq; // Frontend decode instruction
-input [15:0] eu_mab; // Execution-Unit Memory address bus
-input eu_mb_en; // Execution-Unit Memory bus enable
-input [1:0] eu_mb_wr; // Execution-Unit Memory bus write transfer
-input [15:0] pc; // Program counter
-
-
-//=============================================================================
-// 1) WIRE & PARAMETER DECLARATION
-//=============================================================================
-
-wire range_wr_set;
-wire range_rd_set;
-wire addr1_wr_set;
-wire addr1_rd_set;
-wire addr0_wr_set;
-wire addr0_rd_set;
-
-
-parameter BRK_CTL = 0,
- BRK_STAT = 1,
- BRK_ADDR0 = 2,
- BRK_ADDR1 = 3;
-
-
-//=============================================================================
-// 2) CONFIGURATION REGISTERS
-//=============================================================================
-
-// BRK_CTL Register
-//-----------------------------------------------------------------------------
-// 7 6 5 4 3 2 1 0
-// Reserved RANGE_MODE INST_EN BREAK_EN ACCESS_MODE
-//
-// ACCESS_MODE: - 00 : Disabled
-// - 01 : Detect read access
-// - 10 : Detect write access
-// - 11 : Detect read/write access
-// NOTE: '10' & '11' modes are not supported on the instruction flow
-//
-// BREAK_EN: - 0 : Watchmode enable
-// - 1 : Break enable
-//
-// INST_EN: - 0 : Checks are done on the execution unit (data flow)
-// - 1 : Checks are done on the frontend (instruction flow)
-//
-// RANGE_MODE: - 0 : Address match on BRK_ADDR0 or BRK_ADDR1
-// - 1 : Address match on BRK_ADDR0->BRK_ADDR1 range
-//
-//-----------------------------------------------------------------------------
-reg [4:0] brk_ctl;
-
-wire brk_ctl_wr = brk_reg_wr[BRK_CTL];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) brk_ctl <= 5'h00;
- else if (brk_ctl_wr) brk_ctl <= {1'b0 & dbg_din[4], dbg_din[3:0]};
-
-wire [7:0] brk_ctl_full = {3'b000, brk_ctl};
-
-
-// BRK_STAT Register
-//-----------------------------------------------------------------------------
-// 7 6 5 4 3 2 1 0
-// Reserved RANGE_WR RANGE_RD ADDR1_WR ADDR1_RD ADDR0_WR ADDR0_RD
-//-----------------------------------------------------------------------------
-reg [5:0] brk_stat;
-
-wire brk_stat_wr = brk_reg_wr[BRK_STAT];
-wire [5:0] brk_stat_set = {range_wr_set & 1'b0,
- range_rd_set & 1'b0,
- addr1_wr_set, addr1_rd_set,
- addr0_wr_set, addr0_rd_set};
-wire [5:0] brk_stat_clr = ~dbg_din[5:0];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) brk_stat <= 6'h00;
- else if (brk_stat_wr) brk_stat <= ((brk_stat & brk_stat_clr) | brk_stat_set);
- else brk_stat <= (brk_stat | brk_stat_set);
-
-wire [7:0] brk_stat_full = {2'b00, brk_stat};
-wire brk_pnd = |brk_stat;
-
-
-// BRK_ADDR0 Register
-//-----------------------------------------------------------------------------
-reg [15:0] brk_addr0;
-
-wire brk_addr0_wr = brk_reg_wr[BRK_ADDR0];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) brk_addr0 <= 16'h0000;
- else if (brk_addr0_wr) brk_addr0 <= dbg_din;
-
-
-// BRK_ADDR1/DATA0 Register
-//-----------------------------------------------------------------------------
-reg [15:0] brk_addr1;
-
-wire brk_addr1_wr = brk_reg_wr[BRK_ADDR1];
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) brk_addr1 <= 16'h0000;
- else if (brk_addr1_wr) brk_addr1 <= dbg_din;
-
-
-//============================================================================
-// 3) DATA OUTPUT GENERATION
-//============================================================================
-
-wire [15:0] brk_ctl_rd = {8'h00, brk_ctl_full} & {16{brk_reg_rd[BRK_CTL]}};
-wire [15:0] brk_stat_rd = {8'h00, brk_stat_full} & {16{brk_reg_rd[BRK_STAT]}};
-wire [15:0] brk_addr0_rd = brk_addr0 & {16{brk_reg_rd[BRK_ADDR0]}};
-wire [15:0] brk_addr1_rd = brk_addr1 & {16{brk_reg_rd[BRK_ADDR1]}};
-
-wire [15:0] brk_dout = brk_ctl_rd |
- brk_stat_rd |
- brk_addr0_rd |
- brk_addr1_rd;
-
-
-//============================================================================
-// 4) BREAKPOINT / WATCHPOINT GENERATION
-//============================================================================
-
-// Comparators
-//---------------------------
-// Note: here the comparison logic is instanciated several times in order
-// to improve the timings, at the cost of a bit more area.
-
-wire equ_d_addr0 = eu_mb_en & (eu_mab==brk_addr0) & ~brk_ctl[4];
-wire equ_d_addr1 = eu_mb_en & (eu_mab==brk_addr1) & ~brk_ctl[4];
-wire equ_d_range = eu_mb_en & ((eu_mab>=brk_addr0) & (eu_mab<=brk_addr1)) &
- brk_ctl[4] & 1'b0;
-
-
-wire equ_i_addr0 = decode_noirq & (pc==brk_addr0) & ~brk_ctl[4];
-wire equ_i_addr1 = decode_noirq & (pc==brk_addr1) & ~brk_ctl[4];
-wire equ_i_range = decode_noirq & ((pc>=brk_addr0) & (pc<=brk_addr1)) &
- brk_ctl[4] & 1'b0;
-
-
-// Detect accesses
-//---------------------------
-
-// Detect Instruction read access
-wire i_addr0_rd = equ_i_addr0 & brk_ctl[3];
-wire i_addr1_rd = equ_i_addr1 & brk_ctl[3];
-wire i_range_rd = equ_i_range & brk_ctl[3];
-
-// Detect Execution-Unit write access
-wire d_addr0_wr = equ_d_addr0 & ~brk_ctl[3] & |eu_mb_wr;
-wire d_addr1_wr = equ_d_addr1 & ~brk_ctl[3] & |eu_mb_wr;
-wire d_range_wr = equ_d_range & ~brk_ctl[3] & |eu_mb_wr;
-
-// Detect DATA read access
-wire d_addr0_rd = equ_d_addr0 & ~brk_ctl[3] & ~|eu_mb_wr;
-wire d_addr1_rd = equ_d_addr1 & ~brk_ctl[3] & ~|eu_mb_wr;
-wire d_range_rd = equ_d_range & ~brk_ctl[3] & ~|eu_mb_wr;
-
-// Set flags
-assign addr0_rd_set = brk_ctl[0] & (d_addr0_rd | i_addr0_rd);
-assign addr0_wr_set = brk_ctl[1] & d_addr0_wr;
-assign addr1_rd_set = brk_ctl[0] & (d_addr1_rd | i_addr1_rd);
-assign addr1_wr_set = brk_ctl[1] & d_addr1_wr;
-assign range_rd_set = brk_ctl[0] & (d_range_rd | i_range_rd);
-assign range_wr_set = brk_ctl[1] & d_range_wr;
-
-
-// Break CPU
-assign brk_halt = brk_ctl[2] & |brk_stat_set;
-
-
-endmodule // omsp_dbg_hwbrk
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_i2c.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_i2c.v
deleted file mode 100644
index 0410a38..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_i2c.v
+++ /dev/null
@@ -1,1381 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_dbg_i2c.v
-//
-// *Module Description:
-// Debug I2C Slave communication interface
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_dbg_i2c (
-
-// OUTPUTs
- dbg_addr, // Debug register address
- dbg_din, // Debug register data input
- dbg_i2c_sda_out, // Debug interface: I2C SDA OUT
- dbg_rd, // Debug register data read
- dbg_wr, // Debug register data write
-
-// INPUTs
- dbg_clk, // Debug unit clock
- dbg_dout, // Debug register data output
- dbg_i2c_addr, // Debug interface: I2C ADDRESS
- dbg_i2c_broadcast, // Debug interface: I2C Broadcast Address (for multicore systems)
- dbg_i2c_scl, // Debug interface: I2C SCL
- dbg_i2c_sda_in, // Debug interface: I2C SDA IN
- dbg_rd_rdy, // Debug register data is ready for read
- dbg_rst, // Debug unit reset
- mem_burst, // Burst on going
- mem_burst_end, // End TX/RX burst
- mem_burst_rd, // Start TX burst
- mem_burst_wr, // Start RX burst
- mem_bw // Burst byte width
-);
-
-// OUTPUTs
-//=========
-output [5:0] dbg_addr; // Debug register address
-output [15:0] dbg_din; // Debug register data input
-output dbg_i2c_sda_out; // Debug interface: I2C SDA OUT
-output dbg_rd; // Debug register data read
-output dbg_wr; // Debug register data write
-
-// INPUTs
-//=========
-input dbg_clk; // Debug unit clock
-input [15:0] dbg_dout; // Debug register data output
-input [6:0] dbg_i2c_addr; // Debug interface: I2C ADDRESS
-input [6:0] dbg_i2c_broadcast; // Debug interface: I2C Broadcast Address (for multicore systems)
-input dbg_i2c_scl; // Debug interface: I2C SCL
-input dbg_i2c_sda_in; // Debug interface: I2C SDA IN
-input dbg_rd_rdy; // Debug register data is ready for read
-input dbg_rst; // Debug unit reset
-input mem_burst; // Burst on going
-input mem_burst_end; // End TX/RX burst
-input mem_burst_rd; // Start TX burst
-input mem_burst_wr; // Start RX burst
-input mem_bw; // Burst byte width
-
-
-//=============================================================================
-// 1) I2C RECEIVE LINE SYNCHRONIZTION & FILTERING
-//=============================================================================
-
-// Synchronize SCL/SDA inputs
-//--------------------------------
-
-wire scl_sync_n;
-omsp_sync_cell sync_cell_i2c_scl (
- .data_out (scl_sync_n),
- .data_in (~dbg_i2c_scl),
- .clk (dbg_clk),
- .rst (dbg_rst)
-);
-wire scl_sync = ~scl_sync_n;
-
-wire sda_in_sync_n;
-omsp_sync_cell sync_cell_i2c_sda (
- .data_out (sda_in_sync_n),
- .data_in (~dbg_i2c_sda_in),
- .clk (dbg_clk),
- .rst (dbg_rst)
-);
-wire sda_in_sync = ~sda_in_sync_n;
-
-
-// SCL/SDA input buffers
-//--------------------------------
-
-reg [1:0] scl_buf;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) scl_buf <= 2'h3;
- else scl_buf <= {scl_buf[0], scl_sync};
-
-reg [1:0] sda_in_buf;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) sda_in_buf <= 2'h3;
- else sda_in_buf <= {sda_in_buf[0], sda_in_sync};
-
-
-// SCL/SDA Majority decision
-//------------------------------
-
-wire scl = (scl_sync & scl_buf[0]) |
- (scl_sync & scl_buf[1]) |
- (scl_buf[0] & scl_buf[1]);
-
-wire sda_in = (sda_in_sync & sda_in_buf[0]) |
- (sda_in_sync & sda_in_buf[1]) |
- (sda_in_buf[0] & sda_in_buf[1]);
-
-
-// SCL/SDA Edge detection
-//------------------------------
-
-// SDA Edge detection
-reg sda_in_dly;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) sda_in_dly <= 1'b1;
- else sda_in_dly <= sda_in;
-
-wire sda_in_fe = sda_in_dly & ~sda_in;
-wire sda_in_re = ~sda_in_dly & sda_in;
-wire sda_in_edge = sda_in_dly ^ sda_in;
-
-// SCL Edge detection
-reg scl_dly;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) scl_dly <= 1'b1;
- else scl_dly <= scl;
-
-wire scl_fe = scl_dly & ~scl;
-wire scl_re = ~scl_dly & scl;
-wire scl_edge = scl_dly ^ scl;
-
-
-// Delayed SCL Rising-Edge for SDA data sampling
-reg [1:0] scl_re_dly;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) scl_re_dly <= 2'b00;
- else scl_re_dly <= {scl_re_dly[0], scl_re};
-
-wire scl_sample = scl_re_dly[1];
-
-
-//=============================================================================
-// 2) I2C START & STOP CONDITION DETECTION
-//=============================================================================
-
-//-----------------
-// Start condition
-//-----------------
-
-wire start_detect = sda_in_fe & scl;
-
-//-----------------
-// Stop condition
-//-----------------
-
- wire stop_detect = sda_in_re & scl;
-
-//-----------------
-// I2C Slave Active
-//-----------------
-// The I2C logic will be activated whenever a start condition
-// is detected and will be disactivated if the slave address
-// doesn't match or if a stop condition is detected.
-
-wire i2c_addr_not_valid;
-
-reg i2c_active_seq;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) i2c_active_seq <= 1'b0;
- else if (start_detect) i2c_active_seq <= 1'b1;
- else if (stop_detect || i2c_addr_not_valid) i2c_active_seq <= 1'b0;
-
-wire i2c_active = i2c_active_seq & ~stop_detect;
-wire i2c_init = ~i2c_active | start_detect;
-
-
-//=============================================================================
-// 3) I2C STATE MACHINE
-//=============================================================================
-
-// State register/wires
-reg [2:0] i2c_state;
-reg [2:0] i2c_state_nxt;
-
-// Utility signals
-reg [8:0] shift_buf;
-wire shift_rx_done;
-wire shift_tx_done;
-reg dbg_rd;
-
-// State machine definition
-parameter RX_ADDR = 3'h0;
-parameter RX_ADDR_ACK = 3'h1;
-parameter RX_DATA = 3'h2;
-parameter RX_DATA_ACK = 3'h3;
-parameter TX_DATA = 3'h4;
-parameter TX_DATA_ACK = 3'h5;
-
-// State transition
-always @(i2c_state or i2c_init or shift_rx_done or i2c_addr_not_valid or shift_tx_done or scl_fe or shift_buf or sda_in)
- case (i2c_state)
- RX_ADDR : i2c_state_nxt = i2c_init ? RX_ADDR :
- ~shift_rx_done ? RX_ADDR :
- i2c_addr_not_valid ? RX_ADDR :
- RX_ADDR_ACK;
-
- RX_ADDR_ACK : i2c_state_nxt = i2c_init ? RX_ADDR :
- ~scl_fe ? RX_ADDR_ACK :
- shift_buf[0] ? TX_DATA :
- RX_DATA;
-
- RX_DATA : i2c_state_nxt = i2c_init ? RX_ADDR :
- ~shift_rx_done ? RX_DATA :
- RX_DATA_ACK;
-
- RX_DATA_ACK : i2c_state_nxt = i2c_init ? RX_ADDR :
- ~scl_fe ? RX_DATA_ACK :
- RX_DATA;
-
- TX_DATA : i2c_state_nxt = i2c_init ? RX_ADDR :
- ~shift_tx_done ? TX_DATA :
- TX_DATA_ACK;
-
- TX_DATA_ACK : i2c_state_nxt = i2c_init ? RX_ADDR :
- ~scl_fe ? TX_DATA_ACK :
- ~sda_in ? TX_DATA :
- RX_ADDR;
- // pragma coverage off
- default : i2c_state_nxt = RX_ADDR;
- // pragma coverage on
- endcase
-
-// State machine
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) i2c_state <= RX_ADDR;
- else i2c_state <= i2c_state_nxt;
-
-
-//=============================================================================
-// 4) I2C SHIFT REGISTER (FOR RECEIVING & TRANSMITING)
-//=============================================================================
-
-wire shift_rx_en = ((i2c_state==RX_ADDR) | (i2c_state ==RX_DATA) | (i2c_state ==RX_DATA_ACK));
-wire shift_tx_en = (i2c_state ==TX_DATA) | (i2c_state ==TX_DATA_ACK);
-wire shift_tx_en_pre = (i2c_state_nxt==TX_DATA) | (i2c_state_nxt==TX_DATA_ACK);
-
-assign shift_rx_done = shift_rx_en & scl_fe & shift_buf[8];
-assign shift_tx_done = shift_tx_en & scl_fe & (shift_buf==9'h100);
-
-wire shift_buf_rx_init = i2c_init | ((i2c_state==RX_ADDR_ACK) & scl_fe & ~shift_buf[0]) |
- ((i2c_state==RX_DATA_ACK) & scl_fe);
-wire shift_buf_rx_en = shift_rx_en & scl_sample;
-
-wire shift_buf_tx_init = ((i2c_state==RX_ADDR_ACK) & scl_re & shift_buf[0]) |
- ((i2c_state==TX_DATA_ACK) & scl_re);
-wire shift_buf_tx_en = shift_tx_en_pre & scl_fe & (shift_buf!=9'h100);
-
-wire [7:0] shift_tx_val;
-
-wire [8:0] shift_buf_nxt = shift_buf_rx_init ? 9'h001 : // RX Init
- shift_buf_tx_init ? {shift_tx_val, 1'b1} : // TX Init
- shift_buf_rx_en ? {shift_buf[7:0], sda_in} : // RX Shift
- shift_buf_tx_en ? {shift_buf[7:0], 1'b0} : // TX Shift
- shift_buf[8:0]; // Hold
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) shift_buf <= 9'h001;
- else shift_buf <= shift_buf_nxt;
-
-// Detect when the received I2C device address is not valid
-assign i2c_addr_not_valid = (i2c_state == RX_ADDR) && shift_rx_done && (
- (shift_buf[7:1] != dbg_i2c_addr[6:0]));
-
-// Utility signals
-wire shift_rx_data_done = shift_rx_done & (i2c_state==RX_DATA);
-wire shift_tx_data_done = shift_tx_done;
-
-
-//=============================================================================
-// 5) I2C TRANSMIT BUFFER
-//=============================================================================
-
-reg dbg_i2c_sda_out;
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_i2c_sda_out <= 1'b1;
- else if (scl_fe) dbg_i2c_sda_out <= ~((i2c_state_nxt==RX_ADDR_ACK) ||
- (i2c_state_nxt==RX_DATA_ACK) ||
- (shift_buf_tx_en & ~shift_buf[8]));
-
-
-//=============================================================================
-// 6) DEBUG INTERFACE STATE MACHINE
-//=============================================================================
-
-// State register/wires
-reg [2:0] dbg_state;
-reg [2:0] dbg_state_nxt;
-
-// Utility signals
-reg dbg_bw;
-
-// State machine definition
-parameter RX_CMD = 3'h0;
-parameter RX_BYTE_LO = 3'h1;
-parameter RX_BYTE_HI = 3'h2;
-parameter TX_BYTE_LO = 3'h3;
-parameter TX_BYTE_HI = 3'h4;
-
-// State transition
-always @(dbg_state or shift_rx_data_done or shift_tx_data_done or shift_buf or dbg_bw or
- mem_burst_wr or mem_burst_rd or mem_burst or mem_burst_end or mem_bw)
- case (dbg_state)
- RX_CMD : dbg_state_nxt = mem_burst_wr ? RX_BYTE_LO :
- mem_burst_rd ? TX_BYTE_LO :
- ~shift_rx_data_done ? RX_CMD :
- shift_buf[7] ? RX_BYTE_LO :
- TX_BYTE_LO;
-
- RX_BYTE_LO : dbg_state_nxt = (mem_burst & mem_burst_end) ? RX_CMD :
- ~shift_rx_data_done ? RX_BYTE_LO :
- (mem_burst & ~mem_burst_end) ?
- (mem_bw ? RX_BYTE_LO :
- RX_BYTE_HI) :
- dbg_bw ? RX_CMD :
- RX_BYTE_HI;
-
- RX_BYTE_HI : dbg_state_nxt = ~shift_rx_data_done ? RX_BYTE_HI :
- (mem_burst & ~mem_burst_end) ? RX_BYTE_LO :
- RX_CMD;
-
- TX_BYTE_LO : dbg_state_nxt = ~shift_tx_data_done ? TX_BYTE_LO :
- ( mem_burst & mem_bw) ? TX_BYTE_LO :
- ( mem_burst & ~mem_bw) ? TX_BYTE_HI :
- ~dbg_bw ? TX_BYTE_HI :
- RX_CMD;
-
- TX_BYTE_HI : dbg_state_nxt = ~shift_tx_data_done ? TX_BYTE_HI :
- mem_burst ? TX_BYTE_LO :
- RX_CMD;
-
- // pragma coverage off
- default : dbg_state_nxt = RX_CMD;
- // pragma coverage on
- endcase
-
-// State machine
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_state <= RX_CMD;
- else dbg_state <= dbg_state_nxt;
-
-// Utility signals
-wire cmd_valid = (dbg_state==RX_CMD) & shift_rx_data_done;
-wire rx_lo_valid = (dbg_state==RX_BYTE_LO) & shift_rx_data_done;
-wire rx_hi_valid = (dbg_state==RX_BYTE_HI) & shift_rx_data_done;
-
-
-//=============================================================================
-// 7) REGISTER READ/WRITE ACCESS
-//=============================================================================
-
-parameter MEM_DATA = 6'h06;
-
-// Debug register address & bit width
-reg [5:0] dbg_addr;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst)
- begin
- dbg_bw <= 1'b0;
- dbg_addr <= 6'h00;
- end
- else if (cmd_valid)
- begin
- dbg_bw <= shift_buf[6];
- dbg_addr <= shift_buf[5:0];
- end
- else if (mem_burst)
- begin
- dbg_bw <= mem_bw;
- dbg_addr <= MEM_DATA;
- end
-
-
-// Debug register data input
-reg [7:0] dbg_din_lo;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_din_lo <= 8'h00;
- else if (rx_lo_valid) dbg_din_lo <= shift_buf[7:0];
-
-reg [7:0] dbg_din_hi;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_din_hi <= 8'h00;
- else if (rx_lo_valid) dbg_din_hi <= 8'h00;
- else if (rx_hi_valid) dbg_din_hi <= shift_buf[7:0];
-
-assign dbg_din = {dbg_din_hi, dbg_din_lo};
-
-
-// Debug register data write command
-reg dbg_wr;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_wr <= 1'b0;
- else dbg_wr <= (mem_burst & mem_bw) ? rx_lo_valid :
- (mem_burst & ~mem_bw) ? rx_hi_valid :
- dbg_bw ? rx_lo_valid :
- rx_hi_valid;
-
-
-// Debug register data read command
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_rd <= 1'b0;
- else dbg_rd <= (mem_burst & mem_bw) ? (shift_tx_data_done & (dbg_state==TX_BYTE_LO)) :
- (mem_burst & ~mem_bw) ? (shift_tx_data_done & (dbg_state==TX_BYTE_HI)) :
- cmd_valid ? ~shift_buf[7] :
- 1'b0;
-
-
-// Debug register data read value
-assign shift_tx_val = (dbg_state==TX_BYTE_HI) ? dbg_dout[15:8] :
- dbg_dout[7:0];
-
-endmodule
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_uart.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_uart.v
deleted file mode 100644
index a28a3ef..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_dbg_uart.v
+++ /dev/null
@@ -1,1203 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_dbg_uart.v
-//
-// *Module Description:
-// Debug UART communication interface (8N1, Half-duplex)
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 134 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2012-03-22 21:31:06 +0100 (Thu, 22 Mar 2012) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_dbg_uart (
-
-// OUTPUTs
- dbg_addr, // Debug register address
- dbg_din, // Debug register data input
- dbg_rd, // Debug register data read
- dbg_uart_txd, // Debug interface: UART TXD
- dbg_wr, // Debug register data write
-
-// INPUTs
- dbg_clk, // Debug unit clock
- dbg_dout, // Debug register data output
- dbg_rd_rdy, // Debug register data is ready for read
- dbg_rst, // Debug unit reset
- dbg_uart_rxd, // Debug interface: UART RXD
- mem_burst, // Burst on going
- mem_burst_end, // End TX/RX burst
- mem_burst_rd, // Start TX burst
- mem_burst_wr, // Start RX burst
- mem_bw // Burst byte width
-);
-
-// OUTPUTs
-//=========
-output [5:0] dbg_addr; // Debug register address
-output [15:0] dbg_din; // Debug register data input
-output dbg_rd; // Debug register data read
-output dbg_uart_txd; // Debug interface: UART TXD
-output dbg_wr; // Debug register data write
-
-// INPUTs
-//=========
-input dbg_clk; // Debug unit clock
-input [15:0] dbg_dout; // Debug register data output
-input dbg_rd_rdy; // Debug register data is ready for read
-input dbg_rst; // Debug unit reset
-input dbg_uart_rxd; // Debug interface: UART RXD
-input mem_burst; // Burst on going
-input mem_burst_end; // End TX/RX burst
-input mem_burst_rd; // Start TX burst
-input mem_burst_wr; // Start RX burst
-input mem_bw; // Burst byte width
-
-
-//=============================================================================
-// 1) UART RECEIVE LINE SYNCHRONIZTION & FILTERING
-//=============================================================================
-
-// Synchronize RXD input
-//--------------------------------
-
- wire uart_rxd_n;
-
- omsp_sync_cell sync_cell_uart_rxd (
- .data_out (uart_rxd_n),
- .data_in (~dbg_uart_rxd),
- .clk (dbg_clk),
- .rst (dbg_rst)
- );
- wire uart_rxd = ~uart_rxd_n;
-
-// RXD input buffer
-//--------------------------------
-reg [1:0] rxd_buf;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) rxd_buf <= 2'h3;
- else rxd_buf <= {rxd_buf[0], uart_rxd};
-
-// Majority decision
-//------------------------
-reg rxd_maj;
-
-wire rxd_maj_nxt = (uart_rxd & rxd_buf[0]) |
- (uart_rxd & rxd_buf[1]) |
- (rxd_buf[0] & rxd_buf[1]);
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) rxd_maj <= 1'b1;
- else rxd_maj <= rxd_maj_nxt;
-
-wire rxd_s = rxd_maj;
-wire rxd_fe = rxd_maj & ~rxd_maj_nxt;
-wire rxd_re = ~rxd_maj & rxd_maj_nxt;
-wire rxd_edge = rxd_maj ^ rxd_maj_nxt;
-
-//=============================================================================
-// 2) UART STATE MACHINE
-//=============================================================================
-
-// Receive state
-//------------------------
-reg [2:0] uart_state;
-reg [2:0] uart_state_nxt;
-
-wire sync_done;
-wire xfer_done;
-reg [19:0] xfer_buf;
-wire [19:0] xfer_buf_nxt;
-
-// State machine definition
-parameter RX_SYNC = 3'h0;
-parameter RX_CMD = 3'h1;
-parameter RX_DATA1 = 3'h2;
-parameter RX_DATA2 = 3'h3;
-parameter TX_DATA1 = 3'h4;
-parameter TX_DATA2 = 3'h5;
-
-// State transition
-always @(uart_state or xfer_buf_nxt or mem_burst or mem_burst_wr or mem_burst_rd or mem_burst_end or mem_bw)
- case (uart_state)
- RX_SYNC : uart_state_nxt = RX_CMD;
- RX_CMD : uart_state_nxt = mem_burst_wr ?
- (mem_bw ? RX_DATA2 : RX_DATA1) :
- mem_burst_rd ?
- (mem_bw ? TX_DATA2 : TX_DATA1) :
- (xfer_buf_nxt[18] ?
- (xfer_buf_nxt[17] ? RX_DATA2 : RX_DATA1) :
- (xfer_buf_nxt[17] ? TX_DATA2 : TX_DATA1));
- RX_DATA1 : uart_state_nxt = RX_DATA2;
- RX_DATA2 : uart_state_nxt = (mem_burst & ~mem_burst_end) ?
- (mem_bw ? RX_DATA2 : RX_DATA1) :
- RX_CMD;
- TX_DATA1 : uart_state_nxt = TX_DATA2;
- TX_DATA2 : uart_state_nxt = (mem_burst & ~mem_burst_end) ?
- (mem_bw ? TX_DATA2 : TX_DATA1) :
- RX_CMD;
- // pragma coverage off
- default : uart_state_nxt = RX_CMD;
- // pragma coverage on
- endcase
-
-// State machine
-always @(posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) uart_state <= RX_SYNC;
- else if (xfer_done | sync_done |
- mem_burst_wr | mem_burst_rd) uart_state <= uart_state_nxt;
-
-// Utility signals
-wire cmd_valid = (uart_state==RX_CMD) & xfer_done;
-wire rx_active = (uart_state==RX_DATA1) | (uart_state==RX_DATA2) | (uart_state==RX_CMD);
-wire tx_active = (uart_state==TX_DATA1) | (uart_state==TX_DATA2);
-
-
-//=============================================================================
-// 3) UART SYNCHRONIZATION
-//=============================================================================
-// After DBG_RST, the host needs to fist send a synchronization character (0x80)
-// If this feature doesn't work properly, it is possible to disable it by
-// commenting the DBG_UART_AUTO_SYNC define in the openMSP430.inc file.
-
-reg sync_busy;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) sync_busy <= 1'b0;
- else if ((uart_state==RX_SYNC) & rxd_fe) sync_busy <= 1'b1;
- else if ((uart_state==RX_SYNC) & rxd_re) sync_busy <= 1'b0;
-
-assign sync_done = (uart_state==RX_SYNC) & rxd_re & sync_busy;
-
-
-reg [16+2:0] sync_cnt;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) sync_cnt <= {{16{1'b1}}, 3'b000};
- else if (sync_busy | (~sync_busy & sync_cnt[2])) sync_cnt <= sync_cnt+{{16+2{1'b0}}, 1'b1};
-
-wire [16-1:0] bit_cnt_max = sync_cnt[16+2:3];
-
-
-//=============================================================================
-// 4) UART RECEIVE / TRANSMIT
-//=============================================================================
-
-// Transfer counter
-//------------------------
-reg [3:0] xfer_bit;
-reg [16-1:0] xfer_cnt;
-
-wire txd_start = dbg_rd_rdy | (xfer_done & (uart_state==TX_DATA1));
-wire rxd_start = (xfer_bit==4'h0) & rxd_fe & ((uart_state!=RX_SYNC));
-wire xfer_bit_inc = (xfer_bit!=4'h0) & (xfer_cnt=={16{1'b0}});
-assign xfer_done = rx_active ? (xfer_bit==4'ha) : (xfer_bit==4'hb);
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) xfer_bit <= 4'h0;
- else if (txd_start | rxd_start) xfer_bit <= 4'h1;
- else if (xfer_done) xfer_bit <= 4'h0;
- else if (xfer_bit_inc) xfer_bit <= xfer_bit+4'h1;
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) xfer_cnt <= {16{1'b0}};
- else if (rx_active & rxd_edge) xfer_cnt <= {1'b0, bit_cnt_max[16-1:1]};
- else if (txd_start | xfer_bit_inc) xfer_cnt <= bit_cnt_max;
- else if (|xfer_cnt) xfer_cnt <= xfer_cnt+{16{1'b1}};
-
-
-// Receive/Transmit buffer
-//-------------------------
-assign xfer_buf_nxt = {rxd_s, xfer_buf[19:1]};
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) xfer_buf <= 20'h00000;
- else if (dbg_rd_rdy) xfer_buf <= {1'b1, dbg_dout[15:8], 2'b01, dbg_dout[7:0], 1'b0};
- else if (xfer_bit_inc) xfer_buf <= xfer_buf_nxt;
-
-
-// Generate TXD output
-//------------------------
-reg dbg_uart_txd;
-
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_uart_txd <= 1'b1;
- else if (xfer_bit_inc & tx_active) dbg_uart_txd <= xfer_buf[0];
-
-
-//=============================================================================
-// 5) INTERFACE TO DEBUG REGISTERS
-//=============================================================================
-
-reg [5:0] dbg_addr;
- always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_addr <= 6'h00;
- else if (cmd_valid) dbg_addr <= xfer_buf_nxt[16:11];
-
-reg dbg_bw;
-always @ (posedge dbg_clk or posedge dbg_rst)
- if (dbg_rst) dbg_bw <= 1'b0;
- else if (cmd_valid) dbg_bw <= xfer_buf_nxt[17];
-
-wire dbg_din_bw = mem_burst ? mem_bw : dbg_bw;
-
-wire [15:0] dbg_din = dbg_din_bw ? {8'h00, xfer_buf_nxt[18:11]} :
- {xfer_buf_nxt[18:11], xfer_buf_nxt[9:2]};
-wire dbg_wr = (xfer_done & (uart_state==RX_DATA2));
-wire dbg_rd = mem_burst ? (xfer_done & (uart_state==TX_DATA2)) :
- (cmd_valid & ~xfer_buf_nxt[18]) | mem_burst_rd;
-
-
-
-endmodule // omsp_dbg_uart
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_execution_unit.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_execution_unit.v
deleted file mode 100644
index 7224cf4..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_execution_unit.v
+++ /dev/null
@@ -1,1313 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_execution_unit.v
-//
-// *Module Description:
-// openMSP430 Execution unit
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 190 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-07-30 22:19:34 +0200 (Tue, 30 Jul 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_execution_unit (
-
-// OUTPUTs
- cpuoff, // Turns off the CPU
- dbg_reg_din, // Debug unit CPU register data input
- gie, // General interrupt enable
- mab, // Memory address bus
- mb_en, // Memory bus enable
- mb_wr, // Memory bus write transfer
- mdb_out, // Memory data bus output
- oscoff, // Turns off LFXT1 clock input
- pc_sw, // Program counter software value
- pc_sw_wr, // Program counter software write
- scg0, // System clock generator 1. Turns off the DCO
- scg1, // System clock generator 1. Turns off the SMCLK
-
-// INPUTs
- dbg_halt_st, // Halt/Run status from CPU
- dbg_mem_dout, // Debug unit data output
- dbg_reg_wr, // Debug unit CPU register write
- e_state, // Execution state
- exec_done, // Execution completed
- inst_ad, // Decoded Inst: destination addressing mode
- inst_as, // Decoded Inst: source addressing mode
- inst_alu, // ALU control signals
- inst_bw, // Decoded Inst: byte width
- inst_dest, // Decoded Inst: destination (one hot)
- inst_dext, // Decoded Inst: destination extended instruction word
- inst_irq_rst, // Decoded Inst: reset interrupt
- inst_jmp, // Decoded Inst: Conditional jump
- inst_mov, // Decoded Inst: mov instruction
- inst_sext, // Decoded Inst: source extended instruction word
- inst_so, // Decoded Inst: Single-operand arithmetic
- inst_src, // Decoded Inst: source (one hot)
- inst_type, // Decoded Instruction type
- mclk, // Main system clock
- mdb_in, // Memory data bus input
- pc, // Program counter
- pc_nxt, // Next PC value (for CALL & IRQ)
- puc_rst, // Main system reset
- scan_enable // Scan enable (active during scan shifting)
-);
-
-// OUTPUTs
-//=========
-output cpuoff; // Turns off the CPU
-output [15:0] dbg_reg_din; // Debug unit CPU register data input
-output gie; // General interrupt enable
-output [15:0] mab; // Memory address bus
-output mb_en; // Memory bus enable
-output [1:0] mb_wr; // Memory bus write transfer
-output [15:0] mdb_out; // Memory data bus output
-output oscoff; // Turns off LFXT1 clock input
-output [15:0] pc_sw; // Program counter software value
-output pc_sw_wr; // Program counter software write
-output scg0; // System clock generator 1. Turns off the DCO
-output scg1; // System clock generator 1. Turns off the SMCLK
-
-// INPUTs
-//=========
-input dbg_halt_st; // Halt/Run status from CPU
-input [15:0] dbg_mem_dout; // Debug unit data output
-input dbg_reg_wr; // Debug unit CPU register write
-input [3:0] e_state; // Execution state
-input exec_done; // Execution completed
-input [7:0] inst_ad; // Decoded Inst: destination addressing mode
-input [7:0] inst_as; // Decoded Inst: source addressing mode
-input [11:0] inst_alu; // ALU control signals
-input inst_bw; // Decoded Inst: byte width
-input [15:0] inst_dest; // Decoded Inst: destination (one hot)
-input [15:0] inst_dext; // Decoded Inst: destination extended instruction word
-input inst_irq_rst; // Decoded Inst: reset interrupt
-input [7:0] inst_jmp; // Decoded Inst: Conditional jump
-input inst_mov; // Decoded Inst: mov instruction
-input [15:0] inst_sext; // Decoded Inst: source extended instruction word
-input [7:0] inst_so; // Decoded Inst: Single-operand arithmetic
-input [15:0] inst_src; // Decoded Inst: source (one hot)
-input [2:0] inst_type; // Decoded Instruction type
-input mclk; // Main system clock
-input [15:0] mdb_in; // Memory data bus input
-input [15:0] pc; // Program counter
-input [15:0] pc_nxt; // Next PC value (for CALL & IRQ)
-input puc_rst; // Main system reset
-input scan_enable; // Scan enable (active during scan shifting)
-
-
-//=============================================================================
-// 1) INTERNAL WIRES/REGISTERS/PARAMETERS DECLARATION
-//=============================================================================
-
-wire [15:0] alu_out;
-wire [15:0] alu_out_add;
-wire [3:0] alu_stat;
-wire [3:0] alu_stat_wr;
-wire [15:0] op_dst;
-wire [15:0] op_src;
-wire [15:0] reg_dest;
-wire [15:0] reg_src;
-wire [15:0] mdb_in_bw;
-wire [15:0] mdb_in_val;
-wire [3:0] status;
-
-
-//=============================================================================
-// 2) REGISTER FILE
-//=============================================================================
-
-wire reg_dest_wr = ((e_state==4'hB) & (
- (inst_type[2] & inst_ad[0] & ~inst_alu[11]) |
- (inst_type[0] & inst_as[0] & ~(inst_so[4] | inst_so[5] | inst_so[6])) |
- inst_type[1])) | dbg_reg_wr;
-
-wire reg_sp_wr = (((e_state==4'h1) | (e_state==4'h3)) & ~inst_irq_rst) |
- ((e_state==4'h9) & ((inst_so[4] | inst_so[5]) & ~inst_as[1] & ~((inst_as[2] | inst_as[3]) & inst_src[1]))) |
- ((e_state==4'h5) & ((inst_so[4] | inst_so[5]) & inst_as[1])) |
- ((e_state==4'h6) & ((inst_so[4] | inst_so[5]) & ((inst_as[2] | inst_as[3]) & inst_src[1])));
-
-wire reg_sr_wr = (e_state==4'h9) & inst_so[6];
-
-wire reg_sr_clr = (e_state==4'h0);
-
-wire reg_pc_call = ((e_state==4'hB) & inst_so[5]) |
- ((e_state==4'hA) & inst_so[6]);
-
-wire reg_incr = (exec_done & inst_as[3]) |
- ((e_state==4'h6) & inst_so[6]) |
- ((e_state==4'hB) & inst_so[6]);
-
-assign dbg_reg_din = reg_dest;
-
-
-omsp_register_file register_file_0 (
-
-// OUTPUTs
- .cpuoff (cpuoff), // Turns off the CPU
- .gie (gie), // General interrupt enable
- .oscoff (oscoff), // Turns off LFXT1 clock input
- .pc_sw (pc_sw), // Program counter software value
- .pc_sw_wr (pc_sw_wr), // Program counter software write
- .reg_dest (reg_dest), // Selected register destination content
- .reg_src (reg_src), // Selected register source content
- .scg0 (scg0), // System clock generator 1. Turns off the DCO
- .scg1 (scg1), // System clock generator 1. Turns off the SMCLK
- .status (status), // R2 Status {V,N,Z,C}
-
-// INPUTs
- .alu_stat (alu_stat), // ALU Status {V,N,Z,C}
- .alu_stat_wr (alu_stat_wr), // ALU Status write {V,N,Z,C}
- .inst_bw (inst_bw), // Decoded Inst: byte width
- .inst_dest (inst_dest), // Register destination selection
- .inst_src (inst_src), // Register source selection
- .mclk (mclk), // Main system clock
- .pc (pc), // Program counter
- .puc_rst (puc_rst), // Main system reset
- .reg_dest_val (alu_out), // Selected register destination value
- .reg_dest_wr (reg_dest_wr), // Write selected register destination
- .reg_pc_call (reg_pc_call), // Trigger PC update for a CALL instruction
- .reg_sp_val (alu_out_add), // Stack Pointer next value
- .reg_sp_wr (reg_sp_wr), // Stack Pointer write
- .reg_sr_clr (reg_sr_clr), // Status register clear for interrupts
- .reg_sr_wr (reg_sr_wr), // Status Register update for RETI instruction
- .reg_incr (reg_incr), // Increment source register
- .scan_enable (scan_enable) // Scan enable (active during scan shifting)
-);
-
-
-//=============================================================================
-// 3) SOURCE OPERAND MUXING
-//=============================================================================
-// inst_as[`DIR] : Register direct. -> Source is in register
-// inst_as[`IDX] : Register indexed. -> Source is in memory, address is register+offset
-// inst_as[`INDIR] : Register indirect.
-// inst_as[`INDIR_I]: Register indirect autoincrement.
-// inst_as[`SYMB] : Symbolic (operand is in memory at address PC+x).
-// inst_as[`IMM] : Immediate (operand is next word in the instruction stream).
-// inst_as[`ABS] : Absolute (operand is in memory at address x).
-// inst_as[`CONST] : Constant.
-
-wire src_reg_src_sel = (e_state==4'h2) |
- (e_state==4'h0) |
- ((e_state==4'h6) & ~inst_as[6]) |
- ((e_state==4'h7) & ~inst_as[6]) |
- ((e_state==4'hB) & inst_as[0] & ~inst_type[1]);
-
-wire src_reg_dest_sel = (e_state==4'h1) |
- (e_state==4'h3) |
- ((e_state==4'h9) & (inst_so[4] | inst_so[5])) |
- ((e_state==4'h5) & (inst_so[4] | inst_so[5]) & inst_as[1]);
-
-wire src_mdb_in_val_sel = ((e_state==4'h9) & inst_so[6]) |
- ((e_state==4'hB) & (inst_as[2] | inst_as[3] |
- inst_as[1] | inst_as[4] |
- inst_as[6]));
-
-wire src_inst_dext_sel = ((e_state==4'h9) & ~(inst_so[4] | inst_so[5])) |
- ((e_state==4'hA) & ~(inst_so[4] | inst_so[5] |
- inst_so[6]));
-
-wire src_inst_sext_sel = ((e_state==4'hB) & (inst_type[1] | inst_as[5] |
- inst_as[7] | inst_so[6]));
-
-
-assign op_src = src_reg_src_sel ? reg_src :
- src_reg_dest_sel ? reg_dest :
- src_mdb_in_val_sel ? mdb_in_val :
- src_inst_dext_sel ? inst_dext :
- src_inst_sext_sel ? inst_sext : 16'h0000;
-
-
-//=============================================================================
-// 4) DESTINATION OPERAND MUXING
-//=============================================================================
-// inst_ad[`DIR] : Register direct.
-// inst_ad[`IDX] : Register indexed.
-// inst_ad[`SYMB] : Symbolic (operand is in memory at address PC+x).
-// inst_ad[`ABS] : Absolute (operand is in memory at address x).
-
-
-wire dst_inst_sext_sel = ((e_state==4'h6) & (inst_as[1] | inst_as[4] |
- inst_as[6])) |
- ((e_state==4'h7) & (inst_as[1] | inst_as[4] |
- inst_as[6]));
-
-wire dst_mdb_in_bw_sel = ((e_state==4'hA) & inst_so[6]) |
- ((e_state==4'hB) & ~(inst_ad[0] | inst_type[1] |
- inst_type[0]) & ~inst_so[6]);
-
-wire dst_fffe_sel = (e_state==4'h2) |
- (e_state==4'h1) |
- (e_state==4'h3) |
- ((e_state==4'h9) & (inst_so[4] | inst_so[5]) & ~inst_so[6]) |
- ((e_state==4'h5) & (inst_so[4] | inst_so[5]) & inst_as[1]) |
- ((e_state==4'h6) & (inst_so[4] | inst_so[5]) & (inst_as[2] | inst_as[3]) & inst_src[1]);
-
-wire dst_reg_dest_sel = ((e_state==4'h9) & ~(inst_so[4] | inst_so[5] | inst_ad[6] | inst_so[6])) |
- ((e_state==4'hA) & ~inst_ad[6]) |
- ((e_state==4'hB) & (inst_ad[0] | inst_type[1] |
- inst_type[0]) & ~inst_so[6]);
-
-
-assign op_dst = dbg_halt_st ? dbg_mem_dout :
- dst_inst_sext_sel ? inst_sext :
- dst_mdb_in_bw_sel ? mdb_in_bw :
- dst_reg_dest_sel ? reg_dest :
- dst_fffe_sel ? 16'hfffe : 16'h0000;
-
-
-//=============================================================================
-// 5) ALU
-//=============================================================================
-
-wire exec_cycle = (e_state==4'hB);
-
-omsp_alu alu_0 (
-
-// OUTPUTs
- .alu_out (alu_out), // ALU output value
- .alu_out_add (alu_out_add), // ALU adder output value
- .alu_stat (alu_stat), // ALU Status {V,N,Z,C}
- .alu_stat_wr (alu_stat_wr), // ALU Status write {V,N,Z,C}
-
-// INPUTs
- .dbg_halt_st (dbg_halt_st), // Halt/Run status from CPU
- .exec_cycle (exec_cycle), // Instruction execution cycle
- .inst_alu (inst_alu), // ALU control signals
- .inst_bw (inst_bw), // Decoded Inst: byte width
- .inst_jmp (inst_jmp), // Decoded Inst: Conditional jump
- .inst_so (inst_so), // Single-operand arithmetic
- .op_dst (op_dst), // Destination operand
- .op_src (op_src), // Source operand
- .status (status) // R2 Status {V,N,Z,C}
-);
-
-
-//=============================================================================
-// 6) MEMORY INTERFACE
-//=============================================================================
-
-// Detect memory read/write access
-wire mb_rd_det = ((e_state==4'h6) & ~inst_as[5]) |
- ((e_state==4'hB) & inst_so[6]) |
- ((e_state==4'h9) & ~inst_type[0]
- & ~inst_mov);
-
-wire mb_wr_det = ((e_state==4'h1) & ~inst_irq_rst) |
- ((e_state==4'h3) & ~inst_irq_rst) |
- ((e_state==4'hA) & ~inst_so[6]) |
- (e_state==4'h7);
-
-wire [1:0] mb_wr_msk = inst_alu[11] ? 2'b00 :
- ~inst_bw ? 2'b11 :
- alu_out_add[0] ? 2'b10 : 2'b01;
-
-assign mb_en = mb_rd_det | (mb_wr_det & ~inst_alu[11]);
-
-assign mb_wr = ({2{mb_wr_det}}) & mb_wr_msk;
-
-
-
-// Memory address bus
-assign mab = alu_out_add[15:0];
-
-// Memory data bus output
-reg [15:0] mdb_out_nxt;
-
-wire mclk_mdb_out_nxt = mclk;
-
-always @(posedge mclk_mdb_out_nxt or posedge puc_rst)
- if (puc_rst) mdb_out_nxt <= 16'h0000;
- else if (e_state==4'h9) mdb_out_nxt <= pc_nxt;
- else if ((e_state==4'hB & ~inst_so[5]) |
- (e_state==4'h2) | (e_state==4'h0)) mdb_out_nxt <= alu_out;
-
-assign mdb_out = inst_bw ? {2{mdb_out_nxt[7:0]}} : mdb_out_nxt;
-
-// Format memory data bus input depending on BW
-reg mab_lsb;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) mab_lsb <= 1'b0;
- else if (mb_en) mab_lsb <= alu_out_add[0];
-
-assign mdb_in_bw = ~inst_bw ? mdb_in :
- mab_lsb ? {2{mdb_in[15:8]}} : mdb_in;
-
-// Memory data bus input buffer (buffer after a source read)
-reg mdb_in_buf_en;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) mdb_in_buf_en <= 1'b0;
- else mdb_in_buf_en <= (e_state==4'h6);
-
-reg mdb_in_buf_valid;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) mdb_in_buf_valid <= 1'b0;
- else if (e_state==4'hB) mdb_in_buf_valid <= 1'b0;
- else if (mdb_in_buf_en) mdb_in_buf_valid <= 1'b1;
-
-reg [15:0] mdb_in_buf;
-
-wire mclk_mdb_in_buf = mclk;
-
-always @(posedge mclk_mdb_in_buf or posedge puc_rst)
- if (puc_rst) mdb_in_buf <= 16'h0000;
- else if (mdb_in_buf_en) mdb_in_buf <= mdb_in_bw;
-
-assign mdb_in_val = mdb_in_buf_valid ? mdb_in_buf : mdb_in_bw;
-
-
-endmodule // omsp_execution_unit
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_frontend.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_frontend.v
deleted file mode 100644
index 371c7ff..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_frontend.v
+++ /dev/null
@@ -1,1767 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_frontend.v
-//
-// *Module Description:
-// openMSP430 Instruction fetch and decode unit
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 134 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2012-03-22 21:31:06 +0100 (Thu, 22 Mar 2012) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_frontend (
-
-// OUTPUTs
- dbg_halt_st, // Halt/Run status from CPU
- decode_noirq, // Frontend decode instruction
- e_state, // Execution state
- exec_done, // Execution completed
- inst_ad, // Decoded Inst: destination addressing mode
- inst_as, // Decoded Inst: source addressing mode
- inst_alu, // ALU control signals
- inst_bw, // Decoded Inst: byte width
- inst_dest, // Decoded Inst: destination (one hot)
- inst_dext, // Decoded Inst: destination extended instruction word
- inst_irq_rst, // Decoded Inst: Reset interrupt
- inst_jmp, // Decoded Inst: Conditional jump
- inst_mov, // Decoded Inst: mov instruction
- inst_sext, // Decoded Inst: source extended instruction word
- inst_so, // Decoded Inst: Single-operand arithmetic
- inst_src, // Decoded Inst: source (one hot)
- inst_type, // Decoded Instruction type
- irq_acc, // Interrupt request accepted (one-hot signal)
- mab, // Frontend Memory address bus
- mb_en, // Frontend Memory bus enable
- mclk_enable, // Main System Clock enable
- mclk_wkup, // Main System Clock wake-up (asynchronous)
- nmi_acc, // Non-Maskable interrupt request accepted
- pc, // Program counter
- pc_nxt, // Next PC value (for CALL & IRQ)
-
-// INPUTs
- cpu_en_s, // Enable CPU code execution (synchronous)
- cpuoff, // Turns off the CPU
- dbg_halt_cmd, // Halt CPU command
- dbg_reg_sel, // Debug selected register for rd/wr access
- fe_pmem_wait, // Frontend wait for Instruction fetch
- gie, // General interrupt enable
- irq, // Maskable interrupts
- mclk, // Main system clock
- mdb_in, // Frontend Memory data bus input
- nmi_pnd, // Non-maskable interrupt pending
- nmi_wkup, // NMI Wakeup
- pc_sw, // Program counter software value
- pc_sw_wr, // Program counter software write
- puc_rst, // Main system reset
- scan_enable, // Scan enable (active during scan shifting)
- wdt_irq, // Watchdog-timer interrupt
- wdt_wkup, // Watchdog Wakeup
- wkup // System Wake-up (asynchronous)
-);
-
-// OUTPUTs
-//=========
-output dbg_halt_st; // Halt/Run status from CPU
-output decode_noirq; // Frontend decode instruction
-output [3:0] e_state; // Execution state
-output exec_done; // Execution completed
-output [7:0] inst_ad; // Decoded Inst: destination addressing mode
-output [7:0] inst_as; // Decoded Inst: source addressing mode
-output [11:0] inst_alu; // ALU control signals
-output inst_bw; // Decoded Inst: byte width
-output [15:0] inst_dest; // Decoded Inst: destination (one hot)
-output [15:0] inst_dext; // Decoded Inst: destination extended instruction word
-output inst_irq_rst; // Decoded Inst: Reset interrupt
-output [7:0] inst_jmp; // Decoded Inst: Conditional jump
-output inst_mov; // Decoded Inst: mov instruction
-output [15:0] inst_sext; // Decoded Inst: source extended instruction word
-output [7:0] inst_so; // Decoded Inst: Single-operand arithmetic
-output [15:0] inst_src; // Decoded Inst: source (one hot)
-output [2:0] inst_type; // Decoded Instruction type
-output [13:0] irq_acc; // Interrupt request accepted (one-hot signal)
-output [15:0] mab; // Frontend Memory address bus
-output mb_en; // Frontend Memory bus enable
-output mclk_enable; // Main System Clock enable
-output mclk_wkup; // Main System Clock wake-up (asynchronous)
-output nmi_acc; // Non-Maskable interrupt request accepted
-output [15:0] pc; // Program counter
-output [15:0] pc_nxt; // Next PC value (for CALL & IRQ)
-
-// INPUTs
-//=========
-input cpu_en_s; // Enable CPU code execution (synchronous)
-input cpuoff; // Turns off the CPU
-input dbg_halt_cmd; // Halt CPU command
-input [3:0] dbg_reg_sel; // Debug selected register for rd/wr access
-input fe_pmem_wait; // Frontend wait for Instruction fetch
-input gie; // General interrupt enable
-input [13:0] irq; // Maskable interrupts
-input mclk; // Main system clock
-input [15:0] mdb_in; // Frontend Memory data bus input
-input nmi_pnd; // Non-maskable interrupt pending
-input nmi_wkup; // NMI Wakeup
-input [15:0] pc_sw; // Program counter software value
-input pc_sw_wr; // Program counter software write
-input puc_rst; // Main system reset
-input scan_enable; // Scan enable (active during scan shifting)
-input wdt_irq; // Watchdog-timer interrupt
-input wdt_wkup; // Watchdog Wakeup
-input wkup; // System Wake-up (asynchronous)
-
-
-//=============================================================================
-// 1) UTILITY FUNCTIONS
-//=============================================================================
-
-// 16 bits one-hot decoder
-function [15:0] one_hot16;
- input [3:0] binary;
- begin
- one_hot16 = 16'h0000;
- one_hot16[binary] = 1'b1;
- end
-endfunction
-
-// 8 bits one-hot decoder
-function [7:0] one_hot8;
- input [2:0] binary;
- begin
- one_hot8 = 8'h00;
- one_hot8[binary] = 1'b1;
- end
-endfunction
-
-
-//=============================================================================
-// 2) PARAMETER DEFINITIONS
-//=============================================================================
-
-//
-// 2.1) Instruction State machine definitons
-//-------------------------------------------
-
-parameter I_IRQ_FETCH = 3'h0;
-parameter I_IRQ_DONE = 3'h1;
-parameter I_DEC = 3'h2; // New instruction ready for decode
-parameter I_EXT1 = 3'h3; // 1st Extension word
-parameter I_EXT2 = 3'h4; // 2nd Extension word
-parameter I_IDLE = 3'h5; // CPU is in IDLE mode
-
-//
-// 2.2) Execution State machine definitons
-//-------------------------------------------
-
-parameter E_IRQ_0 = 4'h2;
-parameter E_IRQ_1 = 4'h1;
-parameter E_IRQ_2 = 4'h0;
-parameter E_IRQ_3 = 4'h3;
-parameter E_IRQ_4 = 4'h4;
-parameter E_SRC_AD = 4'h5;
-parameter E_SRC_RD = 4'h6;
-parameter E_SRC_WR = 4'h7;
-parameter E_DST_AD = 4'h8;
-parameter E_DST_RD = 4'h9;
-parameter E_DST_WR = 4'hA;
-parameter E_EXEC = 4'hB;
-parameter E_JUMP = 4'hC;
-parameter E_IDLE = 4'hD;
-
-
-//=============================================================================
-// 3) FRONTEND STATE MACHINE
-//=============================================================================
-
-// The wire "conv" is used as state bits to calculate the next response
-reg [2:0] i_state;
-reg [2:0] i_state_nxt;
-
-reg [1:0] inst_sz;
-wire [1:0] inst_sz_nxt;
-wire irq_detect;
-wire [2:0] inst_type_nxt;
-wire is_const;
-reg [15:0] sconst_nxt;
-reg [3:0] e_state_nxt;
-
-// CPU on/off through the debug interface or cpu_en port
-wire cpu_halt_cmd = dbg_halt_cmd | ~cpu_en_s;
-
-// States Transitions
-always @(i_state or inst_sz or inst_sz_nxt or pc_sw_wr or exec_done or
- irq_detect or cpuoff or cpu_halt_cmd or e_state)
- case(i_state)
- I_IDLE : i_state_nxt = (irq_detect & ~cpu_halt_cmd) ? I_IRQ_FETCH :
- (~cpuoff & ~cpu_halt_cmd) ? I_DEC : I_IDLE;
- I_IRQ_FETCH: i_state_nxt = I_IRQ_DONE;
- I_IRQ_DONE : i_state_nxt = I_DEC;
- I_DEC : i_state_nxt = irq_detect ? I_IRQ_FETCH :
- (cpuoff | cpu_halt_cmd) & exec_done ? I_IDLE :
- cpu_halt_cmd & (e_state==E_IDLE) ? I_IDLE :
- pc_sw_wr ? I_DEC :
- ~exec_done & ~(e_state==E_IDLE) ? I_DEC : // Wait in decode state
- (inst_sz_nxt!=2'b00) ? I_EXT1 : I_DEC; // until execution is completed
- I_EXT1 : i_state_nxt = pc_sw_wr ? I_DEC :
- (inst_sz!=2'b01) ? I_EXT2 : I_DEC;
- I_EXT2 : i_state_nxt = I_DEC;
- // pragma coverage off
- default : i_state_nxt = I_IRQ_FETCH;
- // pragma coverage on
- endcase
-
-// State machine
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) i_state <= I_IRQ_FETCH;
- else i_state <= i_state_nxt;
-
-// Utility signals
-wire decode_noirq = ((i_state==I_DEC) & (exec_done | (e_state==E_IDLE)));
-wire decode = decode_noirq | irq_detect;
-wire fetch = ~((i_state==I_DEC) & ~(exec_done | (e_state==E_IDLE))) & ~(e_state_nxt==E_IDLE);
-
-// Debug interface cpu status
-reg dbg_halt_st;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) dbg_halt_st <= 1'b0;
- else dbg_halt_st <= cpu_halt_cmd & (i_state_nxt==I_IDLE);
-
-
-//=============================================================================
-// 4) INTERRUPT HANDLING & SYSTEM WAKEUP
-//=============================================================================
-
-//
-// 4.1) INTERRUPT HANDLING
-//-----------------------------------------
-
-// Detect reset interrupt
-reg inst_irq_rst;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) inst_irq_rst <= 1'b1;
- else if (exec_done) inst_irq_rst <= 1'b0;
-
-// Detect other interrupts
-assign irq_detect = (nmi_pnd | ((|irq | wdt_irq) & gie)) & ~cpu_halt_cmd & ~dbg_halt_st & (exec_done | (i_state==I_IDLE));
-
-wire mclk_irq_num = mclk;
-
-// Select interrupt vector
-reg [3:0] irq_num;
-always @(posedge mclk_irq_num or posedge puc_rst)
- if (puc_rst) irq_num <= 4'hf;
- else if (irq_detect) irq_num <= nmi_pnd ? 4'he :
- irq[13] ? 4'hd :
- irq[12] ? 4'hc :
- irq[11] ? 4'hb :
- (irq[10] | wdt_irq) ? 4'ha :
- irq[9] ? 4'h9 :
- irq[8] ? 4'h8 :
- irq[7] ? 4'h7 :
- irq[6] ? 4'h6 :
- irq[5] ? 4'h5 :
- irq[4] ? 4'h4 :
- irq[3] ? 4'h3 :
- irq[2] ? 4'h2 :
- irq[1] ? 4'h1 :
- irq[0] ? 4'h0 : 4'hf;
-
-wire [15:0] irq_addr = {11'h7ff, irq_num, 1'b0};
-
-// Interrupt request accepted
-wire [15:0] irq_acc_all = one_hot16(irq_num) & {16{(i_state==I_IRQ_FETCH)}};
-wire [13:0] irq_acc = irq_acc_all[13:0];
-wire nmi_acc = irq_acc_all[14];
-
-//
-// 4.2) SYSTEM WAKEUP
-//-----------------------------------------
-
-// In the CPUOFF feature is disabled, the wake-up and enable signals are always 1
-assign mclk_wkup = 1'b1;
-assign mclk_enable = 1'b1;
-
-//=============================================================================
-// 5) FETCH INSTRUCTION
-//=============================================================================
-
-//
-// 5.1) PROGRAM COUNTER & MEMORY INTERFACE
-//-----------------------------------------
-
-// Program counter
-reg [15:0] pc;
-
-// Compute next PC value
-wire [15:0] pc_incr = pc + {14'h0000, fetch, 1'b0};
-wire [15:0] pc_nxt = pc_sw_wr ? pc_sw :
- (i_state==I_IRQ_FETCH) ? irq_addr :
- (i_state==I_IRQ_DONE) ? mdb_in : pc_incr;
-
-wire mclk_pc = mclk;
-
-always @(posedge mclk_pc or posedge puc_rst)
- if (puc_rst) pc <= 16'h0000;
- else pc <= pc_nxt;
-
-// Check if ROM has been busy in order to retry ROM access
-reg pmem_busy;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) pmem_busy <= 1'b0;
- else pmem_busy <= fe_pmem_wait;
-
-// Memory interface
-wire [15:0] mab = pc_nxt;
-wire mb_en = fetch | pc_sw_wr | (i_state==I_IRQ_FETCH) | pmem_busy | (dbg_halt_st & ~cpu_halt_cmd);
-
-
-//
-// 5.2) INSTRUCTION REGISTER
-//--------------------------------
-
-// Instruction register
-wire [15:0] ir = mdb_in;
-
-// Detect if source extension word is required
-wire is_sext = (inst_as[1] | inst_as[4] | inst_as[6] | inst_as[5]);
-
-// For the Symbolic addressing mode, add -2 to the extension word in order
-// to make up for the PC address
-wire [15:0] ext_incr = ((i_state==I_EXT1) & inst_as[4]) |
- ((i_state==I_EXT2) & inst_ad[4]) |
- ((i_state==I_EXT1) & ~inst_as[4] &
- ~(i_state_nxt==I_EXT2) & inst_ad[4]) ? 16'hfffe : 16'h0000;
-
-wire [15:0] ext_nxt = ir + ext_incr;
-
-// Store source extension word
-reg [15:0] inst_sext;
-
-wire mclk_inst_sext = mclk;
-
-always @(posedge mclk_inst_sext or posedge puc_rst)
- if (puc_rst) inst_sext <= 16'h0000;
- else if (decode & is_const) inst_sext <= sconst_nxt;
- else if (decode & inst_type_nxt[1]) inst_sext <= {{5{ir[9]}},ir[9:0],1'b0};
- else if ((i_state==I_EXT1) & is_sext) inst_sext <= ext_nxt;
-
-// Source extension word is ready
-wire inst_sext_rdy = (i_state==I_EXT1) & is_sext;
-
-
-// Store destination extension word
-reg [15:0] inst_dext;
-
-wire mclk_inst_dext = mclk;
-
-always @(posedge mclk_inst_dext or posedge puc_rst)
- if (puc_rst) inst_dext <= 16'h0000;
- else if ((i_state==I_EXT1) & ~is_sext) inst_dext <= ext_nxt;
- else if (i_state==I_EXT2) inst_dext <= ext_nxt;
-
-// Destination extension word is ready
-wire inst_dext_rdy = (((i_state==I_EXT1) & ~is_sext) | (i_state==I_EXT2));
-
-
-//=============================================================================
-// 6) DECODE INSTRUCTION
-//=============================================================================
-
-wire mclk_decode = mclk;
-
-//
-// 6.1) OPCODE: INSTRUCTION TYPE
-//----------------------------------------
-// Instructions type is encoded in a one hot fashion as following:
-//
-// 3'b001: Single-operand arithmetic
-// 3'b010: Conditional jump
-// 3'b100: Two-operand arithmetic
-
-reg [2:0] inst_type;
-assign inst_type_nxt = {(ir[15:14]!=2'b00),
- (ir[15:13]==3'b001),
- (ir[15:13]==3'b000)} & {3{~irq_detect}};
-
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_type <= 3'b000;
- else if (decode) inst_type <= inst_type_nxt;
-
-//
-// 6.2) OPCODE: SINGLE-OPERAND ARITHMETIC
-//----------------------------------------
-// Instructions are encoded in a one hot fashion as following:
-//
-// 8'b00000001: RRC
-// 8'b00000010: SWPB
-// 8'b00000100: RRA
-// 8'b00001000: SXT
-// 8'b00010000: PUSH
-// 8'b00100000: CALL
-// 8'b01000000: RETI
-// 8'b10000000: IRQ
-
-reg [7:0] inst_so;
-wire [7:0] inst_so_nxt = irq_detect ? 8'h80 : (one_hot8(ir[9:7]) & {8{inst_type_nxt[0]}});
-
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_so <= 8'h00;
- else if (decode) inst_so <= inst_so_nxt;
-
-//
-// 6.3) OPCODE: CONDITIONAL JUMP
-//--------------------------------
-// Instructions are encoded in a one hot fashion as following:
-//
-// 8'b00000001: JNE/JNZ
-// 8'b00000010: JEQ/JZ
-// 8'b00000100: JNC/JLO
-// 8'b00001000: JC/JHS
-// 8'b00010000: JN
-// 8'b00100000: JGE
-// 8'b01000000: JL
-// 8'b10000000: JMP
-
-reg [2:0] inst_jmp_bin;
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_jmp_bin <= 3'h0;
- else if (decode) inst_jmp_bin <= ir[12:10];
-
-wire [7:0] inst_jmp = one_hot8(inst_jmp_bin) & {8{inst_type[1]}};
-
-
-//
-// 6.4) OPCODE: TWO-OPERAND ARITHMETIC
-//-------------------------------------
-// Instructions are encoded in a one hot fashion as following:
-//
-// 12'b000000000001: MOV
-// 12'b000000000010: ADD
-// 12'b000000000100: ADDC
-// 12'b000000001000: SUBC
-// 12'b000000010000: SUB
-// 12'b000000100000: CMP
-// 12'b000001000000: DADD
-// 12'b000010000000: BIT
-// 12'b000100000000: BIC
-// 12'b001000000000: BIS
-// 12'b010000000000: XOR
-// 12'b100000000000: AND
-
-wire [15:0] inst_to_1hot = one_hot16(ir[15:12]) & {16{inst_type_nxt[2]}};
-wire [11:0] inst_to_nxt = inst_to_1hot[15:4];
-
-reg inst_mov;
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_mov <= 1'b0;
- else if (decode) inst_mov <= inst_to_nxt[0];
-
-
-//
-// 6.5) SOURCE AND DESTINATION REGISTERS
-//---------------------------------------
-
-// Destination register
-reg [3:0] inst_dest_bin;
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_dest_bin <= 4'h0;
- else if (decode) inst_dest_bin <= ir[3:0];
-
-wire [15:0] inst_dest = dbg_halt_st ? one_hot16(dbg_reg_sel) :
- inst_type[1] ? 16'h0001 :
- inst_so[7] |
- inst_so[4] |
- inst_so[5] ? 16'h0002 :
- one_hot16(inst_dest_bin);
-
-
-// Source register
-reg [3:0] inst_src_bin;
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_src_bin <= 4'h0;
- else if (decode) inst_src_bin <= ir[11:8];
-
-wire [15:0] inst_src = inst_type[2] ? one_hot16(inst_src_bin) :
- inst_so[6] ? 16'h0002 :
- inst_so[7] ? 16'h0001 :
- inst_type[0] ? one_hot16(inst_dest_bin) : 16'h0000;
-
-
-//
-// 6.6) SOURCE ADDRESSING MODES
-//--------------------------------
-// Source addressing modes are encoded in a one hot fashion as following:
-//
-// 13'b0000000000001: Register direct.
-// 13'b0000000000010: Register indexed.
-// 13'b0000000000100: Register indirect.
-// 13'b0000000001000: Register indirect autoincrement.
-// 13'b0000000010000: Symbolic (operand is in memory at address PC+x).
-// 13'b0000000100000: Immediate (operand is next word in the instruction stream).
-// 13'b0000001000000: Absolute (operand is in memory at address x).
-// 13'b0000010000000: Constant 4.
-// 13'b0000100000000: Constant 8.
-// 13'b0001000000000: Constant 0.
-// 13'b0010000000000: Constant 1.
-// 13'b0100000000000: Constant 2.
-// 13'b1000000000000: Constant -1.
-
-reg [12:0] inst_as_nxt;
-
-wire [3:0] src_reg = inst_type_nxt[0] ? ir[3:0] : ir[11:8];
-
-always @(src_reg or ir or inst_type_nxt)
- begin
- if (inst_type_nxt[1])
- inst_as_nxt = 13'b0000000000001;
- else if (src_reg==4'h3) // Addressing mode using R3
- case (ir[5:4])
- 2'b11 : inst_as_nxt = 13'b1000000000000;
- 2'b10 : inst_as_nxt = 13'b0100000000000;
- 2'b01 : inst_as_nxt = 13'b0010000000000;
- default: inst_as_nxt = 13'b0001000000000;
- endcase
- else if (src_reg==4'h2) // Addressing mode using R2
- case (ir[5:4])
- 2'b11 : inst_as_nxt = 13'b0000100000000;
- 2'b10 : inst_as_nxt = 13'b0000010000000;
- 2'b01 : inst_as_nxt = 13'b0000001000000;
- default: inst_as_nxt = 13'b0000000000001;
- endcase
- else if (src_reg==4'h0) // Addressing mode using R0
- case (ir[5:4])
- 2'b11 : inst_as_nxt = 13'b0000000100000;
- 2'b10 : inst_as_nxt = 13'b0000000000100;
- 2'b01 : inst_as_nxt = 13'b0000000010000;
- default: inst_as_nxt = 13'b0000000000001;
- endcase
- else // General Addressing mode
- case (ir[5:4])
- 2'b11 : inst_as_nxt = 13'b0000000001000;
- 2'b10 : inst_as_nxt = 13'b0000000000100;
- 2'b01 : inst_as_nxt = 13'b0000000000010;
- default: inst_as_nxt = 13'b0000000000001;
- endcase
- end
-assign is_const = |inst_as_nxt[12:7];
-
-reg [7:0] inst_as;
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_as <= 8'h00;
- else if (decode) inst_as <= {is_const, inst_as_nxt[6:0]};
-
-
-// 13'b0000010000000: Constant 4.
-// 13'b0000100000000: Constant 8.
-// 13'b0001000000000: Constant 0.
-// 13'b0010000000000: Constant 1.
-// 13'b0100000000000: Constant 2.
-// 13'b1000000000000: Constant -1.
-always @(inst_as_nxt)
- begin
- if (inst_as_nxt[7]) sconst_nxt = 16'h0004;
- else if (inst_as_nxt[8]) sconst_nxt = 16'h0008;
- else if (inst_as_nxt[9]) sconst_nxt = 16'h0000;
- else if (inst_as_nxt[10]) sconst_nxt = 16'h0001;
- else if (inst_as_nxt[11]) sconst_nxt = 16'h0002;
- else if (inst_as_nxt[12]) sconst_nxt = 16'hffff;
- else sconst_nxt = 16'h0000;
- end
-
-
-//
-// 6.7) DESTINATION ADDRESSING MODES
-//-----------------------------------
-// Destination addressing modes are encoded in a one hot fashion as following:
-//
-// 8'b00000001: Register direct.
-// 8'b00000010: Register indexed.
-// 8'b00010000: Symbolic (operand is in memory at address PC+x).
-// 8'b01000000: Absolute (operand is in memory at address x).
-
-reg [7:0] inst_ad_nxt;
-
-wire [3:0] dest_reg = ir[3:0];
-
-always @(dest_reg or ir or inst_type_nxt)
- begin
- if (~inst_type_nxt[2])
- inst_ad_nxt = 8'b00000000;
- else if (dest_reg==4'h2) // Addressing mode using R2
- case (ir[7])
- 1'b1 : inst_ad_nxt = 8'b01000000;
- default: inst_ad_nxt = 8'b00000001;
- endcase
- else if (dest_reg==4'h0) // Addressing mode using R0
- case (ir[7])
- 1'b1 : inst_ad_nxt = 8'b00010000;
- default: inst_ad_nxt = 8'b00000001;
- endcase
- else // General Addressing mode
- case (ir[7])
- 1'b1 : inst_ad_nxt = 8'b00000010;
- default: inst_ad_nxt = 8'b00000001;
- endcase
- end
-
-reg [7:0] inst_ad;
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_ad <= 8'h00;
- else if (decode) inst_ad <= inst_ad_nxt;
-
-
-//
-// 6.8) REMAINING INSTRUCTION DECODING
-//-------------------------------------
-
-// Operation size
-reg inst_bw;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) inst_bw <= 1'b0;
- else if (decode) inst_bw <= ir[6] & ~inst_type_nxt[1] & ~irq_detect & ~cpu_halt_cmd;
-
-// Extended instruction size
-assign inst_sz_nxt = {1'b0, (inst_as_nxt[1] | inst_as_nxt[4] | inst_as_nxt[6] | inst_as_nxt[5])} +
- {1'b0, ((inst_ad_nxt[1] | inst_ad_nxt[4] | inst_ad_nxt[6]) & ~inst_type_nxt[0])};
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_sz <= 2'b00;
- else if (decode) inst_sz <= inst_sz_nxt;
-
-
-//=============================================================================
-// 7) EXECUTION-UNIT STATE MACHINE
-//=============================================================================
-
-// State machine registers
-reg [3:0] e_state;
-
-
-// State machine control signals
-//--------------------------------
-
-wire src_acalc_pre = inst_as_nxt[1] | inst_as_nxt[4] | inst_as_nxt[6];
-wire src_rd_pre = inst_as_nxt[2] | inst_as_nxt[3] | inst_as_nxt[5] | inst_so_nxt[6];
-wire dst_acalc_pre = inst_ad_nxt[1] | inst_ad_nxt[4] | inst_ad_nxt[6];
-wire dst_acalc = inst_ad[1] | inst_ad[4] | inst_ad[6];
-wire dst_rd_pre = inst_ad_nxt[1] | inst_so_nxt[4] | inst_so_nxt[5] | inst_so_nxt[6];
-wire dst_rd = inst_ad[1] | inst_so[4] | inst_so[5] | inst_so[6];
-
-wire inst_branch = (inst_ad_nxt[0] & (ir[3:0]==4'h0)) | inst_type_nxt[1] | inst_so_nxt[6];
-
-reg exec_jmp;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) exec_jmp <= 1'b0;
- else if (inst_branch & decode) exec_jmp <= 1'b1;
- else if (e_state==E_JUMP) exec_jmp <= 1'b0;
-
-reg exec_dst_wr;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) exec_dst_wr <= 1'b0;
- else if (e_state==E_DST_RD) exec_dst_wr <= 1'b1;
- else if (e_state==E_DST_WR) exec_dst_wr <= 1'b0;
-
-reg exec_src_wr;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) exec_src_wr <= 1'b0;
- else if (inst_type[0] & (e_state==E_SRC_RD)) exec_src_wr <= 1'b1;
- else if ((e_state==E_SRC_WR) || (e_state==E_DST_WR)) exec_src_wr <= 1'b0;
-
-reg exec_dext_rdy;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) exec_dext_rdy <= 1'b0;
- else if (e_state==E_DST_RD) exec_dext_rdy <= 1'b0;
- else if (inst_dext_rdy) exec_dext_rdy <= 1'b1;
-
-// Execution first state
-wire [3:0] e_first_state = ~dbg_halt_st & inst_so_nxt[7] ? E_IRQ_0 :
- cpu_halt_cmd | (i_state==I_IDLE) ? E_IDLE :
- cpuoff ? E_IDLE :
- src_acalc_pre ? E_SRC_AD :
- src_rd_pre ? E_SRC_RD :
- dst_acalc_pre ? E_DST_AD :
- dst_rd_pre ? E_DST_RD : E_EXEC;
-
-
-// State machine
-//--------------------------------
-
-// States Transitions
-always @(e_state or dst_acalc or dst_rd or inst_sext_rdy or
- inst_dext_rdy or exec_dext_rdy or exec_jmp or exec_dst_wr or
- e_first_state or exec_src_wr)
- case(e_state)
- E_IDLE : e_state_nxt = e_first_state;
- E_IRQ_0 : e_state_nxt = E_IRQ_1;
- E_IRQ_1 : e_state_nxt = E_IRQ_2;
- E_IRQ_2 : e_state_nxt = E_IRQ_3;
- E_IRQ_3 : e_state_nxt = E_IRQ_4;
- E_IRQ_4 : e_state_nxt = E_EXEC;
-
- E_SRC_AD : e_state_nxt = inst_sext_rdy ? E_SRC_RD : E_SRC_AD;
-
- E_SRC_RD : e_state_nxt = dst_acalc ? E_DST_AD :
- dst_rd ? E_DST_RD : E_EXEC;
-
- E_DST_AD : e_state_nxt = (inst_dext_rdy |
- exec_dext_rdy) ? E_DST_RD : E_DST_AD;
-
- E_DST_RD : e_state_nxt = E_EXEC;
-
- E_EXEC : e_state_nxt = exec_dst_wr ? E_DST_WR :
- exec_jmp ? E_JUMP :
- exec_src_wr ? E_SRC_WR : e_first_state;
-
- E_JUMP : e_state_nxt = e_first_state;
- E_DST_WR : e_state_nxt = exec_jmp ? E_JUMP : e_first_state;
- E_SRC_WR : e_state_nxt = e_first_state;
- // pragma coverage off
- default : e_state_nxt = E_IRQ_0;
- // pragma coverage on
- endcase
-
-// State machine
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) e_state <= E_IRQ_1;
- else e_state <= e_state_nxt;
-
-
-// Frontend State machine control signals
-//----------------------------------------
-
-wire exec_done = exec_jmp ? (e_state==E_JUMP) :
- exec_dst_wr ? (e_state==E_DST_WR) :
- exec_src_wr ? (e_state==E_SRC_WR) : (e_state==E_EXEC);
-
-
-//=============================================================================
-// 8) EXECUTION-UNIT STATE CONTROL
-//=============================================================================
-
-//
-// 8.1) ALU CONTROL SIGNALS
-//-------------------------------------
-//
-// 12'b000000000001: Enable ALU source inverter
-// 12'b000000000010: Enable Incrementer
-// 12'b000000000100: Enable Incrementer on carry bit
-// 12'b000000001000: Select Adder
-// 12'b000000010000: Select AND
-// 12'b000000100000: Select OR
-// 12'b000001000000: Select XOR
-// 12'b000010000000: Select DADD
-// 12'b000100000000: Update N, Z & C (C=~Z)
-// 12'b001000000000: Update all status bits
-// 12'b010000000000: Update status bit for XOR instruction
-// 12'b100000000000: Don't write to destination
-
-reg [11:0] inst_alu;
-
-wire alu_src_inv = inst_to_nxt[4] | inst_to_nxt[3] |
- inst_to_nxt[5] | inst_to_nxt[8] ;
-
-wire alu_inc = inst_to_nxt[4] | inst_to_nxt[5];
-
-wire alu_inc_c = inst_to_nxt[2] | inst_to_nxt[6] |
- inst_to_nxt[3];
-
-wire alu_add = inst_to_nxt[1] | inst_to_nxt[2] |
- inst_to_nxt[4] | inst_to_nxt[3] |
- inst_to_nxt[5] | inst_type_nxt[1] |
- inst_so_nxt[6];
-
-
-wire alu_and = inst_to_nxt[11] | inst_to_nxt[8] |
- inst_to_nxt[7];
-
-wire alu_or = inst_to_nxt[9];
-
-wire alu_xor = inst_to_nxt[10];
-
-wire alu_dadd = inst_to_nxt[6];
-
-wire alu_stat_7 = inst_to_nxt[7] | inst_to_nxt[11] |
- inst_so_nxt[3];
-
-wire alu_stat_f = inst_to_nxt[1] | inst_to_nxt[2] |
- inst_to_nxt[4] | inst_to_nxt[3] |
- inst_to_nxt[5] | inst_to_nxt[6] |
- inst_to_nxt[7] | inst_to_nxt[10] |
- inst_to_nxt[11] |
- inst_so_nxt[0] | inst_so_nxt[2] |
- inst_so_nxt[3];
-
-wire alu_shift = inst_so_nxt[0] | inst_so_nxt[2];
-
-wire exec_no_wr = inst_to_nxt[5] | inst_to_nxt[7];
-
-wire [11:0] inst_alu_nxt = {exec_no_wr,
- alu_shift,
- alu_stat_f,
- alu_stat_7,
- alu_dadd,
- alu_xor,
- alu_or,
- alu_and,
- alu_add,
- alu_inc_c,
- alu_inc,
- alu_src_inv};
-
-always @(posedge mclk_decode or posedge puc_rst)
- if (puc_rst) inst_alu <= 12'h000;
- else if (decode) inst_alu <= inst_alu_nxt;
-
-
-endmodule // omsp_frontend
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_mem_backbone.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_mem_backbone.v
deleted file mode 100644
index 74d327f..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_mem_backbone.v
+++ /dev/null
@@ -1,1174 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_mem_backbone.v
-//
-// *Module Description:
-// Memory interface backbone (decoder + arbiter)
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 151 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2012-07-23 00:24:11 +0200 (Mon, 23 Jul 2012) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_mem_backbone (
-
-// OUTPUTs
- dbg_mem_din, // Debug unit Memory data input
- dmem_addr, // Data Memory address
- dmem_cen, // Data Memory chip enable (low active)
- dmem_din, // Data Memory data input
- dmem_wen, // Data Memory write enable (low active)
- eu_mdb_in, // Execution Unit Memory data bus input
- fe_mdb_in, // Frontend Memory data bus input
- fe_pmem_wait, // Frontend wait for Instruction fetch
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_we, // Peripheral write enable (high active)
- per_en, // Peripheral enable (high active)
- pmem_addr, // Program Memory address
- pmem_cen, // Program Memory chip enable (low active)
- pmem_din, // Program Memory data input (optional)
- pmem_wen, // Program Memory write enable (low active) (optional)
-
-// INPUTs
- dbg_halt_st, // Halt/Run status from CPU
- dbg_mem_addr, // Debug address for rd/wr access
- dbg_mem_dout, // Debug unit data output
- dbg_mem_en, // Debug unit memory enable
- dbg_mem_wr, // Debug unit memory write
- dmem_dout, // Data Memory data output
- eu_mab, // Execution Unit Memory address bus
- eu_mb_en, // Execution Unit Memory bus enable
- eu_mb_wr, // Execution Unit Memory bus write transfer
- eu_mdb_out, // Execution Unit Memory data bus output
- fe_mab, // Frontend Memory address bus
- fe_mb_en, // Frontend Memory bus enable
- mclk, // Main system clock
- per_dout, // Peripheral data output
- pmem_dout, // Program Memory data output
- puc_rst, // Main system reset
- scan_enable // Scan enable (active during scan shifting)
-);
-
-// OUTPUTs
-//=========
-output [15:0] dbg_mem_din; // Debug unit Memory data input
-output [6-1:0] dmem_addr; // Data Memory address
-output dmem_cen; // Data Memory chip enable (low active)
-output [15:0] dmem_din; // Data Memory data input
-output [1:0] dmem_wen; // Data Memory write enable (low active)
-output [15:0] eu_mdb_in; // Execution Unit Memory data bus input
-output [15:0] fe_mdb_in; // Frontend Memory data bus input
-output fe_pmem_wait; // Frontend wait for Instruction fetch
-output [13:0] per_addr; // Peripheral address
-output [15:0] per_din; // Peripheral data input
-output [1:0] per_we; // Peripheral write enable (high active)
-output per_en; // Peripheral enable (high active)
-output [10-1:0] pmem_addr; // Program Memory address
-output pmem_cen; // Program Memory chip enable (low active)
-output [15:0] pmem_din; // Program Memory data input (optional)
-output [1:0] pmem_wen; // Program Memory write enable (low active) (optional)
-
-// INPUTs
-//=========
-input dbg_halt_st; // Halt/Run status from CPU
-input [15:0] dbg_mem_addr; // Debug address for rd/wr access
-input [15:0] dbg_mem_dout; // Debug unit data output
-input dbg_mem_en; // Debug unit memory enable
-input [1:0] dbg_mem_wr; // Debug unit memory write
-input [15:0] dmem_dout; // Data Memory data output
-input [14:0] eu_mab; // Execution Unit Memory address bus
-input eu_mb_en; // Execution Unit Memory bus enable
-input [1:0] eu_mb_wr; // Execution Unit Memory bus write transfer
-input [15:0] eu_mdb_out; // Execution Unit Memory data bus output
-input [14:0] fe_mab; // Frontend Memory address bus
-input fe_mb_en; // Frontend Memory bus enable
-input mclk; // Main system clock
-input [15:0] per_dout; // Peripheral data output
-input [15:0] pmem_dout; // Program Memory data output
-input puc_rst; // Main system reset
-input scan_enable; // Scan enable (active during scan shifting)
-
-
-//=============================================================================
-// 1) DECODER
-//=============================================================================
-
-// RAM Interface
-//------------------
-
-// Execution unit access
-wire eu_dmem_cen = ~(eu_mb_en & (eu_mab>=(512>>1)) &
- (eu_mab<((512+128)>>1)));
-wire [15:0] eu_dmem_addr = {1'b0, eu_mab}-(512>>1);
-
-// Debug interface access
-wire dbg_dmem_cen = ~(dbg_mem_en & (dbg_mem_addr[15:1]>=(512>>1)) &
- (dbg_mem_addr[15:1]<((512+128)>>1)));
-wire [15:0] dbg_dmem_addr = {1'b0, dbg_mem_addr[15:1]}-(512>>1);
-
-
-// RAM Interface
-wire [6-1:0] dmem_addr = ~dbg_dmem_cen ? dbg_dmem_addr[6-1:0] : eu_dmem_addr[6-1:0];
-wire dmem_cen = dbg_dmem_cen & eu_dmem_cen;
-wire [1:0] dmem_wen = ~(dbg_mem_wr | eu_mb_wr);
-wire [15:0] dmem_din = ~dbg_dmem_cen ? dbg_mem_dout : eu_mdb_out;
-
-
-// ROM Interface
-//------------------
-parameter PMEM_OFFSET = (16'hFFFF-2048+1);
-
-// Execution unit access (only read access are accepted)
-wire eu_pmem_cen = ~(eu_mb_en & ~|eu_mb_wr & (eu_mab>=(PMEM_OFFSET>>1)));
-wire [15:0] eu_pmem_addr = eu_mab-(PMEM_OFFSET>>1);
-
-// Front-end access
-wire fe_pmem_cen = ~(fe_mb_en & (fe_mab>=(PMEM_OFFSET>>1)));
-wire [15:0] fe_pmem_addr = fe_mab-(PMEM_OFFSET>>1);
-
-// Debug interface access
-wire dbg_pmem_cen = ~(dbg_mem_en & (dbg_mem_addr[15:1]>=(PMEM_OFFSET>>1)));
-wire [15:0] dbg_pmem_addr = {1'b0, dbg_mem_addr[15:1]}-(PMEM_OFFSET>>1);
-
-
-// ROM Interface (Execution unit has priority)
-wire [10-1:0] pmem_addr = ~dbg_pmem_cen ? dbg_pmem_addr[10-1:0] :
- ~eu_pmem_cen ? eu_pmem_addr[10-1:0] : fe_pmem_addr[10-1:0];
-wire pmem_cen = fe_pmem_cen & eu_pmem_cen & dbg_pmem_cen;
-wire [1:0] pmem_wen = ~dbg_mem_wr;
-wire [15:0] pmem_din = dbg_mem_dout;
-
-wire fe_pmem_wait = (~fe_pmem_cen & ~eu_pmem_cen);
-
-
-// Peripherals
-//--------------------
-wire dbg_per_en = dbg_mem_en & (dbg_mem_addr[15:1]<(512>>1));
-wire eu_per_en = eu_mb_en & (eu_mab<(512>>1));
-
-wire [15:0] per_din = dbg_mem_en ? dbg_mem_dout : eu_mdb_out;
-wire [1:0] per_we = dbg_mem_en ? dbg_mem_wr : eu_mb_wr;
-wire per_en = dbg_mem_en ? dbg_per_en : eu_per_en;
-wire [8-1:0] per_addr_mux = dbg_mem_en ? dbg_mem_addr[8-1+1:1] : eu_mab[8-1:0];
-wire [14:0] per_addr_ful = {{15-8{1'b0}}, per_addr_mux};
-wire [13:0] per_addr = per_addr_ful[13:0];
-
-reg [15:0] per_dout_val;
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) per_dout_val <= 16'h0000;
- else per_dout_val <= per_dout;
-
-
-// Frontend data Mux
-//---------------------------------
-// Whenever the frontend doesn't access the ROM, backup the data
-
-// Detect whenever the data should be backuped and restored
-reg fe_pmem_cen_dly;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) fe_pmem_cen_dly <= 1'b0;
- else fe_pmem_cen_dly <= fe_pmem_cen;
-
-wire fe_pmem_save = ( fe_pmem_cen & ~fe_pmem_cen_dly) & ~dbg_halt_st;
-wire fe_pmem_restore = (~fe_pmem_cen & fe_pmem_cen_dly) | dbg_halt_st;
-
-wire mclk_bckup = mclk;
-
-reg [15:0] pmem_dout_bckup;
-always @(posedge mclk_bckup or posedge puc_rst)
- if (puc_rst) pmem_dout_bckup <= 16'h0000;
- else if (fe_pmem_save) pmem_dout_bckup <= pmem_dout;
-
-// Mux between the ROM data and the backup
-reg pmem_dout_bckup_sel;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) pmem_dout_bckup_sel <= 1'b0;
- else if (fe_pmem_save) pmem_dout_bckup_sel <= 1'b1;
- else if (fe_pmem_restore) pmem_dout_bckup_sel <= 1'b0;
-
-assign fe_mdb_in = pmem_dout_bckup_sel ? pmem_dout_bckup : pmem_dout;
-
-
-// Execution-Unit data Mux
-//---------------------------------
-
-// Select between peripherals, RAM and ROM
-reg [1:0] eu_mdb_in_sel;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) eu_mdb_in_sel <= 2'b00;
- else eu_mdb_in_sel <= {~eu_pmem_cen, per_en};
-
-// Mux
-assign eu_mdb_in = eu_mdb_in_sel[1] ? pmem_dout :
- eu_mdb_in_sel[0] ? per_dout_val : dmem_dout;
-
-// Debug interface data Mux
-//---------------------------------
-
-// Select between peripherals, RAM and ROM
-reg [1:0] dbg_mem_din_sel;
-always @(posedge mclk or posedge puc_rst)
- if (puc_rst) dbg_mem_din_sel <= 2'b00;
- else dbg_mem_din_sel <= {~dbg_pmem_cen, dbg_per_en};
-
-
-// Mux
-assign dbg_mem_din = dbg_mem_din_sel[1] ? pmem_dout :
- dbg_mem_din_sel[0] ? per_dout_val : dmem_dout;
-
-
-endmodule // omsp_mem_backbone
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_multiplier.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_multiplier.v
deleted file mode 100644
index a9b368a..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_multiplier.v
+++ /dev/null
@@ -1,1247 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_multiplier.v
-//
-// *Module Description:
-// 16x16 Hardware multiplier.
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_multiplier (
-
-// OUTPUTs
- per_dout, // Peripheral data output
-
-// INPUTs
- mclk, // Main system clock
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_en, // Peripheral enable (high active)
- per_we, // Peripheral write enable (high active)
- puc_rst, // Main system reset
- scan_enable // Scan enable (active during scan shifting)
-);
-
-// OUTPUTs
-//=========
-output [15:0] per_dout; // Peripheral data output
-
-// INPUTs
-//=========
-input mclk; // Main system clock
-input [13:0] per_addr; // Peripheral address
-input [15:0] per_din; // Peripheral data input
-input per_en; // Peripheral enable (high active)
-input [1:0] per_we; // Peripheral write enable (high active)
-input puc_rst; // Main system reset
-input scan_enable; // Scan enable (active during scan shifting)
-
-
-//=============================================================================
-// 1) PARAMETER/REGISTERS & WIRE DECLARATION
-//=============================================================================
-
-// Register base address (must be aligned to decoder bit width)
-parameter [14:0] BASE_ADDR = 15'h0130;
-
-// Decoder bit width (defines how many bits are considered for address decoding)
-parameter DEC_WD = 4;
-
-// Register addresses offset
-parameter [DEC_WD-1:0] OP1_MPY = 'h0,
- OP1_MPYS = 'h2,
- OP1_MAC = 'h4,
- OP1_MACS = 'h6,
- OP2 = 'h8,
- RESLO = 'hA,
- RESHI = 'hC,
- SUMEXT = 'hE;
-
-// Register one-hot decoder utilities
-parameter DEC_SZ = (1 << DEC_WD);
-parameter [DEC_SZ-1:0] BASE_REG = {{DEC_SZ-1{1'b0}}, 1'b1};
-
-// Register one-hot decoder
-parameter [DEC_SZ-1:0] OP1_MPY_D = (BASE_REG << OP1_MPY),
- OP1_MPYS_D = (BASE_REG << OP1_MPYS),
- OP1_MAC_D = (BASE_REG << OP1_MAC),
- OP1_MACS_D = (BASE_REG << OP1_MACS),
- OP2_D = (BASE_REG << OP2),
- RESLO_D = (BASE_REG << RESLO),
- RESHI_D = (BASE_REG << RESHI),
- SUMEXT_D = (BASE_REG << SUMEXT);
-
-
-// Wire pre-declarations
-wire result_wr;
-wire result_clr;
-wire early_read;
-
-
-//============================================================================
-// 2) REGISTER DECODER
-//============================================================================
-
-// Local register selection
-wire reg_sel = per_en & (per_addr[13:DEC_WD-1]==BASE_ADDR[14:DEC_WD]);
-
-// Register local address
-wire [DEC_WD-1:0] reg_addr = {per_addr[DEC_WD-2:0], 1'b0};
-
-// Register address decode
-wire [DEC_SZ-1:0] reg_dec = (OP1_MPY_D & {DEC_SZ{(reg_addr == OP1_MPY )}}) |
- (OP1_MPYS_D & {DEC_SZ{(reg_addr == OP1_MPYS )}}) |
- (OP1_MAC_D & {DEC_SZ{(reg_addr == OP1_MAC )}}) |
- (OP1_MACS_D & {DEC_SZ{(reg_addr == OP1_MACS )}}) |
- (OP2_D & {DEC_SZ{(reg_addr == OP2 )}}) |
- (RESLO_D & {DEC_SZ{(reg_addr == RESLO )}}) |
- (RESHI_D & {DEC_SZ{(reg_addr == RESHI )}}) |
- (SUMEXT_D & {DEC_SZ{(reg_addr == SUMEXT )}});
-
-// Read/Write probes
-wire reg_write = |per_we & reg_sel;
-wire reg_read = ~|per_we & reg_sel;
-
-// Read/Write vectors
-wire [DEC_SZ-1:0] reg_wr = reg_dec & {DEC_SZ{reg_write}};
-wire [DEC_SZ-1:0] reg_rd = reg_dec & {DEC_SZ{reg_read}};
-
-// Masked input data for byte access
-wire [15:0] per_din_msk = per_din & {{8{per_we[1]}}, 8'hff};
-
-//============================================================================
-// 3) REGISTERS
-//============================================================================
-
-// OP1 Register
-//-----------------
-reg [15:0] op1;
-
-wire op1_wr = reg_wr[OP1_MPY] |
- reg_wr[OP1_MPYS] |
- reg_wr[OP1_MAC] |
- reg_wr[OP1_MACS];
-
-wire mclk_op1 = mclk;
-
-always @ (posedge mclk_op1 or posedge puc_rst)
- if (puc_rst) op1 <= 16'h0000;
- else if (op1_wr) op1 <= per_din_msk;
-
-wire [15:0] op1_rd = op1;
-
-
-// OP2 Register
-//-----------------
-reg [15:0] op2;
-
-wire op2_wr = reg_wr[OP2];
-
-wire mclk_op2 = mclk;
-
-always @ (posedge mclk_op2 or posedge puc_rst)
- if (puc_rst) op2 <= 16'h0000;
- else if (op2_wr) op2 <= per_din_msk;
-
-wire [15:0] op2_rd = op2;
-
-
-// RESLO Register
-//-----------------
-reg [15:0] reslo;
-
-wire [15:0] reslo_nxt;
-wire reslo_wr = reg_wr[RESLO];
-
-wire mclk_reslo = mclk;
-
-always @ (posedge mclk_reslo or posedge puc_rst)
- if (puc_rst) reslo <= 16'h0000;
- else if (reslo_wr) reslo <= per_din_msk;
- else if (result_clr) reslo <= 16'h0000;
- else if (result_wr) reslo <= reslo_nxt;
-
-wire [15:0] reslo_rd = early_read ? reslo_nxt : reslo;
-
-
-// RESHI Register
-//-----------------
-reg [15:0] reshi;
-
-wire [15:0] reshi_nxt;
-wire reshi_wr = reg_wr[RESHI];
-
-wire mclk_reshi = mclk;
-
-always @ (posedge mclk_reshi or posedge puc_rst)
- if (puc_rst) reshi <= 16'h0000;
- else if (reshi_wr) reshi <= per_din_msk;
- else if (result_clr) reshi <= 16'h0000;
- else if (result_wr) reshi <= reshi_nxt;
-
-wire [15:0] reshi_rd = early_read ? reshi_nxt : reshi;
-
-
-// SUMEXT Register
-//-----------------
-reg [1:0] sumext_s;
-
-wire [1:0] sumext_s_nxt;
-
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) sumext_s <= 2'b00;
- else if (op2_wr) sumext_s <= 2'b00;
- else if (result_wr) sumext_s <= sumext_s_nxt;
-
-wire [15:0] sumext_nxt = {{14{sumext_s_nxt[1]}}, sumext_s_nxt};
-wire [15:0] sumext = {{14{sumext_s[1]}}, sumext_s};
-wire [15:0] sumext_rd = early_read ? sumext_nxt : sumext;
-
-
-//============================================================================
-// 4) DATA OUTPUT GENERATION
-//============================================================================
-
-// Data output mux
-wire [15:0] op1_mux = op1_rd & {16{reg_rd[OP1_MPY] |
- reg_rd[OP1_MPYS] |
- reg_rd[OP1_MAC] |
- reg_rd[OP1_MACS]}};
-wire [15:0] op2_mux = op2_rd & {16{reg_rd[OP2]}};
-wire [15:0] reslo_mux = reslo_rd & {16{reg_rd[RESLO]}};
-wire [15:0] reshi_mux = reshi_rd & {16{reg_rd[RESHI]}};
-wire [15:0] sumext_mux = sumext_rd & {16{reg_rd[SUMEXT]}};
-
-wire [15:0] per_dout = op1_mux |
- op2_mux |
- reslo_mux |
- reshi_mux |
- sumext_mux;
-
-
-//============================================================================
-// 5) HARDWARE MULTIPLIER FUNCTIONAL LOGIC
-//============================================================================
-
-// Multiplier configuration
-//--------------------------
-
-// Detect signed mode
-reg sign_sel;
-always @ (posedge mclk_op1 or posedge puc_rst)
- if (puc_rst) sign_sel <= 1'b0;
- else if (op1_wr) sign_sel <= reg_wr[OP1_MPYS] | reg_wr[OP1_MACS];
-
-
-// Detect accumulate mode
-reg acc_sel;
-always @ (posedge mclk_op1 or posedge puc_rst)
- if (puc_rst) acc_sel <= 1'b0;
- else if (op1_wr) acc_sel <= reg_wr[OP1_MAC] | reg_wr[OP1_MACS];
-
-
-// Detect whenever the RESHI and RESLO registers should be cleared
-assign result_clr = op2_wr & ~acc_sel;
-
-// Combine RESHI & RESLO
-wire [31:0] result = {reshi, reslo};
-
-
-// 16x16 Multiplier (result computed in 1 clock cycle)
-//-----------------------------------------------------
-
-// Detect start of a multiplication
-reg [1:0] cycle;
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) cycle <= 2'b00;
- else cycle <= {cycle[0], op2_wr};
-
-assign result_wr = |cycle;
-
-
-// Expand the operands to support signed & unsigned operations
-wire signed [16:0] op1_xp = {sign_sel & op1[15], op1};
-wire signed [8:0] op2_hi_xp = {sign_sel & op2[15], op2[15:8]};
-wire signed [8:0] op2_lo_xp = { 1'b0, op2[7:0]};
-wire signed [8:0] op2_xp = cycle[0] ? op2_hi_xp : op2_lo_xp;
-
-
-// 17x9 signed multiplication
-wire signed [25:0] product = op1_xp * op2_xp;
-
-wire [31:0] product_xp = cycle[0] ? {product[23:0], 8'h00} :
- {{8{sign_sel & product[23]}}, product[23:0]};
-
-// Accumulate
-wire [32:0] result_nxt = {1'b0, result} + {1'b0, product_xp[31:0]};
-
-
-// Next register values
-assign reslo_nxt = result_nxt[15:0];
-assign reshi_nxt = result_nxt[31:16];
-assign sumext_s_nxt = sign_sel ? {2{result_nxt[31]}} :
- {1'b0, result_nxt[32] | sumext_s[0]};
-
-// Since the MAC is completed within 2 clock cycle,
-// an early read can happen during the second cycle.
-assign early_read = cycle[1];
-
-
-
-endmodule // omsp_multiplier
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_register_file.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_register_file.v
deleted file mode 100644
index c24cb0e..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_register_file.v
+++ /dev/null
@@ -1,1336 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_register_file.v
-//
-// *Module Description:
-// openMSP430 Register files
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_register_file (
-
-// OUTPUTs
- cpuoff, // Turns off the CPU
- gie, // General interrupt enable
- oscoff, // Turns off LFXT1 clock input
- pc_sw, // Program counter software value
- pc_sw_wr, // Program counter software write
- reg_dest, // Selected register destination content
- reg_src, // Selected register source content
- scg0, // System clock generator 1. Turns off the DCO
- scg1, // System clock generator 1. Turns off the SMCLK
- status, // R2 Status {V,N,Z,C}
-
-// INPUTs
- alu_stat, // ALU Status {V,N,Z,C}
- alu_stat_wr, // ALU Status write {V,N,Z,C}
- inst_bw, // Decoded Inst: byte width
- inst_dest, // Register destination selection
- inst_src, // Register source selection
- mclk, // Main system clock
- pc, // Program counter
- puc_rst, // Main system reset
- reg_dest_val, // Selected register destination value
- reg_dest_wr, // Write selected register destination
- reg_pc_call, // Trigger PC update for a CALL instruction
- reg_sp_val, // Stack Pointer next value
- reg_sp_wr, // Stack Pointer write
- reg_sr_wr, // Status register update for RETI instruction
- reg_sr_clr, // Status register clear for interrupts
- reg_incr, // Increment source register
- scan_enable // Scan enable (active during scan shifting)
-);
-
-// OUTPUTs
-//=========
-output cpuoff; // Turns off the CPU
-output gie; // General interrupt enable
-output oscoff; // Turns off LFXT1 clock input
-output [15:0] pc_sw; // Program counter software value
-output pc_sw_wr; // Program counter software write
-output [15:0] reg_dest; // Selected register destination content
-output [15:0] reg_src; // Selected register source content
-output scg0; // System clock generator 1. Turns off the DCO
-output scg1; // System clock generator 1. Turns off the SMCLK
-output [3:0] status; // R2 Status {V,N,Z,C}
-
-// INPUTs
-//=========
-input [3:0] alu_stat; // ALU Status {V,N,Z,C}
-input [3:0] alu_stat_wr; // ALU Status write {V,N,Z,C}
-input inst_bw; // Decoded Inst: byte width
-input [15:0] inst_dest; // Register destination selection
-input [15:0] inst_src; // Register source selection
-input mclk; // Main system clock
-input [15:0] pc; // Program counter
-input puc_rst; // Main system reset
-input [15:0] reg_dest_val; // Selected register destination value
-input reg_dest_wr; // Write selected register destination
-input reg_pc_call; // Trigger PC update for a CALL instruction
-input [15:0] reg_sp_val; // Stack Pointer next value
-input reg_sp_wr; // Stack Pointer write
-input reg_sr_wr; // Status register update for RETI instruction
-input reg_sr_clr; // Status register clear for interrupts
-input reg_incr; // Increment source register
-input scan_enable; // Scan enable (active during scan shifting)
-
-
-//=============================================================================
-// 1) AUTOINCREMENT UNIT
-//=============================================================================
-
-wire [15:0] inst_src_in;
-wire [15:0] incr_op = (inst_bw & ~inst_src_in[1]) ? 16'h0001 : 16'h0002;
-wire [15:0] reg_incr_val = reg_src+incr_op;
-
-wire [15:0] reg_dest_val_in = inst_bw ? {8'h00,reg_dest_val[7:0]} : reg_dest_val;
-
-
-//=============================================================================
-// 2) SPECIAL REGISTERS (R1/R2/R3)
-//=============================================================================
-
-// Source input selection mask (for interrupt support)
-//-----------------------------------------------------
-
-assign inst_src_in = reg_sr_clr ? 16'h0004 : inst_src;
-
-
-// R0: Program counter
-//---------------------
-
-wire [15:0] r0 = pc;
-
-wire [15:0] pc_sw = reg_dest_val_in;
-wire pc_sw_wr = (inst_dest[0] & reg_dest_wr) | reg_pc_call;
-
-
-// R1: Stack pointer
-//-------------------
-reg [15:0] r1;
-wire r1_wr = inst_dest[1] & reg_dest_wr;
-wire r1_inc = inst_src_in[1] & reg_incr;
-
-wire mclk_r1 = mclk;
-
-always @(posedge mclk_r1 or posedge puc_rst)
- if (puc_rst) r1 <= 16'h0000;
- else if (r1_wr) r1 <= reg_dest_val_in & 16'hfffe;
- else if (reg_sp_wr) r1 <= reg_sp_val & 16'hfffe;
- else if (r1_inc) r1 <= reg_incr_val & 16'hfffe;
-
-
-// R2: Status register
-//---------------------
-reg [15:0] r2;
-wire r2_wr = (inst_dest[2] & reg_dest_wr) | reg_sr_wr;
-
-wire r2_c = alu_stat_wr[0] ? alu_stat[0] :
- r2_wr ? reg_dest_val_in[0] : r2[0]; // C
-
-wire r2_z = alu_stat_wr[1] ? alu_stat[1] :
- r2_wr ? reg_dest_val_in[1] : r2[1]; // Z
-
-wire r2_n = alu_stat_wr[2] ? alu_stat[2] :
- r2_wr ? reg_dest_val_in[2] : r2[2]; // N
-
-wire [7:3] r2_nxt = r2_wr ? reg_dest_val_in[7:3] : r2[7:3];
-
-wire r2_v = alu_stat_wr[3] ? alu_stat[3] :
- r2_wr ? reg_dest_val_in[8] : r2[8]; // V
-
-
-wire mclk_r2 = mclk;
-
- wire [15:0] cpuoff_mask = 16'h0010; // For the FPGA version: - the CPUOFF mode is emulated
- wire [15:0] oscoff_mask = 16'h0020; // - the SCG1 mode is emulated
- wire [15:0] scg0_mask = 16'h0000; // - the SCG0 is not supported
- wire [15:0] scg1_mask = 16'h0080; // - the SCG1 mode is emulated
-
- wire [15:0] r2_mask = cpuoff_mask | oscoff_mask | scg0_mask | scg1_mask | 16'h010f;
-
-always @(posedge mclk_r2 or posedge puc_rst)
- if (puc_rst) r2 <= 16'h0000;
- else if (reg_sr_clr) r2 <= 16'h0000;
- else r2 <= {7'h00, r2_v, r2_nxt, r2_n, r2_z, r2_c} & r2_mask;
-
-assign status = {r2[8], r2[2:0]};
-assign gie = r2[3];
-assign cpuoff = r2[4] | (r2_nxt[4] & r2_wr & cpuoff_mask[4]);
-assign oscoff = r2[5];
-assign scg0 = r2[6];
-assign scg1 = r2[7];
-
-
-// R3: Constant generator
-//-------------------------------------------------------------
-// Note: the auto-increment feature is not implemented for R3
-// because the @R3+ addressing mode is used for constant
-// generation (#-1).
-reg [15:0] r3;
-wire r3_wr = inst_dest[3] & reg_dest_wr;
-
-wire mclk_r3 = mclk;
-
-always @(posedge mclk_r3 or posedge puc_rst)
- if (puc_rst) r3 <= 16'h0000;
- else if (r3_wr) r3 <= reg_dest_val_in;
-
-
-//=============================================================================
-// 4) GENERAL PURPOSE REGISTERS (R4...R15)
-//=============================================================================
-
-// R4
-//------------
-reg [15:0] r4;
-wire r4_wr = inst_dest[4] & reg_dest_wr;
-wire r4_inc = inst_src_in[4] & reg_incr;
-
-wire mclk_r4 = mclk;
-
-always @(posedge mclk_r4 or posedge puc_rst)
- if (puc_rst) r4 <= 16'h0000;
- else if (r4_wr) r4 <= reg_dest_val_in;
- else if (r4_inc) r4 <= reg_incr_val;
-
-// R5
-//------------
-reg [15:0] r5;
-wire r5_wr = inst_dest[5] & reg_dest_wr;
-wire r5_inc = inst_src_in[5] & reg_incr;
-
-wire mclk_r5 = mclk;
-
-always @(posedge mclk_r5 or posedge puc_rst)
- if (puc_rst) r5 <= 16'h0000;
- else if (r5_wr) r5 <= reg_dest_val_in;
- else if (r5_inc) r5 <= reg_incr_val;
-
-// R6
-//------------
-reg [15:0] r6;
-wire r6_wr = inst_dest[6] & reg_dest_wr;
-wire r6_inc = inst_src_in[6] & reg_incr;
-
-wire mclk_r6 = mclk;
-
-always @(posedge mclk_r6 or posedge puc_rst)
- if (puc_rst) r6 <= 16'h0000;
- else if (r6_wr) r6 <= reg_dest_val_in;
- else if (r6_inc) r6 <= reg_incr_val;
-
-// R7
-//------------
-reg [15:0] r7;
-wire r7_wr = inst_dest[7] & reg_dest_wr;
-wire r7_inc = inst_src_in[7] & reg_incr;
-
-wire mclk_r7 = mclk;
-
-always @(posedge mclk_r7 or posedge puc_rst)
- if (puc_rst) r7 <= 16'h0000;
- else if (r7_wr) r7 <= reg_dest_val_in;
- else if (r7_inc) r7 <= reg_incr_val;
-
-// R8
-//------------
-reg [15:0] r8;
-wire r8_wr = inst_dest[8] & reg_dest_wr;
-wire r8_inc = inst_src_in[8] & reg_incr;
-
-wire mclk_r8 = mclk;
-
-always @(posedge mclk_r8 or posedge puc_rst)
- if (puc_rst) r8 <= 16'h0000;
- else if (r8_wr) r8 <= reg_dest_val_in;
- else if (r8_inc) r8 <= reg_incr_val;
-
-// R9
-//------------
-reg [15:0] r9;
-wire r9_wr = inst_dest[9] & reg_dest_wr;
-wire r9_inc = inst_src_in[9] & reg_incr;
-
-wire mclk_r9 = mclk;
-
-always @(posedge mclk_r9 or posedge puc_rst)
- if (puc_rst) r9 <= 16'h0000;
- else if (r9_wr) r9 <= reg_dest_val_in;
- else if (r9_inc) r9 <= reg_incr_val;
-
-// R10
-//------------
-reg [15:0] r10;
-wire r10_wr = inst_dest[10] & reg_dest_wr;
-wire r10_inc = inst_src_in[10] & reg_incr;
-
-wire mclk_r10 = mclk;
-
-always @(posedge mclk_r10 or posedge puc_rst)
- if (puc_rst) r10 <= 16'h0000;
- else if (r10_wr) r10 <= reg_dest_val_in;
- else if (r10_inc) r10 <= reg_incr_val;
-
-// R11
-//------------
-reg [15:0] r11;
-wire r11_wr = inst_dest[11] & reg_dest_wr;
-wire r11_inc = inst_src_in[11] & reg_incr;
-
-wire mclk_r11 = mclk;
-
-always @(posedge mclk_r11 or posedge puc_rst)
- if (puc_rst) r11 <= 16'h0000;
- else if (r11_wr) r11 <= reg_dest_val_in;
- else if (r11_inc) r11 <= reg_incr_val;
-
-// R12
-//------------
-reg [15:0] r12;
-wire r12_wr = inst_dest[12] & reg_dest_wr;
-wire r12_inc = inst_src_in[12] & reg_incr;
-
-wire mclk_r12 = mclk;
-
-always @(posedge mclk_r12 or posedge puc_rst)
- if (puc_rst) r12 <= 16'h0000;
- else if (r12_wr) r12 <= reg_dest_val_in;
- else if (r12_inc) r12 <= reg_incr_val;
-
-// R13
-//------------
-reg [15:0] r13;
-wire r13_wr = inst_dest[13] & reg_dest_wr;
-wire r13_inc = inst_src_in[13] & reg_incr;
-
-wire mclk_r13 = mclk;
-
-always @(posedge mclk_r13 or posedge puc_rst)
- if (puc_rst) r13 <= 16'h0000;
- else if (r13_wr) r13 <= reg_dest_val_in;
- else if (r13_inc) r13 <= reg_incr_val;
-
-// R14
-//------------
-reg [15:0] r14;
-wire r14_wr = inst_dest[14] & reg_dest_wr;
-wire r14_inc = inst_src_in[14] & reg_incr;
-
-wire mclk_r14 = mclk;
-
-always @(posedge mclk_r14 or posedge puc_rst)
- if (puc_rst) r14 <= 16'h0000;
- else if (r14_wr) r14 <= reg_dest_val_in;
- else if (r14_inc) r14 <= reg_incr_val;
-
-// R15
-//------------
-reg [15:0] r15;
-wire r15_wr = inst_dest[15] & reg_dest_wr;
-wire r15_inc = inst_src_in[15] & reg_incr;
-
-wire mclk_r15 = mclk;
-
-always @(posedge mclk_r15 or posedge puc_rst)
- if (puc_rst) r15 <= 16'h0000;
- else if (r15_wr) r15 <= reg_dest_val_in;
- else if (r15_inc) r15 <= reg_incr_val;
-
-
-//=============================================================================
-// 5) READ MUX
-//=============================================================================
-
-assign reg_src = (r0 & {16{inst_src_in[0]}}) |
- (r1 & {16{inst_src_in[1]}}) |
- (r2 & {16{inst_src_in[2]}}) |
- (r3 & {16{inst_src_in[3]}}) |
- (r4 & {16{inst_src_in[4]}}) |
- (r5 & {16{inst_src_in[5]}}) |
- (r6 & {16{inst_src_in[6]}}) |
- (r7 & {16{inst_src_in[7]}}) |
- (r8 & {16{inst_src_in[8]}}) |
- (r9 & {16{inst_src_in[9]}}) |
- (r10 & {16{inst_src_in[10]}}) |
- (r11 & {16{inst_src_in[11]}}) |
- (r12 & {16{inst_src_in[12]}}) |
- (r13 & {16{inst_src_in[13]}}) |
- (r14 & {16{inst_src_in[14]}}) |
- (r15 & {16{inst_src_in[15]}});
-
-assign reg_dest = (r0 & {16{inst_dest[0]}}) |
- (r1 & {16{inst_dest[1]}}) |
- (r2 & {16{inst_dest[2]}}) |
- (r3 & {16{inst_dest[3]}}) |
- (r4 & {16{inst_dest[4]}}) |
- (r5 & {16{inst_dest[5]}}) |
- (r6 & {16{inst_dest[6]}}) |
- (r7 & {16{inst_dest[7]}}) |
- (r8 & {16{inst_dest[8]}}) |
- (r9 & {16{inst_dest[9]}}) |
- (r10 & {16{inst_dest[10]}}) |
- (r11 & {16{inst_dest[11]}}) |
- (r12 & {16{inst_dest[12]}}) |
- (r13 & {16{inst_dest[13]}}) |
- (r14 & {16{inst_dest[14]}}) |
- (r15 & {16{inst_dest[15]}});
-
-
-endmodule // omsp_register_file
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_scan_mux.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_scan_mux.v
deleted file mode 100644
index 9a90647..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_scan_mux.v
+++ /dev/null
@@ -1,75 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_scan_mux.v
-//
-// *Module Description:
-// Generic mux for scan mode
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-
-module omsp_scan_mux (
-
-// OUTPUTs
- data_out, // Scan mux data output
-
-// INPUTs
- data_in_scan, // Selected data input for scan mode
- data_in_func, // Selected data input for functional mode
- scan_mode // Scan mode
-);
-
-// OUTPUTs
-//=========
-output data_out; // Scan mux data output
-
-// INPUTs
-//=========
-input data_in_scan; // Selected data input for scan mode
-input data_in_func; // Selected data input for functional mode
-input scan_mode; // Scan mode
-
-
-//=============================================================================
-// 1) SCAN MUX
-//=============================================================================
-
-assign data_out = scan_mode ? data_in_scan : data_in_func;
-
-
-endmodule // omsp_scan_mux
-
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sfr.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sfr.v
deleted file mode 100644
index e063720..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sfr.v
+++ /dev/null
@@ -1,1225 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_sfr.v
-//
-// *Module Description:
-// Processor Special function register
-// Non-Maskable Interrupt generation
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_sfr (
-
-// OUTPUTs
- cpu_id, // CPU ID
- nmi_pnd, // NMI Pending
- nmi_wkup, // NMI Wakeup
- per_dout, // Peripheral data output
- wdtie, // Watchdog-timer interrupt enable
- wdtifg_sw_clr, // Watchdog-timer interrupt flag software clear
- wdtifg_sw_set, // Watchdog-timer interrupt flag software set
-
-// INPUTs
- cpu_nr_inst, // Current oMSP instance number
- cpu_nr_total, // Total number of oMSP instances-1
- mclk, // Main system clock
- nmi, // Non-maskable interrupt (asynchronous)
- nmi_acc, // Non-Maskable interrupt request accepted
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_en, // Peripheral enable (high active)
- per_we, // Peripheral write enable (high active)
- puc_rst, // Main system reset
- scan_mode, // Scan mode
- wdtifg, // Watchdog-timer interrupt flag
- wdtnmies // Watchdog-timer NMI edge selection
-);
-
-// OUTPUTs
-//=========
-output [31:0] cpu_id; // CPU ID
-output nmi_pnd; // NMI Pending
-output nmi_wkup; // NMI Wakeup
-output [15:0] per_dout; // Peripheral data output
-output wdtie; // Watchdog-timer interrupt enable
-output wdtifg_sw_clr;// Watchdog-timer interrupt flag software clear
-output wdtifg_sw_set;// Watchdog-timer interrupt flag software set
-
-// INPUTs
-//=========
-input [7:0] cpu_nr_inst; // Current oMSP instance number
-input [7:0] cpu_nr_total; // Total number of oMSP instances-1
-input mclk; // Main system clock
-input nmi; // Non-maskable interrupt (asynchronous)
-input nmi_acc; // Non-Maskable interrupt request accepted
-input [13:0] per_addr; // Peripheral address
-input [15:0] per_din; // Peripheral data input
-input per_en; // Peripheral enable (high active)
-input [1:0] per_we; // Peripheral write enable (high active)
-input puc_rst; // Main system reset
-input scan_mode; // Scan mode
-input wdtifg; // Watchdog-timer interrupt flag
-input wdtnmies; // Watchdog-timer NMI edge selection
-
-
-//=============================================================================
-// 1) PARAMETER DECLARATION
-//=============================================================================
-
-// Register base address (must be aligned to decoder bit width)
-parameter [14:0] BASE_ADDR = 15'h0000;
-
-// Decoder bit width (defines how many bits are considered for address decoding)
-parameter DEC_WD = 4;
-
-// Register addresses offset
-parameter [DEC_WD-1:0] IE1 = 'h0,
- IFG1 = 'h2,
- CPU_ID_LO = 'h4,
- CPU_ID_HI = 'h6,
- CPU_NR = 'h8;
-
-// Register one-hot decoder utilities
-parameter DEC_SZ = (1 << DEC_WD);
-parameter [DEC_SZ-1:0] BASE_REG = {{DEC_SZ-1{1'b0}}, 1'b1};
-
-// Register one-hot decoder
-parameter [DEC_SZ-1:0] IE1_D = (BASE_REG << IE1),
- IFG1_D = (BASE_REG << IFG1),
- CPU_ID_LO_D = (BASE_REG << CPU_ID_LO),
- CPU_ID_HI_D = (BASE_REG << CPU_ID_HI),
- CPU_NR_D = (BASE_REG << CPU_NR);
-
-
-//============================================================================
-// 2) REGISTER DECODER
-//============================================================================
-
-// Local register selection
-wire reg_sel = per_en & (per_addr[13:DEC_WD-1]==BASE_ADDR[14:DEC_WD]);
-
-// Register local address
-wire [DEC_WD-1:0] reg_addr = {1'b0, per_addr[DEC_WD-2:0]};
-
-// Register address decode
-wire [DEC_SZ-1:0] reg_dec = (IE1_D & {DEC_SZ{(reg_addr==(IE1 >>1))}}) |
- (IFG1_D & {DEC_SZ{(reg_addr==(IFG1 >>1))}}) |
- (CPU_ID_LO_D & {DEC_SZ{(reg_addr==(CPU_ID_LO >>1))}}) |
- (CPU_ID_HI_D & {DEC_SZ{(reg_addr==(CPU_ID_HI >>1))}}) |
- (CPU_NR_D & {DEC_SZ{(reg_addr==(CPU_NR >>1))}});
-
-// Read/Write probes
-wire reg_lo_write = per_we[0] & reg_sel;
-wire reg_hi_write = per_we[1] & reg_sel;
-wire reg_read = ~|per_we & reg_sel;
-
-// Read/Write vectors
-wire [DEC_SZ-1:0] reg_hi_wr = reg_dec & {DEC_SZ{reg_hi_write}};
-wire [DEC_SZ-1:0] reg_lo_wr = reg_dec & {DEC_SZ{reg_lo_write}};
-wire [DEC_SZ-1:0] reg_rd = reg_dec & {DEC_SZ{reg_read}};
-
-
-//============================================================================
-// 3) REGISTERS
-//============================================================================
-
-// IE1 Register
-//--------------
-wire [7:0] ie1;
-wire ie1_wr = IE1[0] ? reg_hi_wr[IE1] : reg_lo_wr[IE1];
-wire [7:0] ie1_nxt = IE1[0] ? per_din[15:8] : per_din[7:0];
-
-reg nmie;
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) nmie <= 1'b0;
- else if (nmi_acc) nmie <= 1'b0;
- else if (ie1_wr) nmie <= ie1_nxt[4];
-
-reg wdtie;
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) wdtie <= 1'b0;
- else if (ie1_wr) wdtie <= ie1_nxt[0];
-
-assign ie1 = {3'b000, nmie, 3'b000, wdtie};
-
-
-// IFG1 Register
-//---------------
-wire [7:0] ifg1;
-
-wire ifg1_wr = IFG1[0] ? reg_hi_wr[IFG1] : reg_lo_wr[IFG1];
-wire [7:0] ifg1_nxt = IFG1[0] ? per_din[15:8] : per_din[7:0];
-
-reg nmiifg;
-wire nmi_edge;
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) nmiifg <= 1'b0;
- else if (nmi_edge) nmiifg <= 1'b1;
- else if (ifg1_wr) nmiifg <= ifg1_nxt[4];
-
-assign wdtifg_sw_clr = ifg1_wr & ~ifg1_nxt[0];
-assign wdtifg_sw_set = ifg1_wr & ifg1_nxt[0];
-
-assign ifg1 = {3'b000, nmiifg, 3'b000, wdtifg};
-
-
-// CPU_ID Register (READ ONLY)
-//-----------------------------
-// -------------------------------------------------------------------
-// CPU_ID_LO: | 15 14 13 12 11 10 9 | 8 7 6 5 4 | 3 | 2 1 0 |
-// |----------------------------+-----------------+------+-------------|
-// | PER_SPACE | USER_VERSION | ASIC | CPU_VERSION |
-// --------------------------------------------------------------------
-// CPU_ID_HI: | 15 14 13 12 11 10 | 9 8 7 6 5 4 3 2 1 | 0 |
-// |----------------------------+-------------------------------+------|
-// | PMEM_SIZE | DMEM_SIZE | MPY |
-// -------------------------------------------------------------------
-
-wire [2:0] cpu_version = 3'h2;
-wire cpu_asic = 1'b0;
-wire [4:0] user_version = 5'b00000;
-wire [6:0] per_space = (512 >> 9); // cpu_id_per * 512 = peripheral space size
-wire mpy_info = 1'b1;
-wire [8:0] dmem_size = (128 >> 7); // cpu_id_dmem * 128 = data memory size
-wire [5:0] pmem_size = (2048 >> 10); // cpu_id_pmem * 1024 = program memory size
-
-assign cpu_id = {pmem_size,
- dmem_size,
- mpy_info,
- per_space,
- user_version,
- cpu_asic,
- cpu_version};
-
-
-// CPU_NR Register (READ ONLY)
-//-----------------------------
-// -------------------------------------------------------------------
-// | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 |
-// |---------------------------------+---------------------------------|
-// | CPU_TOTAL_NR | CPU_INST_NR |
-// -------------------------------------------------------------------
-
-wire [15:0] cpu_nr = {cpu_nr_total, cpu_nr_inst};
-
-
-//============================================================================
-// 4) DATA OUTPUT GENERATION
-//============================================================================
-
-// Data output mux
-wire [15:0] ie1_rd = {8'h00, (ie1 & {8{reg_rd[IE1]}})} << (8 & {4{IE1[0]}});
-wire [15:0] ifg1_rd = {8'h00, (ifg1 & {8{reg_rd[IFG1]}})} << (8 & {4{IFG1[0]}});
-wire [15:0] cpu_id_lo_rd = cpu_id[15:0] & {16{reg_rd[CPU_ID_LO]}};
-wire [15:0] cpu_id_hi_rd = cpu_id[31:16] & {16{reg_rd[CPU_ID_HI]}};
-wire [15:0] cpu_nr_rd = cpu_nr & {16{reg_rd[CPU_NR]}};
-
-wire [15:0] per_dout = ie1_rd |
- ifg1_rd |
- cpu_id_lo_rd |
- cpu_id_hi_rd |
- cpu_nr_rd;
-
-
-//=============================================================================
-// 5) NMI GENERATION
-//=============================================================================
-// NOTE THAT THE NMI INPUT IS ASSUMED TO BE NON-GLITCHY
-
-//-----------------------------------
-// Edge selection
-//-----------------------------------
-wire nmi_pol = nmi ^ wdtnmies;
-
-//-----------------------------------
-// Pulse capture and synchronization
-//-----------------------------------
- wire nmi_capture = nmi_pol;
-
- // Synchronization
- wire nmi_s;
- omsp_sync_cell sync_cell_nmi (
- .data_out (nmi_s),
- .data_in (nmi_capture),
- .clk (mclk),
- .rst (puc_rst)
- );
-
-
-//-----------------------------------
-// NMI Pending flag
-//-----------------------------------
-
-// Delay
-reg nmi_dly;
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) nmi_dly <= 1'b0;
- else nmi_dly <= nmi_s;
-
-// Edge detection
-assign nmi_edge = ~nmi_dly & nmi_s;
-
-// NMI pending
-wire nmi_pnd = nmiifg & nmie;
-
-// NMI wakeup
-wire nmi_wkup = 1'b0;
-
-
-endmodule // omsp_sfr
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sync_cell.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sync_cell.v
deleted file mode 100644
index ece0682..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sync_cell.v
+++ /dev/null
@@ -1,80 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_sync_cell.v
-//
-// *Module Description:
-// Generic synchronizer for the openMSP430
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-
-module omsp_sync_cell (
-
-// OUTPUTs
- data_out, // Synchronized data output
-
-// INPUTs
- clk, // Receiving clock
- data_in, // Asynchronous data input
- rst // Receiving reset (active high)
-);
-
-// OUTPUTs
-//=========
-output data_out; // Synchronized data output
-
-// INPUTs
-//=========
-input clk; // Receiving clock
-input data_in; // Asynchronous data input
-input rst; // Receiving reset (active high)
-
-
-//=============================================================================
-// 1) SYNCHRONIZER
-//=============================================================================
-
-reg [1:0] data_sync;
-
-always @(posedge clk or posedge rst)
- if (rst) data_sync <= 2'b00;
- else data_sync <= {data_sync[0], data_in};
-
-assign data_out = data_sync[1];
-
-
-endmodule // omsp_sync_cell
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sync_reset.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sync_reset.v
deleted file mode 100644
index 15a158b..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_sync_reset.v
+++ /dev/null
@@ -1,78 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_sync_reset.v
-//
-// *Module Description:
-// Generic reset synchronizer for the openMSP430
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-
-module omsp_sync_reset (
-
-// OUTPUTs
- rst_s, // Synchronized reset
-
-// INPUTs
- clk, // Receiving clock
- rst_a // Asynchronous reset
-);
-
-// OUTPUTs
-//=========
-output rst_s; // Synchronized reset
-
-// INPUTs
-//=========
-input clk; // Receiving clock
-input rst_a; // Asynchronous reset
-
-
-//=============================================================================
-// 1) SYNCHRONIZER
-//=============================================================================
-
-reg [1:0] data_sync;
-
-always @(posedge clk or posedge rst_a)
- if (rst_a) data_sync <= 2'b11;
- else data_sync <= {data_sync[0], 1'b0};
-
-assign rst_s = data_sync[1];
-
-
-endmodule // omsp_sync_reset
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_wakeup_cell.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_wakeup_cell.v
deleted file mode 100644
index 4e3a64a..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_wakeup_cell.v
+++ /dev/null
@@ -1,1007 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_wakeup_cell.v
-//
-// *Module Description:
-// Generic Wakeup cell
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 103 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2011-03-05 15:44:48 +0100 (Sat, 05 Mar 2011) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_wakeup_cell (
-
-// OUTPUTs
- wkup_out, // Wakup signal (asynchronous)
-
-// INPUTs
- scan_clk, // Scan clock
- scan_mode, // Scan mode
- scan_rst, // Scan reset
- wkup_clear, // Glitch free wakeup event clear
- wkup_event // Glitch free asynchronous wakeup event
-);
-
-// OUTPUTs
-//=========
-output wkup_out; // Wakup signal (asynchronous)
-
-// INPUTs
-//=========
-input scan_clk; // Scan clock
-input scan_mode; // Scan mode
-input scan_rst; // Scan reset
-input wkup_clear; // Glitch free wakeup event clear
-input wkup_event; // Glitch free asynchronous wakeup event
-
-
-//=============================================================================
-// 1) AND GATE
-//=============================================================================
-
-// Scan stuff for the ASIC mode
- wire wkup_rst = wkup_clear;
- wire wkup_clk = wkup_event;
-
-// Wakeup capture
-reg wkup_out;
-always @(posedge wkup_clk or posedge wkup_rst)
- if (wkup_rst) wkup_out <= 1'b0;
- else wkup_out <= 1'b1;
-
-
-endmodule // omsp_wakeup_cell
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_watchdog.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_watchdog.v
deleted file mode 100644
index e305f1e..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/omsp_watchdog.v
+++ /dev/null
@@ -1,1187 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: omsp_watchdog.v
-//
-// *Module Description:
-// Watchdog Timer
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module omsp_watchdog (
-
-// OUTPUTs
- per_dout, // Peripheral data output
- wdt_irq, // Watchdog-timer interrupt
- wdt_reset, // Watchdog-timer reset
- wdt_wkup, // Watchdog Wakeup
- wdtifg, // Watchdog-timer interrupt flag
- wdtnmies, // Watchdog-timer NMI edge selection
-
-// INPUTs
- aclk, // ACLK
- aclk_en, // ACLK enable
- dbg_freeze, // Freeze Watchdog counter
- mclk, // Main system clock
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_en, // Peripheral enable (high active)
- per_we, // Peripheral write enable (high active)
- por, // Power-on reset
- puc_rst, // Main system reset
- scan_enable, // Scan enable (active during scan shifting)
- scan_mode, // Scan mode
- smclk, // SMCLK
- smclk_en, // SMCLK enable
- wdtie, // Watchdog timer interrupt enable
- wdtifg_irq_clr, // Watchdog-timer interrupt flag irq accepted clear
- wdtifg_sw_clr, // Watchdog-timer interrupt flag software clear
- wdtifg_sw_set // Watchdog-timer interrupt flag software set
-);
-
-// OUTPUTs
-//=========
-output [15:0] per_dout; // Peripheral data output
-output wdt_irq; // Watchdog-timer interrupt
-output wdt_reset; // Watchdog-timer reset
-output wdt_wkup; // Watchdog Wakeup
-output wdtifg; // Watchdog-timer interrupt flag
-output wdtnmies; // Watchdog-timer NMI edge selection
-
-// INPUTs
-//=========
-input aclk; // ACLK
-input aclk_en; // ACLK enable
-input dbg_freeze; // Freeze Watchdog counter
-input mclk; // Main system clock
-input [13:0] per_addr; // Peripheral address
-input [15:0] per_din; // Peripheral data input
-input per_en; // Peripheral enable (high active)
-input [1:0] per_we; // Peripheral write enable (high active)
-input por; // Power-on reset
-input puc_rst; // Main system reset
-input scan_enable; // Scan enable (active during scan shifting)
-input scan_mode; // Scan mode
-input smclk; // SMCLK
-input smclk_en; // SMCLK enable
-input wdtie; // Watchdog timer interrupt enable
-input wdtifg_irq_clr; // Clear Watchdog-timer interrupt flag
-input wdtifg_sw_clr; // Watchdog-timer interrupt flag software clear
-input wdtifg_sw_set; // Watchdog-timer interrupt flag software set
-
-
-//=============================================================================
-// 1) PARAMETER DECLARATION
-//=============================================================================
-
-// Register base address (must be aligned to decoder bit width)
-parameter [14:0] BASE_ADDR = 15'h0120;
-
-// Decoder bit width (defines how many bits are considered for address decoding)
-parameter DEC_WD = 2;
-
-// Register addresses offset
-parameter [DEC_WD-1:0] WDTCTL = 'h0;
-
-// Register one-hot decoder utilities
-parameter DEC_SZ = (1 << DEC_WD);
-parameter [DEC_SZ-1:0] BASE_REG = {{DEC_SZ-1{1'b0}}, 1'b1};
-
-// Register one-hot decoder
-parameter [DEC_SZ-1:0] WDTCTL_D = (BASE_REG << WDTCTL);
-
-
-//============================================================================
-// 2) REGISTER DECODER
-//============================================================================
-
-// Local register selection
-wire reg_sel = per_en & (per_addr[13:DEC_WD-1]==BASE_ADDR[14:DEC_WD]);
-
-// Register local address
-wire [DEC_WD-1:0] reg_addr = {per_addr[DEC_WD-2:0], 1'b0};
-
-// Register address decode
-wire [DEC_SZ-1:0] reg_dec = (WDTCTL_D & {DEC_SZ{(reg_addr==WDTCTL)}});
-
-// Read/Write probes
-wire reg_write = |per_we & reg_sel;
-wire reg_read = ~|per_we & reg_sel;
-
-// Read/Write vectors
-wire [DEC_SZ-1:0] reg_wr = reg_dec & {DEC_SZ{reg_write}};
-wire [DEC_SZ-1:0] reg_rd = reg_dec & {DEC_SZ{reg_read}};
-
-
-//============================================================================
-// 3) REGISTERS
-//============================================================================
-
-// WDTCTL Register
-//-----------------
-// WDTNMI is not implemented and therefore masked
-
-reg [7:0] wdtctl;
-
-wire wdtctl_wr = reg_wr[WDTCTL];
-
-wire mclk_wdtctl = mclk;
-
-parameter [7:0] WDTNMIES_MASK = 8'h40;
-
-parameter [7:0] WDTSSEL_MASK = 8'h04;
-
-parameter [7:0] WDTCTL_MASK = (8'b1001_0011 | WDTSSEL_MASK | WDTNMIES_MASK);
-
-always @ (posedge mclk_wdtctl or posedge puc_rst)
- if (puc_rst) wdtctl <= 8'h00;
- else if (wdtctl_wr) wdtctl <= per_din[7:0] & WDTCTL_MASK;
-
-wire wdtpw_error = wdtctl_wr & (per_din[15:8]!=8'h5a);
-wire wdttmsel = wdtctl[4];
-wire wdtnmies = wdtctl[6];
-
-
-//============================================================================
-// 4) DATA OUTPUT GENERATION
-//============================================================================
-
-parameter [7:0] WDTNMI_RD_MASK = 8'h20;
- parameter [7:0] WDTSSEL_RD_MASK = 8'h00;
- parameter [7:0] WDTCTL_RD_MASK = WDTNMI_RD_MASK | WDTSSEL_RD_MASK;
-
-// Data output mux
-wire [15:0] wdtctl_rd = {8'h69, wdtctl | WDTCTL_RD_MASK} & {16{reg_rd[WDTCTL]}};
-wire [15:0] per_dout = wdtctl_rd;
-
-
-//=============================================================================
-// 5) WATCHDOG TIMER (ASIC IMPLEMENTATION)
-//=============================================================================
-
-// Watchdog clock source selection
-//---------------------------------
-wire clk_src_en = wdtctl[2] ? aclk_en : smclk_en;
-
-
-// Watchdog 16 bit counter
-//--------------------------
-reg [15:0] wdtcnt;
-
-wire wdtifg_evt;
-wire wdtcnt_clr = (wdtctl_wr & per_din[3]) | wdtifg_evt;
-wire wdtcnt_incr = ~wdtctl[7] & clk_src_en & ~dbg_freeze;
-
-wire [15:0] wdtcnt_nxt = wdtcnt+16'h0001;
-
-always @ (posedge mclk or posedge puc_rst)
- if (puc_rst) wdtcnt <= 16'h0000;
- else if (wdtcnt_clr) wdtcnt <= 16'h0000;
- else if (wdtcnt_incr) wdtcnt <= wdtcnt_nxt;
-
-
-// Interval selection mux
-//--------------------------
-reg wdtqn;
-
-always @(wdtctl or wdtcnt_nxt)
- case(wdtctl[1:0])
- 2'b00 : wdtqn = wdtcnt_nxt[15];
- 2'b01 : wdtqn = wdtcnt_nxt[13];
- 2'b10 : wdtqn = wdtcnt_nxt[9];
- default: wdtqn = wdtcnt_nxt[6];
- endcase
-
-
-// Watchdog event detection
-//-----------------------------
-
-assign wdtifg_evt = (wdtqn & wdtcnt_incr) | wdtpw_error;
-
-
-// Watchdog interrupt flag
-//------------------------------
-reg wdtifg;
-
-wire wdtifg_set = wdtifg_evt | wdtifg_sw_set;
-wire wdtifg_clr = (wdtifg_irq_clr & wdttmsel) | wdtifg_sw_clr;
-
-always @ (posedge mclk or posedge por)
- if (por) wdtifg <= 1'b0;
- else if (wdtifg_set) wdtifg <= 1'b1;
- else if (wdtifg_clr) wdtifg <= 1'b0;
-
-
-// Watchdog interrupt generation
-//---------------------------------
-wire wdt_irq = wdttmsel & wdtifg & wdtie;
-wire wdt_wkup = 1'b0;
-
-
-// Watchdog reset generation
-//-----------------------------
-reg wdt_reset;
-
-always @ (posedge mclk or posedge por)
- if (por) wdt_reset <= 1'b0;
- else wdt_reset <= wdtpw_error | (wdtifg_set & ~wdttmsel);
-
-
-
-
-endmodule // omsp_watchdog
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430.v
deleted file mode 100644
index d6f2d26..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430.v
+++ /dev/null
@@ -1,1494 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430.v
-//
-// *Module Description:
-// openMSP430 Top level file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 175 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-01-30 22:21:42 +0100 (Wed, 30 Jan 2013) $
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module openMSP430 (
-
-// OUTPUTs
- aclk, // ASIC ONLY: ACLK
- aclk_en, // FPGA ONLY: ACLK enable
- dbg_freeze, // Freeze peripherals
- dbg_i2c_sda_out, // Debug interface: I2C SDA OUT
- dbg_uart_txd, // Debug interface: UART TXD
- dco_enable, // ASIC ONLY: Fast oscillator enable
- dco_wkup, // ASIC ONLY: Fast oscillator wake-up (asynchronous)
- dmem_addr, // Data Memory address
- dmem_cen, // Data Memory chip enable (low active)
- dmem_din, // Data Memory data input
- dmem_wen, // Data Memory write enable (low active)
- irq_acc, // Interrupt request accepted (one-hot signal)
- lfxt_enable, // ASIC ONLY: Low frequency oscillator enable
- lfxt_wkup, // ASIC ONLY: Low frequency oscillator wake-up (asynchronous)
- mclk, // Main system clock
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_we, // Peripheral write enable (high active)
- per_en, // Peripheral enable (high active)
- pmem_addr, // Program Memory address
- pmem_cen, // Program Memory chip enable (low active)
- pmem_din, // Program Memory data input (optional)
- pmem_wen, // Program Memory write enable (low active) (optional)
- puc_rst, // Main system reset
- smclk, // ASIC ONLY: SMCLK
- smclk_en, // FPGA ONLY: SMCLK enable
-
-// INPUTs
- cpu_en, // Enable CPU code execution (asynchronous and non-glitchy)
- dbg_en, // Debug interface enable (asynchronous and non-glitchy)
- dbg_i2c_addr, // Debug interface: I2C Address
- dbg_i2c_broadcast, // Debug interface: I2C Broadcast Address (for multicore systems)
- dbg_i2c_scl, // Debug interface: I2C SCL
- dbg_i2c_sda_in, // Debug interface: I2C SDA IN
- dbg_uart_rxd, // Debug interface: UART RXD (asynchronous)
- dco_clk, // Fast oscillator (fast clock)
- dmem_dout, // Data Memory data output
- irq, // Maskable interrupts
- lfxt_clk, // Low frequency oscillator (typ 32kHz)
- nmi, // Non-maskable interrupt (asynchronous)
- per_dout, // Peripheral data output
- pmem_dout, // Program Memory data output
- reset_n, // Reset Pin (low active, asynchronous and non-glitchy)
- scan_enable, // ASIC ONLY: Scan enable (active during scan shifting)
- scan_mode, // ASIC ONLY: Scan mode
- wkup // ASIC ONLY: System Wake-up (asynchronous and non-glitchy)
-);
-
-// PARAMETERs
-//============
-parameter INST_NR = 8'h00; // Current oMSP instance number (for multicore systems)
-parameter TOTAL_NR = 8'h00; // Total number of oMSP instances-1 (for multicore systems)
-
-// OUTPUTs
-//============
-output aclk; // ASIC ONLY: ACLK
-output aclk_en; // FPGA ONLY: ACLK enable
-output dbg_freeze; // Freeze peripherals
-output dbg_i2c_sda_out; // Debug interface: I2C SDA OUT
-output dbg_uart_txd; // Debug interface: UART TXD
-output dco_enable; // ASIC ONLY: Fast oscillator enable
-output dco_wkup; // ASIC ONLY: Fast oscillator wake-up (asynchronous)
-output [6-1:0] dmem_addr; // Data Memory address
-output dmem_cen; // Data Memory chip enable (low active)
-output [15:0] dmem_din; // Data Memory data input
-output [1:0] dmem_wen; // Data Memory write enable (low active)
-output [13:0] irq_acc; // Interrupt request accepted (one-hot signal)
-output lfxt_enable; // ASIC ONLY: Low frequency oscillator enable
-output lfxt_wkup; // ASIC ONLY: Low frequency oscillator wake-up (asynchronous)
-output mclk; // Main system clock
-output [13:0] per_addr; // Peripheral address
-output [15:0] per_din; // Peripheral data input
-output [1:0] per_we; // Peripheral write enable (high active)
-output per_en; // Peripheral enable (high active)
-output [10-1:0] pmem_addr; // Program Memory address
-output pmem_cen; // Program Memory chip enable (low active)
-output [15:0] pmem_din; // Program Memory data input (optional)
-output [1:0] pmem_wen; // Program Memory write enable (low active) (optional)
-output puc_rst; // Main system reset
-output smclk; // ASIC ONLY: SMCLK
-output smclk_en; // FPGA ONLY: SMCLK enable
-
-
-// INPUTs
-//============
-input cpu_en; // Enable CPU code execution (asynchronous and non-glitchy)
-input dbg_en; // Debug interface enable (asynchronous and non-glitchy)
-input [6:0] dbg_i2c_addr; // Debug interface: I2C Address
-input [6:0] dbg_i2c_broadcast; // Debug interface: I2C Broadcast Address (for multicore systems)
-input dbg_i2c_scl; // Debug interface: I2C SCL
-input dbg_i2c_sda_in; // Debug interface: I2C SDA IN
-input dbg_uart_rxd; // Debug interface: UART RXD (asynchronous)
-input dco_clk; // Fast oscillator (fast clock)
-input [15:0] dmem_dout; // Data Memory data output
-input [13:0] irq; // Maskable interrupts
-input lfxt_clk; // Low frequency oscillator (typ 32kHz)
-input nmi; // Non-maskable interrupt (asynchronous and non-glitchy)
-input [15:0] per_dout; // Peripheral data output
-input [15:0] pmem_dout; // Program Memory data output
-input reset_n; // Reset Pin (active low, asynchronous and non-glitchy)
-input scan_enable; // ASIC ONLY: Scan enable (active during scan shifting)
-input scan_mode; // ASIC ONLY: Scan mode
-input wkup; // ASIC ONLY: System Wake-up (asynchronous and non-glitchy)
-
-
-
-//=============================================================================
-// 1) INTERNAL WIRES/REGISTERS/PARAMETERS DECLARATION
-//=============================================================================
-
-wire [7:0] inst_ad;
-wire [7:0] inst_as;
-wire [11:0] inst_alu;
-wire inst_bw;
-wire inst_irq_rst;
-wire inst_mov;
-wire [15:0] inst_dest;
-wire [15:0] inst_dext;
-wire [15:0] inst_sext;
-wire [7:0] inst_so;
-wire [15:0] inst_src;
-wire [2:0] inst_type;
-wire [7:0] inst_jmp;
-wire [3:0] e_state;
-wire exec_done;
-wire decode_noirq;
-wire cpu_en_s;
-wire cpuoff;
-wire oscoff;
-wire scg0;
-wire scg1;
-wire por;
-wire gie;
-wire mclk_enable;
-wire mclk_wkup;
-wire [31:0] cpu_id;
-wire [7:0] cpu_nr_inst = INST_NR;
-wire [7:0] cpu_nr_total = TOTAL_NR;
-
-wire [15:0] eu_mab;
-wire [15:0] eu_mdb_in;
-wire [15:0] eu_mdb_out;
-wire [1:0] eu_mb_wr;
-wire eu_mb_en;
-wire [15:0] fe_mab;
-wire [15:0] fe_mdb_in;
-wire fe_mb_en;
-wire fe_pmem_wait;
-
-wire pc_sw_wr;
-wire [15:0] pc_sw;
-wire [15:0] pc;
-wire [15:0] pc_nxt;
-
-wire nmi_acc;
-wire nmi_pnd;
-wire nmi_wkup;
-
-wire wdtie;
-wire wdtnmies;
-wire wdtifg;
-wire wdt_irq;
-wire wdt_wkup;
-wire wdt_reset;
-wire wdtifg_sw_clr;
-wire wdtifg_sw_set;
-
-wire dbg_clk;
-wire dbg_rst;
-wire dbg_en_s;
-wire dbg_halt_st;
-wire dbg_halt_cmd;
-wire dbg_mem_en;
-wire dbg_reg_wr;
-wire dbg_cpu_reset;
-wire [15:0] dbg_mem_addr;
-wire [15:0] dbg_mem_dout;
-wire [15:0] dbg_mem_din;
-wire [15:0] dbg_reg_din;
-wire [1:0] dbg_mem_wr;
-wire puc_pnd_set;
-
-wire [15:0] per_dout_or;
-wire [15:0] per_dout_sfr;
-wire [15:0] per_dout_wdog;
-wire [15:0] per_dout_mpy;
-wire [15:0] per_dout_clk;
-
-
-//=============================================================================
-// 2) GLOBAL CLOCK & RESET MANAGEMENT
-//=============================================================================
-
-omsp_clock_module clock_module_0 (
-
-// OUTPUTs
- .aclk (aclk), // ACLK
- .aclk_en (aclk_en), // ACLK enablex
- .cpu_en_s (cpu_en_s), // Enable CPU code execution (synchronous)
- .dbg_clk (dbg_clk), // Debug unit clock
- .dbg_en_s (dbg_en_s), // Debug interface enable (synchronous)
- .dbg_rst (dbg_rst), // Debug unit reset
- .dco_enable (dco_enable), // Fast oscillator enable
- .dco_wkup (dco_wkup), // Fast oscillator wake-up (asynchronous)
- .lfxt_enable (lfxt_enable), // Low frequency oscillator enable
- .lfxt_wkup (lfxt_wkup), // Low frequency oscillator wake-up (asynchronous)
- .mclk (mclk), // Main system clock
- .per_dout (per_dout_clk), // Peripheral data output
- .por (por), // Power-on reset
- .puc_pnd_set (puc_pnd_set), // PUC pending set for the serial debug interface
- .puc_rst (puc_rst), // Main system reset
- .smclk (smclk), // SMCLK
- .smclk_en (smclk_en), // SMCLK enable
-
-// INPUTs
- .cpu_en (cpu_en), // Enable CPU code execution (asynchronous)
- .cpuoff (cpuoff), // Turns off the CPU
- .dbg_cpu_reset(dbg_cpu_reset), // Reset CPU from debug interface
- .dbg_en (dbg_en), // Debug interface enable (asynchronous)
- .dco_clk (dco_clk), // Fast oscillator (fast clock)
- .lfxt_clk (lfxt_clk), // Low frequency oscillator (typ 32kHz)
- .mclk_enable (mclk_enable), // Main System Clock enable
- .mclk_wkup (mclk_wkup), // Main System Clock wake-up (asynchronous)
- .oscoff (oscoff), // Turns off LFXT1 clock input
- .per_addr (per_addr), // Peripheral address
- .per_din (per_din), // Peripheral data input
- .per_en (per_en), // Peripheral enable (high active)
- .per_we (per_we), // Peripheral write enable (high active)
- .reset_n (reset_n), // Reset Pin (low active, asynchronous)
- .scan_enable (scan_enable), // Scan enable (active during scan shifting)
- .scan_mode (scan_mode), // Scan mode
- .scg0 (scg0), // System clock generator 1. Turns off the DCO
- .scg1 (scg1), // System clock generator 1. Turns off the SMCLK
- .wdt_reset (wdt_reset) // Watchdog-timer reset
-);
-
-
-//=============================================================================
-// 3) FRONTEND (<=> FETCH & DECODE)
-//=============================================================================
-
-omsp_frontend frontend_0 (
-
-// OUTPUTs
- .dbg_halt_st (dbg_halt_st), // Halt/Run status from CPU
- .decode_noirq (decode_noirq), // Frontend decode instruction
- .e_state (e_state), // Execution state
- .exec_done (exec_done), // Execution completed
- .inst_ad (inst_ad), // Decoded Inst: destination addressing mode
- .inst_as (inst_as), // Decoded Inst: source addressing mode
- .inst_alu (inst_alu), // ALU control signals
- .inst_bw (inst_bw), // Decoded Inst: byte width
- .inst_dest (inst_dest), // Decoded Inst: destination (one hot)
- .inst_dext (inst_dext), // Decoded Inst: destination extended instruction word
- .inst_irq_rst (inst_irq_rst), // Decoded Inst: Reset interrupt
- .inst_jmp (inst_jmp), // Decoded Inst: Conditional jump
- .inst_mov (inst_mov), // Decoded Inst: mov instruction
- .inst_sext (inst_sext), // Decoded Inst: source extended instruction word
- .inst_so (inst_so), // Decoded Inst: Single-operand arithmetic
- .inst_src (inst_src), // Decoded Inst: source (one hot)
- .inst_type (inst_type), // Decoded Instruction type
- .irq_acc (irq_acc), // Interrupt request accepted
- .mab (fe_mab), // Frontend Memory address bus
- .mb_en (fe_mb_en), // Frontend Memory bus enable
- .mclk_enable (mclk_enable), // Main System Clock enable
- .mclk_wkup (mclk_wkup), // Main System Clock wake-up (asynchronous)
- .nmi_acc (nmi_acc), // Non-Maskable interrupt request accepted
- .pc (pc), // Program counter
- .pc_nxt (pc_nxt), // Next PC value (for CALL & IRQ)
-
-// INPUTs
- .cpu_en_s (cpu_en_s), // Enable CPU code execution (synchronous)
- .cpuoff (cpuoff), // Turns off the CPU
- .dbg_halt_cmd (dbg_halt_cmd), // Halt CPU command
- .dbg_reg_sel (dbg_mem_addr[3:0]), // Debug selected register for rd/wr access
- .fe_pmem_wait (fe_pmem_wait), // Frontend wait for Instruction fetch
- .gie (gie), // General interrupt enable
- .irq (irq), // Maskable interrupts
- .mclk (mclk), // Main system clock
- .mdb_in (fe_mdb_in), // Frontend Memory data bus input
- .nmi_pnd (nmi_pnd), // Non-maskable interrupt pending
- .nmi_wkup (nmi_wkup), // NMI Wakeup
- .pc_sw (pc_sw), // Program counter software value
- .pc_sw_wr (pc_sw_wr), // Program counter software write
- .puc_rst (puc_rst), // Main system reset
- .scan_enable (scan_enable), // Scan enable (active during scan shifting)
- .wdt_irq (wdt_irq), // Watchdog-timer interrupt
- .wdt_wkup (wdt_wkup), // Watchdog Wakeup
- .wkup (wkup) // System Wake-up (asynchronous)
-);
-
-
-//=============================================================================
-// 4) EXECUTION UNIT
-//=============================================================================
-
-omsp_execution_unit execution_unit_0 (
-
-// OUTPUTs
- .cpuoff (cpuoff), // Turns off the CPU
- .dbg_reg_din (dbg_reg_din), // Debug unit CPU register data input
- .mab (eu_mab), // Memory address bus
- .mb_en (eu_mb_en), // Memory bus enable
- .mb_wr (eu_mb_wr), // Memory bus write transfer
- .mdb_out (eu_mdb_out), // Memory data bus output
- .oscoff (oscoff), // Turns off LFXT1 clock input
- .pc_sw (pc_sw), // Program counter software value
- .pc_sw_wr (pc_sw_wr), // Program counter software write
- .scg0 (scg0), // System clock generator 1. Turns off the DCO
- .scg1 (scg1), // System clock generator 1. Turns off the SMCLK
-
-// INPUTs
- .dbg_halt_st (dbg_halt_st), // Halt/Run status from CPU
- .dbg_mem_dout (dbg_mem_dout), // Debug unit data output
- .dbg_reg_wr (dbg_reg_wr), // Debug unit CPU register write
- .e_state (e_state), // Execution state
- .exec_done (exec_done), // Execution completed
- .gie (gie), // General interrupt enable
- .inst_ad (inst_ad), // Decoded Inst: destination addressing mode
- .inst_as (inst_as), // Decoded Inst: source addressing mode
- .inst_alu (inst_alu), // ALU control signals
- .inst_bw (inst_bw), // Decoded Inst: byte width
- .inst_dest (inst_dest), // Decoded Inst: destination (one hot)
- .inst_dext (inst_dext), // Decoded Inst: destination extended instruction word
- .inst_irq_rst (inst_irq_rst), // Decoded Inst: reset interrupt
- .inst_jmp (inst_jmp), // Decoded Inst: Conditional jump
- .inst_mov (inst_mov), // Decoded Inst: mov instruction
- .inst_sext (inst_sext), // Decoded Inst: source extended instruction word
- .inst_so (inst_so), // Decoded Inst: Single-operand arithmetic
- .inst_src (inst_src), // Decoded Inst: source (one hot)
- .inst_type (inst_type), // Decoded Instruction type
- .mclk (mclk), // Main system clock
- .mdb_in (eu_mdb_in), // Memory data bus input
- .pc (pc), // Program counter
- .pc_nxt (pc_nxt), // Next PC value (for CALL & IRQ)
- .puc_rst (puc_rst), // Main system reset
- .scan_enable (scan_enable) // Scan enable (active during scan shifting)
-);
-
-
-//=============================================================================
-// 5) MEMORY BACKBONE
-//=============================================================================
-
-omsp_mem_backbone mem_backbone_0 (
-
-// OUTPUTs
- .dbg_mem_din (dbg_mem_din), // Debug unit Memory data input
- .dmem_addr (dmem_addr), // Data Memory address
- .dmem_cen (dmem_cen), // Data Memory chip enable (low active)
- .dmem_din (dmem_din), // Data Memory data input
- .dmem_wen (dmem_wen), // Data Memory write enable (low active)
- .eu_mdb_in (eu_mdb_in), // Execution Unit Memory data bus input
- .fe_mdb_in (fe_mdb_in), // Frontend Memory data bus input
- .fe_pmem_wait (fe_pmem_wait), // Frontend wait for Instruction fetch
- .per_addr (per_addr), // Peripheral address
- .per_din (per_din), // Peripheral data input
- .per_we (per_we), // Peripheral write enable (high active)
- .per_en (per_en), // Peripheral enable (high active)
- .pmem_addr (pmem_addr), // Program Memory address
- .pmem_cen (pmem_cen), // Program Memory chip enable (low active)
- .pmem_din (pmem_din), // Program Memory data input (optional)
- .pmem_wen (pmem_wen), // Program Memory write enable (low active) (optional)
-
-// INPUTs
- .dbg_halt_st (dbg_halt_st), // Halt/Run status from CPU
- .dbg_mem_addr (dbg_mem_addr), // Debug address for rd/wr access
- .dbg_mem_dout (dbg_mem_dout), // Debug unit data output
- .dbg_mem_en (dbg_mem_en), // Debug unit memory enable
- .dbg_mem_wr (dbg_mem_wr), // Debug unit memory write
- .dmem_dout (dmem_dout), // Data Memory data output
- .eu_mab (eu_mab[15:1]), // Execution Unit Memory address bus
- .eu_mb_en (eu_mb_en), // Execution Unit Memory bus enable
- .eu_mb_wr (eu_mb_wr), // Execution Unit Memory bus write transfer
- .eu_mdb_out (eu_mdb_out), // Execution Unit Memory data bus output
- .fe_mab (fe_mab[15:1]), // Frontend Memory address bus
- .fe_mb_en (fe_mb_en), // Frontend Memory bus enable
- .mclk (mclk), // Main system clock
- .per_dout (per_dout_or), // Peripheral data output
- .pmem_dout (pmem_dout), // Program Memory data output
- .puc_rst (puc_rst), // Main system reset
- .scan_enable (scan_enable) // Scan enable (active during scan shifting)
-);
-
-
-//=============================================================================
-// 6) SPECIAL FUNCTION REGISTERS
-//=============================================================================
-omsp_sfr sfr_0 (
-
-// OUTPUTs
- .cpu_id (cpu_id), // CPU ID
- .nmi_pnd (nmi_pnd), // NMI Pending
- .nmi_wkup (nmi_wkup), // NMI Wakeup
- .per_dout (per_dout_sfr), // Peripheral data output
- .wdtie (wdtie), // Watchdog-timer interrupt enable
- .wdtifg_sw_clr(wdtifg_sw_clr), // Watchdog-timer interrupt flag software clear
- .wdtifg_sw_set(wdtifg_sw_set), // Watchdog-timer interrupt flag software set
-
-// INPUTs
- .cpu_nr_inst (cpu_nr_inst), // Current oMSP instance number
- .cpu_nr_total (cpu_nr_total), // Total number of oMSP instances-1
- .mclk (mclk), // Main system clock
- .nmi (nmi), // Non-maskable interrupt (asynchronous)
- .nmi_acc (nmi_acc), // Non-Maskable interrupt request accepted
- .per_addr (per_addr), // Peripheral address
- .per_din (per_din), // Peripheral data input
- .per_en (per_en), // Peripheral enable (high active)
- .per_we (per_we), // Peripheral write enable (high active)
- .puc_rst (puc_rst), // Main system reset
- .scan_mode (scan_mode), // Scan mode
- .wdtifg (wdtifg), // Watchdog-timer interrupt flag
- .wdtnmies (wdtnmies) // Watchdog-timer NMI edge selection
-);
-
-
-//=============================================================================
-// 7) WATCHDOG TIMER
-//=============================================================================
-omsp_watchdog watchdog_0 (
-
-// OUTPUTs
- .per_dout (per_dout_wdog), // Peripheral data output
- .wdt_irq (wdt_irq), // Watchdog-timer interrupt
- .wdt_reset (wdt_reset), // Watchdog-timer reset
- .wdt_wkup (wdt_wkup), // Watchdog Wakeup
- .wdtifg (wdtifg), // Watchdog-timer interrupt flag
- .wdtnmies (wdtnmies), // Watchdog-timer NMI edge selection
-
-// INPUTs
- .aclk (aclk), // ACLK
- .aclk_en (aclk_en), // ACLK enable
- .dbg_freeze (dbg_freeze), // Freeze Watchdog counter
- .mclk (mclk), // Main system clock
- .per_addr (per_addr), // Peripheral address
- .per_din (per_din), // Peripheral data input
- .per_en (per_en), // Peripheral enable (high active)
- .per_we (per_we), // Peripheral write enable (high active)
- .por (por), // Power-on reset
- .puc_rst (puc_rst), // Main system reset
- .scan_enable (scan_enable), // Scan enable (active during scan shifting)
- .scan_mode (scan_mode), // Scan mode
- .smclk (smclk), // SMCLK
- .smclk_en (smclk_en), // SMCLK enable
- .wdtie (wdtie), // Watchdog-timer interrupt enable
- .wdtifg_irq_clr (irq_acc[10]), // Clear Watchdog-timer interrupt flag
- .wdtifg_sw_clr (wdtifg_sw_clr), // Watchdog-timer interrupt flag software clear
- .wdtifg_sw_set (wdtifg_sw_set) // Watchdog-timer interrupt flag software set
-);
-
-
-//=============================================================================
-// 8) HARDWARE MULTIPLIER
-//=============================================================================
-omsp_multiplier multiplier_0 (
-
-// OUTPUTs
- .per_dout (per_dout_mpy), // Peripheral data output
-
-// INPUTs
- .mclk (mclk), // Main system clock
- .per_addr (per_addr), // Peripheral address
- .per_din (per_din), // Peripheral data input
- .per_en (per_en), // Peripheral enable (high active)
- .per_we (per_we), // Peripheral write enable (high active)
- .puc_rst (puc_rst), // Main system reset
- .scan_enable (scan_enable) // Scan enable (active during scan shifting)
-);
-
-//=============================================================================
-// 9) PERIPHERALS' OUTPUT BUS
-//=============================================================================
-
-assign per_dout_or = per_dout |
- per_dout_clk |
- per_dout_sfr |
- per_dout_wdog |
- per_dout_mpy;
-
-
-//=============================================================================
-// 10) DEBUG INTERFACE
-//=============================================================================
-
-omsp_dbg dbg_0 (
-
-// OUTPUTs
- .dbg_cpu_reset (dbg_cpu_reset), // Reset CPU from debug interface
- .dbg_freeze (dbg_freeze), // Freeze peripherals
- .dbg_halt_cmd (dbg_halt_cmd), // Halt CPU command
- .dbg_i2c_sda_out (dbg_i2c_sda_out), // Debug interface: I2C SDA OUT
- .dbg_mem_addr (dbg_mem_addr), // Debug address for rd/wr access
- .dbg_mem_dout (dbg_mem_dout), // Debug unit data output
- .dbg_mem_en (dbg_mem_en), // Debug unit memory enable
- .dbg_mem_wr (dbg_mem_wr), // Debug unit memory write
- .dbg_reg_wr (dbg_reg_wr), // Debug unit CPU register write
- .dbg_uart_txd (dbg_uart_txd), // Debug interface: UART TXD
-
-// INPUTs
- .cpu_en_s (cpu_en_s), // Enable CPU code execution (synchronous)
- .cpu_id (cpu_id), // CPU ID
- .cpu_nr_inst (cpu_nr_inst), // Current oMSP instance number
- .cpu_nr_total (cpu_nr_total), // Total number of oMSP instances-1
- .dbg_clk (dbg_clk), // Debug unit clock
- .dbg_en_s (dbg_en_s), // Debug interface enable (synchronous)
- .dbg_halt_st (dbg_halt_st), // Halt/Run status from CPU
- .dbg_i2c_addr (dbg_i2c_addr), // Debug interface: I2C Address
- .dbg_i2c_broadcast (dbg_i2c_broadcast), // Debug interface: I2C Broadcast Address (for multicore systems)
- .dbg_i2c_scl (dbg_i2c_scl), // Debug interface: I2C SCL
- .dbg_i2c_sda_in (dbg_i2c_sda_in), // Debug interface: I2C SDA IN
- .dbg_mem_din (dbg_mem_din), // Debug unit Memory data input
- .dbg_reg_din (dbg_reg_din), // Debug unit CPU register data input
- .dbg_rst (dbg_rst), // Debug unit reset
- .dbg_uart_rxd (dbg_uart_rxd), // Debug interface: UART RXD (asynchronous)
- .decode_noirq (decode_noirq), // Frontend decode instruction
- .eu_mab (eu_mab), // Execution-Unit Memory address bus
- .eu_mb_en (eu_mb_en), // Execution-Unit Memory bus enable
- .eu_mb_wr (eu_mb_wr), // Execution-Unit Memory bus write transfer
- .fe_mdb_in (fe_mdb_in), // Frontend Memory data bus input
- .pc (pc), // Program counter
- .puc_pnd_set (puc_pnd_set) // PUC pending set for the serial debug interface
-);
-
-
-
-endmodule // openMSP430
-
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-
-// Data Memory sizes
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include Debug interface
-
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-
-// Include/Exclude Watchdog timer
-
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-
-// Input synchronizers
-
-
-// Peripheral Memory Space:
-
-
-// Let the CPU break after a PUC occurrence by default
-
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-
-
-// Data Memory Size
-
-
-
-// Peripheral Memory Size
-
-
-
-// Data Memory Base Adresses
-
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-
-
-
-// Instructions type
-
-
-
-
-// Single-operand arithmetic
-
-
-
-
-
-
-
-
-
-// Conditional jump
-
-
-
-
-
-
-
-
-
-// Two-operand arithmetic
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Addressing modes
-
-
-
-
-
-
-
-
-
-// Instruction state machine
-
-
-
-
-
-
-
-// Execution state machine
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ALU control signals
-
-
-
-
-
-
-
-
-
-
-
-
-
-// Debug interface
-
-
-
-
-// Debug interface CPU_CTL register
-
-
-
-
-
-
-
-
-// Debug interface CPU_STAT register
-
-
-
-
-
-
-// Debug interface BRKx_CTL register
-
-
-
-
-
-
-
-// Basic clock module: BCSCTL1 Control Register
-
-
-// Basic clock module: BCSCTL2 Control Register
-
-
-
-
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-
-// Debug interface: Software breakpoint opcode
-
-
-// Debug UART interface auto data synchronization
-
-
-// Debug UART interface data rate
-
-
-
-
-// Debug interface input synchronizer
-
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-
-// Counter width for the debug interface UART
-
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430_defines.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430_defines.v
deleted file mode 100644
index c3f098c..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430_defines.v
+++ /dev/null
@@ -1,594 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
\ No newline at end of file
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430_undefines.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430_undefines.v
deleted file mode 100644
index 41c3220..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/rtl/openMSP430_undefines.v
+++ /dev/null
@@ -1,201 +0,0 @@
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/sim/bench.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/sim/bench.v
deleted file mode 100644
index 4060008..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/sim/bench.v
+++ /dev/null
@@ -1,939 +0,0 @@
-
-`timescale 1ns/1ps
-
-// for memory layout
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_defines.v
-//
-// *Module Description:
-// openMSP430 Configuration file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 180 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2013-02-25 22:23:18 +0100 (Mon, 25 Feb 2013) $
-//----------------------------------------------------------------------------
-//`define OMSP_NO_INCLUDE
-//----------------------------------------------------------------------------
-// Copyright (C) 2009 , Olivier Girard
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-// * Neither the name of the authors nor the names of its contributors
-// may be used to endorse or promote products derived from this software
-// without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-// THE POSSIBILITY OF SUCH DAMAGE
-//
-//----------------------------------------------------------------------------
-//
-// *File Name: openMSP430_undefines.v
-//
-// *Module Description:
-// openMSP430 Verilog `undef file
-//
-// *Author(s):
-// - Olivier Girard, olgirard@gmail.com
-//
-//----------------------------------------------------------------------------
-// $Rev: 23 $
-// $LastChangedBy: olivier.girard $
-// $LastChangedDate: 2009-08-30 18:39:26 +0200 (Sun, 30 Aug 2009) $
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-// BASIC SYSTEM CONFIGURATION
-//----------------------------------------------------------------------------
-
-// Program Memory sizes
-
-// Data Memory sizes
-
-// Include/Exclude Hardware Multiplier
-
-// Include Debug interface
-
-
-//----------------------------------------------------------------------------
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//----------------------------------------------------------------------------
-
-// Custom user version number
-
-// Include/Exclude Watchdog timer
-
-// Include/Exclude Non-Maskable-Interrupt support
-
-// Input synchronizers
-
-// Peripheral Memory Space:
-
-// Let the CPU break after a PUC occurrence by default
-
-
-//----------------------------------------------------------------------------
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// Serial Debug interface protocol
-
-// Enable the I2C broadcast address
-
-// Number of hardware breakpoint units
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Custom Program/Data and Peripheral Memory Spaces
-
-
-
-
-
-
-
-// ASIC version
-
-
-//----------------------------------------------------------------------------
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//----------------------------------------------------------------------------
-
-// ASIC/FPGA-like clocking
-
-// Fine grained clock gating
-
-// LFXT clock domain
-
-// MCLK: Clock Mux
-
-// SMCLK: Clock Mux
-
-// WATCHDOG: Clock Mux
-
-// MCLK: Clock divider
-
-// SMCLK: Clock divider (/1/2/4/8)
-
-// ACLK: Clock divider (/1/2/4/8)
-
-// LOW POWER MODE: CPUOFF
-
-// LOW POWER MODE: SCG0
-
-// LOW POWER MODE: SCG1
-
-// LOW POWER MODE: OSCOFF
-
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-
-// Debug UART interface data rate
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-
-//============================================================================
-//============================================================================
-// BASIC SYSTEM CONFIGURATION
-//============================================================================
-//============================================================================
-//
-// Note: the sum of program, data and peripheral memory spaces must not
-// exceed 64 kB
-//
-
-// Program Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define PMEM_SIZE_CUSTOM
-//`define PMEM_SIZE_59_KB
-//`define PMEM_SIZE_55_KB
-//`define PMEM_SIZE_54_KB
-//`define PMEM_SIZE_51_KB
-//`define PMEM_SIZE_48_KB
-//`define PMEM_SIZE_41_KB
-//`define PMEM_SIZE_32_KB
-//`define PMEM_SIZE_24_KB
-//`define PMEM_SIZE_16_KB
-//`define PMEM_SIZE_12_KB
-//`define PMEM_SIZE_8_KB
-//`define PMEM_SIZE_4_KB
-//`define PMEM_SIZE_1_KB
-
-
-// Data Memory Size:
-// Uncomment the required memory size
-//-------------------------------------------------------
-//`define DMEM_SIZE_CUSTOM
-//`define DMEM_SIZE_32_KB
-//`define DMEM_SIZE_24_KB
-//`define DMEM_SIZE_16_KB
-//`define DMEM_SIZE_10_KB
-//`define DMEM_SIZE_8_KB
-//`define DMEM_SIZE_5_KB
-//`define DMEM_SIZE_4_KB
-//`define DMEM_SIZE_2p5_KB
-//`define DMEM_SIZE_2_KB
-//`define DMEM_SIZE_1_KB
-//`define DMEM_SIZE_512_B
-//`define DMEM_SIZE_256_B
-
-
-// Include/Exclude Hardware Multiplier
-
-
-// Include/Exclude Serial Debug interface
-
-
-//============================================================================
-//============================================================================
-// ADVANCED SYSTEM CONFIGURATION (FOR EXPERIENCED USERS)
-//============================================================================
-//============================================================================
-
-//-------------------------------------------------------
-// Custom user version number
-//-------------------------------------------------------
-// This 5 bit field can be freely used in order to allow
-// custom identification of the system through the debug
-// interface.
-// (see CPU_ID.USER_VERSION field in the documentation)
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Watchdog timer
-//-------------------------------------------------------
-// When excluded, the following functionality will be
-// lost:
-// - Watchog (both interval and watchdog modes)
-// - NMI interrupt edge selection
-// - Possibility to generate a software PUC reset
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Include/Exclude Non-Maskable-Interrupt support
-//-------------------------------------------------------
-
-
-//-------------------------------------------------------
-// Input synchronizers
-//-------------------------------------------------------
-// In some cases, the asynchronous input ports might
-// already be synchronized externally.
-// If an extensive CDC design review showed that this
-// is really the case, the individual synchronizers
-// can be disabled with the following defines.
-//
-// Notes:
-// - all three signals are all sampled in the MCLK domain
-//
-// - the dbg_en signal reset the debug interface
-// when 0. Therefore make sure it is glitch free.
-//
-//-------------------------------------------------------
-//`define SYNC_CPU_EN
-//`define SYNC_DBG_EN
-
-
-//-------------------------------------------------------
-// Peripheral Memory Space:
-//-------------------------------------------------------
-// The original MSP430 architecture map the peripherals
-// from 0x0000 to 0x01FF (i.e. 512B of the memory space).
-// The following defines allow you to expand this space
-// up to 32 kB (i.e. from 0x0000 to 0x7fff).
-// As a consequence, the data memory mapping will be
-// shifted up and a custom linker script will therefore
-// be required by the GCC compiler.
-//-------------------------------------------------------
-//`define PER_SIZE_CUSTOM
-//`define PER_SIZE_32_KB
-//`define PER_SIZE_16_KB
-//`define PER_SIZE_8_KB
-//`define PER_SIZE_4_KB
-//`define PER_SIZE_2_KB
-//`define PER_SIZE_1_KB
-
-
-//-------------------------------------------------------
-// Defines the debugger CPU_CTL.RST_BRK_EN reset value
-// (CPU break on PUC reset)
-//-------------------------------------------------------
-// When defined, the CPU will automatically break after
-// a PUC occurrence by default. This is typically useful
-// when the program memory can only be initialized through
-// the serial debug interface.
-//-------------------------------------------------------
-
-
-//============================================================================
-//============================================================================
-// EXPERT SYSTEM CONFIGURATION ( !!!! EXPERTS ONLY !!!! )
-//============================================================================
-//============================================================================
-//
-// IMPORTANT NOTE: Please update following configuration options ONLY if
-// you have a good reason to do so... and if you know what
-// you are doing :-P
-//
-//============================================================================
-
-//-------------------------------------------------------
-// Select serial debug interface protocol
-//-------------------------------------------------------
-// DBG_UART -> Enable UART (8N1) debug interface
-// DBG_I2C -> Enable I2C debug interface
-//-------------------------------------------------------
-//`define DBG_I2C
-
-
-//-------------------------------------------------------
-// Enable the I2C broadcast address
-//-------------------------------------------------------
-// For multicore systems, a common I2C broadcast address
-// can be given to all oMSP cores in order to
-// synchronously RESET, START, STOP, or STEP all CPUs
-// at once with a single I2C command.
-// If you have a single openMSP430 in your system,
-// this option can stay commented-out.
-//-------------------------------------------------------
-//`define DBG_I2C_BROADCAST
-
-
-//-------------------------------------------------------
-// Number of hardware breakpoint/watchpoint units
-// (each unit contains two hardware addresses available
-// for breakpoints or watchpoints):
-// - DBG_HWBRK_0 -> Include hardware breakpoints unit 0
-// - DBG_HWBRK_1 -> Include hardware breakpoints unit 1
-// - DBG_HWBRK_2 -> Include hardware breakpoints unit 2
-// - DBG_HWBRK_3 -> Include hardware breakpoints unit 3
-//-------------------------------------------------------
-// Please keep in mind that hardware breakpoints only
-// make sense whenever the program memory is not an SRAM
-// (i.e. Flash/OTP/ROM/...) or when you are interested
-// in data breakpoints.
-//-------------------------------------------------------
-//`define DBG_HWBRK_0
-//`define DBG_HWBRK_1
-//`define DBG_HWBRK_2
-//`define DBG_HWBRK_3
-
-
-//-------------------------------------------------------
-// Enable/Disable the hardware breakpoint RANGE mode
-//-------------------------------------------------------
-// When enabled this feature allows the hardware breakpoint
-// units to stop the cpu whenever an instruction or data
-// access lays within an address range.
-// Note that this feature is not supported by GDB.
-//-------------------------------------------------------
-//`define DBG_HWBRK_RANGE
-
-
-//-------------------------------------------------------
-// Custom Program/Data and Peripheral Memory Spaces
-//-------------------------------------------------------
-// The following values are valid only if the
-// corresponding *_SIZE_CUSTOM defines are uncommented:
-//
-// - *_SIZE : size of the section in bytes.
-// - *_AWIDTH : address port width, this value must allow
-// to address all WORDS of the section
-// (i.e. the *_SIZE divided by 2)
-//-------------------------------------------------------
-
-// Custom Program memory (enabled with PMEM_SIZE_CUSTOM)
-
-// Custom Data memory (enabled with DMEM_SIZE_CUSTOM)
-
-// Custom Peripheral memory (enabled with PER_SIZE_CUSTOM)
-
-
-//-------------------------------------------------------
-// ASIC version
-//-------------------------------------------------------
-// When uncommented, this define will enable the
-// ASIC system configuration section (see below) and
-// will activate scan support for production test.
-//
-// WARNING: if you target an FPGA, leave this define
-// commented.
-//-------------------------------------------------------
-//`define ASIC
-
-
-//============================================================================
-//============================================================================
-// ASIC SYSTEM CONFIGURATION ( !!!! EXPERTS/PROFESSIONALS ONLY !!!! )
-//============================================================================
-//============================================================================
-
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//===== SYSTEM CONSTANTS --- !!!!!!!! DO NOT EDIT !!!!!!!! =====//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-//==========================================================================//
-
-//
-// PROGRAM, DATA & PERIPHERAL MEMORY CONFIGURATION
-//==================================================
-
-// Program Memory Size
-
-// Data Memory Size
-
-// Peripheral Memory Size
-
-// Data Memory Base Adresses
-
-// Program & Data Memory most significant address bit (for 16 bit words)
-
-//
-// STATES, REGISTER FIELDS, ...
-//======================================
-
-// Instructions type
-
-// Single-operand arithmetic
-
-// Conditional jump
-
-// Two-operand arithmetic
-
-// Addressing modes
-
-// Instruction state machine
-
-// Execution state machine
-// (swapped E_IRQ_0 and E_IRQ_2 values to suppress glitch generation warning from lint tool)
-
-// ALU control signals
-
-// Debug interface
-
-// Debug interface CPU_CTL register
-
-// Debug interface CPU_STAT register
-
-// Debug interface BRKx_CTL register
-
-// Basic clock module: BCSCTL1 Control Register
-
-// Basic clock module: BCSCTL2 Control Register
-
-// MCLK Clock gate
-
-// SMCLK Clock gate
-
-//
-// DEBUG INTERFACE EXTRA CONFIGURATION
-//======================================
-
-// Debug interface: CPU version
-
-// Debug interface: Software breakpoint opcode
-
-// Debug UART interface auto data synchronization
-// If the following define is commented out, then
-// the DBG_UART_BAUD and DBG_DCO_FREQ need to be properly
-// defined.
-
-// Debug UART interface data rate
-// In order to properly setup the UART debug interface, you
-// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
-// the chosen BAUD rate from the UART interface.
-//
-//`define DBG_UART_BAUD 9600
-//`define DBG_UART_BAUD 19200
-//`define DBG_UART_BAUD 38400
-//`define DBG_UART_BAUD 57600
-//`define DBG_UART_BAUD 115200
-//`define DBG_UART_BAUD 230400
-//`define DBG_UART_BAUD 460800
-//`define DBG_UART_BAUD 576000
-//`define DBG_UART_BAUD 921600
-
-// Debug interface input synchronizer
-
-// Enable/Disable the hardware breakpoint RANGE mode
-
-// Counter width for the debug interface UART
-
-// Check configuration
-
-//
-// MULTIPLIER CONFIGURATION
-//======================================
-
-// If uncommented, the following define selects
-// the 16x16 multiplier (1 cycle) instead of the
-// default 16x8 multplier (2 cycles)
-//`define MPY_16x16
-
-//======================================
-// CONFIGURATION CHECKS
-//======================================
-
-module testbench;
-
-// UUT OUTPUTs
-//============
-wire aclk; // ASIC ONLY: ACLK
-wire aclk_en; // FPGA ONLY: ACLK enable
-wire dbg_freeze; // Freeze peripherals
-wire dbg_i2c_sda_out; // Debug interface: I2C SDA OUT
-wire dbg_uart_txd; // Debug interface: UART TXD
-wire dco_enable; // ASIC ONLY: Fast oscillator enable
-wire dco_wkup; // ASIC ONLY: Fast oscillator wake-up (asynchronous)
-wire [6-1:0] dmem_addr; // Data Memory address
-wire dmem_cen; // Data Memory chip enable (low active)
-wire [15:0] dmem_din; // Data Memory data input
-wire [1:0] dmem_wen; // Data Memory write enable (low active)
-wire [13:0] irq_acc; // Interrupt request accepted (one-hot signal)
-wire lfxt_enable; // ASIC ONLY: Low frequency oscillator enable
-wire lfxt_wkup; // ASIC ONLY: Low frequency oscillator wake-up (asynchronous)
-wire mclk; // Main system clock
-wire [13:0] per_addr; // Peripheral address
-wire [15:0] per_din; // Peripheral data input
-wire [1:0] per_we; // Peripheral write enable (high active)
-wire per_en; // Peripheral enable (high active)
-wire [10-1:0] pmem_addr; // Program Memory address
-wire pmem_cen; // Program Memory chip enable (low active)
-wire [15:0] pmem_din; // Program Memory data input (optional)
-wire [1:0] pmem_wen; // Program Memory write enable (low active) (optional)
-wire puc_rst; // Main system reset
-wire smclk; // ASIC ONLY: SMCLK
-wire smclk_en; // FPGA ONLY: SMCLK enable
-
-
-// UUT INPUTs
-//===========
-wire cpu_en; // Enable CPU code execution (asynchronous and non-glitchy)
-wire dbg_en; // Debug interface enable (asynchronous and non-glitchy)
-wire [6:0] dbg_i2c_addr; // Debug interface: I2C Address
-wire [6:0] dbg_i2c_broadcast; // Debug interface: I2C Broadcast Address (for multicore systems)
-wire dbg_i2c_scl; // Debug interface: I2C SCL
-wire dbg_i2c_sda_in; // Debug interface: I2C SDA IN
-wire dbg_uart_rxd; // Debug interface: UART RXD (asynchronous)
-wire dco_clk; // Fast oscillator (fast clock)
-reg [15:0] dmem_dout; // Data Memory data output
-wire [13:0] irq; // Maskable interrupts
-wire lfxt_clk; // Low frequency oscillator (typ 32kHz)
-wire nmi; // Non-maskable interrupt (asynchronous and non-glitchy)
-reg [15:0] per_dout; // Peripheral data output
-reg [15:0] pmem_dout; // Program Memory data output
-wire reset_n; // Reset Pin (active low, asynchronous and non-glitchy)
-wire scan_enable; // ASIC ONLY: Scan enable (active during scan shifting)
-wire scan_mode; // ASIC ONLY: Scan mode
-wire wkup; // ASIC ONLY: System Wake-up (asynchronous and non-glitchy)
-
-openMSP430 UUT (
-
-// OUTPUTs
- aclk, // ASIC ONLY: ACLK
- aclk_en, // FPGA ONLY: ACLK enable
- dbg_freeze, // Freeze peripherals
- dbg_i2c_sda_out, // Debug interface: I2C SDA OUT
- dbg_uart_txd, // Debug interface: UART TXD
- dco_enable, // ASIC ONLY: Fast oscillator enable
- dco_wkup, // ASIC ONLY: Fast oscillator wake-up (asynchronous)
- dmem_addr, // Data Memory address
- dmem_cen, // Data Memory chip enable (low active)
- dmem_din, // Data Memory data input
- dmem_wen, // Data Memory write enable (low active)
- irq_acc, // Interrupt request accepted (one-hot signal)
- lfxt_enable, // ASIC ONLY: Low frequency oscillator enable
- lfxt_wkup, // ASIC ONLY: Low frequency oscillator wake-up (asynchronous)
- mclk, // Main system clock
- per_addr, // Peripheral address
- per_din, // Peripheral data input
- per_we, // Peripheral write enable (high active)
- per_en, // Peripheral enable (high active)
- pmem_addr, // Program Memory address
- pmem_cen, // Program Memory chip enable (low active)
- pmem_din, // Program Memory data input (optional)
- pmem_wen, // Program Memory write enable (low active) (optional)
- puc_rst, // Main system reset
- smclk, // ASIC ONLY: SMCLK
- smclk_en, // FPGA ONLY: SMCLK enable
-
-// INPUTs
- cpu_en, // Enable CPU code execution (asynchronous and non-glitchy)
- dbg_en, // Debug interface enable (asynchronous and non-glitchy)
- dbg_i2c_addr, // Debug interface: I2C Address
- dbg_i2c_broadcast, // Debug interface: I2C Broadcast Address (for multicore systems)
- dbg_i2c_scl, // Debug interface: I2C SCL
- dbg_i2c_sda_in, // Debug interface: I2C SDA IN
- dbg_uart_rxd, // Debug interface: UART RXD (asynchronous)
- dco_clk, // Fast oscillator (fast clock)
- dmem_dout, // Data Memory data output
- irq, // Maskable interrupts
- lfxt_clk, // Low frequency oscillator (typ 32kHz)
- nmi, // Non-maskable interrupt (asynchronous)
- per_dout, // Peripheral data output
- pmem_dout, // Program Memory data output
- reset_n, // Reset Pin (low active, asynchronous and non-glitchy)
- scan_enable, // ASIC ONLY: Scan enable (active during scan shifting)
- scan_mode, // ASIC ONLY: Scan mode
- wkup // ASIC ONLY: System Wake-up (asynchronous and non-glitchy)
-);
-
-// -----------------------------------------------------------------------------------
-
-assign cpu_en = 1, dbg_en = 0;
-
-reg clk, rst;
-integer cycles;
-initial begin
- clk <= 1;
- rst <= 0;
- cycles = 0;
- while (cycles < 8) begin
- #50; clk <= ~clk;
- cycles = cycles + 1;
- #50; clk <= ~clk;
- end
- rst <= #20 1;
- forever begin
- #50; clk <= ~clk;
- cycles = cycles + 1;
- #50; clk <= ~clk;
- if (cycles == 20000)
- $finish;
- end
-end
-
-assign dco_clk = clk;
-assign lfxt_clk = 0;
-assign irq = 0, nmi = 0;
-assign reset_n = rst;
-assign scan_enable = 0;
-assign scan_mode = 0;
-assign wkup = 0;
-
-assign dbg_i2c_addr = 45;
-assign dbg_i2c_broadcast = 67;
-assign dbg_i2c_scl = 0;
-assign dbg_i2c_sda_in = 0;
-assign dbg_uart_rxd = 0;
-
-// -----------------------------------------------------------------------------------
-
-reg [15:0] addr;
-
-reg [15:8] dmem_hi [128/2-1:0];
-reg [ 7:0] dmem_lo [128/2-1:0];
-reg [15:0] pmem [2048/2-1:0];
-
-integer output_idx;
-reg [15:0] output_buf [1023:0];
-event output_eof;
-
-integer i;
-initial begin
- for (i = 0; i < 128/2; i=i+1) begin
- dmem_hi[i] = 0;
- dmem_lo[i] = 0;
- end
- pmem[ 512] = 16'h4031;
-pmem[ 513] = 16'h0280;
-pmem[ 514] = 16'h4215;
-pmem[ 515] = 16'h0120;
-pmem[ 516] = 16'hf375;
-pmem[ 517] = 16'hd035;
-pmem[ 518] = 16'h5a08;
-pmem[ 519] = 16'h403f;
-pmem[ 520] = 16'h0000;
-pmem[ 521] = 16'h930f;
-pmem[ 522] = 16'h2407;
-pmem[ 523] = 16'h4582;
-pmem[ 524] = 16'h0120;
-pmem[ 525] = 16'h832f;
-pmem[ 526] = 16'h4f9f;
-pmem[ 527] = 16'hfccc;
-pmem[ 528] = 16'h0200;
-pmem[ 529] = 16'h23f9;
-pmem[ 530] = 16'h403f;
-pmem[ 531] = 16'h0008;
-pmem[ 532] = 16'h930f;
-pmem[ 533] = 16'h2406;
-pmem[ 534] = 16'h4582;
-pmem[ 535] = 16'h0120;
-pmem[ 536] = 16'h831f;
-pmem[ 537] = 16'h43cf;
-pmem[ 538] = 16'h0200;
-pmem[ 539] = 16'h23fa;
-pmem[ 540] = 16'h43a2;
-pmem[ 541] = 16'h0100;
-pmem[ 542] = 16'h403c;
-pmem[ 543] = 16'h0003;
-pmem[ 544] = 16'h430d;
-pmem[ 545] = 16'h431a;
-pmem[ 546] = 16'h4037;
-pmem[ 547] = 16'h003f;
-pmem[ 548] = 16'h4d0f;
-pmem[ 549] = 16'hf03f;
-pmem[ 550] = 16'h000f;
-pmem[ 551] = 16'h4a0e;
-pmem[ 552] = 16'h930f;
-pmem[ 553] = 16'h2403;
-pmem[ 554] = 16'h5e0e;
-pmem[ 555] = 16'h831f;
-pmem[ 556] = 16'h23fd;
-pmem[ 557] = 16'h4d0f;
-pmem[ 558] = 16'hc312;
-pmem[ 559] = 16'h100f;
-pmem[ 560] = 16'h110f;
-pmem[ 561] = 16'h110f;
-pmem[ 562] = 16'hf03f;
-pmem[ 563] = 16'h7ffe;
-pmem[ 564] = 16'hff1e;
-pmem[ 565] = 16'h0200;
-pmem[ 566] = 16'h2021;
-pmem[ 567] = 16'h4c82;
-pmem[ 568] = 16'h0100;
-pmem[ 569] = 16'h4c0b;
-pmem[ 570] = 16'h5b0b;
-pmem[ 571] = 16'h4319;
-pmem[ 572] = 16'hb31b;
-pmem[ 573] = 16'h2418;
-pmem[ 574] = 16'h4b0e;
-pmem[ 575] = 16'h503e;
-pmem[ 576] = 16'hfffd;
-pmem[ 577] = 16'hc312;
-pmem[ 578] = 16'h100e;
-pmem[ 579] = 16'h9e07;
-pmem[ 580] = 16'h2813;
-pmem[ 581] = 16'h4e0f;
-pmem[ 582] = 16'hc312;
-pmem[ 583] = 16'h100f;
-pmem[ 584] = 16'h110f;
-pmem[ 585] = 16'h110f;
-pmem[ 586] = 16'hf03f;
-pmem[ 587] = 16'h3ffe;
-pmem[ 588] = 16'hf03e;
-pmem[ 589] = 16'h000f;
-pmem[ 590] = 16'h4908;
-pmem[ 591] = 16'h930e;
-pmem[ 592] = 16'h2403;
-pmem[ 593] = 16'h5808;
-pmem[ 594] = 16'h831e;
-pmem[ 595] = 16'h23fd;
-pmem[ 596] = 16'hd88f;
-pmem[ 597] = 16'h0200;
-pmem[ 598] = 16'h5c0b;
-pmem[ 599] = 16'h3fe4;
-pmem[ 600] = 16'h531d;
-pmem[ 601] = 16'h532c;
-pmem[ 602] = 16'h903d;
-pmem[ 603] = 16'h0040;
-pmem[ 604] = 16'h23c7;
-pmem[ 605] = 16'h4382;
-pmem[ 606] = 16'h0100;
-pmem[ 607] = 16'h430f;
-pmem[ 608] = 16'hd032;
-pmem[ 609] = 16'h00f0;
-pmem[ 610] = 16'h3ffd;
-pmem[ 611] = 16'h4030;
-pmem[ 612] = 16'hfcca;
-pmem[ 613] = 16'h1300;
-pmem[1008] = 16'hfcc6;
-pmem[1009] = 16'hfcc6;
-pmem[1010] = 16'hfcc6;
-pmem[1011] = 16'hfcc6;
-pmem[1012] = 16'hfcc6;
-pmem[1013] = 16'hfcc6;
-pmem[1014] = 16'hfcc6;
-pmem[1015] = 16'hfcc6;
-pmem[1016] = 16'hfcc6;
-pmem[1017] = 16'hfcc6;
-pmem[1018] = 16'hfcc6;
-pmem[1019] = 16'hfcc6;
-pmem[1020] = 16'hfcc6;
-pmem[1021] = 16'hfcc6;
-pmem[1022] = 16'hfcc6;
-pmem[1023] = 16'hfc00;
- output_idx = 0;
-end
-
-always @(posedge mclk) begin
- dmem_dout <= 'bx;
- pmem_dout <= 'bx;
-
- if (~dmem_cen && &dmem_wen) begin
- addr = 2*dmem_addr + 512;
- $display("+LOG+ %t -- DR @%04x %x%x", $time, addr, dmem_hi[dmem_addr], dmem_lo[dmem_addr]);
- dmem_dout[15:8] <= dmem_hi[dmem_addr];
- dmem_dout[ 7:0] <= dmem_lo[dmem_addr];
- end
-
- if (~pmem_cen) begin
- addr = 2*pmem_addr - 2048;
- $display("+LOG+ %t -- PR @%04x %x", $time, addr, pmem[pmem_addr]);
- pmem_dout <= pmem[pmem_addr];
- end
-
- if (~dmem_cen && ~dmem_wen) begin
- addr = 2*dmem_addr + 512;
- $display("+LOG+ %t -- DW @%04x %x%x", $time, addr, ~dmem_wen[1] ? dmem_din[15:8] : 8'hzz, ~dmem_wen[0] ? dmem_din[ 7:0] : 8'hzz);
- if (~dmem_wen[1])
- dmem_hi[dmem_addr] <= dmem_din[15:8];
- if (~dmem_wen[0])
- dmem_lo[dmem_addr] <= dmem_din[ 7:0];
- end
-end
-
-always @(posedge mclk) begin
- per_dout <= 0;
-
- if (per_en && per_we) begin
- addr = 2*per_addr;
- $display("+LOG+ %t -- PER @%04x %x%x <---", $time, addr, per_we[1] ? per_din[15:8] : 8'hzz, per_we[0] ? per_din[ 7:0] : 8'hzz);
-
- if (addr == 16'h0100) begin
- if (per_din == 0) begin
- -> output_eof;
- end else begin
- output_buf[output_idx] = per_din;
- output_idx = output_idx + 1;
- end
- end
- end
-end
-
-always @(output_eof) begin
- #1001;
- for (i = 0; i < output_idx; i = i + 1) begin
- $display("+OUT+ %t %d", $time, output_buf[i]);
- end
- $finish;
-end
-
-initial begin
- // $dumpfile("bench.vcd");
- // $dumpvars(0, testbench);
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/sim/sieve.v b/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/sim/sieve.v
deleted file mode 100644
index 8c097cb..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/openmsp430/slpp_unit/work/sim/sieve.v
+++ /dev/null
@@ -1,118 +0,0 @@
-pmem[ 512] = 16'h4031;
-pmem[ 513] = 16'h0280;
-pmem[ 514] = 16'h4215;
-pmem[ 515] = 16'h0120;
-pmem[ 516] = 16'hf375;
-pmem[ 517] = 16'hd035;
-pmem[ 518] = 16'h5a08;
-pmem[ 519] = 16'h403f;
-pmem[ 520] = 16'h0000;
-pmem[ 521] = 16'h930f;
-pmem[ 522] = 16'h2407;
-pmem[ 523] = 16'h4582;
-pmem[ 524] = 16'h0120;
-pmem[ 525] = 16'h832f;
-pmem[ 526] = 16'h4f9f;
-pmem[ 527] = 16'hfccc;
-pmem[ 528] = 16'h0200;
-pmem[ 529] = 16'h23f9;
-pmem[ 530] = 16'h403f;
-pmem[ 531] = 16'h0008;
-pmem[ 532] = 16'h930f;
-pmem[ 533] = 16'h2406;
-pmem[ 534] = 16'h4582;
-pmem[ 535] = 16'h0120;
-pmem[ 536] = 16'h831f;
-pmem[ 537] = 16'h43cf;
-pmem[ 538] = 16'h0200;
-pmem[ 539] = 16'h23fa;
-pmem[ 540] = 16'h43a2;
-pmem[ 541] = 16'h0100;
-pmem[ 542] = 16'h403c;
-pmem[ 543] = 16'h0003;
-pmem[ 544] = 16'h430d;
-pmem[ 545] = 16'h431a;
-pmem[ 546] = 16'h4037;
-pmem[ 547] = 16'h003f;
-pmem[ 548] = 16'h4d0f;
-pmem[ 549] = 16'hf03f;
-pmem[ 550] = 16'h000f;
-pmem[ 551] = 16'h4a0e;
-pmem[ 552] = 16'h930f;
-pmem[ 553] = 16'h2403;
-pmem[ 554] = 16'h5e0e;
-pmem[ 555] = 16'h831f;
-pmem[ 556] = 16'h23fd;
-pmem[ 557] = 16'h4d0f;
-pmem[ 558] = 16'hc312;
-pmem[ 559] = 16'h100f;
-pmem[ 560] = 16'h110f;
-pmem[ 561] = 16'h110f;
-pmem[ 562] = 16'hf03f;
-pmem[ 563] = 16'h7ffe;
-pmem[ 564] = 16'hff1e;
-pmem[ 565] = 16'h0200;
-pmem[ 566] = 16'h2021;
-pmem[ 567] = 16'h4c82;
-pmem[ 568] = 16'h0100;
-pmem[ 569] = 16'h4c0b;
-pmem[ 570] = 16'h5b0b;
-pmem[ 571] = 16'h4319;
-pmem[ 572] = 16'hb31b;
-pmem[ 573] = 16'h2418;
-pmem[ 574] = 16'h4b0e;
-pmem[ 575] = 16'h503e;
-pmem[ 576] = 16'hfffd;
-pmem[ 577] = 16'hc312;
-pmem[ 578] = 16'h100e;
-pmem[ 579] = 16'h9e07;
-pmem[ 580] = 16'h2813;
-pmem[ 581] = 16'h4e0f;
-pmem[ 582] = 16'hc312;
-pmem[ 583] = 16'h100f;
-pmem[ 584] = 16'h110f;
-pmem[ 585] = 16'h110f;
-pmem[ 586] = 16'hf03f;
-pmem[ 587] = 16'h3ffe;
-pmem[ 588] = 16'hf03e;
-pmem[ 589] = 16'h000f;
-pmem[ 590] = 16'h4908;
-pmem[ 591] = 16'h930e;
-pmem[ 592] = 16'h2403;
-pmem[ 593] = 16'h5808;
-pmem[ 594] = 16'h831e;
-pmem[ 595] = 16'h23fd;
-pmem[ 596] = 16'hd88f;
-pmem[ 597] = 16'h0200;
-pmem[ 598] = 16'h5c0b;
-pmem[ 599] = 16'h3fe4;
-pmem[ 600] = 16'h531d;
-pmem[ 601] = 16'h532c;
-pmem[ 602] = 16'h903d;
-pmem[ 603] = 16'h0040;
-pmem[ 604] = 16'h23c7;
-pmem[ 605] = 16'h4382;
-pmem[ 606] = 16'h0100;
-pmem[ 607] = 16'h430f;
-pmem[ 608] = 16'hd032;
-pmem[ 609] = 16'h00f0;
-pmem[ 610] = 16'h3ffd;
-pmem[ 611] = 16'h4030;
-pmem[ 612] = 16'hfcca;
-pmem[ 613] = 16'h1300;
-pmem[1008] = 16'hfcc6;
-pmem[1009] = 16'hfcc6;
-pmem[1010] = 16'hfcc6;
-pmem[1011] = 16'hfcc6;
-pmem[1012] = 16'hfcc6;
-pmem[1013] = 16'hfcc6;
-pmem[1014] = 16'hfcc6;
-pmem[1015] = 16'hfcc6;
-pmem[1016] = 16'hfcc6;
-pmem[1017] = 16'hfcc6;
-pmem[1018] = 16'hfcc6;
-pmem[1019] = 16'hfcc6;
-pmem[1020] = 16'hfcc6;
-pmem[1021] = 16'hfcc6;
-pmem[1022] = 16'hfcc6;
-pmem[1023] = 16'hfc00;
diff --git a/SVIncCompil/Testcases/YosysBigSim/reed_solomon_decoder/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/reed_solomon_decoder/slpp_unit/surelog.log
deleted file mode 100644
index 4120d3e..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/reed_solomon_decoder/slpp_unit/surelog.log
+++ /dev/null
@@ -1,115 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:43:09
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/BM_lamda.v rtl/DP_RAM.v rtl/GF_matrix_ascending_binary.v rtl/GF_matrix_dec.v rtl/GF_mult_add_syndromes.v rtl/Omega_Phy.v rtl/RS_dec.v rtl/error_correction.v rtl/input_syndromes.v rtl/lamda_roots.v rtl/out_stage.v rtl/transport_in2out.v sim/RS_dec_tb.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[ERROR:PP0125] Cannot read the file's content "rtl/BM_lamda.v". Only UTF-8 is supported.
-
-[WARNI:PA0205] rtl/GF_matrix_ascending_binary.v:20 No timescale set for "GF_matrix_ascending_binary".
-
-[WARNI:PA0205] rtl/GF_matrix_dec.v:21 No timescale set for "GF_matrix_dec".
-
-[WARNI:PA0205] rtl/DP_RAM.v:18 No timescale set for "DP_RAM".
-
-[WARNI:PA0205] rtl/GF_mult_add_syndromes.v:28 No timescale set for "GF_mult_add_syndromes".
-
-[WARNI:PA0205] rtl/input_syndromes.v:24 No timescale set for "input_syndromes".
-
-[WARNI:PA0205] rtl/RS_dec.v:21 No timescale set for "RS_dec".
-
-[WARNI:PA0205] rtl/Omega_Phy.v:21 No timescale set for "Omega_Phy".
-
-[WARNI:PA0205] rtl/transport_in2out.v:22 No timescale set for "transport_in2out".
-
-[WARNI:PA0205] rtl/error_correction.v:20 No timescale set for "error_correction".
-
-[WARNI:PA0205] rtl/lamda_roots.v:21 No timescale set for "lamda_roots".
-
-[WARNI:PA0205] rtl/out_stage.v:21 No timescale set for "out_stage".
-
-[WARNI:PA0205] sim/RS_dec_tb.v:3 No timescale set for "testbench".
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/GF_matrix_ascending_binary.v:20 Compile module "work@GF_matrix_ascending_binary".
-
-[INFO :CP0303] rtl/RS_dec.v:21 Compile module "work@RS_dec".
-
-[INFO :CP0303] rtl/GF_mult_add_syndromes.v:28 Compile module "work@GF_mult_add_syndromes".
-
-[INFO :CP0303] rtl/DP_RAM.v:18 Compile module "work@DP_RAM".
-
-[INFO :CP0303] rtl/GF_matrix_dec.v:21 Compile module "work@GF_matrix_dec".
-
-[INFO :CP0303] rtl/input_syndromes.v:24 Compile module "work@input_syndromes".
-
-[INFO :CP0303] rtl/out_stage.v:21 Compile module "work@out_stage".
-
-[INFO :CP0303] rtl/Omega_Phy.v:21 Compile module "work@Omega_Phy".
-
-[INFO :CP0303] rtl/error_correction.v:20 Compile module "work@error_correction".
-
-[INFO :CP0303] rtl/transport_in2out.v:22 Compile module "work@transport_in2out".
-
-[INFO :CP0303] rtl/lamda_roots.v:21 Compile module "work@lamda_roots".
-
-[INFO :CP0303] sim/RS_dec_tb.v:3 Compile module "work@testbench".
-
-[NOTE :CP0309] rtl/Omega_Phy.v:44 Implicit port type (wire) for "add_pow2",
-there are 20 more instances of this message.
-
-[NOTE :CP0309] rtl/lamda_roots.v:30 Implicit port type (wire) for "add_GF_dec1",
-there are 8 more instances of this message.
-
-[NOTE :CP0309] rtl/RS_dec.v:29 Implicit port type (wire) for "Out_byte",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/error_correction.v:44 Implicit port type (wire) for "add_pow2",
-there are 8 more instances of this message.
-
-[NOTE :CP0309] rtl/input_syndromes.v:38 Implicit port type (wire) for "s1",
-there are 15 more instances of this message.
-
-[NOTE :CP0309] rtl/transport_in2out.v:32 Implicit port type (wire) for "WE",
-there are 1 more instances of this message.
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] sim/RS_dec_tb.v:3 Top level module "work@testbench".
-
-[WARNI:EL0500] rtl/RS_dec.v:106 Cannot find a module definition for "work@RS_dec::BM_lamda".
-
-[NOTE :EL0508] Nb Top level modules: 1.
-
-[NOTE :EL0509] Max instance depth: 5.
-
-[NOTE :EL0510] Nb instances: 26.
-
-[NOTE :EL0511] Nb leaf instances: 1.
-
-[WARNI:EL0512] Nb undefined modules: 1.
-
-[WARNI:EL0513] Nb undefined instances: 1.
-
-[ FATAL] : 0
-[ ERROR] : 1
-[WARNING] : 15
-[ NOTE] : 11
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/surelog.log
deleted file mode 100644
index 1301dc8..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/surelog.log
+++ /dev/null
@@ -1,52 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:37:19
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/softusb_navre.v sim/bench.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[WARNI:PA0205] sim/bench.v:2 No timescale set for "testbench".
-
-[WARNI:PA0205] rtl/softusb_navre.v:18 No timescale set for "softusb_navre".
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/softusb_navre.v:18 Compile module "work@softusb_navre".
-
-[INFO :CP0303] sim/bench.v:2 Compile module "work@testbench".
-
-[NOTE :CP0309] rtl/softusb_navre.v:26 Implicit port type (wire) for "pmem_a",
-there are 2 more instances of this message.
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] sim/bench.v:2 Top level module "work@testbench".
-
-[NOTE :EL0508] Nb Top level modules: 1.
-
-[NOTE :EL0509] Max instance depth: 2.
-
-[NOTE :EL0510] Nb instances: 2.
-
-[NOTE :EL0511] Nb leaf instances: 0.
-
-[ FATAL] : 0
-[ ERROR] : 0
-[WARNING] : 2
-[ NOTE] : 6
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/work/rtl/softusb_navre.v b/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/work/rtl/softusb_navre.v
deleted file mode 100644
index 1fc9db0..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/work/rtl/softusb_navre.v
+++ /dev/null
@@ -1,974 +0,0 @@
-/*
- * Milkymist SoC
- * Copyright (C) 2007, 2008, 2009, 2010 Sebastien Bourdeauducq
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-module softusb_navre #(
- parameter pmem_width = 11, /* < in 16-bit instructions */
- parameter dmem_width = 13 /* < in bytes */
-) (
- input clk,
- input rst,
-
- output reg pmem_ce,
- output [pmem_width-1:0] pmem_a,
- input [15:0] pmem_d,
-
- output reg dmem_we,
- output reg [dmem_width-1:0] dmem_a,
- input [7:0] dmem_di,
- output reg [7:0] dmem_do,
-
- output reg io_re,
- output reg io_we,
- output [5:0] io_a,
- output [7:0] io_do,
- input [7:0] io_di,
-
- input [7:0] irq,
- output reg [7:0] irq_ack,
-
- output reg [pmem_width-1:0] dbg_pc
-);
-
-/* Register file */
-reg [pmem_width-1:0] PC;
-reg [7:0] GPR[0:23];
-reg [15:0] U; /* < R24-R25 */
-reg [15:0] pX; /* < R26-R27 */
-reg [15:0] pY; /* < R28-R29 */
-reg [15:0] pZ; /* < R30-R31 */
-reg I, T, H, S, V, N, Z, C;
-
-/* Stack */
-reg [7:0] io_sp;
-reg [15:0] SP;
-reg push;
-reg pop;
-always @(posedge clk) begin
- if(rst) begin
- io_sp <= 8'd0;
- SP <= 16'd0;
- end else begin
- io_sp <= io_a[0] ? SP[7:0] : SP[15:8];
- if((io_a == 6'b111101) | (io_a == 6'b111110)) begin
- if(io_we) begin
- if(io_a[0])
- SP[7:0] <= io_do;
- else
- SP[15:8] <= io_do;
- end
- end
- if(push)
- SP <= SP - 16'd1;
- if(pop)
- SP <= SP + 16'd1;
- end
-end
-
-/* I/O mapped registers */
-
-localparam IO_SEL_EXT = 2'd0;
-localparam IO_SEL_STACK = 2'd1;
-localparam IO_SEL_SREG = 2'd2;
-
-reg [1:0] io_sel;
-always @(posedge clk) begin
- if(rst)
- io_sel <= IO_SEL_EXT;
- else begin
- case(io_a)
- 6'b111101,
- 6'b111110: io_sel <= IO_SEL_STACK;
- 6'b111111: io_sel <= IO_SEL_SREG;
- default: io_sel <= IO_SEL_EXT;
- endcase
- end
-end
-
-/* Register operations */
-wire immediate = (pmem_d[14]
- | (pmem_d[15:12] == 4'b0011)) /* CPI */
- & (pmem_d[15:10] != 6'b111111) /* SBRC - SBRS */
- & (pmem_d[15:10] != 6'b111110); /* BST - BLD */
-reg lpm_en;
-wire [4:0] Rd = lpm_en ? 5'd0 : {immediate | pmem_d[8], pmem_d[7:4]};
-wire [4:0] Rr = {pmem_d[9], pmem_d[3:0]};
-wire [7:0] K = {pmem_d[11:8], pmem_d[3:0]};
-wire [2:0] b = pmem_d[2:0];
-wire [11:0] Kl = pmem_d[11:0];
-wire [6:0] Ks = pmem_d[9:3];
-wire [1:0] Rd16 = pmem_d[5:4];
-wire [5:0] K16 = {pmem_d[7:6], pmem_d[3:0]};
-wire [5:0] q = {pmem_d[13], pmem_d[11:10], pmem_d[2:0]};
-
-wire [7:0] GPR_Rd8 = GPR[Rd];
-wire [7:0] GPR_Rr8 = GPR[Rr];
-reg [7:0] GPR_Rd;
-always @(*) begin
- case(Rd)
- default: GPR_Rd = GPR_Rd8;
- 5'd24: GPR_Rd = U[7:0];
- 5'd25: GPR_Rd = U[15:8];
- 5'd26: GPR_Rd = pX[7:0];
- 5'd27: GPR_Rd = pX[15:8];
- 5'd28: GPR_Rd = pY[7:0];
- 5'd29: GPR_Rd = pY[15:8];
- 5'd30: GPR_Rd = pZ[7:0];
- 5'd31: GPR_Rd = pZ[15:8];
- endcase
-end
-reg [7:0] GPR_Rr;
-always @(*) begin
- case(Rr)
- default: GPR_Rr = GPR_Rr8;
- 5'd24: GPR_Rr = U[7:0];
- 5'd25: GPR_Rr = U[15:8];
- 5'd26: GPR_Rr = pX[7:0];
- 5'd27: GPR_Rr = pX[15:8];
- 5'd28: GPR_Rr = pY[7:0];
- 5'd29: GPR_Rr = pY[15:8];
- 5'd30: GPR_Rr = pZ[7:0];
- 5'd31: GPR_Rr = pZ[15:8];
- endcase
-end
-wire GPR_Rd_b = GPR_Rd[b];
-
-reg [15:0] GPR_Rd16;
-always @(*) begin
- case(Rd16)
- 2'd0: GPR_Rd16 = U;
- 2'd1: GPR_Rd16 = pX;
- 2'd2: GPR_Rd16 = pY;
- 2'd3: GPR_Rd16 = pZ;
- endcase
-end
-
-/* Memorize values to support 16-bit instructions */
-reg regmem_ce;
-
-reg [4:0] Rd_r;
-reg [7:0] GPR_Rd_r;
-always @(posedge clk) begin
- if(regmem_ce)
- Rd_r <= Rd; /* < control with regmem_ce */
- GPR_Rd_r <= GPR_Rd; /* < always loaded */
-end
-
-/* PC */
-
-reg [3:0] pc_sel;
-
-localparam PC_SEL_NOP = 4'd0;
-localparam PC_SEL_INC = 4'd1;
-localparam PC_SEL_KL = 4'd2;
-localparam PC_SEL_KS = 4'd3;
-localparam PC_SEL_DMEML = 4'd4;
-localparam PC_SEL_DMEMH = 4'd6;
-localparam PC_SEL_DEC = 4'd7;
-localparam PC_SEL_Z = 4'd8;
-localparam PC_SEL_EX = 4'd9;
-
-/* Exceptions */
-
-reg [7:0] next_irq_ack;
-always @(*) begin
- next_irq_ack = 8'b0;
- casex(irq)
- 8'bxxxx_xxx1: next_irq_ack = 8'b0000_0001;
- 8'bxxxx_xx10: next_irq_ack = 8'b0000_0010;
- 8'bxxxx_x100: next_irq_ack = 8'b0000_0100;
- 8'bxxxx_1000: next_irq_ack = 8'b0000_1000;
- 8'bxxx1_0000: next_irq_ack = 8'b0001_0000;
- 8'bxx10_0000: next_irq_ack = 8'b0010_0000;
- 8'bx100_0000: next_irq_ack = 8'b0100_0000;
- 8'b1000_0000: next_irq_ack = 8'b1000_0000;
- endcase
-end
-
-reg irq_ack_en;
-always @(posedge clk) begin
- if(rst)
- irq_ack <= 8'b0;
- else begin
- irq_ack <= 1'b0;
- if(irq_ack_en)
- irq_ack <= next_irq_ack;
- end
-end
-
-/* Priority encoder */
-
-reg [3:0] PC_ex;
-always @(*) begin
- PC_ex = 4'b0;
- casex(irq)
- 8'bxxxx_xxx1: PC_ex = 4'h0;
- 8'bxxxx_xx10: PC_ex = 4'h1;
- 8'bxxxx_x100: PC_ex = 4'h2;
- 8'bxxxx_1000: PC_ex = 4'h3;
- 8'bxxx1_0000: PC_ex = 4'h4;
- 8'bxx10_0000: PC_ex = 4'h5;
- 8'bx100_0000: PC_ex = 4'h6;
- 8'b1000_0000: PC_ex = 4'h7;
- endcase
-end
-
-/* AVR cores always execute at least one instruction after an IRET.
- * Therefore, the I bit is only valid one clock after it has been set. */
-
-reg I_r;
-always @(posedge clk) begin
- if(rst)
- I_r <= 1'b0;
- else
- I_r <= I;
-end
-wire irq_asserted = |irq;
-wire irq_request = I & I_r & irq_asserted;
-
-always @(posedge clk) begin
- if(rst) begin
- PC <= 0;
- end else begin
- case(pc_sel)
- PC_SEL_NOP:;
- PC_SEL_INC: PC <= PC + 1;
- // !!! WARNING !!! replace with PC <= PC + {{pmem_width-12{Kl[11]}}, Kl}; if pmem_width>12
- PC_SEL_KL: PC <= PC + Kl;
- PC_SEL_KS: PC <= PC + {{pmem_width-7{Ks[6]}}, Ks};
- PC_SEL_DMEML: PC[7:0] <= dmem_di;
- PC_SEL_DMEMH: PC[pmem_width-1:8] <= dmem_di;
- PC_SEL_DEC: PC <= PC - 1;
- PC_SEL_Z: PC <= pZ - 1;
- PC_SEL_EX: PC <= {{pmem_width-4{1'b0}}, PC_ex};
- endcase
- end
- dbg_pc <= PC;
-end
-reg pmem_selz;
-assign pmem_a = rst ?
- 0
- : (pmem_selz ? pZ[15:1] : PC + 1);
-
-/* Load/store operations */
-reg [3:0] dmem_sel;
-
-localparam DMEM_SEL_UNDEFINED = 3'bxxx;
-localparam DMEM_SEL_X = 4'd0;
-localparam DMEM_SEL_XPLUS = 4'd1;
-localparam DMEM_SEL_XMINUS = 4'd2;
-localparam DMEM_SEL_YPLUS = 4'd3;
-localparam DMEM_SEL_YMINUS = 4'd4;
-localparam DMEM_SEL_YQ = 4'd5;
-localparam DMEM_SEL_ZPLUS = 4'd6;
-localparam DMEM_SEL_ZMINUS = 4'd7;
-localparam DMEM_SEL_ZQ = 4'd8;
-localparam DMEM_SEL_SP_R = 4'd9;
-localparam DMEM_SEL_SP_PCL = 4'd10;
-localparam DMEM_SEL_SP_PCH = 4'd11;
-localparam DMEM_SEL_PMEM = 4'd12;
-
-/* ALU */
-
-reg normal_en;
-reg lds_writeback;
-
-wire [4:0] write_dest = lds_writeback ? Rd_r : Rd;
-
-integer i_rst_regf;
-reg [7:0] R;
-reg writeback;
-reg update_svnz;
-reg change_z;
-reg [15:0] R16;
-reg mode16;
-reg _N;
-reg _V;
-reg _C;
-reg I_clr;
-reg I_set;
-always @(posedge clk) begin
- R = 8'hxx;
- writeback = 1'b0;
- update_svnz = 1'b0;
- change_z = 1'b1;
- R16 = 16'hxxxx;
- mode16 = 1'b0;
- if(rst) begin
- /*
- * Not resetting the register file enables the use of more efficient
- * distributed block RAM.
- */
- for(i_rst_regf=0;i_rst_regf<24;i_rst_regf=i_rst_regf+1)
- GPR[i_rst_regf] <= 8'd0;
- U <= 16'd0;
- pX <= 16'd0;
- pY <= 16'd0;
- pZ <= 16'd0;
- I <= 1'b0;
- T <= 1'b0;
- H <= 1'b0;
- S <= 1'b0;
- V <= 1'b0;
- N <= 1'b0;
- Z <= 1'b0;
- C <= 1'b0;
- _V = 1'b0;
- _N = 1'b0;
- _C = 1'b0;
- end else begin
- if(I_set)
- I <= 1'b1;
- if(normal_en) begin
- writeback = 1'b1;
- update_svnz = 1'b1;
- casex(pmem_d)
- 16'b000x_11xx_xxxx_xxxx: begin
- /* ADD - ADC */
- {_C, R} = GPR_Rd + GPR_Rr + (pmem_d[12] & C);
- C <= _C;
- H <= (GPR_Rd[3] & GPR_Rr[3])|(GPR_Rr[3] & ~R[3])|(~R[3] & GPR_Rd[3]);
- _V = (GPR_Rd[7] & GPR_Rr[7] & ~R[7])|(~GPR_Rd[7] & ~GPR_Rr[7] & R[7]);
- end
- 16'b000x_10xx_xxxx_xxxx, /* subtract */
- 16'b000x_01xx_xxxx_xxxx: /* compare */ begin
- /* SUB - SBC / CP - CPC */
- {_C, R} = GPR_Rd - GPR_Rr - (~pmem_d[12] & C);
- C <= _C;
- H <= (~GPR_Rd[3] & GPR_Rr[3])|(GPR_Rr[3] & R[3])|(R[3] & ~GPR_Rd[3]);
- _V = (GPR_Rd[7] & ~GPR_Rr[7] & ~R[7])|(~GPR_Rd[7] & GPR_Rr[7] & R[7]);
- if(~pmem_d[12])
- change_z = 1'b0;
- writeback = pmem_d[11];
- end
- 16'b010x_xxxx_xxxx_xxxx, /* subtract */
- 16'b0011_xxxx_xxxx_xxxx: /* compare */ begin
- /* SUBI - SBCI / CPI */
- {_C, R} = GPR_Rd - K - (~pmem_d[12] & C);
- C <= _C;
- H <= (~GPR_Rd[3] & K[3])|(K[3] & R[3])|(R[3] & ~GPR_Rd[3]);
- _V = (GPR_Rd[7] & ~K[7] & ~R[7])|(~GPR_Rd[7] & K[7] & R[7]);
- if(~pmem_d[12])
- change_z = 1'b0;
- writeback = pmem_d[14];
- end
- 16'b0010_00xx_xxxx_xxxx: begin
- /* AND */
- R = GPR_Rd & GPR_Rr;
- _V = 1'b0;
- end
- 16'b0111_xxxx_xxxx_xxxx: begin
- /* ANDI */
- R = GPR_Rd & K;
- _V = 1'b0;
- end
- 16'b0010_10xx_xxxx_xxxx: begin
- /* OR */
- R = GPR_Rd | GPR_Rr;
- _V = 1'b0;
- end
- 16'b0110_xxxx_xxxx_xxxx: begin
- /* ORI */
- R = GPR_Rd | K;
- _V = 1'b0;
- end
- 16'b0010_01xx_xxxx_xxxx: begin
- /* EOR */
- R = GPR_Rd ^ GPR_Rr;
- _V = 1'b0;
- end
- 16'b1001_010x_xxxx_0000: begin
- /* COM */
- R = ~GPR_Rd;
- _V = 1'b0;
- C <= 1'b1;
- end
- 16'b1001_010x_xxxx_0001: begin
- /* NEG */
- {_C, R} = 8'h00 - GPR_Rd;
- C <= _C;
- H <= R[3] | GPR_Rd[3];
- _V = R == 8'h80;
- end
- 16'b1001_010x_xxxx_0011: begin
- /* INC */
- R = GPR_Rd + 8'd1;
- _V = R == 8'h80;
- end
- 16'b1001_010x_xxxx_1010: begin
- /* DEC */
- R = GPR_Rd - 8'd1;
- _V = R == 8'h7f;
- end
- 16'b1001_010x_xxxx_011x: begin
- /* LSR - ROR */
- R = {pmem_d[0] & C, GPR_Rd[7:1]};
- C <= GPR_Rd[0];
- _V = R[7] ^ GPR_Rd[0];
- end
- 16'b1001_010x_xxxx_0101: begin
- /* ASR */
- R = {GPR_Rd[7], GPR_Rd[7:1]};
- C <= GPR_Rd[0];
- _V = R[7] ^ GPR_Rd[0];
- end
- 16'b1001_010x_xxxx_0010: begin
- /* SWAP */
- R = {GPR_Rd[3:0], GPR_Rd[7:4]};
- update_svnz = 1'b0;
- end
- 16'b1001_010x_xxxx_1000: begin
- /* BSET - BCLR */
- case(pmem_d[7:4])
- 4'b0000: C <= 1'b1;
- 4'b0001: Z <= 1'b1;
- 4'b0010: N <= 1'b1;
- 4'b0011: V <= 1'b1;
- 4'b0100: S <= 1'b1;
- 4'b0101: H <= 1'b1;
- 4'b0110: T <= 1'b1;
- 4'b0111: I <= 1'b1;
- 4'b1000: C <= 1'b0;
- 4'b1001: Z <= 1'b0;
- 4'b1010: N <= 1'b0;
- 4'b1011: V <= 1'b0;
- 4'b1100: S <= 1'b0;
- 4'b1101: H <= 1'b0;
- 4'b1110: T <= 1'b0;
- 4'b1111: I <= 1'b0;
- endcase
- update_svnz = 1'b0;
- writeback = 1'b0;
- end
- 16'b1001_011x_xxxx_xxxx: begin
- mode16 = 1'b1;
- if(pmem_d[8]) begin
- /* SBIW */
- {_C, R16} = GPR_Rd16 - K16;
- C <= _C;
- _V = GPR_Rd16[15] & ~R16[15];
- end else begin
- /* ADIW */
- {_C, R16} = GPR_Rd16 + K16;
- C <= _C;
- _V = ~GPR_Rd16[15] & R16[15];
- end
- end
- /* SBR and CBR are replaced with ORI and ANDI */
- /* TST is replaced with AND */
- /* CLR and SER are replaced with EOR and LDI */
- 16'b0010_11xx_xxxx_xxxx: begin
- /* MOV */
- R = GPR_Rr;
- update_svnz = 1'b0;
- end
- 16'b1110_xxxx_xxxx_xxxx: begin
- /* LDI */
- R = K;
- update_svnz = 1'b0;
- end
- /* LSL is replaced with ADD */
- /* ROL is replaced with ADC */
- 16'b1111_10xx_xxxx_0xxx: begin
- if(pmem_d[9]) begin
- /* BST */
- T <= GPR_Rd_b;
- writeback = 1'b0;
- end else begin
- /* BLD */
- case(b)
- 3'd0: R = {GPR_Rd[7:1], T};
- 3'd1: R = {GPR_Rd[7:2], T, GPR_Rd[0]};
- 3'd2: R = {GPR_Rd[7:3], T, GPR_Rd[1:0]};
- 3'd3: R = {GPR_Rd[7:4], T, GPR_Rd[2:0]};
- 3'd4: R = {GPR_Rd[7:5], T, GPR_Rd[3:0]};
- 3'd5: R = {GPR_Rd[7:6], T, GPR_Rd[4:0]};
- 3'd6: R = {GPR_Rd[7], T, GPR_Rd[5:0]};
- 3'd7: R = {T, GPR_Rd[6:0]};
- endcase
- end
- update_svnz = 1'b0;
- end
- /* SEC, CLC, SEN, CLN, SEZ, CLZ, SEI, CLI, SES, CLS, SEV, CLV, SET, CLT, SEH, CLH
- * are replaced with BSET and BCLR */
- 16'b0000_0000_0000_0000: begin
- /* NOP */
- update_svnz = 1'b0;
- writeback = 1'b0;
- end
- /* SLEEP is not implemented */
- /* WDR is not implemented */
- 16'b1001_00xx_xxxx_1111, /* PUSH/POP */
- 16'b1001_00xx_xxxx_1100, /* X */
- 16'b1001_00xx_xxxx_1101, /* X+ */
- 16'b1001_00xx_xxxx_1110, /* -X */
- 16'b1001_00xx_xxxx_1001, /* Y+ */
- 16'b1001_00xx_xxxx_1010, /* -Y */
- 16'b10x0_xxxx_xxxx_1xxx, /* Y+q */
- 16'b1001_00xx_xxxx_0001, /* Z+ */
- 16'b1001_00xx_xxxx_0010, /* -Z */
- 16'b10x0_xxxx_xxxx_0xxx: /* Z+q */
- begin
- /* LD - POP (run from state WRITEBACK) */
- R = dmem_di;
- update_svnz = 1'b0;
- end
- 16'b1011_0xxx_xxxx_xxxx: begin
- /* IN (run from state WRITEBACK) */
- case(io_sel)
- IO_SEL_EXT: R = io_di;
- IO_SEL_STACK: R = io_sp;
- IO_SEL_SREG: R = {I, T, H, S, V, N, Z, C};
- default: R = 8'hxx;
- endcase
- update_svnz = 1'b0;
- end
- endcase
- end /* if(normal_en) */
- if(lds_writeback) begin
- R = dmem_di;
- writeback = 1'b1;
- end
- if(lpm_en) begin
- R = pZ[0] ? pmem_d[15:8] : pmem_d[7:0];
- writeback = 1'b1;
- end
- if(update_svnz) begin
- _N = mode16 ? R16[15] : R[7];
- S <= _N ^ _V;
- V <= _V;
- N <= _N;
- Z <= mode16 ? R16 == 16'h0000 : ((R == 8'h00) & (change_z|Z));
- end
- if(io_we & (io_a == 6'b111111))
- {I, T, H, S, V, N, Z, C} <= io_do[7:0];
- if(I_clr)
- I <= 1'b0;
- if(writeback) begin
- if(mode16) begin
- // $display("REG WRITE(16): %d < %d", Rd16, R16);
- case(Rd16)
- 2'd0: U <= R16;
- 2'd1: pX <= R16;
- 2'd2: pY <= R16;
- 2'd3: pZ <= R16;
- endcase
- end else begin
- // $display("REG WRITE: %d < %d", Rd, R);
- case(write_dest)
- default: GPR[write_dest] <= R;
- 5'd24: U[7:0] <= R;
- 5'd25: U[15:8] <= R;
- 5'd26: pX[7:0] <= R;
- 5'd27: pX[15:8] <= R;
- 5'd28: pY[7:0] <= R;
- 5'd29: pY[15:8] <= R;
- 5'd30: pZ[7:0] <= R;
- 5'd31: pZ[15:8] <= R;
- endcase
- end
- end else begin /* if(writeback) */
- case(dmem_sel)
- DMEM_SEL_XPLUS: pX <= pX + 16'd1;
- DMEM_SEL_XMINUS: pX <= pX - 16'd1;
- DMEM_SEL_YPLUS: pY <= pY + 16'd1;
- DMEM_SEL_YMINUS: pY <= pY - 16'd1;
- DMEM_SEL_ZPLUS: pZ <= pZ + 16'd1;
- DMEM_SEL_ZMINUS: pZ <= pZ - 16'd1;
- default:;
- endcase
- end
- end /* if(rst) ... else */
-end
-
-/* I/O port */
-assign io_a = {pmem_d[10:9], pmem_d[3:0]};
-assign io_do = GPR_Rd;
-
-/* Data memory */
-always @(*) begin
- case(dmem_sel)
- DMEM_SEL_X,
- DMEM_SEL_XPLUS: dmem_a = pX;
- DMEM_SEL_XMINUS: dmem_a = pX - 16'd1;
- DMEM_SEL_YPLUS: dmem_a = pY;
- DMEM_SEL_YMINUS: dmem_a = pY - 16'd1;
- DMEM_SEL_YQ: dmem_a = pY + q;
- DMEM_SEL_ZPLUS: dmem_a = pZ;
- DMEM_SEL_ZMINUS: dmem_a = pZ - 16'd1;
- DMEM_SEL_ZQ: dmem_a = pZ + q;
- DMEM_SEL_SP_R,
- DMEM_SEL_SP_PCL,
- DMEM_SEL_SP_PCH: dmem_a = SP + pop;
- DMEM_SEL_PMEM: dmem_a = pmem_d;
- default: dmem_a = {dmem_width{1'bx}};
- endcase
-end
-
-wire [pmem_width-1:0] PC_inc = PC + 1;
-reg exception;
-always @(*) begin
- case(dmem_sel)
- DMEM_SEL_X,
- DMEM_SEL_XPLUS,
- DMEM_SEL_XMINUS,
- DMEM_SEL_YPLUS,
- DMEM_SEL_YMINUS,
- DMEM_SEL_YQ,
- DMEM_SEL_ZPLUS,
- DMEM_SEL_ZMINUS,
- DMEM_SEL_ZQ,
- DMEM_SEL_SP_R: dmem_do = GPR_Rd;
- DMEM_SEL_SP_PCL: dmem_do = exception ? PC[7:0] : PC_inc[7:0];
- DMEM_SEL_SP_PCH: dmem_do = exception ? PC[pmem_width-1:8] : PC_inc[pmem_width-1:8];
- DMEM_SEL_PMEM: dmem_do = GPR_Rd_r;
- default: dmem_do = 8'hxx;
- endcase
-end
-
-/* Multi-cycle operation sequencer */
-
-wire reg_equal = GPR_Rd == GPR_Rr;
-
-reg sreg_read;
-always @(*) begin
- case(b)
- 3'd0: sreg_read = C;
- 3'd1: sreg_read = Z;
- 3'd2: sreg_read = N;
- 3'd3: sreg_read = V;
- 3'd4: sreg_read = S;
- 3'd5: sreg_read = H;
- 3'd6: sreg_read = T;
- 3'd7: sreg_read = I;
- endcase
-end
-
-reg [4:0] state;
-reg [4:0] next_state;
-
-localparam NORMAL = 5'd0;
-localparam RCALL = 5'd1;
-localparam ICALL = 5'd2;
-localparam STALL = 5'd3;
-localparam RET1 = 5'd4;
-localparam RET2 = 5'd5;
-localparam RET3 = 5'd6;
-localparam LPM = 5'd7;
-localparam STS = 5'd8;
-localparam LDS1 = 5'd9;
-localparam LDS2 = 5'd10;
-localparam SKIP = 5'd11;
-localparam WRITEBACK = 5'd12;
-localparam EXCEPTION = 5'd13;
-localparam RETI1 = 5'd14;
-localparam RETI2 = 5'd15;
-localparam RETI3 = 5'd16;
-localparam RETI4 = 5'd17;
-
-always @(posedge clk) begin
- if(rst)
- state <= NORMAL;
- else
- state <= next_state;
-end
-
-always @(*) begin
- next_state = state;
-
- pmem_ce = rst;
-
- pc_sel = PC_SEL_NOP;
- normal_en = 1'b0;
- lpm_en = 1'b0;
-
- io_re = 1'b0;
- io_we = 1'b0;
-
- dmem_we = 1'b0;
- dmem_sel = DMEM_SEL_UNDEFINED;
-
- push = 1'b0;
- pop = 1'b0;
-
- exception = 1'b0;
- irq_ack_en = 1'b0;
- I_set = 1'b0;
- I_clr = 1'b0;
-
- pmem_selz = 1'b0;
-
- regmem_ce = 1'b1;
- lds_writeback = 1'b0;
-
- case(state)
- NORMAL: begin
- if(irq_request) begin
- dmem_sel = DMEM_SEL_SP_PCL;
- dmem_we = 1'b1;
- exception = 1'b1;
- push = 1'b1;
- irq_ack_en = 1'b1;
- I_clr = 1'b1;
- next_state = EXCEPTION;
- end else begin
- casex(pmem_d)
- 16'b1100_xxxx_xxxx_xxxx: begin
- /* RJMP */
- pc_sel = PC_SEL_KL;
- next_state = STALL;
- end
- 16'b1101_xxxx_xxxx_xxxx: begin
- /* RCALL */
- dmem_sel = DMEM_SEL_SP_PCL;
- dmem_we = 1'b1;
- push = 1'b1;
- next_state = RCALL;
- end
- 16'b0001_00xx_xxxx_xxxx: begin
- /* CPSE */
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- if(reg_equal)
- next_state = SKIP;
- end
- 16'b1111_11xx_xxxx_0xxx: begin
- /* SBRC - SBRS */
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- if(GPR_Rd_b == pmem_d[9])
- next_state = SKIP;
- end
- /* SBIC, SBIS, SBI, CBI are not implemented */
- 16'b1111_0xxx_xxxx_xxxx: begin
- /* BRBS - BRBC */
- pmem_ce = 1'b1;
- if(sreg_read ^ pmem_d[10]) begin
- pc_sel = PC_SEL_KS;
- next_state = STALL;
- end else
- pc_sel = PC_SEL_INC;
- end
- /* BREQ, BRNE, BRCS, BRCC, BRSH, BRLO, BRMI, BRPL, BRGE, BRLT,
- * BRHS, BRHC, BRTS, BRTC, BRVS, BRVC, BRIE, BRID are replaced
- * with BRBS/BRBC */
- 16'b1001_00xx_xxxx_1100, /* X */
- 16'b1001_00xx_xxxx_1101, /* X+ */
- 16'b1001_00xx_xxxx_1110, /* -X */
- 16'b1001_00xx_xxxx_1001, /* Y+ */
- 16'b1001_00xx_xxxx_1010, /* -Y */
- 16'b10x0_xxxx_xxxx_1xxx, /* Y+q */
- 16'b1001_00xx_xxxx_0001, /* Z+ */
- 16'b1001_00xx_xxxx_0010, /* -Z */
- 16'b10x0_xxxx_xxxx_0xxx: /* Z+q */
- begin
- casex({pmem_d[12], pmem_d[3:0]})
- 5'b1_1100: dmem_sel = DMEM_SEL_X;
- 5'b1_1101: dmem_sel = DMEM_SEL_XPLUS;
- 5'b1_1110: dmem_sel = DMEM_SEL_XMINUS;
- 5'b1_1001: dmem_sel = DMEM_SEL_YPLUS;
- 5'b1_1010: dmem_sel = DMEM_SEL_YMINUS;
- 5'b0_1xxx: dmem_sel = DMEM_SEL_YQ;
- 5'b1_0001: dmem_sel = DMEM_SEL_ZPLUS;
- 5'b1_0010: dmem_sel = DMEM_SEL_ZMINUS;
- 5'b0_0xxx: dmem_sel = DMEM_SEL_ZQ;
- endcase
- if(pmem_d[9]) begin
- /* ST */
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- dmem_we = 1'b1;
- end else begin
- /* LD */
- next_state = WRITEBACK;
- end
- end
- 16'b1011_0xxx_xxxx_xxxx: begin
- /* IN */
- io_re = 1'b1;
- next_state = WRITEBACK;
- end
- 16'b1011_1xxx_xxxx_xxxx: begin
- /* OUT */
- io_we = 1'b1;
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- end
- 16'b1001_00xx_xxxx_1111: begin
- if(pmem_d[9]) begin
- /* PUSH */
- push = 1'b1;
- dmem_sel = DMEM_SEL_SP_R;
- dmem_we = 1'b1;
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- end else begin
- /* POP */
- pop = 1'b1;
- dmem_sel = DMEM_SEL_SP_R;
- next_state = WRITEBACK;
- end
- end
- 16'b1001_00xx_xxxx_0000: begin
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- if(pmem_d[9])
- /* STS */
- next_state = STS;
- else
- /* LDS */
- next_state = LDS1;
- end
- 16'b1001_0101_000x_1000: begin
- /* RET / RETI */
- dmem_sel = DMEM_SEL_SP_PCH;
- pop = 1'b1;
- if(pmem_d[4] == 1'b0)
- next_state = RET1;
- else
- next_state = RETI1;
- end
- 16'b1001_0101_1100_1000: begin
- /* LPM */
- pmem_selz = 1'b1;
- pmem_ce = 1'b1;
- next_state = LPM;
- end
- 16'b1001_0100_0000_1001: begin
- /* IJMP */
- pc_sel = PC_SEL_Z;
- next_state = STALL;
- end
- 16'b1001_0101_0000_1001: begin
- /* ICALL */
- dmem_sel = DMEM_SEL_SP_PCL;
- dmem_we = 1'b1;
- push = 1'b1;
- next_state = ICALL;
- end
- default: begin
- pc_sel = PC_SEL_INC;
- normal_en = 1'b1;
- pmem_ce = 1'b1;
- end
- endcase
- end
- end
- RCALL: begin
- dmem_sel = DMEM_SEL_SP_PCH;
- dmem_we = 1'b1;
- push = 1'b1;
- pc_sel = PC_SEL_KL;
- next_state = STALL;
- end
- EXCEPTION: begin
- dmem_sel = DMEM_SEL_SP_PCH;
- dmem_we = 1'b1;
- exception = 1'b1;
- push = 1'b1;
- pc_sel = PC_SEL_EX;
- next_state = STALL;
- end
- ICALL: begin
- dmem_sel = DMEM_SEL_SP_PCH;
- dmem_we = 1'b1;
- push = 1'b1;
- pc_sel = PC_SEL_Z;
- next_state = STALL;
- end
- RET1: begin
- pc_sel = PC_SEL_DMEMH;
- dmem_sel = DMEM_SEL_SP_PCL;
- pop = 1'b1;
- next_state = RET2;
- end
- RET2: begin
- pc_sel = PC_SEL_DMEML;
- next_state = RET3;
- end
- RET3: begin
- pc_sel = PC_SEL_DEC;
- next_state = STALL;
- end
- RETI1: begin
- pc_sel = PC_SEL_DMEMH;
- dmem_sel = DMEM_SEL_SP_PCL;
- pop = 1'b1;
- next_state = RETI2;
- end
- RETI2: begin
- pc_sel = PC_SEL_DMEML;
- next_state = RETI3;
- end
- RETI3: begin
- pc_sel = PC_SEL_DEC;
- next_state = RETI4;
- end
- RETI4: begin
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- I_set = 1'b1;
- next_state = NORMAL;
- end
- LPM: begin
- lpm_en = 1'b1;
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- next_state = NORMAL;
- end
- STS: begin
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- dmem_sel = DMEM_SEL_PMEM;
- dmem_we = 1'b1;
- next_state = NORMAL;
- end
- LDS1: begin
- dmem_sel = DMEM_SEL_PMEM;
- regmem_ce = 1'b0;
- next_state = LDS2;
- end
- LDS2: begin
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- lds_writeback = 1'b1;
- next_state = NORMAL;
- end
- SKIP: begin
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- /* test for STS and LDS */
- if((pmem_d[15:10] == 6'b100100) & (pmem_d[3:0] == 4'h0))
- next_state = STALL; /* 2-word instruction, skip the second word as well */
- else
- next_state = NORMAL; /* 1-word instruction */
- end
- STALL: begin
- pc_sel = PC_SEL_INC;
- pmem_ce = 1'b1;
- next_state = NORMAL;
- end
- WRITEBACK: begin
- pmem_ce = 1'b1;
- pc_sel = PC_SEL_INC;
- normal_en = 1'b1;
- next_state = NORMAL;
- end
- endcase
-end
-
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/work/sim/bench.v b/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/work/sim/bench.v
deleted file mode 100644
index a33a72f..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/softusb_navre/slpp_unit/work/sim/bench.v
+++ /dev/null
@@ -1,258 +0,0 @@
-
-module testbench;
-
-parameter pmem_width = 11;
-parameter dmem_width = 13;
-
-// navre inputs
-reg clk;
-reg rst;
-reg [15:0] pmem_d;
-reg [7:0] dmem_di;
-reg [7:0] io_di;
-reg [7:0] irq;
-
-// navre outputs
-wire pmem_ce;
-wire [pmem_width-1:0] pmem_a;
-wire dmem_we;
-wire [dmem_width-1:0] dmem_a;
-wire [7:0] dmem_do;
-wire io_re;
-wire io_we;
-wire [5:0] io_a;
-wire [7:0] io_do;
-wire [7:0] irq_ack;
-wire [pmem_width-1:0] dbg_pc;
-
-softusb_navre #(
- pmem_width,
- dmem_width
-) UUT (
- clk,
- rst,
-
- pmem_ce,
- pmem_a,
- pmem_d,
-
- dmem_we,
- dmem_a,
- dmem_di,
- dmem_do,
-
- io_re,
- io_we,
- io_a,
- io_do,
- io_di,
-
- irq,
- irq_ack,
- dbg_pc
-);
-
-integer cycles;
-initial begin
- clk <= 1;
- rst <= 1;
- cycles = 0;
- while (cycles < 8) begin
- #50; clk <= ~clk;
- cycles = cycles + 1;
- #50; clk <= ~clk;
- end
- rst <= #20 0;
- forever begin
- #50; clk <= ~clk;
- cycles = cycles + 1;
- #50; clk <= ~clk;
- if (cycles == 10000) begin
- $display("Reached limit of 10000 cpu cycles.");
- $finish;
- end
- end
-end
-
-reg [15:0] addr;
-reg [15:0] pmem [2**pmem_width-1:0];
-reg [ 7:0] dmem [2**dmem_width-1:0];
-
-integer output_idx;
-reg [7:0] output_buf [1023:0];
-event output_eof;
-
-integer i;
-initial begin
- for (i=0; i < 2**pmem_width; i = i+1) begin
- pmem[i] = 0;
- end
- for (i=0; i < 2**dmem_width; i = i+1) begin
- dmem[i] = 0;
- end
- pmem[ 0] = 16'hc00c;
-pmem[ 1] = 16'hc01b;
-pmem[ 2] = 16'hc01a;
-pmem[ 3] = 16'hc019;
-pmem[ 4] = 16'hc018;
-pmem[ 5] = 16'hc017;
-pmem[ 6] = 16'hc016;
-pmem[ 7] = 16'hc015;
-pmem[ 8] = 16'hc014;
-pmem[ 9] = 16'hc013;
-pmem[ 10] = 16'hc012;
-pmem[ 11] = 16'hc011;
-pmem[ 12] = 16'hc010;
-pmem[ 13] = 16'h2411;
-pmem[ 14] = 16'hbe1f;
-pmem[ 15] = 16'he5cf;
-pmem[ 16] = 16'he0d2;
-pmem[ 17] = 16'hbfde;
-pmem[ 18] = 16'hbfcd;
-pmem[ 19] = 16'he010;
-pmem[ 20] = 16'he6a0;
-pmem[ 21] = 16'he0b0;
-pmem[ 22] = 16'hc001;
-pmem[ 23] = 16'h921d;
-pmem[ 24] = 16'h36a3;
-pmem[ 25] = 16'h07b1;
-pmem[ 26] = 16'hf7e1;
-pmem[ 27] = 16'hd028;
-pmem[ 28] = 16'hc059;
-pmem[ 29] = 16'hcfe2;
-pmem[ 30] = 16'h2fe8;
-pmem[ 31] = 16'h95e6;
-pmem[ 32] = 16'h95e6;
-pmem[ 33] = 16'h95e6;
-pmem[ 34] = 16'he0f0;
-pmem[ 35] = 16'h5ae0;
-pmem[ 36] = 16'h4fff;
-pmem[ 37] = 16'h7087;
-pmem[ 38] = 16'he021;
-pmem[ 39] = 16'he030;
-pmem[ 40] = 16'hc001;
-pmem[ 41] = 16'h0f22;
-pmem[ 42] = 16'h958a;
-pmem[ 43] = 16'hf7ea;
-pmem[ 44] = 16'h8180;
-pmem[ 45] = 16'h2b82;
-pmem[ 46] = 16'h8380;
-pmem[ 47] = 16'h9508;
-pmem[ 48] = 16'h2fe8;
-pmem[ 49] = 16'h95e6;
-pmem[ 50] = 16'h95e6;
-pmem[ 51] = 16'h95e6;
-pmem[ 52] = 16'he0f0;
-pmem[ 53] = 16'h5ae0;
-pmem[ 54] = 16'h4fff;
-pmem[ 55] = 16'h8120;
-pmem[ 56] = 16'he030;
-pmem[ 57] = 16'h7087;
-pmem[ 58] = 16'hc002;
-pmem[ 59] = 16'h9535;
-pmem[ 60] = 16'h9527;
-pmem[ 61] = 16'h958a;
-pmem[ 62] = 16'hf7e2;
-pmem[ 63] = 16'h2f82;
-pmem[ 64] = 16'h7081;
-pmem[ 65] = 16'h9508;
-pmem[ 66] = 16'hbd8a;
-pmem[ 67] = 16'h9508;
-pmem[ 68] = 16'h931f;
-pmem[ 69] = 16'h93cf;
-pmem[ 70] = 16'h93df;
-pmem[ 71] = 16'he082;
-pmem[ 72] = 16'hdff9;
-pmem[ 73] = 16'he0c3;
-pmem[ 74] = 16'he0d0;
-pmem[ 75] = 16'h2f8d;
-pmem[ 76] = 16'hdfe3;
-pmem[ 77] = 16'h1181;
-pmem[ 78] = 16'hc01b;
-pmem[ 79] = 16'h2f8c;
-pmem[ 80] = 16'hdff1;
-pmem[ 81] = 16'h2f1c;
-pmem[ 82] = 16'h0f11;
-pmem[ 83] = 16'hff10;
-pmem[ 84] = 16'hc013;
-pmem[ 85] = 16'h2f41;
-pmem[ 86] = 16'he050;
-pmem[ 87] = 16'h2f24;
-pmem[ 88] = 16'h2f35;
-pmem[ 89] = 16'h5023;
-pmem[ 90] = 16'h0931;
-pmem[ 91] = 16'hff37;
-pmem[ 92] = 16'hc004;
-pmem[ 93] = 16'h2f24;
-pmem[ 94] = 16'h2f35;
-pmem[ 95] = 16'h5022;
-pmem[ 96] = 16'h0931;
-pmem[ 97] = 16'h2f82;
-pmem[ 98] = 16'h2f93;
-pmem[ 99] = 16'h9595;
-pmem[ 100] = 16'h9587;
-pmem[ 101] = 16'h3188;
-pmem[ 102] = 16'hf418;
-pmem[ 103] = 16'hdfb6;
-pmem[ 104] = 16'h0f1c;
-pmem[ 105] = 16'hcfe9;
-pmem[ 106] = 16'h5fdf;
-pmem[ 107] = 16'h5fce;
-pmem[ 108] = 16'h31d8;
-pmem[ 109] = 16'hf6e9;
-pmem[ 110] = 16'he080;
-pmem[ 111] = 16'hdfd2;
-pmem[ 112] = 16'he080;
-pmem[ 113] = 16'he090;
-pmem[ 114] = 16'h91df;
-pmem[ 115] = 16'h91cf;
-pmem[ 116] = 16'h911f;
-pmem[ 117] = 16'h9508;
-pmem[ 118] = 16'h94f8;
-pmem[ 119] = 16'hcfff;
- output_idx = 0;
-end
-
-always @(posedge clk) begin
- if (rst) begin
- pmem_d <= 0;
- irq <= 0;
- end else if (pmem_ce) begin
- addr = pmem_a * 2;
- $display("+LOG+ %t PR @%x %x", $time, addr, pmem[pmem_a]);
- pmem_d <= pmem[pmem_a];
- end
- if (dmem_we) begin
- addr = dmem_a;
- $display("+LOG+ %t DW @%x %x", $time, addr, dmem_do);
- dmem[dmem_a] <= dmem_do;
- end
- if (io_we && io_a == 42) begin
- addr = io_a;
- $display("+LOG+ %t IO @%x %x <---", $time, addr, io_do);
- if (io_do == 0) begin
- -> output_eof;
- end else begin
- output_buf[output_idx] = io_do;
- output_idx = output_idx + 1;
- end
- end
- dmem_di <= dmem[dmem_a];
- io_di <= 0;
-end
-
-always @(output_eof) begin
- #1001;
- $display("Got EOF marker on IO port.");
- for (i = 0; i < output_idx; i = i + 1) begin
- $display("+OUT+ %t %d", $time, output_buf[i]);
- end
- $finish;
-end
-
-initial begin
- // $dumpfile("bench.vcd");
- // $dumpvars(0, testbench);
-end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/surelog.log b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/surelog.log
deleted file mode 100644
index 8423876..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/surelog.log
+++ /dev/null
@@ -1,76 +0,0 @@
-********************************************
-* SURELOG System Verilog Compiler/Linter *
-********************************************
-
-Copyright (c) 2017-2019 ACE Cloud,
-Authorized used only.
-
-VERSION: 0.05
-BUILT : Nov 3 2019
-DATE : 2019-11-03.21:44:10
-COMMAND: -writepp -parse -mt max -nopython -fileunit rtl/data.v rtl/debounce.v rtl/front_rom.v rtl/pong_graph.v rtl/text_graph.v rtl/top.v rtl/vga_sync.v sim/bench.v +incdir+./rtl/+./sim/ -nobuiltin -nocache
-
-[INFO :CM0023] Creating log file ./slpp_unit/surelog.log.
-
-[INFO :CM0024] Executing with 4 threads.
-
-[INFO :CM0020] Separate compilation-unit mode is on.
-
-[WARNI:PP0103] sim/bench.v:5 Undefining an unknown macro "WRITE_FRAMES_PPM".
-
-[WARNI:PA0205] rtl/front_rom.v:1 No timescale set for "font_rom".
-
-[WARNI:PA0205] rtl/text_graph.v:1 No timescale set for "text_graph".
-
-[WARNI:PA0205] rtl/vga_sync.v:1 No timescale set for "vga_sync".
-
-[WARNI:PA0205] sim/bench.v:7 No timescale set for "testbench".
-
-[INFO :CP0300] Compilation...
-
-[INFO :CP0303] rtl/debounce.v:3 Compile module "work@debounce".
-
-[INFO :CP0303] sim/bench.v:7 Compile module "work@testbench".
-
-[INFO :CP0303] rtl/front_rom.v:1 Compile module "work@font_rom".
-
-[INFO :CP0303] rtl/pong_graph.v:3 Compile module "work@pong_graph".
-
-[INFO :CP0303] rtl/text_graph.v:1 Compile module "work@text_graph".
-
-[INFO :CP0303] rtl/vga_sync.v:1 Compile module "work@vga_sync".
-
-[INFO :CP0303] rtl/top.v:3 Compile module "work@top".
-
-[NOTE :CP0309] rtl/top.v:7 Implicit port type (wire) for "vsync".
-
-[NOTE :CP0309] rtl/pong_graph.v:9 Implicit port type (wire) for "hit_left",
-there are 2 more instances of this message.
-
-[NOTE :CP0309] rtl/vga_sync.v:4 Implicit port type (wire) for "vsync",
-there are 3 more instances of this message.
-
-[INFO :EL0526] Design Elaboration...
-
-[NOTE :EL0503] sim/bench.v:7 Top level module "work@testbench".
-
-[WARNI:EL0505] rtl/data.v:1 Multiply defined module "work@font_rom",
- rtl/front_rom.v:1 previous definition.
-
-[NOTE :EL0508] Nb Top level modules: 1.
-
-[NOTE :EL0509] Max instance depth: 4.
-
-[NOTE :EL0510] Nb instances: 10.
-
-[NOTE :EL0511] Nb leaf instances: 1.
-
-[ FATAL] : 0
-[ ERROR] : 0
-[WARNING] : 6
-[ NOTE] : 8
-
-********************************************
-* End SURELOG SVerilog Compiler/Linter *
-********************************************
-
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/data.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/data.v
deleted file mode 100644
index a3f3af3..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/data.v
+++ /dev/null
@@ -1,2192 +0,0 @@
-module font_rom
- (
- input wire clk,
- input wire [10:0] addr,
- output reg [7:0] data
- );
- reg [10:0] addr_reg;
-
- always @(posedge clk)
- addr_reg <= addr;
-
- always @*
- case (addr_reg)
- //code x00
- 11'h000: data = 8'b00000000; //
- 11'h001: data = 8'b00000000; //
- 11'h002: data = 8'b00000000; //
- 11'h003: data = 8'b00000000; //
- 11'h004: data = 8'b00000000; //
- 11'h005: data = 8'b00000000; //
- 11'h006: data = 8'b00000000; //
- 11'h007: data = 8'b00000000; //
- 11'h008: data = 8'b00000000; //
- 11'h009: data = 8'b00000000; //
- 11'h00a: data = 8'b00000000; //
- 11'h00b: data = 8'b00000000; //
- 11'h00c: data = 8'b00000000; //
- 11'h00d: data = 8'b00000000; //
- 11'h00e: data = 8'b00000000; //
- 11'h00f: data = 8'b00000000; //
- //code x01
- 11'h010: data = 8'b00000000; //
- 11'h011: data = 8'b00000000; //
- 11'h012: data = 8'b01111110; // ******
- 11'h013: data = 8'b10000001; // * *
- 11'h014: data = 8'b10100101; // * * * *
- 11'h015: data = 8'b10000001; // * *
- 11'h016: data = 8'b10000001; // * *
- 11'h017: data = 8'b10111101; // * **** *
- 11'h018: data = 8'b10011001; // * ** *
- 11'h019: data = 8'b10000001; // * *
- 11'h01a: data = 8'b10000001; // * *
- 11'h01b: data = 8'b01111110; // ******
- 11'h01c: data = 8'b00000000; //
- 11'h01d: data = 8'b00000000; //
- 11'h01e: data = 8'b00000000; //
- 11'h01f: data = 8'b00000000; //
- //code x02
- 11'h020: data = 8'b00000000; //
- 11'h021: data = 8'b00000000; //
- 11'h022: data = 8'b01111110; // ******
- 11'h023: data = 8'b11111111; // ********
- 11'h024: data = 8'b11011011; // ** ** **
- 11'h025: data = 8'b11111111; // ********
- 11'h026: data = 8'b11111111; // ********
- 11'h027: data = 8'b11000011; // ** **
- 11'h028: data = 8'b11100111; // *** ***
- 11'h029: data = 8'b11111111; // ********
- 11'h02a: data = 8'b11111111; // ********
- 11'h02b: data = 8'b01111110; // ******
- 11'h02c: data = 8'b00000000; //
- 11'h02d: data = 8'b00000000; //
- 11'h02e: data = 8'b00000000; //
- 11'h02f: data = 8'b00000000; //
- //code x03
- 11'h030: data = 8'b00000000; //
- 11'h031: data = 8'b00000000; //
- 11'h032: data = 8'b00000000; //
- 11'h033: data = 8'b00000000; //
- 11'h034: data = 8'b01101100; // ** **
- 11'h035: data = 8'b11111110; // *******
- 11'h036: data = 8'b11111110; // *******
- 11'h037: data = 8'b11111110; // *******
- 11'h038: data = 8'b11111110; // *******
- 11'h039: data = 8'b01111100; // *****
- 11'h03a: data = 8'b00111000; // ***
- 11'h03b: data = 8'b00010000; // *
- 11'h03c: data = 8'b00000000; //
- 11'h03d: data = 8'b00000000; //
- 11'h03e: data = 8'b00000000; //
- 11'h03f: data = 8'b00000000; //
- //code x04
- 11'h040: data = 8'b00000000; //
- 11'h041: data = 8'b00000000; //
- 11'h042: data = 8'b00000000; //
- 11'h043: data = 8'b00000000; //
- 11'h044: data = 8'b00010000; // *
- 11'h045: data = 8'b00111000; // ***
- 11'h046: data = 8'b01111100; // *****
- 11'h047: data = 8'b11111110; // *******
- 11'h048: data = 8'b01111100; // *****
- 11'h049: data = 8'b00111000; // ***
- 11'h04a: data = 8'b00010000; // *
- 11'h04b: data = 8'b00000000; //
- 11'h04c: data = 8'b00000000; //
- 11'h04d: data = 8'b00000000; //
- 11'h04e: data = 8'b00000000; //
- 11'h04f: data = 8'b00000000; //
- //code x05
- 11'h050: data = 8'b00000000; //
- 11'h051: data = 8'b00000000; //
- 11'h052: data = 8'b00000000; //
- 11'h053: data = 8'b00011000; // **
- 11'h054: data = 8'b00111100; // ****
- 11'h055: data = 8'b00111100; // ****
- 11'h056: data = 8'b11100111; // *** ***
- 11'h057: data = 8'b11100111; // *** ***
- 11'h058: data = 8'b11100111; // *** ***
- 11'h059: data = 8'b00011000; // **
- 11'h05a: data = 8'b00011000; // **
- 11'h05b: data = 8'b00111100; // ****
- 11'h05c: data = 8'b00000000; //
- 11'h05d: data = 8'b00000000; //
- 11'h05e: data = 8'b00000000; //
- 11'h05f: data = 8'b00000000; //
- //code x06
- 11'h060: data = 8'b00000000; //
- 11'h061: data = 8'b00000000; //
- 11'h062: data = 8'b00000000; //
- 11'h063: data = 8'b00011000; // **
- 11'h064: data = 8'b00111100; // ****
- 11'h065: data = 8'b01111110; // ******
- 11'h066: data = 8'b11111111; // ********
- 11'h067: data = 8'b11111111; // ********
- 11'h068: data = 8'b01111110; // ******
- 11'h069: data = 8'b00011000; // **
- 11'h06a: data = 8'b00011000; // **
- 11'h06b: data = 8'b00111100; // ****
- 11'h06c: data = 8'b00000000; //
- 11'h06d: data = 8'b00000000; //
- 11'h06e: data = 8'b00000000; //
- 11'h06f: data = 8'b00000000; //
- //code x07
- 11'h070: data = 8'b00000000; //
- 11'h071: data = 8'b00000000; //
- 11'h072: data = 8'b00000000; //
- 11'h073: data = 8'b00000000; //
- 11'h074: data = 8'b00000000; //
- 11'h075: data = 8'b00000000; //
- 11'h076: data = 8'b00011000; // **
- 11'h077: data = 8'b00111100; // ****
- 11'h078: data = 8'b00111100; // ****
- 11'h079: data = 8'b00011000; // **
- 11'h07a: data = 8'b00000000; //
- 11'h07b: data = 8'b00000000; //
- 11'h07c: data = 8'b00000000; //
- 11'h07d: data = 8'b00000000; //
- 11'h07e: data = 8'b00000000; //
- 11'h07f: data = 8'b00000000; //
- //code x08
- 11'h080: data = 8'b11111111; // ********
- 11'h081: data = 8'b11111111; // ********
- 11'h082: data = 8'b11111111; // ********
- 11'h083: data = 8'b11111111; // ********
- 11'h084: data = 8'b11111111; // ********
- 11'h085: data = 8'b11111111; // ********
- 11'h086: data = 8'b11100111; // *** ***
- 11'h087: data = 8'b11000011; // ** **
- 11'h088: data = 8'b11000011; // ** **
- 11'h089: data = 8'b11100111; // *** ***
- 11'h08a: data = 8'b11111111; // ********
- 11'h08b: data = 8'b11111111; // ********
- 11'h08c: data = 8'b11111111; // ********
- 11'h08d: data = 8'b11111111; // ********
- 11'h08e: data = 8'b11111111; // ********
- 11'h08f: data = 8'b11111111; // ********
- //code x09
- 11'h090: data = 8'b00000000; //
- 11'h091: data = 8'b00000000; //
- 11'h092: data = 8'b00000000; //
- 11'h093: data = 8'b00000000; //
- 11'h094: data = 8'b00000000; //
- 11'h095: data = 8'b00111100; // ****
- 11'h096: data = 8'b01100110; // ** **
- 11'h097: data = 8'b01000010; // * *
- 11'h098: data = 8'b01000010; // * *
- 11'h099: data = 8'b01100110; // ** **
- 11'h09a: data = 8'b00111100; // ****
- 11'h09b: data = 8'b00000000; //
- 11'h09c: data = 8'b00000000; //
- 11'h09d: data = 8'b00000000; //
- 11'h09e: data = 8'b00000000; //
- 11'h09f: data = 8'b00000000; //
- //code x0a
- 11'h0a0: data = 8'b11111111; // ********
- 11'h0a1: data = 8'b11111111; // ********
- 11'h0a2: data = 8'b11111111; // ********
- 11'h0a3: data = 8'b11111111; // ********
- 11'h0a4: data = 8'b11111111; // ********
- 11'h0a5: data = 8'b11000011; // ** **
- 11'h0a6: data = 8'b10011001; // * ** *
- 11'h0a7: data = 8'b10111101; // * **** *
- 11'h0a8: data = 8'b10111101; // * **** *
- 11'h0a9: data = 8'b10011001; // * ** *
- 11'h0aa: data = 8'b11000011; // ** **
- 11'h0ab: data = 8'b11111111; // ********
- 11'h0ac: data = 8'b11111111; // ********
- 11'h0ad: data = 8'b11111111; // ********
- 11'h0ae: data = 8'b11111111; // ********
- 11'h0af: data = 8'b11111111; // ********
- //code x0b
- 11'h0b0: data = 8'b00000000; //
- 11'h0b1: data = 8'b00000000; //
- 11'h0b2: data = 8'b00011110; // ****
- 11'h0b3: data = 8'b00001110; // ***
- 11'h0b4: data = 8'b00011010; // ** *
- 11'h0b5: data = 8'b00110010; // ** *
- 11'h0b6: data = 8'b01111000; // ****
- 11'h0b7: data = 8'b11001100; // ** **
- 11'h0b8: data = 8'b11001100; // ** **
- 11'h0b9: data = 8'b11001100; // ** **
- 11'h0ba: data = 8'b11001100; // ** **
- 11'h0bb: data = 8'b01111000; // ****
- 11'h0bc: data = 8'b00000000; //
- 11'h0bd: data = 8'b00000000; //
- 11'h0be: data = 8'b00000000; //
- 11'h0bf: data = 8'b00000000; //
- //code x0c
- 11'h0c0: data = 8'b00000000; //
- 11'h0c1: data = 8'b00000000; //
- 11'h0c2: data = 8'b00111100; // ****
- 11'h0c3: data = 8'b01100110; // ** **
- 11'h0c4: data = 8'b01100110; // ** **
- 11'h0c5: data = 8'b01100110; // ** **
- 11'h0c6: data = 8'b01100110; // ** **
- 11'h0c7: data = 8'b00111100; // ****
- 11'h0c8: data = 8'b00011000; // **
- 11'h0c9: data = 8'b01111110; // ******
- 11'h0ca: data = 8'b00011000; // **
- 11'h0cb: data = 8'b00011000; // **
- 11'h0cc: data = 8'b00000000; //
- 11'h0cd: data = 8'b00000000; //
- 11'h0ce: data = 8'b00000000; //
- 11'h0cf: data = 8'b00000000; //
- //code x0d
- 11'h0d0: data = 8'b00000000; //
- 11'h0d1: data = 8'b00000000; //
- 11'h0d2: data = 8'b00111111; // ******
- 11'h0d3: data = 8'b00110011; // ** **
- 11'h0d4: data = 8'b00111111; // ******
- 11'h0d5: data = 8'b00110000; // **
- 11'h0d6: data = 8'b00110000; // **
- 11'h0d7: data = 8'b00110000; // **
- 11'h0d8: data = 8'b00110000; // **
- 11'h0d9: data = 8'b01110000; // ***
- 11'h0da: data = 8'b11110000; // ****
- 11'h0db: data = 8'b11100000; // ***
- 11'h0dc: data = 8'b00000000; //
- 11'h0dd: data = 8'b00000000; //
- 11'h0de: data = 8'b00000000; //
- 11'h0df: data = 8'b00000000; //
- //code x0e
- 11'h0e0: data = 8'b00000000; //
- 11'h0e1: data = 8'b00000000; //
- 11'h0e2: data = 8'b01111111; // *******
- 11'h0e3: data = 8'b01100011; // ** **
- 11'h0e4: data = 8'b01111111; // *******
- 11'h0e5: data = 8'b01100011; // ** **
- 11'h0e6: data = 8'b01100011; // ** **
- 11'h0e7: data = 8'b01100011; // ** **
- 11'h0e8: data = 8'b01100011; // ** **
- 11'h0e9: data = 8'b01100111; // ** ***
- 11'h0ea: data = 8'b11100111; // *** ***
- 11'h0eb: data = 8'b11100110; // *** **
- 11'h0ec: data = 8'b11000000; // **
- 11'h0ed: data = 8'b00000000; //
- 11'h0ee: data = 8'b00000000; //
- 11'h0ef: data = 8'b00000000; //
- //code x0f
- 11'h0f0: data = 8'b00000000; //
- 11'h0f1: data = 8'b00000000; //
- 11'h0f2: data = 8'b00000000; //
- 11'h0f3: data = 8'b00011000; // **
- 11'h0f4: data = 8'b00011000; // **
- 11'h0f5: data = 8'b11011011; // ** ** **
- 11'h0f6: data = 8'b00111100; // ****
- 11'h0f7: data = 8'b11100111; // *** ***
- 11'h0f8: data = 8'b00111100; // ****
- 11'h0f9: data = 8'b11011011; // ** ** **
- 11'h0fa: data = 8'b00011000; // **
- 11'h0fb: data = 8'b00011000; // **
- 11'h0fc: data = 8'b00000000; //
- 11'h0fd: data = 8'b00000000; //
- 11'h0fe: data = 8'b00000000; //
- 11'h0ff: data = 8'b00000000; //
- //code x10
- 11'h100: data = 8'b00000000; //
- 11'h101: data = 8'b10000000; // *
- 11'h102: data = 8'b11000000; // **
- 11'h103: data = 8'b11100000; // ***
- 11'h104: data = 8'b11110000; // ****
- 11'h105: data = 8'b11111000; // *****
- 11'h106: data = 8'b11111110; // *******
- 11'h107: data = 8'b11111000; // *****
- 11'h108: data = 8'b11110000; // ****
- 11'h109: data = 8'b11100000; // ***
- 11'h10a: data = 8'b11000000; // **
- 11'h10b: data = 8'b10000000; // *
- 11'h10c: data = 8'b00000000; //
- 11'h10d: data = 8'b00000000; //
- 11'h10e: data = 8'b00000000; //
- 11'h10f: data = 8'b00000000; //
- //code x11
- 11'h110: data = 8'b00000000; //
- 11'h111: data = 8'b00000010; // *
- 11'h112: data = 8'b00000110; // **
- 11'h113: data = 8'b00001110; // ***
- 11'h114: data = 8'b00011110; // ****
- 11'h115: data = 8'b00111110; // *****
- 11'h116: data = 8'b11111110; // *******
- 11'h117: data = 8'b00111110; // *****
- 11'h118: data = 8'b00011110; // ****
- 11'h119: data = 8'b00001110; // ***
- 11'h11a: data = 8'b00000110; // **
- 11'h11b: data = 8'b00000010; // *
- 11'h11c: data = 8'b00000000; //
- 11'h11d: data = 8'b00000000; //
- 11'h11e: data = 8'b00000000; //
- 11'h11f: data = 8'b00000000; //
- //code x12
- 11'h120: data = 8'b00000000; //
- 11'h121: data = 8'b00000000; //
- 11'h122: data = 8'b00011000; // **
- 11'h123: data = 8'b00111100; // ****
- 11'h124: data = 8'b01111110; // ******
- 11'h125: data = 8'b00011000; // **
- 11'h126: data = 8'b00011000; // **
- 11'h127: data = 8'b00011000; // **
- 11'h128: data = 8'b01111110; // ******
- 11'h129: data = 8'b00111100; // ****
- 11'h12a: data = 8'b00011000; // **
- 11'h12b: data = 8'b00000000; //
- 11'h12c: data = 8'b00000000; //
- 11'h12d: data = 8'b00000000; //
- 11'h12e: data = 8'b00000000; //
- 11'h12f: data = 8'b00000000; //
- //code x13
- 11'h130: data = 8'b00000000; //
- 11'h131: data = 8'b00000000; //
- 11'h132: data = 8'b01100110; // ** **
- 11'h133: data = 8'b01100110; // ** **
- 11'h134: data = 8'b01100110; // ** **
- 11'h135: data = 8'b01100110; // ** **
- 11'h136: data = 8'b01100110; // ** **
- 11'h137: data = 8'b01100110; // ** **
- 11'h138: data = 8'b01100110; // ** **
- 11'h139: data = 8'b00000000; //
- 11'h13a: data = 8'b01100110; // ** **
- 11'h13b: data = 8'b01100110; // ** **
- 11'h13c: data = 8'b00000000; //
- 11'h13d: data = 8'b00000000; //
- 11'h13e: data = 8'b00000000; //
- 11'h13f: data = 8'b00000000; //
- //code x14
- 11'h140: data = 8'b00000000; //
- 11'h141: data = 8'b00000000; //
- 11'h142: data = 8'b01111111; // *******
- 11'h143: data = 8'b11011011; // ** ** **
- 11'h144: data = 8'b11011011; // ** ** **
- 11'h145: data = 8'b11011011; // ** ** **
- 11'h146: data = 8'b01111011; // **** **
- 11'h147: data = 8'b00011011; // ** **
- 11'h148: data = 8'b00011011; // ** **
- 11'h149: data = 8'b00011011; // ** **
- 11'h14a: data = 8'b00011011; // ** **
- 11'h14b: data = 8'b00011011; // ** **
- 11'h14c: data = 8'b00000000; //
- 11'h14d: data = 8'b00000000; //
- 11'h14e: data = 8'b00000000; //
- 11'h14f: data = 8'b00000000; //
- //code x15
- 11'h150: data = 8'b00000000; //
- 11'h151: data = 8'b01111100; // *****
- 11'h152: data = 8'b11000110; // ** **
- 11'h153: data = 8'b01100000; // **
- 11'h154: data = 8'b00111000; // ***
- 11'h155: data = 8'b01101100; // ** **
- 11'h156: data = 8'b11000110; // ** **
- 11'h157: data = 8'b11000110; // ** **
- 11'h158: data = 8'b01101100; // ** **
- 11'h159: data = 8'b00111000; // ***
- 11'h15a: data = 8'b00001100; // **
- 11'h15b: data = 8'b11000110; // ** **
- 11'h15c: data = 8'b01111100; // *****
- 11'h15d: data = 8'b00000000; //
- 11'h15e: data = 8'b00000000; //
- 11'h15f: data = 8'b00000000; //
- //code x16
- 11'h160: data = 8'b00000000; //
- 11'h161: data = 8'b00000000; //
- 11'h162: data = 8'b00000000; //
- 11'h163: data = 8'b00000000; //
- 11'h164: data = 8'b00000000; //
- 11'h165: data = 8'b00000000; //
- 11'h166: data = 8'b00000000; //
- 11'h167: data = 8'b00000000; //
- 11'h168: data = 8'b11111110; // *******
- 11'h169: data = 8'b11111110; // *******
- 11'h16a: data = 8'b11111110; // *******
- 11'h16b: data = 8'b11111110; // *******
- 11'h16c: data = 8'b00000000; //
- 11'h16d: data = 8'b00000000; //
- 11'h16e: data = 8'b00000000; //
- 11'h16f: data = 8'b00000000; //
- //code x17
- 11'h170: data = 8'b00000000; //
- 11'h171: data = 8'b00000000; //
- 11'h172: data = 8'b00011000; // **
- 11'h173: data = 8'b00111100; // ****
- 11'h174: data = 8'b01111110; // ******
- 11'h175: data = 8'b00011000; // **
- 11'h176: data = 8'b00011000; // **
- 11'h177: data = 8'b00011000; // **
- 11'h178: data = 8'b01111110; // ******
- 11'h179: data = 8'b00111100; // ****
- 11'h17a: data = 8'b00011000; // **
- 11'h17b: data = 8'b01111110; // ******
- 11'h17c: data = 8'b00110000; //
- 11'h17d: data = 8'b00000000; //
- 11'h17e: data = 8'b00000000; //
- 11'h17f: data = 8'b00000000; //
- //code x18
- 11'h180: data = 8'b00000000; //
- 11'h181: data = 8'b00000000; //
- 11'h182: data = 8'b00011000; // **
- 11'h183: data = 8'b00111100; // ****
- 11'h184: data = 8'b01111110; // ******
- 11'h185: data = 8'b00011000; // **
- 11'h186: data = 8'b00011000; // **
- 11'h187: data = 8'b00011000; // **
- 11'h188: data = 8'b00011000; // **
- 11'h189: data = 8'b00011000; // **
- 11'h18a: data = 8'b00011000; // **
- 11'h18b: data = 8'b00011000; // **
- 11'h18c: data = 8'b00000000; //
- 11'h18d: data = 8'b00000000; //
- 11'h18e: data = 8'b00000000; //
- 11'h18f: data = 8'b00000000; //
- //code x19
- 11'h190: data = 8'b00000000; //
- 11'h191: data = 8'b00000000; //
- 11'h192: data = 8'b00011000; // **
- 11'h193: data = 8'b00011000; // **
- 11'h194: data = 8'b00011000; // **
- 11'h195: data = 8'b00011000; // **
- 11'h196: data = 8'b00011000; // **
- 11'h197: data = 8'b00011000; // **
- 11'h198: data = 8'b00011000; // **
- 11'h199: data = 8'b01111110; // ******
- 11'h19a: data = 8'b00111100; // ****
- 11'h19b: data = 8'b00011000; // **
- 11'h19c: data = 8'b00000000; //
- 11'h19d: data = 8'b00000000; //
- 11'h19e: data = 8'b00000000; //
- 11'h19f: data = 8'b00000000; //
- //code x1a
- 11'h1a0: data = 8'b00000000; //
- 11'h1a1: data = 8'b00000000; //
- 11'h1a2: data = 8'b00000000; //
- 11'h1a3: data = 8'b00000000; //
- 11'h1a4: data = 8'b00000000; //
- 11'h1a5: data = 8'b00011000; // **
- 11'h1a6: data = 8'b00001100; // **
- 11'h1a7: data = 8'b11111110; // *******
- 11'h1a8: data = 8'b00001100; // **
- 11'h1a9: data = 8'b00011000; // **
- 11'h1aa: data = 8'b00000000; //
- 11'h1ab: data = 8'b00000000; //
- 11'h1ac: data = 8'b00000000; //
- 11'h1ad: data = 8'b00000000; //
- 11'h1ae: data = 8'b00000000; //
- 11'h1af: data = 8'b00000000; //
- //code x1b
- 11'h1b0: data = 8'b00000000; //
- 11'h1b1: data = 8'b00000000; //
- 11'h1b2: data = 8'b00000000; //
- 11'h1b3: data = 8'b00000000; //
- 11'h1b4: data = 8'b00000000; //
- 11'h1b5: data = 8'b00110000; // **
- 11'h1b6: data = 8'b01100000; // **
- 11'h1b7: data = 8'b11111110; // *******
- 11'h1b8: data = 8'b01100000; // **
- 11'h1b9: data = 8'b00110000; // **
- 11'h1ba: data = 8'b00000000; //
- 11'h1bb: data = 8'b00000000; //
- 11'h1bc: data = 8'b00000000; //
- 11'h1bd: data = 8'b00000000; //
- 11'h1be: data = 8'b00000000; //
- 11'h1bf: data = 8'b00000000; //
- //code x1c
- 11'h1c0: data = 8'b00000000; //
- 11'h1c1: data = 8'b00000000; //
- 11'h1c2: data = 8'b00000000; //
- 11'h1c3: data = 8'b00000000; //
- 11'h1c4: data = 8'b00000000; //
- 11'h1c5: data = 8'b00000000; //
- 11'h1c6: data = 8'b11000000; // **
- 11'h1c7: data = 8'b11000000; // **
- 11'h1c8: data = 8'b11000000; // **
- 11'h1c9: data = 8'b11111110; // *******
- 11'h1ca: data = 8'b00000000; //
- 11'h1cb: data = 8'b00000000; //
- 11'h1cc: data = 8'b00000000; //
- 11'h1cd: data = 8'b00000000; //
- 11'h1ce: data = 8'b00000000; //
- 11'h1cf: data = 8'b00000000; //
- //code x1d
- 11'h1d0: data = 8'b00000000; //
- 11'h1d1: data = 8'b00000000; //
- 11'h1d2: data = 8'b00000000; //
- 11'h1d3: data = 8'b00000000; //
- 11'h1d4: data = 8'b00000000; //
- 11'h1d5: data = 8'b00100100; // * *
- 11'h1d6: data = 8'b01100110; // ** **
- 11'h1d7: data = 8'b11111111; // ********
- 11'h1d8: data = 8'b01100110; // ** **
- 11'h1d9: data = 8'b00100100; // * *
- 11'h1da: data = 8'b00000000; //
- 11'h1db: data = 8'b00000000; //
- 11'h1dc: data = 8'b00000000; //
- 11'h1dd: data = 8'b00000000; //
- 11'h1de: data = 8'b00000000; //
- 11'h1df: data = 8'b00000000; //
- //code x1e
- 11'h1e0: data = 8'b00000000; //
- 11'h1e1: data = 8'b00000000; //
- 11'h1e2: data = 8'b00000000; //
- 11'h1e3: data = 8'b00000000; //
- 11'h1e4: data = 8'b00010000; // *
- 11'h1e5: data = 8'b00111000; // ***
- 11'h1e6: data = 8'b00111000; // ***
- 11'h1e7: data = 8'b01111100; // *****
- 11'h1e8: data = 8'b01111100; // *****
- 11'h1e9: data = 8'b11111110; // *******
- 11'h1ea: data = 8'b11111110; // *******
- 11'h1eb: data = 8'b00000000; //
- 11'h1ec: data = 8'b00000000; //
- 11'h1ed: data = 8'b00000000; //
- 11'h1ee: data = 8'b00000000; //
- 11'h1ef: data = 8'b00000000; //
- //code x1f
- 11'h1f0: data = 8'b00000000; //
- 11'h1f1: data = 8'b00000000; //
- 11'h1f2: data = 8'b00000000; //
- 11'h1f3: data = 8'b00000000; //
- 11'h1f4: data = 8'b11111110; // *******
- 11'h1f5: data = 8'b11111110; // *******
- 11'h1f6: data = 8'b01111100; // *****
- 11'h1f7: data = 8'b01111100; // *****
- 11'h1f8: data = 8'b00111000; // ***
- 11'h1f9: data = 8'b00111000; // ***
- 11'h1fa: data = 8'b00010000; // *
- 11'h1fb: data = 8'b00000000; //
- 11'h1fc: data = 8'b00000000; //
- 11'h1fd: data = 8'b00000000; //
- 11'h1fe: data = 8'b00000000; //
- 11'h1ff: data = 8'b00000000; //
- //code x20
- 11'h200: data = 8'b00000000; //
- 11'h201: data = 8'b00000000; //
- 11'h202: data = 8'b00000000; //
- 11'h203: data = 8'b00000000; //
- 11'h204: data = 8'b00000000; //
- 11'h205: data = 8'b00000000; //
- 11'h206: data = 8'b00000000; //
- 11'h207: data = 8'b00000000; //
- 11'h208: data = 8'b00000000; //
- 11'h209: data = 8'b00000000; //
- 11'h20a: data = 8'b00000000; //
- 11'h20b: data = 8'b00000000; //
- 11'h20c: data = 8'b00000000; //
- 11'h20d: data = 8'b00000000; //
- 11'h20e: data = 8'b00000000; //
- 11'h20f: data = 8'b00000000; //
- //code x21
- 11'h210: data = 8'b00000000; //
- 11'h211: data = 8'b00000000; //
- 11'h212: data = 8'b00011000; // **
- 11'h213: data = 8'b00111100; // ****
- 11'h214: data = 8'b00111100; // ****
- 11'h215: data = 8'b00111100; // ****
- 11'h216: data = 8'b00011000; // **
- 11'h217: data = 8'b00011000; // **
- 11'h218: data = 8'b00011000; // **
- 11'h219: data = 8'b00000000; //
- 11'h21a: data = 8'b00011000; // **
- 11'h21b: data = 8'b00011000; // **
- 11'h21c: data = 8'b00000000; //
- 11'h21d: data = 8'b00000000; //
- 11'h21e: data = 8'b00000000; //
- 11'h21f: data = 8'b00000000; //
- //code x22
- 11'h220: data = 8'b00000000; //
- 11'h221: data = 8'b01100110; // ** **
- 11'h222: data = 8'b01100110; // ** **
- 11'h223: data = 8'b01100110; // ** **
- 11'h224: data = 8'b00100100; // * *
- 11'h225: data = 8'b00000000; //
- 11'h226: data = 8'b00000000; //
- 11'h227: data = 8'b00000000; //
- 11'h228: data = 8'b00000000; //
- 11'h229: data = 8'b00000000; //
- 11'h22a: data = 8'b00000000; //
- 11'h22b: data = 8'b00000000; //
- 11'h22c: data = 8'b00000000; //
- 11'h22d: data = 8'b00000000; //
- 11'h22e: data = 8'b00000000; //
- 11'h22f: data = 8'b00000000; //
- //code x23
- 11'h230: data = 8'b00000000; //
- 11'h231: data = 8'b00000000; //
- 11'h232: data = 8'b00000000; //
- 11'h233: data = 8'b01101100; // ** **
- 11'h234: data = 8'b01101100; // ** **
- 11'h235: data = 8'b11111110; // *******
- 11'h236: data = 8'b01101100; // ** **
- 11'h237: data = 8'b01101100; // ** **
- 11'h238: data = 8'b01101100; // ** **
- 11'h239: data = 8'b11111110; // *******
- 11'h23a: data = 8'b01101100; // ** **
- 11'h23b: data = 8'b01101100; // ** **
- 11'h23c: data = 8'b00000000; //
- 11'h23d: data = 8'b00000000; //
- 11'h23e: data = 8'b00000000; //
- 11'h23f: data = 8'b00000000; //
- //code x24
- 11'h240: data = 8'b00011000; // **
- 11'h241: data = 8'b00011000; // **
- 11'h242: data = 8'b01111100; // *****
- 11'h243: data = 8'b11000110; // ** **
- 11'h244: data = 8'b11000010; // ** *
- 11'h245: data = 8'b11000000; // **
- 11'h246: data = 8'b01111100; // *****
- 11'h247: data = 8'b00000110; // **
- 11'h248: data = 8'b00000110; // **
- 11'h249: data = 8'b10000110; // * **
- 11'h24a: data = 8'b11000110; // ** **
- 11'h24b: data = 8'b01111100; // *****
- 11'h24c: data = 8'b00011000; // **
- 11'h24d: data = 8'b00011000; // **
- 11'h24e: data = 8'b00000000; //
- 11'h24f: data = 8'b00000000; //
- //code x25
- 11'h250: data = 8'b00000000; //
- 11'h251: data = 8'b00000000; //
- 11'h252: data = 8'b00000000; //
- 11'h253: data = 8'b00000000; //
- 11'h254: data = 8'b11000010; // ** *
- 11'h255: data = 8'b11000110; // ** **
- 11'h256: data = 8'b00001100; // **
- 11'h257: data = 8'b00011000; // **
- 11'h258: data = 8'b00110000; // **
- 11'h259: data = 8'b01100000; // **
- 11'h25a: data = 8'b11000110; // ** **
- 11'h25b: data = 8'b10000110; // * **
- 11'h25c: data = 8'b00000000; //
- 11'h25d: data = 8'b00000000; //
- 11'h25e: data = 8'b00000000; //
- 11'h25f: data = 8'b00000000; //
- //code x26
- 11'h260: data = 8'b00000000; //
- 11'h261: data = 8'b00000000; //
- 11'h262: data = 8'b00111000; // ***
- 11'h263: data = 8'b01101100; // ** **
- 11'h264: data = 8'b01101100; // ** **
- 11'h265: data = 8'b00111000; // ***
- 11'h266: data = 8'b01110110; // *** **
- 11'h267: data = 8'b11011100; // ** ***
- 11'h268: data = 8'b11001100; // ** **
- 11'h269: data = 8'b11001100; // ** **
- 11'h26a: data = 8'b11001100; // ** **
- 11'h26b: data = 8'b01110110; // *** **
- 11'h26c: data = 8'b00000000; //
- 11'h26d: data = 8'b00000000; //
- 11'h26e: data = 8'b00000000; //
- 11'h26f: data = 8'b00000000; //
- //code x27
- 11'h270: data = 8'b00000000; //
- 11'h271: data = 8'b00110000; // **
- 11'h272: data = 8'b00110000; // **
- 11'h273: data = 8'b00110000; // **
- 11'h274: data = 8'b01100000; // **
- 11'h275: data = 8'b00000000; //
- 11'h276: data = 8'b00000000; //
- 11'h277: data = 8'b00000000; //
- 11'h278: data = 8'b00000000; //
- 11'h279: data = 8'b00000000; //
- 11'h27a: data = 8'b00000000; //
- 11'h27b: data = 8'b00000000; //
- 11'h27c: data = 8'b00000000; //
- 11'h27d: data = 8'b00000000; //
- 11'h27e: data = 8'b00000000; //
- 11'h27f: data = 8'b00000000; //
- //code x28
- 11'h280: data = 8'b00000000; //
- 11'h281: data = 8'b00000000; //
- 11'h282: data = 8'b00001100; // **
- 11'h283: data = 8'b00011000; // **
- 11'h284: data = 8'b00110000; // **
- 11'h285: data = 8'b00110000; // **
- 11'h286: data = 8'b00110000; // **
- 11'h287: data = 8'b00110000; // **
- 11'h288: data = 8'b00110000; // **
- 11'h289: data = 8'b00110000; // **
- 11'h28a: data = 8'b00011000; // **
- 11'h28b: data = 8'b00001100; // **
- 11'h28c: data = 8'b00000000; //
- 11'h28d: data = 8'b00000000; //
- 11'h28e: data = 8'b00000000; //
- 11'h28f: data = 8'b00000000; //
- //code x29
- 11'h290: data = 8'b00000000; //
- 11'h291: data = 8'b00000000; //
- 11'h292: data = 8'b00110000; // **
- 11'h293: data = 8'b00011000; // **
- 11'h294: data = 8'b00001100; // **
- 11'h295: data = 8'b00001100; // **
- 11'h296: data = 8'b00001100; // **
- 11'h297: data = 8'b00001100; // **
- 11'h298: data = 8'b00001100; // **
- 11'h299: data = 8'b00001100; // **
- 11'h29a: data = 8'b00011000; // **
- 11'h29b: data = 8'b00110000; // **
- 11'h29c: data = 8'b00000000; //
- 11'h29d: data = 8'b00000000; //
- 11'h29e: data = 8'b00000000; //
- 11'h29f: data = 8'b00000000; //
- //code x2a
- 11'h2a0: data = 8'b00000000; //
- 11'h2a1: data = 8'b00000000; //
- 11'h2a2: data = 8'b00000000; //
- 11'h2a3: data = 8'b00000000; //
- 11'h2a4: data = 8'b00000000; //
- 11'h2a5: data = 8'b01100110; // ** **
- 11'h2a6: data = 8'b00111100; // ****
- 11'h2a7: data = 8'b11111111; // ********
- 11'h2a8: data = 8'b00111100; // ****
- 11'h2a9: data = 8'b01100110; // ** **
- 11'h2aa: data = 8'b00000000; //
- 11'h2ab: data = 8'b00000000; //
- 11'h2ac: data = 8'b00000000; //
- 11'h2ad: data = 8'b00000000; //
- 11'h2ae: data = 8'b00000000; //
- 11'h2af: data = 8'b00000000; //
- //code x2b
- 11'h2b0: data = 8'b00000000; //
- 11'h2b1: data = 8'b00000000; //
- 11'h2b2: data = 8'b00000000; //
- 11'h2b3: data = 8'b00000000; //
- 11'h2b4: data = 8'b00000000; //
- 11'h2b5: data = 8'b00011000; // **
- 11'h2b6: data = 8'b00011000; // **
- 11'h2b7: data = 8'b01111110; // ******
- 11'h2b8: data = 8'b00011000; // **
- 11'h2b9: data = 8'b00011000; // **
- 11'h2ba: data = 8'b00000000; //
- 11'h2bb: data = 8'b00000000; //
- 11'h2bc: data = 8'b00000000; //
- 11'h2bd: data = 8'b00000000; //
- 11'h2be: data = 8'b00000000; //
- 11'h2bf: data = 8'b00000000; //
- //code x2c
- 11'h2c0: data = 8'b00000000; //
- 11'h2c1: data = 8'b00000000; //
- 11'h2c2: data = 8'b00000000; //
- 11'h2c3: data = 8'b00000000; //
- 11'h2c4: data = 8'b00000000; //
- 11'h2c5: data = 8'b00000000; //
- 11'h2c6: data = 8'b00000000; //
- 11'h2c7: data = 8'b00000000; //
- 11'h2c8: data = 8'b00000000; //
- 11'h2c9: data = 8'b00011000; // **
- 11'h2ca: data = 8'b00011000; // **
- 11'h2cb: data = 8'b00011000; // **
- 11'h2cc: data = 8'b00110000; // **
- 11'h2cd: data = 8'b00000000; //
- 11'h2ce: data = 8'b00000000; //
- 11'h2cf: data = 8'b00000000; //
- //code x2d
- 11'h2d0: data = 8'b00000000; //
- 11'h2d1: data = 8'b00000000; //
- 11'h2d2: data = 8'b00000000; //
- 11'h2d3: data = 8'b00000000; //
- 11'h2d4: data = 8'b00000000; //
- 11'h2d5: data = 8'b00000000; //
- 11'h2d6: data = 8'b00000000; //
- 11'h2d7: data = 8'b01111110; // ******
- 11'h2d8: data = 8'b00000000; //
- 11'h2d9: data = 8'b00000000; //
- 11'h2da: data = 8'b00000000; //
- 11'h2db: data = 8'b00000000; //
- 11'h2dc: data = 8'b00000000; //
- 11'h2dd: data = 8'b00000000; //
- 11'h2de: data = 8'b00000000; //
- 11'h2df: data = 8'b00000000; //
- //code x2e
- 11'h2e0: data = 8'b00000000; //
- 11'h2e1: data = 8'b00000000; //
- 11'h2e2: data = 8'b00000000; //
- 11'h2e3: data = 8'b00000000; //
- 11'h2e4: data = 8'b00000000; //
- 11'h2e5: data = 8'b00000000; //
- 11'h2e6: data = 8'b00000000; //
- 11'h2e7: data = 8'b00000000; //
- 11'h2e8: data = 8'b00000000; //
- 11'h2e9: data = 8'b00000000; //
- 11'h2ea: data = 8'b00011000; // **
- 11'h2eb: data = 8'b00011000; // **
- 11'h2ec: data = 8'b00000000; //
- 11'h2ed: data = 8'b00000000; //
- 11'h2ee: data = 8'b00000000; //
- 11'h2ef: data = 8'b00000000; //
- //code x2f
- 11'h2f0: data = 8'b00000000; //
- 11'h2f1: data = 8'b00000000; //
- 11'h2f2: data = 8'b00000000; //
- 11'h2f3: data = 8'b00000000; //
- 11'h2f4: data = 8'b00000010; // *
- 11'h2f5: data = 8'b00000110; // **
- 11'h2f6: data = 8'b00001100; // **
- 11'h2f7: data = 8'b00011000; // **
- 11'h2f8: data = 8'b00110000; // **
- 11'h2f9: data = 8'b01100000; // **
- 11'h2fa: data = 8'b11000000; // **
- 11'h2fb: data = 8'b10000000; // *
- 11'h2fc: data = 8'b00000000; //
- 11'h2fd: data = 8'b00000000; //
- 11'h2fe: data = 8'b00000000; //
- 11'h2ff: data = 8'b00000000; //
- //code x30
- 11'h300: data = 8'b00000000; //
- 11'h301: data = 8'b00000000; //
- 11'h302: data = 8'b01111100; // *****
- 11'h303: data = 8'b11000110; // ** **
- 11'h304: data = 8'b11000110; // ** **
- 11'h305: data = 8'b11001110; // ** ***
- 11'h306: data = 8'b11011110; // ** ****
- 11'h307: data = 8'b11110110; // **** **
- 11'h308: data = 8'b11100110; // *** **
- 11'h309: data = 8'b11000110; // ** **
- 11'h30a: data = 8'b11000110; // ** **
- 11'h30b: data = 8'b01111100; // *****
- 11'h30c: data = 8'b00000000; //
- 11'h30d: data = 8'b00000000; //
- 11'h30e: data = 8'b00000000; //
- 11'h30f: data = 8'b00000000; //
- //code x31
- 11'h310: data = 8'b00000000; //
- 11'h311: data = 8'b00000000; //
- 11'h312: data = 8'b00011000; //
- 11'h313: data = 8'b00111000; //
- 11'h314: data = 8'b01111000; // **
- 11'h315: data = 8'b00011000; // ***
- 11'h316: data = 8'b00011000; // ****
- 11'h317: data = 8'b00011000; // **
- 11'h318: data = 8'b00011000; // **
- 11'h319: data = 8'b00011000; // **
- 11'h31a: data = 8'b00011000; // **
- 11'h31b: data = 8'b01111110; // **
- 11'h31c: data = 8'b00000000; // **
- 11'h31d: data = 8'b00000000; // ******
- 11'h31e: data = 8'b00000000; //
- 11'h31f: data = 8'b00000000; //
- //code x32
- 11'h320: data = 8'b00000000; //
- 11'h321: data = 8'b00000000; //
- 11'h322: data = 8'b01111100; // *****
- 11'h323: data = 8'b11000110; // ** **
- 11'h324: data = 8'b00000110; // **
- 11'h325: data = 8'b00001100; // **
- 11'h326: data = 8'b00011000; // **
- 11'h327: data = 8'b00110000; // **
- 11'h328: data = 8'b01100000; // **
- 11'h329: data = 8'b11000000; // **
- 11'h32a: data = 8'b11000110; // ** **
- 11'h32b: data = 8'b11111110; // *******
- 11'h32c: data = 8'b00000000; //
- 11'h32d: data = 8'b00000000; //
- 11'h32e: data = 8'b00000000; //
- 11'h32f: data = 8'b00000000; //
- //code x33
- 11'h330: data = 8'b00000000; //
- 11'h331: data = 8'b00000000; //
- 11'h332: data = 8'b01111100; // *****
- 11'h333: data = 8'b11000110; // ** **
- 11'h334: data = 8'b00000110; // **
- 11'h335: data = 8'b00000110; // **
- 11'h336: data = 8'b00111100; // ****
- 11'h337: data = 8'b00000110; // **
- 11'h338: data = 8'b00000110; // **
- 11'h339: data = 8'b00000110; // **
- 11'h33a: data = 8'b11000110; // ** **
- 11'h33b: data = 8'b01111100; // *****
- 11'h33c: data = 8'b00000000; //
- 11'h33d: data = 8'b00000000; //
- 11'h33e: data = 8'b00000000; //
- 11'h33f: data = 8'b00000000; //
- //code x34
- 11'h340: data = 8'b00000000; //
- 11'h341: data = 8'b00000000; //
- 11'h342: data = 8'b00001100; // **
- 11'h343: data = 8'b00011100; // ***
- 11'h344: data = 8'b00111100; // ****
- 11'h345: data = 8'b01101100; // ** **
- 11'h346: data = 8'b11001100; // ** **
- 11'h347: data = 8'b11111110; // *******
- 11'h348: data = 8'b00001100; // **
- 11'h349: data = 8'b00001100; // **
- 11'h34a: data = 8'b00001100; // **
- 11'h34b: data = 8'b00011110; // ****
- 11'h34c: data = 8'b00000000; //
- 11'h34d: data = 8'b00000000; //
- 11'h34e: data = 8'b00000000; //
- 11'h34f: data = 8'b00000000; //
- //code x35
- 11'h350: data = 8'b00000000; //
- 11'h351: data = 8'b00000000; //
- 11'h352: data = 8'b11111110; // *******
- 11'h353: data = 8'b11000000; // **
- 11'h354: data = 8'b11000000; // **
- 11'h355: data = 8'b11000000; // **
- 11'h356: data = 8'b11111100; // ******
- 11'h357: data = 8'b00000110; // **
- 11'h358: data = 8'b00000110; // **
- 11'h359: data = 8'b00000110; // **
- 11'h35a: data = 8'b11000110; // ** **
- 11'h35b: data = 8'b01111100; // *****
- 11'h35c: data = 8'b00000000; //
- 11'h35d: data = 8'b00000000; //
- 11'h35e: data = 8'b00000000; //
- 11'h35f: data = 8'b00000000; //
- //code x36
- 11'h360: data = 8'b00000000; //
- 11'h361: data = 8'b00000000; //
- 11'h362: data = 8'b00111000; // ***
- 11'h363: data = 8'b01100000; // **
- 11'h364: data = 8'b11000000; // **
- 11'h365: data = 8'b11000000; // **
- 11'h366: data = 8'b11111100; // ******
- 11'h367: data = 8'b11000110; // ** **
- 11'h368: data = 8'b11000110; // ** **
- 11'h369: data = 8'b11000110; // ** **
- 11'h36a: data = 8'b11000110; // ** **
- 11'h36b: data = 8'b01111100; // *****
- 11'h36c: data = 8'b00000000; //
- 11'h36d: data = 8'b00000000; //
- 11'h36e: data = 8'b00000000; //
- 11'h36f: data = 8'b00000000; //
- //code x37
- 11'h370: data = 8'b00000000; //
- 11'h371: data = 8'b00000000; //
- 11'h372: data = 8'b11111110; // *******
- 11'h373: data = 8'b11000110; // ** **
- 11'h374: data = 8'b00000110; // **
- 11'h375: data = 8'b00000110; // **
- 11'h376: data = 8'b00001100; // **
- 11'h377: data = 8'b00011000; // **
- 11'h378: data = 8'b00110000; // **
- 11'h379: data = 8'b00110000; // **
- 11'h37a: data = 8'b00110000; // **
- 11'h37b: data = 8'b00110000; // **
- 11'h37c: data = 8'b00000000; //
- 11'h37d: data = 8'b00000000; //
- 11'h37e: data = 8'b00000000; //
- 11'h37f: data = 8'b00000000; //
- //code x38
- 11'h380: data = 8'b00000000; //
- 11'h381: data = 8'b00000000; //
- 11'h382: data = 8'b01111100; // *****
- 11'h383: data = 8'b11000110; // ** **
- 11'h384: data = 8'b11000110; // ** **
- 11'h385: data = 8'b11000110; // ** **
- 11'h386: data = 8'b01111100; // *****
- 11'h387: data = 8'b11000110; // ** **
- 11'h388: data = 8'b11000110; // ** **
- 11'h389: data = 8'b11000110; // ** **
- 11'h38a: data = 8'b11000110; // ** **
- 11'h38b: data = 8'b01111100; // *****
- 11'h38c: data = 8'b00000000; //
- 11'h38d: data = 8'b00000000; //
- 11'h38e: data = 8'b00000000; //
- 11'h38f: data = 8'b00000000; //
- //code x39
- 11'h390: data = 8'b00000000; //
- 11'h391: data = 8'b00000000; //
- 11'h392: data = 8'b01111100; // *****
- 11'h393: data = 8'b11000110; // ** **
- 11'h394: data = 8'b11000110; // ** **
- 11'h395: data = 8'b11000110; // ** **
- 11'h396: data = 8'b01111110; // ******
- 11'h397: data = 8'b00000110; // **
- 11'h398: data = 8'b00000110; // **
- 11'h399: data = 8'b00000110; // **
- 11'h39a: data = 8'b00001100; // **
- 11'h39b: data = 8'b01111000; // ****
- 11'h39c: data = 8'b00000000; //
- 11'h39d: data = 8'b00000000; //
- 11'h39e: data = 8'b00000000; //
- 11'h39f: data = 8'b00000000; //
- //code x3a
- 11'h3a0: data = 8'b00000000; //
- 11'h3a1: data = 8'b00000000; //
- 11'h3a2: data = 8'b00000000; //
- 11'h3a3: data = 8'b00000000; //
- 11'h3a4: data = 8'b00011000; // **
- 11'h3a5: data = 8'b00011000; // **
- 11'h3a6: data = 8'b00000000; //
- 11'h3a7: data = 8'b00000000; //
- 11'h3a8: data = 8'b00000000; //
- 11'h3a9: data = 8'b00011000; // **
- 11'h3aa: data = 8'b00011000; // **
- 11'h3ab: data = 8'b00000000; //
- 11'h3ac: data = 8'b00000000; //
- 11'h3ad: data = 8'b00000000; //
- 11'h3ae: data = 8'b00000000; //
- 11'h3af: data = 8'b00000000; //
- //code x3b
- 11'h3b0: data = 8'b00000000; //
- 11'h3b1: data = 8'b00000000; //
- 11'h3b2: data = 8'b00000000; //
- 11'h3b3: data = 8'b00000000; //
- 11'h3b4: data = 8'b00011000; // **
- 11'h3b5: data = 8'b00011000; // **
- 11'h3b6: data = 8'b00000000; //
- 11'h3b7: data = 8'b00000000; //
- 11'h3b8: data = 8'b00000000; //
- 11'h3b9: data = 8'b00011000; // **
- 11'h3ba: data = 8'b00011000; // **
- 11'h3bb: data = 8'b00110000; // **
- 11'h3bc: data = 8'b00000000; //
- 11'h3bd: data = 8'b00000000; //
- 11'h3be: data = 8'b00000000; //
- 11'h3bf: data = 8'b00000000; //
- //code x3c
- 11'h3c0: data = 8'b00000000; //
- 11'h3c1: data = 8'b00000000; //
- 11'h3c2: data = 8'b00000000; //
- 11'h3c3: data = 8'b00000110; // **
- 11'h3c4: data = 8'b00001100; // **
- 11'h3c5: data = 8'b00011000; // **
- 11'h3c6: data = 8'b00110000; // **
- 11'h3c7: data = 8'b01100000; // **
- 11'h3c8: data = 8'b00110000; // **
- 11'h3c9: data = 8'b00011000; // **
- 11'h3ca: data = 8'b00001100; // **
- 11'h3cb: data = 8'b00000110; // **
- 11'h3cc: data = 8'b00000000; //
- 11'h3cd: data = 8'b00000000; //
- 11'h3ce: data = 8'b00000000; //
- 11'h3cf: data = 8'b00000000; //
- //code x3d
- 11'h3d0: data = 8'b00000000; //
- 11'h3d1: data = 8'b00000000; //
- 11'h3d2: data = 8'b00000000; //
- 11'h3d3: data = 8'b00000000; //
- 11'h3d4: data = 8'b00000000; //
- 11'h3d5: data = 8'b01111110; // ******
- 11'h3d6: data = 8'b00000000; //
- 11'h3d7: data = 8'b00000000; //
- 11'h3d8: data = 8'b01111110; // ******
- 11'h3d9: data = 8'b00000000; //
- 11'h3da: data = 8'b00000000; //
- 11'h3db: data = 8'b00000000; //
- 11'h3dc: data = 8'b00000000; //
- 11'h3dd: data = 8'b00000000; //
- 11'h3de: data = 8'b00000000; //
- 11'h3df: data = 8'b00000000; //
- //code x3e
- 11'h3e0: data = 8'b00000000; //
- 11'h3e1: data = 8'b00000000; //
- 11'h3e2: data = 8'b00000000; //
- 11'h3e3: data = 8'b01100000; // **
- 11'h3e4: data = 8'b00110000; // **
- 11'h3e5: data = 8'b00011000; // **
- 11'h3e6: data = 8'b00001100; // **
- 11'h3e7: data = 8'b00000110; // **
- 11'h3e8: data = 8'b00001100; // **
- 11'h3e9: data = 8'b00011000; // **
- 11'h3ea: data = 8'b00110000; // **
- 11'h3eb: data = 8'b01100000; // **
- 11'h3ec: data = 8'b00000000; //
- 11'h3ed: data = 8'b00000000; //
- 11'h3ee: data = 8'b00000000; //
- 11'h3ef: data = 8'b00000000; //
- //code x3f
- 11'h3f0: data = 8'b00000000; //
- 11'h3f1: data = 8'b00000000; //
- 11'h3f2: data = 8'b01111100; // *****
- 11'h3f3: data = 8'b11000110; // ** **
- 11'h3f4: data = 8'b11000110; // ** **
- 11'h3f5: data = 8'b00001100; // **
- 11'h3f6: data = 8'b00011000; // **
- 11'h3f7: data = 8'b00011000; // **
- 11'h3f8: data = 8'b00011000; // **
- 11'h3f9: data = 8'b00000000; //
- 11'h3fa: data = 8'b00011000; // **
- 11'h3fb: data = 8'b00011000; // **
- 11'h3fc: data = 8'b00000000; //
- 11'h3fd: data = 8'b00000000; //
- 11'h3fe: data = 8'b00000000; //
- 11'h3ff: data = 8'b00000000; //
- //code x40
- 11'h400: data = 8'b00000000; //
- 11'h401: data = 8'b00000000; //
- 11'h402: data = 8'b01111100; // *****
- 11'h403: data = 8'b11000110; // ** **
- 11'h404: data = 8'b11000110; // ** **
- 11'h405: data = 8'b11000110; // ** **
- 11'h406: data = 8'b11011110; // ** ****
- 11'h407: data = 8'b11011110; // ** ****
- 11'h408: data = 8'b11011110; // ** ****
- 11'h409: data = 8'b11011100; // ** ***
- 11'h40a: data = 8'b11000000; // **
- 11'h40b: data = 8'b01111100; // *****
- 11'h40c: data = 8'b00000000; //
- 11'h40d: data = 8'b00000000; //
- 11'h40e: data = 8'b00000000; //
- 11'h40f: data = 8'b00000000; //
- //code x41
- 11'h410: data = 8'b00000000; //
- 11'h411: data = 8'b00000000; //
- 11'h412: data = 8'b00010000; // *
- 11'h413: data = 8'b00111000; // ***
- 11'h414: data = 8'b01101100; // ** **
- 11'h415: data = 8'b11000110; // ** **
- 11'h416: data = 8'b11000110; // ** **
- 11'h417: data = 8'b11111110; // *******
- 11'h418: data = 8'b11000110; // ** **
- 11'h419: data = 8'b11000110; // ** **
- 11'h41a: data = 8'b11000110; // ** **
- 11'h41b: data = 8'b11000110; // ** **
- 11'h41c: data = 8'b00000000; //
- 11'h41d: data = 8'b00000000; //
- 11'h41e: data = 8'b00000000; //
- 11'h41f: data = 8'b00000000; //
- //code x42
- 11'h420: data = 8'b00000000; //
- 11'h421: data = 8'b00000000; //
- 11'h422: data = 8'b11111100; // ******
- 11'h423: data = 8'b01100110; // ** **
- 11'h424: data = 8'b01100110; // ** **
- 11'h425: data = 8'b01100110; // ** **
- 11'h426: data = 8'b01111100; // *****
- 11'h427: data = 8'b01100110; // ** **
- 11'h428: data = 8'b01100110; // ** **
- 11'h429: data = 8'b01100110; // ** **
- 11'h42a: data = 8'b01100110; // ** **
- 11'h42b: data = 8'b11111100; // ******
- 11'h42c: data = 8'b00000000; //
- 11'h42d: data = 8'b00000000; //
- 11'h42e: data = 8'b00000000; //
- 11'h42f: data = 8'b00000000; //
- //code x43
- 11'h430: data = 8'b00000000; //
- 11'h431: data = 8'b00000000; //
- 11'h432: data = 8'b00111100; // ****
- 11'h433: data = 8'b01100110; // ** **
- 11'h434: data = 8'b11000010; // ** *
- 11'h435: data = 8'b11000000; // **
- 11'h436: data = 8'b11000000; // **
- 11'h437: data = 8'b11000000; // **
- 11'h438: data = 8'b11000000; // **
- 11'h439: data = 8'b11000010; // ** *
- 11'h43a: data = 8'b01100110; // ** **
- 11'h43b: data = 8'b00111100; // ****
- 11'h43c: data = 8'b00000000; //
- 11'h43d: data = 8'b00000000; //
- 11'h43e: data = 8'b00000000; //
- 11'h43f: data = 8'b00000000; //
- //code x44
- 11'h440: data = 8'b00000000; //
- 11'h441: data = 8'b00000000; //
- 11'h442: data = 8'b11111000; // *****
- 11'h443: data = 8'b01101100; // ** **
- 11'h444: data = 8'b01100110; // ** **
- 11'h445: data = 8'b01100110; // ** **
- 11'h446: data = 8'b01100110; // ** **
- 11'h447: data = 8'b01100110; // ** **
- 11'h448: data = 8'b01100110; // ** **
- 11'h449: data = 8'b01100110; // ** **
- 11'h44a: data = 8'b01101100; // ** **
- 11'h44b: data = 8'b11111000; // *****
- 11'h44c: data = 8'b00000000; //
- 11'h44d: data = 8'b00000000; //
- 11'h44e: data = 8'b00000000; //
- 11'h44f: data = 8'b00000000; //
- //code x45
- 11'h450: data = 8'b00000000; //
- 11'h451: data = 8'b00000000; //
- 11'h452: data = 8'b11111110; // *******
- 11'h453: data = 8'b01100110; // ** **
- 11'h454: data = 8'b01100010; // ** *
- 11'h455: data = 8'b01101000; // ** *
- 11'h456: data = 8'b01111000; // ****
- 11'h457: data = 8'b01101000; // ** *
- 11'h458: data = 8'b01100000; // **
- 11'h459: data = 8'b01100010; // ** *
- 11'h45a: data = 8'b01100110; // ** **
- 11'h45b: data = 8'b11111110; // *******
- 11'h45c: data = 8'b00000000; //
- 11'h45d: data = 8'b00000000; //
- 11'h45e: data = 8'b00000000; //
- 11'h45f: data = 8'b00000000; //
- //code x46
- 11'h460: data = 8'b00000000; //
- 11'h461: data = 8'b00000000; //
- 11'h462: data = 8'b11111110; // *******
- 11'h463: data = 8'b01100110; // ** **
- 11'h464: data = 8'b01100010; // ** *
- 11'h465: data = 8'b01101000; // ** *
- 11'h466: data = 8'b01111000; // ****
- 11'h467: data = 8'b01101000; // ** *
- 11'h468: data = 8'b01100000; // **
- 11'h469: data = 8'b01100000; // **
- 11'h46a: data = 8'b01100000; // **
- 11'h46b: data = 8'b11110000; // ****
- 11'h46c: data = 8'b00000000; //
- 11'h46d: data = 8'b00000000; //
- 11'h46e: data = 8'b00000000; //
- 11'h46f: data = 8'b00000000; //
- //code x47
- 11'h470: data = 8'b00000000; //
- 11'h471: data = 8'b00000000; //
- 11'h472: data = 8'b00111100; // ****
- 11'h473: data = 8'b01100110; // ** **
- 11'h474: data = 8'b11000010; // ** *
- 11'h475: data = 8'b11000000; // **
- 11'h476: data = 8'b11000000; // **
- 11'h477: data = 8'b11011110; // ** ****
- 11'h478: data = 8'b11000110; // ** **
- 11'h479: data = 8'b11000110; // ** **
- 11'h47a: data = 8'b01100110; // ** **
- 11'h47b: data = 8'b00111010; // *** *
- 11'h47c: data = 8'b00000000; //
- 11'h47d: data = 8'b00000000; //
- 11'h47e: data = 8'b00000000; //
- 11'h47f: data = 8'b00000000; //
- //code x48
- 11'h480: data = 8'b00000000; //
- 11'h481: data = 8'b00000000; //
- 11'h482: data = 8'b11000110; // ** **
- 11'h483: data = 8'b11000110; // ** **
- 11'h484: data = 8'b11000110; // ** **
- 11'h485: data = 8'b11000110; // ** **
- 11'h486: data = 8'b11111110; // *******
- 11'h487: data = 8'b11000110; // ** **
- 11'h488: data = 8'b11000110; // ** **
- 11'h489: data = 8'b11000110; // ** **
- 11'h48a: data = 8'b11000110; // ** **
- 11'h48b: data = 8'b11000110; // ** **
- 11'h48c: data = 8'b00000000; //
- 11'h48d: data = 8'b00000000; //
- 11'h48e: data = 8'b00000000; //
- 11'h48f: data = 8'b00000000; //
- //code x49
- 11'h490: data = 8'b00000000; //
- 11'h491: data = 8'b00000000; //
- 11'h492: data = 8'b00111100; // ****
- 11'h493: data = 8'b00011000; // **
- 11'h494: data = 8'b00011000; // **
- 11'h495: data = 8'b00011000; // **
- 11'h496: data = 8'b00011000; // **
- 11'h497: data = 8'b00011000; // **
- 11'h498: data = 8'b00011000; // **
- 11'h499: data = 8'b00011000; // **
- 11'h49a: data = 8'b00011000; // **
- 11'h49b: data = 8'b00111100; // ****
- 11'h49c: data = 8'b00000000; //
- 11'h49d: data = 8'b00000000; //
- 11'h49e: data = 8'b00000000; //
- 11'h49f: data = 8'b00000000; //
- //code x4a
- 11'h4a0: data = 8'b00000000; //
- 11'h4a1: data = 8'b00000000; //
- 11'h4a2: data = 8'b00011110; // ****
- 11'h4a3: data = 8'b00001100; // **
- 11'h4a4: data = 8'b00001100; // **
- 11'h4a5: data = 8'b00001100; // **
- 11'h4a6: data = 8'b00001100; // **
- 11'h4a7: data = 8'b00001100; // **
- 11'h4a8: data = 8'b11001100; // ** **
- 11'h4a9: data = 8'b11001100; // ** **
- 11'h4aa: data = 8'b11001100; // ** **
- 11'h4ab: data = 8'b01111000; // ****
- 11'h4ac: data = 8'b00000000; //
- 11'h4ad: data = 8'b00000000; //
- 11'h4ae: data = 8'b00000000; //
- 11'h4af: data = 8'b00000000; //
- //code x4b
- 11'h4b0: data = 8'b00000000; //
- 11'h4b1: data = 8'b00000000; //
- 11'h4b2: data = 8'b11100110; // *** **
- 11'h4b3: data = 8'b01100110; // ** **
- 11'h4b4: data = 8'b01100110; // ** **
- 11'h4b5: data = 8'b01101100; // ** **
- 11'h4b6: data = 8'b01111000; // ****
- 11'h4b7: data = 8'b01111000; // ****
- 11'h4b8: data = 8'b01101100; // ** **
- 11'h4b9: data = 8'b01100110; // ** **
- 11'h4ba: data = 8'b01100110; // ** **
- 11'h4bb: data = 8'b11100110; // *** **
- 11'h4bc: data = 8'b00000000; //
- 11'h4bd: data = 8'b00000000; //
- 11'h4be: data = 8'b00000000; //
- 11'h4bf: data = 8'b00000000; //
- //code x4c
- 11'h4c0: data = 8'b00000000; //
- 11'h4c1: data = 8'b00000000; //
- 11'h4c2: data = 8'b11110000; // ****
- 11'h4c3: data = 8'b01100000; // **
- 11'h4c4: data = 8'b01100000; // **
- 11'h4c5: data = 8'b01100000; // **
- 11'h4c6: data = 8'b01100000; // **
- 11'h4c7: data = 8'b01100000; // **
- 11'h4c8: data = 8'b01100000; // **
- 11'h4c9: data = 8'b01100010; // ** *
- 11'h4ca: data = 8'b01100110; // ** **
- 11'h4cb: data = 8'b11111110; // *******
- 11'h4cc: data = 8'b00000000; //
- 11'h4cd: data = 8'b00000000; //
- 11'h4ce: data = 8'b00000000; //
- 11'h4cf: data = 8'b00000000; //
- //code x4d
- 11'h4d0: data = 8'b00000000; //
- 11'h4d1: data = 8'b00000000; //
- 11'h4d2: data = 8'b11000011; // ** **
- 11'h4d3: data = 8'b11100111; // *** ***
- 11'h4d4: data = 8'b11111111; // ********
- 11'h4d5: data = 8'b11111111; // ********
- 11'h4d6: data = 8'b11011011; // ** ** **
- 11'h4d7: data = 8'b11000011; // ** **
- 11'h4d8: data = 8'b11000011; // ** **
- 11'h4d9: data = 8'b11000011; // ** **
- 11'h4da: data = 8'b11000011; // ** **
- 11'h4db: data = 8'b11000011; // ** **
- 11'h4dc: data = 8'b00000000; //
- 11'h4dd: data = 8'b00000000; //
- 11'h4de: data = 8'b00000000; //
- 11'h4df: data = 8'b00000000; //
- //code x4e
- 11'h4e0: data = 8'b00000000; //
- 11'h4e1: data = 8'b00000000; //
- 11'h4e2: data = 8'b11000110; // ** **
- 11'h4e3: data = 8'b11100110; // *** **
- 11'h4e4: data = 8'b11110110; // **** **
- 11'h4e5: data = 8'b11111110; // *******
- 11'h4e6: data = 8'b11011110; // ** ****
- 11'h4e7: data = 8'b11001110; // ** ***
- 11'h4e8: data = 8'b11000110; // ** **
- 11'h4e9: data = 8'b11000110; // ** **
- 11'h4ea: data = 8'b11000110; // ** **
- 11'h4eb: data = 8'b11000110; // ** **
- 11'h4ec: data = 8'b00000000; //
- 11'h4ed: data = 8'b00000000; //
- 11'h4ee: data = 8'b00000000; //
- 11'h4ef: data = 8'b00000000; //
- //code x4f
- 11'h4f0: data = 8'b00000000; //
- 11'h4f1: data = 8'b00000000; //
- 11'h4f2: data = 8'b01111100; // *****
- 11'h4f3: data = 8'b11000110; // ** **
- 11'h4f4: data = 8'b11000110; // ** **
- 11'h4f5: data = 8'b11000110; // ** **
- 11'h4f6: data = 8'b11000110; // ** **
- 11'h4f7: data = 8'b11000110; // ** **
- 11'h4f8: data = 8'b11000110; // ** **
- 11'h4f9: data = 8'b11000110; // ** **
- 11'h4fa: data = 8'b11000110; // ** **
- 11'h4fb: data = 8'b01111100; // *****
- 11'h4fc: data = 8'b00000000; //
- 11'h4fd: data = 8'b00000000; //
- 11'h4fe: data = 8'b00000000; //
- 11'h4ff: data = 8'b00000000; //
- //code x50
- 11'h500: data = 8'b00000000; //
- 11'h501: data = 8'b00000000; //
- 11'h502: data = 8'b11111100; // ******
- 11'h503: data = 8'b01100110; // ** **
- 11'h504: data = 8'b01100110; // ** **
- 11'h505: data = 8'b01100110; // ** **
- 11'h506: data = 8'b01111100; // *****
- 11'h507: data = 8'b01100000; // **
- 11'h508: data = 8'b01100000; // **
- 11'h509: data = 8'b01100000; // **
- 11'h50a: data = 8'b01100000; // **
- 11'h50b: data = 8'b11110000; // ****
- 11'h50c: data = 8'b00000000; //
- 11'h50d: data = 8'b00000000; //
- 11'h50e: data = 8'b00000000; //
- 11'h50f: data = 8'b00000000; //
- //code x510f
- 11'h510: data = 8'b00000000; //
- 11'h511: data = 8'b00000000; //
- 11'h512: data = 8'b01111100; // *****
- 11'h513: data = 8'b11000110; // ** **
- 11'h514: data = 8'b11000110; // ** **
- 11'h515: data = 8'b11000110; // ** **
- 11'h516: data = 8'b11000110; // ** **
- 11'h517: data = 8'b11000110; // ** **
- 11'h518: data = 8'b11000110; // ** **
- 11'h519: data = 8'b11010110; // ** * **
- 11'h51a: data = 8'b11011110; // ** ****
- 11'h51b: data = 8'b01111100; // *****
- 11'h51c: data = 8'b00001100; // **
- 11'h51d: data = 8'b00001110; // ***
- 11'h51e: data = 8'b00000000; //
- 11'h51f: data = 8'b00000000; //
- //code x52
- 11'h520: data = 8'b00000000; //
- 11'h521: data = 8'b00000000; //
- 11'h522: data = 8'b11111100; // ******
- 11'h523: data = 8'b01100110; // ** **
- 11'h524: data = 8'b01100110; // ** **
- 11'h525: data = 8'b01100110; // ** **
- 11'h526: data = 8'b01111100; // *****
- 11'h527: data = 8'b01101100; // ** **
- 11'h528: data = 8'b01100110; // ** **
- 11'h529: data = 8'b01100110; // ** **
- 11'h52a: data = 8'b01100110; // ** **
- 11'h52b: data = 8'b11100110; // *** **
- 11'h52c: data = 8'b00000000; //
- 11'h52d: data = 8'b00000000; //
- 11'h52e: data = 8'b00000000; //
- 11'h52f: data = 8'b00000000; //
- //code x53
- 11'h530: data = 8'b00000000; //
- 11'h531: data = 8'b00000000; //
- 11'h532: data = 8'b01111100; // *****
- 11'h533: data = 8'b11000110; // ** **
- 11'h534: data = 8'b11000110; // ** **
- 11'h535: data = 8'b01100000; // **
- 11'h536: data = 8'b00111000; // ***
- 11'h537: data = 8'b00001100; // **
- 11'h538: data = 8'b00000110; // **
- 11'h539: data = 8'b11000110; // ** **
- 11'h53a: data = 8'b11000110; // ** **
- 11'h53b: data = 8'b01111100; // *****
- 11'h53c: data = 8'b00000000; //
- 11'h53d: data = 8'b00000000; //
- 11'h53e: data = 8'b00000000; //
- 11'h53f: data = 8'b00000000; //
- //code x54
- 11'h540: data = 8'b00000000; //
- 11'h541: data = 8'b00000000; //
- 11'h542: data = 8'b11111111; // ********
- 11'h543: data = 8'b11011011; // ** ** **
- 11'h544: data = 8'b10011001; // * ** *
- 11'h545: data = 8'b00011000; // **
- 11'h546: data = 8'b00011000; // **
- 11'h547: data = 8'b00011000; // **
- 11'h548: data = 8'b00011000; // **
- 11'h549: data = 8'b00011000; // **
- 11'h54a: data = 8'b00011000; // **
- 11'h54b: data = 8'b00111100; // ****
- 11'h54c: data = 8'b00000000; //
- 11'h54d: data = 8'b00000000; //
- 11'h54e: data = 8'b00000000; //
- 11'h54f: data = 8'b00000000; //
- //code x55
- 11'h550: data = 8'b00000000; //
- 11'h551: data = 8'b00000000; //
- 11'h552: data = 8'b11000110; // ** **
- 11'h553: data = 8'b11000110; // ** **
- 11'h554: data = 8'b11000110; // ** **
- 11'h555: data = 8'b11000110; // ** **
- 11'h556: data = 8'b11000110; // ** **
- 11'h557: data = 8'b11000110; // ** **
- 11'h558: data = 8'b11000110; // ** **
- 11'h559: data = 8'b11000110; // ** **
- 11'h55a: data = 8'b11000110; // ** **
- 11'h55b: data = 8'b01111100; // *****
- 11'h55c: data = 8'b00000000; //
- 11'h55d: data = 8'b00000000; //
- 11'h55e: data = 8'b00000000; //
- 11'h55f: data = 8'b00000000; //
- //code x56
- 11'h560: data = 8'b00000000; //
- 11'h561: data = 8'b00000000; //
- 11'h562: data = 8'b11000011; // ** **
- 11'h563: data = 8'b11000011; // ** **
- 11'h564: data = 8'b11000011; // ** **
- 11'h565: data = 8'b11000011; // ** **
- 11'h566: data = 8'b11000011; // ** **
- 11'h567: data = 8'b11000011; // ** **
- 11'h568: data = 8'b11000011; // ** **
- 11'h569: data = 8'b01100110; // ** **
- 11'h56a: data = 8'b00111100; // ****
- 11'h56b: data = 8'b00011000; // **
- 11'h56c: data = 8'b00000000; //
- 11'h56d: data = 8'b00000000; //
- 11'h56e: data = 8'b00000000; //
- 11'h56f: data = 8'b00000000; //
- //code x57
- 11'h570: data = 8'b00000000; //
- 11'h571: data = 8'b00000000; //
- 11'h572: data = 8'b11000011; // ** **
- 11'h573: data = 8'b11000011; // ** **
- 11'h574: data = 8'b11000011; // ** **
- 11'h575: data = 8'b11000011; // ** **
- 11'h576: data = 8'b11000011; // ** **
- 11'h577: data = 8'b11011011; // ** ** **
- 11'h578: data = 8'b11011011; // ** ** **
- 11'h579: data = 8'b11111111; // ********
- 11'h57a: data = 8'b01100110; // ** **
- 11'h57b: data = 8'b01100110; // ** **
- 11'h57c: data = 8'b00000000; //
- 11'h57d: data = 8'b00000000; //
- 11'h57e: data = 8'b00000000; //
- 11'h57f: data = 8'b00000000; //
- //code x58
- 11'h580: data = 8'b00000000; //
- 11'h581: data = 8'b00000000; //
- 11'h582: data = 8'b11000011; // ** **
- 11'h583: data = 8'b11000011; // ** **
- 11'h584: data = 8'b01100110; // ** **
- 11'h585: data = 8'b00111100; // ****
- 11'h586: data = 8'b00011000; // **
- 11'h587: data = 8'b00011000; // **
- 11'h588: data = 8'b00111100; // ****
- 11'h589: data = 8'b01100110; // ** **
- 11'h58a: data = 8'b11000011; // ** **
- 11'h58b: data = 8'b11000011; // ** **
- 11'h58c: data = 8'b00000000; //
- 11'h58d: data = 8'b00000000; //
- 11'h58e: data = 8'b00000000; //
- 11'h58f: data = 8'b00000000; //
- //code x59
- 11'h590: data = 8'b00000000; //
- 11'h591: data = 8'b00000000; //
- 11'h592: data = 8'b11000011; // ** **
- 11'h593: data = 8'b11000011; // ** **
- 11'h594: data = 8'b11000011; // ** **
- 11'h595: data = 8'b01100110; // ** **
- 11'h596: data = 8'b00111100; // ****
- 11'h597: data = 8'b00011000; // **
- 11'h598: data = 8'b00011000; // **
- 11'h599: data = 8'b00011000; // **
- 11'h59a: data = 8'b00011000; // **
- 11'h59b: data = 8'b00111100; // ****
- 11'h59c: data = 8'b00000000; //
- 11'h59d: data = 8'b00000000; //
- 11'h59e: data = 8'b00000000; //
- 11'h59f: data = 8'b00000000; //
- //code x5a
- 11'h5a0: data = 8'b00000000; //
- 11'h5a1: data = 8'b00000000; //
- 11'h5a2: data = 8'b11111111; // ********
- 11'h5a3: data = 8'b11000011; // ** **
- 11'h5a4: data = 8'b10000110; // * **
- 11'h5a5: data = 8'b00001100; // **
- 11'h5a6: data = 8'b00011000; // **
- 11'h5a7: data = 8'b00110000; // **
- 11'h5a8: data = 8'b01100000; // **
- 11'h5a9: data = 8'b11000001; // ** *
- 11'h5aa: data = 8'b11000011; // ** **
- 11'h5ab: data = 8'b11111111; // ********
- 11'h5ac: data = 8'b00000000; //
- 11'h5ad: data = 8'b00000000; //
- 11'h5ae: data = 8'b00000000; //
- 11'h5af: data = 8'b00000000; //
- //code x5b
- 11'h5b0: data = 8'b00000000; //
- 11'h5b1: data = 8'b00000000; //
- 11'h5b2: data = 8'b00111100; // ****
- 11'h5b3: data = 8'b00110000; // **
- 11'h5b4: data = 8'b00110000; // **
- 11'h5b5: data = 8'b00110000; // **
- 11'h5b6: data = 8'b00110000; // **
- 11'h5b7: data = 8'b00110000; // **
- 11'h5b8: data = 8'b00110000; // **
- 11'h5b9: data = 8'b00110000; // **
- 11'h5ba: data = 8'b00110000; // **
- 11'h5bb: data = 8'b00111100; // ****
- 11'h5bc: data = 8'b00000000; //
- 11'h5bd: data = 8'b00000000; //
- 11'h5be: data = 8'b00000000; //
- 11'h5bf: data = 8'b00000000; //
- //code x5c
- 11'h5c0: data = 8'b00000000; //
- 11'h5c1: data = 8'b00000000; //
- 11'h5c2: data = 8'b00000000; //
- 11'h5c3: data = 8'b10000000; // *
- 11'h5c4: data = 8'b11000000; // **
- 11'h5c5: data = 8'b11100000; // ***
- 11'h5c6: data = 8'b01110000; // ***
- 11'h5c7: data = 8'b00111000; // ***
- 11'h5c8: data = 8'b00011100; // ***
- 11'h5c9: data = 8'b00001110; // ***
- 11'h5ca: data = 8'b00000110; // **
- 11'h5cb: data = 8'b00000010; // *
- 11'h5cc: data = 8'b00000000; //
- 11'h5cd: data = 8'b00000000; //
- 11'h5ce: data = 8'b00000000; //
- 11'h5cf: data = 8'b00000000; //
- //code x5d
- 11'h5d0: data = 8'b00000000; //
- 11'h5d1: data = 8'b00000000; //
- 11'h5d2: data = 8'b00111100; // ****
- 11'h5d3: data = 8'b00001100; // **
- 11'h5d4: data = 8'b00001100; // **
- 11'h5d5: data = 8'b00001100; // **
- 11'h5d6: data = 8'b00001100; // **
- 11'h5d7: data = 8'b00001100; // **
- 11'h5d8: data = 8'b00001100; // **
- 11'h5d9: data = 8'b00001100; // **
- 11'h5da: data = 8'b00001100; // **
- 11'h5db: data = 8'b00111100; // ****
- 11'h5dc: data = 8'b00000000; //
- 11'h5dd: data = 8'b00000000; //
- 11'h5de: data = 8'b00000000; //
- 11'h5df: data = 8'b00000000; //
- //code x5e
- 11'h5e0: data = 8'b00010000; // *
- 11'h5e1: data = 8'b00111000; // ***
- 11'h5e2: data = 8'b01101100; // ** **
- 11'h5e3: data = 8'b11000110; // ** **
- 11'h5e4: data = 8'b00000000; //
- 11'h5e5: data = 8'b00000000; //
- 11'h5e6: data = 8'b00000000; //
- 11'h5e7: data = 8'b00000000; //
- 11'h5e8: data = 8'b00000000; //
- 11'h5e9: data = 8'b00000000; //
- 11'h5ea: data = 8'b00000000; //
- 11'h5eb: data = 8'b00000000; //
- 11'h5ec: data = 8'b00000000; //
- 11'h5ed: data = 8'b00000000; //
- 11'h5ee: data = 8'b00000000; //
- 11'h5ef: data = 8'b00000000; //
- //code x5f
- 11'h5f0: data = 8'b00000000; //
- 11'h5f1: data = 8'b00000000; //
- 11'h5f2: data = 8'b00000000; //
- 11'h5f3: data = 8'b00000000; //
- 11'h5f4: data = 8'b00000000; //
- 11'h5f5: data = 8'b00000000; //
- 11'h5f6: data = 8'b00000000; //
- 11'h5f7: data = 8'b00000000; //
- 11'h5f8: data = 8'b00000000; //
- 11'h5f9: data = 8'b00000000; //
- 11'h5fa: data = 8'b00000000; //
- 11'h5fb: data = 8'b00000000; //
- 11'h5fc: data = 8'b00000000; //
- 11'h5fd: data = 8'b11111111; // ********
- 11'h5fe: data = 8'b00000000; //
- 11'h5ff: data = 8'b00000000; //
- //code x60
- 11'h600: data = 8'b00110000; // **
- 11'h601: data = 8'b00110000; // **
- 11'h602: data = 8'b00011000; // **
- 11'h603: data = 8'b00000000; //
- 11'h604: data = 8'b00000000; //
- 11'h605: data = 8'b00000000; //
- 11'h606: data = 8'b00000000; //
- 11'h607: data = 8'b00000000; //
- 11'h608: data = 8'b00000000; //
- 11'h609: data = 8'b00000000; //
- 11'h60a: data = 8'b00000000; //
- 11'h60b: data = 8'b00000000; //
- 11'h60c: data = 8'b00000000; //
- 11'h60d: data = 8'b00000000; //
- 11'h60e: data = 8'b00000000; //
- 11'h60f: data = 8'b00000000; //
- //code x61
- 11'h610: data = 8'b00000000; //
- 11'h611: data = 8'b00000000; //
- 11'h612: data = 8'b00000000; //
- 11'h613: data = 8'b00000000; //
- 11'h614: data = 8'b00000000; //
- 11'h615: data = 8'b01111000; // ****
- 11'h616: data = 8'b00001100; // **
- 11'h617: data = 8'b01111100; // *****
- 11'h618: data = 8'b11001100; // ** **
- 11'h619: data = 8'b11001100; // ** **
- 11'h61a: data = 8'b11001100; // ** **
- 11'h61b: data = 8'b01110110; // *** **
- 11'h61c: data = 8'b00000000; //
- 11'h61d: data = 8'b00000000; //
- 11'h61e: data = 8'b00000000; //
- 11'h61f: data = 8'b00000000; //
- //code x62
- 11'h620: data = 8'b00000000; //
- 11'h621: data = 8'b00000000; //
- 11'h622: data = 8'b11100000; // ***
- 11'h623: data = 8'b01100000; // **
- 11'h624: data = 8'b01100000; // **
- 11'h625: data = 8'b01111000; // ****
- 11'h626: data = 8'b01101100; // ** **
- 11'h627: data = 8'b01100110; // ** **
- 11'h628: data = 8'b01100110; // ** **
- 11'h629: data = 8'b01100110; // ** **
- 11'h62a: data = 8'b01100110; // ** **
- 11'h62b: data = 8'b01111100; // *****
- 11'h62c: data = 8'b00000000; //
- 11'h62d: data = 8'b00000000; //
- 11'h62e: data = 8'b00000000; //
- 11'h62f: data = 8'b00000000; //
- //code x63
- 11'h630: data = 8'b00000000; //
- 11'h631: data = 8'b00000000; //
- 11'h632: data = 8'b00000000; //
- 11'h633: data = 8'b00000000; //
- 11'h634: data = 8'b00000000; //
- 11'h635: data = 8'b01111100; // *****
- 11'h636: data = 8'b11000110; // ** **
- 11'h637: data = 8'b11000000; // **
- 11'h638: data = 8'b11000000; // **
- 11'h639: data = 8'b11000000; // **
- 11'h63a: data = 8'b11000110; // ** **
- 11'h63b: data = 8'b01111100; // *****
- 11'h63c: data = 8'b00000000; //
- 11'h63d: data = 8'b00000000; //
- 11'h63e: data = 8'b00000000; //
- 11'h63f: data = 8'b00000000; //
- //code x64
- 11'h640: data = 8'b00000000; //
- 11'h641: data = 8'b00000000; //
- 11'h642: data = 8'b00011100; // ***
- 11'h643: data = 8'b00001100; // **
- 11'h644: data = 8'b00001100; // **
- 11'h645: data = 8'b00111100; // ****
- 11'h646: data = 8'b01101100; // ** **
- 11'h647: data = 8'b11001100; // ** **
- 11'h648: data = 8'b11001100; // ** **
- 11'h649: data = 8'b11001100; // ** **
- 11'h64a: data = 8'b11001100; // ** **
- 11'h64b: data = 8'b01110110; // *** **
- 11'h64c: data = 8'b00000000; //
- 11'h64d: data = 8'b00000000; //
- 11'h64e: data = 8'b00000000; //
- 11'h64f: data = 8'b00000000; //
- //code x65
- 11'h650: data = 8'b00000000; //
- 11'h651: data = 8'b00000000; //
- 11'h652: data = 8'b00000000; //
- 11'h653: data = 8'b00000000; //
- 11'h654: data = 8'b00000000; //
- 11'h655: data = 8'b01111100; // *****
- 11'h656: data = 8'b11000110; // ** **
- 11'h657: data = 8'b11111110; // *******
- 11'h658: data = 8'b11000000; // **
- 11'h659: data = 8'b11000000; // **
- 11'h65a: data = 8'b11000110; // ** **
- 11'h65b: data = 8'b01111100; // *****
- 11'h65c: data = 8'b00000000; //
- 11'h65d: data = 8'b00000000; //
- 11'h65e: data = 8'b00000000; //
- 11'h65f: data = 8'b00000000; //
- //code x66
- 11'h660: data = 8'b00000000; //
- 11'h661: data = 8'b00000000; //
- 11'h662: data = 8'b00111000; // ***
- 11'h663: data = 8'b01101100; // ** **
- 11'h664: data = 8'b01100100; // ** *
- 11'h665: data = 8'b01100000; // **
- 11'h666: data = 8'b11110000; // ****
- 11'h667: data = 8'b01100000; // **
- 11'h668: data = 8'b01100000; // **
- 11'h669: data = 8'b01100000; // **
- 11'h66a: data = 8'b01100000; // **
- 11'h66b: data = 8'b11110000; // ****
- 11'h66c: data = 8'b00000000; //
- 11'h66d: data = 8'b00000000; //
- 11'h66e: data = 8'b00000000; //
- 11'h66f: data = 8'b00000000; //
- //code x67
- 11'h670: data = 8'b00000000; //
- 11'h671: data = 8'b00000000; //
- 11'h672: data = 8'b00000000; //
- 11'h673: data = 8'b00000000; //
- 11'h674: data = 8'b00000000; //
- 11'h675: data = 8'b01110110; // *** **
- 11'h676: data = 8'b11001100; // ** **
- 11'h677: data = 8'b11001100; // ** **
- 11'h678: data = 8'b11001100; // ** **
- 11'h679: data = 8'b11001100; // ** **
- 11'h67a: data = 8'b11001100; // ** **
- 11'h67b: data = 8'b01111100; // *****
- 11'h67c: data = 8'b00001100; // **
- 11'h67d: data = 8'b11001100; // ** **
- 11'h67e: data = 8'b01111000; // ****
- 11'h67f: data = 8'b00000000; //
- //code x68
- 11'h680: data = 8'b00000000; //
- 11'h681: data = 8'b00000000; //
- 11'h682: data = 8'b11100000; // ***
- 11'h683: data = 8'b01100000; // **
- 11'h684: data = 8'b01100000; // **
- 11'h685: data = 8'b01101100; // ** **
- 11'h686: data = 8'b01110110; // *** **
- 11'h687: data = 8'b01100110; // ** **
- 11'h688: data = 8'b01100110; // ** **
- 11'h689: data = 8'b01100110; // ** **
- 11'h68a: data = 8'b01100110; // ** **
- 11'h68b: data = 8'b11100110; // *** **
- 11'h68c: data = 8'b00000000; //
- 11'h68d: data = 8'b00000000; //
- 11'h68e: data = 8'b00000000; //
- 11'h68f: data = 8'b00000000; //
- //code x69
- 11'h690: data = 8'b00000000; //
- 11'h691: data = 8'b00000000; //
- 11'h692: data = 8'b00011000; // **
- 11'h693: data = 8'b00011000; // **
- 11'h694: data = 8'b00000000; //
- 11'h695: data = 8'b00111000; // ***
- 11'h696: data = 8'b00011000; // **
- 11'h697: data = 8'b00011000; // **
- 11'h698: data = 8'b00011000; // **
- 11'h699: data = 8'b00011000; // **
- 11'h69a: data = 8'b00011000; // **
- 11'h69b: data = 8'b00111100; // ****
- 11'h69c: data = 8'b00000000; //
- 11'h69d: data = 8'b00000000; //
- 11'h69e: data = 8'b00000000; //
- 11'h69f: data = 8'b00000000; //
- //code x6a
- 11'h6a0: data = 8'b00000000; //
- 11'h6a1: data = 8'b00000000; //
- 11'h6a2: data = 8'b00000110; // **
- 11'h6a3: data = 8'b00000110; // **
- 11'h6a4: data = 8'b00000000; //
- 11'h6a5: data = 8'b00001110; // ***
- 11'h6a6: data = 8'b00000110; // **
- 11'h6a7: data = 8'b00000110; // **
- 11'h6a8: data = 8'b00000110; // **
- 11'h6a9: data = 8'b00000110; // **
- 11'h6aa: data = 8'b00000110; // **
- 11'h6ab: data = 8'b00000110; // **
- 11'h6ac: data = 8'b01100110; // ** **
- 11'h6ad: data = 8'b01100110; // ** **
- 11'h6ae: data = 8'b00111100; // ****
- 11'h6af: data = 8'b00000000; //
- //code x6b
- 11'h6b0: data = 8'b00000000; //
- 11'h6b1: data = 8'b00000000; //
- 11'h6b2: data = 8'b11100000; // ***
- 11'h6b3: data = 8'b01100000; // **
- 11'h6b4: data = 8'b01100000; // **
- 11'h6b5: data = 8'b01100110; // ** **
- 11'h6b6: data = 8'b01101100; // ** **
- 11'h6b7: data = 8'b01111000; // ****
- 11'h6b8: data = 8'b01111000; // ****
- 11'h6b9: data = 8'b01101100; // ** **
- 11'h6ba: data = 8'b01100110; // ** **
- 11'h6bb: data = 8'b11100110; // *** **
- 11'h6bc: data = 8'b00000000; //
- 11'h6bd: data = 8'b00000000; //
- 11'h6be: data = 8'b00000000; //
- 11'h6bf: data = 8'b00000000; //
- //code x6c
- 11'h6c0: data = 8'b00000000; //
- 11'h6c1: data = 8'b00000000; //
- 11'h6c2: data = 8'b00111000; // ***
- 11'h6c3: data = 8'b00011000; // **
- 11'h6c4: data = 8'b00011000; // **
- 11'h6c5: data = 8'b00011000; // **
- 11'h6c6: data = 8'b00011000; // **
- 11'h6c7: data = 8'b00011000; // **
- 11'h6c8: data = 8'b00011000; // **
- 11'h6c9: data = 8'b00011000; // **
- 11'h6ca: data = 8'b00011000; // **
- 11'h6cb: data = 8'b00111100; // ****
- 11'h6cc: data = 8'b00000000; //
- 11'h6cd: data = 8'b00000000; //
- 11'h6ce: data = 8'b00000000; //
- 11'h6cf: data = 8'b00000000; //
- //code x6d
- 11'h6d0: data = 8'b00000000; //
- 11'h6d1: data = 8'b00000000; //
- 11'h6d2: data = 8'b00000000; //
- 11'h6d3: data = 8'b00000000; //
- 11'h6d4: data = 8'b00000000; //
- 11'h6d5: data = 8'b11100110; // *** **
- 11'h6d6: data = 8'b11111111; // ********
- 11'h6d7: data = 8'b11011011; // ** ** **
- 11'h6d8: data = 8'b11011011; // ** ** **
- 11'h6d9: data = 8'b11011011; // ** ** **
- 11'h6da: data = 8'b11011011; // ** ** **
- 11'h6db: data = 8'b11011011; // ** ** **
- 11'h6dc: data = 8'b00000000; //
- 11'h6dd: data = 8'b00000000; //
- 11'h6de: data = 8'b00000000; //
- 11'h6df: data = 8'b00000000; //
- //code x6e
- 11'h6e0: data = 8'b00000000; //
- 11'h6e1: data = 8'b00000000; //
- 11'h6e2: data = 8'b00000000; //
- 11'h6e3: data = 8'b00000000; //
- 11'h6e4: data = 8'b00000000; //
- 11'h6e5: data = 8'b11011100; // ** ***
- 11'h6e6: data = 8'b01100110; // ** **
- 11'h6e7: data = 8'b01100110; // ** **
- 11'h6e8: data = 8'b01100110; // ** **
- 11'h6e9: data = 8'b01100110; // ** **
- 11'h6ea: data = 8'b01100110; // ** **
- 11'h6eb: data = 8'b01100110; // ** **
- 11'h6ec: data = 8'b00000000; //
- 11'h6ed: data = 8'b00000000; //
- 11'h6ee: data = 8'b00000000; //
- 11'h6ef: data = 8'b00000000; //
- //code x6f
- 11'h6f0: data = 8'b00000000; //
- 11'h6f1: data = 8'b00000000; //
- 11'h6f2: data = 8'b00000000; //
- 11'h6f3: data = 8'b00000000; //
- 11'h6f4: data = 8'b00000000; //
- 11'h6f5: data = 8'b01111100; // *****
- 11'h6f6: data = 8'b11000110; // ** **
- 11'h6f7: data = 8'b11000110; // ** **
- 11'h6f8: data = 8'b11000110; // ** **
- 11'h6f9: data = 8'b11000110; // ** **
- 11'h6fa: data = 8'b11000110; // ** **
- 11'h6fb: data = 8'b01111100; // *****
- 11'h6fc: data = 8'b00000000; //
- 11'h6fd: data = 8'b00000000; //
- 11'h6fe: data = 8'b00000000; //
- 11'h6ff: data = 8'b00000000; //
- //code x70
- 11'h700: data = 8'b00000000; //
- 11'h701: data = 8'b00000000; //
- 11'h702: data = 8'b00000000; //
- 11'h703: data = 8'b00000000; //
- 11'h704: data = 8'b00000000; //
- 11'h705: data = 8'b11011100; // ** ***
- 11'h706: data = 8'b01100110; // ** **
- 11'h707: data = 8'b01100110; // ** **
- 11'h708: data = 8'b01100110; // ** **
- 11'h709: data = 8'b01100110; // ** **
- 11'h70a: data = 8'b01100110; // ** **
- 11'h70b: data = 8'b01111100; // *****
- 11'h70c: data = 8'b01100000; // **
- 11'h70d: data = 8'b01100000; // **
- 11'h70e: data = 8'b11110000; // ****
- 11'h70f: data = 8'b00000000; //
- //code x71
- 11'h710: data = 8'b00000000; //
- 11'h711: data = 8'b00000000; //
- 11'h712: data = 8'b00000000; //
- 11'h713: data = 8'b00000000; //
- 11'h714: data = 8'b00000000; //
- 11'h715: data = 8'b01110110; // *** **
- 11'h716: data = 8'b11001100; // ** **
- 11'h717: data = 8'b11001100; // ** **
- 11'h718: data = 8'b11001100; // ** **
- 11'h719: data = 8'b11001100; // ** **
- 11'h71a: data = 8'b11001100; // ** **
- 11'h71b: data = 8'b01111100; // *****
- 11'h71c: data = 8'b00001100; // **
- 11'h71d: data = 8'b00001100; // **
- 11'h71e: data = 8'b00011110; // ****
- 11'h71f: data = 8'b00000000; //
- //code x72
- 11'h720: data = 8'b00000000; //
- 11'h721: data = 8'b00000000; //
- 11'h722: data = 8'b00000000; //
- 11'h723: data = 8'b00000000; //
- 11'h724: data = 8'b00000000; //
- 11'h725: data = 8'b11011100; // ** ***
- 11'h726: data = 8'b01110110; // *** **
- 11'h727: data = 8'b01100110; // ** **
- 11'h728: data = 8'b01100000; // **
- 11'h729: data = 8'b01100000; // **
- 11'h72a: data = 8'b01100000; // **
- 11'h72b: data = 8'b11110000; // ****
- 11'h72c: data = 8'b00000000; //
- 11'h72d: data = 8'b00000000; //
- 11'h72e: data = 8'b00000000; //
- 11'h72f: data = 8'b00000000; //
- //code x73
- 11'h730: data = 8'b00000000; //
- 11'h731: data = 8'b00000000; //
- 11'h732: data = 8'b00000000; //
- 11'h733: data = 8'b00000000; //
- 11'h734: data = 8'b00000000; //
- 11'h735: data = 8'b01111100; // *****
- 11'h736: data = 8'b11000110; // ** **
- 11'h737: data = 8'b01100000; // **
- 11'h738: data = 8'b00111000; // ***
- 11'h739: data = 8'b00001100; // **
- 11'h73a: data = 8'b11000110; // ** **
- 11'h73b: data = 8'b01111100; // *****
- 11'h73c: data = 8'b00000000; //
- 11'h73d: data = 8'b00000000; //
- 11'h73e: data = 8'b00000000; //
- 11'h73f: data = 8'b00000000; //
- //code x74
- 11'h740: data = 8'b00000000; //
- 11'h741: data = 8'b00000000; //
- 11'h742: data = 8'b00010000; // *
- 11'h743: data = 8'b00110000; // **
- 11'h744: data = 8'b00110000; // **
- 11'h745: data = 8'b11111100; // ******
- 11'h746: data = 8'b00110000; // **
- 11'h747: data = 8'b00110000; // **
- 11'h748: data = 8'b00110000; // **
- 11'h749: data = 8'b00110000; // **
- 11'h74a: data = 8'b00110110; // ** **
- 11'h74b: data = 8'b00011100; // ***
- 11'h74c: data = 8'b00000000; //
- 11'h74d: data = 8'b00000000; //
- 11'h74e: data = 8'b00000000; //
- 11'h74f: data = 8'b00000000; //
- //code x75
- 11'h750: data = 8'b00000000; //
- 11'h751: data = 8'b00000000; //
- 11'h752: data = 8'b00000000; //
- 11'h753: data = 8'b00000000; //
- 11'h754: data = 8'b00000000; //
- 11'h755: data = 8'b11001100; // ** **
- 11'h756: data = 8'b11001100; // ** **
- 11'h757: data = 8'b11001100; // ** **
- 11'h758: data = 8'b11001100; // ** **
- 11'h759: data = 8'b11001100; // ** **
- 11'h75a: data = 8'b11001100; // ** **
- 11'h75b: data = 8'b01110110; // *** **
- 11'h75c: data = 8'b00000000; //
- 11'h75d: data = 8'b00000000; //
- 11'h75e: data = 8'b00000000; //
- 11'h75f: data = 8'b00000000; //
- //code x76
- 11'h760: data = 8'b00000000; //
- 11'h761: data = 8'b00000000; //
- 11'h762: data = 8'b00000000; //
- 11'h763: data = 8'b00000000; //
- 11'h764: data = 8'b00000000; //
- 11'h765: data = 8'b11000011; // ** **
- 11'h766: data = 8'b11000011; // ** **
- 11'h767: data = 8'b11000011; // ** **
- 11'h768: data = 8'b11000011; // ** **
- 11'h769: data = 8'b01100110; // ** **
- 11'h76a: data = 8'b00111100; // ****
- 11'h76b: data = 8'b00011000; // **
- 11'h76c: data = 8'b00000000; //
- 11'h76d: data = 8'b00000000; //
- 11'h76e: data = 8'b00000000; //
- 11'h76f: data = 8'b00000000; //
- //code x77
- 11'h770: data = 8'b00000000; //
- 11'h771: data = 8'b00000000; //
- 11'h772: data = 8'b00000000; //
- 11'h773: data = 8'b00000000; //
- 11'h774: data = 8'b00000000; //
- 11'h775: data = 8'b11000011; // ** **
- 11'h776: data = 8'b11000011; // ** **
- 11'h777: data = 8'b11000011; // ** **
- 11'h778: data = 8'b11011011; // ** ** **
- 11'h779: data = 8'b11011011; // ** ** **
- 11'h77a: data = 8'b11111111; // ********
- 11'h77b: data = 8'b01100110; // ** **
- 11'h77c: data = 8'b00000000; //
- 11'h77d: data = 8'b00000000; //
- 11'h77e: data = 8'b00000000; //
- 11'h77f: data = 8'b00000000; //
- //code x78
- 11'h780: data = 8'b00000000; //
- 11'h781: data = 8'b00000000; //
- 11'h782: data = 8'b00000000; //
- 11'h783: data = 8'b00000000; //
- 11'h784: data = 8'b00000000; //
- 11'h785: data = 8'b11000011; // ** **
- 11'h786: data = 8'b01100110; // ** **
- 11'h787: data = 8'b00111100; // ****
- 11'h788: data = 8'b00011000; // **
- 11'h789: data = 8'b00111100; // ****
- 11'h78a: data = 8'b01100110; // ** **
- 11'h78b: data = 8'b11000011; // ** **
- 11'h78c: data = 8'b00000000; //
- 11'h78d: data = 8'b00000000; //
- 11'h78e: data = 8'b00000000; //
- 11'h78f: data = 8'b00000000; //
- //code x79
- 11'h790: data = 8'b00000000; //
- 11'h791: data = 8'b00000000; //
- 11'h792: data = 8'b00000000; //
- 11'h793: data = 8'b00000000; //
- 11'h794: data = 8'b00000000; //
- 11'h795: data = 8'b11000110; // ** **
- 11'h796: data = 8'b11000110; // ** **
- 11'h797: data = 8'b11000110; // ** **
- 11'h798: data = 8'b11000110; // ** **
- 11'h799: data = 8'b11000110; // ** **
- 11'h79a: data = 8'b11000110; // ** **
- 11'h79b: data = 8'b01111110; // ******
- 11'h79c: data = 8'b00000110; // **
- 11'h79d: data = 8'b00001100; // **
- 11'h79e: data = 8'b11111000; // *****
- 11'h79f: data = 8'b00000000; //
- //code x7a
- 11'h7a0: data = 8'b00000000; //
- 11'h7a1: data = 8'b00000000; //
- 11'h7a2: data = 8'b00000000; //
- 11'h7a3: data = 8'b00000000; //
- 11'h7a4: data = 8'b00000000; //
- 11'h7a5: data = 8'b11111110; // *******
- 11'h7a6: data = 8'b11001100; // ** **
- 11'h7a7: data = 8'b00011000; // **
- 11'h7a8: data = 8'b00110000; // **
- 11'h7a9: data = 8'b01100000; // **
- 11'h7aa: data = 8'b11000110; // ** **
- 11'h7ab: data = 8'b11111110; // *******
- 11'h7ac: data = 8'b00000000; //
- 11'h7ad: data = 8'b00000000; //
- 11'h7ae: data = 8'b00000000; //
- 11'h7af: data = 8'b00000000; //
- //code x7b
- 11'h7b0: data = 8'b00000000; //
- 11'h7b1: data = 8'b00000000; //
- 11'h7b2: data = 8'b00001110; // ***
- 11'h7b3: data = 8'b00011000; // **
- 11'h7b4: data = 8'b00011000; // **
- 11'h7b5: data = 8'b00011000; // **
- 11'h7b6: data = 8'b01110000; // ***
- 11'h7b7: data = 8'b00011000; // **
- 11'h7b8: data = 8'b00011000; // **
- 11'h7b9: data = 8'b00011000; // **
- 11'h7ba: data = 8'b00011000; // **
- 11'h7bb: data = 8'b00001110; // ***
- 11'h7bc: data = 8'b00000000; //
- 11'h7bd: data = 8'b00000000; //
- 11'h7be: data = 8'b00000000; //
- 11'h7bf: data = 8'b00000000; //
- //code x7c
- 11'h7c0: data = 8'b00000000; //
- 11'h7c1: data = 8'b00000000; //
- 11'h7c2: data = 8'b00011000; // **
- 11'h7c3: data = 8'b00011000; // **
- 11'h7c4: data = 8'b00011000; // **
- 11'h7c5: data = 8'b00011000; // **
- 11'h7c6: data = 8'b00000000; //
- 11'h7c7: data = 8'b00011000; // **
- 11'h7c8: data = 8'b00011000; // **
- 11'h7c9: data = 8'b00011000; // **
- 11'h7ca: data = 8'b00011000; // **
- 11'h7cb: data = 8'b00011000; // **
- 11'h7cc: data = 8'b00000000; //
- 11'h7cd: data = 8'b00000000; //
- 11'h7ce: data = 8'b00000000; //
- 11'h7cf: data = 8'b00000000; //
- //code x7d
- 11'h7d0: data = 8'b00000000; //
- 11'h7d1: data = 8'b00000000; //
- 11'h7d2: data = 8'b01110000; // ***
- 11'h7d3: data = 8'b00011000; // **
- 11'h7d4: data = 8'b00011000; // **
- 11'h7d5: data = 8'b00011000; // **
- 11'h7d6: data = 8'b00001110; // ***
- 11'h7d7: data = 8'b00011000; // **
- 11'h7d8: data = 8'b00011000; // **
- 11'h7d9: data = 8'b00011000; // **
- 11'h7da: data = 8'b00011000; // **
- 11'h7db: data = 8'b01110000; // ***
- 11'h7dc: data = 8'b00000000; //
- 11'h7dd: data = 8'b00000000; //
- 11'h7de: data = 8'b00000000; //
- 11'h7df: data = 8'b00000000; //
- //code x7e
- 11'h7e0: data = 8'b00000000; //
- 11'h7e1: data = 8'b00000000; //
- 11'h7e2: data = 8'b01110110; // *** **
- 11'h7e3: data = 8'b11011100; // ** ***
- 11'h7e4: data = 8'b00000000; //
- 11'h7e5: data = 8'b00000000; //
- 11'h7e6: data = 8'b00000000; //
- 11'h7e7: data = 8'b00000000; //
- 11'h7e8: data = 8'b00000000; //
- 11'h7e9: data = 8'b00000000; //
- 11'h7ea: data = 8'b00000000; //
- 11'h7eb: data = 8'b00000000; //
- 11'h7ec: data = 8'b00000000; //
- 11'h7ed: data = 8'b00000000; //
- 11'h7ee: data = 8'b00000000; //
- 11'h7ef: data = 8'b00000000; //
- //code x7f
- 11'h7f0: data = 8'b00000000; //
- 11'h7f1: data = 8'b00000000; //
- 11'h7f2: data = 8'b00000000; //
- 11'h7f3: data = 8'b00000000; //
- 11'h7f4: data = 8'b00010000; // *
- 11'h7f5: data = 8'b00111000; // ***
- 11'h7f6: data = 8'b01101100; // ** **
- 11'h7f7: data = 8'b11000110; // ** **
- 11'h7f8: data = 8'b11000110; // ** **
- 11'h7f9: data = 8'b11000110; // ** **
- 11'h7fa: data = 8'b11111110; // *******
- 11'h7fb: data = 8'b00000000; //
- 11'h7fc: data = 8'b00000000; //
- 11'h7fd: data = 8'b00000000; //
- 11'h7fe: data = 8'b00000000; //
- 11'h7ff: data = 8'b00000000; //
- endcase
-
-endmodule
\ No newline at end of file
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/debounce.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/debounce.v
deleted file mode 100644
index 0aa3f70..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/debounce.v
+++ /dev/null
@@ -1,33 +0,0 @@
-`timescale 1ns / 1ps
-
-module debounce(
- input wire clk,
- input wire button,
- output reg pbreg
- );
-
- reg [2:0] count;
-
- always @(posedge clk)
- begin
- if(button == 0)
- begin
- pbreg = 0;
- count = 0;
- end
- else
- begin
- if(count < 7)
- begin
- count = count + 1;
- pbreg = 0;
- end
- else
- begin
- count = 7;
- pbreg = 1;
- end
- end
- end
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/front_rom.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/front_rom.v
deleted file mode 100644
index bd22c8d..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/front_rom.v
+++ /dev/null
@@ -1,2192 +0,0 @@
-module font_rom
- (
- input wire clk,
- input wire [10:0] addr,
- output reg [7:0] data
- );
- reg [10:0] addr_reg;
-
- always @(posedge clk)
- addr_reg <= addr;
-
- always @*
- case (addr_reg)
- //code x00
- 11'h000: data = 8'b00000000; //
- 11'h001: data = 8'b00000000; //
- 11'h002: data = 8'b00000000; //
- 11'h003: data = 8'b00000000; //
- 11'h004: data = 8'b00000000; //
- 11'h005: data = 8'b00000000; //
- 11'h006: data = 8'b00000000; //
- 11'h007: data = 8'b00000000; //
- 11'h008: data = 8'b00000000; //
- 11'h009: data = 8'b00000000; //
- 11'h00a: data = 8'b00000000; //
- 11'h00b: data = 8'b00000000; //
- 11'h00c: data = 8'b00000000; //
- 11'h00d: data = 8'b00000000; //
- 11'h00e: data = 8'b00000000; //
- 11'h00f: data = 8'b00000000; //
- //code x01
- 11'h010: data = 8'b00000000; //
- 11'h011: data = 8'b00000000; //
- 11'h012: data = 8'b01111110; // ******
- 11'h013: data = 8'b10000001; // * *
- 11'h014: data = 8'b10100101; // * * * *
- 11'h015: data = 8'b10000001; // * *
- 11'h016: data = 8'b10000001; // * *
- 11'h017: data = 8'b10111101; // * **** *
- 11'h018: data = 8'b10011001; // * ** *
- 11'h019: data = 8'b10000001; // * *
- 11'h01a: data = 8'b10000001; // * *
- 11'h01b: data = 8'b01111110; // ******
- 11'h01c: data = 8'b00000000; //
- 11'h01d: data = 8'b00000000; //
- 11'h01e: data = 8'b00000000; //
- 11'h01f: data = 8'b00000000; //
- //code x02
- 11'h020: data = 8'b00000000; //
- 11'h021: data = 8'b00000000; //
- 11'h022: data = 8'b01111110; // ******
- 11'h023: data = 8'b11111111; // ********
- 11'h024: data = 8'b11011011; // ** ** **
- 11'h025: data = 8'b11111111; // ********
- 11'h026: data = 8'b11111111; // ********
- 11'h027: data = 8'b11000011; // ** **
- 11'h028: data = 8'b11100111; // *** ***
- 11'h029: data = 8'b11111111; // ********
- 11'h02a: data = 8'b11111111; // ********
- 11'h02b: data = 8'b01111110; // ******
- 11'h02c: data = 8'b00000000; //
- 11'h02d: data = 8'b00000000; //
- 11'h02e: data = 8'b00000000; //
- 11'h02f: data = 8'b00000000; //
- //code x03
- 11'h030: data = 8'b00000000; //
- 11'h031: data = 8'b00000000; //
- 11'h032: data = 8'b00000000; //
- 11'h033: data = 8'b00000000; //
- 11'h034: data = 8'b01101100; // ** **
- 11'h035: data = 8'b11111110; // *******
- 11'h036: data = 8'b11111110; // *******
- 11'h037: data = 8'b11111110; // *******
- 11'h038: data = 8'b11111110; // *******
- 11'h039: data = 8'b01111100; // *****
- 11'h03a: data = 8'b00111000; // ***
- 11'h03b: data = 8'b00010000; // *
- 11'h03c: data = 8'b00000000; //
- 11'h03d: data = 8'b00000000; //
- 11'h03e: data = 8'b00000000; //
- 11'h03f: data = 8'b00000000; //
- //code x04
- 11'h040: data = 8'b00000000; //
- 11'h041: data = 8'b00000000; //
- 11'h042: data = 8'b00000000; //
- 11'h043: data = 8'b00000000; //
- 11'h044: data = 8'b00010000; // *
- 11'h045: data = 8'b00111000; // ***
- 11'h046: data = 8'b01111100; // *****
- 11'h047: data = 8'b11111110; // *******
- 11'h048: data = 8'b01111100; // *****
- 11'h049: data = 8'b00111000; // ***
- 11'h04a: data = 8'b00010000; // *
- 11'h04b: data = 8'b00000000; //
- 11'h04c: data = 8'b00000000; //
- 11'h04d: data = 8'b00000000; //
- 11'h04e: data = 8'b00000000; //
- 11'h04f: data = 8'b00000000; //
- //code x05
- 11'h050: data = 8'b00000000; //
- 11'h051: data = 8'b00000000; //
- 11'h052: data = 8'b00000000; //
- 11'h053: data = 8'b00011000; // **
- 11'h054: data = 8'b00111100; // ****
- 11'h055: data = 8'b00111100; // ****
- 11'h056: data = 8'b11100111; // *** ***
- 11'h057: data = 8'b11100111; // *** ***
- 11'h058: data = 8'b11100111; // *** ***
- 11'h059: data = 8'b00011000; // **
- 11'h05a: data = 8'b00011000; // **
- 11'h05b: data = 8'b00111100; // ****
- 11'h05c: data = 8'b00000000; //
- 11'h05d: data = 8'b00000000; //
- 11'h05e: data = 8'b00000000; //
- 11'h05f: data = 8'b00000000; //
- //code x06
- 11'h060: data = 8'b00000000; //
- 11'h061: data = 8'b00000000; //
- 11'h062: data = 8'b00000000; //
- 11'h063: data = 8'b00011000; // **
- 11'h064: data = 8'b00111100; // ****
- 11'h065: data = 8'b01111110; // ******
- 11'h066: data = 8'b11111111; // ********
- 11'h067: data = 8'b11111111; // ********
- 11'h068: data = 8'b01111110; // ******
- 11'h069: data = 8'b00011000; // **
- 11'h06a: data = 8'b00011000; // **
- 11'h06b: data = 8'b00111100; // ****
- 11'h06c: data = 8'b00000000; //
- 11'h06d: data = 8'b00000000; //
- 11'h06e: data = 8'b00000000; //
- 11'h06f: data = 8'b00000000; //
- //code x07
- 11'h070: data = 8'b00000000; //
- 11'h071: data = 8'b00000000; //
- 11'h072: data = 8'b00000000; //
- 11'h073: data = 8'b00000000; //
- 11'h074: data = 8'b00000000; //
- 11'h075: data = 8'b00000000; //
- 11'h076: data = 8'b00011000; // **
- 11'h077: data = 8'b00111100; // ****
- 11'h078: data = 8'b00111100; // ****
- 11'h079: data = 8'b00011000; // **
- 11'h07a: data = 8'b00000000; //
- 11'h07b: data = 8'b00000000; //
- 11'h07c: data = 8'b00000000; //
- 11'h07d: data = 8'b00000000; //
- 11'h07e: data = 8'b00000000; //
- 11'h07f: data = 8'b00000000; //
- //code x08
- 11'h080: data = 8'b11111111; // ********
- 11'h081: data = 8'b11111111; // ********
- 11'h082: data = 8'b11111111; // ********
- 11'h083: data = 8'b11111111; // ********
- 11'h084: data = 8'b11111111; // ********
- 11'h085: data = 8'b11111111; // ********
- 11'h086: data = 8'b11100111; // *** ***
- 11'h087: data = 8'b11000011; // ** **
- 11'h088: data = 8'b11000011; // ** **
- 11'h089: data = 8'b11100111; // *** ***
- 11'h08a: data = 8'b11111111; // ********
- 11'h08b: data = 8'b11111111; // ********
- 11'h08c: data = 8'b11111111; // ********
- 11'h08d: data = 8'b11111111; // ********
- 11'h08e: data = 8'b11111111; // ********
- 11'h08f: data = 8'b11111111; // ********
- //code x09
- 11'h090: data = 8'b00000000; //
- 11'h091: data = 8'b00000000; //
- 11'h092: data = 8'b00000000; //
- 11'h093: data = 8'b00000000; //
- 11'h094: data = 8'b00000000; //
- 11'h095: data = 8'b00111100; // ****
- 11'h096: data = 8'b01100110; // ** **
- 11'h097: data = 8'b01000010; // * *
- 11'h098: data = 8'b01000010; // * *
- 11'h099: data = 8'b01100110; // ** **
- 11'h09a: data = 8'b00111100; // ****
- 11'h09b: data = 8'b00000000; //
- 11'h09c: data = 8'b00000000; //
- 11'h09d: data = 8'b00000000; //
- 11'h09e: data = 8'b00000000; //
- 11'h09f: data = 8'b00000000; //
- //code x0a
- 11'h0a0: data = 8'b11111111; // ********
- 11'h0a1: data = 8'b11111111; // ********
- 11'h0a2: data = 8'b11111111; // ********
- 11'h0a3: data = 8'b11111111; // ********
- 11'h0a4: data = 8'b11111111; // ********
- 11'h0a5: data = 8'b11000011; // ** **
- 11'h0a6: data = 8'b10011001; // * ** *
- 11'h0a7: data = 8'b10111101; // * **** *
- 11'h0a8: data = 8'b10111101; // * **** *
- 11'h0a9: data = 8'b10011001; // * ** *
- 11'h0aa: data = 8'b11000011; // ** **
- 11'h0ab: data = 8'b11111111; // ********
- 11'h0ac: data = 8'b11111111; // ********
- 11'h0ad: data = 8'b11111111; // ********
- 11'h0ae: data = 8'b11111111; // ********
- 11'h0af: data = 8'b11111111; // ********
- //code x0b
- 11'h0b0: data = 8'b00000000; //
- 11'h0b1: data = 8'b00000000; //
- 11'h0b2: data = 8'b00011110; // ****
- 11'h0b3: data = 8'b00001110; // ***
- 11'h0b4: data = 8'b00011010; // ** *
- 11'h0b5: data = 8'b00110010; // ** *
- 11'h0b6: data = 8'b01111000; // ****
- 11'h0b7: data = 8'b11001100; // ** **
- 11'h0b8: data = 8'b11001100; // ** **
- 11'h0b9: data = 8'b11001100; // ** **
- 11'h0ba: data = 8'b11001100; // ** **
- 11'h0bb: data = 8'b01111000; // ****
- 11'h0bc: data = 8'b00000000; //
- 11'h0bd: data = 8'b00000000; //
- 11'h0be: data = 8'b00000000; //
- 11'h0bf: data = 8'b00000000; //
- //code x0c
- 11'h0c0: data = 8'b00000000; //
- 11'h0c1: data = 8'b00000000; //
- 11'h0c2: data = 8'b00111100; // ****
- 11'h0c3: data = 8'b01100110; // ** **
- 11'h0c4: data = 8'b01100110; // ** **
- 11'h0c5: data = 8'b01100110; // ** **
- 11'h0c6: data = 8'b01100110; // ** **
- 11'h0c7: data = 8'b00111100; // ****
- 11'h0c8: data = 8'b00011000; // **
- 11'h0c9: data = 8'b01111110; // ******
- 11'h0ca: data = 8'b00011000; // **
- 11'h0cb: data = 8'b00011000; // **
- 11'h0cc: data = 8'b00000000; //
- 11'h0cd: data = 8'b00000000; //
- 11'h0ce: data = 8'b00000000; //
- 11'h0cf: data = 8'b00000000; //
- //code x0d
- 11'h0d0: data = 8'b00000000; //
- 11'h0d1: data = 8'b00000000; //
- 11'h0d2: data = 8'b00111111; // ******
- 11'h0d3: data = 8'b00110011; // ** **
- 11'h0d4: data = 8'b00111111; // ******
- 11'h0d5: data = 8'b00110000; // **
- 11'h0d6: data = 8'b00110000; // **
- 11'h0d7: data = 8'b00110000; // **
- 11'h0d8: data = 8'b00110000; // **
- 11'h0d9: data = 8'b01110000; // ***
- 11'h0da: data = 8'b11110000; // ****
- 11'h0db: data = 8'b11100000; // ***
- 11'h0dc: data = 8'b00000000; //
- 11'h0dd: data = 8'b00000000; //
- 11'h0de: data = 8'b00000000; //
- 11'h0df: data = 8'b00000000; //
- //code x0e
- 11'h0e0: data = 8'b00000000; //
- 11'h0e1: data = 8'b00000000; //
- 11'h0e2: data = 8'b01111111; // *******
- 11'h0e3: data = 8'b01100011; // ** **
- 11'h0e4: data = 8'b01111111; // *******
- 11'h0e5: data = 8'b01100011; // ** **
- 11'h0e6: data = 8'b01100011; // ** **
- 11'h0e7: data = 8'b01100011; // ** **
- 11'h0e8: data = 8'b01100011; // ** **
- 11'h0e9: data = 8'b01100111; // ** ***
- 11'h0ea: data = 8'b11100111; // *** ***
- 11'h0eb: data = 8'b11100110; // *** **
- 11'h0ec: data = 8'b11000000; // **
- 11'h0ed: data = 8'b00000000; //
- 11'h0ee: data = 8'b00000000; //
- 11'h0ef: data = 8'b00000000; //
- //code x0f
- 11'h0f0: data = 8'b00000000; //
- 11'h0f1: data = 8'b00000000; //
- 11'h0f2: data = 8'b00000000; //
- 11'h0f3: data = 8'b00011000; // **
- 11'h0f4: data = 8'b00011000; // **
- 11'h0f5: data = 8'b11011011; // ** ** **
- 11'h0f6: data = 8'b00111100; // ****
- 11'h0f7: data = 8'b11100111; // *** ***
- 11'h0f8: data = 8'b00111100; // ****
- 11'h0f9: data = 8'b11011011; // ** ** **
- 11'h0fa: data = 8'b00011000; // **
- 11'h0fb: data = 8'b00011000; // **
- 11'h0fc: data = 8'b00000000; //
- 11'h0fd: data = 8'b00000000; //
- 11'h0fe: data = 8'b00000000; //
- 11'h0ff: data = 8'b00000000; //
- //code x10
- 11'h100: data = 8'b00000000; //
- 11'h101: data = 8'b10000000; // *
- 11'h102: data = 8'b11000000; // **
- 11'h103: data = 8'b11100000; // ***
- 11'h104: data = 8'b11110000; // ****
- 11'h105: data = 8'b11111000; // *****
- 11'h106: data = 8'b11111110; // *******
- 11'h107: data = 8'b11111000; // *****
- 11'h108: data = 8'b11110000; // ****
- 11'h109: data = 8'b11100000; // ***
- 11'h10a: data = 8'b11000000; // **
- 11'h10b: data = 8'b10000000; // *
- 11'h10c: data = 8'b00000000; //
- 11'h10d: data = 8'b00000000; //
- 11'h10e: data = 8'b00000000; //
- 11'h10f: data = 8'b00000000; //
- //code x11
- 11'h110: data = 8'b00000000; //
- 11'h111: data = 8'b00000010; // *
- 11'h112: data = 8'b00000110; // **
- 11'h113: data = 8'b00001110; // ***
- 11'h114: data = 8'b00011110; // ****
- 11'h115: data = 8'b00111110; // *****
- 11'h116: data = 8'b11111110; // *******
- 11'h117: data = 8'b00111110; // *****
- 11'h118: data = 8'b00011110; // ****
- 11'h119: data = 8'b00001110; // ***
- 11'h11a: data = 8'b00000110; // **
- 11'h11b: data = 8'b00000010; // *
- 11'h11c: data = 8'b00000000; //
- 11'h11d: data = 8'b00000000; //
- 11'h11e: data = 8'b00000000; //
- 11'h11f: data = 8'b00000000; //
- //code x12
- 11'h120: data = 8'b00000000; //
- 11'h121: data = 8'b00000000; //
- 11'h122: data = 8'b00011000; // **
- 11'h123: data = 8'b00111100; // ****
- 11'h124: data = 8'b01111110; // ******
- 11'h125: data = 8'b00011000; // **
- 11'h126: data = 8'b00011000; // **
- 11'h127: data = 8'b00011000; // **
- 11'h128: data = 8'b01111110; // ******
- 11'h129: data = 8'b00111100; // ****
- 11'h12a: data = 8'b00011000; // **
- 11'h12b: data = 8'b00000000; //
- 11'h12c: data = 8'b00000000; //
- 11'h12d: data = 8'b00000000; //
- 11'h12e: data = 8'b00000000; //
- 11'h12f: data = 8'b00000000; //
- //code x13
- 11'h130: data = 8'b00000000; //
- 11'h131: data = 8'b00000000; //
- 11'h132: data = 8'b01100110; // ** **
- 11'h133: data = 8'b01100110; // ** **
- 11'h134: data = 8'b01100110; // ** **
- 11'h135: data = 8'b01100110; // ** **
- 11'h136: data = 8'b01100110; // ** **
- 11'h137: data = 8'b01100110; // ** **
- 11'h138: data = 8'b01100110; // ** **
- 11'h139: data = 8'b00000000; //
- 11'h13a: data = 8'b01100110; // ** **
- 11'h13b: data = 8'b01100110; // ** **
- 11'h13c: data = 8'b00000000; //
- 11'h13d: data = 8'b00000000; //
- 11'h13e: data = 8'b00000000; //
- 11'h13f: data = 8'b00000000; //
- //code x14
- 11'h140: data = 8'b00000000; //
- 11'h141: data = 8'b00000000; //
- 11'h142: data = 8'b01111111; // *******
- 11'h143: data = 8'b11011011; // ** ** **
- 11'h144: data = 8'b11011011; // ** ** **
- 11'h145: data = 8'b11011011; // ** ** **
- 11'h146: data = 8'b01111011; // **** **
- 11'h147: data = 8'b00011011; // ** **
- 11'h148: data = 8'b00011011; // ** **
- 11'h149: data = 8'b00011011; // ** **
- 11'h14a: data = 8'b00011011; // ** **
- 11'h14b: data = 8'b00011011; // ** **
- 11'h14c: data = 8'b00000000; //
- 11'h14d: data = 8'b00000000; //
- 11'h14e: data = 8'b00000000; //
- 11'h14f: data = 8'b00000000; //
- //code x15
- 11'h150: data = 8'b00000000; //
- 11'h151: data = 8'b01111100; // *****
- 11'h152: data = 8'b11000110; // ** **
- 11'h153: data = 8'b01100000; // **
- 11'h154: data = 8'b00111000; // ***
- 11'h155: data = 8'b01101100; // ** **
- 11'h156: data = 8'b11000110; // ** **
- 11'h157: data = 8'b11000110; // ** **
- 11'h158: data = 8'b01101100; // ** **
- 11'h159: data = 8'b00111000; // ***
- 11'h15a: data = 8'b00001100; // **
- 11'h15b: data = 8'b11000110; // ** **
- 11'h15c: data = 8'b01111100; // *****
- 11'h15d: data = 8'b00000000; //
- 11'h15e: data = 8'b00000000; //
- 11'h15f: data = 8'b00000000; //
- //code x16
- 11'h160: data = 8'b00000000; //
- 11'h161: data = 8'b00000000; //
- 11'h162: data = 8'b00000000; //
- 11'h163: data = 8'b00000000; //
- 11'h164: data = 8'b00000000; //
- 11'h165: data = 8'b00000000; //
- 11'h166: data = 8'b00000000; //
- 11'h167: data = 8'b00000000; //
- 11'h168: data = 8'b11111110; // *******
- 11'h169: data = 8'b11111110; // *******
- 11'h16a: data = 8'b11111110; // *******
- 11'h16b: data = 8'b11111110; // *******
- 11'h16c: data = 8'b00000000; //
- 11'h16d: data = 8'b00000000; //
- 11'h16e: data = 8'b00000000; //
- 11'h16f: data = 8'b00000000; //
- //code x17
- 11'h170: data = 8'b00000000; //
- 11'h171: data = 8'b00000000; //
- 11'h172: data = 8'b00011000; // **
- 11'h173: data = 8'b00111100; // ****
- 11'h174: data = 8'b01111110; // ******
- 11'h175: data = 8'b00011000; // **
- 11'h176: data = 8'b00011000; // **
- 11'h177: data = 8'b00011000; // **
- 11'h178: data = 8'b01111110; // ******
- 11'h179: data = 8'b00111100; // ****
- 11'h17a: data = 8'b00011000; // **
- 11'h17b: data = 8'b01111110; // ******
- 11'h17c: data = 8'b00110000; //
- 11'h17d: data = 8'b00000000; //
- 11'h17e: data = 8'b00000000; //
- 11'h17f: data = 8'b00000000; //
- //code x18
- 11'h180: data = 8'b00000000; //
- 11'h181: data = 8'b00000000; //
- 11'h182: data = 8'b00011000; // **
- 11'h183: data = 8'b00111100; // ****
- 11'h184: data = 8'b01111110; // ******
- 11'h185: data = 8'b00011000; // **
- 11'h186: data = 8'b00011000; // **
- 11'h187: data = 8'b00011000; // **
- 11'h188: data = 8'b00011000; // **
- 11'h189: data = 8'b00011000; // **
- 11'h18a: data = 8'b00011000; // **
- 11'h18b: data = 8'b00011000; // **
- 11'h18c: data = 8'b00000000; //
- 11'h18d: data = 8'b00000000; //
- 11'h18e: data = 8'b00000000; //
- 11'h18f: data = 8'b00000000; //
- //code x19
- 11'h190: data = 8'b00000000; //
- 11'h191: data = 8'b00000000; //
- 11'h192: data = 8'b00011000; // **
- 11'h193: data = 8'b00011000; // **
- 11'h194: data = 8'b00011000; // **
- 11'h195: data = 8'b00011000; // **
- 11'h196: data = 8'b00011000; // **
- 11'h197: data = 8'b00011000; // **
- 11'h198: data = 8'b00011000; // **
- 11'h199: data = 8'b01111110; // ******
- 11'h19a: data = 8'b00111100; // ****
- 11'h19b: data = 8'b00011000; // **
- 11'h19c: data = 8'b00000000; //
- 11'h19d: data = 8'b00000000; //
- 11'h19e: data = 8'b00000000; //
- 11'h19f: data = 8'b00000000; //
- //code x1a
- 11'h1a0: data = 8'b00000000; //
- 11'h1a1: data = 8'b00000000; //
- 11'h1a2: data = 8'b00000000; //
- 11'h1a3: data = 8'b00000000; //
- 11'h1a4: data = 8'b00000000; //
- 11'h1a5: data = 8'b00011000; // **
- 11'h1a6: data = 8'b00001100; // **
- 11'h1a7: data = 8'b11111110; // *******
- 11'h1a8: data = 8'b00001100; // **
- 11'h1a9: data = 8'b00011000; // **
- 11'h1aa: data = 8'b00000000; //
- 11'h1ab: data = 8'b00000000; //
- 11'h1ac: data = 8'b00000000; //
- 11'h1ad: data = 8'b00000000; //
- 11'h1ae: data = 8'b00000000; //
- 11'h1af: data = 8'b00000000; //
- //code x1b
- 11'h1b0: data = 8'b00000000; //
- 11'h1b1: data = 8'b00000000; //
- 11'h1b2: data = 8'b00000000; //
- 11'h1b3: data = 8'b00000000; //
- 11'h1b4: data = 8'b00000000; //
- 11'h1b5: data = 8'b00110000; // **
- 11'h1b6: data = 8'b01100000; // **
- 11'h1b7: data = 8'b11111110; // *******
- 11'h1b8: data = 8'b01100000; // **
- 11'h1b9: data = 8'b00110000; // **
- 11'h1ba: data = 8'b00000000; //
- 11'h1bb: data = 8'b00000000; //
- 11'h1bc: data = 8'b00000000; //
- 11'h1bd: data = 8'b00000000; //
- 11'h1be: data = 8'b00000000; //
- 11'h1bf: data = 8'b00000000; //
- //code x1c
- 11'h1c0: data = 8'b00000000; //
- 11'h1c1: data = 8'b00000000; //
- 11'h1c2: data = 8'b00000000; //
- 11'h1c3: data = 8'b00000000; //
- 11'h1c4: data = 8'b00000000; //
- 11'h1c5: data = 8'b00000000; //
- 11'h1c6: data = 8'b11000000; // **
- 11'h1c7: data = 8'b11000000; // **
- 11'h1c8: data = 8'b11000000; // **
- 11'h1c9: data = 8'b11111110; // *******
- 11'h1ca: data = 8'b00000000; //
- 11'h1cb: data = 8'b00000000; //
- 11'h1cc: data = 8'b00000000; //
- 11'h1cd: data = 8'b00000000; //
- 11'h1ce: data = 8'b00000000; //
- 11'h1cf: data = 8'b00000000; //
- //code x1d
- 11'h1d0: data = 8'b00000000; //
- 11'h1d1: data = 8'b00000000; //
- 11'h1d2: data = 8'b00000000; //
- 11'h1d3: data = 8'b00000000; //
- 11'h1d4: data = 8'b00000000; //
- 11'h1d5: data = 8'b00100100; // * *
- 11'h1d6: data = 8'b01100110; // ** **
- 11'h1d7: data = 8'b11111111; // ********
- 11'h1d8: data = 8'b01100110; // ** **
- 11'h1d9: data = 8'b00100100; // * *
- 11'h1da: data = 8'b00000000; //
- 11'h1db: data = 8'b00000000; //
- 11'h1dc: data = 8'b00000000; //
- 11'h1dd: data = 8'b00000000; //
- 11'h1de: data = 8'b00000000; //
- 11'h1df: data = 8'b00000000; //
- //code x1e
- 11'h1e0: data = 8'b00000000; //
- 11'h1e1: data = 8'b00000000; //
- 11'h1e2: data = 8'b00000000; //
- 11'h1e3: data = 8'b00000000; //
- 11'h1e4: data = 8'b00010000; // *
- 11'h1e5: data = 8'b00111000; // ***
- 11'h1e6: data = 8'b00111000; // ***
- 11'h1e7: data = 8'b01111100; // *****
- 11'h1e8: data = 8'b01111100; // *****
- 11'h1e9: data = 8'b11111110; // *******
- 11'h1ea: data = 8'b11111110; // *******
- 11'h1eb: data = 8'b00000000; //
- 11'h1ec: data = 8'b00000000; //
- 11'h1ed: data = 8'b00000000; //
- 11'h1ee: data = 8'b00000000; //
- 11'h1ef: data = 8'b00000000; //
- //code x1f
- 11'h1f0: data = 8'b00000000; //
- 11'h1f1: data = 8'b00000000; //
- 11'h1f2: data = 8'b00000000; //
- 11'h1f3: data = 8'b00000000; //
- 11'h1f4: data = 8'b11111110; // *******
- 11'h1f5: data = 8'b11111110; // *******
- 11'h1f6: data = 8'b01111100; // *****
- 11'h1f7: data = 8'b01111100; // *****
- 11'h1f8: data = 8'b00111000; // ***
- 11'h1f9: data = 8'b00111000; // ***
- 11'h1fa: data = 8'b00010000; // *
- 11'h1fb: data = 8'b00000000; //
- 11'h1fc: data = 8'b00000000; //
- 11'h1fd: data = 8'b00000000; //
- 11'h1fe: data = 8'b00000000; //
- 11'h1ff: data = 8'b00000000; //
- //code x20
- 11'h200: data = 8'b00000000; //
- 11'h201: data = 8'b00000000; //
- 11'h202: data = 8'b00000000; //
- 11'h203: data = 8'b00000000; //
- 11'h204: data = 8'b00000000; //
- 11'h205: data = 8'b00000000; //
- 11'h206: data = 8'b00000000; //
- 11'h207: data = 8'b00000000; //
- 11'h208: data = 8'b00000000; //
- 11'h209: data = 8'b00000000; //
- 11'h20a: data = 8'b00000000; //
- 11'h20b: data = 8'b00000000; //
- 11'h20c: data = 8'b00000000; //
- 11'h20d: data = 8'b00000000; //
- 11'h20e: data = 8'b00000000; //
- 11'h20f: data = 8'b00000000; //
- //code x21
- 11'h210: data = 8'b00000000; //
- 11'h211: data = 8'b00000000; //
- 11'h212: data = 8'b00011000; // **
- 11'h213: data = 8'b00111100; // ****
- 11'h214: data = 8'b00111100; // ****
- 11'h215: data = 8'b00111100; // ****
- 11'h216: data = 8'b00011000; // **
- 11'h217: data = 8'b00011000; // **
- 11'h218: data = 8'b00011000; // **
- 11'h219: data = 8'b00000000; //
- 11'h21a: data = 8'b00011000; // **
- 11'h21b: data = 8'b00011000; // **
- 11'h21c: data = 8'b00000000; //
- 11'h21d: data = 8'b00000000; //
- 11'h21e: data = 8'b00000000; //
- 11'h21f: data = 8'b00000000; //
- //code x22
- 11'h220: data = 8'b00000000; //
- 11'h221: data = 8'b01100110; // ** **
- 11'h222: data = 8'b01100110; // ** **
- 11'h223: data = 8'b01100110; // ** **
- 11'h224: data = 8'b00100100; // * *
- 11'h225: data = 8'b00000000; //
- 11'h226: data = 8'b00000000; //
- 11'h227: data = 8'b00000000; //
- 11'h228: data = 8'b00000000; //
- 11'h229: data = 8'b00000000; //
- 11'h22a: data = 8'b00000000; //
- 11'h22b: data = 8'b00000000; //
- 11'h22c: data = 8'b00000000; //
- 11'h22d: data = 8'b00000000; //
- 11'h22e: data = 8'b00000000; //
- 11'h22f: data = 8'b00000000; //
- //code x23
- 11'h230: data = 8'b00000000; //
- 11'h231: data = 8'b00000000; //
- 11'h232: data = 8'b00000000; //
- 11'h233: data = 8'b01101100; // ** **
- 11'h234: data = 8'b01101100; // ** **
- 11'h235: data = 8'b11111110; // *******
- 11'h236: data = 8'b01101100; // ** **
- 11'h237: data = 8'b01101100; // ** **
- 11'h238: data = 8'b01101100; // ** **
- 11'h239: data = 8'b11111110; // *******
- 11'h23a: data = 8'b01101100; // ** **
- 11'h23b: data = 8'b01101100; // ** **
- 11'h23c: data = 8'b00000000; //
- 11'h23d: data = 8'b00000000; //
- 11'h23e: data = 8'b00000000; //
- 11'h23f: data = 8'b00000000; //
- //code x24
- 11'h240: data = 8'b00011000; // **
- 11'h241: data = 8'b00011000; // **
- 11'h242: data = 8'b01111100; // *****
- 11'h243: data = 8'b11000110; // ** **
- 11'h244: data = 8'b11000010; // ** *
- 11'h245: data = 8'b11000000; // **
- 11'h246: data = 8'b01111100; // *****
- 11'h247: data = 8'b00000110; // **
- 11'h248: data = 8'b00000110; // **
- 11'h249: data = 8'b10000110; // * **
- 11'h24a: data = 8'b11000110; // ** **
- 11'h24b: data = 8'b01111100; // *****
- 11'h24c: data = 8'b00011000; // **
- 11'h24d: data = 8'b00011000; // **
- 11'h24e: data = 8'b00000000; //
- 11'h24f: data = 8'b00000000; //
- //code x25
- 11'h250: data = 8'b00000000; //
- 11'h251: data = 8'b00000000; //
- 11'h252: data = 8'b00000000; //
- 11'h253: data = 8'b00000000; //
- 11'h254: data = 8'b11000010; // ** *
- 11'h255: data = 8'b11000110; // ** **
- 11'h256: data = 8'b00001100; // **
- 11'h257: data = 8'b00011000; // **
- 11'h258: data = 8'b00110000; // **
- 11'h259: data = 8'b01100000; // **
- 11'h25a: data = 8'b11000110; // ** **
- 11'h25b: data = 8'b10000110; // * **
- 11'h25c: data = 8'b00000000; //
- 11'h25d: data = 8'b00000000; //
- 11'h25e: data = 8'b00000000; //
- 11'h25f: data = 8'b00000000; //
- //code x26
- 11'h260: data = 8'b00000000; //
- 11'h261: data = 8'b00000000; //
- 11'h262: data = 8'b00111000; // ***
- 11'h263: data = 8'b01101100; // ** **
- 11'h264: data = 8'b01101100; // ** **
- 11'h265: data = 8'b00111000; // ***
- 11'h266: data = 8'b01110110; // *** **
- 11'h267: data = 8'b11011100; // ** ***
- 11'h268: data = 8'b11001100; // ** **
- 11'h269: data = 8'b11001100; // ** **
- 11'h26a: data = 8'b11001100; // ** **
- 11'h26b: data = 8'b01110110; // *** **
- 11'h26c: data = 8'b00000000; //
- 11'h26d: data = 8'b00000000; //
- 11'h26e: data = 8'b00000000; //
- 11'h26f: data = 8'b00000000; //
- //code x27
- 11'h270: data = 8'b00000000; //
- 11'h271: data = 8'b00110000; // **
- 11'h272: data = 8'b00110000; // **
- 11'h273: data = 8'b00110000; // **
- 11'h274: data = 8'b01100000; // **
- 11'h275: data = 8'b00000000; //
- 11'h276: data = 8'b00000000; //
- 11'h277: data = 8'b00000000; //
- 11'h278: data = 8'b00000000; //
- 11'h279: data = 8'b00000000; //
- 11'h27a: data = 8'b00000000; //
- 11'h27b: data = 8'b00000000; //
- 11'h27c: data = 8'b00000000; //
- 11'h27d: data = 8'b00000000; //
- 11'h27e: data = 8'b00000000; //
- 11'h27f: data = 8'b00000000; //
- //code x28
- 11'h280: data = 8'b00000000; //
- 11'h281: data = 8'b00000000; //
- 11'h282: data = 8'b00001100; // **
- 11'h283: data = 8'b00011000; // **
- 11'h284: data = 8'b00110000; // **
- 11'h285: data = 8'b00110000; // **
- 11'h286: data = 8'b00110000; // **
- 11'h287: data = 8'b00110000; // **
- 11'h288: data = 8'b00110000; // **
- 11'h289: data = 8'b00110000; // **
- 11'h28a: data = 8'b00011000; // **
- 11'h28b: data = 8'b00001100; // **
- 11'h28c: data = 8'b00000000; //
- 11'h28d: data = 8'b00000000; //
- 11'h28e: data = 8'b00000000; //
- 11'h28f: data = 8'b00000000; //
- //code x29
- 11'h290: data = 8'b00000000; //
- 11'h291: data = 8'b00000000; //
- 11'h292: data = 8'b00110000; // **
- 11'h293: data = 8'b00011000; // **
- 11'h294: data = 8'b00001100; // **
- 11'h295: data = 8'b00001100; // **
- 11'h296: data = 8'b00001100; // **
- 11'h297: data = 8'b00001100; // **
- 11'h298: data = 8'b00001100; // **
- 11'h299: data = 8'b00001100; // **
- 11'h29a: data = 8'b00011000; // **
- 11'h29b: data = 8'b00110000; // **
- 11'h29c: data = 8'b00000000; //
- 11'h29d: data = 8'b00000000; //
- 11'h29e: data = 8'b00000000; //
- 11'h29f: data = 8'b00000000; //
- //code x2a
- 11'h2a0: data = 8'b00000000; //
- 11'h2a1: data = 8'b00000000; //
- 11'h2a2: data = 8'b00000000; //
- 11'h2a3: data = 8'b00000000; //
- 11'h2a4: data = 8'b00000000; //
- 11'h2a5: data = 8'b01100110; // ** **
- 11'h2a6: data = 8'b00111100; // ****
- 11'h2a7: data = 8'b11111111; // ********
- 11'h2a8: data = 8'b00111100; // ****
- 11'h2a9: data = 8'b01100110; // ** **
- 11'h2aa: data = 8'b00000000; //
- 11'h2ab: data = 8'b00000000; //
- 11'h2ac: data = 8'b00000000; //
- 11'h2ad: data = 8'b00000000; //
- 11'h2ae: data = 8'b00000000; //
- 11'h2af: data = 8'b00000000; //
- //code x2b
- 11'h2b0: data = 8'b00000000; //
- 11'h2b1: data = 8'b00000000; //
- 11'h2b2: data = 8'b00000000; //
- 11'h2b3: data = 8'b00000000; //
- 11'h2b4: data = 8'b00000000; //
- 11'h2b5: data = 8'b00011000; // **
- 11'h2b6: data = 8'b00011000; // **
- 11'h2b7: data = 8'b01111110; // ******
- 11'h2b8: data = 8'b00011000; // **
- 11'h2b9: data = 8'b00011000; // **
- 11'h2ba: data = 8'b00000000; //
- 11'h2bb: data = 8'b00000000; //
- 11'h2bc: data = 8'b00000000; //
- 11'h2bd: data = 8'b00000000; //
- 11'h2be: data = 8'b00000000; //
- 11'h2bf: data = 8'b00000000; //
- //code x2c
- 11'h2c0: data = 8'b00000000; //
- 11'h2c1: data = 8'b00000000; //
- 11'h2c2: data = 8'b00000000; //
- 11'h2c3: data = 8'b00000000; //
- 11'h2c4: data = 8'b00000000; //
- 11'h2c5: data = 8'b00000000; //
- 11'h2c6: data = 8'b00000000; //
- 11'h2c7: data = 8'b00000000; //
- 11'h2c8: data = 8'b00000000; //
- 11'h2c9: data = 8'b00011000; // **
- 11'h2ca: data = 8'b00011000; // **
- 11'h2cb: data = 8'b00011000; // **
- 11'h2cc: data = 8'b00110000; // **
- 11'h2cd: data = 8'b00000000; //
- 11'h2ce: data = 8'b00000000; //
- 11'h2cf: data = 8'b00000000; //
- //code x2d
- 11'h2d0: data = 8'b00000000; //
- 11'h2d1: data = 8'b00000000; //
- 11'h2d2: data = 8'b00000000; //
- 11'h2d3: data = 8'b00000000; //
- 11'h2d4: data = 8'b00000000; //
- 11'h2d5: data = 8'b00000000; //
- 11'h2d6: data = 8'b00000000; //
- 11'h2d7: data = 8'b01111110; // ******
- 11'h2d8: data = 8'b00000000; //
- 11'h2d9: data = 8'b00000000; //
- 11'h2da: data = 8'b00000000; //
- 11'h2db: data = 8'b00000000; //
- 11'h2dc: data = 8'b00000000; //
- 11'h2dd: data = 8'b00000000; //
- 11'h2de: data = 8'b00000000; //
- 11'h2df: data = 8'b00000000; //
- //code x2e
- 11'h2e0: data = 8'b00000000; //
- 11'h2e1: data = 8'b00000000; //
- 11'h2e2: data = 8'b00000000; //
- 11'h2e3: data = 8'b00000000; //
- 11'h2e4: data = 8'b00000000; //
- 11'h2e5: data = 8'b00000000; //
- 11'h2e6: data = 8'b00000000; //
- 11'h2e7: data = 8'b00000000; //
- 11'h2e8: data = 8'b00000000; //
- 11'h2e9: data = 8'b00000000; //
- 11'h2ea: data = 8'b00011000; // **
- 11'h2eb: data = 8'b00011000; // **
- 11'h2ec: data = 8'b00000000; //
- 11'h2ed: data = 8'b00000000; //
- 11'h2ee: data = 8'b00000000; //
- 11'h2ef: data = 8'b00000000; //
- //code x2f
- 11'h2f0: data = 8'b00000000; //
- 11'h2f1: data = 8'b00000000; //
- 11'h2f2: data = 8'b00000000; //
- 11'h2f3: data = 8'b00000000; //
- 11'h2f4: data = 8'b00000010; // *
- 11'h2f5: data = 8'b00000110; // **
- 11'h2f6: data = 8'b00001100; // **
- 11'h2f7: data = 8'b00011000; // **
- 11'h2f8: data = 8'b00110000; // **
- 11'h2f9: data = 8'b01100000; // **
- 11'h2fa: data = 8'b11000000; // **
- 11'h2fb: data = 8'b10000000; // *
- 11'h2fc: data = 8'b00000000; //
- 11'h2fd: data = 8'b00000000; //
- 11'h2fe: data = 8'b00000000; //
- 11'h2ff: data = 8'b00000000; //
- //code x30
- 11'h300: data = 8'b00000000; //
- 11'h301: data = 8'b00000000; //
- 11'h302: data = 8'b01111100; // *****
- 11'h303: data = 8'b11000110; // ** **
- 11'h304: data = 8'b11000110; // ** **
- 11'h305: data = 8'b11001110; // ** ***
- 11'h306: data = 8'b11011110; // ** ****
- 11'h307: data = 8'b11110110; // **** **
- 11'h308: data = 8'b11100110; // *** **
- 11'h309: data = 8'b11000110; // ** **
- 11'h30a: data = 8'b11000110; // ** **
- 11'h30b: data = 8'b01111100; // *****
- 11'h30c: data = 8'b00000000; //
- 11'h30d: data = 8'b00000000; //
- 11'h30e: data = 8'b00000000; //
- 11'h30f: data = 8'b00000000; //
- //code x31
- 11'h310: data = 8'b00000000; //
- 11'h311: data = 8'b00000000; //
- 11'h312: data = 8'b00011000; //
- 11'h313: data = 8'b00111000; //
- 11'h314: data = 8'b01111000; // **
- 11'h315: data = 8'b00011000; // ***
- 11'h316: data = 8'b00011000; // ****
- 11'h317: data = 8'b00011000; // **
- 11'h318: data = 8'b00011000; // **
- 11'h319: data = 8'b00011000; // **
- 11'h31a: data = 8'b00011000; // **
- 11'h31b: data = 8'b01111110; // **
- 11'h31c: data = 8'b00000000; // **
- 11'h31d: data = 8'b00000000; // ******
- 11'h31e: data = 8'b00000000; //
- 11'h31f: data = 8'b00000000; //
- //code x32
- 11'h320: data = 8'b00000000; //
- 11'h321: data = 8'b00000000; //
- 11'h322: data = 8'b01111100; // *****
- 11'h323: data = 8'b11000110; // ** **
- 11'h324: data = 8'b00000110; // **
- 11'h325: data = 8'b00001100; // **
- 11'h326: data = 8'b00011000; // **
- 11'h327: data = 8'b00110000; // **
- 11'h328: data = 8'b01100000; // **
- 11'h329: data = 8'b11000000; // **
- 11'h32a: data = 8'b11000110; // ** **
- 11'h32b: data = 8'b11111110; // *******
- 11'h32c: data = 8'b00000000; //
- 11'h32d: data = 8'b00000000; //
- 11'h32e: data = 8'b00000000; //
- 11'h32f: data = 8'b00000000; //
- //code x33
- 11'h330: data = 8'b00000000; //
- 11'h331: data = 8'b00000000; //
- 11'h332: data = 8'b01111100; // *****
- 11'h333: data = 8'b11000110; // ** **
- 11'h334: data = 8'b00000110; // **
- 11'h335: data = 8'b00000110; // **
- 11'h336: data = 8'b00111100; // ****
- 11'h337: data = 8'b00000110; // **
- 11'h338: data = 8'b00000110; // **
- 11'h339: data = 8'b00000110; // **
- 11'h33a: data = 8'b11000110; // ** **
- 11'h33b: data = 8'b01111100; // *****
- 11'h33c: data = 8'b00000000; //
- 11'h33d: data = 8'b00000000; //
- 11'h33e: data = 8'b00000000; //
- 11'h33f: data = 8'b00000000; //
- //code x34
- 11'h340: data = 8'b00000000; //
- 11'h341: data = 8'b00000000; //
- 11'h342: data = 8'b00001100; // **
- 11'h343: data = 8'b00011100; // ***
- 11'h344: data = 8'b00111100; // ****
- 11'h345: data = 8'b01101100; // ** **
- 11'h346: data = 8'b11001100; // ** **
- 11'h347: data = 8'b11111110; // *******
- 11'h348: data = 8'b00001100; // **
- 11'h349: data = 8'b00001100; // **
- 11'h34a: data = 8'b00001100; // **
- 11'h34b: data = 8'b00011110; // ****
- 11'h34c: data = 8'b00000000; //
- 11'h34d: data = 8'b00000000; //
- 11'h34e: data = 8'b00000000; //
- 11'h34f: data = 8'b00000000; //
- //code x35
- 11'h350: data = 8'b00000000; //
- 11'h351: data = 8'b00000000; //
- 11'h352: data = 8'b11111110; // *******
- 11'h353: data = 8'b11000000; // **
- 11'h354: data = 8'b11000000; // **
- 11'h355: data = 8'b11000000; // **
- 11'h356: data = 8'b11111100; // ******
- 11'h357: data = 8'b00000110; // **
- 11'h358: data = 8'b00000110; // **
- 11'h359: data = 8'b00000110; // **
- 11'h35a: data = 8'b11000110; // ** **
- 11'h35b: data = 8'b01111100; // *****
- 11'h35c: data = 8'b00000000; //
- 11'h35d: data = 8'b00000000; //
- 11'h35e: data = 8'b00000000; //
- 11'h35f: data = 8'b00000000; //
- //code x36
- 11'h360: data = 8'b00000000; //
- 11'h361: data = 8'b00000000; //
- 11'h362: data = 8'b00111000; // ***
- 11'h363: data = 8'b01100000; // **
- 11'h364: data = 8'b11000000; // **
- 11'h365: data = 8'b11000000; // **
- 11'h366: data = 8'b11111100; // ******
- 11'h367: data = 8'b11000110; // ** **
- 11'h368: data = 8'b11000110; // ** **
- 11'h369: data = 8'b11000110; // ** **
- 11'h36a: data = 8'b11000110; // ** **
- 11'h36b: data = 8'b01111100; // *****
- 11'h36c: data = 8'b00000000; //
- 11'h36d: data = 8'b00000000; //
- 11'h36e: data = 8'b00000000; //
- 11'h36f: data = 8'b00000000; //
- //code x37
- 11'h370: data = 8'b00000000; //
- 11'h371: data = 8'b00000000; //
- 11'h372: data = 8'b11111110; // *******
- 11'h373: data = 8'b11000110; // ** **
- 11'h374: data = 8'b00000110; // **
- 11'h375: data = 8'b00000110; // **
- 11'h376: data = 8'b00001100; // **
- 11'h377: data = 8'b00011000; // **
- 11'h378: data = 8'b00110000; // **
- 11'h379: data = 8'b00110000; // **
- 11'h37a: data = 8'b00110000; // **
- 11'h37b: data = 8'b00110000; // **
- 11'h37c: data = 8'b00000000; //
- 11'h37d: data = 8'b00000000; //
- 11'h37e: data = 8'b00000000; //
- 11'h37f: data = 8'b00000000; //
- //code x38
- 11'h380: data = 8'b00000000; //
- 11'h381: data = 8'b00000000; //
- 11'h382: data = 8'b01111100; // *****
- 11'h383: data = 8'b11000110; // ** **
- 11'h384: data = 8'b11000110; // ** **
- 11'h385: data = 8'b11000110; // ** **
- 11'h386: data = 8'b01111100; // *****
- 11'h387: data = 8'b11000110; // ** **
- 11'h388: data = 8'b11000110; // ** **
- 11'h389: data = 8'b11000110; // ** **
- 11'h38a: data = 8'b11000110; // ** **
- 11'h38b: data = 8'b01111100; // *****
- 11'h38c: data = 8'b00000000; //
- 11'h38d: data = 8'b00000000; //
- 11'h38e: data = 8'b00000000; //
- 11'h38f: data = 8'b00000000; //
- //code x39
- 11'h390: data = 8'b00000000; //
- 11'h391: data = 8'b00000000; //
- 11'h392: data = 8'b01111100; // *****
- 11'h393: data = 8'b11000110; // ** **
- 11'h394: data = 8'b11000110; // ** **
- 11'h395: data = 8'b11000110; // ** **
- 11'h396: data = 8'b01111110; // ******
- 11'h397: data = 8'b00000110; // **
- 11'h398: data = 8'b00000110; // **
- 11'h399: data = 8'b00000110; // **
- 11'h39a: data = 8'b00001100; // **
- 11'h39b: data = 8'b01111000; // ****
- 11'h39c: data = 8'b00000000; //
- 11'h39d: data = 8'b00000000; //
- 11'h39e: data = 8'b00000000; //
- 11'h39f: data = 8'b00000000; //
- //code x3a
- 11'h3a0: data = 8'b00000000; //
- 11'h3a1: data = 8'b00000000; //
- 11'h3a2: data = 8'b00000000; //
- 11'h3a3: data = 8'b00000000; //
- 11'h3a4: data = 8'b00011000; // **
- 11'h3a5: data = 8'b00011000; // **
- 11'h3a6: data = 8'b00000000; //
- 11'h3a7: data = 8'b00000000; //
- 11'h3a8: data = 8'b00000000; //
- 11'h3a9: data = 8'b00011000; // **
- 11'h3aa: data = 8'b00011000; // **
- 11'h3ab: data = 8'b00000000; //
- 11'h3ac: data = 8'b00000000; //
- 11'h3ad: data = 8'b00000000; //
- 11'h3ae: data = 8'b00000000; //
- 11'h3af: data = 8'b00000000; //
- //code x3b
- 11'h3b0: data = 8'b00000000; //
- 11'h3b1: data = 8'b00000000; //
- 11'h3b2: data = 8'b00000000; //
- 11'h3b3: data = 8'b00000000; //
- 11'h3b4: data = 8'b00011000; // **
- 11'h3b5: data = 8'b00011000; // **
- 11'h3b6: data = 8'b00000000; //
- 11'h3b7: data = 8'b00000000; //
- 11'h3b8: data = 8'b00000000; //
- 11'h3b9: data = 8'b00011000; // **
- 11'h3ba: data = 8'b00011000; // **
- 11'h3bb: data = 8'b00110000; // **
- 11'h3bc: data = 8'b00000000; //
- 11'h3bd: data = 8'b00000000; //
- 11'h3be: data = 8'b00000000; //
- 11'h3bf: data = 8'b00000000; //
- //code x3c
- 11'h3c0: data = 8'b00000000; //
- 11'h3c1: data = 8'b00000000; //
- 11'h3c2: data = 8'b00000000; //
- 11'h3c3: data = 8'b00000110; // **
- 11'h3c4: data = 8'b00001100; // **
- 11'h3c5: data = 8'b00011000; // **
- 11'h3c6: data = 8'b00110000; // **
- 11'h3c7: data = 8'b01100000; // **
- 11'h3c8: data = 8'b00110000; // **
- 11'h3c9: data = 8'b00011000; // **
- 11'h3ca: data = 8'b00001100; // **
- 11'h3cb: data = 8'b00000110; // **
- 11'h3cc: data = 8'b00000000; //
- 11'h3cd: data = 8'b00000000; //
- 11'h3ce: data = 8'b00000000; //
- 11'h3cf: data = 8'b00000000; //
- //code x3d
- 11'h3d0: data = 8'b00000000; //
- 11'h3d1: data = 8'b00000000; //
- 11'h3d2: data = 8'b00000000; //
- 11'h3d3: data = 8'b00000000; //
- 11'h3d4: data = 8'b00000000; //
- 11'h3d5: data = 8'b01111110; // ******
- 11'h3d6: data = 8'b00000000; //
- 11'h3d7: data = 8'b00000000; //
- 11'h3d8: data = 8'b01111110; // ******
- 11'h3d9: data = 8'b00000000; //
- 11'h3da: data = 8'b00000000; //
- 11'h3db: data = 8'b00000000; //
- 11'h3dc: data = 8'b00000000; //
- 11'h3dd: data = 8'b00000000; //
- 11'h3de: data = 8'b00000000; //
- 11'h3df: data = 8'b00000000; //
- //code x3e
- 11'h3e0: data = 8'b00000000; //
- 11'h3e1: data = 8'b00000000; //
- 11'h3e2: data = 8'b00000000; //
- 11'h3e3: data = 8'b01100000; // **
- 11'h3e4: data = 8'b00110000; // **
- 11'h3e5: data = 8'b00011000; // **
- 11'h3e6: data = 8'b00001100; // **
- 11'h3e7: data = 8'b00000110; // **
- 11'h3e8: data = 8'b00001100; // **
- 11'h3e9: data = 8'b00011000; // **
- 11'h3ea: data = 8'b00110000; // **
- 11'h3eb: data = 8'b01100000; // **
- 11'h3ec: data = 8'b00000000; //
- 11'h3ed: data = 8'b00000000; //
- 11'h3ee: data = 8'b00000000; //
- 11'h3ef: data = 8'b00000000; //
- //code x3f
- 11'h3f0: data = 8'b00000000; //
- 11'h3f1: data = 8'b00000000; //
- 11'h3f2: data = 8'b01111100; // *****
- 11'h3f3: data = 8'b11000110; // ** **
- 11'h3f4: data = 8'b11000110; // ** **
- 11'h3f5: data = 8'b00001100; // **
- 11'h3f6: data = 8'b00011000; // **
- 11'h3f7: data = 8'b00011000; // **
- 11'h3f8: data = 8'b00011000; // **
- 11'h3f9: data = 8'b00000000; //
- 11'h3fa: data = 8'b00011000; // **
- 11'h3fb: data = 8'b00011000; // **
- 11'h3fc: data = 8'b00000000; //
- 11'h3fd: data = 8'b00000000; //
- 11'h3fe: data = 8'b00000000; //
- 11'h3ff: data = 8'b00000000; //
- //code x40
- 11'h400: data = 8'b00000000; //
- 11'h401: data = 8'b00000000; //
- 11'h402: data = 8'b01111100; // *****
- 11'h403: data = 8'b11000110; // ** **
- 11'h404: data = 8'b11000110; // ** **
- 11'h405: data = 8'b11000110; // ** **
- 11'h406: data = 8'b11011110; // ** ****
- 11'h407: data = 8'b11011110; // ** ****
- 11'h408: data = 8'b11011110; // ** ****
- 11'h409: data = 8'b11011100; // ** ***
- 11'h40a: data = 8'b11000000; // **
- 11'h40b: data = 8'b01111100; // *****
- 11'h40c: data = 8'b00000000; //
- 11'h40d: data = 8'b00000000; //
- 11'h40e: data = 8'b00000000; //
- 11'h40f: data = 8'b00000000; //
- //code x41
- 11'h410: data = 8'b00000000; //
- 11'h411: data = 8'b00000000; //
- 11'h412: data = 8'b00010000; // *
- 11'h413: data = 8'b00111000; // ***
- 11'h414: data = 8'b01101100; // ** **
- 11'h415: data = 8'b11000110; // ** **
- 11'h416: data = 8'b11000110; // ** **
- 11'h417: data = 8'b11111110; // *******
- 11'h418: data = 8'b11000110; // ** **
- 11'h419: data = 8'b11000110; // ** **
- 11'h41a: data = 8'b11000110; // ** **
- 11'h41b: data = 8'b11000110; // ** **
- 11'h41c: data = 8'b00000000; //
- 11'h41d: data = 8'b00000000; //
- 11'h41e: data = 8'b00000000; //
- 11'h41f: data = 8'b00000000; //
- //code x42
- 11'h420: data = 8'b00000000; //
- 11'h421: data = 8'b00000000; //
- 11'h422: data = 8'b11111100; // ******
- 11'h423: data = 8'b01100110; // ** **
- 11'h424: data = 8'b01100110; // ** **
- 11'h425: data = 8'b01100110; // ** **
- 11'h426: data = 8'b01111100; // *****
- 11'h427: data = 8'b01100110; // ** **
- 11'h428: data = 8'b01100110; // ** **
- 11'h429: data = 8'b01100110; // ** **
- 11'h42a: data = 8'b01100110; // ** **
- 11'h42b: data = 8'b11111100; // ******
- 11'h42c: data = 8'b00000000; //
- 11'h42d: data = 8'b00000000; //
- 11'h42e: data = 8'b00000000; //
- 11'h42f: data = 8'b00000000; //
- //code x43
- 11'h430: data = 8'b00000000; //
- 11'h431: data = 8'b00000000; //
- 11'h432: data = 8'b00111100; // ****
- 11'h433: data = 8'b01100110; // ** **
- 11'h434: data = 8'b11000010; // ** *
- 11'h435: data = 8'b11000000; // **
- 11'h436: data = 8'b11000000; // **
- 11'h437: data = 8'b11000000; // **
- 11'h438: data = 8'b11000000; // **
- 11'h439: data = 8'b11000010; // ** *
- 11'h43a: data = 8'b01100110; // ** **
- 11'h43b: data = 8'b00111100; // ****
- 11'h43c: data = 8'b00000000; //
- 11'h43d: data = 8'b00000000; //
- 11'h43e: data = 8'b00000000; //
- 11'h43f: data = 8'b00000000; //
- //code x44
- 11'h440: data = 8'b00000000; //
- 11'h441: data = 8'b00000000; //
- 11'h442: data = 8'b11111000; // *****
- 11'h443: data = 8'b01101100; // ** **
- 11'h444: data = 8'b01100110; // ** **
- 11'h445: data = 8'b01100110; // ** **
- 11'h446: data = 8'b01100110; // ** **
- 11'h447: data = 8'b01100110; // ** **
- 11'h448: data = 8'b01100110; // ** **
- 11'h449: data = 8'b01100110; // ** **
- 11'h44a: data = 8'b01101100; // ** **
- 11'h44b: data = 8'b11111000; // *****
- 11'h44c: data = 8'b00000000; //
- 11'h44d: data = 8'b00000000; //
- 11'h44e: data = 8'b00000000; //
- 11'h44f: data = 8'b00000000; //
- //code x45
- 11'h450: data = 8'b00000000; //
- 11'h451: data = 8'b00000000; //
- 11'h452: data = 8'b11111110; // *******
- 11'h453: data = 8'b01100110; // ** **
- 11'h454: data = 8'b01100010; // ** *
- 11'h455: data = 8'b01101000; // ** *
- 11'h456: data = 8'b01111000; // ****
- 11'h457: data = 8'b01101000; // ** *
- 11'h458: data = 8'b01100000; // **
- 11'h459: data = 8'b01100010; // ** *
- 11'h45a: data = 8'b01100110; // ** **
- 11'h45b: data = 8'b11111110; // *******
- 11'h45c: data = 8'b00000000; //
- 11'h45d: data = 8'b00000000; //
- 11'h45e: data = 8'b00000000; //
- 11'h45f: data = 8'b00000000; //
- //code x46
- 11'h460: data = 8'b00000000; //
- 11'h461: data = 8'b00000000; //
- 11'h462: data = 8'b11111110; // *******
- 11'h463: data = 8'b01100110; // ** **
- 11'h464: data = 8'b01100010; // ** *
- 11'h465: data = 8'b01101000; // ** *
- 11'h466: data = 8'b01111000; // ****
- 11'h467: data = 8'b01101000; // ** *
- 11'h468: data = 8'b01100000; // **
- 11'h469: data = 8'b01100000; // **
- 11'h46a: data = 8'b01100000; // **
- 11'h46b: data = 8'b11110000; // ****
- 11'h46c: data = 8'b00000000; //
- 11'h46d: data = 8'b00000000; //
- 11'h46e: data = 8'b00000000; //
- 11'h46f: data = 8'b00000000; //
- //code x47
- 11'h470: data = 8'b00000000; //
- 11'h471: data = 8'b00000000; //
- 11'h472: data = 8'b00111100; // ****
- 11'h473: data = 8'b01100110; // ** **
- 11'h474: data = 8'b11000010; // ** *
- 11'h475: data = 8'b11000000; // **
- 11'h476: data = 8'b11000000; // **
- 11'h477: data = 8'b11011110; // ** ****
- 11'h478: data = 8'b11000110; // ** **
- 11'h479: data = 8'b11000110; // ** **
- 11'h47a: data = 8'b01100110; // ** **
- 11'h47b: data = 8'b00111010; // *** *
- 11'h47c: data = 8'b00000000; //
- 11'h47d: data = 8'b00000000; //
- 11'h47e: data = 8'b00000000; //
- 11'h47f: data = 8'b00000000; //
- //code x48
- 11'h480: data = 8'b00000000; //
- 11'h481: data = 8'b00000000; //
- 11'h482: data = 8'b11000110; // ** **
- 11'h483: data = 8'b11000110; // ** **
- 11'h484: data = 8'b11000110; // ** **
- 11'h485: data = 8'b11000110; // ** **
- 11'h486: data = 8'b11111110; // *******
- 11'h487: data = 8'b11000110; // ** **
- 11'h488: data = 8'b11000110; // ** **
- 11'h489: data = 8'b11000110; // ** **
- 11'h48a: data = 8'b11000110; // ** **
- 11'h48b: data = 8'b11000110; // ** **
- 11'h48c: data = 8'b00000000; //
- 11'h48d: data = 8'b00000000; //
- 11'h48e: data = 8'b00000000; //
- 11'h48f: data = 8'b00000000; //
- //code x49
- 11'h490: data = 8'b00000000; //
- 11'h491: data = 8'b00000000; //
- 11'h492: data = 8'b00111100; // ****
- 11'h493: data = 8'b00011000; // **
- 11'h494: data = 8'b00011000; // **
- 11'h495: data = 8'b00011000; // **
- 11'h496: data = 8'b00011000; // **
- 11'h497: data = 8'b00011000; // **
- 11'h498: data = 8'b00011000; // **
- 11'h499: data = 8'b00011000; // **
- 11'h49a: data = 8'b00011000; // **
- 11'h49b: data = 8'b00111100; // ****
- 11'h49c: data = 8'b00000000; //
- 11'h49d: data = 8'b00000000; //
- 11'h49e: data = 8'b00000000; //
- 11'h49f: data = 8'b00000000; //
- //code x4a
- 11'h4a0: data = 8'b00000000; //
- 11'h4a1: data = 8'b00000000; //
- 11'h4a2: data = 8'b00011110; // ****
- 11'h4a3: data = 8'b00001100; // **
- 11'h4a4: data = 8'b00001100; // **
- 11'h4a5: data = 8'b00001100; // **
- 11'h4a6: data = 8'b00001100; // **
- 11'h4a7: data = 8'b00001100; // **
- 11'h4a8: data = 8'b11001100; // ** **
- 11'h4a9: data = 8'b11001100; // ** **
- 11'h4aa: data = 8'b11001100; // ** **
- 11'h4ab: data = 8'b01111000; // ****
- 11'h4ac: data = 8'b00000000; //
- 11'h4ad: data = 8'b00000000; //
- 11'h4ae: data = 8'b00000000; //
- 11'h4af: data = 8'b00000000; //
- //code x4b
- 11'h4b0: data = 8'b00000000; //
- 11'h4b1: data = 8'b00000000; //
- 11'h4b2: data = 8'b11100110; // *** **
- 11'h4b3: data = 8'b01100110; // ** **
- 11'h4b4: data = 8'b01100110; // ** **
- 11'h4b5: data = 8'b01101100; // ** **
- 11'h4b6: data = 8'b01111000; // ****
- 11'h4b7: data = 8'b01111000; // ****
- 11'h4b8: data = 8'b01101100; // ** **
- 11'h4b9: data = 8'b01100110; // ** **
- 11'h4ba: data = 8'b01100110; // ** **
- 11'h4bb: data = 8'b11100110; // *** **
- 11'h4bc: data = 8'b00000000; //
- 11'h4bd: data = 8'b00000000; //
- 11'h4be: data = 8'b00000000; //
- 11'h4bf: data = 8'b00000000; //
- //code x4c
- 11'h4c0: data = 8'b00000000; //
- 11'h4c1: data = 8'b00000000; //
- 11'h4c2: data = 8'b11110000; // ****
- 11'h4c3: data = 8'b01100000; // **
- 11'h4c4: data = 8'b01100000; // **
- 11'h4c5: data = 8'b01100000; // **
- 11'h4c6: data = 8'b01100000; // **
- 11'h4c7: data = 8'b01100000; // **
- 11'h4c8: data = 8'b01100000; // **
- 11'h4c9: data = 8'b01100010; // ** *
- 11'h4ca: data = 8'b01100110; // ** **
- 11'h4cb: data = 8'b11111110; // *******
- 11'h4cc: data = 8'b00000000; //
- 11'h4cd: data = 8'b00000000; //
- 11'h4ce: data = 8'b00000000; //
- 11'h4cf: data = 8'b00000000; //
- //code x4d
- 11'h4d0: data = 8'b00000000; //
- 11'h4d1: data = 8'b00000000; //
- 11'h4d2: data = 8'b11000011; // ** **
- 11'h4d3: data = 8'b11100111; // *** ***
- 11'h4d4: data = 8'b11111111; // ********
- 11'h4d5: data = 8'b11111111; // ********
- 11'h4d6: data = 8'b11011011; // ** ** **
- 11'h4d7: data = 8'b11000011; // ** **
- 11'h4d8: data = 8'b11000011; // ** **
- 11'h4d9: data = 8'b11000011; // ** **
- 11'h4da: data = 8'b11000011; // ** **
- 11'h4db: data = 8'b11000011; // ** **
- 11'h4dc: data = 8'b00000000; //
- 11'h4dd: data = 8'b00000000; //
- 11'h4de: data = 8'b00000000; //
- 11'h4df: data = 8'b00000000; //
- //code x4e
- 11'h4e0: data = 8'b00000000; //
- 11'h4e1: data = 8'b00000000; //
- 11'h4e2: data = 8'b11000110; // ** **
- 11'h4e3: data = 8'b11100110; // *** **
- 11'h4e4: data = 8'b11110110; // **** **
- 11'h4e5: data = 8'b11111110; // *******
- 11'h4e6: data = 8'b11011110; // ** ****
- 11'h4e7: data = 8'b11001110; // ** ***
- 11'h4e8: data = 8'b11000110; // ** **
- 11'h4e9: data = 8'b11000110; // ** **
- 11'h4ea: data = 8'b11000110; // ** **
- 11'h4eb: data = 8'b11000110; // ** **
- 11'h4ec: data = 8'b00000000; //
- 11'h4ed: data = 8'b00000000; //
- 11'h4ee: data = 8'b00000000; //
- 11'h4ef: data = 8'b00000000; //
- //code x4f
- 11'h4f0: data = 8'b00000000; //
- 11'h4f1: data = 8'b00000000; //
- 11'h4f2: data = 8'b01111100; // *****
- 11'h4f3: data = 8'b11000110; // ** **
- 11'h4f4: data = 8'b11000110; // ** **
- 11'h4f5: data = 8'b11000110; // ** **
- 11'h4f6: data = 8'b11000110; // ** **
- 11'h4f7: data = 8'b11000110; // ** **
- 11'h4f8: data = 8'b11000110; // ** **
- 11'h4f9: data = 8'b11000110; // ** **
- 11'h4fa: data = 8'b11000110; // ** **
- 11'h4fb: data = 8'b01111100; // *****
- 11'h4fc: data = 8'b00000000; //
- 11'h4fd: data = 8'b00000000; //
- 11'h4fe: data = 8'b00000000; //
- 11'h4ff: data = 8'b00000000; //
- //code x50
- 11'h500: data = 8'b00000000; //
- 11'h501: data = 8'b00000000; //
- 11'h502: data = 8'b11111100; // ******
- 11'h503: data = 8'b01100110; // ** **
- 11'h504: data = 8'b01100110; // ** **
- 11'h505: data = 8'b01100110; // ** **
- 11'h506: data = 8'b01111100; // *****
- 11'h507: data = 8'b01100000; // **
- 11'h508: data = 8'b01100000; // **
- 11'h509: data = 8'b01100000; // **
- 11'h50a: data = 8'b01100000; // **
- 11'h50b: data = 8'b11110000; // ****
- 11'h50c: data = 8'b00000000; //
- 11'h50d: data = 8'b00000000; //
- 11'h50e: data = 8'b00000000; //
- 11'h50f: data = 8'b00000000; //
- //code x510f
- 11'h510: data = 8'b00000000; //
- 11'h511: data = 8'b00000000; //
- 11'h512: data = 8'b01111100; // *****
- 11'h513: data = 8'b11000110; // ** **
- 11'h514: data = 8'b11000110; // ** **
- 11'h515: data = 8'b11000110; // ** **
- 11'h516: data = 8'b11000110; // ** **
- 11'h517: data = 8'b11000110; // ** **
- 11'h518: data = 8'b11000110; // ** **
- 11'h519: data = 8'b11010110; // ** * **
- 11'h51a: data = 8'b11011110; // ** ****
- 11'h51b: data = 8'b01111100; // *****
- 11'h51c: data = 8'b00001100; // **
- 11'h51d: data = 8'b00001110; // ***
- 11'h51e: data = 8'b00000000; //
- 11'h51f: data = 8'b00000000; //
- //code x52
- 11'h520: data = 8'b00000000; //
- 11'h521: data = 8'b00000000; //
- 11'h522: data = 8'b11111100; // ******
- 11'h523: data = 8'b01100110; // ** **
- 11'h524: data = 8'b01100110; // ** **
- 11'h525: data = 8'b01100110; // ** **
- 11'h526: data = 8'b01111100; // *****
- 11'h527: data = 8'b01101100; // ** **
- 11'h528: data = 8'b01100110; // ** **
- 11'h529: data = 8'b01100110; // ** **
- 11'h52a: data = 8'b01100110; // ** **
- 11'h52b: data = 8'b11100110; // *** **
- 11'h52c: data = 8'b00000000; //
- 11'h52d: data = 8'b00000000; //
- 11'h52e: data = 8'b00000000; //
- 11'h52f: data = 8'b00000000; //
- //code x53
- 11'h530: data = 8'b00000000; //
- 11'h531: data = 8'b00000000; //
- 11'h532: data = 8'b01111100; // *****
- 11'h533: data = 8'b11000110; // ** **
- 11'h534: data = 8'b11000110; // ** **
- 11'h535: data = 8'b01100000; // **
- 11'h536: data = 8'b00111000; // ***
- 11'h537: data = 8'b00001100; // **
- 11'h538: data = 8'b00000110; // **
- 11'h539: data = 8'b11000110; // ** **
- 11'h53a: data = 8'b11000110; // ** **
- 11'h53b: data = 8'b01111100; // *****
- 11'h53c: data = 8'b00000000; //
- 11'h53d: data = 8'b00000000; //
- 11'h53e: data = 8'b00000000; //
- 11'h53f: data = 8'b00000000; //
- //code x54
- 11'h540: data = 8'b00000000; //
- 11'h541: data = 8'b00000000; //
- 11'h542: data = 8'b11111111; // ********
- 11'h543: data = 8'b11011011; // ** ** **
- 11'h544: data = 8'b10011001; // * ** *
- 11'h545: data = 8'b00011000; // **
- 11'h546: data = 8'b00011000; // **
- 11'h547: data = 8'b00011000; // **
- 11'h548: data = 8'b00011000; // **
- 11'h549: data = 8'b00011000; // **
- 11'h54a: data = 8'b00011000; // **
- 11'h54b: data = 8'b00111100; // ****
- 11'h54c: data = 8'b00000000; //
- 11'h54d: data = 8'b00000000; //
- 11'h54e: data = 8'b00000000; //
- 11'h54f: data = 8'b00000000; //
- //code x55
- 11'h550: data = 8'b00000000; //
- 11'h551: data = 8'b00000000; //
- 11'h552: data = 8'b11000110; // ** **
- 11'h553: data = 8'b11000110; // ** **
- 11'h554: data = 8'b11000110; // ** **
- 11'h555: data = 8'b11000110; // ** **
- 11'h556: data = 8'b11000110; // ** **
- 11'h557: data = 8'b11000110; // ** **
- 11'h558: data = 8'b11000110; // ** **
- 11'h559: data = 8'b11000110; // ** **
- 11'h55a: data = 8'b11000110; // ** **
- 11'h55b: data = 8'b01111100; // *****
- 11'h55c: data = 8'b00000000; //
- 11'h55d: data = 8'b00000000; //
- 11'h55e: data = 8'b00000000; //
- 11'h55f: data = 8'b00000000; //
- //code x56
- 11'h560: data = 8'b00000000; //
- 11'h561: data = 8'b00000000; //
- 11'h562: data = 8'b11000011; // ** **
- 11'h563: data = 8'b11000011; // ** **
- 11'h564: data = 8'b11000011; // ** **
- 11'h565: data = 8'b11000011; // ** **
- 11'h566: data = 8'b11000011; // ** **
- 11'h567: data = 8'b11000011; // ** **
- 11'h568: data = 8'b11000011; // ** **
- 11'h569: data = 8'b01100110; // ** **
- 11'h56a: data = 8'b00111100; // ****
- 11'h56b: data = 8'b00011000; // **
- 11'h56c: data = 8'b00000000; //
- 11'h56d: data = 8'b00000000; //
- 11'h56e: data = 8'b00000000; //
- 11'h56f: data = 8'b00000000; //
- //code x57
- 11'h570: data = 8'b00000000; //
- 11'h571: data = 8'b00000000; //
- 11'h572: data = 8'b11000011; // ** **
- 11'h573: data = 8'b11000011; // ** **
- 11'h574: data = 8'b11000011; // ** **
- 11'h575: data = 8'b11000011; // ** **
- 11'h576: data = 8'b11000011; // ** **
- 11'h577: data = 8'b11011011; // ** ** **
- 11'h578: data = 8'b11011011; // ** ** **
- 11'h579: data = 8'b11111111; // ********
- 11'h57a: data = 8'b01100110; // ** **
- 11'h57b: data = 8'b01100110; // ** **
- 11'h57c: data = 8'b00000000; //
- 11'h57d: data = 8'b00000000; //
- 11'h57e: data = 8'b00000000; //
- 11'h57f: data = 8'b00000000; //
- //code x58
- 11'h580: data = 8'b00000000; //
- 11'h581: data = 8'b00000000; //
- 11'h582: data = 8'b11000011; // ** **
- 11'h583: data = 8'b11000011; // ** **
- 11'h584: data = 8'b01100110; // ** **
- 11'h585: data = 8'b00111100; // ****
- 11'h586: data = 8'b00011000; // **
- 11'h587: data = 8'b00011000; // **
- 11'h588: data = 8'b00111100; // ****
- 11'h589: data = 8'b01100110; // ** **
- 11'h58a: data = 8'b11000011; // ** **
- 11'h58b: data = 8'b11000011; // ** **
- 11'h58c: data = 8'b00000000; //
- 11'h58d: data = 8'b00000000; //
- 11'h58e: data = 8'b00000000; //
- 11'h58f: data = 8'b00000000; //
- //code x59
- 11'h590: data = 8'b00000000; //
- 11'h591: data = 8'b00000000; //
- 11'h592: data = 8'b11000011; // ** **
- 11'h593: data = 8'b11000011; // ** **
- 11'h594: data = 8'b11000011; // ** **
- 11'h595: data = 8'b01100110; // ** **
- 11'h596: data = 8'b00111100; // ****
- 11'h597: data = 8'b00011000; // **
- 11'h598: data = 8'b00011000; // **
- 11'h599: data = 8'b00011000; // **
- 11'h59a: data = 8'b00011000; // **
- 11'h59b: data = 8'b00111100; // ****
- 11'h59c: data = 8'b00000000; //
- 11'h59d: data = 8'b00000000; //
- 11'h59e: data = 8'b00000000; //
- 11'h59f: data = 8'b00000000; //
- //code x5a
- 11'h5a0: data = 8'b00000000; //
- 11'h5a1: data = 8'b00000000; //
- 11'h5a2: data = 8'b11111111; // ********
- 11'h5a3: data = 8'b11000011; // ** **
- 11'h5a4: data = 8'b10000110; // * **
- 11'h5a5: data = 8'b00001100; // **
- 11'h5a6: data = 8'b00011000; // **
- 11'h5a7: data = 8'b00110000; // **
- 11'h5a8: data = 8'b01100000; // **
- 11'h5a9: data = 8'b11000001; // ** *
- 11'h5aa: data = 8'b11000011; // ** **
- 11'h5ab: data = 8'b11111111; // ********
- 11'h5ac: data = 8'b00000000; //
- 11'h5ad: data = 8'b00000000; //
- 11'h5ae: data = 8'b00000000; //
- 11'h5af: data = 8'b00000000; //
- //code x5b
- 11'h5b0: data = 8'b00000000; //
- 11'h5b1: data = 8'b00000000; //
- 11'h5b2: data = 8'b00111100; // ****
- 11'h5b3: data = 8'b00110000; // **
- 11'h5b4: data = 8'b00110000; // **
- 11'h5b5: data = 8'b00110000; // **
- 11'h5b6: data = 8'b00110000; // **
- 11'h5b7: data = 8'b00110000; // **
- 11'h5b8: data = 8'b00110000; // **
- 11'h5b9: data = 8'b00110000; // **
- 11'h5ba: data = 8'b00110000; // **
- 11'h5bb: data = 8'b00111100; // ****
- 11'h5bc: data = 8'b00000000; //
- 11'h5bd: data = 8'b00000000; //
- 11'h5be: data = 8'b00000000; //
- 11'h5bf: data = 8'b00000000; //
- //code x5c
- 11'h5c0: data = 8'b00000000; //
- 11'h5c1: data = 8'b00000000; //
- 11'h5c2: data = 8'b00000000; //
- 11'h5c3: data = 8'b10000000; // *
- 11'h5c4: data = 8'b11000000; // **
- 11'h5c5: data = 8'b11100000; // ***
- 11'h5c6: data = 8'b01110000; // ***
- 11'h5c7: data = 8'b00111000; // ***
- 11'h5c8: data = 8'b00011100; // ***
- 11'h5c9: data = 8'b00001110; // ***
- 11'h5ca: data = 8'b00000110; // **
- 11'h5cb: data = 8'b00000010; // *
- 11'h5cc: data = 8'b00000000; //
- 11'h5cd: data = 8'b00000000; //
- 11'h5ce: data = 8'b00000000; //
- 11'h5cf: data = 8'b00000000; //
- //code x5d
- 11'h5d0: data = 8'b00000000; //
- 11'h5d1: data = 8'b00000000; //
- 11'h5d2: data = 8'b00111100; // ****
- 11'h5d3: data = 8'b00001100; // **
- 11'h5d4: data = 8'b00001100; // **
- 11'h5d5: data = 8'b00001100; // **
- 11'h5d6: data = 8'b00001100; // **
- 11'h5d7: data = 8'b00001100; // **
- 11'h5d8: data = 8'b00001100; // **
- 11'h5d9: data = 8'b00001100; // **
- 11'h5da: data = 8'b00001100; // **
- 11'h5db: data = 8'b00111100; // ****
- 11'h5dc: data = 8'b00000000; //
- 11'h5dd: data = 8'b00000000; //
- 11'h5de: data = 8'b00000000; //
- 11'h5df: data = 8'b00000000; //
- //code x5e
- 11'h5e0: data = 8'b00010000; // *
- 11'h5e1: data = 8'b00111000; // ***
- 11'h5e2: data = 8'b01101100; // ** **
- 11'h5e3: data = 8'b11000110; // ** **
- 11'h5e4: data = 8'b00000000; //
- 11'h5e5: data = 8'b00000000; //
- 11'h5e6: data = 8'b00000000; //
- 11'h5e7: data = 8'b00000000; //
- 11'h5e8: data = 8'b00000000; //
- 11'h5e9: data = 8'b00000000; //
- 11'h5ea: data = 8'b00000000; //
- 11'h5eb: data = 8'b00000000; //
- 11'h5ec: data = 8'b00000000; //
- 11'h5ed: data = 8'b00000000; //
- 11'h5ee: data = 8'b00000000; //
- 11'h5ef: data = 8'b00000000; //
- //code x5f
- 11'h5f0: data = 8'b00000000; //
- 11'h5f1: data = 8'b00000000; //
- 11'h5f2: data = 8'b00000000; //
- 11'h5f3: data = 8'b00000000; //
- 11'h5f4: data = 8'b00000000; //
- 11'h5f5: data = 8'b00000000; //
- 11'h5f6: data = 8'b00000000; //
- 11'h5f7: data = 8'b00000000; //
- 11'h5f8: data = 8'b00000000; //
- 11'h5f9: data = 8'b00000000; //
- 11'h5fa: data = 8'b00000000; //
- 11'h5fb: data = 8'b00000000; //
- 11'h5fc: data = 8'b00000000; //
- 11'h5fd: data = 8'b11111111; // ********
- 11'h5fe: data = 8'b00000000; //
- 11'h5ff: data = 8'b00000000; //
- //code x60
- 11'h600: data = 8'b00110000; // **
- 11'h601: data = 8'b00110000; // **
- 11'h602: data = 8'b00011000; // **
- 11'h603: data = 8'b00000000; //
- 11'h604: data = 8'b00000000; //
- 11'h605: data = 8'b00000000; //
- 11'h606: data = 8'b00000000; //
- 11'h607: data = 8'b00000000; //
- 11'h608: data = 8'b00000000; //
- 11'h609: data = 8'b00000000; //
- 11'h60a: data = 8'b00000000; //
- 11'h60b: data = 8'b00000000; //
- 11'h60c: data = 8'b00000000; //
- 11'h60d: data = 8'b00000000; //
- 11'h60e: data = 8'b00000000; //
- 11'h60f: data = 8'b00000000; //
- //code x61
- 11'h610: data = 8'b00000000; //
- 11'h611: data = 8'b00000000; //
- 11'h612: data = 8'b00000000; //
- 11'h613: data = 8'b00000000; //
- 11'h614: data = 8'b00000000; //
- 11'h615: data = 8'b01111000; // ****
- 11'h616: data = 8'b00001100; // **
- 11'h617: data = 8'b01111100; // *****
- 11'h618: data = 8'b11001100; // ** **
- 11'h619: data = 8'b11001100; // ** **
- 11'h61a: data = 8'b11001100; // ** **
- 11'h61b: data = 8'b01110110; // *** **
- 11'h61c: data = 8'b00000000; //
- 11'h61d: data = 8'b00000000; //
- 11'h61e: data = 8'b00000000; //
- 11'h61f: data = 8'b00000000; //
- //code x62
- 11'h620: data = 8'b00000000; //
- 11'h621: data = 8'b00000000; //
- 11'h622: data = 8'b11100000; // ***
- 11'h623: data = 8'b01100000; // **
- 11'h624: data = 8'b01100000; // **
- 11'h625: data = 8'b01111000; // ****
- 11'h626: data = 8'b01101100; // ** **
- 11'h627: data = 8'b01100110; // ** **
- 11'h628: data = 8'b01100110; // ** **
- 11'h629: data = 8'b01100110; // ** **
- 11'h62a: data = 8'b01100110; // ** **
- 11'h62b: data = 8'b01111100; // *****
- 11'h62c: data = 8'b00000000; //
- 11'h62d: data = 8'b00000000; //
- 11'h62e: data = 8'b00000000; //
- 11'h62f: data = 8'b00000000; //
- //code x63
- 11'h630: data = 8'b00000000; //
- 11'h631: data = 8'b00000000; //
- 11'h632: data = 8'b00000000; //
- 11'h633: data = 8'b00000000; //
- 11'h634: data = 8'b00000000; //
- 11'h635: data = 8'b01111100; // *****
- 11'h636: data = 8'b11000110; // ** **
- 11'h637: data = 8'b11000000; // **
- 11'h638: data = 8'b11000000; // **
- 11'h639: data = 8'b11000000; // **
- 11'h63a: data = 8'b11000110; // ** **
- 11'h63b: data = 8'b01111100; // *****
- 11'h63c: data = 8'b00000000; //
- 11'h63d: data = 8'b00000000; //
- 11'h63e: data = 8'b00000000; //
- 11'h63f: data = 8'b00000000; //
- //code x64
- 11'h640: data = 8'b00000000; //
- 11'h641: data = 8'b00000000; //
- 11'h642: data = 8'b00011100; // ***
- 11'h643: data = 8'b00001100; // **
- 11'h644: data = 8'b00001100; // **
- 11'h645: data = 8'b00111100; // ****
- 11'h646: data = 8'b01101100; // ** **
- 11'h647: data = 8'b11001100; // ** **
- 11'h648: data = 8'b11001100; // ** **
- 11'h649: data = 8'b11001100; // ** **
- 11'h64a: data = 8'b11001100; // ** **
- 11'h64b: data = 8'b01110110; // *** **
- 11'h64c: data = 8'b00000000; //
- 11'h64d: data = 8'b00000000; //
- 11'h64e: data = 8'b00000000; //
- 11'h64f: data = 8'b00000000; //
- //code x65
- 11'h650: data = 8'b00000000; //
- 11'h651: data = 8'b00000000; //
- 11'h652: data = 8'b00000000; //
- 11'h653: data = 8'b00000000; //
- 11'h654: data = 8'b00000000; //
- 11'h655: data = 8'b01111100; // *****
- 11'h656: data = 8'b11000110; // ** **
- 11'h657: data = 8'b11111110; // *******
- 11'h658: data = 8'b11000000; // **
- 11'h659: data = 8'b11000000; // **
- 11'h65a: data = 8'b11000110; // ** **
- 11'h65b: data = 8'b01111100; // *****
- 11'h65c: data = 8'b00000000; //
- 11'h65d: data = 8'b00000000; //
- 11'h65e: data = 8'b00000000; //
- 11'h65f: data = 8'b00000000; //
- //code x66
- 11'h660: data = 8'b00000000; //
- 11'h661: data = 8'b00000000; //
- 11'h662: data = 8'b00111000; // ***
- 11'h663: data = 8'b01101100; // ** **
- 11'h664: data = 8'b01100100; // ** *
- 11'h665: data = 8'b01100000; // **
- 11'h666: data = 8'b11110000; // ****
- 11'h667: data = 8'b01100000; // **
- 11'h668: data = 8'b01100000; // **
- 11'h669: data = 8'b01100000; // **
- 11'h66a: data = 8'b01100000; // **
- 11'h66b: data = 8'b11110000; // ****
- 11'h66c: data = 8'b00000000; //
- 11'h66d: data = 8'b00000000; //
- 11'h66e: data = 8'b00000000; //
- 11'h66f: data = 8'b00000000; //
- //code x67
- 11'h670: data = 8'b00000000; //
- 11'h671: data = 8'b00000000; //
- 11'h672: data = 8'b00000000; //
- 11'h673: data = 8'b00000000; //
- 11'h674: data = 8'b00000000; //
- 11'h675: data = 8'b01110110; // *** **
- 11'h676: data = 8'b11001100; // ** **
- 11'h677: data = 8'b11001100; // ** **
- 11'h678: data = 8'b11001100; // ** **
- 11'h679: data = 8'b11001100; // ** **
- 11'h67a: data = 8'b11001100; // ** **
- 11'h67b: data = 8'b01111100; // *****
- 11'h67c: data = 8'b00001100; // **
- 11'h67d: data = 8'b11001100; // ** **
- 11'h67e: data = 8'b01111000; // ****
- 11'h67f: data = 8'b00000000; //
- //code x68
- 11'h680: data = 8'b00000000; //
- 11'h681: data = 8'b00000000; //
- 11'h682: data = 8'b11100000; // ***
- 11'h683: data = 8'b01100000; // **
- 11'h684: data = 8'b01100000; // **
- 11'h685: data = 8'b01101100; // ** **
- 11'h686: data = 8'b01110110; // *** **
- 11'h687: data = 8'b01100110; // ** **
- 11'h688: data = 8'b01100110; // ** **
- 11'h689: data = 8'b01100110; // ** **
- 11'h68a: data = 8'b01100110; // ** **
- 11'h68b: data = 8'b11100110; // *** **
- 11'h68c: data = 8'b00000000; //
- 11'h68d: data = 8'b00000000; //
- 11'h68e: data = 8'b00000000; //
- 11'h68f: data = 8'b00000000; //
- //code x69
- 11'h690: data = 8'b00000000; //
- 11'h691: data = 8'b00000000; //
- 11'h692: data = 8'b00011000; // **
- 11'h693: data = 8'b00011000; // **
- 11'h694: data = 8'b00000000; //
- 11'h695: data = 8'b00111000; // ***
- 11'h696: data = 8'b00011000; // **
- 11'h697: data = 8'b00011000; // **
- 11'h698: data = 8'b00011000; // **
- 11'h699: data = 8'b00011000; // **
- 11'h69a: data = 8'b00011000; // **
- 11'h69b: data = 8'b00111100; // ****
- 11'h69c: data = 8'b00000000; //
- 11'h69d: data = 8'b00000000; //
- 11'h69e: data = 8'b00000000; //
- 11'h69f: data = 8'b00000000; //
- //code x6a
- 11'h6a0: data = 8'b00000000; //
- 11'h6a1: data = 8'b00000000; //
- 11'h6a2: data = 8'b00000110; // **
- 11'h6a3: data = 8'b00000110; // **
- 11'h6a4: data = 8'b00000000; //
- 11'h6a5: data = 8'b00001110; // ***
- 11'h6a6: data = 8'b00000110; // **
- 11'h6a7: data = 8'b00000110; // **
- 11'h6a8: data = 8'b00000110; // **
- 11'h6a9: data = 8'b00000110; // **
- 11'h6aa: data = 8'b00000110; // **
- 11'h6ab: data = 8'b00000110; // **
- 11'h6ac: data = 8'b01100110; // ** **
- 11'h6ad: data = 8'b01100110; // ** **
- 11'h6ae: data = 8'b00111100; // ****
- 11'h6af: data = 8'b00000000; //
- //code x6b
- 11'h6b0: data = 8'b00000000; //
- 11'h6b1: data = 8'b00000000; //
- 11'h6b2: data = 8'b11100000; // ***
- 11'h6b3: data = 8'b01100000; // **
- 11'h6b4: data = 8'b01100000; // **
- 11'h6b5: data = 8'b01100110; // ** **
- 11'h6b6: data = 8'b01101100; // ** **
- 11'h6b7: data = 8'b01111000; // ****
- 11'h6b8: data = 8'b01111000; // ****
- 11'h6b9: data = 8'b01101100; // ** **
- 11'h6ba: data = 8'b01100110; // ** **
- 11'h6bb: data = 8'b11100110; // *** **
- 11'h6bc: data = 8'b00000000; //
- 11'h6bd: data = 8'b00000000; //
- 11'h6be: data = 8'b00000000; //
- 11'h6bf: data = 8'b00000000; //
- //code x6c
- 11'h6c0: data = 8'b00000000; //
- 11'h6c1: data = 8'b00000000; //
- 11'h6c2: data = 8'b00111000; // ***
- 11'h6c3: data = 8'b00011000; // **
- 11'h6c4: data = 8'b00011000; // **
- 11'h6c5: data = 8'b00011000; // **
- 11'h6c6: data = 8'b00011000; // **
- 11'h6c7: data = 8'b00011000; // **
- 11'h6c8: data = 8'b00011000; // **
- 11'h6c9: data = 8'b00011000; // **
- 11'h6ca: data = 8'b00011000; // **
- 11'h6cb: data = 8'b00111100; // ****
- 11'h6cc: data = 8'b00000000; //
- 11'h6cd: data = 8'b00000000; //
- 11'h6ce: data = 8'b00000000; //
- 11'h6cf: data = 8'b00000000; //
- //code x6d
- 11'h6d0: data = 8'b00000000; //
- 11'h6d1: data = 8'b00000000; //
- 11'h6d2: data = 8'b00000000; //
- 11'h6d3: data = 8'b00000000; //
- 11'h6d4: data = 8'b00000000; //
- 11'h6d5: data = 8'b11100110; // *** **
- 11'h6d6: data = 8'b11111111; // ********
- 11'h6d7: data = 8'b11011011; // ** ** **
- 11'h6d8: data = 8'b11011011; // ** ** **
- 11'h6d9: data = 8'b11011011; // ** ** **
- 11'h6da: data = 8'b11011011; // ** ** **
- 11'h6db: data = 8'b11011011; // ** ** **
- 11'h6dc: data = 8'b00000000; //
- 11'h6dd: data = 8'b00000000; //
- 11'h6de: data = 8'b00000000; //
- 11'h6df: data = 8'b00000000; //
- //code x6e
- 11'h6e0: data = 8'b00000000; //
- 11'h6e1: data = 8'b00000000; //
- 11'h6e2: data = 8'b00000000; //
- 11'h6e3: data = 8'b00000000; //
- 11'h6e4: data = 8'b00000000; //
- 11'h6e5: data = 8'b11011100; // ** ***
- 11'h6e6: data = 8'b01100110; // ** **
- 11'h6e7: data = 8'b01100110; // ** **
- 11'h6e8: data = 8'b01100110; // ** **
- 11'h6e9: data = 8'b01100110; // ** **
- 11'h6ea: data = 8'b01100110; // ** **
- 11'h6eb: data = 8'b01100110; // ** **
- 11'h6ec: data = 8'b00000000; //
- 11'h6ed: data = 8'b00000000; //
- 11'h6ee: data = 8'b00000000; //
- 11'h6ef: data = 8'b00000000; //
- //code x6f
- 11'h6f0: data = 8'b00000000; //
- 11'h6f1: data = 8'b00000000; //
- 11'h6f2: data = 8'b00000000; //
- 11'h6f3: data = 8'b00000000; //
- 11'h6f4: data = 8'b00000000; //
- 11'h6f5: data = 8'b01111100; // *****
- 11'h6f6: data = 8'b11000110; // ** **
- 11'h6f7: data = 8'b11000110; // ** **
- 11'h6f8: data = 8'b11000110; // ** **
- 11'h6f9: data = 8'b11000110; // ** **
- 11'h6fa: data = 8'b11000110; // ** **
- 11'h6fb: data = 8'b01111100; // *****
- 11'h6fc: data = 8'b00000000; //
- 11'h6fd: data = 8'b00000000; //
- 11'h6fe: data = 8'b00000000; //
- 11'h6ff: data = 8'b00000000; //
- //code x70
- 11'h700: data = 8'b00000000; //
- 11'h701: data = 8'b00000000; //
- 11'h702: data = 8'b00000000; //
- 11'h703: data = 8'b00000000; //
- 11'h704: data = 8'b00000000; //
- 11'h705: data = 8'b11011100; // ** ***
- 11'h706: data = 8'b01100110; // ** **
- 11'h707: data = 8'b01100110; // ** **
- 11'h708: data = 8'b01100110; // ** **
- 11'h709: data = 8'b01100110; // ** **
- 11'h70a: data = 8'b01100110; // ** **
- 11'h70b: data = 8'b01111100; // *****
- 11'h70c: data = 8'b01100000; // **
- 11'h70d: data = 8'b01100000; // **
- 11'h70e: data = 8'b11110000; // ****
- 11'h70f: data = 8'b00000000; //
- //code x71
- 11'h710: data = 8'b00000000; //
- 11'h711: data = 8'b00000000; //
- 11'h712: data = 8'b00000000; //
- 11'h713: data = 8'b00000000; //
- 11'h714: data = 8'b00000000; //
- 11'h715: data = 8'b01110110; // *** **
- 11'h716: data = 8'b11001100; // ** **
- 11'h717: data = 8'b11001100; // ** **
- 11'h718: data = 8'b11001100; // ** **
- 11'h719: data = 8'b11001100; // ** **
- 11'h71a: data = 8'b11001100; // ** **
- 11'h71b: data = 8'b01111100; // *****
- 11'h71c: data = 8'b00001100; // **
- 11'h71d: data = 8'b00001100; // **
- 11'h71e: data = 8'b00011110; // ****
- 11'h71f: data = 8'b00000000; //
- //code x72
- 11'h720: data = 8'b00000000; //
- 11'h721: data = 8'b00000000; //
- 11'h722: data = 8'b00000000; //
- 11'h723: data = 8'b00000000; //
- 11'h724: data = 8'b00000000; //
- 11'h725: data = 8'b11011100; // ** ***
- 11'h726: data = 8'b01110110; // *** **
- 11'h727: data = 8'b01100110; // ** **
- 11'h728: data = 8'b01100000; // **
- 11'h729: data = 8'b01100000; // **
- 11'h72a: data = 8'b01100000; // **
- 11'h72b: data = 8'b11110000; // ****
- 11'h72c: data = 8'b00000000; //
- 11'h72d: data = 8'b00000000; //
- 11'h72e: data = 8'b00000000; //
- 11'h72f: data = 8'b00000000; //
- //code x73
- 11'h730: data = 8'b00000000; //
- 11'h731: data = 8'b00000000; //
- 11'h732: data = 8'b00000000; //
- 11'h733: data = 8'b00000000; //
- 11'h734: data = 8'b00000000; //
- 11'h735: data = 8'b01111100; // *****
- 11'h736: data = 8'b11000110; // ** **
- 11'h737: data = 8'b01100000; // **
- 11'h738: data = 8'b00111000; // ***
- 11'h739: data = 8'b00001100; // **
- 11'h73a: data = 8'b11000110; // ** **
- 11'h73b: data = 8'b01111100; // *****
- 11'h73c: data = 8'b00000000; //
- 11'h73d: data = 8'b00000000; //
- 11'h73e: data = 8'b00000000; //
- 11'h73f: data = 8'b00000000; //
- //code x74
- 11'h740: data = 8'b00000000; //
- 11'h741: data = 8'b00000000; //
- 11'h742: data = 8'b00010000; // *
- 11'h743: data = 8'b00110000; // **
- 11'h744: data = 8'b00110000; // **
- 11'h745: data = 8'b11111100; // ******
- 11'h746: data = 8'b00110000; // **
- 11'h747: data = 8'b00110000; // **
- 11'h748: data = 8'b00110000; // **
- 11'h749: data = 8'b00110000; // **
- 11'h74a: data = 8'b00110110; // ** **
- 11'h74b: data = 8'b00011100; // ***
- 11'h74c: data = 8'b00000000; //
- 11'h74d: data = 8'b00000000; //
- 11'h74e: data = 8'b00000000; //
- 11'h74f: data = 8'b00000000; //
- //code x75
- 11'h750: data = 8'b00000000; //
- 11'h751: data = 8'b00000000; //
- 11'h752: data = 8'b00000000; //
- 11'h753: data = 8'b00000000; //
- 11'h754: data = 8'b00000000; //
- 11'h755: data = 8'b11001100; // ** **
- 11'h756: data = 8'b11001100; // ** **
- 11'h757: data = 8'b11001100; // ** **
- 11'h758: data = 8'b11001100; // ** **
- 11'h759: data = 8'b11001100; // ** **
- 11'h75a: data = 8'b11001100; // ** **
- 11'h75b: data = 8'b01110110; // *** **
- 11'h75c: data = 8'b00000000; //
- 11'h75d: data = 8'b00000000; //
- 11'h75e: data = 8'b00000000; //
- 11'h75f: data = 8'b00000000; //
- //code x76
- 11'h760: data = 8'b00000000; //
- 11'h761: data = 8'b00000000; //
- 11'h762: data = 8'b00000000; //
- 11'h763: data = 8'b00000000; //
- 11'h764: data = 8'b00000000; //
- 11'h765: data = 8'b11000011; // ** **
- 11'h766: data = 8'b11000011; // ** **
- 11'h767: data = 8'b11000011; // ** **
- 11'h768: data = 8'b11000011; // ** **
- 11'h769: data = 8'b01100110; // ** **
- 11'h76a: data = 8'b00111100; // ****
- 11'h76b: data = 8'b00011000; // **
- 11'h76c: data = 8'b00000000; //
- 11'h76d: data = 8'b00000000; //
- 11'h76e: data = 8'b00000000; //
- 11'h76f: data = 8'b00000000; //
- //code x77
- 11'h770: data = 8'b00000000; //
- 11'h771: data = 8'b00000000; //
- 11'h772: data = 8'b00000000; //
- 11'h773: data = 8'b00000000; //
- 11'h774: data = 8'b00000000; //
- 11'h775: data = 8'b11000011; // ** **
- 11'h776: data = 8'b11000011; // ** **
- 11'h777: data = 8'b11000011; // ** **
- 11'h778: data = 8'b11011011; // ** ** **
- 11'h779: data = 8'b11011011; // ** ** **
- 11'h77a: data = 8'b11111111; // ********
- 11'h77b: data = 8'b01100110; // ** **
- 11'h77c: data = 8'b00000000; //
- 11'h77d: data = 8'b00000000; //
- 11'h77e: data = 8'b00000000; //
- 11'h77f: data = 8'b00000000; //
- //code x78
- 11'h780: data = 8'b00000000; //
- 11'h781: data = 8'b00000000; //
- 11'h782: data = 8'b00000000; //
- 11'h783: data = 8'b00000000; //
- 11'h784: data = 8'b00000000; //
- 11'h785: data = 8'b11000011; // ** **
- 11'h786: data = 8'b01100110; // ** **
- 11'h787: data = 8'b00111100; // ****
- 11'h788: data = 8'b00011000; // **
- 11'h789: data = 8'b00111100; // ****
- 11'h78a: data = 8'b01100110; // ** **
- 11'h78b: data = 8'b11000011; // ** **
- 11'h78c: data = 8'b00000000; //
- 11'h78d: data = 8'b00000000; //
- 11'h78e: data = 8'b00000000; //
- 11'h78f: data = 8'b00000000; //
- //code x79
- 11'h790: data = 8'b00000000; //
- 11'h791: data = 8'b00000000; //
- 11'h792: data = 8'b00000000; //
- 11'h793: data = 8'b00000000; //
- 11'h794: data = 8'b00000000; //
- 11'h795: data = 8'b11000110; // ** **
- 11'h796: data = 8'b11000110; // ** **
- 11'h797: data = 8'b11000110; // ** **
- 11'h798: data = 8'b11000110; // ** **
- 11'h799: data = 8'b11000110; // ** **
- 11'h79a: data = 8'b11000110; // ** **
- 11'h79b: data = 8'b01111110; // ******
- 11'h79c: data = 8'b00000110; // **
- 11'h79d: data = 8'b00001100; // **
- 11'h79e: data = 8'b11111000; // *****
- 11'h79f: data = 8'b00000000; //
- //code x7a
- 11'h7a0: data = 8'b00000000; //
- 11'h7a1: data = 8'b00000000; //
- 11'h7a2: data = 8'b00000000; //
- 11'h7a3: data = 8'b00000000; //
- 11'h7a4: data = 8'b00000000; //
- 11'h7a5: data = 8'b11111110; // *******
- 11'h7a6: data = 8'b11001100; // ** **
- 11'h7a7: data = 8'b00011000; // **
- 11'h7a8: data = 8'b00110000; // **
- 11'h7a9: data = 8'b01100000; // **
- 11'h7aa: data = 8'b11000110; // ** **
- 11'h7ab: data = 8'b11111110; // *******
- 11'h7ac: data = 8'b00000000; //
- 11'h7ad: data = 8'b00000000; //
- 11'h7ae: data = 8'b00000000; //
- 11'h7af: data = 8'b00000000; //
- //code x7b
- 11'h7b0: data = 8'b00000000; //
- 11'h7b1: data = 8'b00000000; //
- 11'h7b2: data = 8'b00001110; // ***
- 11'h7b3: data = 8'b00011000; // **
- 11'h7b4: data = 8'b00011000; // **
- 11'h7b5: data = 8'b00011000; // **
- 11'h7b6: data = 8'b01110000; // ***
- 11'h7b7: data = 8'b00011000; // **
- 11'h7b8: data = 8'b00011000; // **
- 11'h7b9: data = 8'b00011000; // **
- 11'h7ba: data = 8'b00011000; // **
- 11'h7bb: data = 8'b00001110; // ***
- 11'h7bc: data = 8'b00000000; //
- 11'h7bd: data = 8'b00000000; //
- 11'h7be: data = 8'b00000000; //
- 11'h7bf: data = 8'b00000000; //
- //code x7c
- 11'h7c0: data = 8'b00000000; //
- 11'h7c1: data = 8'b00000000; //
- 11'h7c2: data = 8'b00011000; // **
- 11'h7c3: data = 8'b00011000; // **
- 11'h7c4: data = 8'b00011000; // **
- 11'h7c5: data = 8'b00011000; // **
- 11'h7c6: data = 8'b00000000; //
- 11'h7c7: data = 8'b00011000; // **
- 11'h7c8: data = 8'b00011000; // **
- 11'h7c9: data = 8'b00011000; // **
- 11'h7ca: data = 8'b00011000; // **
- 11'h7cb: data = 8'b00011000; // **
- 11'h7cc: data = 8'b00000000; //
- 11'h7cd: data = 8'b00000000; //
- 11'h7ce: data = 8'b00000000; //
- 11'h7cf: data = 8'b00000000; //
- //code x7d
- 11'h7d0: data = 8'b00000000; //
- 11'h7d1: data = 8'b00000000; //
- 11'h7d2: data = 8'b01110000; // ***
- 11'h7d3: data = 8'b00011000; // **
- 11'h7d4: data = 8'b00011000; // **
- 11'h7d5: data = 8'b00011000; // **
- 11'h7d6: data = 8'b00001110; // ***
- 11'h7d7: data = 8'b00011000; // **
- 11'h7d8: data = 8'b00011000; // **
- 11'h7d9: data = 8'b00011000; // **
- 11'h7da: data = 8'b00011000; // **
- 11'h7db: data = 8'b01110000; // ***
- 11'h7dc: data = 8'b00000000; //
- 11'h7dd: data = 8'b00000000; //
- 11'h7de: data = 8'b00000000; //
- 11'h7df: data = 8'b00000000; //
- //code x7e
- 11'h7e0: data = 8'b00000000; //
- 11'h7e1: data = 8'b00000000; //
- 11'h7e2: data = 8'b01110110; // *** **
- 11'h7e3: data = 8'b11011100; // ** ***
- 11'h7e4: data = 8'b00000000; //
- 11'h7e5: data = 8'b00000000; //
- 11'h7e6: data = 8'b00000000; //
- 11'h7e7: data = 8'b00000000; //
- 11'h7e8: data = 8'b00000000; //
- 11'h7e9: data = 8'b00000000; //
- 11'h7ea: data = 8'b00000000; //
- 11'h7eb: data = 8'b00000000; //
- 11'h7ec: data = 8'b00000000; //
- 11'h7ed: data = 8'b00000000; //
- 11'h7ee: data = 8'b00000000; //
- 11'h7ef: data = 8'b00000000; //
- //code x7f
- 11'h7f0: data = 8'b00000000; //
- 11'h7f1: data = 8'b00000000; //
- 11'h7f2: data = 8'b00000000; //
- 11'h7f3: data = 8'b00000000; //
- 11'h7f4: data = 8'b00010000; // *
- 11'h7f5: data = 8'b00111000; // ***
- 11'h7f6: data = 8'b01101100; // ** **
- 11'h7f7: data = 8'b11000110; // ** **
- 11'h7f8: data = 8'b11000110; // ** **
- 11'h7f9: data = 8'b11000110; // ** **
- 11'h7fa: data = 8'b11111110; // *******
- 11'h7fb: data = 8'b00000000; //
- 11'h7fc: data = 8'b00000000; //
- 11'h7fd: data = 8'b00000000; //
- 11'h7fe: data = 8'b00000000; //
- 11'h7ff: data = 8'b00000000; //
- endcase
-
-endmodule
\ No newline at end of file
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/pong_graph.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/pong_graph.v
deleted file mode 100644
index 55f27a8..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/pong_graph.v
+++ /dev/null
@@ -1,249 +0,0 @@
-`timescale 1ns / 1ps
-
-module pong_graph(
- input wire clk, reset,
- input wire [1:0] btn1,
- input wire [1:0] btn2,
- input wire [9:0] pix_x, pix_y,
- input wire graph_still,
- output reg miss, hit_left, hit_right,
- output wire graph_on,
- output reg [2:0] graph_rgb,
- output reg [7:0] left_score, right_score
- );
-
- // define constant value here
- localparam MAX_X = 640;
- localparam MAX_Y = 480;
- localparam BALL_SIZE = 8;
- localparam BAR_SIZE = 108;
- localparam BAR_V = 4;
- localparam BAR_LEFT_X = 40;
- localparam BAR_RIGHT_X = 600;
- localparam BAR_WIDTH = 6;
- localparam V_X = 3;
- localparam V_X_N = -3;
- localparam V_Y = 3;
- localparam V_Y_N = -3;
-
- // all about ball
- reg [9:0] ball_x, ball_y;
- wire [9:0] ball_x_next, ball_y_next;
- wire [9:0] ball_right, ball_left, ball_top, ball_bottom;
- reg [9:0] x_delta, x_delta_next;
- reg [9:0] y_delta, y_delta_next;
-
- wire [2:0] ball_row, ball_col;
- reg [7:0] ball_data;
-
- // all about the output rgb
- wire bar_on, ball_on;
- wire [2:0] bar_rgb, ball_rgb;
-
- // colors
- assign bar_rgb = 3'b101; // purple
- assign ball_rgb = 3'b100; // red
-
- // bar right & left
- reg [9:0] bar_right, bar_right_next;
- reg [9:0] bar_left, bar_left_next;
- wire [9:0] bar_right_top, bar_right_bottom;
- wire [9:0] bar_left_top, bar_left_bottom;
-
- // to judge wether added
- reg added;
-
- // refr_tick: 1-clock tick asserted at start of v-sync
- // i.e., when the screen is refreshed (60 Hz)
- assign refr_tick = (pix_y == 481) && (pix_x == 0);
-
- // keep refreshing all the assistant values
- assign ball_right = ball_x + 4;
- assign ball_left = ball_x - 3;
- assign ball_top = ball_y - 3;
- assign ball_bottom = ball_y + 4;
- assign ball_x_next = (graph_still) ? MAX_X / 2 :
- (refr_tick) ? ball_x + x_delta : ball_x;
- assign ball_y_next = (graph_still) ? MAX_Y / 2 :
- (refr_tick) ? ball_y + y_delta : ball_y;
-
- assign ball_row = pix_y[2:0] - ball_top[2:0];
- assign ball_col = pix_x[2:0] - ball_left[2:0];
- assign ball_bit = ball_data[ball_col];
-
- assign ball_on = (ball_left <= pix_x) && (pix_x <= ball_right)
- && (ball_top <= pix_y) && (pix_y <= ball_bottom)
- && ball_bit;
-
- assign bar_right_top = bar_right - BAR_SIZE / 2;
- assign bar_right_bottom = bar_right + BAR_SIZE / 2;
- assign bar_left_top = bar_left - BAR_SIZE / 2;
- assign bar_left_bottom = bar_left + BAR_SIZE / 2;
-
- assign bar_on = ((BAR_LEFT_X <= pix_x) && (pix_x <= BAR_LEFT_X + BAR_WIDTH)
- && (bar_right_top <= pix_y) && (pix_y <= bar_right_bottom))
- || ((BAR_RIGHT_X >= pix_x) && (pix_x >= BAR_RIGHT_X - BAR_WIDTH)
- && (bar_left_top <= pix_y) && (pix_y <= bar_left_bottom));
-
- // provide the ball's data
- always @*
- case (ball_row)
- 3'h0: ball_data = 8'b00111100; // ****
- 3'h1: ball_data = 8'b01111110; // ******
- 3'h2: ball_data = 8'b11111111; // ********
- 3'h3: ball_data = 8'b11111111; // ********
- 3'h4: ball_data = 8'b11111111; // ********
- 3'h5: ball_data = 8'b11111111; // ********
- 3'h6: ball_data = 8'b01111110; // ******
- 3'h7: ball_data = 8'b00111100; // ****
- endcase
-
- // move ball and deal reset
- always @(posedge clk, posedge reset)
- begin
- if (reset)
- begin
- bar_right <= 0;
- bar_left <= 0;
- ball_x <= 0;
- ball_y <= 0;
- x_delta <= V_X;
- y_delta <= V_Y;
- end
- else
- begin
- bar_right <= bar_right_next;
- bar_left <= bar_left_next;
- ball_x <= ball_x_next;
- ball_y <= ball_y_next;
- x_delta <= x_delta_next;
- y_delta <= y_delta_next;
- end
- end
-
- // calc the position of bar
- always @*
- begin
- bar_right_next = bar_right;
- if (graph_still)
- bar_right_next = MAX_Y / 2;
- else if (refr_tick)
- if (btn1[1] & (bar_right_bottom < (MAX_Y - 1 - BAR_V)))
- bar_right_next = bar_right + BAR_V;
- else if (btn1[0] & (bar_right_top > BAR_V))
- bar_right_next = bar_right - BAR_V;
-
- bar_left_next = bar_left;
- if (graph_still)
- bar_left_next = MAX_Y / 2;
- else if (refr_tick)
- if (btn2[1] & (bar_left_bottom < (MAX_Y - 1 - BAR_V)))
- bar_left_next = bar_left + BAR_V;
- else if (btn2[0] & (bar_left_top > BAR_V))
- bar_left_next = bar_left - BAR_V;
- end
-
- // deal with the ball's movement
- always @(posedge refr_tick, posedge reset)
- if (reset) begin
- hit_left = 1'b0;
- hit_right = 1'b0;
- miss = 1'b0;
- x_delta_next = V_X;
- y_delta_next = V_Y;
- right_score = 8'b0;
- left_score = 8'b0;
- added = 0;
- end else begin
- hit_left = 1'b0;
- hit_right = 1'b0;
- miss = 1'b0;
- x_delta_next = x_delta;
- y_delta_next = y_delta;
- if (graph_still)
- begin
- x_delta_next = V_X;
- y_delta_next = V_Y;
- hit_right = 1'b0;
- hit_left = 1'b0;
- miss = 1'b0;
- right_score = 8'b0;
- left_score = 8'b0;
- added = 0;
- end
- else if (ball_top <= 5)
- begin
- y_delta_next = V_Y;
- hit_right = 1'b0;
- hit_left = 1'b0;
- added = 0;
- end
- else if (ball_bottom >= MAX_Y - 5)
- begin
- y_delta_next = V_Y_N;
- hit_right = 1'b0;
- hit_left = 1'b0;
- added = 0;
- end
- else if (BAR_LEFT_X <= ball_left && BAR_LEFT_X + BAR_WIDTH >= ball_left - 1
- && ball_top - bar_right + BAR_SIZE / 2 > 0 && bar_right - ball_top + BAR_SIZE / 2 > 0)
- begin
- hit_left = 1'b1;
- hit_right = 1'b0;
- x_delta_next = V_X;
- if(added == 0)
- begin
- if(left_score[3:0] == 4'b1001)
- begin
- left_score[3:0] = 4'b0000;
- left_score[7:4] = left_score[7:4] + 1;
- end
- else
- left_score[3:0] = left_score[3:0] + 1;
- end
- added = 1;
- end
- else if (BAR_RIGHT_X >= ball_right && BAR_RIGHT_X - BAR_WIDTH <= ball_right + 1
- && ball_top - bar_left + BAR_SIZE / 2 > 0 && bar_left - ball_top + BAR_SIZE / 2 > 0)
- begin
- hit_right = 1'b1;
- hit_left = 1'b0;
- x_delta_next = V_X_N;
- if(added == 0)
- begin
- if(right_score[3:0] == 4'h9)
- begin
- right_score[3:0] = 4'h0;
- right_score[7:4] = right_score[7:4] + 1;
- end
- else
- right_score[3:0] = right_score[3:0] + 1;
- end
- added = 1;
- end
- else if (ball_right >= MAX_X - 10 || ball_right <= 10)
- begin
- added = 0;
- miss = 1'b1;
- hit_right = 1'b0;
- hit_left = 1'b0;
- right_score = 8'b0;
- left_score = 8'b0;
- end
- end
-
- // assign rgb to the correct color
- always @*
- begin
- if (bar_on)
- graph_rgb = bar_rgb;
- else if (ball_on)
- graph_rgb = ball_rgb;
- else
- graph_rgb = 3'b000;
- end
-
- // decide wether need to display
- assign graph_on = bar_on | ball_on;
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/text_graph.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/text_graph.v
deleted file mode 100644
index e400fec..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/text_graph.v
+++ /dev/null
@@ -1,51 +0,0 @@
-module text_graph(
- input wire clk,
- input wire [3:0] left_high, left_low,
- input wire [3:0] right_high, right_low,
- input wire [9:0] pix_x, pix_y,
- output wire text_on,
- output reg [2:0] text_rgb
- );
- wire [10:0] rom_add;
- wire [3:0] row_add;
- wire [2:0] bit_add;
- wire [7:0] temp_data;
- reg [7:0] char_add;
- wire bit_color;
-
- font_rom rom(.clk(clk),.addr(rom_add),.data(temp_data));
-
- assign text_on = (pix_y[9:5]==0) && (pix_x[9:4] >= 9 ) && (pix_x[9:4] < 24);
- assign row_add = pix_y[4:1];
- assign bit_add = pix_x[3:1];
- always @*
- case(pix_x[9:4])
- 6'b001001: char_add = 7'h53;
- 6'b001010: char_add = 7'h63;
- 6'b001011: char_add = 7'h6f;
- 6'b001100: char_add = 7'h72;
- 6'b001101: char_add = 7'h65;
- 6'b001110: char_add = 7'h3a;
- 6'b001111: char_add = 7'h00;
- 6'b010000: char_add = {3'b011,left_high};
- 6'b010001: char_add = {3'b011,left_low};
- 6'b010010: char_add = 7'h00;
- 6'b010011: char_add = 7'h2d;
- 6'b010100: char_add = 7'h2d;
- 6'b010101: char_add = 7'h00;
- 6'b010110: char_add = {3'b011,right_high};
- 6'b010111: char_add = {3'b011,right_low};
- 6'b011000: char_add = 7'h00;
- endcase
-
- always @*
- begin
- text_rgb = 3'b110;
- if(text_on && bit_color)
- text_rgb = 3'b000;
- end
-
- assign rom_add = {char_add, row_add};
- assign bit_color = temp_data[~bit_add];
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/top.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/top.v
deleted file mode 100644
index 9d37d64..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/top.v
+++ /dev/null
@@ -1,119 +0,0 @@
-`timescale 1ns / 1ps
-
-module top(
- input wire clk, reset,
- input wire [1:0] btn1,
- input wire [1:0] btn2,
- output wire hsync, vsync,
- output wire [2:0] rgb
- );
-
-
- // define state
- localparam [1:0]
- new = 2'b00, // new game
- play = 2'b01, // playing
- over = 2'b10; // game over
-
- reg [1:0] state, state_next;
- wire [9:0] pixel_x, pixel_y;
- wire video_on, pixel_tick, graph_on, miss;
- wire [2:0] graph_rgb;
- reg [2:0] rgb_now, rgb_next;
- reg graph_still, timer_start; // graph_still: graph still
- wire [1:0] btn1_out, btn2_out;
- wire hit_left, hit_right;
- wire [7:0] left_s, right_s;
- wire text_on;
- wire [2:0] text_rgb;
-
- initial begin
- state = 2'b00; // state: new
- rgb_now = 0;
- graph_still = 1'b1;
- end
-
- debounce p0(clk, btn1[0], btn1_out[0]); // debounce for btns
- debounce p1(clk, btn1[1], btn1_out[1]);
- debounce p2(clk, btn2[0], btn2_out[0]);
- debounce p3(clk, btn2[1], btn2_out[1]);
-
- text_graph text
- (.clk(clk), .left_high(left_s[7:4]), .left_low(left_s[3:0]),
- .right_high(right_s[7:4]), .right_low(right_s[3:0]), .pix_x(pixel_x),
- .pix_y(pixel_y), .text_on(text_on), .text_rgb(text_rgb));
-
- vga_sync vsync_unit
- (.clk(clk), .reset(reset), .hsync(hsync), .vsync(vsync),
- .video_on(video_on), .p_tick(pixel_tick),
- .pixel_x(pixel_x), .pixel_y(pixel_y));
-
- pong_graph graph_unit
- (.clk(clk), .reset(reset), .btn1(btn1_out), .btn2(btn2_out),
- .pix_x(pixel_x), .pix_y(pixel_y),
- .graph_still(graph_still), .miss(miss),.hit_left(hit_left),.hit_right(hit_right),
- .graph_on(graph_on), .graph_rgb(graph_rgb), .left_score(left_s),.right_score(right_s));
-
-
- always @(posedge clk)
- begin
- if (reset)
- begin
- state <= new;
- rgb_now <= 0;
- end
- else
- begin
- state <= state_next;
- if (pixel_tick)
- rgb_now <= rgb_next;
- end
- end
-
- always @*
- begin
- graph_still = 1'b1;
- state_next = state;
- case (state)
- new:
- begin
- // any button pressed the game start
- if ((btn1_out != 2'b00) || (btn2_out != 2'b00))
- begin
- state_next = play;
- end
- end
- play:
- begin
- graph_still = 1'b0;
- // if any ball is missed, your game is over.
- if (miss)
- begin
- state_next = over;
- end
- end
- over:
- begin
- // may add more features here
- state_next = new;
- end
- endcase
- end
-
- always @*
- begin
- if (~video_on)
- rgb_next = "000"; // blank the edge/retrace
- else
- // the priority is defined here
- if(graph_on)
- rgb_next = graph_rgb;
- else if (text_on) // display graph
- rgb_next = text_rgb;
- else
- rgb_next = 3'b110; // yellow background
- end
-
- assign rgb = rgb_now; // assign rgb register to output
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/vga_sync.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/vga_sync.v
deleted file mode 100644
index 9b5cc54..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/rtl/vga_sync.v
+++ /dev/null
@@ -1,84 +0,0 @@
-module vga_sync
- (
- input wire clk, reset,
- output wire hsync, vsync, video_on, p_tick,
- output wire [9:0] pixel_x, pixel_y
- );
-
- localparam HD = 640; // horizontal display area
- localparam HF = 48 ; // h. front (left) border
- localparam HB = 16 ; // h. back (right) border
- localparam HR = 96 ; // h. retrace
- localparam VD = 480; // vertical display area
- localparam VF = 10; // v. front (top) border
- localparam VB = 33; // v. back (bottom) border
- localparam VR = 2; // v. retrace
-
- reg point;
- wire point_next;
- reg [9:0] h_count, h_count_next;
- reg [9:0] v_count, v_count_next;
- reg v_sync_reg, h_sync_reg;
- wire v_sync_next, h_sync_next;
- wire h_end, v_end, pixel_tick;
-
-
- always @(posedge clk, posedge reset)
- if (reset)
- begin
- point <= 1'b0;
- v_count <= 0;
- h_count <= 0;
- v_sync_reg <= 1'b0;
- h_sync_reg <= 1'b0;
- end
- else
- begin
- point <= point_next;
- v_count <= v_count_next;
- h_count <= h_count_next;
- v_sync_reg <= v_sync_next;
- h_sync_reg <= h_sync_next;
- end
-
- assign point_next = ~point;
- assign pixel_tick = point;
-
- assign h_end = (h_count==(HD+HF+HB+HR-1));
- assign v_end = (v_count==(VD+VF+VB+VR-1));
-
- always @*
- if (pixel_tick) // 25 MHz pulse
- if (h_end)
- begin
-
- h_count_next = 0;
- if(v_end)
- v_count_next = 0;
- else
- v_count_next = v_count + 1;
- end
- else begin
- h_count_next = h_count + 1;
- v_count_next = v_count;
- end
- else
- begin
- h_count_next = h_count;
- v_count_next = v_count;
- end
-
- assign h_sync_next = (h_count >=(HD+HB) &&
- h_count <=(HD+HB+HR-1));
- assign v_sync_next = (v_count >=(VD+VB) &&
- v_count <=(VD+VB+VR-1));
-
- assign video_on = (h_count<HD) && (v_count<VD);
-
- assign hsync = h_sync_reg;
- assign vsync = v_sync_reg;
- assign pixel_x = h_count;
- assign pixel_y = v_count;
- assign p_tick = pixel_tick;
-
-endmodule
diff --git a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/sim/bench.v b/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/sim/bench.v
deleted file mode 100644
index b2da110..0000000
--- a/SVIncCompil/Testcases/YosysBigSim/verilog-pong/slpp_unit/work/sim/bench.v
+++ /dev/null
@@ -1,108 +0,0 @@
-
-// To create a GIF animation from the generated images:
-// convert frame_*.ppm pong.gif
-
-
-
-module testbench;
-
-reg clk, reset;
-reg [1:0] btn1;
-reg [1:0] btn2;
-wire hsync, vsync;
-wire [2:0] rgb;
-
-top UUT (
- clk,
- reset,
- btn1,
- btn2,
- hsync,
- vsync,
- rgb
-);
-
-initial begin
- clk <= 0;
- #100;
- forever begin
- clk <= ~clk;
- #50;
- end
-end
-
-initial begin
- btn1 <= 2'b00;
- btn2 <= 2'b00;
- reset <= 1;
- repeat(5) @(posedge clk);
- btn2 <= 2'b01;
- repeat(5) @(posedge clk);
- reset <= 0;
-end
-
-integer x, y, z, idx, fd;
-reg [128*8-1:0] filename;
-reg [2:0] framebuffer [0:700*500-1];
-reg last_hsync, last_vsync;
-reg [63:0] hash;
-
-always @(posedge clk) begin
- last_hsync <= hsync;
- last_vsync <= vsync;
- if (reset) begin
- x = 96;
- y = 12;
- z = 0;
- for (idx = 0; idx < 700*500; idx=idx+1)
- framebuffer[idx] = 0;
- end else
- if (hsync) begin
- if (!last_hsync) begin
- x = 0;
- y = y + 1;
- if (z == 0 && y == 13)
- $write("Frame %3d .", z);
- if (z != 0 && y == 1)
- $write("Frame %3d ", z);
- if (y % 10 == 9) begin
- $write(".");
- $fflush;
- end
- end
- end else
- if (vsync) begin
- if (!last_vsync)
- begin
- hash = 0;
- for (idx=0; idx < 700*500; idx = idx+1)
- hash = framebuffer[idx] + (hash << 6) + (hash << 16) - hash;
- $write(" %016x", hash);
-
-
- $write("\n");
-
- x = 0;
- y = 0;
- z = z + 1;
- for (idx = 0; idx < 700*500; idx=idx+1)
- framebuffer[idx] = 0;
-
- if (z == 3)
- $finish;
- end
- end else begin
- x <= x + 1;
- if (x % 2 == 0 && 5 <= x && x < 1405 && 5 <= y && y < 505) begin
- idx = (x-5)/2 + 700*(y-5);
- framebuffer[idx] = rgb;
- end
- end
-end
-
-initial begin
- // $dumpfile("bench.vcd");
- // $dumpvars(0, testbench);
-end
-
-endmodule