関係者皆様のご尽力により、1月29日付けで、新しい会社を設立した。
設計エンジニアには、非人間的な部分で工数を取られることなく、創造的な能力を発揮してほしい、これまでの実力の何倍もの生産性を紡ぎ出してほしいという願いを込めて、会社名を決めた。
オーバートーン株式会社
を、よろしくお願いします。
設立直後で、体制はあまり整っていないけれど、会社が回るようにロケットダッシュで体制を整えていきましょう。
関係者皆様のご尽力により、1月29日付けで、新しい会社を設立した。
設計エンジニアには、非人間的な部分で工数を取られることなく、創造的な能力を発揮してほしい、これまでの実力の何倍もの生産性を紡ぎ出してほしいという願いを込めて、会社名を決めた。
オーバートーン株式会社
を、よろしくお願いします。
設立直後で、体制はあまり整っていないけれど、会社が回るようにロケットダッシュで体制を整えていきましょう。
ビット連結はsc_int/sc_uintしかできないとか、色々な問題があり、先日からバタバタとしていたが、今朝になって、ベータリリース版における、基本的な1bit信号は sc_uint<1> に変更することにした。
ただし、クロックはboolでないとSystemCライブラリとリンクできないので、クロック、リセットのみboolとしておく。
過去のテストベンチも、これにあわせて変更要なので、注意が必要。
SystemCのユーザは少ないので、緊急性は低いから、慌ててやらなくてもいいのだけれど、気が付いたときに変更しておかないと忘れるので・・・
EDSF用のパッケージは変更前のものを入れておくことにします。
(日付でバージョンをつけているので、同一バージョンに見えますが・・)
デモ・配布用のCD作成に最後までどたばたしたけれど、皆さん、お疲れ様でした。
今日明日が本番です。気合を入れて行きましょう。
ホームページを5個、ブログを6個持っているが、自分でも把握しきれなくなってきたので、自分ポータルサイトを作り、一覧できるようにしてみた。
過去、相互非リンクだからこそ書けることもあったのだけれど、カミングアウトの結果は・・・(まぁ、何とかなるさ)
整数変数とvariableによる構造展開の例題として、もう一つ、乗算回路を示します。
これは、大きなビット数の乗算において、実用に使うには向かないですが、ビット数が少ない時には、十分使えますし、記述はシンプルな筆算形なので、分かりやすいと思います。
#define N 8 #define M 4 // Copyright (c) IP ARCH, Inc. Naohiko Shimizu // All rights reserved. declare multiply_%N%_%M% { input A[N], B[M]; output F[N+M]; func_in mult_do(A,B); } module multiply_%N%_%M% { integer i; variable pp[N+M], pa[N+M]; function mult_do { pa={M{0b0},A}; pp=0; for(i=0;i<M;i++) pp = if(B[i]) pp+(pa << i) else pp; F = pp; } }
NSLの構造展開のfor文を用いたバレルシフタの例。
整数変数やvariableは、出現順順次評価を行なうことに注意。
// Copyright (c) IP ARCH, Inc. Naohiko Shimizu // All rights reserved. #define N 8 #define M 4 declare shift_%N%_%M% { input A[N], B[M]; output F[N]; func_in shift_do(A,B); } module shift_%N%_%M% { integer i,sv; variable ps[N]; function shift_do { ps=A; sv=1; for(i=0;i<M;i++) { ps = if(B[i]) (ps << sv) else ps; sv = sv << 1; } F = ps; } }
除算をするのに、乗算器を使うというのもあんまりなんで、減算器を用いた、引き戻し法による除算回路を作ってみました。
マクロによるパラメタライズはあまりデバッグしていないので、異なるビット数だとバグがあるかもしれませんが、そのときはご容赦。
動作には、sfl2vlのベータ版(20091226版)で加えた修正が必要(かもしれない)。
// Copyright (c) IP ARCH, Inc. Naohiko Shimizu // All rights reserved. #define N 8 #define M 4 declare divu_%N%_%M% { input A[N],B[M]; output Q[N],R[M]; func_in divu_do(A,B); func_out divu_done(Q,R); func_out divu_error; } module divu_%N%_%M% { reg QB[M], QQ[N+M]; wire sub_i1[N+1], sub_i2[N], minus; func_self sub(sub_i1,sub_i2); function sub { wire sub_o[N+1]; sub_o = {sub_i1} - {0b0,sub_i2}; minus=sub_o[N]; } function divu_do if(B==M'b0) divu_error(); else seq { reg bitcount[M]; for( {bitcount:=0; QB:=B; QQ:={M'b0,A};} ; bitcount <N ; bitcount++) { { if(sub(QQ[N+M-1:N-M-1], {QB,(N-M)'b0}).minus) { QQ := (QQ << 1) ; } else { QQ := {(sub_o << 1)[N:N-M],(QQ[N-2:0]<<1)} | (N+M)'b1; } } } divu_done(QQ[N-1:0],QQ[(N+M-1):N]); } }
バージョン番号を日付にしているけれど、一日に何度かアップデートすると、日付だけでは足りないですね。
と、それはともかく、ベータ版を200912226版にアップデートしました。
今回のアップデートは、Y君に指摘いただいた、レジスタ初期化の問題のほか、制御端子を用いて、評価式の中で結果を参照するときの問題を対策しました。
評価式の中で制御端子を起動した場合、場合によっては、処理系都合で、複数回の評価が発生します。その都度、制御端子の引数に対して、複数回数の代入が発生してしまい、そのことが原因で、競合検出回路によって、ハザードとなる件を対策しました。
なお、1箇所の制御端子が、処理系都合によって複数回評価される場合の対策なので、複数箇所で制御端子を起動している論理バグの回避策ではありません。
Powered by WordPress