特殊工作室 XSP-019

2004年9月11日 作成
2007年10月7日 最終更新

ヒューマンデータXSP-019(の、おそらく初期バージョン)が、不思議な経緯で手元にあります(4月の作業日誌)。このXSP-019が発売されるようなので、大っぴらに遊んでみましょう(というほどの内容ではないのですが…)。


2004年9月11日

手元にあるものは下図のようにACアダプタを接続するタイプですが、XSP-019のページを見ると付属品がUSB電源ケーブルになっているので、電源周りが変更される模様です。あとは、あまり変わらないように思えます(が、詳細は不明です)。

この製品をぱっと見てわかる特徴として、16セグメントLEDが実装されている点があります。が、私の凝り固まった発想ではなかなかこれを生かせず、上図のように(見づらいですが)32進カウンタの表示器にしてみたり、「正」の字で6進カウンタの表示器をつくった程度です。私としては、7セグメントLEDにして、残ったピンを外部に引き出せるようになっていた方が、実験の可能性が広がっていいなあ。

雑感

この学習用ボードにはXCR3064XLという64FF, 1500ゲート相当のCPLDが使われています。趣味の電子工作に使うにはちょうどよさそうに思いますが、はたしてどの程度の回路を実現できるのかを直感的に把握できるようになる必要がありますね(私が)。それを探る旅(?)になるでしょうか。


2006年12月30日

Verilog HDLの勉強でも始めようかと、久々に引っ張り出しました。[2]を参考に作ったVerilogのソースコードはこんなの。モジュールの引数をANSI Cのように書けると聞いたように思うので、これでは不満なのですが、それはまた追々ということで。

`timescale 1ns / 1ps

module testA(in_data, out_data);
        input   in_data;
        output  out_data;

        assign out_data = in_data;

endmodule

これを、[3]を参考にしながらXilinxのISE WebPack 8.2でコンパイルして書き込むと、スイッチSW2を押すとLED2が点灯することを確認できました。ISEの使い方が難しいですね。


2007年5月27日

5ヶ月ぶりに遊んでみようとしましたが、前回「ISEの使い方が難しいですね」と書いたところで躓いてしまい、先に進めません。この先も同様のことが起こるような気がするので、やむなくISEの使い方を調べて書いておくことにしました。なお、ここで使っているのは、ISE WebPack 8.2.03iです。9.1ではありません。

手順としては、まず、メニューの[File - New Project]で、プロジェクト名を適当に指定して

次の画面ではXSP-019のデバイスを指定して

Create New Sourceでは、新しいソースの作成を指定して

ソースの種類はverilog module、名前は適当に指定して

モジュールの定義では、前回作成したモジュールにならって指定して(MSBとLSBの指定は本来不要のはず)

確認画面が出て

Create New Dialogはこういうふうに変わって

既存のソースはないので次に進んで、最後にプロジェクトの確認が出て

全体ではこんな画面になります。


テンプレートはできているので、ソースコードを入力して(1行だけ)、保存します。

で、この状態ではSourcesペインに2行しか出てこない(プロジェクトとデバイスの行?)のですが、ProcessesペインのUpdate All Schematic Filesを実行すると、エラーメッセージとともに、なぜかSourcesペインにソースコードが表示されたので、結果オーライです(ちゃんとした手順は別にあると思います)。

表示されたソースコードを選択してProcessペインでImplement Design階層下にあるSynthesize - XSTとTranslateを実行して正常(緑のチェック)実行を確認。

User Constraintsの階層下にあるAssign Package Pinsで、PACEを起動してピンアサインを実行。左側のリストで信号名の左端にある青い四角をドラッグして、接続したいピンでドロップします。

残りの、FitとGenerate Programming Fileを実行。シミュレーションは省略しています。

ここまでが正常に進めば、Generate Programming Fileの下のConfigure Device(iMPACT)を起動。Boundary Scanを自動で行い、testB JEDECファイルを指定して、デバイスの絵のポップアップメニューでProgramを選び、Verifyを選択した状態で進むと書込みが実行されます。成功したら完了です。実機で動作を確認してください。

という長い手順で、よーやく前回と同じレベルに到達しました。やはり、記録はちゃんと残しておくものです。反省を込めて。


2007年10月7日

またしても、5ヶ月ぶりに遊んでみようとしましたが、やはりISEの使い方を完璧に忘れていました。記録を残して良かったです。

ところで、このボードの特徴は16セグメントLEDなので、それを使ってバーサライタもどきを作ろうとしてみました。参考文献[2]を見ながら、てきとーに作ったのがこんなの。Verilogはセミコロンの場所が難しいです。他にも疑問点はありますが、まあ追々。

`timescale 1ns / 1ps

module mainmod(nextsw, rstsw, clk, ledseg, nxtled, rstled);
        input nextsw, rstsw, clk;
        output [16:0] ledseg;
        output nxtled, rstled;

        wire nxt, rst, keyclk, dspclk;
        wire [7:0] charid;
        
//      assign nxtled = nxt;
        assign nxtled = 1;
        assign rstled = rst;
        
        keyclock keyclock(clk, keyclk);
        dispclock dispclock(clk, dspclk);
//      synchro synchro_nxt(nextsw, keyclk, nxt);
        synchro synchro_rst(rstsw,  keyclk, rst);
//      sequencer sequencer(nxt, rst, clk, charid);
        sequencer sequencer(dspclk, rst, clk, charid);
        ledmsg1disp ledmsg1disp(charid, ledseg);

endmodule

module keyclock(clk, keyclk);
        input clk;
        output keyclk;
        
        reg [7:0] count;

        assign keyclk = (count == 0) ? 1 : 0;

        always @(posedge clk) begin
                count <= count + 1;
        end
endmodule

module dispclock(clk, dspclk);
        input clk;
        output dspclk;
        
        reg [16:0] count;
        
        assign dspclk = (count == 0) ? 1 : 0;
        
        always @(posedge clk) begin
                count <= count + 1;
                if (count == 3700) begin
                        count <= 0;
                end
        end
endmodule

module ledmsg1disp(in_data, out_data);
    input [7:0] in_data;
         output [16:0] out_data;

        assign out_data = charid2ledseg(in_data);
        
        function [16:0] charid2ledseg;
                input [7:0] charid;
                begin
                        casex(charid)
                                8'bxx000000: charid2ledseg = 17'b11100110011101110;
                                8'bxx000100: charid2ledseg = 17'b10000001110111011;
                                8'bxx001000: charid2ledseg = 17'b11111000011111111;
                                8'bxx001100: charid2ledseg = 17'b11111111111111111;
                                8'bxx010000: charid2ledseg = 17'b11111111101010101;
                                8'bxx010100: charid2ledseg = 17'b10010001011101110;
                                8'bxx011000: charid2ledseg = 17'b10001110011101110;
                                8'bxx011100: charid2ledseg = 17'b11111111111101110;
                                8'bxx100000: charid2ledseg = 17'b10000000011111111;
                                8'bxx100100: charid2ledseg = 17'b11100111111111111;
                                8'bxx101000: charid2ledseg = 17'b10000111011101110;
                                8'bxx101100: charid2ledseg = 17'b11111111111111111;
                                default:     charid2ledseg = 17'b11111111111111111;
                        endcase
                end
        endfunction

endmodule

module synchro(in_data, clk, out_data);
        input   in_data, clk;
        output  out_data;
        reg     q;

        assign out_data = q;

        always @(negedge clk) begin
                q <= in_data;
        end
endmodule

module sequencer(nxt, rst, clk, out_data);
        input nxt, rst, clk;
        output [7:0] out_data;

        reg [7:0] count;

        assign out_data = count;
        
        always @(negedge nxt or negedge rst) begin
                if (!rst) begin
                        count <= 0;
                end else begin
                        count <= count + 1;
                end
        end
        
endmodule

動作はこんなの。「HDL XSP-019」と表示しています。そう言われれば、そんな感じかも、という程度ですが。写真の赤い光は、電源ランプです。

もうずいぶんになりますが、ようやくshirouさんからのヒントを実現できました。改善した方がよい点もありますが、とりあえず完了です。


参考文献

  1. XILINX CPLD(CoolRunner)学習用ボード組み立てキット 資料, ヒューマンデータ
  2. 木村 真也, 改訂新版 わかるVerilog HDL入門, トランジスタ技術SPECIAL No.95, CQ出版社
  3. 中 幸政, VHDLとCPLDによるロジック設計入門, CQ出版社, 2006

ホーム 特殊工作室