windowsでiverilog その77

#概要　

windowsでiverilogやってみた。
俺cpuに、サブルーチンコールを導入した。

#call命令

スタックトップに、現在のプログラムカウンタの値を積む。

#ret命令

スタックトップをプログラムカウンタにセットする。

#サンプルコード


```
mem[12'h000] = 16'h1008;//       push  8
mem[12'h001] = 16'h3010;//       set  a
mem[12'h002] = 16'h1005;//       push  5
mem[12'h003] = 16'h3011;//       set  b
mem[12'h004] = 16'ha000;//       call
mem[12'h005] = 16'h4009;//       jmp  add
mem[12'h006] = 16'h2012;//       get  c
mem[12'h007] = 16'he000;//       out
mem[12'h008] = 16'h4008;//bye:  jmp  bye
mem[12'h009] = 16'h1001;//add:  push  1
mem[12'h00a] = 16'hf000;//       +
mem[12'h00b] = 16'h2010;//       get  a
mem[12'h00c] = 16'h2011;//       get  b
mem[12'h00d] = 16'hf000;//       +
mem[12'h00e] = 16'h3012;//       set  c
mem[12'h00f] = 16'hb000;//       ret
mem[12'h010] = 16'h0000;//a:  0x0000
mem[12'h011] = 16'h0000;//b:  0x0000
mem[12'h012] = 16'h0000;//c:  0x0000


```

#iverilog実行結果


```


0xxx xxxx xxx zzzz x xx
0000 0000 xxx zzzz 0 00
0000 0000 000 zzzz 0 00
0001 0000 000 zzzz 0 00
0001 0000 000 1008 0 00
0001 0000 000 0008 0 00
0001 0008 001 0008 0 00
0001 0008 001 zzzz 0 00
0002 0008 001 zzzz 0 00
0002 0008 001 3010 0 00
0002 0008 010 3010 1 00
0002 0008 010 0008 1 00
0002 0000 002 0008 0 00
0002 0000 002 zzzz 0 00
0003 0000 002 zzzz 0 00
0003 0000 002 1005 0 00
0003 0000 002 0005 0 00
0003 0005 003 0005 0 00
0003 0005 003 zzzz 0 00
0004 0005 003 zzzz 0 00
0004 0005 003 3011 0 00
0004 0005 011 3011 1 00
0004 0005 011 0005 1 00
0004 0000 004 0005 0 00
0004 0000 004 zzzz 0 00
0005 0000 004 zzzz 0 00
0005 0000 004 a000 0 00
0005 0000 005 a000 0 00
0005 0000 005 zzzz 0 00
0005 0005 005 zzzz 0 00
0006 0005 005 zzzz 0 00
0006 0005 005 4009 0 00
0006 0005 009 4009 0 00
0006 0005 009 zzzz 0 00
0009 0005 009 zzzz 0 00
000a 0005 009 zzzz 0 00
000a 0005 009 1001 0 00
000a 0005 009 0001 0 00
000a 0001 00a 0001 0 00
000a 0001 00a zzzz 0 00
000b 0001 00a zzzz 0 00
000b 0001 00a f000 0 00
000b 0001 00a f000 1 00
000b 0001 00a 0006 1 00
000b 0006 00b 0006 0 00
000b 0006 00b zzzz 0 00
000c 0006 00b zzzz 0 00
000c 0006 00b 2010 0 00
000c 0006 010 2010 0 00
000c 0006 010 zzzz 0 00
000c 0006 010 0008 0 00
000c 0008 00c 0008 0 00
000c 0008 00c zzzz 0 00
000d 0008 00c zzzz 0 00
000d 0008 00c 2011 0 00
000d 0008 011 2011 0 00
000d 0008 011 zzzz 0 00
000d 0008 011 0005 0 00
000d 0005 00d 0005 0 00
000d 0005 00d zzzz 0 00
000e 0005 00d zzzz 0 00
000e 0005 00d f000 0 00
000e 0005 00d f000 1 00
000e 0005 00d 000d 1 00
000e 000d 00e 000d 0 00
000e 000d 00e zzzz 0 00
000f 000d 00e zzzz 0 00
000f 000d 00e 3012 0 00
000f 000d 012 3012 1 00
000f 000d 012 000d 1 00
000f 0006 00f 000d 0 00
000f 0006 00f zzzz 0 00
0010 0006 00f zzzz 0 00
0010 0006 00f b000 0 00
0010 0006 00f b000 1 00
0010 0006 00f 0006 1 00
0006 0000 006 0006 0 00
0006 0000 006 zzzz 0 00
0007 0000 006 zzzz 0 00
0007 0000 006 2012 0 00
0007 0000 012 2012 0 00
0007 0000 012 zzzz 0 00
0007 0000 012 000d 0 00
0007 000d 007 000d 0 00
0007 000d 007 zzzz 0 00
0008 000d 007 zzzz 0 00
0008 000d 007 e000 0 00
0008 000d 007 e000 1 00
0008 000d 007 000d 1 00
0008 0000 008 000d 0 0d
0008 0000 008 zzzz 0 0d
0009 0000 008 zzzz 0 0d
0009 0000 008 4008 0 0d
0009 0000 008 zzzz 0 0d
0008 0000 008 zzzz 0 0d
0009 0000 008 zzzz 0 0d
0009 0000 008 4008 0 0d
0009 0000 008 zzzz 0 0d
0008 0000 008 zzzz 0 0d


```

以上。