リアルタイムクロックモジュール RTC-8564NB (秋月のん) のバッテリーバックアップ

リアルタイムクロックモジュール RTC-8564 はバッテリーバックアップが可能なので、マイコンボードに電池を接続してバックアップ可能にします。
RTC-8564の電源端子にマイコンからの電源供給がされて動くわけですが、マイコンの電源がOFFになったら電池に切り替えてバックアップします。この方法で一番簡単なのはダイオード一本で片付ける方法です。しかしながらダイオードの電圧降下(0.6~0.7V程度)があるためRTC-8564の電源電圧は5-0.7=4.3Vになります。一方マイコンと接続しているI2Cバスの信号ラインは5Vかかります。

問題は電源電圧より信号ラインの方が電圧が高いということです。RTC-8564のデータシートによりますと入力電圧は GND-0.5V ~ VDD+0.5V までとなっています。このことから普通のダイオードではわずかですが定格を越えます。電圧降下の低いダイオードを使用すればよいのですが買いに行くのも面倒なので、今回は下記のようにトランジスタのスイッチをバックアップ回路として作成しました。

Spartan-3A DCM を veritak で動作確認してみた。

Spartan-3A スターターキットの PDF の資料やアプリケーションノートなど見てますが
基本クロックは、50MHzの水晶が原発ですが、それ以外の
クロックが欲しいときは、DCM(Digital Clock Manager)を使用するようです。
ということで、DCM を使用する準備として veritak で確認してみました。

  • CORE Generator で DCM のコードを GUI で生成
  • テスト用の Verilog コードを書いてみる
  • veritak(シェアウェア版)でシミューレーションしてみる

CORE Generator を起動して DCM のコアを作成してみました。
今回は、 FPGA Features and Design -> Clocking -> Spartan-3E, Spartan-3A -> Single DCM_SP
とファンクションを選択して、DCM作成です。
今回は、CLK0以外に、90度づつ位相ずれた CLK90, CLK180, CLK270 なども
出力するようにしてみました。

また、PDF 文書にあった推奨リセット回路(シフトレジスタでワンショットパルスを出す)も追加しました。

生成された DCM モジュール

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 1995-2008 Xilinx, Inc.  All rights reserved.
////////////////////////////////////////////////////////////////////////////////
//   ____  ____
//  /   /\/   /
// /___/  \  /    Vendor: Xilinx
// \   \   \/     Version : 10.1.03
//  \   \         Application : xaw2verilog
//  /   /         Filename : dcm_test01.v
// /___/   /\     Timestamp : 04/21/2009 13:34:03
// \   \  /  \
//  \___\/\___\
//
//Command: xaw2verilog -st C:\mkusunoki\\dcm_test01.xaw C:\mkusunoki\\dcm_test01
//Design Name: dcm_test01
//Device: xc3s700a-4fg484
//
// Module dcm_test01
// Generated by Xilinx Architecture Wizard
// Written for synthesis tool: XST
`timescale 1ns / 1ps
 
module dcm_test01(CLKFB_IN,
                  CLKIN_IN,
                  RST_IN,
                  CLKIN_IBUFG_OUT,
                  CLK0_OUT,
                  CLK90_OUT,
                  CLK180_OUT,
                  CLK270_OUT,
                  LOCKED_OUT);
 
    input CLKFB_IN;
    input CLKIN_IN;
    input RST_IN;
   output CLKIN_IBUFG_OUT;
   output CLK0_OUT;
   output CLK90_OUT;
   output CLK180_OUT;
   output CLK270_OUT;
   output LOCKED_OUT;
    
   wire CLKFB_IBUFG;
   wire CLKIN_IBUFG;
   wire CLK0_BUF;
   wire CLK90_BUF;
   wire CLK180_BUF;
   wire CLK270_BUF;
   wire GND_BIT;
    
   assign GND_BIT = 0;
   assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;
   IBUFG CLKFB_IBUFG_INST (.I(CLKFB_IN),
                           .O(CLKFB_IBUFG));
   IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),
                           .O(CLKIN_IBUFG));
   BUFG CLK0_BUFG_INST (.I(CLK0_BUF),
                        .O(CLK0_OUT));
   BUFG CLK90_BUFG_INST (.I(CLK90_BUF),
                         .O(CLK90_OUT));
   BUFG CLK180_BUFG_INST (.I(CLK180_BUF),
                          .O(CLK180_OUT));
   BUFG CLK270_BUFG_INST (.I(CLK270_BUF),
                          .O(CLK270_OUT));
   DCM_SP DCM_SP_INST (.CLKFB(CLKFB_IBUFG),
                       .CLKIN(CLKIN_IBUFG),
                       .DSSEN(GND_BIT),
                       .PSCLK(GND_BIT),
                       .PSEN(GND_BIT),
                       .PSINCDEC(GND_BIT),
                       .RST(RST_IN),
                       .CLKDV(),
                       .CLKFX(),
                       .CLKFX180(),
                       .CLK0(CLK0_BUF),
                       .CLK2X(),
                       .CLK2X180(),
                       .CLK90(CLK90_BUF),
                       .CLK180(CLK180_BUF),
                       .CLK270(CLK270_BUF),
                       .LOCKED(LOCKED_OUT),
                       .PSDONE(),
                       .STATUS());
   defparam DCM_SP_INST.CLK_FEEDBACK = "1X";
   defparam DCM_SP_INST.CLKDV_DIVIDE = 2.0;
   defparam DCM_SP_INST.CLKFX_DIVIDE = 1;
   defparam DCM_SP_INST.CLKFX_MULTIPLY = 4;
   defparam DCM_SP_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
   defparam DCM_SP_INST.CLKIN_PERIOD = 20.000;
   defparam DCM_SP_INST.CLKOUT_PHASE_SHIFT = "NONE";
   defparam DCM_SP_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
   defparam DCM_SP_INST.DFS_FREQUENCY_MODE = "LOW";
   defparam DCM_SP_INST.DLL_FREQUENCY_MODE = "LOW";
   defparam DCM_SP_INST.DUTY_CYCLE_CORRECTION = "TRUE";
   defparam DCM_SP_INST.FACTORY_JF = 16'hC080;
   defparam DCM_SP_INST.PHASE_SHIFT = 0;
   defparam DCM_SP_INST.STARTUP_WAIT = "FALSE";
endmodule

作成してみたテストベンチ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
`default_nettype none
`timescale 1ns / 1ns
 
module dcm_test01_testbench;
 
reg CLK50MHz;
reg RST_IN;
wire CLKIN_IBUFG_OUT;
wire CLK0_OUT;
wire CLK90_OUT;
wire CLK180_OUT;
wire CLK270_OUT;
wire LOCKED_OUT;
 
dcm_test01 dcm01 (
    .CLKFB_IN(CLK0_OUT),
    .CLKIN_IN(CLK50MHz),
    .RST_IN(Q),
    .CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT),
    .CLK0_OUT(CLK0_OUT),
    .CLK90_OUT(CLK90_OUT),
    .CLK180_OUT(CLK180_OUT),
    .CLK270_OUT(CLK270_OUT),
    .LOCKED_OUT(LOCKED_OUT)
    );
 
wire Q;
//defparam U1.INIT = 16'h000F;
SRL16 #(16'h000F) U1 (
    .Q(Q),
    .A0(1),
    .A1(1),
    .A2(1),
    .A3(1),
    .CLK(CLK50MHz),
    .D(0)
);
 
// クロック
initial
begin
    CLK50MHz = 0;
    forever #10 CLK50MHz = ~CLK50MHz;
end
 
initial
begin
    #1600
    $finish;
end
 
always
    $monitor($time, "clkin=%b reset=%b clk0=%b clk90=%b clk180=%b clk270=%b locked=%b\n", CLK50MHz, RST_IN,CLK0_OUT,CLK90_OUT,CLK180_OUT,CLK270_OUT,LOCKED_OUT);
endmodule

で、veritakでシミューレーションしてみましたところ、各種クロックと、リセットに反応すること、と
クロックのロック状態も表示されたので実際にインプリする場合もちょっと安心ということで

にしても、ついでで DDR2 SDRAM も MIG で作成してみて veritak してみましたところ
これも動きそうな感じではあります。が、UG086 に書いてる使いかたが
まだよく理解出来ないのと、DDR/DDR2 な SDRAM の基本もわかってないので
これから余裕が出来れば、使ってみたいですね。
とりあえず、picoblaze を先に使用したいです。

PicoBlaze でキャラクタ液晶表示

今回は、Spartan-3A の PicoBlaze でキャラクタ液晶の表示を行ないました。
と言っても今回は、fpga ポートの入出力動作がうまくいかなかったので
BUSYチェックはしないで、時間待ちして表示させてます。

何のヒネリも無いので、そのままソース掲載でし。マイコンのアセンブラとVerilogです。

PicoBlaze のソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
CONSTANT        LCD_DATA,       01      ;
CONSTANT        LCD_CTRL_E,     02      ;
CONSTANT        LCD_CTRL_RS,    03      ; 0=Command, 1=Data
CONSTANT        LCD_CTRL_RW,    04      ; 0=write, 1=read
CONSTANT        LED,            05      ; LED port
 
                ADDRESS 000
INIT00:
                ENABLE  INTERRUPT
                CALL    LCD_INIT
 
MAIN00:         LOAD    s4, 50          ; P
                CALL    LCD_PUTCH
                LOAD    s4, 69          ; i
                CALL    LCD_PUTCH
                LOAD    s4, 63          ; c
                CALL    LCD_PUTCH
                LOAD    s4, 6F          ; o
                CALL    LCD_PUTCH
                LOAD    s4, 42          ; B
                CALL    LCD_PUTCH
                LOAD    s4, 6C          ; l
                CALL    LCD_PUTCH
                LOAD    s4, 61          ; a
                CALL    LCD_PUTCH
                LOAD    s4, 7A          ; z
                CALL    LCD_PUTCH
                LOAD    s4, 65          ; e
                CALL    LCD_PUTCH
                LOAD    s4, 21          ; !
                CALL    LCD_PUTCH
                LOAD    s4, 00
MAIN90:
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                CALL    DELAY20ms
                OUTPUT  s4, LED        ; LED チカチカ
                ADD     s4, 01
                JUMP    MAIN90
 
 
LCD_INIT:       CALL    DELAY20ms
                CALL    DELAY20ms
                LOAD    s4, 30
                CALL    LCD_PUTCMD
                CALL    DELAY20ms
                LOAD    s4, 30
                CALL    LCD_PUTCMD
                CALL    DELAY1ms
                LOAD    s4, 30
                CALL    LCD_PUTCMD
                CALL    DELAY1ms
                LOAD    s4, 38
                CALL    LCD_PUTCMD
                CALL    DELAY100us
                LOAD    s4, 0F
                CALL    LCD_PUTCMD
                CALL    DELAY100us
                LOAD    s4, 06
                CALL    LCD_PUTCMD
                CALL    DELAY100us
                LOAD    s4, 01
                CALL    LCD_PUTCMD
                CALL    DELAY100us
                RETURN
 
LCD_PUTCH:      CALL    LCD_RS_1
                CALL    LCD_RW_0
                OUTPUT  s4, LCD_DATA
                CALL    LCD_E
                RETURN
 
LCD_PUTCMD:     CALL    LCD_RS_0
                CALL    LCD_RW_0
                OUTPUT  s4, LCD_DATA
                CALL    LCD_E
                RETURN
 
LCD_RS_0:       LOAD    s0, 00
                JUMP    LCD_RS
LCD_RS_1:       LOAD    s0, 01
LCD_RS:         OUTPUT  s0, LCD_CTRL_RS
                RETURN
 
LCD_RW_0:       LOAD    s0, 00
                JUMP    LCD_RW
LCD_RW_1:       LOAD    s0, 01
LCD_RW:         OUTPUT  s0, LCD_CTRL_RW
                RETURN
 
LCD_E:          LOAD    s0, 01
                OUTPUT  s0, LCD_CTRL_E
                CALL    DELAY1us
                LOAD    s0, 00
                OUTPUT  s0, LCD_CTRL_E
                CALL    DELAY1ms
                RETURN
 
; ------------------------------------------------------------------------------
; -- 時間待ち
; -- 50Mhz = 20ns
; -- 1命令 2クロック = 40ns
; -- s0,s1,s2,s3
; --
; ------------------------------------------------------------------------------
DELAY1us:       LOAD    s0, 16
DELAY1us00:     SUB     s0, 01
                JUMP    NZ, DELAY1us00
                RETURN
 
DELAY100us:     LOAD    s1, 64
DELAY100us00:   CALL    DELAY1us
                SUB     s1, 01
                JUMP    NZ, DELAY100us00
                RETURN
 
DELAY1ms:       LOAD     s2, 0A
DELAY1ms00:     CALL    DELAY100us
                SUB     s2, 01
                JUMP    NZ, DELAY1ms00
                RETURN
 
DELAY20ms:      LOAD    s3, 14
DELAY20ms00:    CALL    DELAY1ms
                SUB     s3, 01
                JUMP    NZ, DELAY20ms00
                RETURN
 
; ------------------------------------------------------------------------------
; -- 割り込みルーチン
; --
; ------------------------------------------------------------------------------
INTERRUPT:
;               &lt;<コード>>
                RETURNI ENABLE
 
; ------------------------------------------------------------------------------
; -- 割り込みベクタ
; --
; ------------------------------------------------------------------------------
                ADDRESS 3FF
                JUMP    INTERRUPT

verilog のソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    10:28:22 04/24/2009
// Design Name:
// Module Name:    picolcd
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
`default_nettype none
 
module picolcd (
    input   wire CLK_50MHZ,
    output  wire LCD_E,
    output  wire LCD_RS,
    output  wire LCD_RW,
    output  wire [7:0] LCD_DB,
    output  wire [7:0] LED
);
 
wire RESET;     // DCMのLOCKED_OUTをロジカルなリセットにするのがいい
wire DCM01_CLKIN_IBUF_OUT;
wire DCM01_CLK0_OUT;
wire DCM01_LOCKED_OUT;
wire [9:0]  CPU00_ADDRESS;
wire [17:0] CPU00_INSTRUCTION;
wire [7:0]  CPU00_PORT_ID;
wire [7:0]  CPU00_IN_PORT;
wire [7:0]  CPU00_OUT_PORT;
wire CPU00_READ_STROBE;
wire CPU00_WRITE_STROBE;
wire CPU00_INTERRUPT;
wire CPU00_INTERRUPT_ACK;
 
generate_reset_pulse generate_reset_pulse (
    .clock(DCM01_CLKIN_IBUF_OUT),
    .reset_pulse(RESET)
);
 
dcm01 DCM01 (
    .CLKIN_IN(CLK_50MHZ),
    .RST_IN(RESET),
    .CLKIN_IBUFG_OUT(DCM01_CLKIN_IBUF_OUT),
    .CLK0_OUT(DCM01_CLK0_OUT),
    .LOCKED_OUT(DCM01_LOCKED_OUT)
);
 
kcpsm3 CPU00 (
    .address(CPU00_ADDRESS),
    .instruction(CPU00_INSTRUCTION),
    .port_id(CPU00_PORT_ID),
    .write_strobe(CPU00_WRITE_STROBE),
    .out_port(CPU00_OUT_PORT),
    .read_strobe(CPU00_READ_STROBE),
    .in_port(CPU00_IN_PORT),
    .interrupt(CPU00_INTERRUPT),
    .interrupt_ack(CPU00_INTERRUPT_ACK),
    .reset(RESET),
    .clk(DCM01_CLK0_OUT)
);
 
lcd CPU00ROM (
    .address(CPU00_ADDRESS),
    .instruction(CPU00_INSTRUCTION),
    .clk(DCM01_CLK0_OUT)
);
 
lcdport_out lcd_port_out (
    .we(CPU00_WRITE_STROBE),
    .port(CPU00_PORT_ID),
    .data(CPU00_OUT_PORT),
    .lcd_data(LCD_DB),
    .lcd_e(LCD_E),
    .lcd_rs(LCD_RS),
    .lcd_rw(LCD_RW),
    .led(LED)
);
 
endmodule
 
////////////////////////////////////////////////////////////////////////////////
//  Generate 1shot pulse
////////////////////////////////////////////////////////////////////////////////
module generate_reset_pulse (
    input wire clock,
    output wire reset_pulse
);
 
SRL16 #(.INIT(16'h00FF)) SRL16_inst (
    .Q(reset_pulse),
    .A0(1'b1),
    .A1(1'b1),
    .A2(1'b1),
    .A3(1'b1),
    .CLK(clock),
    .D(1'b0)
);
 
endmodule
 
////////////////////////////////////////////////////////////////////////////////
//  CPU00(PicoBlaze)  ADDRESS DECODER
////////////////////////////////////////////////////////////////////////////////
module lcdport_out (
    input wire we,
    input wire [7:0] port,
    input wire [7:0] data,
    output reg [7:0] lcd_data,
    output reg lcd_e,
    output reg lcd_rs,
    output reg lcd_rw,
    output reg [7:0] led
);
always @(posedge we)
begin
    case(port)
        8'h01:  lcd_data = data;
        8'h02:  lcd_e  = data[0];
        8'h03:  lcd_rs = data[0];
        8'h04:  lcd_rw = data[0];
        8'h05:  led = data;
    endcase
end
 
endmodule

PicoBlaze で LEDピコピコ

PicoBlaze で LEDピコピコです。

PicoBlaze については、 http://www.xilinx.com/picoblaze に関連する情報と
PicoBlaze のアセンブラなどのダウンロードがあります。

  • ロイヤリティフリーで使用可
  • 8ビットマイコン
  • 全ての命令は2クロックで実行される
  • 16個のレジスタ / SCRACH PAD RAM(64Byte) / ROM(1K x 18bit)

マイコンは、アセンブラのソース(.psm)を KCPSM3.EXE でアセンブルします。
エラーが無ければHDLのソース VHDL と Verilog のソースが出力されるので
これをトップモジュールに組み込めば動くという寸法です。

xilinx からダウンロード出来る KCPSM3.ZIP の中には資料含めて一式入ってるので
大丈夫でしょう。また ug129 のユーザーガイドには日本語版PDF(日付古いですが…)
があるので、これもダウンロードしておけばいいと思います。

アセンブラのソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
        ADDRESS 000
 
INIT00:
        ENABLE  INTERRUPT
 
MAIN00:     LOAD    s5, 00
 
MAIN90:
        OUTPUT  s5, 01    ; ポート1に出力する
        ADD s5, 01
        CALL    DELAY1s
        JUMP    MAIN90
 
 
; ------------------------------------------------------------------------------
; -- 時間待ち
; -- 50Mhz = 20ns
; -- 1命令 2クロック = 40ns
; -- s0,s1,s2,s3
; ------------------------------------------------------------------------------
DELAY1us:   LOAD    s0, 17
DELAY1us00: SUB s0, 01
        JUMP    NZ, DELAY1us00
        RETURN
 
DELAY100us: LOAD    s1, 64
DELAY100us00:   CALL    DELAY1us
        SUB s1, 01
        JUMP    NZ, DELAY100us00
        RETURN
 
DELAY1ms:   LOAD    s2, 0A
DELAY1ms00: CALL    DELAY100us
        SUB s2, 01
        JUMP    NZ, DELAY1ms00
        RETURN
 
DELAY20ms:  LOAD    s3, 14
DELAY20ms00:    CALL    DELAY1ms
        SUB s3, 01
        JUMP    NZ, DELAY20ms00
        RETURN
 
DELAY1s:    LOAD    s4, 32
DELAY1s00:  CALL    DELAY20ms
        SUB s4, 01
        JUMP    NZ, DELAY1s00
        RETURN
 
; ------------------------------------------------------------------------------
; -- 割り込みルーチン
; --
; ------------------------------------------------------------------------------
INTERRUPT:
;       &lt;<コード>>
        RETURNI ENABLE
 
; ------------------------------------------------------------------------------
; -- 割り込みベクタ
; --
; ------------------------------------------------------------------------------
        ADDRESS 3FF
        JUMP    INTERRUPT
</コード></code></pre>
<p>
Verilog のソース
</p>
<pre><code>
module main (
    input wire CLK_50MHZ,
    output wire [7:0] LED );
 
wire RESET;
wire CLKIN_IBUFG_OUT;
wire CLK0_OUT;
wire LOCKED_OUT;
wire    [9:0]   address ;
wire    [17:0]  instruction ;
wire    [7:0]   port_id ;
wire        write_strobe, read_strobe, interrupt_ack ;
wire    [7:0]   out_port ;
wire    [7:0]   in_port ;
wire        interrupt, reset, clk ;
 
user_reset reset00 (
    .CLOCK(),
    .RESET()
);
 
dcmsp00 dcmsp00 (
    .CLKIN_IN(CLK_50MHZ),
    .RST_IN(RESET),
    .CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT),
    .CLK0_OUT(CLK0_OUT),
    .LOCKED_OUT(LOCKED_OUT)
);
 
kcpsm3 CPU00 (
    .address(address),
    .instruction(instruction),
    .port_id(port_id),
    .write_strobe(write_strobe),
    .out_port(out_port),
    .read_strobe(read_strobe),
    .in_port(in_port),
    .interrupt(interrupt),
    .interrupt_ack(interrupt_ack),
    .reset(RESET),
    .clk(CLK0_OUT)
);
 
led CPU00LED (
    .address(address),
    .instruction(instruction),
    .clk(CLK0_OUT)
);
 
outp_sel outp_sel (
    .port_id(port_id),
    .write_strobe(write_strobe),
    .indata(out_port),
    .otdata(LED)
);
 
endmodule
 
//
// Generate RESET PULSE
//
module user_reset (
    input wire CLOCK,
    output wire RESET );
 
    
   SRL16 #(.INIT(16'h00FF)) // Initial Value of Shift Register
     SRL16_inst (
      .Q(RESET),            // SRL data output
      .A0(1'b1),            // Select[0] input
      .A1(1'b1),            // Select[1] input
      .A2(1'b1),            // Select[2] input
      .A3(1'b1),            // Select[3] input
      .CLK(CLOCK),      // Clock input
      .D(1'b0)              // SRL data input
   );
 
   // End of SRL16_inst instantiation
endmodule
 
module outp_sel (
    input wire port_id,
    input wire write_strobe,
    input wire [7:0] indata,
    output reg [7:0] otdata
);
 
    always @(posedge write_strobe)
        begin
            if(port_id == 1)
                otdata = indata;
        end    
 
endmodule

hp 200LX をハードリセット

ずっと放置したままの hp 200LXの電池交換をしましたが、放置していたのでバックアップ電池も乾電池もなくなっていたので初期化されている状態です。
私のはPCカードスロットは 48MB のコンパクトフラッシュ(Aドライブ)を入れたままの使い方なのでJKITもそのままAドライブに入れたままです。CTRL+ALT+DEL で再起動すると、C:\LXEMM.DAT が無いと言われます。う~ん 完璧に忘れてます。

ということで、LXEMM.DAT の再作成手順をググる。

シスマネ Applicationl->Terminate All でシスマネを終了してDOSプロンプトを出す。
そして、A:\JKIT\EMSINST 30 を実行して LXEMM.DAT を作成する。30はページ数のことで日本語FEPのWX2で10ページで残りはmifesとかページャとかのアプリで使う分で確保です。

あとハードリセット方法もメモっておく
CTRL+SHIFT+ON

というか、2008年2月現在でも日本hpのWEBサイトからマニュアルをスキャンしたPDFファイルがダウンロード出来るのでLX使いの人はダウンロードしときましょう。

20110306 ヴァイオリンレッスン63回目

会社の当番というのがあるので、車にスーツとカバン積んで教室へ行きました。

  • 楽器のチューニング
  • 篠崎バイオリン教本2
  • 3, 4番 ハ長調音階
  • 6, 7, 8, 9番 右手弓の練習
  • 8番 アマリリス
  • 9番 イ調短音階
  • 11番 ロシア舞曲

先週の今週で、あまり練習は出来ていません。上の右手弓の練習で、
移弦の際に余計な音は出さない。弓がちゃんと隣りの弦に移動してから
発音させましょう。あと、今日は最初から最後までネックのギター握りの指摘。
ついついやっちゃいます。

「アマリリス」は前回に続いて3回目のレッスンです。
今回も前回と同様とにかく最後まで弾いてみて、そこから先生が気になったところを修正していきます。

  • ピチカートで弦をはじく人差し指の位置。指板ENDから3センチ程度。ただ表現によって駒寄りとか場所は変化します。
  • ピチカートの方法は教本みたいに親指を指板に添えてもいいし、弓握ったまま人差し指だけでピチカートしてもいいです。

あとは、ちゃんと弦を押えきれてないところで音が弱いと注意されました。
ビブラートは、かけられるんだったら積極的にかけるようにしましょう。(音程確認のときは別)
ただし、ギターのように早めというよりかは、ゆっくりめからいきましょうということでした。
まぁ、まだちょびっとしかビブラートは出来ません。
先生のお手本も最近は普通に弾くモードでのお手本になってきてます。

「ロシア舞曲」は前回から2回目。いくつかアドバイスもらいながら3回くらい弾いてみます。
弾き方は舞曲なんでだらだら弾くんじゃなくて、もうちょっと切れのいい感じ。

教本17番「メヌエット」もう時間切れなのですが、最初の8小節だけ弾いてみました。
これはバッハのやつなので、音程含めてキッチリやりましょうとのこと。えぇ~

次回のレッスンは3月13日の予定です。

AVR Studio 5.0 Beta をインストールしましたが AVRISP MKII のファーム更新に失敗した

ATMEL のサイト久しぶりに見に行ったら、AVR Studio 5.0 Beta があったので Windows XP に導入してみました。

そうしましたところ、私のところの環境では

  • Microsoft .NET Framework 4.0 Full Profile
  • Microsoft Visual Studio Isolated Shell 10.0
  • AVR Jungo USB Driver

が必要と言わました。そのまま [Install] ボタンで全部インストールしてくれました。で、AVR Studio 5.0 Beta を起動しますと、 4.18 とは違って今時のアプリケーションのようなメインウィンドウが表示されました。

ちなみに、このバージョンはToolchain も含まれているので gcc も一緒にインストールされています。8ビットAVRマイコン用は gcc-4.5.1、 32ビットAVRマイコンは gcc-4.4.3 のようです。

んで、AVR ISP MK II のファームアップデートをやってみます。

プログラマー側は、1.d で、AVR Studio5.0 Beta には 1.e が提供されているようですね。これはアップデートしてみようとボタンをポチりましたが、

トラップを拾ったみたいでVisual Studio のデバックする? と聞いてきました。何回かやってみましたがファームの更新は出来ませんでした。

壊れたままではいやなので、AVRISP MKII を 手動でファーム更新モードにして、 AVR Studio 4.18 でファームの上書きしてOKにしました。

やっぱベータ版ですね。

こわいので、JTAGICE のファームアップデートのテストは正式版リリース後ですね。

Xilinx WebPACK 13.1 をインストールした。

Xilinx の WebPACK 13.1 を vmware の仮想マシンにインストール。とりあえず C:\Xilinx は10GB くらい使用。しかし仮想マシンのディスク20GBで設定してて残り4GBちょい、アップデートきたら足りん。仮想ディスクの増やし方を調べとこ

あとは Veritak も導入して、今日は終り。以前作成したverilogソースが通るかはまた後で。今日はもう眠い。

 

アクセスカウンタ Counterize II を導入してみた。

Counterize II は結構前からあるカウンター・アクセス解析に使用出来るもののようで数年前からリリースされているようです。
ということで、私も入れてみました

導入そのものは簡単でダッシュボードから左サイドメニューのオウラグインのところから、Counterize II を検索して、表示されたやつを
インストールするボタンを押して自動でインストール。後はプラグイン編集のところに readme があったので見てみた。
んで、テーマ編集で、.php ファイルにカウンター値を表示するように記述を追加しました。

sidebar.php の最後のほうに

1
2
3
4
Today:&lt;?php echo  counterize_gethitstoday(); ??&gt; hits and
&lt;?php  echo  counterize_getuniquehitstoday(); ??&gt; IPs&lt;br /?&gt;
Total:&lt;?php echo  counterize_getamount(); ??&gt; hits and
&lt;?php  echo  counterize_getuniqueamount(); ?&gt; IPs

を入れてみたら、カウンターが表示されました。問題は理解せずに使用しているということです…