【募集中】SystemC Japan 2012 オフ会&勉強会

Book:SystemCを使ったハードウェア設計

SystemCを使ったハードウェア設計―システム・レベル・モデリングからビヘイビア合成まで」を読みました。


今まで、所々は読んでいたのですが、真面目に全部読みました。

○目次
- はじめに
- 第1章 SystemCの概要と設計フロー
- 第2章 導入記述例
- 第3章 SystemC基本構文
- 第4章 C++モデリング構文
- 第5章 システム検証とチャネル・モデル
- 第6章 ビヘイビア合成
- 第7章 ビヘイビア記述例
- 第8章 SystemCによるRTL記述
気になった部分だけメモ代わりに。

はじめに


○p3 - 引用:
しかし、SystemCを用いる...(省略)を期待できません。
ハードウェア化にHDL記述が必要なら、わざわざSystemCを使わなくても、
慣れているHDLを使ったほうがいいかもしれません。
SystemCを用いて検証期間が短くなるかは疑問ですが、
設計に関しては、確かにそうだと思います。
やはり慣れている(得意とする)言語で設計すべきかと思います。

第1章 SystemCの概要と設計フロー


○p23 -「設計資産の再利用が容易」:クロック周波数を変えるや機能変更はRTLと比べると容易かと思います。

第2章 導入記述例


導入記述例ということで、アルゴリズム→TLMモデル→BCAモデル→ビヘイビアモデルと記述例が載っているのですが、最初に来ると初心者にはわかりづらい。。。
出来れば、概要レベルで最終章に一連で示してほしかった。
○p35 - アルゴリズムの出力結果がGolden結果になり、後工程での期待値となる。

第3章 SystemC基本構文


題目通り基本構文。
○p48 - 記述例(リスト3-4)で goto文を使っていることにちょっと驚いた。
○p53 - 注意書き*1「bool型はC++では符号付きのため、sc_int<2>にマッピングする場合も」
○p55 - sc_signal(デルタ遅延の概念)は重要
○p58 - wait_untilなんてあるのか?って思ったら筆者サイトにコメントあった。
    「SystemC実行環境(HDL設計入門)
     watching -> reset_signal_is, wait_until文は削除。(便利そうだったのに)
○p60 - sc_simulation_time()/sc_time_stamp()
○p62 - VCD以外にも、wif, isdbの波形トレースが可能。

第4章 C++モデリング構文


SystemCで必要なC++の知識をつけましょう(章)。
「オーバーロード、構造体、クラス、テンプレート、継承」と紹介してます。

第5章 システム検証とチャネル・モデル


sc_fifoチャネルとモジュラ・インターフェースについての解説。
概念としては重要なんだけど、TLM2.0もない時にこれは理解が厳しい。。。

第6章 ビヘイビア合成


○p113 - 引用:
RTL設計でもハードウェア構造を明確にしますが、ビヘイビア合成とは抽象度が異なります。
HDLによるRTL設計では...(省略)...ビヘイビア合成では、このような詳細なハードウェアの構造を決める必要はありません。
です!
○p117 - 引用:
ビヘイビア合成ではビット幅を最適化しようとしますが、
ビット幅の確定は...(省略)...適切な指定が必要です。
入出力信号だけでなく内部もちゃんとビット幅を決めるほうが良いです。
○p118 - 記述例(リスト6-4)のout_valid信号をもっとマクロで記述できればいいのに。「{}」でやるとか。
○p120 - 引用:
筆者はこうした質問に対して、「ハードウェアを意識してアルゴリズムを記述し、...(省略)...適切に指定すれば、
RTL設計者が設計したRTLデザインに匹敵するか、より性能の良いデザインを合成できます」と答えてます。
真理。

第7章 ビヘイビア記述例


記述例なので、あんまり。。。それぞれの書き方があると思います。
○p141 - テンプレートの部分特殊化使っている。

第8章 SystemCによるRTL記述


○p148 - 引用:
なお、SystemCでは、変数や信号には0で初期化されます。
一方、Verilog...(省略)...は不定xとして初期化されます。
...(省略)...注意してください。
注意が必要です。

コメント


本としては、2006年なので結構古い本になってしまったんですよね。
筆者が「改訂版を出したい」と言っていたので、みんな買ってください(笑)
で、SystemCを書いたことがある人であれば理解はしやすいと思いますが、
SystemCをこれから勉強しようと思っている方にはあまりお勧め。。。

SystemVerilog/SystemCの書籍(洋書)


洋書に関して、返信いただいた部分もあり列挙してみました。
VHDL/Verilog HDLのほうは書籍も充実していると思うので、省略します。
※またまた順不同でまとめてないです。

SystemVerilog関連


- A practical guide for system Verilog assertions
- Writing testbenches using System Verilog
- System Verilog for Verification
- Step-by-Step Functional Verification with SystemVerilog and OVM
- Open Verification Methodology Cookbook
- A Practical Guide to Adopting the Universal Verification Methodology (UVM)
- SystemVerilog for Verification: A Guide to Learning the Testbench Language Features
- Hardware Verification With System Verilog: An Object-oriented Framework
- Advanced Verification Topics
- SystemVerilog Assertions Handbook(邦訳あり)
- SystemVerilog Functional Verification
- SystemVerilog For Design: A Guide to Using SystemVerilog for Hardware Design and Modeling(邦訳あり)
- SystemVerilog for Design and Verification using UVM: From RTL to Synthesis
- The Power of Assertions in SystemVerilog
- Digital System Design with SystemVerilog
- Verification Methodology Manual for SystemVerilog(邦訳あり)

SystemC関連


- SystemC: Methodologies and Applications
- Transaction Level Modeling With SystemC: TLM Concepts And Applications for Embedded System
- Systemc Kernel Extensions for Heterogeneous System Modeling: A Framework for Multi-moc Modeling & Simulation
- High-level System Modeling with SystemC and TLM: Introduction and practical application of an Electronic System Level design flow
- TLM-Driven Design and Verification Methodology
- Advanced Verification Techniques: A Systemc Based Approach For Successful Tapeout
- Performance Evaluation of Parallel Packet-Processing Architectures Using SystemC-Based Modeling and Refinement (Berichte Aus Der Electrotechnik)
- ESL Design and Verification: A Prescription for Electronic System Level Methodology (Systems on Silicon)
- SystemC: From the Ground Up, Second Edition(邦訳あり)
- A SystemC Primer, Second Edition
- System Design with SystemC(邦訳あり)
- Quality-Driven SystemC Design
- Electronic System Level Design: An Open-Source Approach
- SYSTEMC IMPLEMENTATION OF A RISC-BASED PROCESSOR ARCHITECTURE: DESIGN AND IMPLEMENTATION OF A 16-BIT RISC-BASED PROCESSOR ARCHITECTURE WITH SYSTEMC LANGUAGE
- A Framework for Automated HW/SW Co-Verification of SystemC Designs using Timed Automata
- Languages for System Specification: Selected Contributions on UML, SystemC, System Verilog, Mixed-Signal Systems, and Property Specifications from FDL'03

こちらのサイトを参考にさせていただきました。
- SystemCの書籍 2007年10月(なつたん)
- All of SystemC
- SystemVerilog 関連書籍(All of SystemVerilog)

VDHL/VerilogHDL/SystemVerilog/SystemCの書籍(日本語)

あまりにも自分が関連書籍を知らなかったので、調べてみました。
※順不同です。

VHDL関連


- VHDLによるFPGA設計&デバッグ(オーム社)
- 図解 VHDL実習 第2版 - ゼロからわかるハードウェア記述言語(森北出版)
- VHDLデジタル回路設計 標準講座(翔泳社)
- はじめてのVHDL(東京電機大学出版局)
- VHDLによるハードウェア設計入門(CQ出版)
- RTL設計スタイルガイド VHDL編(培風館)
- HDL独習ソフトで学ぶCQ Endeavor VHDL(CQ出版)
- VHDLとCPLDによるロジック設計入門(CQ出版)
- FPGAボードで学ぶ論理回路設計―VHDL設計の基礎から実用機開発の体験まで(CQ出版)
- ロジック回路設計はじめの一歩―徹底図解 VHDLによるPLD/FPGA活用のための (トランジスタ技術SPECIAL for フレッシャーズ)
- VHDLによるマイクロプロセッサ設計入門―パソコンによるシミュレーションから論理合成、配置配線まで(CQ出版)
- VHDLで学ぶディジタル回路設計(CQ出版)
- 改訂版 VHDLによるディジタル回路入門(技術評論社)
- 見てわかるVHDL(工業調査会)
- VHDLによるディジタル電子回路設計(森北出版)
- 実践 コンピュータアーキテクチャ ―MIPSのアセンブリ言語とVHDL設計―(オーム社)

Verilog HDL関連


- 入門Verilog HDL記述―ハードウェア記述言語の速習&実践(CQ出版)
- わかるVerilog HDL入門―文法の基礎から論理回路設計、論理合成、実装まで (トランジスタ技術SPECIAL)
- FPGAボードで学ぶVerilog HDL(CQ出版)
- HDL独習ソフトで学ぶCQ Endeavor Verilog(CQ出版)
- 超入門!FPGAスタータ・キットDE0で始めるVerilog HDL(CQ出版)
- RTL設計スタイルガイド Verilog HDL編(培風館)
- 改訂新版 ディジタル回路とVerilog HDL(技術評論社)
- Verilog HDLによるシステム開発と設計(共立出版)
- Verilog‐HDL言語入門(テクノプレス)
- Verilog‐HDLによる論理合成の基礎(テクノプレス)
- 実用入門 ディジタル回路とVerilog‐HDL(技術評論社)
- 図解 Verilog HDL実習 - ゼロからわかるハードウェア記述言語(森北出版)
- Verilog‐HDLによるテストベンチ―アサーション検証の効率化のために(テクノプレス)
- Verilog HDL論理合成入門―RTL記述&ネットリストのリファレンス
- FPGA ボードで学ぶ組込みシステム開発入門 ~Altera編~(技術評論社)

VHDL & Verilog HDL関連


- Verilog HDL&VHDLテストベンチ記述の初歩(CQ出版)
- VHDLとVerilogプログラミングの基礎(ビー・エヌ・エヌ新社)
- HDL設計入門―VHDL,Verilog‐HDL,合成を用いた設計(テクノプレス)
- VHDL、Verilog、AHDLによるデジタルシステム設計(丸善)
- HDLによるVLSI設計―VerilogHDLとVHDLによるCPU設計(共立出版)

SystemVerilog関連


- SystemVerilog設計スタートアップ(CQ出版)
- SystemVerilogによるLSI設計(丸善)
- ベリフィケーション・メソドロジ・マニュアル(CQ出版)
- SystemVerilogアサーション・ハンドブック(丸善)

SystemC関連


- C/C++によるVLSI設計―SystemCによるJPEGコーデック設計(共立出版)
- よくわかるSystemCによるシステムデザイン入門(技術評論社)
- SystemCを使ったハードウェア設計(CQ出版)
- 基礎から学ぶSystemC(丸善)
- SystemCによるシステム設計(丸善)
- SystemCプログラミング基礎講座(翔泳社)
- HDLによるデジタル設計入門―SystemC/Verilog-HDLを用いたハードウェア/LSI設計(テクノプレ
ス)


抜けはあると思うので、教えてください。
洋書は厳しいのでリスト化は。。。

DPI-C:chandle型を使う。

SystemVerilog:DPI-Cで使える型を試す(シリーズ4)で最後です。
今回は、chandleです。

といっても、たぶん正規な使い方はこちらの「16.2.4 C++モデルとの接続」に
書かれているようなものだと推測します。
http://japanese.sugawara-systems.com/systemverilog/dpi.htm

なので、今回のは参考にもならない。。。かも。
○Cソースコード
 1|#include <stdio.h>
 2|#include "dpiheader.h"
 3|
 4|void f_tmp(int data){
 5|  printf("--- c data=%d\n", data);
 6|}
 7|
 8|#ifdef __cplusplus
 9|extern "C" {
10|#endif
11|int c_main(void) {
12|  printf("Hello from c_main()\n");
13|
14|  int i=10;
15|  f_tmp(i);
16|
17|  void * ptr;
18|  void * ptr_null;
19|
20|  ptr = &f_tmp;
21|  ptr_null = NULL;
22|
23|  c_chandle(ptr);
24|  c_chandle(ptr_null);
25|
26|  return (0);
27|}
28|#ifdef __cplusplus
29|}
30|#endif

○SystemVerilogソースコード
 1|module tb;
 2|  // import c_main
 3|  import "DPI-C" context task c_main();
 4|  
 5|  initial begin
 6|    c_main();
 7|    $finish(2);
 8|  end
 9|
10|  // export task
11|  export "DPI-C" c_chandle = task sv_chandle_task;
12|
13|  task sv_chandle_task( input chandle a );
14|    if(== null) $display("--- a is null");
15|    else          $display("--- a is not null");
16|  endtask
17|
18|endmodule : tb

実行結果がこちらになります。
dpic_chandle.png

うーん。。。どういったケースで使うのがベストなんだろう。

前置/後置operatorについてのメモ

C/C++/SystemC/SystemVerilogなどで使うような
「前置++」,「後置++」の処理について改めて確認したのでメモ。

○SystemVerilogソース
 1|module testbench;
 2|
 3|  initial begin
 4|    logic[3:0] a,b,x,y;
 5|    a = 1; b = 1;
 6|    x = a++; $display("--- x = %d, a = %d ---", x, a);
 7|    y = ++b; $display("--- y = %d, b = %d ---", y, b);
 8|
 9|    $finish(1);
10|  end
11|
12|endmodule:testbench

実行結果がこちら。
incdec_test.png

同じようなことを C/C++でも確認しましたが、結果は同じです。
○C/C++ソース
 1|#include <stdio.h>
 2|
 3|int main(int argc, char const* argv[])
 4|{
 5|    int a,b,x,y;
 6|    a = 1; b = 1;
 7|    x = a++; printf("x = %d, a = %d\n", x, a);
 8|    y = ++b; printf("y = %d, b = %d\n", y, b);
 9|    return 0;
10|}
11|
プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!をモットーに(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
04 | 2012/05 | 06
- - 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 - -
カテゴリ
OVP (2)
最新記事
最新コメント
月別アーカイブ
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

Twitter
アクセス人数