2011-01-01から1年間の記事一覧

electric-buffer-listの挙動がおかしい・・・

Macのターミナルでemacsを使うと、どうもelectric-buffer-listの挙動がおかしい。色々ググっても解決法が分からず。何となくM-x versionしてみるとemacs 22.1.1だったので、バージョンを23に上げてみたところ解決しましたorzちなみに、Homebrewでemacsをイン…

MacにGTKWaveをインストール

Mac

SystemCでダンプした波形を表示するために波形ビューアGTKWaveをインストールします。まずはパッケージ管理ツールHomebrewをインストール。 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)" あとは全部Homebrewがやってくれます。 $…

Mac OS XにSystemCをインストール

※SystemCのバージョン2.3からMac OS Xでもmakeできるようになりました。 最近購入したMacBook AirにSystemCをインストールしてみたので、やり方をメモ。 1. Xcodeのインストール gccを使うためにXcodeをインストールします。DockにあるApp Storeからダウンロ…

連想配列を使ってメモリをモデリング

SystemVerilogでメモリをモデリングする場合は、連想配列を使うとすごく便利。 連想配列を使うとなにが嬉しいかというと、下記のように大きなサイズのメモリを簡単に記述できる。 byte mem[int]; // 配列のインデックスに"int"、"string"等と書くと連想配列…

SystemVerilogでクラス内のタスクを常に走らせておく方法

色々調べまわって、always文のようにクラス内のタスクを並列して常に走らせておく方法がやっと分った。 まず実行したいタスクをforever文で書いて、さらにそのタスクをfork-join_noe文内で実行すればできた。 クラスを使った記述だと並列処理を書きにくいよ…

classを使ってみる

クラスの基本的な使い方 クラスを使う場合は、クラスを宣言した後に手続き文(initial、always)内で「クラス名=new();」と書くことでインスタンスが生成される。 クラスというのは動的に生成するものなので、モジュールのインスタンス生成と異なり、宣言する…

modportで定義した信号にclockingを適用する

interfaceではmodportを使うことで信号の向きを定義できるが、このmodportにclockingを適用したい場合は、下記のように書けばよい。 interface bus_if(input clk); 〜 // clockingブロックで信号の向きと遅延を設定 default clocking cb @(posedge clk); def…

interface内のtaskでclockingを使う

interface内ではtaskを定義できる。 interface bus_if(input clk); logic cs; logic [31:0] addr; logic [31:0] data; task write(input [31:0] ad, dt); @(posedge clk); #1; cs = 1'b1; addr = ad; data = dt; @(posedge clk); #1; cs = 1'b0; addr = 32'h…

Interfaceを使ってVerilog記述のRTLと接続

Verilogで書いたRTLとSystemVerilogで書いたテスト用モデルをInterfaceを使って繋ぎたい場合は、RTLのインスタンス呼び出し時のポートリストに『インターフェイス名.信号名』と書くことで上手くいった。記述量はあんまり減っていないような気がするけど・・…

コマンドラインでModelsimを実行する方法

コマンドラインでModelsimを実行する方法をよく忘れるのでメモ。作業ディレクトリを作成 $ vlib dir プロジェクト名と作業ディレクトリを関連付ける $ vmap prj dir_path コンパイル vlog test1.v test2.v \ -f file_list \ -work prj \ ←プロジェクト名 -in…

Verilogでセマフォ

『SystemVerilogによるLSI設計』に組み込みのセマフォを使わずに、中身を自分で定義している箇所があった(294ページ)。これはちょっと書き換えるとVerilogで使えそう。 module Semaphore; parameter initial_keys = 1; integer keys = initial_keys; task ge…

はじめまして

VerilogやSystemVerilogなどLSI設計についてのメモを書く予定。 SystemVerilogはまだ勉強を始めたばかり。