2010年11月24日水曜日

RAM Model

//RAM Model

`define RAM_W (256+8-1)

module SDP_RAM (
clock,
data,
rdaddress,
wraddress,
wren,
q);

input clock;
wire clock;
input [7:0] data;
wire [7:0] data;
input [8:0] rdaddress;
wire [8:0] rdaddress;
input [8:0] wraddress;
wire [8:0] wraddress;
input wren;
wire wren;
output [7:0] q;
wire [7:0] q;

reg [7:0] mem[`RAM_W:0];
reg [7:0] sft_1;
reg [7:0] sft_0;

// RAMライト
always
@( posedge clock )
begin :PR_MEM_W
if (wren == 1'b1)
begin
mem[wraddress] <=data[7:0];
end
end

// RAMリード
always
@( posedge clock )
begin :PR_MEM_R
begin
sft_1 <= sft_0;
sft_0 <= mem[rdaddress];
end
end

assign q = sft_1;

endmodule

2010年9月27日月曜日

SMM(Simple MicroBlaze Micro controler) のコンセプト

<概要>
  • MicroBlaze は 70 以上のパラメータが設定可能で、高度なエンベデッド ツールを使用するため、シンプルなマイクロコントローラで十分なアプリケーションの場合はシステム設計が面倒となることもあります。→SMMの出番!
  • HDLに直接インスタンシエート。
  • これは 2 つのハードウェア インプリメンテーション ファイルと 1 つのソフトウェア定義ファイルがあればよい。
  • 11.1 以降のツールには、MicroBlaze のソフトウェア開発向けにスタンドアロンのソフトウェア開発キット (SDK) が付属され、フル機能のエンベデッド開発キット (EDK) がなくても C および C++ アプリケーションの作成とデバッグが行える。
<FPGAデザインフロー>
  • ISE を使用した一般的な FPGA インプリメンテーション フローと同様。任意の階層にHDLでインスタンシエートできる。
  • マイクロコントローラのネットリスト (smm.ngc) とブロック RAM メモリのマップ ファイル (smm.bmm) の 2 つ。

<ソフトウェアアプリケーションフロー>
  • マイクロコントローラ アプリケーションの開発を始めるために必要な情報すべてが 1 つのソフトウェア記述ファイル (smm.xml) に含まれています。
  • アプリケーションの開発は、FPGA デザイン フローと切り離して開始できる。
  • ISE 11.1 以降では、SDK がスタンドアロンのオプションとして提供されている。
  • SDK には、ソフトウェア アプリケーションの開発に必要なツール、ドライバ、ライブラリ、ユーティリティすべてが含まれている。
  • ソフトウェア アプリケーションは、C または C++ で作成したものをマイクロコントローラのブロック RAM に格納できます。
  • デ バ ッ グ オ プションを使用すると、アプリケーションをソース レベルで完全にデバッグでき、メモリ、レジスタ、変数の内容が確認できます。
  • デバッグを容易にするためにアプリケーション内にブレークポイントを設定することも可能。
  • デバッグには、FPGA のコンフィギュレーションと同じケーブルが使用できます。
  • SMMの詳細は、アプリケーション ノート XAPP1141 を参照してください。

2010年9月24日金曜日

XC6SLX16

XILINX Spartan6 XC6SL16
PowerPCのハードコアが入っているらしいが、データシートから読み取れない。そもそもハードコアなの?
    => ハードコアのラインナップは無い!

■その1■
Xcell Journal 69-70 より(page26)
「ザイリンクスは 2000 年以来、ハード (PowerPC®405、PowerPC 440) およびファブリック ベースの(MicroBlaze™) エンベデッドマイクロプロセッサを提供してきました。」

XILINXがハードコア入りのFPGAを供給していることは間違いない。


■その2■
2009年1月29日XILINXの記者発表会の翌日のSenior Director, Product Marketing, Advanced Products GroupのCharles Tralka氏のインタビュー内容

【進化したFPGA - Virtex/Spartan-6にXilinxの考えるFPGAの未来を見る】 
(マイコミジャーナル  2009/04/07)
http://journal.mycom.co.jp/articles/2009/04/07/xilinx_tralka/index.html

  • Q:Virtex-5では「PowerPC 405」と「PowerPC 440」がHard Coreとしてラインナップされていました。ただ昨日の話では、Virtex-6とSpartan-6向けにHard CoreのCPUは計画が無いという事でしたが、本当のところどうなんでしょう?
  • X:1つ言えることは、我々は引き続き将来製品に統合するCPUについての評価を行っているという事だ。なので、将来は何かしらのアナウンスをすることができるかもしれない。
  • Q:ただ将来にそうしたHard Coreを提供する事は可能なわけですよね?
  • X:現在提供しているPowerPCに関しては、今後も引き続きサポートしてゆく。もちろん、それはVirtex-5で、という意味で、Virtex-6ではない。

■その3■
プレスリリース 2009/02/03
http://www.eis-japan.com/wl-news/wlnews.cgi?id=release&no=1015
  • ザイリンクス社とアルテラ社がくしくも同じ日に40nm/45nmプロセスを使用した新製品を発表。
  • 従来のVirtex-5の後継にあたるVirtex-6ファミリと、Spartan-3の後継にあたる、Spartan-6ファミリ。
  • Virtex-6には40nmプロセス(12層配線)を、Spartan-6には45nm(9層配線)の最先端プロセス。
  • ファンダリ・パートナは、台湾のUMC、それに今回から韓国のサムソンが新たに加わり、東芝の名前はない。

  • しかし、Vitex-5で提供されていたPowerPCコア内蔵のプラットフォーム(FXT)は、Virtec-6で提供されない。これは、あまり需要が見込めないと判断されたためであろう。PowerPCのヘビー・ユーザには少し残念な知らせだ。

  • Virtex-6 LXT FPGA - 高性能なロジック、DSP、低消費電力の GTX 6.5 Gbps シリアル トランシーバを必要とするアプリケーション向けに最適化されたプラットフォーム
  • Virtex-6 SXT FPGA - 超高性能 DSP と低消費電力の GTX 6.5 Gbps シリアル トランシーバを必要とするアプリケーション向けに最適化されたプラットフォーム
  • Virtex-6 HXT FPGA- 最高 11.2 Gbps までサポートする 64 GTH による最高速のシリアル接続を必要とする通信用アプリケーションに最適化されたプラットフォーム
  • Spartan-6 LX FPGA : 低コスト性が絶対的に要求されるアプリケーション用に最適化されたプラットフォーム
  • Spartan-6 LXT FPGA : LX プラットフォームを拡張して最大 8 個の 3.125 Gbps GTP トランシーバと PCI Express 対応コアを搭載したプラットフォーム

2010年9月7日火曜日

XILINX Foundation ISE5.1i 簡単操作ガイド

<Simulation>
  • Modelsim Xilinx版を付属
  • VHDL/Verilogのいずれもサポート ミックス言語はサポートしない
  • ISEとは別途インストール

XSTの設定

2010年9月2日木曜日

SIMetrix/SIMPLIS スケール

<使用できるスケール>

<ユニバーサル電圧源>
  • AC電圧
  • DC電圧
  • パルス波
  • 正弦波
  • ランダム雑音波
  • テキスト記述の電圧              の種類がある。

2010年9月1日水曜日

PIC USB Framework

<準備>
  • MicrochipのホームページからUSB Framework を入手
         - MAL:Microchip Application Libraries (インストーラー)をダウンロード
         - v2010-08-04 をダウンロードした
  • インストール
         - Microchip Solution v2010-08-04 が作成され、そこにインストールされた
  • workディレクトリ作成
  • workディレクトリに次のディレクトリをコピー
         - Microchip
         - USB Device -CDC -Basic Demo
  • CDC -Basic Demo -Firmware \ USB Device -CDC -Basic Demo -C18 PICDEM FSUSB.mcp を実行
  • 何も変更せずにビルド -> BUILD SUCCEEDED

<PIC18F2550用に変更>
  • デバイスを変更 Configure>SelectDevice デバイスをPIC18F2550に設定
  • ビルドするとエラーになる HardwareProfile が定義できないので
  • PIC4550用HardwareProfileをコピーして別名定義、それをPI24550用HardwareProfileとし読み込むことにする
  • PIC2550用HardwareProfileはコピーしたものからLEDポートの定義を変更
  • PIC4550用LinkerScriptをコピーして別名定義、それをPI24550用LinkerScriptとし読み込むことにする
  • PIC2550用LinkerScriptはコピーしたものから FILES p18f2550.lib と変更
  • ビルド -> BUILD SUCCEEDED

<プログラム>
  • デバイスにプログラム
  • LEDが点滅する
  • IDEとの接続を切り、USBでPCと接続するとLED点滅している -> プログラム成功

<PCのデバイス認識>
  • USBケーブルでPCに接続
  • デバイスドライバインストールを促すダイヤログをキャンセル
  • デバイスマネージャを開く
  • デバイス認識ができていないデバイスを右クリック指定してドライバ更新を選択
  • ファイルを指定して.. を選択
  • 同プロジェクトのinfを選択し、デバイスドライバのインストール完了

<動作確認>
  • デバイスマネージャでCOM5に認識を確認
  • TeraTermを開く
  • COM5,8,n,1 の設定
  • 文字を送信すると+1のコードが返信される

2010年8月27日金曜日

PIC PICKit3

<Microchip リンク>

PICkit3ポスター
PICkit3ユーザーズガイド
PICkit3 Debug Express C Lesson

<概要>
  • PICのプログラマー/デバッガでありMPLab8.2以降で操作できる
  • プログラマコネクタの端子機能

  • LED表示



  • サポート内容


<操作手順>

  • ターゲットとの接続

  • プログラムとデバッグに必要な3ピン(Vpp/PGC/PGD)を接続しVDD/GNDを接続たら完了

  • PICkitからの給電と、外部電源の2種の電源供給に対応

  • 外部供給を推奨

  • PICkitからの給電は30mAまで



  • PGC/PGDはPULL-UPしないこと:PICkit内に4.7kΩのPull-Downが入っている

  • PGC/PGDにコンデンサをつけないこと:プログラム/デバッグの高速動作を阻害する

  • Vppにコンデンサをつけないこと:Vppの高速動作を阻害する、Pull-Upだけで十分

  • PGC/PGDにダイオードをつけないこと:双方向通信
  • デバッギング要件
   - PICkit3がMPLabIDEと通信する
   - Vpp、PGC、PGD、VSS、VDD が接続されている

   - ターゲットデバイスが通電しファンクションが動作している、オシレータが動いている

   - コンフィグレーションレジスタが正しく設定されている
     オシレータが内部、外部、etc
     WDTがディセーブルにすること
     コードプロテクションはディセーブルにすること
     テーブルリ-ドプロテクションはディセーブルにすること

   - LVPはディセーブルにすること

  • デバッガの導入シーケンス→デバッグ詳細
   - デバッガをPICkit3に設定 : Debugger>Select Tool>PICkit 3
   - アプリケーションコードはデバッガ用にコンパイル : Project>Build>Configuration>Debug
   - プログラム書き込み : Debugger>Program
   - ”debug executive” program がメモリ後半エリアに書き込まれる
     デバイスによっては専用エリアに書き込まれるものもある
     ユーザープログラムは”debug executive” program のエリアを使用することはできない
   - “in-circuit debug” registers がイネーブルになる
   - VPP/MCLR をLowにしてターゲットデバイスをリセット
   - デバッガスタートDebugger>Run

  • デバッガスタートでリセットベクタからプログラムがスタート

  • ブレークポイントのアドレスまでプログラムが動作するとプログラムがhaltする
  • プログラミング
   - ヘッダボードなしでプログラムできる
   - プログラマをPICkit3に設定 : Programmer>Select Programmer
   - プログラムはリリース用にする : Project>Build Configuration>Release.
   - Programmer>Program は Debugger>Program と異なりin-circuit debug registersをディセーブルにする
   - プログラム後に#MCLRをトグルする
   - ICPSを用いてプログラムするのでVpp、PGC、PGDの接続が必要
   - プログラムにクロックは不要
   - コードプロテクション、WDT、テーブルリードプロテクション等の全てのモードのプログラムが可能
   - 
   - 


SIMetrix/SIMPLIS 特徴

<デバイスモデルの組み込み>
  • デバイスモデルは電気的特性を規定するテキストファイル
  • .MODEL、.SUBCKTで始まる文
  • 主要半導体メーカーが自社製品のデバイスモデルをウェブサイトで公開
  • SIMetrixは2300種類の市販デバイスのシンボル情報を書き込んだデータベース(all.cat)があり、シンボルとの紐付けは自動
<充実したグラフ表示機能>
  • 拡大/縮小
  • 座標軸の追加/削除
  • グラフ画面の追加/削除
  • カーソルによる値の読み取り
  • 測定値の表示(電圧/電流/消費電力/-3dBカットオフ周波数/高調波ひずみ率)
  • 解析終了後に任意のポイントの電圧/電流を表示できる
<その他>
  • ビヘイビアモデルで大規模システムを高速にシミュレーション

2010年8月26日木曜日

SIMetrix/SIMPLIS CQ版コンテンツ

<バージョン>
  • 5.0を使用する
<ライブラリ>
  • toragi.lib 1S1588、2SC1815、理想OPアンプ等
  • tk.lib 日本製トランジスタのライブラリ
  • その他のライブラリは真空管のライブラリ
<デバイスモデルのインストール>
※8章をみたらココに記述のこと!!

<トランスのシンボルライブラリ>
  • 収録フォルダ symbol
<シミュレーション用回路図ファイル>
  • 収録フォルダ sch

SIMetrix/SIMPLIS 概要

<SIMetrix解析の種類>
  • AC解析:周波数特性のシミュレーション
  • DC解析
  • 過渡解析  :オシロスコープで波形を見る感覚
  • 雑音解析
  • フーリエ変換  :周波数成分解析
  • マルチステップ解析(パラメトリック解析の拡張)
  • モンテカルロ解析 :素子値のばらつきの影響解析
  • ポールゼロ解析
  • 温度解析
  • 感度解析
  • PSPICEより収束性がよい→スイッチング回路のシミュレート得意
<SIMPLIS>
  • AC解析
  • 過渡解析
  • POP解析
  • ボーデ線図が簡単に描ける
  • スイッチング電源回路用高速シミュレータ

<CQ版>
  • アナログノード数 120個
  • オペアンプは内部のサブサーキットの規模で決まるが約3~4個
  • シンボルは170種類程度ある
  • シンボルエディタが使えユーザシンボル作成可能
  • アナログビヘイビアモデルも使用可能
  • 信号源(電流源、電圧源)の数には制限がない→FETを電流源にツェナーダイオードを電圧源に変更して扱う回路規模を大きくできる
  • OPアンプ850種類、N-MOSFET1100種類、P-MOSFET250種類のデバイスモデル(メーカー純正)
  • PSPICE形式、HSPICE形式のデバイスモデルがドラッグ&ドロップで取り込める
  • SIMertix+SIMPLISの構成、回路図エディタを供用、シミュレートは2者を切り替えて行えるがほとんどのシミュレートはSIMetrixで可能

2010年8月20日金曜日

論理回路設計 注意

  • ゲーテッド・クロックのマスク信号はクロックの逆エッジに同期した信号で無ければならない。

Verilog-HDL always @()構文

【論理合成可能なイベント式】
イベント式意味
@(posedge signal1 or negedge signal2)signal1が立ち上がった 又は signal2が立ち下った場合に begin ~ end内を実行
@(signal1 or signal2)signal1 又は signal2に変化があった場合に begin ~ end内を実行

  • クロックとリセットでの記述例は always @(posedge clk or negedge xrst)  となる。
  • 非同期リセットはレベルで動作するので negedge xrst には違和感があるが、negedgeを外して記述すると両エッジで動作してしまうし、この場合clkの立ち上がりの動作との区別が付かない。その為この記述になる。

Verilog-HDL for/while/repeat文の例

// for/while/repeat文の例
function parity
  input [7:0] data;
  reg   [3:0] sum;
  integer i;
  begin
    sum = 0;

    //for文で記述
    for(i=0; i<8; i=i+1) begin
      sum = sum + data[i];
    end

    //while文で記述
//  while(i<8) begin
//    sum = sum + data[i];
//    i = i+1;
//  end

    //repeat文で記述
//  repeat(8) begin
//    sum = sum + data[i];
//    i = i+1;
//  end

    parity = sum[0];
  end
endfunction

Verilog-HDL function記述

・Verilog HDLで組み合わせ回路を記述するのにifやcase文を使用する場合、ファンクションとして別に定義する必要がある。
・C言語でいう関数に相当する。
・always記述も可能。
・ファンクション内で一時的に使用するローカル信号はreg宣言したものを使用する。

・ファンクションの入力信号を省略すると大変!
・入力信号と返却値のビット幅には要注意!
・引数の記述順はfunction内での入力信号定義順!

//呼び出し側
assign out = mux(sel,in0,in1,in2,in3);//入力信号全て記述のコト!!

//マルチプレクサ(case文記述)
function [3:0] mux;
 input [1:0] sl;
 input [3:0] d0,d1,d2,d3;
  begin
  case(sel)
   0         : mux=d0;
   1         : mux=d1;
   2         : mux=d2;
   3         : mux=d3;
   default : mux=4'bxxxx;
  endcase
 end
endfunction

//マルチプレクサ(if文記述)
function [3:0] mux;
 input [1:0] sl;
 input [3:0] d0,d1,d2,d3;
 begin
  if(sel==0)       mux=d0;
  else if(sel==1) mux=d1;
  else if(sel==2) mux=d2;
  else if(sel==3) mux=d3;
  else                 mux=4'bxxxx;
 end
endfunction

Verilog-HDL 条件演算子でマルチプレクサ

// 4to1のマルチプレクサを条件演算子で記述
assign out = (sel==0)? in0:
                   (sel==1)? in1:
                   (sel==2)? in2:
                   (sel==3)? in3: 4'bx

Verilog-HDL モジュール定義の骨格

module モジュール名称 (ポートリスト);

  input 入力信号名;
  output 出力信号名;
  inout 双方向信号名;

  wire 内部信号名;
  reg 内部信号名;

  パラメータ宣言

  ポート宣言

  モジュール内信号定義

  function宣言

  インスタンシエーション

  assign文

  always文

  initial文 ※

endmodule

※論理合成の対象外

2010年8月17日火曜日

Verilog-HDL 演算子

【算術演算】
記号演算論理合成
+加算
-減算
*乗算
/除算
%剰余
**べき乗

【関係演算】
記号演算論理合成
<小なり
<=小なりイコール
>大なり
>=大なりイコール

【等号/不等号演算】
記号演算論理合成
==一致
!=不一致
===一致(X,Zも含む)×
!==不一致(X,Zも含む)×

【シフト演算】
記号演算論理合成
<<論理左シフト
>>論理右シフト
<<<算術左シフト○※
>>>算術右シフト○※

【論理演算】
記号演算論理合成
!論理否定
&&論理積
||論理和

【ビット演算】
記号演算論理合成
~NOT
&AND
|OR
^EXOR
~^EXNOR

【リダクション演算】
記号演算論理合成
&AND
~&NAND
|OR
~|NOR
^EXOR
~^EXNOR

例えば8ビット幅の信号Aの全ビットが1である事をチェックするためには、次の様なAND演算の式になる。
A[7] & A[6] & A[5] & A[4] & A[3] & A[2] & A[1] & A[0];
これをリダクション演算子を使うと
&A;
とシンプルに記述が可能。記号はビット演算子を同じであり文脈から判断される。


【その他】
記号演算論理合成
? :条件演算
{ }連結演算

【優先順位】
優先順位演算子
高い! & ~& | ~| ^ ~^ + - (単項演算)
* / %
+ -
<< >> <<< >>>
< <= > >=
== != === !===
& ~& ~ ~^
| ~|
&&
||
低い? :

Verilog-HDL 基本文法

■識別子
・信号や定数モジュール名、パラメータ等につける名前のこと
・アルファベット、数字、_(アンダースコア)、$(ダラー)が使用可能
・識別子の先頭はアルファベットかアンダースコア
・予約語は使えない

■論理値
0:論理0
1:論理1
Z または z :ハイ・インピーダンス
X または x :不定値

■数値表現
ビット数'基数に続き数値
4'b0101 4ビット バイナリ 0101
16'sh12AB 符号付 16ビット ヘキサ 12AB(Verilog2001)
123 32ビット 10進数 123
・10進数は不定やハイインピーダンス指定が出来ない
・読みやすさ向上のため任意の場所を _ で区切ると良い
・ビット長表記が無いと32ビットとして処理

■wire
・ネット型データ(信号)
wire xrst, clk; //2つの異なる名前のwire型信号
wire [7:0] dat1, dat2;//8本のバス状信号から成るwire型信号2組

・ビットフィールド
wire [15:0] dat; //と宣言されているとして
dat[0] //datの0ビット目1本の信号
dat[15:8] //datの15~8の8本の信号
dat //datの16本の信号全体

■reg
・レジスタ型データ(信号)
宣言とビットフィールドについてはwireをregに読みかえて同じ

2010年7月28日水曜日

Verilog-HDL シミュレーション結果保存テンプレート

//=======================
// 結果をファイルに保存
//=======================
integer mcd;
initial mcd = $fopen("D:/Project/ABC/tp00_dmp.txt");

reg file_strb ; // ストローブポイントモニタ

always begin
  file_strb = 0;
  #(STEP*0.9);
  file_strb = 1;
  $fdisplay(mcd,"%b %b %b %b %h %h %b %h",
                 top_sim_01.CS_SPI, top_sim_01.SCK_SPI, top_sim_01.MO_SPI,
                 REG_IRQ, REG_READDATA,
                 top_sim_01.ADDRESS_DPRAM, top_sim_01.WREN_DPRAM, top_sim_01.WRDATA_DPRAM);
  #(STEP*0.1);
end

RAMモデルのシミュレーション

Modelsim-Altera でのシミュレーション手順
  1. プロジェクト作成
  2. .vファイル登録(RAMを自作モデル→メガファンクション出力モデルに差し替え)
  3. コンパイル
  4. Start Simulation
  5. Librariesタグで altera_mf_ver をロード ※1
  6. Designタグで所望のデザインを選択後 OKボタン
※1 メガファンクション作成時、EDAツールでファンクションシミュレーションする場合に必要なシミュレーションライブラリが表示される。