URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
Compare Revisions
- This comparison shows the changes necessary to convert path
/openmsp430/trunk
- from Rev 101 to Rev 102
- ↔ Reverse comparison
Rev 101 → Rev 102
/core/rtl/verilog/omsp_execution_unit.v
145,7 → 145,11
inst_type[`INST_JMP])) | dbg_reg_wr; |
|
wire reg_sp_wr = (((e_state==`E_IRQ_1) | (e_state==`E_IRQ_3)) & ~inst_irq_rst) | |
((e_state==`E_DST_RD) & (inst_so[`PUSH] | inst_so[`CALL])); |
((e_state==`E_DST_RD) & ((inst_so[`PUSH] & ~inst_as[`IDX] & |
~((inst_as[`INDIR] | inst_as[`INDIR_I]) & inst_src[1])) | |
inst_so[`CALL])) | |
((e_state==`E_SRC_AD) & (inst_so[`PUSH] & inst_as[`IDX])) | |
((e_state==`E_SRC_RD) & (inst_so[`PUSH] & ((inst_as[`INDIR] | inst_as[`INDIR_I]) & inst_src[1]))); |
|
wire reg_sr_wr = (e_state==`E_DST_RD) & inst_so[`RETI]; |
|
214,7 → 218,8
|
wire src_reg_dest_sel = (e_state==`E_IRQ_1) | |
(e_state==`E_IRQ_3) | |
((e_state==`E_DST_RD) & (inst_so[`PUSH] | inst_so[`CALL])); |
((e_state==`E_DST_RD) & (inst_so[`PUSH] | inst_so[`CALL])) | |
((e_state==`E_SRC_AD) & inst_so[`PUSH] & inst_as[`IDX]); |
|
wire src_mdb_in_val_sel = ((e_state==`E_DST_RD) & inst_so[`RETI]) | |
((e_state==`E_EXEC) & (inst_as[`INDIR] | inst_as[`INDIR_I] | |
257,7 → 262,9
wire dst_fffe_sel = (e_state==`E_IRQ_0) | |
(e_state==`E_IRQ_1) | |
(e_state==`E_IRQ_3) | |
((e_state==`E_DST_RD) & (inst_so[`PUSH] | inst_so[`CALL]) & ~inst_so[`RETI]); |
((e_state==`E_DST_RD) & (inst_so[`PUSH] | inst_so[`CALL]) & ~inst_so[`RETI]) | |
((e_state==`E_SRC_AD) & inst_so[`PUSH] & inst_as[`IDX]) | |
((e_state==`E_SRC_RD) & inst_so[`PUSH] & (inst_as[`INDIR] | inst_as[`INDIR_I]) & inst_src[1]); |
|
wire dst_reg_dest_sel = ((e_state==`E_DST_RD) & ~(inst_so[`PUSH] | inst_so[`CALL] | inst_ad[`ABS] | inst_so[`RETI])) | |
((e_state==`E_DST_WR) & ~inst_ad[`ABS]) | |
/core/sim/rtl_sim/src/sing-op_push.v
399,7 → 399,155
if (mem232 !==16'h0000) tb_error("====== PUSH.B (#N mode): @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH.B (#N mode): @0x0230 value ====="); |
|
/* -------------- TEST INSTRUCTION WITH SR AS ARGUMENT ------------------- */ |
|
// Addressing mode: SR |
@(r15==16'hF100); |
if (r1 !==16'h0232) tb_error("====== PUSH SR : SP value ====="); |
if (mem250 !==16'h75e2) tb_error("====== PUSH SR : @0x0250 value ====="); |
if (mem24E !==16'h1cc4) tb_error("====== PUSH SR : @0x024E value ====="); |
if (mem24C !==16'h12a6) tb_error("====== PUSH SR : @0x024c value ====="); |
if (mem24A !==16'h5679) tb_error("====== PUSH SR : @0x024a value ====="); |
if (mem248 !==16'h9a6a) tb_error("====== PUSH SR : @0x0248 value ====="); |
if (mem246 !==16'hde97) tb_error("====== PUSH SR : @0x0246 value ====="); |
if (mem244 !==16'h0f4c) tb_error("====== PUSH SR : @0x0244 value ====="); |
if (mem242 !==16'hcbc3) tb_error("====== PUSH SR : @0x0242 value ====="); |
if (mem240 !==16'h870e) tb_error("====== PUSH SR : @0x0240 value ====="); |
if (mem23E !==16'h43fe) tb_error("====== PUSH SR : @0x023e value ====="); |
if (mem23C !==16'h1fc2) tb_error("====== PUSH SR : @0x023c value ====="); |
if (mem23A !==16'h3d3b) tb_error("====== PUSH SR : @0x023a value ====="); |
if (mem238 !==16'h71d9) tb_error("====== PUSH SR : @0x0238 value ====="); |
if (mem236 !==16'h178d) tb_error("====== PUSH SR : @0x0236 value ====="); |
if (mem234 !==16'h0234) tb_error("====== PUSH SR : @0x0234 value ====="); |
if (mem232 !==16'h0232) tb_error("====== PUSH SR : @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH SR : @0x0230 value ====="); |
|
// Addressing mode: @SR |
@(r15==16'hF200); |
if (r1 !==16'h022E) tb_error("====== PUSH @SR : SP value ====="); |
if (mem250 !==16'h75e2) tb_error("====== PUSH @SR : @0x0250 value ====="); |
if (mem24E !==16'h1cc4) tb_error("====== PUSH @SR : @0x024E value ====="); |
if (mem24C !==16'h12a6) tb_error("====== PUSH @SR : @0x024c value ====="); |
if (mem24A !==16'h5679) tb_error("====== PUSH @SR : @0x024a value ====="); |
if (mem248 !==16'h9a6a) tb_error("====== PUSH @SR : @0x0248 value ====="); |
if (mem246 !==16'hde97) tb_error("====== PUSH @SR : @0x0246 value ====="); |
if (mem244 !==16'h0f4c) tb_error("====== PUSH @SR : @0x0244 value ====="); |
if (mem242 !==16'hcbc3) tb_error("====== PUSH @SR : @0x0242 value ====="); |
if (mem240 !==16'h870e) tb_error("====== PUSH @SR : @0x0240 value ====="); |
if (mem23E !==16'h43fe) tb_error("====== PUSH @SR : @0x023e value ====="); |
if (mem23C !==16'h1fc2) tb_error("====== PUSH @SR : @0x023c value ====="); |
if (mem23A !==16'h3d3b) tb_error("====== PUSH @SR : @0x023a value ====="); |
if (mem238 !==16'h71d9) tb_error("====== PUSH @SR : @0x0238 value ====="); |
if (mem236 !==16'h178d) tb_error("====== PUSH @SR : @0x0236 value ====="); |
if (mem234 !==16'h0234) tb_error("====== PUSH @SR : @0x0234 value ====="); |
if (mem232 !==16'h0232) tb_error("====== PUSH @SR : @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH @SR : @0x0230 value ====="); |
if (mem22E !==16'h1234) tb_error("====== PUSH @SR : @0x022E value ====="); |
if (mem22C !==16'h5678) tb_error("====== PUSH @SR : @0x022C value ====="); |
|
// Addressing mode: @SR+ |
@(r15==16'hF300); |
if (r1 !==16'h022E) tb_error("====== PUSH @SR : SP value ====="); |
if (mem250 !==16'h75e2) tb_error("====== PUSH @SR : @0x0250 value ====="); |
if (mem24E !==16'h1cc4) tb_error("====== PUSH @SR : @0x024E value ====="); |
if (mem24C !==16'h12a6) tb_error("====== PUSH @SR : @0x024c value ====="); |
if (mem24A !==16'h5679) tb_error("====== PUSH @SR : @0x024a value ====="); |
if (mem248 !==16'h9a6a) tb_error("====== PUSH @SR : @0x0248 value ====="); |
if (mem246 !==16'hde97) tb_error("====== PUSH @SR : @0x0246 value ====="); |
if (mem244 !==16'h0f4c) tb_error("====== PUSH @SR : @0x0244 value ====="); |
if (mem242 !==16'hcbc3) tb_error("====== PUSH @SR : @0x0242 value ====="); |
if (mem240 !==16'h870e) tb_error("====== PUSH @SR : @0x0240 value ====="); |
if (mem23E !==16'h43fe) tb_error("====== PUSH @SR : @0x023e value ====="); |
if (mem23C !==16'h1fc2) tb_error("====== PUSH @SR : @0x023c value ====="); |
if (mem23A !==16'h3d3b) tb_error("====== PUSH @SR : @0x023a value ====="); |
if (mem238 !==16'h71d9) tb_error("====== PUSH @SR : @0x0238 value ====="); |
if (mem236 !==16'h178d) tb_error("====== PUSH @SR : @0x0236 value ====="); |
if (mem234 !==16'h0234) tb_error("====== PUSH @SR : @0x0234 value ====="); |
if (mem232 !==16'h0232) tb_error("====== PUSH @SR : @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH @SR : @0x0230 value ====="); |
if (mem22E !==16'h1234) tb_error("====== PUSH @SR : @0x022E value ====="); |
if (mem22C !==16'h5678) tb_error("====== PUSH @SR : @0x022C value ====="); |
if (mem22A !==16'h0000) tb_error("====== PUSH @SR : @0x022A value ====="); |
if (mem228 !==16'h0000) tb_error("====== PUSH @SR : @0x0228 value ====="); |
|
// Addressing mode: x(SR) |
@(r15==16'hF400); |
if (r1 !==16'h022A) tb_error("====== PUSH @SR : SP value ====="); |
if (mem250 !==16'h75e2) tb_error("====== PUSH @SR : @0x0250 value ====="); |
if (mem24E !==16'h1cc4) tb_error("====== PUSH @SR : @0x024E value ====="); |
if (mem24C !==16'h12a6) tb_error("====== PUSH @SR : @0x024c value ====="); |
if (mem24A !==16'h5679) tb_error("====== PUSH @SR : @0x024a value ====="); |
if (mem248 !==16'h9a6a) tb_error("====== PUSH @SR : @0x0248 value ====="); |
if (mem246 !==16'hde97) tb_error("====== PUSH @SR : @0x0246 value ====="); |
if (mem244 !==16'h0f4c) tb_error("====== PUSH @SR : @0x0244 value ====="); |
if (mem242 !==16'hcbc3) tb_error("====== PUSH @SR : @0x0242 value ====="); |
if (mem240 !==16'h870e) tb_error("====== PUSH @SR : @0x0240 value ====="); |
if (mem23E !==16'h43fe) tb_error("====== PUSH @SR : @0x023e value ====="); |
if (mem23C !==16'h1fc2) tb_error("====== PUSH @SR : @0x023c value ====="); |
if (mem23A !==16'h3d3b) tb_error("====== PUSH @SR : @0x023a value ====="); |
if (mem238 !==16'h71d9) tb_error("====== PUSH @SR : @0x0238 value ====="); |
if (mem236 !==16'h178d) tb_error("====== PUSH @SR : @0x0236 value ====="); |
if (mem234 !==16'h0234) tb_error("====== PUSH @SR : @0x0234 value ====="); |
if (mem232 !==16'h0232) tb_error("====== PUSH @SR : @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH @SR : @0x0230 value ====="); |
if (mem22E !==16'h1234) tb_error("====== PUSH @SR : @0x022E value ====="); |
if (mem22C !==16'h71d9) tb_error("====== PUSH @SR : @0x022C value ====="); |
if (mem22A !==16'h178d) tb_error("====== PUSH @SR : @0x022A value ====="); |
if (mem228 !==16'h0000) tb_error("====== PUSH @SR : @0x0228 value ====="); |
|
|
/* -------------- TEST POP INSTRUCTION WITH SR AS ARGUMENT ------------------- */ |
|
// Addressing mode: x(SR) |
@(r15==16'hF500); |
if (r1 !==16'h022E) tb_error("====== PUSH @SR : SP value ====="); |
if (mem250 !==16'h75e2) tb_error("====== PUSH @SR : @0x0250 value ====="); |
if (mem24E !==16'h1cc4) tb_error("====== PUSH @SR : @0x024E value ====="); |
if (mem24C !==16'h12a6) tb_error("====== PUSH @SR : @0x024c value ====="); |
if (mem24A !==16'h5679) tb_error("====== PUSH @SR : @0x024a value ====="); |
if (mem248 !==16'h9a6a) tb_error("====== PUSH @SR : @0x0248 value ====="); |
if (mem246 !==16'hde97) tb_error("====== PUSH @SR : @0x0246 value ====="); |
if (mem244 !==16'h0f4c) tb_error("====== PUSH @SR : @0x0244 value ====="); |
if (mem242 !==16'hcbc3) tb_error("====== PUSH @SR : @0x0242 value ====="); |
if (mem240 !==16'h870e) tb_error("====== PUSH @SR : @0x0240 value ====="); |
if (mem23E !==16'h43fe) tb_error("====== PUSH @SR : @0x023e value ====="); |
if (mem23C !==16'h1fc2) tb_error("====== PUSH @SR : @0x023c value ====="); |
if (mem23A !==16'h3d3b) tb_error("====== PUSH @SR : @0x023a value ====="); |
if (mem238 !==16'h71d9) tb_error("====== PUSH @SR : @0x0238 value ====="); |
if (mem236 !==16'h178d) tb_error("====== PUSH @SR : @0x0236 value ====="); |
if (mem234 !==16'h71d9) tb_error("====== PUSH @SR : @0x0234 value ====="); |
if (mem232 !==16'h178d) tb_error("====== PUSH @SR : @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH @SR : @0x0230 value ====="); |
if (mem22E !==16'h1234) tb_error("====== PUSH @SR : @0x022E value ====="); |
if (mem22C !==16'h71d9) tb_error("====== PUSH @SR : @0x022C value ====="); |
if (mem22A !==16'h178d) tb_error("====== PUSH @SR : @0x022A value ====="); |
if (mem228 !==16'h0000) tb_error("====== PUSH @SR : @0x0228 value ====="); |
|
// Addressing mode: SR |
@(r15==16'hF600); |
if (r1 !==16'h1234) tb_error("====== PUSH @SR : SP value ====="); |
if (mem250 !==16'h75e2) tb_error("====== PUSH @SR : @0x0250 value ====="); |
if (mem24E !==16'h1cc4) tb_error("====== PUSH @SR : @0x024E value ====="); |
if (mem24C !==16'h12a6) tb_error("====== PUSH @SR : @0x024c value ====="); |
if (mem24A !==16'h5679) tb_error("====== PUSH @SR : @0x024a value ====="); |
if (mem248 !==16'h9a6a) tb_error("====== PUSH @SR : @0x0248 value ====="); |
if (mem246 !==16'hde97) tb_error("====== PUSH @SR : @0x0246 value ====="); |
if (mem244 !==16'h0f4c) tb_error("====== PUSH @SR : @0x0244 value ====="); |
if (mem242 !==16'hcbc3) tb_error("====== PUSH @SR : @0x0242 value ====="); |
if (mem240 !==16'h870e) tb_error("====== PUSH @SR : @0x0240 value ====="); |
if (mem23E !==16'h43fe) tb_error("====== PUSH @SR : @0x023e value ====="); |
if (mem23C !==16'h1fc2) tb_error("====== PUSH @SR : @0x023c value ====="); |
if (mem23A !==16'h3d3b) tb_error("====== PUSH @SR : @0x023a value ====="); |
if (mem238 !==16'h71d9) tb_error("====== PUSH @SR : @0x0238 value ====="); |
if (mem236 !==16'h178d) tb_error("====== PUSH @SR : @0x0236 value ====="); |
if (mem234 !==16'h71d9) tb_error("====== PUSH @SR : @0x0234 value ====="); |
if (mem232 !==16'h178d) tb_error("====== PUSH @SR : @0x0232 value ====="); |
if (mem230 !==16'h0000) tb_error("====== PUSH @SR : @0x0230 value ====="); |
if (mem22E !==16'h1234) tb_error("====== PUSH @SR : @0x022E value ====="); |
if (mem22C !==16'h71d9) tb_error("====== PUSH @SR : @0x022C value ====="); |
if (mem22A !==16'h178d) tb_error("====== PUSH @SR : @0x022A value ====="); |
if (mem228 !==16'h0000) tb_error("====== PUSH @SR : @0x0228 value ====="); |
|
stimulus_done = 1; |
end |
|
/core/sim/rtl_sim/src/sing-op_push.s43
278,7 → 278,78
|
mov #0xF000, r15 |
|
/* -------------- TEST INSTRUCTION WITH SR AS ARGUMENT ------------------- */ |
|
# Addressing mode: SR |
#------------------------ |
|
nop |
push r1 ;# PUSH (r1=0x0234 => @=0x0234) |
push r1 ;# PUSH (r1=0x0232 => @=0x0232) |
nop |
|
mov #0xF100, r15 |
|
|
# Addressing mode: @SR |
#------------------------ |
|
mov #0x1234, &0x022E |
mov #0x5678, &0x022C |
nop |
push @r1 ;# PUSH (r1=0x0230 => @=0x0230) -> do nothing |
push @r1 ;# PUSH (r1=0x022E => @=0x022E) -> do nothing |
nop |
|
mov #0xF200, r15 |
|
|
# Addressing mode: @SR+ |
#------------------------ |
|
mov #0x0000, &0x022A |
mov #0x0000, &0x0228 |
nop |
push @r1+ ;# PUSH (r1=0x022C => @=0x022C) -> do nothing |
push @r1+ ;# PUSH (r1=0x022C => @=0x022C) -> do nothing |
nop |
|
mov #0xF300, r15 |
|
|
# Addressing mode: x(SR) |
#------------------------ |
|
nop |
push 12(r1) ;# PUSH (r1=0x022C+12 => @=0x022C) |
push 12(r1) ;# PUSH (r1=0x022A+12 => @=0x022A) |
nop |
|
mov #0xF400, r15 |
|
/* -------------- TEST POP INSTRUCTION WITH SR AS ARGUMENT ------------------- */ |
|
# Addressing mode: x(SR) |
#------------------------ |
|
nop |
pop 8(r1) ;# POP (r1=0x022A => @=0x022A+8) |
pop 8(r1) ;# POP (r1=0x022C => @=0x022C+8) |
nop |
|
mov #0xF500, r15 |
|
|
# Addressing mode: SR |
#------------------------ |
|
nop |
pop r1 ;# POP (r1=@0x022E) |
nop |
|
mov #0xF600, r15 |
|
|
/* ---------------------- END OF TEST --------------- */ |
end_of_test: |
nop |