André
Cheers
Ed
Code: Select all
16'b0000_00xx_1011_1011: // TBA
dst_reg <= SEL_B;
16'b0000_00xx_1010_1011: // TCA
dst_reg <= SEL_D;
16'b0000_00xx_1001_1011: // TDA
dst_reg <= SEL_E;
16'b0000_01xx_1011_1011: // TAB
dst_reg <= SEL_A;
16'b0000_01xx_1010_1011: // TCB
dst_reg <= SEL_D;
16'b0000_01xx_1001_1011: // TDB
dst_reg <= SEL_E;
16'b0000_10xx_1011_1011: // TAC
dst_reg <= SEL_A;
16'b0000_10xx_1010_1011: // TBC
dst_reg <= SEL_B;
16'b0000_10xx_1001_1011: // TDC
dst_reg <= SEL_E;
16'b0000_11xx_1011_1011: // TAD
dst_reg <= SEL_A;
16'b0000_11xx_1010_1011: // TBD
dst_reg <= SEL_B;
16'b0000_11xx_1001_1011: // TCD
dst_reg <= SEL_D;
default: case( IR[9:8] )
2'b00: dst_reg <= SEL_A;
2'b01: dst_reg <= SEL_B;
2'b10: dst_reg <= SEL_D;
2'b11: dst_reg <= SEL_E;
default: dst_reg <= SEL_A;
endcase Code: Select all
...
16'b0000_0000_101x_xx10: // LDX, TAX, TBX, TSX
dst_reg <= SEL_X;
...
default: dst_reg <= SEL_A...Code: Select all
16'b0000_00xx_101x_xx10: // LDX, TAX, TBX, TSX
dst_reg <= SEL_X;
...
default: case( IR[9:8] )
2'b00: dst_reg <= SEL_A;
2'b01: dst_reg <= SEL_B;
2'b10: dst_reg <= SEL_C;
2'b11: dst_reg <= SEL_D;Code: Select all
...
16'b0000_00xx_101x_xx10: // LDX, TAX, TBX, TSX
dst_reg <= SEL_X;
...
16'b0000_00xx_1011_1011: // TBA
dst_reg <= SEL_B;
16'b0000_00xx_1010_1011: // TCA
dst_reg <= SEL_C;
16'b0000_00xx_1001_1011: // TDA
dst_reg <= SEL_D;
16'b0000_01xx_1011_1011: // TAB
dst_reg <= SEL_A;
16'b0000_01xx_1010_1011: // TCB
dst_reg <= SEL_C;
16'b0000_01xx_1001_1011: // TDB
dst_reg <= SEL_D;
16'b0000_10xx_1011_1011: // TAC
dst_reg <= SEL_A;
16'b0000_10xx_1010_1011: // TBC
dst_reg <= SEL_B;
16'b0000_10xx_1001_1011: // TDC
dst_reg <= SEL_D;
16'b0000_11xx_1011_1011: // TAD
dst_reg <= SEL_A;
16'b0000_11xx_1010_1011: // TBD
dst_reg <= SEL_B;
16'b0000_11xx_1001_1011: // TCD
dst_reg <= SEL_D;
default: case( IR[9:8] )
2'b00: dst_reg <= SEL_A;
2'b01: dst_reg <= SEL_B;
2'b10: dst_reg <= SEL_C;
2'b11: dst_reg <= SEL_D;
default: dst_reg <= SEL_A;Code: Select all
16'b0000_00xx_1011_1011: // TBA
dst_reg <= SEL_B;
Code: Select all
$01BB...TAB $009B...TBA $00AB...TCA $00BB...TDA
$02BB...TAC $02AB...TBC $01AB...TCB $019B...TDB
$03BB...TAD $03AB...TBD $039B...TCD $029B...TDCCode: Select all
$008B...TAA $009B...TBA $00AB...TCA $00BB...TDA
$018B...TAB $019B...TBB $01AB...TCB $01BB...TDB
$028B...TAC $029B...TBC $02AB...TCC $02BB...TDC
$038B...TAD $039B...TBD $03AB...TCD $03BB...TDDCode: Select all
always @(posedge clk)
if( state == DECODE && RDY )
casex( IR[15:0] )
16'b0000_xx01_1000_1011, // TABand, TABor, TABxor
16'b0000_xx00_1001_1011: // TBAand, TBAor, TBAxor
case( IR[11:10] )
2'b01: LOGOP <= ( DCBAXYS[SEL_A] & DCBAXYS[SEL_B] );
2'b10: LOGOP <= ( DCBAXYS[SEL_A] | DCBAXYS[SEL_B] );
2'b11: LOGOP <= ( DCBAXYS[SEL_A] ^ DCBAXYS[SEL_B] );
endcase
default:case( IR[11:8] )
4'b0001: LOGOP <= DCBAXYS[SEL_B]; //no LOGOP, send value to dest_reg
4'b0000: LOGOP <= DCBAXYS[SEL_A]; //no LOGOP, send value to dest_reg
endcase
endcaseCode: Select all
LOGOP <= ( DCBAXYS[SEL_A] & DCBAXYS[SEL_B] );