0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

micropythonでshrike-lite、やってみた。
verilogでAVRを書く。
1から100まで数えてみた。

投入したソースコード

			rom[0] <= 16'hE000; //       avr.ldi(16, 0)
			rom[1] <= 16'h9503; //       avr.inc(16)
			rom[2] <= 16'hB901; //       avr.out(1, 16)
			rom[3] <= 16'h3604; //       avr.cpi(16, 100)
			rom[4] <= 16'hF7E1; //       avr.brne(-3)
			rom[5] <= 16'hC000; // 

実行結果


>vvp a.out

VCD info: dumpfile test.vcd opened for output.
 pc:   x r16:   x PIN: x ddr: xx port: xx
 pc:   0 r16:   x PIN: z ddr: 00 port: 00
 pc:   1 r16:   0 PIN: z ddr: 00 port: 00
 pc:   2 r16:   1 PIN: z ddr: 00 port: 00
 pc:   3 r16:   1 PIN: 0 ddr: 01 port: 00
 pc:   4 r16:   1 PIN: 0 ddr: 01 port: 00
 pc:   1 r16:   1 PIN: 0 ddr: 01 port: 00
 pc:   2 r16:   2 PIN: 0 ddr: 01 port: 00
 pc:   3 r16:   2 PIN: z ddr: 02 port: 00
 pc:   4 r16:   2 PIN: z ddr: 02 port: 00
 pc:   1 r16:   2 PIN: z ddr: 02 port: 00
 pc:   2 r16:   3 PIN: z ddr: 02 port: 00
 pc:   3 r16:   3 PIN: 0 ddr: 03 port: 00
 pc:   4 r16:   3 PIN: 0 ddr: 03 port: 00
 pc:   1 r16:   3 PIN: 0 ddr: 03 port: 00
 pc:   2 r16:   4 PIN: 0 ddr: 03 port: 00
 pc:   3 r16:   4 PIN: z ddr: 04 port: 00
 pc:   4 r16:   4 PIN: z ddr: 04 port: 00
 pc:   1 r16:   4 PIN: z ddr: 04 port: 00
 pc:   2 r16:   5 PIN: z ddr: 04 port: 00
 pc:   3 r16:   5 PIN: 0 ddr: 05 port: 00
 pc:   4 r16:   5 PIN: 0 ddr: 05 port: 00
 pc:   1 r16:   5 PIN: 0 ddr: 05 port: 00
 pc:   2 r16:   6 PIN: 0 ddr: 05 port: 00
 pc:   3 r16:   6 PIN: z ddr: 06 port: 00
 pc:   4 r16:   6 PIN: z ddr: 06 port: 00
 pc:   1 r16:   6 PIN: z ddr: 06 port: 00
 pc:   2 r16:   7 PIN: z ddr: 06 port: 00
 pc:   3 r16:   7 PIN: 0 ddr: 07 port: 00
 pc:   4 r16:   7 PIN: 0 ddr: 07 port: 00
 pc:   1 r16:   7 PIN: 0 ddr: 07 port: 00
 pc:   2 r16:   8 PIN: 0 ddr: 07 port: 00
 pc:   3 r16:   8 PIN: z ddr: 08 port: 00
 pc:   4 r16:   8 PIN: z ddr: 08 port: 00
 pc:   1 r16:   8 PIN: z ddr: 08 port: 00
 pc:   2 r16:   9 PIN: z ddr: 08 port: 00
 pc:   3 r16:   9 PIN: 0 ddr: 09 port: 00
 pc:   4 r16:   9 PIN: 0 ddr: 09 port: 00
 pc:   1 r16:   9 PIN: 0 ddr: 09 port: 00
 pc:   2 r16:  10 PIN: 0 ddr: 09 port: 00
 pc:   3 r16:  10 PIN: z ddr: 0a port: 00
 pc:   4 r16:  10 PIN: z ddr: 0a port: 00
 pc:   1 r16:  10 PIN: z ddr: 0a port: 00
 pc:   2 r16:  11 PIN: z ddr: 0a port: 00
 pc:   3 r16:  11 PIN: 0 ddr: 0b port: 00
 pc:   4 r16:  11 PIN: 0 ddr: 0b port: 00
 pc:   1 r16:  11 PIN: 0 ddr: 0b port: 00
 pc:   2 r16:  12 PIN: 0 ddr: 0b port: 00
 pc:   3 r16:  12 PIN: z ddr: 0c port: 00
 pc:   4 r16:  12 PIN: z ddr: 0c port: 00
 pc:   1 r16:  12 PIN: z ddr: 0c port: 00
 pc:   2 r16:  13 PIN: z ddr: 0c port: 00
 pc:   3 r16:  13 PIN: 0 ddr: 0d port: 00
 pc:   4 r16:  13 PIN: 0 ddr: 0d port: 00
 pc:   1 r16:  13 PIN: 0 ddr: 0d port: 00
 pc:   2 r16:  14 PIN: 0 ddr: 0d port: 00
 pc:   3 r16:  14 PIN: z ddr: 0e port: 00
 pc:   4 r16:  14 PIN: z ddr: 0e port: 00
 pc:   1 r16:  14 PIN: z ddr: 0e port: 00
 pc:   2 r16:  15 PIN: z ddr: 0e port: 00
 pc:   3 r16:  15 PIN: 0 ddr: 0f port: 00
 pc:   4 r16:  15 PIN: 0 ddr: 0f port: 00
 pc:   1 r16:  15 PIN: 0 ddr: 0f port: 00
 pc:   2 r16:  16 PIN: 0 ddr: 0f port: 00
 pc:   3 r16:  16 PIN: z ddr: 10 port: 00
 pc:   4 r16:  16 PIN: z ddr: 10 port: 00
 pc:   1 r16:  16 PIN: z ddr: 10 port: 00
 pc:   2 r16:  17 PIN: z ddr: 10 port: 00
 pc:   3 r16:  17 PIN: 0 ddr: 11 port: 00
 pc:   4 r16:  17 PIN: 0 ddr: 11 port: 00
 pc:   1 r16:  17 PIN: 0 ddr: 11 port: 00
 pc:   2 r16:  18 PIN: 0 ddr: 11 port: 00
 pc:   3 r16:  18 PIN: z ddr: 12 port: 00
 pc:   4 r16:  18 PIN: z ddr: 12 port: 00
 pc:   1 r16:  18 PIN: z ddr: 12 port: 00
 pc:   2 r16:  19 PIN: z ddr: 12 port: 00
 pc:   3 r16:  19 PIN: 0 ddr: 13 port: 00
 pc:   4 r16:  19 PIN: 0 ddr: 13 port: 00
 pc:   1 r16:  19 PIN: 0 ddr: 13 port: 00
 pc:   2 r16:  20 PIN: 0 ddr: 13 port: 00
 pc:   3 r16:  20 PIN: z ddr: 14 port: 00
 pc:   4 r16:  20 PIN: z ddr: 14 port: 00
 pc:   1 r16:  20 PIN: z ddr: 14 port: 00
 pc:   2 r16:  21 PIN: z ddr: 14 port: 00
 pc:   3 r16:  21 PIN: 0 ddr: 15 port: 00
 pc:   4 r16:  21 PIN: 0 ddr: 15 port: 00
 pc:   1 r16:  21 PIN: 0 ddr: 15 port: 00
 pc:   2 r16:  22 PIN: 0 ddr: 15 port: 00
 pc:   3 r16:  22 PIN: z ddr: 16 port: 00
 pc:   4 r16:  22 PIN: z ddr: 16 port: 00
 pc:   1 r16:  22 PIN: z ddr: 16 port: 00
 pc:   2 r16:  23 PIN: z ddr: 16 port: 00
 pc:   3 r16:  23 PIN: 0 ddr: 17 port: 00
 pc:   4 r16:  23 PIN: 0 ddr: 17 port: 00
 pc:   1 r16:  23 PIN: 0 ddr: 17 port: 00
 pc:   2 r16:  24 PIN: 0 ddr: 17 port: 00
 pc:   3 r16:  24 PIN: z ddr: 18 port: 00
 pc:   4 r16:  24 PIN: z ddr: 18 port: 00
 pc:   1 r16:  24 PIN: z ddr: 18 port: 00
 pc:   2 r16:  25 PIN: z ddr: 18 port: 00
 pc:   3 r16:  25 PIN: 0 ddr: 19 port: 00
 pc:   4 r16:  25 PIN: 0 ddr: 19 port: 00
 pc:   1 r16:  25 PIN: 0 ddr: 19 port: 00
 pc:   2 r16:  26 PIN: 0 ddr: 19 port: 00
 pc:   3 r16:  26 PIN: z ddr: 1a port: 00
 pc:   4 r16:  26 PIN: z ddr: 1a port: 00
 pc:   1 r16:  26 PIN: z ddr: 1a port: 00
 pc:   2 r16:  27 PIN: z ddr: 1a port: 00
 pc:   3 r16:  27 PIN: 0 ddr: 1b port: 00
 pc:   4 r16:  27 PIN: 0 ddr: 1b port: 00
 pc:   1 r16:  27 PIN: 0 ddr: 1b port: 00
 pc:   2 r16:  28 PIN: 0 ddr: 1b port: 00
 pc:   3 r16:  28 PIN: z ddr: 1c port: 00
 pc:   4 r16:  28 PIN: z ddr: 1c port: 00
 pc:   1 r16:  28 PIN: z ddr: 1c port: 00
 pc:   2 r16:  29 PIN: z ddr: 1c port: 00
 pc:   3 r16:  29 PIN: 0 ddr: 1d port: 00
 pc:   4 r16:  29 PIN: 0 ddr: 1d port: 00
 pc:   1 r16:  29 PIN: 0 ddr: 1d port: 00
 pc:   2 r16:  30 PIN: 0 ddr: 1d port: 00
 pc:   3 r16:  30 PIN: z ddr: 1e port: 00
 pc:   4 r16:  30 PIN: z ddr: 1e port: 00
 pc:   1 r16:  30 PIN: z ddr: 1e port: 00
 pc:   2 r16:  31 PIN: z ddr: 1e port: 00
 pc:   3 r16:  31 PIN: 0 ddr: 1f port: 00
 pc:   4 r16:  31 PIN: 0 ddr: 1f port: 00
 pc:   1 r16:  31 PIN: 0 ddr: 1f port: 00
 pc:   2 r16:  32 PIN: 0 ddr: 1f port: 00
 pc:   3 r16:  32 PIN: z ddr: 20 port: 00
 pc:   4 r16:  32 PIN: z ddr: 20 port: 00
 pc:   1 r16:  32 PIN: z ddr: 20 port: 00
 pc:   2 r16:  33 PIN: z ddr: 20 port: 00
 pc:   3 r16:  33 PIN: 0 ddr: 21 port: 00
 pc:   4 r16:  33 PIN: 0 ddr: 21 port: 00
 pc:   1 r16:  33 PIN: 0 ddr: 21 port: 00
 pc:   2 r16:  34 PIN: 0 ddr: 21 port: 00
 pc:   3 r16:  34 PIN: z ddr: 22 port: 00
 pc:   4 r16:  34 PIN: z ddr: 22 port: 00
 pc:   1 r16:  34 PIN: z ddr: 22 port: 00
 pc:   2 r16:  35 PIN: z ddr: 22 port: 00
 pc:   3 r16:  35 PIN: 0 ddr: 23 port: 00
 pc:   4 r16:  35 PIN: 0 ddr: 23 port: 00
 pc:   1 r16:  35 PIN: 0 ddr: 23 port: 00
 pc:   2 r16:  36 PIN: 0 ddr: 23 port: 00
 pc:   3 r16:  36 PIN: z ddr: 24 port: 00
 pc:   4 r16:  36 PIN: z ddr: 24 port: 00
 pc:   1 r16:  36 PIN: z ddr: 24 port: 00
 pc:   2 r16:  37 PIN: z ddr: 24 port: 00
 pc:   3 r16:  37 PIN: 0 ddr: 25 port: 00
 pc:   4 r16:  37 PIN: 0 ddr: 25 port: 00
 pc:   1 r16:  37 PIN: 0 ddr: 25 port: 00
 pc:   2 r16:  38 PIN: 0 ddr: 25 port: 00
 pc:   3 r16:  38 PIN: z ddr: 26 port: 00
 pc:   4 r16:  38 PIN: z ddr: 26 port: 00
 pc:   1 r16:  38 PIN: z ddr: 26 port: 00
 pc:   2 r16:  39 PIN: z ddr: 26 port: 00
 pc:   3 r16:  39 PIN: 0 ddr: 27 port: 00
 pc:   4 r16:  39 PIN: 0 ddr: 27 port: 00
 pc:   1 r16:  39 PIN: 0 ddr: 27 port: 00
 pc:   2 r16:  40 PIN: 0 ddr: 27 port: 00
 pc:   3 r16:  40 PIN: z ddr: 28 port: 00
 pc:   4 r16:  40 PIN: z ddr: 28 port: 00
 pc:   1 r16:  40 PIN: z ddr: 28 port: 00
 pc:   2 r16:  41 PIN: z ddr: 28 port: 00
 pc:   3 r16:  41 PIN: 0 ddr: 29 port: 00
 pc:   4 r16:  41 PIN: 0 ddr: 29 port: 00
 pc:   1 r16:  41 PIN: 0 ddr: 29 port: 00
 pc:   2 r16:  42 PIN: 0 ddr: 29 port: 00
 pc:   3 r16:  42 PIN: z ddr: 2a port: 00
 pc:   4 r16:  42 PIN: z ddr: 2a port: 00
 pc:   1 r16:  42 PIN: z ddr: 2a port: 00
 pc:   2 r16:  43 PIN: z ddr: 2a port: 00
 pc:   3 r16:  43 PIN: 0 ddr: 2b port: 00
 pc:   4 r16:  43 PIN: 0 ddr: 2b port: 00
 pc:   1 r16:  43 PIN: 0 ddr: 2b port: 00
 pc:   2 r16:  44 PIN: 0 ddr: 2b port: 00
 pc:   3 r16:  44 PIN: z ddr: 2c port: 00
 pc:   4 r16:  44 PIN: z ddr: 2c port: 00
 pc:   1 r16:  44 PIN: z ddr: 2c port: 00
 pc:   2 r16:  45 PIN: z ddr: 2c port: 00
 pc:   3 r16:  45 PIN: 0 ddr: 2d port: 00
 pc:   4 r16:  45 PIN: 0 ddr: 2d port: 00
 pc:   1 r16:  45 PIN: 0 ddr: 2d port: 00
 pc:   2 r16:  46 PIN: 0 ddr: 2d port: 00
 pc:   3 r16:  46 PIN: z ddr: 2e port: 00
 pc:   4 r16:  46 PIN: z ddr: 2e port: 00
 pc:   1 r16:  46 PIN: z ddr: 2e port: 00
 pc:   2 r16:  47 PIN: z ddr: 2e port: 00
 pc:   3 r16:  47 PIN: 0 ddr: 2f port: 00
 pc:   4 r16:  47 PIN: 0 ddr: 2f port: 00
 pc:   1 r16:  47 PIN: 0 ddr: 2f port: 00
 pc:   2 r16:  48 PIN: 0 ddr: 2f port: 00
 pc:   3 r16:  48 PIN: z ddr: 30 port: 00
 pc:   4 r16:  48 PIN: z ddr: 30 port: 00
 pc:   1 r16:  48 PIN: z ddr: 30 port: 00
 pc:   2 r16:  49 PIN: z ddr: 30 port: 00
 pc:   3 r16:  49 PIN: 0 ddr: 31 port: 00
 pc:   4 r16:  49 PIN: 0 ddr: 31 port: 00
 pc:   1 r16:  49 PIN: 0 ddr: 31 port: 00
 pc:   2 r16:  50 PIN: 0 ddr: 31 port: 00
 pc:   3 r16:  50 PIN: z ddr: 32 port: 00
 pc:   4 r16:  50 PIN: z ddr: 32 port: 00
 pc:   1 r16:  50 PIN: z ddr: 32 port: 00
 pc:   2 r16:  51 PIN: z ddr: 32 port: 00
 pc:   3 r16:  51 PIN: 0 ddr: 33 port: 00
 pc:   4 r16:  51 PIN: 0 ddr: 33 port: 00
 pc:   1 r16:  51 PIN: 0 ddr: 33 port: 00
 pc:   2 r16:  52 PIN: 0 ddr: 33 port: 00
 pc:   3 r16:  52 PIN: z ddr: 34 port: 00
 pc:   4 r16:  52 PIN: z ddr: 34 port: 00
 pc:   1 r16:  52 PIN: z ddr: 34 port: 00
 pc:   2 r16:  53 PIN: z ddr: 34 port: 00
 pc:   3 r16:  53 PIN: 0 ddr: 35 port: 00
 pc:   4 r16:  53 PIN: 0 ddr: 35 port: 00
 pc:   1 r16:  53 PIN: 0 ddr: 35 port: 00
 pc:   2 r16:  54 PIN: 0 ddr: 35 port: 00
 pc:   3 r16:  54 PIN: z ddr: 36 port: 00
 pc:   4 r16:  54 PIN: z ddr: 36 port: 00
 pc:   1 r16:  54 PIN: z ddr: 36 port: 00
 pc:   2 r16:  55 PIN: z ddr: 36 port: 00
 pc:   3 r16:  55 PIN: 0 ddr: 37 port: 00
 pc:   4 r16:  55 PIN: 0 ddr: 37 port: 00
 pc:   1 r16:  55 PIN: 0 ddr: 37 port: 00
 pc:   2 r16:  56 PIN: 0 ddr: 37 port: 00
 pc:   3 r16:  56 PIN: z ddr: 38 port: 00
 pc:   4 r16:  56 PIN: z ddr: 38 port: 00
 pc:   1 r16:  56 PIN: z ddr: 38 port: 00
 pc:   2 r16:  57 PIN: z ddr: 38 port: 00
 pc:   3 r16:  57 PIN: 0 ddr: 39 port: 00
 pc:   4 r16:  57 PIN: 0 ddr: 39 port: 00
 pc:   1 r16:  57 PIN: 0 ddr: 39 port: 00
 pc:   2 r16:  58 PIN: 0 ddr: 39 port: 00
 pc:   3 r16:  58 PIN: z ddr: 3a port: 00
 pc:   4 r16:  58 PIN: z ddr: 3a port: 00
 pc:   1 r16:  58 PIN: z ddr: 3a port: 00
 pc:   2 r16:  59 PIN: z ddr: 3a port: 00
 pc:   3 r16:  59 PIN: 0 ddr: 3b port: 00
 pc:   4 r16:  59 PIN: 0 ddr: 3b port: 00
 pc:   1 r16:  59 PIN: 0 ddr: 3b port: 00
 pc:   2 r16:  60 PIN: 0 ddr: 3b port: 00
 pc:   3 r16:  60 PIN: z ddr: 3c port: 00
 pc:   4 r16:  60 PIN: z ddr: 3c port: 00
 pc:   1 r16:  60 PIN: z ddr: 3c port: 00
 pc:   2 r16:  61 PIN: z ddr: 3c port: 00
 pc:   3 r16:  61 PIN: 0 ddr: 3d port: 00
 pc:   4 r16:  61 PIN: 0 ddr: 3d port: 00
 pc:   1 r16:  61 PIN: 0 ddr: 3d port: 00
 pc:   2 r16:  62 PIN: 0 ddr: 3d port: 00
 pc:   3 r16:  62 PIN: z ddr: 3e port: 00
 pc:   4 r16:  62 PIN: z ddr: 3e port: 00
 pc:   1 r16:  62 PIN: z ddr: 3e port: 00
 pc:   2 r16:  63 PIN: z ddr: 3e port: 00
 pc:   3 r16:  63 PIN: 0 ddr: 3f port: 00
 pc:   4 r16:  63 PIN: 0 ddr: 3f port: 00
 pc:   1 r16:  63 PIN: 0 ddr: 3f port: 00
 pc:   2 r16:  64 PIN: 0 ddr: 3f port: 00
 pc:   3 r16:  64 PIN: z ddr: 40 port: 00
 pc:   4 r16:  64 PIN: z ddr: 40 port: 00
 pc:   1 r16:  64 PIN: z ddr: 40 port: 00
 pc:   2 r16:  65 PIN: z ddr: 40 port: 00
 pc:   3 r16:  65 PIN: 0 ddr: 41 port: 00
 pc:   4 r16:  65 PIN: 0 ddr: 41 port: 00
 pc:   1 r16:  65 PIN: 0 ddr: 41 port: 00
 pc:   2 r16:  66 PIN: 0 ddr: 41 port: 00
 pc:   3 r16:  66 PIN: z ddr: 42 port: 00
 pc:   4 r16:  66 PIN: z ddr: 42 port: 00
 pc:   1 r16:  66 PIN: z ddr: 42 port: 00
 pc:   2 r16:  67 PIN: z ddr: 42 port: 00
 pc:   3 r16:  67 PIN: 0 ddr: 43 port: 00
 pc:   4 r16:  67 PIN: 0 ddr: 43 port: 00
 pc:   1 r16:  67 PIN: 0 ddr: 43 port: 00
 pc:   2 r16:  68 PIN: 0 ddr: 43 port: 00
 pc:   3 r16:  68 PIN: z ddr: 44 port: 00
 pc:   4 r16:  68 PIN: z ddr: 44 port: 00
 pc:   1 r16:  68 PIN: z ddr: 44 port: 00
 pc:   2 r16:  69 PIN: z ddr: 44 port: 00
 pc:   3 r16:  69 PIN: 0 ddr: 45 port: 00
 pc:   4 r16:  69 PIN: 0 ddr: 45 port: 00
 pc:   1 r16:  69 PIN: 0 ddr: 45 port: 00
 pc:   2 r16:  70 PIN: 0 ddr: 45 port: 00
 pc:   3 r16:  70 PIN: z ddr: 46 port: 00
 pc:   4 r16:  70 PIN: z ddr: 46 port: 00
 pc:   1 r16:  70 PIN: z ddr: 46 port: 00
 pc:   2 r16:  71 PIN: z ddr: 46 port: 00
 pc:   3 r16:  71 PIN: 0 ddr: 47 port: 00
 pc:   4 r16:  71 PIN: 0 ddr: 47 port: 00
 pc:   1 r16:  71 PIN: 0 ddr: 47 port: 00
 pc:   2 r16:  72 PIN: 0 ddr: 47 port: 00
 pc:   3 r16:  72 PIN: z ddr: 48 port: 00
 pc:   4 r16:  72 PIN: z ddr: 48 port: 00
 pc:   1 r16:  72 PIN: z ddr: 48 port: 00
 pc:   2 r16:  73 PIN: z ddr: 48 port: 00
 pc:   3 r16:  73 PIN: 0 ddr: 49 port: 00
 pc:   4 r16:  73 PIN: 0 ddr: 49 port: 00
 pc:   1 r16:  73 PIN: 0 ddr: 49 port: 00
 pc:   2 r16:  74 PIN: 0 ddr: 49 port: 00
 pc:   3 r16:  74 PIN: z ddr: 4a port: 00
 pc:   4 r16:  74 PIN: z ddr: 4a port: 00
 pc:   1 r16:  74 PIN: z ddr: 4a port: 00
 pc:   2 r16:  75 PIN: z ddr: 4a port: 00
 pc:   3 r16:  75 PIN: 0 ddr: 4b port: 00
 pc:   4 r16:  75 PIN: 0 ddr: 4b port: 00
 pc:   1 r16:  75 PIN: 0 ddr: 4b port: 00
 pc:   2 r16:  76 PIN: 0 ddr: 4b port: 00
 pc:   3 r16:  76 PIN: z ddr: 4c port: 00
 pc:   4 r16:  76 PIN: z ddr: 4c port: 00
 pc:   1 r16:  76 PIN: z ddr: 4c port: 00
 pc:   2 r16:  77 PIN: z ddr: 4c port: 00
 pc:   3 r16:  77 PIN: 0 ddr: 4d port: 00
 pc:   4 r16:  77 PIN: 0 ddr: 4d port: 00
 pc:   1 r16:  77 PIN: 0 ddr: 4d port: 00
 pc:   2 r16:  78 PIN: 0 ddr: 4d port: 00
 pc:   3 r16:  78 PIN: z ddr: 4e port: 00
 pc:   4 r16:  78 PIN: z ddr: 4e port: 00
 pc:   1 r16:  78 PIN: z ddr: 4e port: 00
 pc:   2 r16:  79 PIN: z ddr: 4e port: 00
 pc:   3 r16:  79 PIN: 0 ddr: 4f port: 00
 pc:   4 r16:  79 PIN: 0 ddr: 4f port: 00
 pc:   1 r16:  79 PIN: 0 ddr: 4f port: 00
 pc:   2 r16:  80 PIN: 0 ddr: 4f port: 00
 pc:   3 r16:  80 PIN: z ddr: 50 port: 00
 pc:   4 r16:  80 PIN: z ddr: 50 port: 00
 pc:   1 r16:  80 PIN: z ddr: 50 port: 00
 pc:   2 r16:  81 PIN: z ddr: 50 port: 00
 pc:   3 r16:  81 PIN: 0 ddr: 51 port: 00
 pc:   4 r16:  81 PIN: 0 ddr: 51 port: 00
 pc:   1 r16:  81 PIN: 0 ddr: 51 port: 00
 pc:   2 r16:  82 PIN: 0 ddr: 51 port: 00
 pc:   3 r16:  82 PIN: z ddr: 52 port: 00
 pc:   4 r16:  82 PIN: z ddr: 52 port: 00
 pc:   1 r16:  82 PIN: z ddr: 52 port: 00
 pc:   2 r16:  83 PIN: z ddr: 52 port: 00
 pc:   3 r16:  83 PIN: 0 ddr: 53 port: 00
 pc:   4 r16:  83 PIN: 0 ddr: 53 port: 00
 pc:   1 r16:  83 PIN: 0 ddr: 53 port: 00
 pc:   2 r16:  84 PIN: 0 ddr: 53 port: 00
 pc:   3 r16:  84 PIN: z ddr: 54 port: 00
 pc:   4 r16:  84 PIN: z ddr: 54 port: 00
 pc:   1 r16:  84 PIN: z ddr: 54 port: 00
 pc:   2 r16:  85 PIN: z ddr: 54 port: 00
 pc:   3 r16:  85 PIN: 0 ddr: 55 port: 00
 pc:   4 r16:  85 PIN: 0 ddr: 55 port: 00
 pc:   1 r16:  85 PIN: 0 ddr: 55 port: 00
 pc:   2 r16:  86 PIN: 0 ddr: 55 port: 00
 pc:   3 r16:  86 PIN: z ddr: 56 port: 00
 pc:   4 r16:  86 PIN: z ddr: 56 port: 00
 pc:   1 r16:  86 PIN: z ddr: 56 port: 00
 pc:   2 r16:  87 PIN: z ddr: 56 port: 00
 pc:   3 r16:  87 PIN: 0 ddr: 57 port: 00
 pc:   4 r16:  87 PIN: 0 ddr: 57 port: 00
 pc:   1 r16:  87 PIN: 0 ddr: 57 port: 00
 pc:   2 r16:  88 PIN: 0 ddr: 57 port: 00
 pc:   3 r16:  88 PIN: z ddr: 58 port: 00
 pc:   4 r16:  88 PIN: z ddr: 58 port: 00
 pc:   1 r16:  88 PIN: z ddr: 58 port: 00
 pc:   2 r16:  89 PIN: z ddr: 58 port: 00
 pc:   3 r16:  89 PIN: 0 ddr: 59 port: 00
 pc:   4 r16:  89 PIN: 0 ddr: 59 port: 00
 pc:   1 r16:  89 PIN: 0 ddr: 59 port: 00
 pc:   2 r16:  90 PIN: 0 ddr: 59 port: 00
 pc:   3 r16:  90 PIN: z ddr: 5a port: 00
 pc:   4 r16:  90 PIN: z ddr: 5a port: 00
 pc:   1 r16:  90 PIN: z ddr: 5a port: 00
 pc:   2 r16:  91 PIN: z ddr: 5a port: 00
 pc:   3 r16:  91 PIN: 0 ddr: 5b port: 00
 pc:   4 r16:  91 PIN: 0 ddr: 5b port: 00
 pc:   1 r16:  91 PIN: 0 ddr: 5b port: 00
 pc:   2 r16:  92 PIN: 0 ddr: 5b port: 00
 pc:   3 r16:  92 PIN: z ddr: 5c port: 00
 pc:   4 r16:  92 PIN: z ddr: 5c port: 00
 pc:   1 r16:  92 PIN: z ddr: 5c port: 00
 pc:   2 r16:  93 PIN: z ddr: 5c port: 00
 pc:   3 r16:  93 PIN: 0 ddr: 5d port: 00
 pc:   4 r16:  93 PIN: 0 ddr: 5d port: 00
 pc:   1 r16:  93 PIN: 0 ddr: 5d port: 00
 pc:   2 r16:  94 PIN: 0 ddr: 5d port: 00
 pc:   3 r16:  94 PIN: z ddr: 5e port: 00
 pc:   4 r16:  94 PIN: z ddr: 5e port: 00
 pc:   1 r16:  94 PIN: z ddr: 5e port: 00
 pc:   2 r16:  95 PIN: z ddr: 5e port: 00
 pc:   3 r16:  95 PIN: 0 ddr: 5f port: 00
 pc:   4 r16:  95 PIN: 0 ddr: 5f port: 00
 pc:   1 r16:  95 PIN: 0 ddr: 5f port: 00
 pc:   2 r16:  96 PIN: 0 ddr: 5f port: 00
 pc:   3 r16:  96 PIN: z ddr: 60 port: 00
 pc:   4 r16:  96 PIN: z ddr: 60 port: 00
 pc:   1 r16:  96 PIN: z ddr: 60 port: 00
 pc:   2 r16:  97 PIN: z ddr: 60 port: 00
 pc:   3 r16:  97 PIN: 0 ddr: 61 port: 00
 pc:   4 r16:  97 PIN: 0 ddr: 61 port: 00
 pc:   1 r16:  97 PIN: 0 ddr: 61 port: 00
 pc:   2 r16:  98 PIN: 0 ddr: 61 port: 00
 pc:   3 r16:  98 PIN: z ddr: 62 port: 00
 pc:   4 r16:  98 PIN: z ddr: 62 port: 00
 pc:   1 r16:  98 PIN: z ddr: 62 port: 00
 pc:   2 r16:  99 PIN: z ddr: 62 port: 00
 pc:   3 r16:  99 PIN: 0 ddr: 63 port: 00
 pc:   4 r16:  99 PIN: 0 ddr: 63 port: 00
 pc:   1 r16:  99 PIN: 0 ddr: 63 port: 00
 pc:   2 r16: 100 PIN: 0 ddr: 63 port: 00
 pc:   3 r16: 100 PIN: z ddr: 64 port: 00
 pc:   4 r16: 100 PIN: z ddr: 64 port: 00
 pc:   5 r16: 100 PIN: z ddr: 64 port: 00
avr3.v:296: $finish called at 3008 (1s)





サンプルコード



module avr(input clk, input rst, inout [7:0] gpio);
	parameter CMD_RJMP = 16'b1100xxxxxxxxxxxx;//rjmp
	parameter CMD_LDI  = 16'b1110xxxxxxxxxxxx;//ldi
	parameter CMD_SUBI = 16'b0101xxxxxxxxxxxx;
	parameter CMD_CPI  = 16'b0011xxxxxxxxxxxx;
	parameter CMD_IN   = 16'b10110xxxxxxxxxxx;//in  0-pin 1-ddr 2-port
	parameter CMD_OUT  = 16'b10111xxxxxxxxxxx;//out 0-pin 1-ddr 2-port
	parameter CMD_MOV  = 16'b001011xxxxxxxxxx;
	parameter CMD_ADD  = 16'b000011xxxxxxxxxx;
	parameter CMD_SUB  = 16'b000110xxxxxxxxxx;
	parameter CMD_MUL  = 16'b100111xxxxxxxxxx;
	parameter CMD_ADC  = 16'b000111xxxxxxxxxx;
	parameter CMD_SBC  = 16'b000010xxxxxxxxxx;
	parameter CMD_AND  = 16'b001000xxxxxxxxxx;
	parameter CMD_EOR  = 16'b001001xxxxxxxxxx;
	parameter CMD_OR   = 16'b001010xxxxxxxxxx;
	parameter CMD_BREQ = 16'b111100xxxxxxx001;//breq
	parameter CMD_BRNE = 16'b111101xxxxxxx001;//brne
	parameter CMD_BRCS = 16'b111100xxxxxxx000;
	parameter CMD_BRCC = 16'b111101xxxxxxx000;
	parameter CMD_INC  = 16'b1001010xxxxx0011;//inc	+1
	parameter CMD_DEC  = 16'b1001010xxxxx1010;//dec	-1
	parameter CMD_LSR  = 16'b1001010xxxxx0110;//lsr 右シフト
	parameter CMD_ANDI = 16'b0111xxxxxxxxxxxx;//andi 定数と&
	parameter CMD_ORI  = 16'b0110xxxxxxxxxxxx;//ori 定数と|
	parameter CMD_SBRC = 16'b1111110xxxxxxxxx;//sbrc Bit sss が 0 なら次をスキップ
	parameter CMD_SBRS = 16'b1111111xxxxxxxxx;//sbrs Bit sss が 1 なら次をスキップ
	parameter CMD_SBI  = 16'b10011010xxxxxxxx;//sbi port, bit 
	parameter CMD_CBI  = 16'b10011000xxxxxxxx;//cbi port, bit 
	reg [7:0] pc;
	reg [7:0] registers[0:31];
	reg [15:0] rom[0:30];
	reg I,
		T,
		H,
		S,
		V,
		N,
		Z = 0,
		C = 0;
	reg [7:0] DDR;
	reg [7:0] PORT;
	wire [15:0] opcode;
	wire [7:0] gpio;
	wire [7:0] PIN;
	wire [4:0] src;
	wire [4:0] dest;
	wire [5:0] io_addr;
	wire [6:0] k;
	wire [7:0] K;
	wire [7:0] Rs = registers[src[4:0]];
	wire [7:0] Rd = registers[dest[4:0]];
	wire [7:0] Rsi = registers[{1'b1, dest[3:0]}];
	wire [7:0] Ri = Rsi - K;
	wire [7:0] R = Rd + (opcode[10] & opcode[12] & ~C | ~opcode[10] & ~opcode[12] & C ? 0 : 1) + (opcode[10] ? Rs : ~Rs);
	wire [6:0] k_rel = opcode[9:3];
	wire signed [7:0] br_offset = {{1{k_rel[6]}}, k_rel};
	wire signed [12:0] rjmp_offset = {{1{opcode[11]}}, opcode[11:0]};
	assign opcode = rom[pc];
	assign src = {opcode[9], opcode[3], opcode[2], opcode[1], opcode[0]};
	assign dest = {opcode[8], opcode[7], opcode[6], opcode[5], opcode[4]};
	assign k = {opcode[9], opcode[8], opcode[7], opcode[6], opcode[5], opcode[4], opcode[3]};
	assign K = {opcode[11], opcode[10], opcode[9], opcode[8], opcode[3], opcode[2], opcode[1], opcode[0]};
	assign io_addr = {opcode[10:9], opcode[3:0]};
	genvar i;
	for (i = 0; i < 8; i = i + 1)
	begin
		assign gpio[i] = DDR[i] ? PORT[i] : 1'bz;
	end
	assign PIN = gpio;
	initial
	begin
		$monitor(" pc: %d r16: %d PIN: %d ddr: %h port: %h ", pc, registers[16], PIN[0], DDR, PORT);
	end
	always @(posedge clk)
	begin
		if (rst)
		begin
			pc <= 0;
			DDR <= 8'b0;
			PORT <= 8'b0;
			rom[0] <= 16'hE000; //       avr.ldi(16, 0)
			rom[1] <= 16'h9503; //       avr.inc(16)
			rom[2] <= 16'hB901; //       avr.out(1, 16)
			rom[3] <= 16'h3604; //       avr.cpi(16, 100)
			rom[4] <= 16'hF7E1; //       avr.brne(-3)
			rom[5] <= 16'hC000; // 
		end
		else
		begin
			if (opcode[15:10] == CMD_ADD[15:10])//o	000011rdddddrrrr	add
			begin
				registers[dest[4:0]] <= R;
				Z <= ~| R;
				C <= Rs[7] & ~R[7] | Rd[7] & ~R[7] | Rs[7] & Rd[7];
			end
			if (opcode[15:10] == CMD_ADC[15:10])//o	000111rdddddrrrr	adc
			begin
				registers[dest[4:0]] <= R;
				Z <= ~| R;
				C <= Rs[7] & ~R[7] | Rd[7] & ~R[7] | Rs[7] & Rd[7];
			end
			if (opcode[15:10] == CMD_SUB[15:10])//o	000110rdddddrrrr	sub
			begin
				registers[dest[4:0]] <= R;
				Z <= ~| R;
				C <= Rs[7] & ~Rd[7] | R[7] & ~Rd[7] | Rs[7] & R[7];
			end
			if (opcode[15:10] == CMD_SBC[15:10])//o	000010rdddddrrrr	sbc
			begin
				registers[dest[4:0]] <= R;
				Z <= ~| R;
				C <= Rs[7] & ~Rd[7] | R[7] & ~Rd[7] | Rs[7] & R[7];
			end
			if (opcode[15:10] == CMD_AND[15:10])
			begin
				registers[dest[4:0]] <= registers[dest[4:0]] & registers[src[4:0]];
			end
			if (opcode[15:10] == CMD_EOR[15:10])
			begin
				registers[dest[4:0]] <= registers[dest[4:0]] ^ registers[src[4:0]];
			end
			if (opcode[15:10] == CMD_OR[15:10])
			begin
				registers[dest[4:0]] <= registers[dest[4:0]] | registers[src[4:0]];
			end
			if (opcode[15:10] == CMD_MOV[15:10])
			begin
				registers[dest[4:0]] <= registers[src[4:0]];
			end
			if (opcode[15:10] == CMD_MUL[15:10])
			begin
				registers[0] <= registers[dest[4:0]] * registers[src[4:0]];
			end
			if (opcode[15:11] == CMD_IN[15:11])
			begin
				if (io_addr == 6'd0)
				begin
					registers[dest[4:0]] <= PIN;
				end
				if (io_addr == 6'd1)
				begin
					registers[dest[4:0]] <= DDR;
				end
				if (io_addr == 6'd2)
				begin
					registers[dest[4:0]] <= PORT;
				end
			end
			if (opcode[15:11] == CMD_OUT[15:11])
			begin
				if (io_addr == 6'd1)
				begin
					DDR <= Rd;
				end
				if (io_addr == 6'd2)
				begin
					PORT <= Rd;
				end
			end
			if (opcode[15:8] == CMD_SBI[15:8]) //10011010pppppsss	sbi
			begin
				case (opcode[7:3])
				5'd1:
					DDR[opcode[2:0]] <= 1'b1;
				5'd2:
					PORT[opcode[2:0]] <= 1'b1;
				default: ;
				endcase
			end
			if (opcode[15:8] == CMD_CBI[15:8])//10011000pppppsss	cbi
			begin
				case (opcode[7:3])
				5'd1:
					DDR[opcode[2:0]] <= 1'b0;
				5'd2:
					PORT[opcode[2:0]] <= 1'b0;
				default: ;
				endcase
			end
			if (opcode[15:12] == CMD_LDI[15:12])
			begin
				registers[{1'b1, dest[3:0]}] <= K;
			end
			if (opcode[15:12] == CMD_ANDI[15:12])
			begin
				registers[{1'b1, dest[3:0]}] <= registers[{1'b1, dest[3:0]}] & K;
			end
			if (opcode[15:12] == CMD_ORI[15:12])
			begin
				registers[{1'b1, dest[3:0]}] <= registers[{1'b1, dest[3:0]}] | K;
			end
			if (opcode[15:12] == CMD_SUBI[15:12])
			begin
				registers[{1'b1, dest[3:0]}] <= Ri;
				Z <= ~| Ri;
			end
			if (opcode[15:12] == CMD_CPI[15:12])
			begin
				Z <= ~| Ri;
				C <= Rs[7] & ~Rd[7] | Ri[7] & ~Rd[7] | Rs[7] & Ri[7];
			end
			if ({opcode[15:10], opcode[3:0]} == {CMD_INC[15:10], CMD_INC[3:0]})
			begin
				registers[dest[4:0]] <= registers[dest[4:0]] + 1;
			end
			if ({opcode[15:10], opcode[3:0]} == {CMD_DEC[15:10], CMD_DEC[3:0]})
			begin
				registers[dest[4:0]] <= registers[dest[4:0]] - 1;
				Z <= ~| Rd;
			end
			if ({opcode[15:10], opcode[3:0]} == {CMD_LSR[15:10], CMD_LSR[3:0]})
			begin
				registers[dest[4:0]] <= registers[dest[4:0]] >> 1;
			end
			if (opcode[15:9] == CMD_SBRC[15:9])//1111110xxxxxxxxx;//sbrc
			begin
				if (Rd[opcode[3:0]] == 1'd0)
				begin
					pc <= pc + 2'd2;
				end
				else
				begin
					pc <= pc + 1'd1;
				end
			end
			if (opcode[15:9] == CMD_SBRS[15:9])//1111111xxxxxxxxx;//sbrs
			begin
				if (Rd[opcode[3:0]] == 1'd1)
				begin
					pc <= pc + 2'd2;
				end
				else
				begin
					pc <= pc + 1'd1;
				end
			end
			//if ({opcode[15:11], opcode[2:0]} == {CMD_BREQ[15:11], CMD_BREQ[2:0]})//o	111100xxxxxxx001	breq
			if ({opcode[15:11], opcode[2:0]} == {CMD_BRNE[15:11], CMD_BRNE[2:0]})//o	111101xxxxxxx001	brne
			begin
				if (Z ^ opcode[10])
				begin
					pc <= pc + br_offset + 1;
				end
				else
				begin
					pc <= pc + 1'd1;
				end
			end
			else
			begin
				if (opcode[15:12] == CMD_RJMP[15:12])//o	1100xxxxxxxxxxxx	rjmp
				begin
					pc <= pc + rjmp_offset;
				end
				else
				begin
					pc <= pc + 1'd1;
				end
			end
		end
	end
endmodule

module test;
	reg clk,
		rst;
	wire [7:0] outport;
	avr u(.clk(clk), .rst(rst), .gpio(outport));
	initial
	begin
		$dumpfile("test.vcd");
		$dumpvars(0, test);
		//$monitor(" %h", outport);
		clk = 0;
		rst = 0;
	#4
		rst = 1;
	#4
		rst = 0;
	#3000
		$finish;
	end
	always
		#1
			clk = ~clk;
endmodule




以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?