新しい記事を書く事で広告が消せます。
スポンサーサイト
PICを作ろう ,逆アセンブラ(2) ~昼休みにまったり進めるプロジェクト~ (1)
例によって、文字数制限に引っかかるので、一部省略
//
// Reverse assembeler of PIC
// (c)2007 BakaOyaji
// $Id
//
//
`include "../pic_instructions.h"
`include "../pic_def.h"
module reverse_asm (
instruction_i
);
input [(`Instruction_Len-1):0] instruction_i;
reg [15*8-1:0] str_inst ; // string to monitor
reg d ;
reg [6:0] f;
reg [2:0] b ;
reg [7:0] k8 ;
reg [10:0] k11 ;
always@( instruction_i ) begin
d = instruction_i[7] ;
f = instruction_i[6:0] ;
b = instruction_i[9:7] ;
k8 = instruction_i[7:0] ;
k11 = instruction_i[10:0] ;
casex( instruction_i)
// Byte oriented File Register Operations
`INST_ADDWF :
str_inst = { "ADDWF ", hex2(f), ",", hex(d) } ;
`INST_ANDWF :
str_inst = { "ANDWF ", hex2(f), ",", hex(d) } ;
`INST_CLRF :
str_inst = { "CLRF ", hex2(f) } ;
`INST_CLRW :
str_inst = "CLRW" ;
`INST_COMF :
str_inst = { "COMF ", hex2(f), ",", hex(d) } ;
`INST_DECF :
str_inst = { "DECF ", hex2(f), ",", hex(d) } ;
`INST_DECFSZ :
str_inst = { "DECFSZ ", hex2(f), ",", hex(d) } ;
`INST_INCF :
str_inst = { "INCF ", hex2(f), ",", hex(d) } ;
`INST_INCFSZ :
str_inst = { "INCFSZ ", hex2(f), ",", hex(d) } ;
`INST_IORWF :
str_inst = { "IORWF ", hex2(f), ",", hex(d) } ;
`INST_MOVF :
str_inst = { "MOVF ", hex2(f), ",", hex(d) } ;
`INST_MOVWF :
str_inst = { "MOVWF ", hex2(f) } ;
`INST_NOP :
str_inst = "NOP" ;
`INST_RLF :
str_inst = { "RLF ", hex2(f), ",", hex(d) } ;
`INST_RRF :
str_inst = { "RRF ", hex2(f), ",", hex(d) } ;
`INST_SUBWF :
str_inst = { "SUBWF ", hex2(f), ",", hex(d) } ;
`INST_SWAPF :
str_inst = { "SWAPF ", hex2(f), ",", hex(d) } ;
`INST_XORWF :
str_inst = { "XORF ", hex2(f), ",", hex(d) } ;
// BIT-Oriented File Register Operations
`INST_BCF :
str_inst = { "BCF ", hex2(f), ",", hex(b) } ;
`INST_BSF :
str_inst = { "BSF ", hex2(f), ",", hex(b) } ;
`INST_BTFSC :
str_inst = { "BTFSC ", hex2(f), ",", hex(b) } ;
`INST_BTFSS :
str_inst = { "BTFSS ", hex2(f), ",", hex(b) } ;
// Literal and control Operations
:
:
default :
str_inst = "ERROR!" ;
endcase // casex
end // always
endmodule //reverse_asm()
// EOF reverse_asem.v