5. デコーダ
デコーダは、RAMモジュールのインストラクションレジスタ(64ビット)と、ステートを入力とする巨大な組み合わせ回路になります。サブセット仕様と言えど、アドレシングモードも含むとマイクロコードは、300位あります。あまりに命令が多いので書いていて厭になります。
(16ビットから32ビットへの拡張を担当した人に同情します。)
BCD演算とLONGの24ビット相対アドレシングは、サブセット仕様ということで省いています。
この巨大なデコードと実行を1ステートでやってしまうというのが、当初のプランです。遅延対策は後で考えることにしてとりあえず進みましょう。
アーキテクチャでもExcelは書いたのですが、今回は、実際にVerilog上で記述するために、Verilog形式のフォーマットに直す必要があります。慣れないExcelでこの作業をやってみました。なお、Excelでマイクロコードを書く方法は、米国で仕事をした際、エンジニアがやっていた方法を真似たものです。言わばマイクロコードアセンブラです。
(余談ですが、Matlabや、Mathmatica,Verilog,Design Compiler等、先進的なソフトは全て米国人によるものですね。)
ほぼデバッグが終わったEXCELコードです。
下記はVerilogに直したデコーダになります。筆者が今まで書いたデコーダのなかで一番でかいです。考えてみるとH8300Hは、(演算ビット幅で考える)と32ビットマイコンです。H8の下位機種は、16ビットなので、そんなに複雑なことはないのですが、BYTE,WORD,LONGがあるために命令数が多くなりデコーダにしわ寄せが来てしまいました。16ビットCPUの方がデコーダは簡易なので速度的に上げやすいと思います。
(余談ですが、昔32ビットスーパミニコンなんてのがありました。当時は、16ビットのCPUでラック入りのミニコンを作っていたのですが、レジスタ間演算が300ns(300psではありません。)で堂々とカタログスペックに載っていました。)
繰り返しますがデコーダは組み合わせ回路です。下で、bus_stateは、RESET,割り込み、実行状態等の大局的ステート、irwordは、64ビットインストラクションレジスタ、STは実行ステートです。これを入力として一意に制御信号(マイクロコード52ビット)は決まります。デコーダモジュールからのoutput信号は、各モジュールに行き状態を制御することになります。マイクロコードをそのままマシンコードにすればVLIW
CPU?になります。
割り込みを含む全ての実行ステート数は最大でも5ステートで、メモリReadを含まない命令は2ステート(Fetch,Decode/Excute)で実行します。オリジナルでは、最大で12ステート(同じ命令で比較)かかる命令もあります。FPGAの任意バス幅が効いています。
なお、割り込みは、固定Vectorです。
コーディングではtaskを使って書いてみました。Quartasでは問題なく論理合成できました。少しでも、デコーダの負担を軽くするために、8ステート1ホットコード(ST)にしてみました。(乗除算命令を載せた時を考えて少し多めにしておきました。)case文では、?(ドントケア)は使えません。casezもしくはcasexを使います。これで論理合成器に ”ここは、簡単にデコードできるよ” と教えてあげましょう。
`include "define.h" //Jun.2.2004 add stop_state module decoder(clock,sync_reset, ram_write,ram_access_mode,data_address_latch, ram_data_in_sel,irword, ea_left_sel, ea_right_sel,next_pc_offset, alu_left_sel,alu_right_sel,ope,alu_access_mode,imm_sel,v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write,bus_state,ccr_input_sel,paddress_sel, left_address_sel, right_address_sel,write_address_sel,reg_file_access_mode, reg_write, insel,int_req2,int_req2_ack,i_bit,stop_state,ST); input clock,sync_reset; input [63:0] irword; //ram_module output ram_write; output [1:0] ram_access_mode; output [1:0] paddress_sel; output data_address_latch; output ram_data_in_sel; //ea_unit output [3:0] ea_left_sel; output [2:0] ea_right_sel; output [2:0] next_pc_offset; //alu output [1:0] alu_left_sel; output [3:0] alu_right_sel; output [4:0] ope; output imm_sel; output v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write; output [1:0] ccr_input_sel; output [1:0] bus_state; output [1:0] alu_access_mode; //reg_file output [1:0] left_address_sel, right_address_sel; output [2:0] write_address_sel; output [1:0] reg_file_access_mode; output reg_write; output insel; input int_req2; output int_req2_ack; input i_bit; input stop_state; output [7:0] ST; //registers reg [7:0] ST;//state reg [1:0] bus_state; reg int_latch; reg int_req2_ack; //combinational logics //alu reg [1:0] alu_left_sel; reg [3:0] alu_right_sel; reg [4:0] ope; reg imm_sel; reg [1:0] alu_access_mode; reg v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write; reg [1:0] ccr_input_sel; //reg_file reg [1:0] left_address_sel, right_address_sel; reg [2:0] write_address_sel; reg [1:0] reg_file_access_mode; reg reg_write; reg insel; //ea_unit reg [3:0] ea_left_sel; reg [2:0] ea_right_sel; reg [2:0] next_pc_offset; //ram_module reg ram_write; reg [1:0] ram_access_mode; reg [1:0] paddress_sel; reg data_address_latch; reg ram_data_in_sel; //state control reg end_state; task c_vect; input [51:0] vector; { end_state, // 1 //alu alu_left_sel, //2 alu_right_sel, //4 ope, //5 alu_access_mode, //2 imm_sel, //1 v_clear,h_latch,n_latch,z_latch,v_latch,c_latch, ccr_all_write,//7 ccr_input_sel, //2 //reg_file insel, //1 left_address_sel, right_address_sel,//4 write_address_sel, //3 reg_write, //1 reg_file_access_mode,//2 //ram_module ram_data_in_sel , //1 ram_write, //1 ram_access_mode, //2 paddress_sel, //2 data_address_latch, //1 //ea_unit ea_left_sel, //4 ea_right_sel, //3 next_pc_offset, //3 } = vector ; // endtask always @(bus_state or irword or ST ) begin //e le righ ope m i vhnzvcw ci i le ri wad w m i w m pa l left rig off if (bus_state==2'b00) c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000);// ar=ar,pc=pc else if (bus_state==2'b01) // reset sequence casex (ST) //e le righ ope m i vhnzvcw ci i le ri wad w m i w m pa l left rig off 8'b0000_0000: // c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); // c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_???1: // c_vect(52'b1_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_10_10_0_0000_000_000); // c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_10_1_0000_000_000); // 8'b????_??1?: c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); // 8'b????_?1??: c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); default: ; endcase else if (bus_state==2'b10) // Int Cycle #of cycles may be less than H8 casex(ST) 8'b0000000000:c_vect( 52'b_0_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_0000_000_001); 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_1110_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_1_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1010_000_000); default: $stop; endcase else if (ST==8'h00) // Fetch Cycle c_vect(52'b0_00_0000_00000_00_0_0000000_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); else begin casex(irword[63:60]) 4'b1111: casex(ST) // MOV.B. #x:8,Rd 8'b????_???1: c_vect( 52'b_1_01_0000_00001_00_0_1_0_1_1_0_0_0_00_0_00_00_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0110: casex(irword[59:56]) 4'b0100: // OR.W Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00111_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0101: // XOR.W Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0110: // AND.W Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00110_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1000: // MOV.B. @Rs,Rd casex (irword[55]) 1'b0 : // 6 8 0rsrd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 1'b1: // MOV.B Rs,@Rd 6 8 1rdrs casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_000_001); default: $stop; endcase // ST endcase // IR[7] 4'b1001: // MOV.W. @Rs,Rd casex (irword[55]) 1'b0 : // 6 9 0rsrd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_001); default: $stop; endcase // ST 1'b1: // MOV.W Rs,@Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_000_001); default: $stop; endcase // ST endcase // IR[7] 4'b1010: casex (irword[55:52]) 4'b0000:// MOV.B. @aa:16,Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0010_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_010); default:$stop; endcase // ST 4'b0010:// MOV.B. @aa:24,Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0100_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_011); default:$stop; endcase // ST 4'b1000: // MOV.B. Rs,@aa:16 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0010_000_010); default:$stop; endcase // ST 4'b1010: // MOV.B. Rs,@aa:24 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0100_000_011); default:$stop; endcase // ST default: $stop; endcase // IR_BYTE[7] 4'b1011: casex (irword[55:52]) 4'b0000:// MOV.W. @aa:16 ,Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_01_00_0_0010_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_010); default: $stop; endcase // ST 4'b0010: // MOV.W. @aa:24,Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_01_00_0_0100_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_011); default:$stop; endcase // ST 4'b1000:// MOV.W. Rs,@aa:16 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_0_01_0_1_01_00_0_0010_000_010); default: $stop; endcase // ST 4'b1010: // MOV.W. Rs,@aa:24 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_0_01_0_1_01_00_0_0100_000_011); default:$stop; endcase // ST default: $stop; endcase // IR_BYTE[7] 4'b1100: casex (irword[55]) 1'b0: // MOV.B @Ers+,Rd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_0_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_000); 8'b????_1???: c_vect( 52'b_1_00_0010_00010_10_0_0_0_0_0_0_0_0_00_0_01_00_101_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 1'b1: // MOV.B Rs,@-ERd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_1_0_1_1_0_0_0_00_1_01_00_101_1_10_0_0_00_00_0_0110_110_000); 8'b????_??1?: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_000_001); default: $stop; endcase // ST endcase // IR_BYTE[7] 4'b1101: casex (irword[55]) 1'b0: // MOV.W @Rs++,Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_0_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_000); 8'b????_1???: c_vect( 52'b_1_00_0011_00010_10_0_0_0_0_0_0_0_0_00_0_01_00_101_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 1'b1: // MOV.W. Rs,--@ERd 6 D 1rd rs casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_01_0_1_0_1_1_0_0_0_00_1_01_00_101_1_10_0_0_01_00_0_0110_101_000); 8'b????_??1?: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_000_001); default: $stop; endcase // ST endcase // IR_BYTE[7] 4'b1110: casex (irword[55]) 1'b0: //MOV.B @(d:16,Ers),Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_010_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_010); default: $stop; endcase // ST 1'b1: // MOV.B Rs,@(d;16:ERd) casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_010_010); default: $stop; endcase // ST endcase // IR_BYTE[7] 4'b1111: casex (irword[55]) 1'b0: // MOV.W. @(d:16,ERs),Rd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_010_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_010); default: $stop; endcase // ST 1'b1: // Mov.W. Rs,@(d:16,ERd) casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_010_010); default: $stop; endcase // ST endcase // IR_BYTE[7] default: $stop; endcase // IR[11:8] 4'b0111: casex(irword[59:56]) 4'b0000: // BITSET.B #xx:3 Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10100_00_1_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001: // BITNOT.B #xx:3 Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10101_00_1_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0010: // BITCLR.B #xx:3 Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10011_00_1_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011: // BTST.B #xx:3 Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10110_00_1_0_0_0_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); endcase // ST 4'b1000: casex(irword[47:36]) 12'h6A2: casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_111_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_100); endcase// 12'h6aa: casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_0_00_0_1_00_00_0_0110_111_100); endcase// 12'h6b2: casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_01_00_0_0110_111_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_1000_00000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_01_00_0_0000_000_100); endcase// 12'h6ba: casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00000_01_0_1_0_1_1_0_0_0_00_0_01_00_000_0_01_0_1_01_00_0_0110_111_100); endcase// endcase //ST 4'b1001: casex(irword[55:52]) 4'b0000:// MOV.W. #xx:16,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_10_0000_00001_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010); endcase // ST 4'b0001:// ADD.W.#xx:16,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_10_0000_00010_01_0_0_1_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010); endcase // ST 4'b0010:// CMP.W #xx:16,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_10_0000_00011_01_0_0_1_1_1_1_1_0_00_0_00_00_000_0_01_0_0_00_00_0_0000_000_010); endcase // ST 4'b0011:// SUB.W.#xx:16,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_10_0000_00011_01_0_0_1_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010); endcase // ST 4'b0100://OR.W.#xx:16,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_10_0000_00111_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010); endcase 4'b0101://XOR.W.#xx:16,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_10_0000_01000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010); endcase 4'b0110://AND.W.#xx:16,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_10_0000_00110_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_010); endcase // default:$stop; endcase 4'b1010: casex(irword[55:52]) 4'b0000: //MOV.L ##x:32,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_11_0000_00001_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011); endcase 4'b0001: //ADD.L ##x:32,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_11_0000_00010_10_0_0_1_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011); endcase 4'b0010: //CMP.L ##x:32,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_11_0000_00011_10_0_0_1_1_1_1_1_0_00_0_00_00_000_0_10_0_0_00_00_0_0000_000_011); endcase 4'b0011: //SUB.L ##x:32,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_11_0000_00011_10_0_0_1_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011); endcase 4'b0100: //OR.L #xx:32,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_11_0000_00111_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011); endcase 4'b0101: //XOR.L #xx:32,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_11_0000_01000_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011); endcase 4'b0110: //AND.L #xx:32,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_11_0000_00110_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_011); endcase default: $stop; endcase 4'b1100: casex(irword[47:40]) 8'h73:// BTST #xx:3, @Rd casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_1_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10110_00_0_0_0_0_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010); default: $stop; endcase default:$stop; endcase 4'b1101: casex(irword[47:40]) 8'h70:// BSET #xx:3, @Rd casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10100_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010); default: $stop; endcase 8'h71:// BNOT #xx:3, @Rd casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10101_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010); default: $stop; endcase 8'h72:// BCLR #xx:3, @Rd casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10011_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010); default: $stop; endcase default:$stop; endcase 4'b1101: casex(irword[47:40]) 8'h73:// BTST #xx:3,@aa:8 casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10110_00_0_0_0_0_1_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0110_000_010); default: $stop; endcase default: $stop; endcase 4'b1111: casex(irword[47:40]) 8'h70:// BSET #xx:3, @aa:8 casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10100_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0001_000_010); default: $stop; endcase 8'h71:// BNOT #xx:3, @aa:8 casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10101_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0001_000_010); default: $stop; endcase 8'h72:// BCLR #xx:3, @aa:8 casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_10011_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0001_000_010); default: $stop; endcase default:$stop; endcase default:$stop; endcase // IR[11:8] 4'b1000: // ADD.B #xx:8,Rd casex(ST) // 8'b????_???1: c_vect( 52'b_1_01_0000_00010_00_0_0_1_1_1_1_1_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001); endcase // ST 4'b1001: // ADDX.B #xx:8,Rd casex(ST) // 8'b????_???1: c_vect( 52'b_1_01_0000_00100_00_0_0_1_1_1_1_1_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1010: // CMP.B ##xx:8,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_01_0000_00011_00_0_0_1_1_1_1_1_0_00_0_00_01_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1011: //SUBX #xx:8,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_01_0000_00101_00_0_0_1_1_1_1_1_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1101: // XOR #xx:8, Rd casex(ST) // 8'b????_???1: c_vect( 52'b_1_01_0000_01000_00_0_1_0_1_1_0_0_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1100: // OR #xx:8, Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_01_0000_00111_00_0_1_0_1_1_0_0_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1110: // AND #xx:8, Rd casex(ST) // 8'b????_???1: c_vect( 52'b_1_01_0000_00110_00_0_1_0_1_1_0_0_0_00_0_00_01_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0000: casex(irword[59:56]) 4'b0000: casex(irword[55:48]) 8'h00:// NOP casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST // default:$stop; endcase 4'b0001: casex(irword[55:48]) 8'h00:// casex(irword[47:40]) 8'h69: if(!irword[39])//// MOV.L @ERs,ERd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_0_10_00_0_0111_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_010); endcase // ST else//MOV.L Rs,@(ERd) casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_10_10_000_0_10_0_1_10_00_0_0111_000_010); endcase // ST 8'h6B: case (irword[39:36]) 4'b0000://MOV.L @aa16,ERd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_0011_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_011); endcase // ST 4'b0010://MOV.L @aa24,ERd casex(ST)// 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_0101_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_100); endcase // ST 4'b1000://MOV.L ERs,@aa:16 casex(ST)// 8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_00_10_000_0_10_0_1_10_00_0_0011_000_011); endcase // ST 4'b1010: casex(ST)//MOV.L ERs,@aa:24 8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_00_10_000_0_10_0_1_10_00_0_0101_000_100); endcase // ST default: $stop; endcase 8'h6D: if(!irword[39])//MOV.L @Ers+,Rd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_0_10_00_0_0111_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_0_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_000); 8'b????_1???:c_vect( 52'b_1_00_0100_00010_10_0_0_0_0_0_0_0_0_00_0_10_00_011_1_10_0_0_00_00_0_0000_000_010); endcase // ST else// casex(ST)//MOV.L Rs,@-ERd 8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_1_10_10_011_1_10_0_1_10_00_0_0111_100_010); endcase // ST 8'h6F: if(!irword[39])//// MOV.L @(d:16,ERs),ERd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_0_10_00_0_0111_011_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_10_0_1_0_1_1_0_0_0_00_0_00_00_010_1_10_0_0_10_00_0_0000_000_011); endcase else casex(ST) //MOV.L Rs,@(d;16:ERd) 8'b????_???1:c_vect( 52'b_1_00_0000_00000_10_0_1_0_1_1_0_0_0_00_0_10_10_000_0_10_0_1_10_00_0_0111_011_011); endcase // ST // default: $stop; endcase 8'hc0: casex(irword[47:40]) 8'h50:////MULXS.B Rs,Erd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?:c_vect( 52'b_1_00_1010_00000_01_0_0_0_1_1_0_0_0_00_0_10_10_010_1_01_0_0_00_00_0_0000_000_010); endcase // ST 8'h52://MULXS.W Rs,Erd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0001_000_000); 8'b????_??1?:c_vect( 52'b_1_00_1010_00000_10_0_0_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010); endcase // ST // default: $stop; endcase 8'hd0: //DIVXS.B Rs,Erd casex(irword[47:40]) 8'h51://DIVXS.B Rs,Erd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00001_00_0_0_0_0_1_0_0_0_00_0_10_10_010_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_00_0_0_00_00_0_0001_000_000); 8'b????_?1??:c_vect( 52'b_0_00_1010_00001_01_0_0_0_0_0_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0000_000_000); 8'b????_1???:c_vect( 52'b_1_00_1010_00000_01_0_0_0_0_0_0_0_0_00_0_10_10_010_1_01_0_0_00_00_0_0000_000_010); endcase // ST 8'h53://DIVXS.W Rs,Erd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00001_01_0_0_0_0_1_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0001_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_10_0_0_0_0_0_0_0_0_00_0_10_10_010_0_01_0_0_00_00_0_0001_000_000); 8'b????_?1??:c_vect( 52'b_0_00_1010_00001_10_0_0_0_0_0_0_0_0_00_0_10_10_010_0_10_0_0_00_00_0_0000_000_000); 8'b????_1???:c_vect( 52'b_1_00_1010_00000_10_0_0_0_0_0_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010); endcase // ST // default: $stop; endcase 8'hf0:// casex(irword[47:40]) 8'h64:// OR.L ERs,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00111_10_0_1_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010); endcase // ST 8'h65:// XOR.L ERs,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01000_10_0_1_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010); endcase // ST 8'h66:// AND.L ERs,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00110_10_0_1_0_1_1_0_0_0_00_0_10_10_010_1_10_0_0_00_00_0_0000_000_010); endcase // ST // default: $stop; endcase 8'h40:// casex(irword[47:40]) 8'h69: if (!irword[39])// LDC @ERs,CCR casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_010); endcase // ST else casex(ST)//STC CCR,@ERd 8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_1_00_00_0_0111_000_010); endcase // ST 8'h6B: case (irword[39:36]) 4'b0000://LDC @aa:16,CCR casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0011_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_011); endcase // ST 4'b0010://LDC @aa:24,CCR casex(ST)//STC 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0101_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_100); endcase // ST 4'b1000://STC CCR,@(aa:16) casex(ST)//STC 8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0011_000_011); endcase // ST 4'b1010://STC CCR,@(aa:24) casex(ST)//STC 8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_1_00_00_0_0101_000_100); endcase // ST endcase 8'h6F: if (!irword[39])//// LDC @(d:16,ERs),CCR casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0110_011_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_011); endcase // ST else//STC CCR,@(d:16,ERd) casex(ST) 8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_10_00_000_0_00_0_1_00_00_0_0111_011_011); endcase // ST default: $stop; endcase // default: $stop; endcase 4'b0010: //STC CCR,Rd casex(ST) // 8'b????_???1:c_vect( 52'b_1_00_1001_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011: // LDC Rs,CCR casex(ST) // 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0100: // ORC #xx:8,CCR casex(ST) // 8'b????_???1:c_vect( 52'b_1_01_1001_00111_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0101: // XORC #xx:8,CCR casex(ST) // 8'b????_???1:c_vect( 52'b_1_01_1001_01000_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0110: // ANDC #xx:8,CCR casex(ST) // 8'b????_???1:c_vect( 52'b_1_01_1001_00110_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0111: // LDC #xx:8,CCR casex(ST) // 8'b????_???1:c_vect( 52'b_1_01_0000_00001_00_0_0_0_0_0_0_0_1_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1000: //ADD.B Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00010_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001: // ADD.W Rs,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00010_01_0_0_1_1_1_1_1_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1010: casex(irword[55]) 1'b0://INC.B.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0010_00010_00_0_0_0_1_1_1_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 1'b1:// ADD.L Ers,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00010_10_0_0_1_1_1_1_1_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST default $stop; endcase 4'b1011: casex(irword[55:52]) 4'b0000 :// ADDS.L #1,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0010_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0101://INC.W #1,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0010_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0111://INC.L #1,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0010_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1101://INC.W #2,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0011_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1111://INC.L #2,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0011_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1000://ADDS.L #2,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0011_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001://ADDS.L #4,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0100_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // STcase // default:$stop; endcase 4'b1101: // MOV.W. Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00001_01_0_1_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1100: // MOV.B. Rs,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00001_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1110: // ADDX.B. Rs,Rd casex(ST) // 8'b????_???1: c_vect( 52'b_1_00_0000_00100_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1111: //MOV.L Ers,ERd casex(ST) // 8'b????_???1:c_vect( 52'b_1_00_0000_00001_10_0_1_0_1_1_0_0_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001); endcase // ST default: begin $display("[11:8] undefined command error"); $stop; end endcase // IR[11:8] 4'b0001: casex(irword[59:56]) 4'b0000: casex(irword[55:52]) 4'b1000://SHAL.B, Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01111_00_0_0_0_1_1_1_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001://SHAL.W,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01111_01_0_0_0_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1011://ShAL.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01111_10_0_0_0_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0000://SHLL.B, Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10001_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001://SHLL.W,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10001_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011://SHLL.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10001_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST default: $stop; endcase // 4'b0001: casex(irword[55:52]) 4'b1000://SHAR.B, Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10000_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001://SHAR.W,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10000_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1011://ShAR.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10000_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0000://SHLR.B, Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10010_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001://SHLR.W,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10010_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011://SHLR.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_10010_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST default: $stop; endcase // 4'b0010: casex(irword[55:52]) 4'b1000://ROTL.B.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01011_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001://ROTL.W.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01011_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1011://ROTL.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01011_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0000://ROTXL.B.Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01101_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001://ROTXL.W.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01101_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011://ROTX.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01101_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST default: $stop; endcase // 4'b0011: casex(irword[55:52]) 4'b1000://ROTR.B.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01100_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001://ROTR.W.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01100_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1011://ROTR.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01100_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0000://ROTXR.B.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01110_00_0_1_0_1_1_0_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001://ROTXR.W.Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01110_01_0_1_0_1_1_0_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011://ROTXR.L,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_01110_10_0_1_0_1_1_0_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST default: $stop; endcase // 4'b0100: // OR.B. Rs,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00111_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0101: // XOR.B. Rs,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01000_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0110: // AND.B. Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00110_00_0_1_0_1_1_0_0_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0111: casex (irword[55:52]) 4'b0000://NOT.B Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_11000_00_0_1_0_1_1_0_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001: //NOT.W Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_11000_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011: //NOT.L Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_11000_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1000: //NEG.B Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_10111_00_0_0_1_1_1_1_1_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001: //NEG.W Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_10111_01_0_0_1_1_1_1_1_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1011: //NEG.L Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_10111_10_0_0_1_1_1_1_1_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1101: //EXTS.W.Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01001_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); endcase // ST 4'b1111: //EXTS.L ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01001_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); endcase // ST 4'b0101: //EXTU.W Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01010_01_0_1_0_1_1_0_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); endcase // ST 4'b0111: //EXTU.L Erd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_01010_10_0_1_0_1_1_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); endcase // ST default: begin $display("[11:8] undefined command error"); $stop; end endcase // 4'b1000: // SUB.B. Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00011_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001: // SUB.W. Rs,Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0000_00011_01_0_0_1_1_1_1_1_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1010: casex (irword[55]) 1'b0:// DEC.B.Rd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0101_00010_00_0_0_0_1_1_1_0_0_00_0_00_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 1'b1:// SUB.L Ers,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00011_10_0_0_1_1_1_1_1_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST endcase 4'b1011: // casex (irword[55:52]) 4'b0000://SUBS.L #1,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0101_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0101://DEC.W #1,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0101_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1101://DEC.W #2,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0110_00010_01_0_0_0_1_1_1_0_0_00_0_00_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0111://DEC.L #1,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0101_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1111://DEC.L #2,ERd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0110_00010_10_0_0_0_1_1_1_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1000: //SUBS.L #2,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0110_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1001: //SUBS.L #4,ERd casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0111_11001_10_0_0_0_0_0_0_0_0_00_0_00_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST default: $stop; endcase 4'b1100: // CMP.B Rs,Rd casex(ST) // 8'b????_???1:c_vect( 52'b_1_00_0000_00011_00_0_0_1_1_1_1_1_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_001); default: $stop; endcase 4'b1101: // CMP.W Rs,Rd casex(ST) // 8'b????_???1: c_vect( 52'b_1_00_0000_00011_01_0_0_1_1_1_1_1_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_001); default: $stop; endcase 4'b1110://SUBX Rs,Rd casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00101_00_0_0_1_1_1_1_1_0_00_0_01_00_000_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b1111: // CMP.L Ers,ERd casex(ST) // 8'b????_???1: c_vect( 52'b_1_00_0000_00011_10_0_0_1_1_1_1_1_0_00_0_10_10_000_0_10_0_0_00_00_0_0000_000_001); default: $stop; endcase default: begin $display("[11:8] undefined command error"); $stop; end endcase // IR[11:8] 4'b0010: // MOV.B @aa:8,Rd casex(ST) // 8'b????_???1: c_vect( 52'b_0_00_0000_00000_10_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_1000_00000_00_0_1_0_1_1_0_0_0_00_0_00_00_001_1_00_0_0_00_00_0_0000_000_001); default: $stop; endcase 4'b0011: // MOV.B Rs,@aa:8 casex(ST) // 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_1_0_1_1_0_0_0_00_0_00_01_000_0_00_0_1_00_00_0_0001_000_001); default: $stop; endcase 4'b0100: // BCC disp8 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_11_0_1100_001_001); default: $stop; endcase // ST default: begin $display("[11:8] undefined command error"); $stop; end // endcase // IR[11:8] 4'b0101: casex(irword[59:56]) 4'b0000: // MULXU.B Rs,Erd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_??1?: c_vect( 52'b_1_00_1010_00000_01_0_0_0_1_1_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0010: // MULXU.W Rs,Erd casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000); 8'b????_??1?: c_vect( 52'b_1_00_1010_00000_10_0_0_0_1_1_0_0_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0001: //DIVXU.B Rs,Erd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00001_00_0_0_0_0_1_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_0_00_1010_00001_01_0_0_0_0_0_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000); 8'b????_1???:c_vect( 52'b_1_00_1010_00000_01_0_0_0_0_0_0_0_0_00_0_01_00_000_1_01_0_0_00_00_0_0000_000_001); default: $stop; endcase // ST 4'b0011: // DIVXU.W Rs,Erd casex(ST) 8'b????_???1:c_vect( 52'b_0_00_0000_00001_00_0_0_0_0_1_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000); 8'b????_??1?:c_vect( 52'b_0_00_0000_00000_10_0_0_0_0_0_0_0_0_00_0_01_00_000_0_01_0_0_00_00_0_0000_000_000); 8'b????_?1??:c_vect( 52'b_0_00_1010_00001_10_0_0_0_0_0_0_0_0_00_0_01_00_000_0_10_0_0_00_00_0_0000_000_000); 8'b????_1???:c_vect( 52'b_1_00_1010_00000_10_0_0_0_0_0_0_0_0_00_0_01_00_000_1_10_0_0_00_00_0_0000_000_001); endcase // ST 4'b0100: // RTS casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00001_10_0_0_0_0_0_0_0_0_00_0_11_00_000_0_10_0_0_00_00_0_1001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0100_00010_00_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_10_0_1010_000_000); default: $stop; endcase // ST 4'b0101: // BSR d:8 casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_1100_001_001); default: $stop; endcase // ST 4'b0110: // RTE casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00001_10_0_0_0_0_0_0_0_0_00_0_11_00_000_0_10_0_0_00_00_0_1001_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0100_00010_00_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_1_01_0_00_00_000_0_00_0_0_10_10_0_1010_000_000); default: $stop; endcase // ST 4'b1000: // BCC disp16 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_11_0_1100_010_010); default: $stop; endcase // S 4'b1001: // JMP @Rn casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_0110_000_000); default: $stop; endcase // ST 4'b1010: // JMP @aa:24 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1011_000_000); default: $stop; endcase // ST 4'b1011: // JMP @@aa:8 casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_1000_000_000); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_?1??: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1010_000_000); default: $stop; endcase // ST 4'b1100://BSR d:16 casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_1100_010_010); default: $stop; endcase // ST 4'b1101: // JSR @Ern casex(ST) 8'b????_???1:c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_0110_000_001); default: $stop; endcase // ST 4'b1110: //JSR @aa:24 casex(ST) 8'b????_???1: c_vect( 52'b_1_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_1011_000_010); default: $stop; endcase // ST 4'b1111://JSR @aa:8 casex(ST) 8'b????_???1: c_vect( 52'b_0_00_0111_00010_10_0_0_0_0_0_0_0_0_00_0_11_00_100_1_10_1_1_10_01_1_0000_000_001); 8'b????_??1?: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_00_0_1000_000_000); 8'b????_?1??: c_vect( 52'b_0_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_00_00_0_0000_000_000); 8'b????_1???: c_vect( 52'b_1_00_0000_00000_00_0_0_0_0_0_0_0_0_00_0_00_00_000_0_00_0_0_10_01_0_1010_000_000); default: $stop; endcase // ST default: begin $display("[11:8] undefined command error"); $stop; end endcase // IR[11:8] endcase // inst end end // State Counter always @ (posedge clock) begin if (sync_reset ==1'b1) ST<=8'h00; else if (end_state== 1'b1) ST<=8'h00; else begin if (stop_state) ST<=ST; else casex(ST) 8'b0000_0000: ST<=8'b0000_0001; 8'b????_???1: ST<=8'b0000_0010; 8'b????_??1?: ST<=8'b0000_0100; 8'b????_?1??: ST<=8'b0000_1000; 8'b????_1???: ST<=8'b0001_0000; 8'b???1_????: ST<=8'b0010_0000; 8'b??1?_????: ST<=8'b0100_0000; 8'b?1??_????: ST<=8'b1000_0000; 8'b1???_????: ST<=8'b0000_0000; endcase end end // Bus State Control always @ (posedge clock) begin if (sync_reset) bus_state <=2'b00; else begin case (bus_state) 2'b00: if (!sync_reset) bus_state<=2'b01; 2'b01: if (end_state) bus_state<=2'b11; 2'b11: if (int_latch && end_state) bus_state<=2'b10; 2'b10: if (end_state) bus_state<=2'b11; endcase end end // interrupt controller ; interim, timing is different from original. always @(posedge clock) begin if (sync_reset) int_latch<=1'b0; else if (i_bit) int_latch<=1'b0; else if (int_req2) int_latch<=1'b1; // else if (int_icb) int_latch<=1'b1; end always @(posedge clock) begin if (sync_reset) int_req2_ack<=1'b0; else if (int_latch && int_req2 && !int_req2_ack) int_req2_ack<=1'b1; else if (int_req2_ack && bus_state==2'b10 && ST==8'b0000_0100) int_req2_ack<=1'b0; end endmodule |