URL
https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
Subversion Repositories openmsp430
Compare Revisions
- This comparison shows the changes necessary to convert path
/openmsp430/trunk/core/sim
- from Rev 122 to Rev 128
- ↔ Reverse comparison
Rev 122 → Rev 128
rtl_sim/run
Property changes :
Modified: svn:ignore
## -3,3 +3,4 ##
stimulus.v
*.vcd
simv
+log
Index: rtl_sim/src/sing-op_call.v
===================================================================
--- rtl_sim/src/sing-op_call.v (revision 122)
+++ rtl_sim/src/sing-op_call.v (revision 128)
@@ -41,6 +41,8 @@
$display(" ===============================================");
repeat(5) @(posedge mclk);
stimulus_done = 0;
+
+ /* -------------- TEST INSTRUCTION WITH STANDARD REGISTERS AS ARGUMENT ------------------- */
// Initialization
@(r15==16'h1000);
@@ -91,6 +93,30 @@
if (r5 !==16'h6789) tb_error("====== CALL (&EDE mode): R5 value =====");
+ /* -------------- TEST INSTRUCTION WITH SR AS ARGUMENT ------------------- */
+
+
+ // Addressing mode: SR
+ @(r15==16'h9000);
+ // --> not tested because it would require the cpu to execute from the data memory
+
+
+ // Addressing mode: @SR
+ @(r15==16'hA000);
+ if (r5 !==16'habcd) tb_error("====== CALL @SR : R5 value =====");
+
+
+ // Addressing mode: @SR+
+ @(r15==16'hB000);
+ if (r5 !==16'h159a) tb_error("====== CALL @SR+ : R5 value =====");
+
+
+ // Addressing mode: x(SR)
+ @(r15==16'hC000);
+ if (r5 !==16'h9abc) tb_error("====== CALL x(SR) : R5 value =====");
+ if (r6 !==16'hef01) tb_error("====== CALL x(SR) : R6 value =====");
+ if (r7 !==16'h2345) tb_error("====== CALL x(SR) : R7 value =====");
+
stimulus_done = 1;
end
/rtl_sim/src/sing-op_call.s43
48,6 → 48,8
.global main |
|
main: |
/* -------------- TEST INSTRUCTION WITH STANDARD REGISTERS AS ARGUMENT ------------------- */ |
|
# Initialization |
#------------------------ |
|
139,6 → 141,95
mov #0x8000, r15 |
|
|
/* -------------- TEST INSTRUCTION WITH SR AS ARGUMENT ------------------- */ |
|
|
# Addressing mode: SR |
#------------------------ |
|
mov #0x0000, r5 |
nop |
#call r1 ;# NOT VALID BECAUSE IT JUMPS IN THE DATA MEMORY |
nop ;# WHICH IS NOT EXECUTABLE |
|
mov #0x9000, r15 |
|
|
# Addressing mode: @SR |
#------------------------ |
|
mov #DMEM_252, r1 ;# Initialize stack pointer |
push #TEST_ROUTINE_RN |
push #TEST_ROUTINE_aRN |
push #TEST_ROUTINE_aRNi |
mov r1, r13 ; backup stack for later |
push #TEST_ROUTINE_N |
push #TEST_ROUTINE_xRN |
push #TEST_ROUTINE_EDE |
push #TEST_ROUTINE_aEDE |
|
nop |
mov r13, r1 |
mov #0x0000, r5 |
nop |
call @r1 ;# CALL #TEST_ROUTINE_N (r5 = 0xabcd) |
nop |
|
mov #0xa000, r15 |
|
|
# Addressing mode: @SR+ |
#------------------------ |
|
mov #DMEM_252, r1 ;# Initialize stack pointer |
push #TEST_ROUTINE_SPECIAL_aRNi |
push #TEST_ROUTINE_RN |
push #TEST_ROUTINE_aRN |
push #TEST_ROUTINE_aRNi |
mov r1, r13 ; backup stack for later |
push #TEST_ROUTINE_N |
push #TEST_ROUTINE_xRN |
push #TEST_ROUTINE_EDE |
push #TEST_ROUTINE_aEDE |
|
nop |
mov r13, r1 |
mov #0x0000, r5 |
nop |
call @r1+ ;# CALL #TEST_ROUTINE_N (this has a funny behavior of nested call backward until SPECIAL_aRNi is reached) |
nop |
|
mov #0xb000, r15 |
|
|
# Addressing mode: x(SR) |
#------------------------ |
|
mov #DMEM_252, r1 ;# Initialize stack pointer |
push #TEST_ROUTINE_RN |
push #TEST_ROUTINE_aRN |
push #TEST_ROUTINE_aRNi |
push #TEST_ROUTINE_N |
push #TEST_ROUTINE_xRN |
push #TEST_ROUTINE_EDE |
push #TEST_ROUTINE_aEDE |
nop |
mov #0x0000, r5 |
mov #0x0000, r6 |
mov #0x0000, r7 |
call 4(r1) ;# CALL #TEST_ROUTINE_EDE (r7 = 0x2345) |
mov r5, r7 |
mov #0x0000, r5 |
call 6(r1) ;# CALL #TEST_ROUTINE_xRN (r6 = 0xef01) |
mov r5, r6 |
mov #0x0000, r5 |
call 10(r1) ;# CALL #TEST_ROUTINE_aRNi (r5 = 0x9abc) |
nop |
|
mov #0xc000, r15 |
|
|
|
/* ---------------------- END OF TEST --------------- */ |
end_of_test: |
nop |
176,8 → 267,13
mov #0x6789, r5 |
ret |
|
TEST_ROUTINE_SPECIAL_aRNi: |
mov #0x159a, r5 |
sub #0x000a, r1 |
ret |
|
|
|
/* ---------------------- INTERRUPT VECTORS --------------- */ |
|
.section .vectors, "a" |
/rtl_sim/bin/template.def
1,6 → 1,6
/* Default linker script, for normal executables */ |
OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430") |
OUTPUT_ARCH(msp:110) |
OUTPUT_ARCH(msp430) |
MEMORY |
{ |
text (rx) : ORIGIN = PMEM_BASE, LENGTH = PMEM_SIZE |