概要
高位合成言語アセンブラを作る。
九九を書いてみる。(4bit乗算器)
コードを投入。
lut 16
lin 8
lout 8
code 11 01
code 12 02
code 13 03
code 14 04
code 15 05
code 16 06
code 17 07
code 18 08
code 19 09
code 21 02
code 22 04
code 23 06
code 24 08
code 25 0a
code 26 0c
code 27 0e
code 28 10
code 29 12
code 31 03
code 32 06
code 33 09
code 34 0c
code 35 0f
code 36 12
code 37 15
code 38 18
code 39 1b
code 41 04
code 42 08
code 43 0c
code 44 10
code 45 14
code 46 18
code 47 1b
code 48 20
code 49 24
code 51 05
code 52 0a
code 53 0f
code 54 14
code 55 19
code 56 1e
code 57 23
code 58 28
code 59 2d
code 61 06
code 62 0c
code 63 12
code 64 18
code 65 1e
code 66 24
code 67 2a
code 68 30
code 69 36
code 71 07
code 72 0e
code 73 15
code 74 1b
code 75 23
code 76 2a
code 77 31
code 78 38
code 79 3f
code 81 08
code 82 10
code 83 18
code 84 20
code 85 28
code 86 30
code 87 38
code 88 40
code 89 48
code 91 09
code 92 12
code 93 1b
code 94 24
code 95 2d
code 96 36
code 97 3f
code 98 48
code 99 51
生成したコード
module lut(input wire [7:0] data, output reg [7:0] code);
always @(data)
begin
case(data)
8'h11:
code = 8'h01;
8'h12:
code = 8'h02;
8'h13:
code = 8'h03;
8'h14:
code = 8'h04;
8'h15:
code = 8'h05;
8'h16:
code = 8'h06;
8'h17:
code = 8'h07;
8'h18:
code = 8'h08;
8'h19:
code = 8'h09;
8'h21:
code = 8'h02;
8'h22:
code = 8'h04;
8'h23:
code = 8'h06;
8'h24:
code = 8'h08;
8'h25:
code = 8'h0a;
8'h26:
code = 8'h0c;
8'h27:
code = 8'h0e;
8'h28:
code = 8'h10;
8'h29:
code = 8'h12;
8'h31:
code = 8'h03;
8'h32:
code = 8'h06;
8'h33:
code = 8'h09;
8'h34:
code = 8'h0c;
8'h35:
code = 8'h0f;
8'h36:
code = 8'h12;
8'h37:
code = 8'h15;
8'h38:
code = 8'h18;
8'h39:
code = 8'h1b;
8'h41:
code = 8'h04;
8'h42:
code = 8'h08;
8'h43:
code = 8'h0c;
8'h44:
code = 8'h10;
8'h45:
code = 8'h14;
8'h46:
code = 8'h18;
8'h47:
code = 8'h1b;
8'h48:
code = 8'h20;
8'h49:
code = 8'h24;
8'h51:
code = 8'h05;
8'h52:
code = 8'h0a;
8'h53:
code = 8'h0f;
8'h54:
code = 8'h14;
8'h55:
code = 8'h19;
8'h56:
code = 8'h1e;
8'h57:
code = 8'h23;
8'h58:
code = 8'h28;
8'h59:
code = 8'h2d;
8'h61:
code = 8'h06;
8'h62:
code = 8'h0c;
8'h63:
code = 8'h12;
8'h64:
code = 8'h18;
8'h65:
code = 8'h1e;
8'h66:
code = 8'h24;
8'h67:
code = 8'h2a;
8'h68:
code = 8'h30;
8'h69:
code = 8'h36;
8'h71:
code = 8'h07;
8'h72:
code = 8'h0e;
8'h73:
code = 8'h15;
8'h74:
code = 8'h1b;
8'h75:
code = 8'h23;
8'h76:
code = 8'h2a;
8'h77:
code = 8'h31;
8'h78:
code = 8'h38;
8'h79:
code = 8'h3f;
8'h81:
code = 8'h08;
8'h82:
code = 8'h10;
8'h83:
code = 8'h18;
8'h84:
code = 8'h20;
8'h85:
code = 8'h28;
8'h86:
code = 8'h30;
8'h87:
code = 8'h38;
8'h88:
code = 8'h40;
8'h89:
code = 8'h48;
8'h91:
code = 8'h09;
8'h92:
code = 8'h12;
8'h93:
code = 8'h1b;
8'h94:
code = 8'h24;
8'h95:
code = 8'h2d;
8'h96:
code = 8'h36;
8'h97:
code = 8'h3f;
8'h98:
code = 8'h48;
8'h99:
code = 8'h51;
endcase
end
endmodule
module testbench;
reg [7:0] data;
wire [7:0] code;
lut u(.data(data), .code(code));
initial
begin
$display("data code");
$monitor("%h %d", data, code);
data = 8'h11; #10;
data = 8'h12; #10;
data = 8'h13; #10;
data = 8'h14; #10;
data = 8'h15; #10;
data = 8'h16; #10;
data = 8'h17; #10;
data = 8'h18; #10;
data = 8'h19; #10;
data = 8'h21; #10;
data = 8'h22; #10;
data = 8'h23; #10;
data = 8'h24; #10;
data = 8'h25; #10;
data = 8'h26; #10;
data = 8'h27; #10;
data = 8'h28; #10;
data = 8'h29; #10;
data = 8'h31; #10;
data = 8'h32; #10;
data = 8'h33; #10;
data = 8'h34; #10;
data = 8'h35; #10;
data = 8'h36; #10;
data = 8'h37; #10;
data = 8'h38; #10;
data = 8'h39; #10;
data = 8'h41; #10;
data = 8'h42; #10;
data = 8'h43; #10;
data = 8'h44; #10;
data = 8'h45; #10;
data = 8'h46; #10;
data = 8'h47; #10;
data = 8'h48; #10;
data = 8'h49; #10;
data = 8'h51; #10;
data = 8'h52; #10;
data = 8'h53; #10;
data = 8'h54; #10;
data = 8'h55; #10;
data = 8'h56; #10;
data = 8'h57; #10;
data = 8'h58; #10;
data = 8'h59; #10;
data = 8'h61; #10;
data = 8'h62; #10;
data = 8'h63; #10;
data = 8'h64; #10;
data = 8'h65; #10;
data = 8'h66; #10;
data = 8'h67; #10;
data = 8'h68; #10;
data = 8'h69; #10;
data = 8'h71; #10;
data = 8'h72; #10;
data = 8'h73; #10;
data = 8'h74; #10;
data = 8'h75; #10;
data = 8'h76; #10;
data = 8'h77; #10;
data = 8'h78; #10;
data = 8'h79; #10;
data = 8'h81; #10;
data = 8'h82; #10;
data = 8'h83; #10;
data = 8'h84; #10;
data = 8'h85; #10;
data = 8'h86; #10;
data = 8'h87; #10;
data = 8'h88; #10;
data = 8'h89; #10;
data = 8'h91; #10;
data = 8'h92; #10;
data = 8'h93; #10;
data = 8'h94; #10;
data = 8'h95; #10;
data = 8'h96; #10;
data = 8'h97; #10;
data = 8'h98; #10;
data = 8'h99; #10;
$finish;
end
endmodule
実行結果
11 1
12 2
13 3
14 4
15 5
16 6
17 7
18 8
19 9
21 2
22 4
23 6
24 8
25 10
26 12
27 14
28 16
29 18
31 3
32 6
33 9
34 12
35 15
36 18
37 21
38 24
39 27
41 4
42 8
43 12
44 16
45 20
46 24
47 27
48 32
49 36
51 5
52 10
53 15
54 20
55 25
56 30
57 35
58 40
59 45
61 6
62 12
63 18
64 24
65 30
66 36
67 42
68 48
69 54
71 7
72 14
73 21
74 27
75 35
76 42
77 49
78 56
79 63
81 8
82 16
83 24
84 32
85 40
86 48
87 56
88 64
89 72
91 9
92 18
93 27
94 36
95 45
96 54
97 63
98 72
99 81
成果物
以上。