【Verilog】記述言語で論理設計 Project8【VHDL】
1 :
774ワット発電中さん :
2009/01/31(土) 18:07:56 ID:91TsDTyZ
2 :
1 :2009/01/31(土) 18:08:40 ID:91TsDTyZ
3 :
1 :2009/01/31(土) 18:09:44 ID:91TsDTyZ
新スレ立ってないのに埋めるのは愚者のやること 気をつけよう
刀、 , ヘ
/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは
>>1 乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
>>1 (゚д゚ )乙 これは乙じゃなくてポニーテールなんたらかんたら
7 :
◆YMO/ALTERA :2009/02/01(日) 08:28:56 ID:2OMIQxAE BE:998948693-2BP(1111)
イチオツ そろそろ基板遊びに復帰したい。 社内無職になりそうだ しね!
8 :
!omikuji :2009/02/01(日) 22:16:42 ID:tmlDWEjO
!omikuji
11 :
774ワット発電中さん :2009/02/04(水) 17:50:52 ID:jvfuASvN
VHDLでarrayの初期値の設定ってどう書きますか? type TypeArea is array (9 downto 0) of std_logic_vector(7 downto 0); signal ram : TypeArea := ?????;
なるほど ありがとうございました
XilinxのFPGAのDSPコアを使って、LPFを作りたいです。 例えば、1KHzの8次LPFを、FIRやIIRで作ったとして、 係数の値はそのままで、DSPへのクロック周波数(FPGAのメインクロック)を、 2倍にするとLPFのカットオフ周波数も2倍、 1/2倍にするとLPFのカットオフ周波数も1/2倍、 とかになるのでしょうか?
>>13 DSPの周波数を変えるって事はサンプリング周波数を変えるって事で良いのかな?
それだとsin 1kHzを48kHzでサンプリングするのと、sin 2kHzを96kHzでサンプリングしたものは
DSPから見て違うかどうか考えてみたら?
>>14 ありがとうございます。
なるほど、その通りですね。
そうですよねぇ、何かわかったような気がします。なるほどぉ。
ありがとうございました。
ハードで直接LPF作れば小さくて早いのに・・・orz
>>16 13は、カットオフ周波数をデジタル設定したいのだと予想。
つ「デジタルポテンショメータ」 あ、いや、いろいろ言われそうだからひっこめよう・・・ 彡
クロックを555で作ればいいのだ。 周波数は、デジタルポテンショメータで制御。
大きな一つのレジスタ(例えば1000bit)を作って、 アドレスでデータ入出力を制御したいのですが、 効率よく書くにはどうすればいいのでしょうか。 レジスタの宣言の仕方と、モジュールの入出力は変えたくないです。 我流でやってきたつけなのか、スマートに書く書き方が分からないorz レジスタの大きさやアドレスの幅は条件によって変わるから、 最終的に俺がとった方法が、条件にあったソースをはき出すソフトをVCで作るという。 大きな条件を指定するとひたすら長いソースができるので、なんか格好悪く感じて…… ----- ソース ----- module memory( input CLK , input [6:0] ADDR , input [9:0] DAT_IN , output [9:0] DAT_OUT ); reg [999:0] REG; always @( posedge CLK ) begin case(ADDR) 7'h00: REG[9:0] = DAT_IN; 7'h01: REG[19:10] = DAT_IN; 7'h02: REG[29:20] = DAT_IN; 7'h03: REG[39:30] = DAT_IN; 〜〜〜省略〜〜〜 7'h63: REG[999:990] = DAT_IN; default: begin end endcase end function [9:0] OUT_REG; input [999:0] REG; input [6:0] ADDR; case(ADDR) 7'h00: OUT_REG = REG[9:0]; 7'h01: OUT_REG = REG[19:10]; 7'h02: OUT_REG = REG[29:20]; 7'h03: OUT_REG = REG[39:30]; 〜〜〜省略〜〜〜 7'h63: OUT_REG = REG[999:990]; default: begin end endcase endfunction assign DAT_OUT = OUT_REG( REG, ADDR); endmodule
REG[ADDR*10+9:ADDR*10]<=DAT_IN;
>>21 それだと
ADDR is not a constant
って怒られるんですよね。。。
QuartusII v8.1です。
そんなでっかいレジスタ作っちゃった時点でスマートじゃないとしか・・・
reg [9:0] REG [0:99]; REG[ADDR] <= DAT_IN;
25 :
20 :2009/02/20(金) 00:54:33 ID:Tb6Co0MY
>>23-24 うーん、確かにそれができると良いのですが。
>>20 には書いてませんでしたが、作ったレジスタを全て一気に
別のモジュールにアウトプットするという豪快な回路なので、
REGはいくらでかくても一つのレジスタにしたいんですよねえ。
つまり、受け取る方も豪快なんですけど。(input [999:0] REG_IN)
単純なのにソースは長くなるのが悲しい。
実物に近く書くとこんな感じです。
module memory(
input CLK ,
input [6:0] ADDR ,
input [9:0] DAT_IN ,
output [9:0] DAT_OUT ,
outpu [999:0] REG_OUT
);
reg [999:0] REG;
assign REG_OUT = REG;
always @( posedge CLK ) begin
〜〜〜以下略〜〜〜
普通に(レジスタビット長/入出力ビット長)個のレジスタアレイ(メモリ)じゃいかんのか?
27 :
20 :2009/02/20(金) 01:33:09 ID:Tb6Co0MY
reg [999:0] REG; こんなレジスタを作って、 入出力は10bit単位ですけど、 内部では15bitシフトとか16bitシフトとか、 あまりきりのよくないことをしたいわけです。 REG <= { REG[999:15] , {15{1'b0}} }; REG <= { {16{1'b0}} , REG[999-16:0] }; そういう場合、 reg [9:0] REG [99:0]; のように宣言しても同じようなことはできるのでしょうか? 1000bitバスでoutputすることもできるのでしょうか? あー、レジスタを前者、wireを後者のように宣言して繋ぐことはできるのだろうか。 眠くて何書いてるか分からなくなってきた。
スマートになるわけではないけど、別の書き方。 reg [9:0] REG [0:99] ; REG[ADDR] <= DAT_IN ; DAT_OUT = REG[ADDR] ; REG_OUT = {REG[99],REG[98], ....(略) , REG[1],REG[0]} ; REG_SHIFT_OUT = { REG_OUT[999:15] , {15{1'b0}} } ;
functionを使って乗算器を作りたいのですがうまくいきません;; 一応自分で作ってみたのですがわけのわからない値が出てしまいます。。。 根本的にやり方間違っているのでしょうか・・・? function [7:0] multi; input [3:0] x; input [3:0] y; integer i; begin for(i=0;i<4;i=i+1)begin multi = multi + (x[i]==1)?y>>i:0; end end endfunction
あ・・・シフト演算逆ですよね すみません
function [7:0] multi; input [3:0] x; input [3:0] y; begin multi = x*y; endfunction ・・・ごめん
*はもう使いすぎて乗算器が足りなくなってしまったのですTT いろいろ調べたら&の使い方間違ってますね やりなおします・・・
すみません、自己解決しましたm(_ _;)m
聞いたんだから解決したらその方法を書くべきかと
>>20 亀レスでスマソ。
QuartusIIってVerilog 2001に対応している?
対応してたら REG[ ADDR +: 10 ] と書けるよ。
切り出すスライスの幅(今の場合は10bit)は定数でないといけないけど
開始位置は変数が使える。
QuartusはVerilog2001とかSystemVerilogを選ぶ選択肢があったよ 完全に対応してるのかは、知らないけど・・・ ISEもあるのかな?ISEは色々なところに設定がちりばめられていてよく分からない(使ってないしw
ISEも対応してるな どの程度かは知らないけど
>>35 のREG[ADDR+:10]というのは、どのような動作でしょうか。
たぶん、REG[ ADDR+ : 10 ]という部分分けでいいですよね?
>REG[ADDR+:10] この書き方合成できたっけ?
>>38 違う、違う。
+: という演算子。ADDRを開始位置にしてインデックスを増加させた10ビット
つまりADDRからADDR+9までを切り出しくれる。
同様に -: というものもある。この場合は、ADDRからADDR-9まで。
>>39 合成するような記述に使った事はないので、合成可能かどうかは分からない。
アドレスデコーダーを生成するだけなので合成できるような気はするけど。
と思ったけど、ビット幅が2のべきじゃないと割り算が必要になるから無理かな?
>>38 です。
>>40 ありがとうございます。なるほど、便利そうですね。
もう少し教えてください。
REG[ ADDR+: 10 ] だと、 範囲を示す「:」がなくなってしまうように思うのですが、
それは違いますでしょうか?
REG[ 24 : 10 ] → REGの24bit目から10bit目 なので
REG[ ADDR+: : 10 ] や、
REG[ ADDR+ : 10 ] なら、わかるような気がするんです。
ごめん。何を言いたいのか分からん。 配列から一部を取り出すのに、 「ここからここまで」と指定する方法、と 「ここから何個」と指定する方法 の2つがあって、それぞれに別々の表記法がある というだけの話なんだけど。 表記法が気に入らないという話なら、こんなところでなく IEEEへ提案してね。 ちなみに1364は1800に統合されたから、提案するんだったら 1800だよ。
あなたは日本のモンローですよ 僕はそう思います
それは飯島愛のことか?
46 :
sage :2009/03/03(火) 03:30:52 ID:se2bPRsO
過労で倒れて職場から離れて数年、 以前は、 VHDLかVerilogで記述、 Synopsys製で論理合成 CADENCE製でレイアウト だったんですけど、 今は変わってきているんでしょうか?
>>46 ターゲットの規模やデバイスに依存するから
一概にこうだって話はないよ
あえて言えば、進化してるのは検証ツール
設計・記述・合成ツールは昔から変わってない感じ
49 :
sage :2009/03/03(火) 14:23:34 ID:se2bPRsO
>>47 検証とは例えば、思い出せるのは
論理機能検証には(MentoerGraphicsのModelsimで)テストカバレッジとか、
非同期検証(Synopsys製Formality?とか)、
静的タイミング検証(Synopsys製PrimeTimeとか)
動的タイミング検証(Synopsys製VCSとか)、
他にもやってたような・・・
省エネ設計にはCTS手前でのプリミティブレベルのゲーテッドクロックと
論理合成時のゲーテッドクロック化
今だとフィジカル合成が主流なんでしょうか。
(論理合成でスピードを速めに設定すると面積増加→レイアウトの配置配線には遅延増加傾向、
ターゲットスピード+小マージンで設定すると、レイアウトでは論理の再合成ができないので、
論理が多段になっていると、人力での配置や駆動力アップしてもスピードが満たさない。そうすると
RTL論理合成に戻るとか、設計見直しとかして苦労もしていたのですが)
テスト設計にはSCAN、BIST、を
(最近はSCANパタンのキャプチャー(?)で
FFを一斉に動かすので電圧降下でスピードが落ちて良品を不良品判定する
歩留まり低下が問題だとか・・・)
(パタンの量を短くするだとか)
いろいろはメーカーのサイトをまわって情報収集していますが、
SynplicityがSynopsysに買収されたんですね。
>>48 今は実家で療養をしていて復帰を望んでいるんですが、
復帰して職務に身体が耐えられるのか自信がもてない状況です。
そもそもこの不景気では求人はないかもしれませんが。
50 :
sage :2009/03/05(木) 02:42:36 ID:mqd/yfyK
まずはリハビリとして加算回路をシミュレーションしてみようかな。 modelsimが無料で使えそうですし。
51 :
sage :2009/03/06(金) 00:16:18 ID:vKF5l8qk
8bit加算器をVerilogでコーディングして、 ISEで論理合成、マッピングまでできた。 Modelsimでのシミュレーションは30試用版(無料じゃなかった)の 問い合わせ中でまだダウンロードできなかった。 次はどんな回路にしようかな。 候補 FIFO UART
>>49 > 復帰して職務に身体が耐えられるのか自信がもてない状況です。
えーと、スレ違いな内容になってきましたが、
ぶっ倒れるまで働かせる会社か、ぶっ倒れるまで働くあなたがおかしいと思います。
私も何度か激務は経験しておりますが、私を含めぶっ倒れた人なぞ見たことありません。
復帰するのであればその辺に注意を要するのではないかと老婆心ながら思います。
数年もかかるってことは、精神を病んでしまったんだろうね。 向いてないんだよ。無理に戻らない方がいい。 世の中には食い扶ちはいくらでもある。これしかない、と思うから逝っちゃう。 戻ったら死ぬかもよ。マジで。
54 :
sage :2009/03/06(金) 17:05:03 ID:vKF5l8qk
>52 >ぶっ倒れるまで働かせる会社か、ぶっ倒れるまで働くあなたがおかしいと思います。 まったくその通りなんです。 状況を上手く説明できませんが、自分は働く気満々で、 私は派遣社員なんですが、作業分担する権限が小さいけれど、 (当たり前ですけど)最終的な品質責任はあって、その部署 でまだノウハウが溜まっていない行程もあるのに、客先への納期も 決められている。後工程になって、人を入れようにもプロジェクト 特有の知識拾得に数週間。見積もりの甘さ。最終責任者は業務範囲が 広すぎて細部まで把握しきれない。それぞれの人が自分の作業で いっぱいいっぱいになりコミュニケーション不足になりがちになる。 上位の意志決定に必要な情報があつまる仕組みが明示されていない。 責任意識や危機意識の違い、責任範囲の動機付け不十分に曖昧、 その立場が初めてで経験不足(最終責任者になった人も含め)。 など、すべての会社で良くあることかと思いますが、 自分のことで言えば能力が足りなかったということです。 コミュニケーション不足、自己管理不十分、身体のアラーム信号にも 気が付かなくなっていました。 (仕事ができてる人からしたら「なっとらん」とお叱りを受けそうですが) 組織力ってなんですかね? どんな社会の/企業の/組織の体制がいいんですかね? 個人が必要な能力って・・・ スレ違いですいません。
55 :
sage :2009/03/06(金) 17:27:53 ID:vKF5l8qk
>53 >数年もかかるってことは、精神を病んでしまったんだろうね。 自分の診断は、不眠症と頭痛とうつ状態でした。 うつ病というと精神的なものだという認識だと思いますが、 自分の経験では、もっとこう・・・風邪だったら熱があって怠くて やる気が起きない、頭が痛い、吐き気がするとか。経験したことが あると思いますが、そんな感じにどちらかといえば近いんじゃないかと 思います。実際、吐き気や立ちくらみ、食欲の低下、目がちかちかする、 音楽を聴くのがいやになる、人と話をしたくなくなる。など 自分はありました。 ただし、治療には精神的なところもあって、「大丈夫だよ無理するな」と言われれば、 切り離されたような気持ちになったり、「そんな人はいっぱいる、がんばれ」と 言われれば、この状態を共感して欲しいのにと思ったりします。 医者も本人じゃないとわからないと言いますが、きちんと診てもらえてる と思えば安心したりもします。 衣食住などで回りの支えが大切なきがします。 自分はなにも考えずにのんびり過ごすことから始めました。それから3年です。 >向いてないんだよ。無理に戻らない方がいい。 まだ迷っています。仕事内容は自分に合っていると思ってるんですけど・・・。 スレ違いですいません。慣れてないもんで長文ですいません。
鬱からの回復 好きなことをやれ まわりにそれを理解してもらえ 休んでも良いが怠けるな
山へでも篭もったら? 1週間ぐらい。食料は3日分ぐらいだけ持って。
58 :
sage :2009/03/06(金) 21:59:00 ID:vKF5l8qk
>56 そうですね。 今はそれが出来てる状態かも。(ただし、お金が・・・) 人それぞれで、病状の回復状況によって、対処も 違ってくると思うので、難しいところもあると思いますが。 そして、なってみて初めて予防の意識が芽生えました。
59 :
sage :2009/03/06(金) 22:14:25 ID:vKF5l8qk
>>57 え!っと思いましたが、案外・・・いけるような気もしてきました。(その当時では無理と思うでしょうけど)
風邪をひきながら富士山に登ったことがあるんですが、ダメだと思いながらでも以外と登れるんですよ。
(でももしかしたら、山を登ることで興奮して、身体のアラームを無視しちゃってるかも)
あと、うつ病の時、むしろ風邪をひいて一日中眠った後ほうが、身体が楽になった気がしたんです。
身体が一生懸命直そうとするんですかね。
薬よりも風邪を利用するっていう治療アプローチもあってもいいんじゃないでしょうか。
(担当の先生には言ってませんが。)
60 :
sage :2009/03/07(土) 17:19:43 ID:lzf0eOUf
メンターグラフィックスのModelsim30日間試用版は分け合って(企業向けなので)ダウンロード
出来ませんでしたので、
ですのでALTERAのQuartusU Web EditionとそれにつけられるModelsim-Alteraで
シミュレーションしました。
参考
ttp://www.altera.co.jp/products/software/quartus-ii/web-edition/qts-we-index.html VHDLとVerilogの混在でやってみたところ、このModelsimは混在をサポートしていませんでした。
テストベンチとRTLソースをVHDLで8bit加算器をコーディングしてようやくシミュレーション出来ました。
QuartusUでのインプリメンテーションもできったぽいです。
(今はVHDLとVerilogどっちが主流なんだろう? Verilogになってきてるようにも感じるし)
次は少し休んでからFIFOに挑戦します。
61 :
sage :2009/03/07(土) 17:44:04 ID:lzf0eOUf
あれもこれもだと何もできなくなりますが、 主流はVHDLでもVerilogでもなくC言語になりつつあるということなのでしょうか。
気象予報士って13歳でも受かるんだな
>>61 Cはまだまだ主流とかそんなレベルでもないでしょ、VHDLとVerilogは国やプラットフォームなどで違ったりするので
別にどちらが主流とかわかんない、そんなに違う物でもないし。
>>61 当然C言語が、主流になりつつはあります。
実際大規模な所で使っているところもありますし、早く出すことが重要ですからね。
もう時間の問題なのでしょうね。
ちなみに私は、シミュレーションが早いのでVerilog派です。
Verilog派でつ。 ソフトの仕事ではCでつ。 Cでハードを書くという感覚がイマイチつかめんな… クロックの概念をどうやって盛り込むのかわかりやすく教えてくれ…
>>65 クロックの概念なんて無しに、動作だけ作れるんだよ!
ハードを作る?何を言ってるの?
LSIのソフトを作るのさ!
>>64 Cが主流になるんなら、Cで書けよ。
シミュレーションも早いぞ。
LSIのソフトっていうのは、SoCのファームのことだろ。
クロックの概念がなかったら、どうやって外部とインターフェースするんだよ。
SD-RAMコントローラとかどうすんだよ。
TLMでは書けても合成できないぞ。
ソフト屋はすっこんろ。
Cから動作合成かけて、Verilog HDLのRTLが出力できるので、 外部インターフェイスを使ったシミュレーションは簡単にできた。 動作合成ツールのコンパイルオプションで「回路規模優先」とか「最速希望」とか 言う感覚は、C言語コンパイラのそれと同じで笑った。 でも、C言語コンパイラのそれと同じで、所詮はツールが頑張るレベルの最適化。職人芸には負ける。 Windows上で走っていたソースのアルゴリズム系の落とし込みは、思った以上に簡単に出来て怖かった。 そんなのちゃんと動かないと思ったら、FPGA上であっさり走った(汗)
「最速希望」を選ぶと動作可能な周波数が上がるの? 消費するクロック数が減るの?
70 :
68 :2009/03/07(土) 23:20:34 ID:cksc3eWR
>>69 どちらか選べた。
FPGAのシリーズ名を指定すると、レイアウトする領域や
配置すべきLUTの制約も指定できた(怖)
レイアウトまでした上で、こちらが指定した制約条件内に収まらなかった場合
指定した回数、頑張って動作合成からリトライして、所用クロック数と最大遅延時間、回路規模の
レポートをヘッペっと出力してくれた。
なんつーか、Cで機能モデリングするといきなり回路吐き出してくれるかんじ?
なんて言うツール? 言語はSystemC?
>>70 なんかそれ凄いな。
今手動でCからVerilogに落とし込んでるけどその過程が結構しんどい。
でもツールでそんなん出来ちゃったら漏れの仕事ソフト屋だけで十分になっちゃうんだけどw…orz
74 :
68 :2009/03/07(土) 23:44:32 ID:cksc3eWR
具体的なツール名は、ここで書くとマズイかも知れないのでごめんなさい。 SystemCではありません。ANSI C言語ベースです。 Cでstaticに静的に宣言された変数は、デフォルトでは動作合成後もネットリスト上にちゃんと残っていた。 AUTO変数は、動作合成後に残らない場合もありました。 配列宣言すると、配列容量によってFFなのか、メモリ(例えばデュアルポートSRAM)なのか 使い分けてくれたりもしました。
75 :
68 :2009/03/07(土) 23:57:39 ID:cksc3eWR
>>73 細かい所でまだ融通は効きませんが、用途によっては十分実用になるのでは・・・と感じています。
正直「食わず嫌い」でした。
C上での演算過程を、printfでファイルに落としておき、C言語コンパイラでの出力結果と
動作合成後の出力結果とを簡単にコンペアできたので、アルゴリズの動作検証が楽でした。
これが本当ならすばらしいことなのだが、 ANSI Cベースで設計できるという言葉に何度となく騙されたからね。 にわかには信じがたい。
77 :
sage :2009/03/08(日) 01:29:57 ID:4xy8zfdF
>>70 >FPGAのシリーズ名を指定すると、レイアウトする領域や
>配置すべきLUTの制約も指定できた(怖)
Cソースの中に、プリミティブレベルのブラックボックスの記述ができて、
さらにCソースの中に配置制約も記述できるということですか。(クロックのIOBUFとか)
動作合成後にはverilogと例えばUCF(Xilinxだったら。の制約ファイルとか)を
出力してツールへ受け渡すのでしょうか。
よく分かりませんが、C言語とVerilog混在はできるのでしょうか。
TOPはVerilogで下位階層はC言語とか。
78 :
sage :2009/03/08(日) 01:38:41 ID:4xy8zfdF
そうすれば、 例えばあるソフトウエアを頻繁に使用するものを、(各個別で) PCにある「そうゆうボード」に頻繁に使用するソフトウエアをハードかして スピードアップして使用するという流れもあり得そうな気がしてきますが。 ハード化対応ソフトウエアみたいな。
79 :
sage :2009/03/08(日) 01:43:48 ID:4xy8zfdF
↑78 よく考えたら的はずれな気がしてきた。
80 :
sage :2009/03/08(日) 02:03:28 ID:4xy8zfdF
STAで複数クロックがあって、非同期、同期とか複雑なとき、ある程度機能が分かっていないと、 検証用の制約を作れないと思うのですが、C言語主流だとどうなるんだろうか。 テスト設計とか、・・・・・・そんなこと大した問題はないですかね。 非同期信号の同期化とか・・・、ゲーテッドクロックの技術があるから 1つのクロックでも消費電力は抑えられるのかな。
81 :
68 :2009/03/08(日) 02:17:35 ID:yc8RcNNs
>>77 Cソースの中に直接配置制約までは記述する事はできなかったと思います。
Cソース内の各関数レベルで、動作合成ツールに手動で別途指示する事は可能でした。
pragma で動作合成ツールにツール依存のパラメータを指示する形です。
動作合成後は、Verilog 2001/2005/VHDLの出力を選択可能でした。
また、論理合成ツール向けに制約条件を渡せます。
直接ではありませんが、CとVerilogの混在は可能です。
動作合成したRTLを基に、再度論理合成を行った後、Verilog HDLシミュレータを使って
ゲートシミュレーションしてました。その際トップ階層は、Verilogで自分で記述しました。
82 :
sage :2009/03/08(日) 02:17:44 ID:4xy8zfdF
よくよく考えると、動作合成の時点で配置配線後のスピードを遅延モデルかなにかで 計算して、FF何段?にするか決めるとかってすごいですね。
一度でいいからそのツール使ってみたい…展示会みたいなところに出てたりしない?
84 :
sage :2009/03/08(日) 02:36:43 ID:4xy8zfdF
85 :
sage :2009/03/08(日) 03:05:10 ID:4xy8zfdF
>>81 どうもありがとうございます。なんとなくイメージできました。
そういえば、Modelsimを探していたところ、
SystemC、VHDL、Verilogの混在シミュレーションに
対応していると記載されてました。
(シミュレーション時間(実行時間)がますます長くなりそう・・・)
ネット検索してみるといくつかの企業でC言語設計ツールを作っているみたいですね。
C言語設計ツールも日本企業のツールが主流になってくれればいいのですが、
何が問題なのか、言語(英語)が問題なのか、技術的に劣っているのか、
・・・今主流のツールで日本企業のものはあるのだろうか・・・。
>>85 >C言語設計ツールも日本企業のツールが主流になってくれればいいのですが、
>何が問題なのか、言語(英語)が問題なのか、技術的に劣っているのか、
>・・・今主流のツールで日本企業のものはあるのだろうか・・・。
金を出す側の人間の問題だと思う
C言語系は微妙だなー。 三軍共同でヘリのパイロットを養成をしようとしたが 結局のところ想定する運用が違いすぎて 挫折した某国になる気がする。
88 :
sage :2009/03/09(月) 18:47:39 ID:nsputor5
>>86 >金を出す側の人間の問題だと思う
このままだと、今使っているツールから囲い込まれていくと
思います。
その方が今のユーザー(金を出す側)もなにかと便利だったり、
経済的だったりするので、自然にそうなるということか・・・。
あと、
同期回路ではなく、非同期回路が今後の注目されることはないですか。
>>88 非同期回路のほうが回路も小さくなるし、消費電力も小さい。
だが、設計が難しい。ってか、どうやるんだろう?
非同期のARMコアが発表されてたよね。
>>90 結局ハンドシェイク部がでかくなって、あんまりメリット無いとかも聞いたことある。
設計より、検証やテストが難しくなるんじゃないのかな?
92 :
sage :2009/03/10(火) 14:57:44 ID:8UsM+qzp
独り言の脱線で申し訳ありませんが、 学校教育も同期式のような感じがするんです。 時間内に1クラス全員にあることを教える。生徒のやる気とか もあると思うんですけど、理解できなかった生徒は、その後も なかなかついていけなくなると思うんです。 クラスを小さく分割して非同期にその小クラス(生徒)に合わせた 教育がいいんじゃないかなと思うんです。
93 :
sage :2009/03/10(火) 15:42:45 ID:8UsM+qzp
また、脱線してすいませんが、 回路規模や配線の混雑からみてFFにリセットがない方が良いと思うんです。 必要なところはしょうがありませんが、 設計の利便性のための冗長回路ってあると思うんです。
94 :
sage :2009/03/10(火) 16:26:10 ID:8UsM+qzp
>>89 >このサイトでCからverilogの変換ができる。
どうもありがとうございます。
なんとなくサンプルを利用してSUM=A+Bの加算器を
出力させようと思ったんですが、
unsigned int sum(unsigned int A, unsigned int B) {
unsigned int sum=0;
sum = A + B ;
return sum;
}
動作合成の制約がまずいのか100行ちかくのVerilogが出力されました。
動作合成で出力されたRTLを、RTLを追って機能を理解するのは
難しいと感じました。
95 :
sage :2009/03/10(火) 17:57:37 ID:8UsM+qzp
>>90 ,91
非同期回路の設計をしたことがありませんので、
イメージがなかなかわきませんが、
消費電力とか、チップの大規模化に有利、などありそうですね。
たしか、自分が担当したチップでクロック系の消費電力が全体の30%
くらいあったと思うし。(記憶が定かではありませんが)
でも、91さん指摘の設計、検証、テスト設計などが難しそうですし、
メタステーブルとかは素子が壊れることもありるとのことなので、
故障率が上がるんでしょうかね。
故障率がかね上がるんでありるしょう
97 :
774ワット発電中さん :2009/03/16(月) 23:33:22 ID:L9Nw5+Zb
お尻がやわらかい
c==>rtl変換は、既にいくつかあるよ。 が、使いものになるのは聞いたことが無い。 多ビットの四則演算でフィードバックなし程度なら、 問題ないだろうが。。 それに、c==>rtl変換の結果が正しいかどうか、 を検証する手間が増えるわけで。
関数型言語とかで書いたらHDLに落としやすいのかな。
いっそLispで・・・
あなた〜、CommonLispにする? Schemeにする? そ・れ・と・も〜、EDIF?
103 :
◆YMO/ALTERA :2009/03/19(木) 09:41:58 ID:C3G+e5Mn BE:591970728-2BP(1111)
いっそのこと、 FPGAにも、GPUアーキテクチャにも、 メイニコアプロセッサにも対応可能な処理系を 誰かに開発してほしい。マジ。
104 :
774ワット発電中さん :2009/03/22(日) 14:36:19 ID:t8psKFfW
VHDL初心者です。ちょっとVariableの初期化に関して教えてください。 process〜begin間のvariableでPARITY_X を'0'に初期化しましたが、 なぜか出力は'X'のままです。 begin〜end process間で'0'に初期化したら期待値どうりの値になりました。 variableで変数宣言する際の初期化は、 わざわざbegin〜end process間で行わないといけないのですか? architecture PARITY_4 of PARITY_4 is begin process (IN_PARITY) variable PARITY_X : std_logic := '0'; begin -- PARITY_X := '0'; for T in 0 to 3 loop PARITY_X := PARITY_X xor IN_PARITY(T); end loop; OUT_PARITY <= PARITY_X; end process; end PARITY_4;
>>104 入力シグナルを初期化してないからじゃないか?
具体的にいうとt=0の時のIN_PARITYの値が"XXXX"だとか
一回でも入力にXを食わせたらその後のPARITY_XはずっとXになるように読める
106 :
774ワット発電中さん :2009/03/22(日) 23:09:17 ID:t8psKFfW
>>105 返答ありがとうございます。
>>IN_PARITYの値が"XXXX"だとか
=>IN_PARITYの入力に"X"が無いテストパターンでシミュレーションした結果、
駄目でした。
問題はIN_PARITYではなく、
PARITY_Xの初期化の仕方に問題があるのかなぁと考えています。
variable PARITY_X : std_logic := '0'; と記述したので
PARITY_Xが初期化されたと思ったのですが駄目でした。
文法的には間違いないと思うのですが・・・
Verilogの入門書読んでいてグレイコードって出てきたんだけど、 これって何のために使うの? グレイコードってカウンターを読むときのタイミングの問題の為に使うって認識でいいの? (値の変化を極力へらすためのカウンタ?)
同時に複数ビットが動く時「同時」と言ってもそれぞれに微妙な時間差が あると言うのがツボ あとは自分の頭でよーく考えるように
グレイコードが何に使われてるか考えるとわかりやすい。 絶対値型のロータリーエンコーダとか。 すごーくゆっくり回転させたとき値の変わり目付近でどうなるか。
110 :
774ワット発電中さん :2009/03/23(月) 01:28:36 ID:ys4HHq6g
・いわゆるヒゲが出ない ・前後の差分が最小
まぁ、色々あるのよ。一度に1ビットしか変わらないメリットというものがね
>>106 はもしかして Cの局所変数の初期化と同様だと勘違いしている?
void func(void) {
int var = 1;
....
....
....
}
だったら呼ばれるたびに varが1になるけれども
VHDLで variable var : std_logic := '0' と書いても
T=0のときが '0'だというだけで、その後値が書き換えられることはないよ
void func(void) {
static int var = 1;
に近い
>106ってどういう回路に落ちるんだろうねって考えてしまう
>>113 合成するつもりないんじゃない?
つーか合成できないだろコレ。
ビヘイビアモデルを作るための部品だかライブラリもどきのつもり?
>>107 いつでも動くのは1ビットのみだから、消費電力(電流)がカウント値によらず一定になるだぜ。
電源ラインの電圧降下(全ビット0->1時)とかが軽減されたり、電流のピーク値が押さえられて
ノイズが少なくなったり。
...って、そんなシビアな設計してたのは何十年も前のことだよな。
非同期FIFOのカウンタでは定番 > グレイコードカウンタ
>>107 74シリーズのICでシーケンス組んでた時には重宝したが、最近は全く気にしない。
後ろにDFF付いてたら不要だろ。
Verilogの記述方法で教えてください。 //`define mode parameter mode 0 `ifdef mode==0 モード1記述 `else モード2記述 `endif 上位階層から回路動作を変更したいので、 defineではなくparameterを使いたいのですが何か方法ないでしょうか?
parameter でいいんじゃない? 下位階層への渡し方が分からないの?
parameterはcaseで使うイメージがあるなー `ifdefはコンパイル時に決定するものだから ちゃんとした分岐を書かないと上位から選択は出来ないように思う。
>>118 modeっていう名前の入力ポートを作って普通に if 文じゃだめなの?
defparam
初心者です。質問させて下さい。 verilogでFIRフィルタをFPGAに実装したいと考えています。 回路規模を少なくするための工夫(コードの記述方法等)には どのようなものがあるのでしょうか? また、書籍等で回路規模を少なくする工夫について 書かれたものがあれば紹介頂けないでしょうか。
デジタルフィルタは回路のほとんどの部分が乗算と加算だと思います。 フィルタの仕様にもよりますが、データのサンプリング周波数より 高い周波数のクロックで動作させて、一つの乗算と加算回路で 演算を繰り返すような工夫が良いのではないでしょうか。 (コードの記述方法と言うより回路構成の工夫ですね)
125 :
123 :2009/03/28(土) 01:05:14 ID:thvi6CN0
ご回答ありがとうございます。 フィルタ部の処理遅延クロック数と回路規模とのトレードオフという ような理解でいいでしょうか? 大変参考になりました。
通常のDSPで実現するデジタルフィルタのようなことをするって意味です。 遅延部分はメモリ(バッファ)で実現して、そこから一つづつデータを取り出しては 演算して結果をまたメモリに戻す。その繰り返しを行うことで演算(乗算、加算)を 行う回路を1つですます感じです。 遅延部分の段数が増えるとそれに伴い(サンプリング周波数に対して)動作クロックを 高くする必要がでてきます。
>>125 基本的にはそうなんだが、
速度を落とさず、回路規模を縮小させるのが、
技術者の腕の見せ所で、それがスキルレベル。
どうすればいいかなんてのは、
ケースバイケースで、一概には言えない。
ただ、共通しているのは、無駄を省くということだけ。
128 :
123 :2009/03/28(土) 12:45:19 ID:cI0v2zMS
>>127 ありがとうございます。
そこら辺のスキルが書いてある書籍等は何かないでしょうか?
それとも習うより慣れろで色々やってみて覚えていくものなのでしょうか?
要求処理速度によるが、遅くても良ければFPGAで実装するより CPU処理の方が安価って事も多々あるし。やっぱりケースバイケースじゃないかな。 回路的なアプローチで規模を縮小するより、誤差とのバランスで計算理論の方を弄れないか とか検討する方が有益だと思うけど・・・ 既にHDLスキルではないがな。
>>128 インターフェースの昔の記事で、同じ処理をいろいろな回路構成でやってみて
処理速度と回路規模を比較するってのがあったような気がしたな。
すみません、便乗で質問せてください。
FIRなどのデジタルフィルタにはDSPチップで、
>>124 のように1つの積和を複数回回して行います。
しかし、最近のFPGAではDSPが入っています。しかも500個とか入っています。
もし仮に、300タップのFIRを作成するときのシステムclock周波数は、
FPGA内の300個のDSPを使用する方が、DSPチップで複数回回して行うよりも、
clock周波数が低くなると思うのですが、
この考えは、違っているでしょうか?
>>131 300並列できるかは、アーキ次第だが、基本はあってる。
ただ、1/300クロックにできるというより、
同一クロックなら300倍高速に動作するという表現の方が多そうではある。
>>133 ありがとうございます。
>同一クロックなら300倍高速に動作するという表現の方が多そうではある。
そうですね。的確な表現だと思います。
>300並列できるかは、アーキ次第だが、
そうなんですか。ということは、384個入っているからといって300タップの
FIRが作れる、と安易には考えない方が良いのでしょうか?
4chの96タップFIRで使用する、といように設計されているのでしょうか。
>>134 ぱっと考えたところでは、300タップの乗算は1cycleで出来るけど、300タップの加算は1cycleで出来るのかとかじゃないかな?
>>135 ありがとうございます。
そうですね。足し算に時間がかかるかもしれませんね。
log300/log2=8.22ですので、9段の遅延がどれだけか、ということですか。
加算器1段の遅延って、どのくらいあるんでしょう。
16bit同士の足し算なので、相当な数のゲートをくぐる・・・・。
いまどきはゲート遅延より配線遅延の方がでかいから ゲート通過数だけで見積もってもダメよ
45nm乙
32nmZ
よくわからなくて、想像で書き込みますが、(15タップをどこかでみたようなという経験しかないです。) 同じ乗算器とFFを使えるように、係数とデータの流れを制御するのはどうでしょうか。 それと、同じ係数があるところは乗算結果を保存して置いて、 同じデータと同じ係数だったら同じ結果になるとので、同じ回路は必要がないように思えるので、 タイミング良く(シフトするなど)保存したデータを加算の方へ出力したらどうでしょうか。 あと、無視できるビットがあるのなら切り捨てる(まるめ?)とか。 ・・・だめそうですね。独り言です。
>>128 デジタル信号処理による通信システム設計 CQ出版社
Interface 2009年1月号
これ以上に書かれている書籍があったら、逆に教えてほしい
東京エレクトロンがやってる、無料セミナ Virtex4による高性能FIRフィルタ設計実践 あたりにいくと、よくわかって、”勉強には”なると思うよ。
143 :
774ワット発電中さん :2009/04/01(水) 15:57:55 ID:dg3HNtkL
>>143 さんはちょっとしたtyぽもゆるせないお尻の小さいな人ですか?
ディジタルで検索すれば良いと思うのです。
146 :
774ワット発電中さん :2009/04/01(水) 18:05:53 ID:dg3HNtkL
>>144 おまえ馬鹿だろ。なぁ。
タイトルを間違えてるだろが糞野郎。
ちゃんと調べてみろアホ
>デジタル信号処理による通信システム設計 CQ出版社
>>147 ん?ID変えて何言いたいんだ糞う゛ぉけ
149 :
774ワット発電中さん :2009/04/01(水) 21:21:39 ID:tgkuhQp7
dg3HNtkL 透明あぼんしますた。
・・・ワロタ すまんね。実際の本みて、手打ちしたんだわ。
151 :
774ワット発電中さん :2009/04/02(木) 07:26:59 ID:sD22/Ecj
>>146 のようなゆとりは、VHDLでFIRフィルタくむ前に、74シリーズICで掛け算回路をくんだ方がいいと思うよ。
フルトランジスタとか、リレーとか言わないからw
152 :
774ワット発電中さん :2009/04/02(木) 17:19:08 ID:0Ei4UIK8
除く前田
前田氏のリレー式計算機って、足し算が失敗して、あと何もできないんだよなw
FIRフィルタで例えば データ16bit、300タップ(9bit)をアドレスにして ROMにあらかじめ乗算結果を入れておいて出すようにすれば 乗算器300個よりも回路がちいさくならないかなぁ。
乗数可変の乗算器を乗数固定の乗算器に変えるだけだろ、それ。
係数固定なら乗算器は必要としない。
>>156 係数列を与えると、シフタと加算機をハードコーディングしてくれるマクロを作って(ry
すれ違いですいませんが、たとえばの話ですが、 自分が開発に携わった製品が 人を不幸にしてしまう事があるとしたら、 責任はあるのでしょうか? 責任を想像して製品をつくっているのか?と思ったりもします。 例えば、顔認証が進んで、過去に保存された画像からでも 画像検索すれば取り出せるとしたら、 過去のふれられたくない画像もあったりすると 思うので、 設計者の技術者倫理というか
っ□ >反ルネサス
>>159 ケースバイケース。
倫理的、法律的、企業的、個人的、など、すべて。
163 :
774ワット発電中さん :2009/04/05(日) 21:47:57 ID:8ptwI4i2
>>159 責任の有無と、責任を感じるかどうかは、別けて議論話した方が良いと思うけど。
例が顔認証なので、プライバシーの話をするけど、おきそうな問題は
出来る限り回避する仕組みにするよ。
顔認証で、顔写真をデータベース化するなんて、普通しないし。
指紋認証だって同じ。指紋が流出するなんて、ありえねえから。
長い目で見れば
問題があるもの = 売れないもの
だから、考えて作らんとね
>>163 普通しないとかあり得ないじゃなくて、悪意を持ってやろうとしたら出来る事に対して責任があるかどうかじゃないのか?
>>164 考える限りのトラブルは回避するという責任はあるが、
それでも起きた問題に対して、無限責任は無いだろ。
パソコンだって悪意もって、人に殴りつけたら死んじゃうぞ?
ちなみに、顔認証や指紋認証に関しては
特徴抽出データのみを管理するから、
データが漏れても個人の特定や悪用は出来ないんだよ。
そのくらいは考えてるよ、ってことね。
設計したブロックにバグがあると、たいがい、ソフトで何とかしろってことになる。 で、ソフト屋が不幸になる。いつものことだけど。
167 :
774ワット発電中さん :2009/04/06(月) 21:30:37 ID:tHMrN8NW
FIRフィルタで小さくしたければ 係数の項が等間隔で0が入るように 係数を最適化すればええよ
で、DSPで計算すると。
DSPだと、どうしても、タップ数==ループ回数分のクロック食うがな
170 :
159 :2009/04/07(火) 02:14:43 ID:z60OrHgg
顔認証の件は、例えばの話で、いろいろ有益な使い方が あると思っています。 ですが、 インターネットには沢山の画像があり、 人は画像で個人を区別できます。 それが将来、コンピュータが検索で画像をもとに同じ人の画像を 見つけられるようになるとしたら、 怖いなぁと思ったことがあるので例に挙げてみました。 ニュースで流れる事件事故で、もうすこし考えが行き届いていたら 起きなかったのではと思うことがあるので、責任ってなんだろうと。 仕事場では短期的な価値観で動いている気がして、 責任・・もしくは必要性をどの様に、どうやって 考えていけばいいのか、それが導かれる現場は どこにあるのかと考えたりもしていて。
車輪が発明されたから交通事故が起きてる・・・・とかな 言い出したらきりが無い
> FIRフィルタで小さくしたければ > 係数の項が等間隔で0が入るように > 係数を最適化すればええよ 詳しく! 係数が0の部分の乗算が省けるから小さくなるってこと?
キットで本ではないと思いますけど 中身も薄い取説とボードくらいですし
176 :
774ワット発電中さん :2009/04/09(木) 18:25:06 ID:kjFUBKJd
ソフト屋ですが人手不足でVHDLやる事になりました 勉強にお勧めな日本語サイト教えて下さい
177 :
774ワット発電中さん :2009/04/09(木) 18:53:33 ID:kjFUBKJd
ちなみに来週の月曜までにVHDLのソースをみて回路図をイメージ出来るようになれとのお達しが出ています
ちなみに、VHDLとか関係なく、セレクタだ、デコーダだ、カウンタだ、加算器だ、とか 言われたら回路図がイメージできるのでしょうか?
179 :
774ワット発電中さん :2009/04/09(木) 19:11:42 ID:kjFUBKJd
できません
> VHDLのソースをみて ひどいスパゲティだな、ソースだけに。 とか言ってお茶を濁せばいい。
181 :
774ワット発電中さん :2009/04/09(木) 19:48:57 ID:kjFUBKJd
なるほどその手があったか!! とりあえず2,3冊本買ってはったりがきく程度に勉強はしてみます
VHDLで書いてるのに、回路図がイメージできるかどうかなんて関係ないだろう。 ていうか、回路図がイメージできる規模って、ある程度小さいか、同じもののカタマリじゃね?
参考になるか分かりませんが、
ザイリンクスのISEというツールをインストールすると
サンプルソースがあります。
無償ソフトウェア ISE WebPACK
ttp://japan.xilinx.com/ise/logic_design_prod/webpack.htm C:\Xilinx\10.1\ISE\vhdl\hdlMacro
comp4.vhd (4-bit Identity Comparator)
decode4.vhd (4 Bit Active Low Decoder)
ftp.vhd (Toggle Flip-Flop with Toggle Enable and Asynchronous Preset)
とかありました。
ちんからホレ
>>182 回路図をイメージというよりソフトとハードと何が違うのか分かってて欲しい。
>ちなみに、VHDLとか関係なく、セレクタだ、デコーダだ、カウンタだ、加算器だ、とか >言われたら回路図がイメージできるのでしょうか? ふつーなら、詳細はともかく「だいたいこんな感じ」っていう位は イメージできるんじゃないの?
漏れもソフトやっててVerilogは後から覚えたんだけど、最初の頃は プログラム:前の行でやった結果に対して今の行で操作をする HDL:前のクロックでやった結果に対して今のクロックで操作をする というイメージをしてみたら取っかかりをつかめたよ。
>>188 >HDL:前のクロックでやった結果に対して今のクロックで操作をする
そうそう。
僕の覚え方は、
assign →「今すぐリアルに出力」
a <= b; →「次回の出力予約」
Verilog やり始めた頃、 count[3:0] <= count[3:0] - 4'h1; if (count[3:0] == 0) begin : : end こういうのが正しく実行されなくて15分ぐらい悩んだよ。
ある程度、ゲートレベルを意識しながらRTL設計できるようになると、 デジタル設計者だと名乗って良いと思うよ。
2つのカウンタがあって、非同期リセットで一つは0からはじまり、 一つは1からはじまって、あとは自走するような回路つくり、 1つはRAMのライトアドレス用、 1つは同RAMのリードアドレス用、に使ったら これはダメだと怒られた。
194 :
774ワット発電中さん :2009/04/10(金) 19:37:42 ID:1WKQiUPd
金ないけど本2冊買ってきた! これでおいらもVHDLマスターだ!!
>>192 なにがやりたいのか、駄目なのかさっぱり分かりません
豚切り。 VHDL業を始めて5年目なのですが、 半年前の自分のRTL見てぶん殴りたくなりました。 (メタステ考えてない、タイミング合わせのアホなFFが多いとか 馬鹿なコメントとか、見るのも恥ずかしいステートマシンとか) 良いほうに考えて、この半年で成長してるってことだと思いたいorz で、たとえば10年選手の人たちも同じようなことがあるのかな、と。 それとも「半年前でもさすが俺、よくできてるな」てな、感じなのでしょうか。 なにを訊きたいのか自分でも解らないけども、 「半年前の自分のRTLを違和感なく読めるか」ってことが知りたい。 ベテランな人ほど、もちろんそうなんだろうけど。
197 :
192 :2009/04/11(土) 00:11:38 ID:78Tbx2bf
すいません。
ライトアドレス用のカウンタとリードアドレス用のカウンタが
非同期リセットの初期値でだけ関係づけられて自走しているのは、
良くないということで、基本かもしれませんが。
インターリーブという回路で
RAMを使って、データを(ビットをずらしながら)遅延させる回路だったと思います。
ttp://markun.cs.shinshu-u.ac.jp/kiso/events/study/2004/digital-broadcasting/3.html 非同期リセットではライトアドレスとリードアドレスの関係性がくずれる
場合があるので、
ライトアドレスの値をデコードしてリードアドレスの
同期で初期値にするようにして、同期で関係づけられています。
非同期リセットはスキュー(20nsとかもある?)を気にしていない設計で、
クロックが入っているときに非同期リセットが入ると、
スキューによってリセットの外れるタイミングが違うので、
この場合、ライトアドレスが0のときリードアドレスが1にならない
ときもある。
非同期リセットの初期値で関係性をつくってはいけない。
と自分の中では決めています。
>>196 verilog/VHDL両方10年くらいになるけど、コードの一部を切り出して見て、
過去の自分を呪うようなことはさすがに無くなったなぁ。
ただ、他人(他プロジェクト)のRTLを見た時に、ブロック分割の仕方とか
信号名の決め方とか、デバッグ容易性や拡張性がよく考えられていて、
感心することは今でもあるよ。
良いコードは極限までシンプルに書かれているよね。
新人君が書くコードを、オナニーコードと呼んでいるw
>>196 完璧なコードは、決して書けない。
毎回いつも「もうちょっと時間があったらなぁ」という感じ。
プロでも同じだよ。
200 :
774ワット発電中さん :2009/04/11(土) 07:17:39 ID:iVYFbXg4
>「半年前の自分のRTLを違和感なく読めるか」ってことが知りたい。 >ベテランな人ほど、もちろんそうなんだろうけど。 書き方のスタイルは1年以上から先はほとんど固定するよ。そこそこの規模の仕事 を3回くらいやると、ほぼベテランと同じレベルになる。後は進歩無しで単純作業。 そこから上のレベルというのはVHDLの書き方の技術とは関係ない。 VHDLは言語がまずいとおもう。かなりレベルの低いチームの集まりで出来上がった 言語だとおもう。初心者がこの言語を使うと本質が見えにくい。悪戯に手間がかかる。
VHDLは、タイプ数多いから敬遠。
>>197 >非同期リセットの初期値で関係性をつくってはいけない。
目くじらたてなくても意外と動いちゃうことも多いが、確かにそうだと思う。
一部に何でもかんでも非同期リセット入れろとあるけど、正直非同期リセットって危険な面も結構あると思う。
>>199 プロの方が妥協は多いんじゃないかな。
趣味でやってると欲が出て、今度は終わらないという。w
>>201 もともと「作る」ための言語じゃなかったんでしょ。
206 :
774ワット発電中さん :2009/04/11(土) 21:48:33 ID:1nUFrLtr
>>201 >>205 VHDLは生まれ育ちの割りに、結構良い出来だと思うけどね。
それより、後発であるはずのSystemCの
あのとっつきにくさは、異常だと思う。
C++が諸悪の元
208 :
774ワット発電中さん :2009/04/11(土) 22:07:38 ID:wvrwNWhy
ソフト屋としてはC++は一番面白い言語
ソフト屋なら Delphi だろ JK
210 :
774ワット発電中さん :2009/04/11(土) 23:01:45 ID:86BO4Byf
>>203 このケースで何故非同期リセットが駄目と言われているか
判っているのか?
>>203 非同期リセット入れないとシミュレーション始められないだろ
>>210 非同期リセットがだめというわけでもないけど・・・
下手なステートマシンに非同期リセット入れてデッドロックしましたって話と一緒でしょ。
>>211 イニシャライズ回路作ってその回路だけ非同期リセットかけるとか、色々やりようがあるでしょ。
そもそもシミュレーションやるために回路作ってる訳じゃないし。
回路の初期化とステートのリセットは別にすればいいじゃね? 非同期はあくまでパワーオンリセット(レジスタの初期化)、シミュレーションの不定値解消。 回路動作の起点は同期リセット。
>>212 >下手なステートマシンに非同期リセット入れてデッドロックしましたって話と一緒でしょ。
ステートマシンが0000〜1010まで想定しているのに、非同期リセットの解除のタイミングが
たまたままずくて1100とかになってデッドロックしてしまうというイメージでしょうか?
忘れてしまったんですが、case の” when others => ”の代入式
で記述していてもそういった問題が起きるんですか?
>>213 他にも方法はあるけど、それがベターな方法だと思ってる。
やっぱりハードってこういった問題が含まれていて、それを自動で検証する方法が無かったりするわけで
回路を分からずRTL書いてると痛い目あうと思うんだよね。
>>214 そういうイメージです、others書けば一応対策できると思うけど、回路とかでかくなっちゃうかな。
実際のチップでも非同期リセットから回路立ち上げまでにクロック入力数の規定があるじゃん? つか、初期化回路が各部をリセットしたりテーブルに規定値書き込んだりといったイニシャライズ処理走らせてるよな。
トップモジュールだけ非同期リセット入れて他は同期リセットにすればいいの?
>>218 基本的にすべてのFFに非同期リセットがついていて、
必要なところは同期リセットというか、ある信号をイネーブル信号にして
'0'(あるいは'1')をFFに入力する。感じだと思う。
罪なら同期、寺なら非同期、ASICは方針に従え。
>>219 リセットアサートは非同期、リセットネゲートは同期ってのも
よくやる手だな
>>221 ということは、リセット信号をFFでシフトさせて同期化して元の
信号と論理和をとっているということですか。
そうすると、リセット信号もタイミング補償がなされることに
なりそうですね。
(アサート(assert)とは信号の電圧レベル(Lowかhighか)ではなく、
信号がアクティブな状態をいう。
インアクティブな状態をネゲート(negate)という。)
>>222 論理和なんかとらなくても、
always @(posedge clk or negedge rstn) if(!rst) newrstn <= 1'b0; else newrstn <= 1'b1;
で終わりだと思うが。
×if(!rst) ○if(!rstn)
常にクロックが供給されてるならね クロックをとめることができて、外部からの割り込みやリセットで再開するなんて場合には アサートだけはFFを通さずに入れる必要がある
あ、「割り込み」は関係ないな そういう製品ばっかりやってるもんでついw
>>223 出来ないとは言わないが、論理合成結果によって正しく動作しない
危険性があるから、ここは
>>222 の構成をとって、論理合成対象から
外すべき
直感だけで、深く考えて無く書きますが、 テスト設計用のスキャンパスを使ってノーマル動作でも初期化で 使うとかってダメですかね。 回路の削減のためにリセット付きFFではなく普通のFFをつかうとか。
仕様書を書くってどうやってやるんですかね。 機能仕様書からのコーディングだけしかしたことたいなから わからないです。 どういういきさつでLSIを作ることになるのだろう。
機能仕様書も仕様書なんですが、自分の中で漠然としていて いまいちよくわからないです。 それで、「仕様書とは」で検索することから始めてみたところ、 なにか手がかりがつかめそうです。 とにかく、書いてみないことには分からない と思うので、身近な資料を参考にしながら やってみようかなぁ。
>>231 なんか仕様書を書くのが目的になってるけど、
まずは何をつくるか?だろ
つくるモノがハッキリしていれば、仕様は決まってくるし、
その仕様を書きまとめたのが、仕様書。
229はこの業界から去るか、首つった方が良いと思うよ。
過労死を無くして欲しい。 同じ会社の中で足の引っ張り合いはなぜ?。
仕切り役が無能だから。
>>234 自分も人の足をひっぱてると認識してるわけですね。
どの様な職場環境が良いのだろう。 NHKスペシャルだかで見たと思うんですが、 アメリカが宇宙船という狭い空間でミッションを行うのに良い環境を 研究しているそうなんですが、 人間関係でいえば、男が多い場合だと競争意識が強すぎて、女性が多い場合だと リスクを回避しようとすることが多くなるのだとか、 男女が半々の時が一番パフォーマンスが高いらしい。 この業界は女性が少ない!!
脳の構造上、どうしても専門職は男が多くなってしまうんじゃないかな。 もちろん努力で何とかなることだとは思うけど、そこまでして 専門職の道を選ぼうとは思わない女性が大多数なんだろうねえ。
教えてください。 HDL関係の本やネットを見ていると、インスタンシエートという言葉が たくさん出てきます。が、このインスタンシエートの意味がサッパリわかりません。 Googleで「インスタンシエートとは」と検索したのですが、 期待するような「インスタンシエートとは○○のことで、 例えばVerilogで○○を○○の操作をして○○すること、 これをインスタンシエートするといいます」 のような表現は、ついぞ見つかりませんでした。 ネットの辞書で「instance」で調べても、 「オプジェクト指向言語で、しばしば「オブジェクト」とほぼ同義で...」と出て オブジェクトもオブジェクト指向も聞いたことあるけど、 このオブジェクト自体がわからない状態です。 オブジェクト=物体、目的ということはわかります。 例えばVerilogにおいて、「インスタンシェートする」といえば、 具体的には何をすることなのでしょうか? すみません、教えてください。
instanciate インスタンス化 あとはわかるな?
>>240 ありがとうございます。
せっかく教えていただいたんですが、
・instanciate ではなくてinstantiateではないでしょうか?
instantiateだと「instantiate the object《コ》オブジェクトのインスタンスを作成{さくせい}する」
と出てきますが、すみません。わかりません。
>あとはわかるな?
instantiate→インスタンス化→?? すみません、わからないです。
すみません。
Verilog インスタンス でぐぐれ。
LRMのこの辺り見ればいいんじゃね? 12.1.2 Module Instantiation
てか、FPGA関係って横文字多いし、
データシートやアプリケーションノートも英語ばっかり。
わからないことがあるときなんか、皆さんはあの英語を読んで、
「なーーるほどぉ。わかったぞ!」とかなるんですか?
英語力がないと、この業界やっていけないんでしょうか?
>>239 の件にしても、あんまり回答がつかないところを見ると、
実は皆さんも意味を知らずに使ってるってことでしょうか。
少なくとも俺はそのど真ん中なんだけど。
>>244 IEEEが日本だけの団体だったら、真っ先に日本語で資料作成されるのだろうが、そうじゃないから仕方ない。
FPGAベンダも日本の企業じゃないから、最新資料は英語からになってしまうのは当然でしょ。
英語の書きはできなくてもなんとかなるけど、読みはできないと厳しいんじゃね?
LRMが言語仕様そのものなんで、これ読んでもらうのが一番だと思ったので書かなかったけど、自分は
「実体化」してると教えてる。
これでピンときてくれる勘がいい子はいいのだけど、最近の子は想像力が貧困過ぎて、イメージするという
ことができないことが多くて、正直しんどい。
そんなときはmodule~endmoduleは部品を作る作業。instanceは作ったは部品を基板に載せて結線する作
業と言ってる。で、60進カウンタモジュールと12進カウンタモジュールを作らせて、それらをインスタンスする
という実習をさせてる。
>>245 ありがとうございます。
英語は読めないと厳しそうですね。僕もデータシートなどで英文を読みますが、
いくつものtoやthatでつながった長文は なかなかニュアンスが掴めず苦労しています。
>そんなときはmodule~endmoduleは部品を作る作業。instanceは作ったは部品を基板に載せて結線する作
業と言ってる。
具体的な例でしめしていただいて、ありがとうございました。
比べるのはキツイかもしれませんが、C言語と対比すると、
(Verilog)module~endmoduleは部品を作る作業 → (C言語)プログラムの中身?を書く作業
(Verilog)instanceは作った部品を → (C言語)mainなどで上記の関数を使って
基板に載せて結線する作業 プログラムする作業
すると、
・instanceは、名詞で「機能ブロック」を指す。
・instantiateは、他動詞で「(ある部分を)機能ブロックにする」を指す。
という理解でよいでしょうか。
また、用例としては、
「HDLソースは、ベタで書いてもちゃんと動作はするが、
頻出する部分をインスタンシエートして、
モジュール中から、そのモジュール(インスタンス)を呼ぶようにすれば、
ソースが読みやすいし間違いも減る。
上手に作っておけば、そのインスタンスは、別のHDLにも使用でき、
開発効率が上がるよ」
という使い方でよいでしょうか。
>>246 適当なサンプルで説明
// 下位モジュール
//モジュールの定義(NA2のモジュール化)
module NA2(Y, A, B);
output Y;
input A, B;
nand (Y, A, B);
endmodule
// 上位モジュール
module ORAND2(F, I1, I2, I3, I4);
output F;
input I1, I2, I3, I4;
wire N1, NS;
NA2 U1 (N1, I1, I2); // NA2をU1としてインスタンシエート(インスタンス化・実体化)
NA2 U2 (.A(I3), .B(I4), .Y(N2)); // NA2をU2としてインスタンシエート(インスタンス化・実体化)
NA2 U3 (.Y(F), .B(N1), .A(N2)); // NA2をU3としてインスタンシエート(インスタンス化・実体化)
endmodule
U1,U2,U3はモージュールNA2のインスタンス(実体)
U1,U2,U3はそれぞれ回路として機能する。
ソフトウエアじゃないから、モジュールを呼出すわけじゃない。
そのモジュール化(部品化)された回路を配置するイメージ。
あくまでハードウエアです。
>>247 ありがとうございました。具体的で、よくわかります。ありがとうございます。
もしかして、少しわかってきた気がします。こんな理解は正しいでしょうか?
// 下位モジュール
module NA2(Y, A, B); // これは、NA2という回路の内容を説明しているだけで、
(略) // 実際にFPGA上に回路は作られない。
endmodule //
// 上位モジュール
module ORAND2(F, I1, I2, I3, I4);
(略)
ここで初めてNA2の内容が使用され、FPGA上に回路として乗る。
↓
NA2 U1 (N1, I1, I2); // NA2をU1としてインスタンシエート(インスタンス化・実体化)
NA2 U2 (.A(I3), .B(I4), .Y(N2)); // NA2をU2としてインスタンシエート(インスタンス化・実体化)
NA2 U3 (.Y(F), .B(N1), .A(N2)); // NA2をU3としてインスタンシエート(インスタンス化・実体化)
endmodule
// 「NA2をU1としてインスタンシエートする」とは、
// NAという回路内容を、U1という名前を付けてFPGA上に置く、ということ。
どうやら、マイコンのソフトと混同していたみたいです。
「それを何回か呼ぶのではなく、それを何個か置く。その置くことをインシタンシエートと言う」という
とらえ方だと感じています。どうでしょうか?
>>246 CやC++になぞらえるなら
// これが定義
struct mychip { ... };
// mychipをchip1として「インスタンシエート」する
struct mychip *chip1 = malloc(sizeof(struct mychip));
chip1->param1 = ...;
...
// mychipをchip2として「インスタンシエート」する
struct mychip *chip2 = malloc(sizeof(struct mychip));
chip2->param1 = ...;
chip2->input1 = chip1->output1:
...
こんな感じでしょ。C++ならnewでインスタンス(まんまだな)を
作るのと同じ。「定義」と「実体の生成」。後者を一言でいう適当な
用語がないからインスタンシエート(英語のほうでもちょっと苦しい
感じだが・・・)。
>>249 ありがとうございます。
せっかく回答いただいたんですが、C++を知らないんです、私。
すみません。
でも、
>「定義」と「実体の生成」。後者を一言でいう適当な用語がないからインスタンシエート
この「定義と実体生成」が、正解なのだと思います。
どうもありがとうございました。
これでまた1つ勉強になりました。
どうもありがとうございました。
インスタンシエートは「具象化」で良いと思う。 むしろ俺はその具象化されたものの実体は何なのかと 問いたくなる。
具象化されたものの実体は単なるトランジスタ駆動用のビットじゃないの? それに意味づけしたり、それを食わせた結果の動作の意味づけは人間が勝手にやってること。
253 :
774ワット発電中さん :2009/04/23(木) 23:52:52 ID:OnDkuTUO
イニシエーションって何レスか?
イニシエーション=入会儀式
255 :
774ワット発電中さん :2009/04/24(金) 00:59:51 ID:f0EdIQdw
小数点を含んだ下記のような演算をしたい場合どうすれば良いでしょうか? 例)a * 1.0035
>>255 最終的にどういう結果が欲しいかによるけど1.0035を適当に2^n倍する。
257 :
251 :2009/04/24(金) 01:28:50 ID:ijJePCmI
>>252 この場合時間ドメインにおいては、結果に対する意味づけではなく、
結果に先立って意味があると思うんですが。。。
「人間が勝手にやってる意味づけ」に対する価値観の相違ですかね。
まあ、これ以上は哲学的になり過ぎますから、止めておきましょうw
258 :
774ワット発電中さん :2009/04/24(金) 03:03:27 ID:MAL2gqLv
こんにちは、VHDLと2チャンネルの初心者です。 12ビットのデータを8ビットに圧縮してもっともデータのロスが少なく なるような方法はないですかね?あったとしてもVHDLですばやく圧縮できます か?30MHzくらいで。わかる人いたらよろしくおねがいします!ありがとう ございます。
12ビットのうち適当に8ビット選んで残して、残り4ビットは捨てろ。 それが最もデータのロスが少ない。
>>258 どのようなデータでロスはどのくらいまで許容できるのかによって
適切な方法が変わってしまうと思いますよ。
VHDLと2chの初心者であって圧縮についてはお詳しいでしょうけど
12ビットならテーブルだな。 FPGAならRAMを使うし、ゲートアレイならROM、ASICなら合成ツールにおまかせ。
262 :
774ワット発電中さん :2009/04/24(金) 09:19:06 ID:Y46GSnSZ
書き忘れたが、30MHzなんてケチな事は言わず、300MHzとかで動かそうぜ。
263 :
774ワット発電中さん :2009/04/24(金) 11:31:52 ID:MAL2gqLv
親切な解答ありがとうございます!!システムがVMEに つながっていくようにしたいので、30MHzくらいでいいと思います。 ずばりFPGAを使っているのですが、どうやってRAMを使えばいいんでしょう か?なにか参照できるページがあれば教えて頂けるとありがたいです!! ありがとうございます!
RAM というなら、4096バイトのテーブルを用意して、単に変換したい値を 入れておけばよいのでは?
教えてください。 XilinxのISEで、言語テンプレートの IBUFGは以下のように書かれています。 IBUFG #( .IOSTANDARD("DEFAULT") ) IBUFG_inst ( .O(out), .I(in) ); この文章の表記は、Verilogの書き方なのでしょうか? それとも、Xilinxのみで許される書き方なのでしょうか? また上記中の言葉が、予約語かどうか以下のように理解しているのですが、正しいでしょうか? IBUFG ← 変更ダメ # ← この#の意味が、さっぱりわからない。 .IOSTANDARD("DEFAULT") ← .IOSTANDARDは変更ダメ、DEFAULTは、設定なのでユーザ変更可。ただし決まった語句。 IBUFG_inst ← 変更ダメ .O(out), .I(in) ← カッコ内は、自分の回路につなぐ信号名称に変える。.O .Iは変更ダメ。 特に#についは、初めて見るもので、Verilog用語なのかさっぱりわかりません。 どなたか教えていただけないでしょうか。
verilogだとおもいます。 IBUFG #( .IOSTANDARD("DEFAULT") ) IBUFG_inst ( .O(out), .I(in) ); IBUFG ← 変更ダメ => ○ グローバルバッファでクロック端子に使うと思う。 # ← この#の意味が、さっぱりわからない。 => パラメータ IBUFG.vのファイルの中身を見てみるといいかも。 .IOSTANDARD("DEFAULT") ← .IOSTANDARDは変更ダメ、=> なくてもいいかも \Xilinx\10.1\ISE\verilog\src\unisims\IBUFG.v を参照 IBUFG_inst ← 変更ダメ => インスタンス ユニークな名称を付ければいいと思う。 .O(out), .I(in) ← カッコ内は、自分の回路につなぐ信号名称に変える。=> ○ .O .Iは変更ダメ。=> × ( .O(IBUFG_CLKIN), .I(CLKIN) )という感じ。 間違っていたらすいません。
>>267 ありがとうございます。よくわかりました。
#が入るやっでも、Verilogの表記方法なんですね。
IBUFG_instの部分は、確かに他の文字でも通りました。調子に乗って
#を文字に変えてみたのですが、怒られました。
>\Xilinx\10.1\ISE\verilog\src\unisims\IBUFG.v を参照
おーーー、ありがとうございます。やっばりどこかに書いてあるんですよね。
.O(IBUFG_CLKIN), .I(CLKIN)の、.O と .Iの文字は、下位モジュールの文字なので
変更してはいけないように思いますがどうでしょう。
順番で書く書き方(.I()ではないタイプ)は、順番さえ合っていれば、文字は同じでなくても
エラーは出ませんでした。
FPGAのピンからDCMにclockを持ってくるだけで、1日悩みました。
ライブラリガイドには、IBUFでなくIBUFGというのを通したclockをDCMに入れよ、
と書いてあるので、そのように記述したら、なぜかすでにDCMのclock入力にIBUFGが置かれていて、
「このbufferのシリーズ接続はダメだ」とおこられたり、
Global Clockのピンから取るときと、通常ピンから取るときで何か違うみたいだし、
○○bufferと○○bufferのカスケード接続はいいけど、
○○bufferと○○bufferのカスケード接続はダメだとか。そんなこと知らないよぉ。
clock buffer関係のbuffer選択はきまりがあって面倒そうです。
何か、このあたりをまとめた資料っぽい物はないかしらん。
268です。
>>269-270 ありがとうございました。教えていただいたISEのヘルプには、いろいろと有益な情報が書いてありました。
どうもありがとうございます。(もっとヘルプを見ないといけませんね)
その中の、ライブラリガイドに、くだんの接続条件などが書かれていました。
しかし、文章表記のみでちょっとわかりにくかったので、
自分なリに整理整頓して覚える必要がありそうです。どうもありがとうございました。
連投ですみません、素朴な質問をさせてください。
今回の調べ物で、本を読んでいたら、Verilog文法にも繰り返し文としてforがありました。
メモリのクリアなどに使うようです。しかし、疑問があります。
このforは、clock同期で動作しているFPGAの中で、どのように動作するのか?ということです。
100回繰り返しのforがあったとすると、
1) forが完了するまで100clock分、他の全処理が一時停止する → それはないと思う。
2) forはclockと関係なくFPGAの持つ全速力で動作するので、
FPGAのclockは、forの期間より遅い周波数しか使えない → これも変な気がします。
3) 上記以外の何かスゴイ仕組みがある。 → これが正解のような気がします。
どうでしょうか? ご存じの方、教えていただけないでしょうか。
>>271 4) 合成には使えない。
for generate みたくメタ用途には使えるけど
それ以外では基本的にテストベンチ用と思っていい。
> メモリのクリアなどに使うようです。
テストベンチで使ってるのを見て勘違いしたかな?
for文は合成できるよ。 単に100個並列な回路ができるだけ。 メモリや配列の初期化に使うよ。
シミュレーション用のRAMのverilogの中身だったりして、 XilinxはRAMのデータをCOREgenでつくるんでしたっけ、 ISEで合成するときはそのRAMのverilogは読み込ませないように しないといけない記憶がある・・・。
普通に配列書けば、ブロックRAMなりを推定してくれるよ。 初期値設定できるのかは知らんけど。
ちょっと質問なんですが、オープンソースで86系CPUのIPコアって無いでしょうか? FPGAに入れて遊びたいと思っているんですが・・
ModelSim XEを使っている人に質問です。ご指導ください。 シミュレーション波形の画面(waveウインドウ)で、 フルパス表示のため信号名の表示が長く、波形表示領域が短く(狭く)なってしまいます。 信号名のパスの上の方を見えなくする(信号名を短くする)方法は ないものでしょうか? 例) C:\ModelSimXE\test\Clock → Clock 例) C:\ModelSimXE\test\20090428\seg7_a → seg7_a という具合です。
>>280 メニューwave→wave preferences→displayタブ に"1"を入れると
信号名だけになる。
"0"(デフォルト)だとフルパスになっている。
もしくは、doファイル(?)を作って信号の表示を編集するのも
出来ると思う。
282 :
281 :2009/04/29(水) 03:56:58 ID:B627P4Ii
waveウインドウをアクティブにしてないとメニューにwaveが でてこないかも。
>>281 どうもありがとうございました。
おかげさまで、思うような表示になりました。
メニューバーの内容が、ウインドウによって、ゴロゴロ変わるんですね。
たしかにwave表示でないと、waveメニューは出ませんでした。
まだまだ勉強が足りません。ありがとうございます。
バス表示をアナログ表示にすると、表示幅が自動的に広がるのですが、
その後、通常の数字に戻しても広いまんまなのは、ちょっと残念でした。
でも今回やり方を覚えたので不安はないです。
ありがとうございました。
ゴールデンウィーク中なのにすみません。1つ質問させてください。 ISE9.2 WebPackを使って勉強していますが、 xxx.ucfファイルの作り方について質問があります。 ・現在行っている方法 ・ソースファイルxxx.vだけを書き、コンパイルを通す。 ・PACEを起動すると「ucf無いよ、作る?」と聞いてくるので、Yes。 ・PACEの表計算みたいなマスに「P123」などと記入。保存。 ・配置配線OKで、デバイスの動作もOK。 ここで、ソース変更でi/oピンが減った場合、 ・ソース変更、コンパイル ・PACE起動すると、ソース上で減らしたピンは特に表示されないので、保存。 ・そのまま配置配線すると、「ucfにこんなん書いてあるけど、ソースに無いよ」と怒られます。 ・ucfをテキストで見ると、確かに残っているので、消して保存→配置配線OKになる。 そこで質問です。 ・ISE9.2の期待する正しいucfの作り方は、どのようにすべきなのでしょうか。 a) PACEで作成し、ピン減などは、上記のように手動で削除する。 b) ucfは、始めからtextエデターで作る。それが本筋。 ・減ったピンをPACEが知らないはずがないと思うのですが、 上記のようにPACEで見えません。が、実は残っています。 何か私のやり方が変でしょうか? 食後のひとときに、すみません。宜しくお願いします。
ずばり (b) ucfは、始めからtextエデターで作る。それが本筋。
>>284 >>285 の言うようにピン設定する時にはテキストエディターでコピペしながら修正した方が早い。
しかし、ピンが減ったからUCFを削除するのもおかしくない?
おいらの場合、最初にすべてのピンの定義を決めておく。
もちろんすべてのピンを使うことはめったにないから、使わないピンはリザーブピン。
リザーブピンが使用ピンに変わるだけだから、UCFへの追加はない。
使わなくなったピンは基本的にはそのまま残しておくから削除もない。
出力ピンはHiかLowに固定するし、入力ピンは空きピンへ接続するか、論理合成で無効になるようなロジックを書いてつぶしておく。
あいまいな設計するから消し忘れとかで苦労する。すなおに全部指定ように設計するのが普通だと思う。
だけど1750ピンもあると大変なのだ
自分は、いくつかの信号について参考となる制約をISE上で作成して、 残りはテキストエディッタで編集する。 UCF制約によってタイミング検証のレポートのされかたが違ったと思う。 あと、合成や配置配線のときの設定もスピードが速くなるときがあるので、 それも記録して、スピードと面積の変化をグラフに取ったりしたこともある。 たしか、スピードが20%違えばグレードが1ランク上がるのと同じくらいだ と思うので。
>>285-286 ありがとうございます。たぶんPACEで作成するのが正解だろうと思っていたので、
ちょっと意外でした。でも、理屈に合っているので、半分?くらい納得です。
今やっているデバイスだと700ピン近くあるのですが、
それでも全部書くのでしょうか? って、未定義はいけないですよね。
やるしかないですね。了解しました。ありがとうございました。
そうすると、
・ucfの書き方、みたいなマニュアルがWeb(Xilinxのページ)にありそうですね?
・前述の、PACEであのような現象が起こるのは、次のような理解で良いでしょうか?
・そもそも、ucfはtext Editorで書くもの。
・なので、PACEで初回のucf生成をしうながしてくれるのは、PACEのオマケ的な機能。
・だから、途中のpin増減に対してもPACEの知るところではない。自己責任で。
・TextEditorで、フルスクラッチ?でucfを書くと、タイプ間違いがでると思うので、
何かucf作成ツールみたいな便利ソフトがありそうな気もするんですが、
どうなのでしょう。みなさん全員がメモ帳、秀丸、VZ、Excelなどから始めるのでしょうか?
(失礼な失念、すみません)
ゴールデンウイーク中なのに、すみません。
>>289 > ゴールデンウイーク中なのに、すみません。
いちいちこういうのいらんから。w
興味のある人が、気が向いたら答えるだけなんだし。
>>287 おまい設計の仕事やっているならやめれ。
1万本あったとしても、粛々と設定していくのが技術者だろう。
>>289 いやなら書かなくてもいいよ。
でも初期の設計時に全部のピンを指定するって事は、空きピンが何本あるかを知る事でもある。
ピンの配置図とかまで作っておくと、どのあたりにどの程度の空きピンがあるかを設計時に知っている事にもなる。
後々ピンの追加などが必要な時にそれが役に立つ。
脊髄反射的に質問しているみたいだけど、少しは自分でxilinxのページを見たほうがいいよ。
質問するよりも早く答えが出る場合がある。
もちろん最初は時間だけ掛かるように感じられるけど、それが勉強だよ。
ucfはPACEで何本が作ってからコピペで作ると早いと思う。
excelとか使う人もいるみたいだけど、自分でやりやすい方法を模索すればいい。
>>292 > 1万本あったとしても、粛々と設定していくのが技術者だろう。
おつかれさん。
定年後の就職先は決まりましたか?
そういえば、最近、サイエンスゼロでシラス大地?の砂から 作ったナノバブルをつくる素材が特集されてましたね。 ハンダボールも数ミクロン単位でしたっけ、作られているみたいですけど、 この先パッケージはどうなることやら。 パッケージのなかの積層ってタイミング検証ってどうなるんだろう。 熱とか問題になりそうで現実味がないのかなぁ。
戦争が廊下の奥に立つてゐた 渡邊白泉 なんちゃって。
質問です。 ISEWEBPACK: 10.1.01 ModelSim : XE V Starter 6.3c 上記環境で回路を作成してシミュレーションをしています。 言語はVerilogです。 テストベンチを下記のように分けて作成しました。 ・テストベンチヘッダファイル (タイムスケール・テストベンチのモジュール名・接続・クロック記述等) ・task文記載ファイル ・テストベンチ本体 テストベンチファイル中身 `include "../test_bennch/aaa/head.v" `include "../test_bennch/aaa/task.v" -------- initial begin テストベンチ本体記述 endmodule ディレクトリ構成 xilinx +--project directory | +--RTL/aaa/rtl.v | +--test_bench/aaa/head.v <- ヘッダファイル +--test_bench/aaa/task.v <- task文ファイル +--test_bench/aaa/tst.v <- テストベンチ ISEにテストベンチを追加しようとすると、include指定したファイルの読み込みが上手くいきません。 ・taskファイルは読み込みが正常にされない(黄色の!マークが付く) Sourceウィンドウに下記2点が出来上がる。(SIMは実行できず) ・テストベンチモジュール名(中身はヘッダファイル) +-RTL ・テストベンチモジュール名(中身はテストベンチ) +-RTL ISEでシミュレーションする時は、1ファイルにテストベンチを全て記載しないとだめなんですか?
>>298 `include "../../test_bennch/aaa/head.v"
>>299 記述を試しましたができませんでした。(黄色三角!のマークが出る)
Verilog include でディレクトリ指定しでもダメでした。
合成用じゃないとinclude文使えないのか・・・?
>>298 `include "./test_bennch/aaa/head.v"
↑
だったりして
試していると思うけど。絶対パスとかも。
勘違い。task.vだけが読めないということか。
>>298 >・テストベンチヘッダファイル
> (タイムスケール・テストベンチのモジュール名・接続・クロック記述等)
+--test_bench/aaa/head.v <- ヘッダファイル
+--test_bench/aaa/task.v <- task文ファイル
+--test_bench/aaa/tst.v <- テストベンチ
を結合したとき、文法に間違いはないのでしょうか?
head.vの内容とかも気になります。
読めてないというエラーメッセージ詳細は?
E:\xilinx-+-aaa_top <- projectディレクトリ
|
+-RTL/aaa
|
+-test_bench/aaa
階層はこんな感じです。
今はテストベンチをprojectディレクトリの下に移動して試行してます。。
現状テストベンチを追加すると
・head.v は読み込まれる(ファイル左に緑色のマーク)
・task.v tst.vが黄色三角(!)が出る。
メッセージ
No design units detected in file
(→Sourceウィンドウ下のFileタブから今回使用するファイルが無いのは確認済み)
(1)テストベンチの追加方法
SourceウィンドウにあるRTLのTOP名を右クリック -> Add source -> ファイル選択
で追加する。(この時、head.v task.v tst.vを指定)
Project -> Add sourceも試しましたが同じ結果。
1ファイル状態でテストの実行ができるのをバラしてるのですが、上記メッセージが出ます。
各ファイルの冒頭にブロック名とか履歴とかコメント入れてるんですが関係ないだろうし。
>
ttp://japan.xilinx.com/support/answers/29629.htm ここにあるtransrateの文はありません
サービスパックを当てて10.1.03にして見ましたが解決せず。。。
こういう時ってなんか初歩的なミスしてそうなんですよね。 もう一度見直してきます。 ノシ
307 :
305 :2009/05/03(日) 21:31:39 ID:jlLOOObD
すいません階層構成がミスしてます。 Eドライブの直下にxilinxのディレクトリがあって、 その下にprojectディレクトリ、RTL、test_benchがあります。 aaa_topの前の"+"から線が分岐してると認識していただければ。
「隕石でも落ちてきて仕事場を破壊してくれないかな〜」 という、よくあるIT土方の嘆きを、 職場が変わってやっと理解できるようになった。 上「他に人いないから」て、うん、そうだけど。 誰かきt
>>309 まずはね、恫喝 逆ギレ 笑顔 なれなれしさ これらのテクニックを身につけような。
>>307 head.v、tst.v
を、いったん削除して、どんなエラーが出るか、とか。
人間は楽しんでいるときに最高の力を発揮する 本田宗一郎
>>310 順ギレ(?)じゃないの?w
最近どんな場面でも「逆ギレ」と表現されてるような気がする。
verilog2001の文法解説本を探しています。 洋書はあったのですが、日本語の物が見つかりません。 日本語のものは、ないのでしょうか?
>>315 いっそのこと SystemVerilog の書籍あたってみては?
付録に、Verilog2001 との差異が載ってることを期待して(笑)
>>316 ありがとうございます。さっそくSystemVerilogの本を探しましたが、
明らかに「2001について掲載」を謳っているものは、見つかりませんでした。
今度町に出た時に本屋さんで探してみます。田舎なのでVerilogの本などありませんです。
ありがとうございました。
さて、一つ教えてください。
未だにブロッキング代入とノンブロッキング代入という言葉が覚えられません。
= と <= の違いは理解していますし、使い分けもできるようになりましたが、
どっちがブロッキング代入で、どっちがノンブロッキング代入なのか覚えられません。
たぶん理由は「ブロッキング」「ノンブロッキング」の意味を、
どう考えると「=」「<=」になるのかが、イメージできないからだと思っています。
どうして「ブロッキング」という言葉が出てくるのでしょうか?
もし、ご存じの方がいたら、ぜひ教えてください。
>>317 プロセスを一時停止(ブロック)して、即時代入するのがブロッキング代入
プロセスを一時停止せず、すべての代入文の評価が完了したときに代入するのがノンブロッキング代入
HDLはプログラムと違って、並列で動作させたいわけですが、シミュレーターは同一イベントで起動された代入文を一つ
ずつしか評価できません。
ノンブロッキング代入文は、評価された段階では、代入の予約をするだけで、代入を行わず、同時起動されたすべての
代入文の評価が終了した段階で、初めて代入が行われます。
ブロッキング代入文は、代入文の評価が完了したときに一連の処理を一時停止して、現在評価した代入を完了してから
次の代入文の評価を再開します。
あーあw
>>318 余計説明難しくなってるやん。
教授の書いた参考書かよ。
321 :
sage :2009/05/11(月) 14:44:00 ID:WrA9ALlc
ザイリンクスのISE 11.1を使ったところ WARNING:Cpld:997 の警告がでました。 ちょっと調べてみたのですが、警告内容を示す説明うぃ見つけることができませんでした。 ザイリンクスのサイトでも、"Cpld:997"に関する情報が見つけられませんでした。 これについて、わかる方はいらっしゃるでしょうか。
322 :
774ワット発電中さん :2009/05/11(月) 20:09:04 ID:VWTuH2JW
プログラマーやってますが40歳にしてHDLに片足突っ込む事になりました。 体力尽きて泥沼に足を取られたくないけど、楽しそうなのでとりあえずスキップで行きたいと思います。
, - ' ´ ̄ ̄ヽ ̄`ー、 / -` ー -ヽ / / \ / / ヽ ,' / i .i 〈ノ、_ ノ , , / i / 、ニニ-<ー'ニ'ァニrj | i ヽ_ヲ_ヽ イ_テハ| ! | ヽ 〉 .! ! ノ /::| ____ i i 、___, /:: / | ト ヽヽニィ /:::: < 説明うぃ? ! i \_ ` ー' /:::::: \____ .| ! ` ー 、 _ ノ:::::::::!:::| .! ハ i::::::::::::::::::::i:::! | ! ! i ト、:::::::::::::::リ i | i リ\ ノ \:::::::::ノ
>>321 うぃ
ttp://japan.xilinx.com/japan/support/jmessages/index.htm メッセージ: cpld - 997
Error during loading TIMESPEC %s = %s, the timespec parser failed to find any instance/net with an expected TNM defined in TIMEGRP %s. The timing constraint will be ignored.\n
TIMESPEC !%1! = !%2! を読み込み中にエラーが発生しました。 TIMEGRP !%3! で定義された TNM が付いたインスタンス/ネットが検知されませんでした。タイミング制約は無視されます。\n\n
:::::::: :: :: ::::: :: :::
::::: :: _____ ::::: :::: :::
::: :::: / ::: \ ::: ::: ::
::: ::::/ :: \:: ::: ::
:::: /::: ─ ─ \ :: ::
::: | :: .(_) (_) | : ::::
::: \ (__人__) ,/ : :::
:: ノ ` ⌒´ \ : :::
/´ ヽ :::
| l \:::
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
質問です。 ISEWEBPACK: 10.1.03 FPGAの内部にBlockRAMを使ってDualPortRAMを作るときの方法として、Verilog HDL上で、 「reg [15:0] mem [4095:0];」と書いて、ISEでBlockRAMに推論してもらう方法と、 CoreGenを使ったり直接RAMB16等と書いて、Blobk RAMを使う方法が考えられると思います。 前者の場合で、教えてください。 前者の場合は、ちょっとした書き方一つで、分散RAMに取られたりするので注意が必要なのですが、 ISEで合成後、果たしてISEはBlockRAMにしてくれたのか、あるいは分散RAMになってしまったのか、 どこを見て判断すればよいのでしょうか? ・回路図にして確認してみたのですが、プリミティブのシンボルに「RAM 4096 X 16」と書かれているだけで、BlockRAMであるかどうかはわかりませんでした。 ・プリミティブのシンボルにマウスカーソルを持っていくと、バルーンに「Mram_mem」と表記され、BlockRAMではないように感じました。 ・Xilinxのライブラリガイドを見て、回路図シンボルと同じものが無いか探したんですが、同じ記号のものはありませんでした。
Design Summary画面から見られるPlace and Route Reportの中に 使用リソースのレポートがある。そこのNumber of RAMB16s 等の 行を見ればブロックRAMがいくつ使用されたかわかる。 それで見当つかないものか?
>>326 ありがとうございました。よくわかりました。今までシンセシスレポートは、エラー/オーニングの
メッセージしか見ていませんでした。すみませんでした。
たぶん、これですね。↓
=========================================================================
* Final Report *
=========================================================================
Final Results
RTL Top Level Output File Name : test1.ngr
Top Level Output File Name : test1
Output Format : NGC
Optimization Goal : Speed
Keep Hierarchy : NO
Design Statistics
# IOs : 78
Cell Usage :
# BELS : 21
# GND : 1
# INV : 1
# LUT2 : 1
# LUT3 : 17
# VCC : 1
# RAMS : 4
# RAMB16 : 4 ←RAMB16を使っていました。
# Clock Buffers : 1
# BUFGP : 1
# IO Buffers : 77
# IBUF : 45
# OBUF : 24
# OBUFT : 8
=========================================================================
オーニングじゃねぇ、ワーニングだぜ!
ウォーニングだよ。
Verilogを勉強しています。 本を見ていたら次のような記述方法ができるみたいで、ちょっとビックリというか感激しました。 VHDLでもこういう記述ができるのでしょうか? 1) reg [7:0] count <= 0; // 初期値付き宣言 2) 14'b11_1111_1111_1111_1111 // _で見易く 3) assign Q = (CS)? data : { (WIDTH-1){ 1'bz } }; // HiZのbitの、パラメータによる幅指定 4) assign { data_U, data_L } = { adr[7:6], Q[3:0], adr[3:2] }; // 3種類の一部分を合成して、2つの部分に振り分ける
(1) signal reg : std_logic_vector(7 downto 0) := "00000000"; (others =>'0')はだめなんだっけ (2) "11" & "1111" & "1111" & "1111" & "1111" (3) constで宣言すればできるの?オレ知らない (4) 頭混乱するだろ。 で、記述できたら、ラーメンでもおごってくれるのかと小一時間
>>330 おいらは Verilog しか知らないけど、1) は、合成できないから注意な。
wire [7:0] sum= a + b; は問題ない。
wire [7:0] sum[0:256] = 0; とか、できますかね?
まちがえました。 reg [7:0] sum[0:256] = 0; でした。 大変失礼しました。
質問です。 XilinxのSpartan3の、内蔵ブロックRAMをDualPortメモリとして用い、 H8マイコンの外部RAMとして、使おうとプログラムしています。 このDualポートRAM(DPRAM)には、clockピンがあります。 例えば、H8は16MHz、FPGAは50MHzの、それぞれClockで動いているのですが、 DPRAMのclockピンは、どちらのclock信号を接続するのが正しいのでしょうか? 1) DPRAMの、H8側clock=FPGA clock、FPGA側clock=FPGA clockが正しい。 2) DPRAMの、H8側clock=H8 clock、FPGA側clock=FPGA clockが正しい。 そもそも、H8側からのWR, RD, ADR, DATAの各信号と、FPGA側clockとは非同期なので、 1)の場合だと、WR, RD, ADR, DATAの各信号が、メタステーブルが発生しないかと心配です。 2)の場合だと、H8側clockをFPGAまで持って行かなくてはならず、何か気持ち悪いです。 もう一つ質問があります。 上記のメモリ領域(FPGA)を、10kワードくらい取りたいと思っています。 こういう場合のメモリアクセスとして、H8側(c言語)のアクセスは一般的にはどのようにするのでしょうか? A) mallocで領域確保 + 配列で行う B) アドレス計算してポインターでアクセス 宜しく指導ください。
>>337 俺ならシンクロナイザで同期化してしまう、H8のクロックをFPGAに持って行っても厳密にはタイミング保証はされないので非同期と一緒じゃない?
けどこの場合、リード時がめんどくさそう。取りこぼしなしでやろうとしたら、ハンドシェイクするしかないのかな?
クロック入力ピン資源とクロック配線資源が余っているなら
H8外部バスの RD と WR (またはそれにchip selectをandした信号)を
内蔵DPRAMのリード/ライトクロックにするのが王道
→いわゆる非同期バスとはリード/ライトストローブに同期したバスのこと
外部バスが十分に遅いなら
>>338 みたいな小細工してもよい
340 :
◆YMO/ALTERA :2009/05/16(土) 08:49:09 ID:j+6/VVIO BE:443977643-PLT(12345)
>>337 > XilinxのSpartan3の、内蔵ブロックRAMをDualPortメモリとして用い、
> H8マイコンの外部RAMとして、使おうとプログラムしています。
内部RAM以前の話で、FPGAの対H8バスインタフェイスを
H8バスクロックで動かすのがいい。キモチワルイことではない。
H8から見れば、FPGAはただの外部バスペリフェラルだ。
DPRAM云々について考えるのはそれからでいいんでない?
つか、I/Oバッファとかじゃなく単なるメモリとして使うなら
ヅアルポートである必然性が全くないんだが…
あえて言えば、DPRAMの特長を利用するなら
> 2) DPRAMの、H8側clock=H8 clock、FPGA側clock=FPGA clockが正しい。
ってことになる。
> 上記のメモリ領域(FPGA)を、10kワードくらい取りたいと思っています。
> こういう場合のメモリアクセスとして、H8側(c言語)のアクセスは一般的にはどのようにするのでしょうか?
C) リンカのマップをいじれるなら、メモリ領域を1セクションにしてごにょごにょすれば
.bss (いわゆる変数領域)とかに容易に転用できる。
> B) アドレス計算してポインターでアクセス
これが愚直だけど一番楽かもね。
> A) mallocで領域確保 + 配列で行う
malloc() の類を使うためには、ヒープ初期化の際(あるいはリンクの際)に
ヒープ領域がわかってないといけないので、(B) (C) が理解できてからじゃないかな?
ところで処理系は何を使うのだ?
いやーだから H8の外部バスは非同期SRAM互換バスでクロック同期バスじゃないって前提を 全てすっとばして、つまらない持論をダラダラ垂れ流されても困ります
H8_SHまでで流した
345 :
774ワット発電中さん :2009/05/19(火) 23:49:23 ID:zIomAx0i
質問させてください。 module test( ・・・ ); parameter dummy = 1 `define MODE dummy `ifdef MODE sample_module1 sample( ・・・ ); `else sample_module2 sample( ・・・ ); `endif ・・・ endmodule とすると、 dummy = 0; dummy = 1; の場合どちらでもsample_module1が実行されるのですが、 どこに間違いがあるのでしょうか。 testの上位モジュールでパラメータ設定によって 下位のモジュールを選択したいなと考えているのですが、、、 ご指導お願いいたします。
`ifdef MODE の意味を勘違いしている。 `define MODE dummy `define MODE 1 `define MODE 0 `define MODE どれでも有効。
質問です。下記2つは同じ回路になると思うのですが、違う出力がでます。 詳細を教えてください。 @ module maskdff(stb, out); input stb; output out; reg q; always @(posedge stb)begin if(stb == 1'b1)begin q<=1'b1; end end assign out = q; endmodule A module maskdff(stb, out); input stb; output out; reg q; always @(posedge stb)begin q<=1'b1; end assign out = q; endmodule です。 結局DFFのクロック信号が0から1になった時だけレジスタに値が入るのですが Aの場合シミュレーションするとシミュレーションを始めた瞬間出力が1を出します。 stbが1でないのにです。なぜですかおしえてください。
だから >always @(posedge stb)begin って言ってるじゃん。
? すみません、よくわかりません。 Aではstbの値は最初0でも出力に1が生じます。 やりたいことは、stbが入力(0から1になる)されたときにqが1を出力することです。 @でそれはできるのですが、回路を考えたときには@で見られるようなif文は不要であると 考えられるので納得がいかないので質問しました。 実際にverilogではなくCADで回路図を描きシミュレーションをした際にはif文に記述されたような 論理回路は使いませんでしたが、望んだ結果が得られました。 もしかすると、always @(posedge stb)beginの意味を誤解しているのかもしれません これは「stbが0から1に立ち上がったときに以下の動作を実行する」という意味でいいんでしょうか?
>>350 @とAもあまりみたことがありません。
こんな感じの回路なら見たことあります。
module maskdff(stb,rst,out);
input stb;
input rst;
output out;
reg q;
always @(posedge stb or posedge rst)begin
if(rst == 1'b1)begin
q<=0'b1;
else begin
q<=1'b1;
end
end
assign out = q;
endmodule
どんな目的のかいろなのでしょうか。
>>347 あまり情報がつかめずわからないので、勘ですが、
>(data_mem[0]が不定値になる)
・RAMの初期値が不定なので、RAMの全ビットに何か書き込んで初期化する。
・XilinxのFPGAはRAMの初期値設定ができたかも。
・たしか同じ信号に'1'と'0'を代入するような記述があると不定'X'に
なったと思う。(文法チェック メッセージか何かがでてるかも)
stbはシミュレーション開始時にちゃんと0から始まってるのか?
354 :
350 :2009/05/23(土) 00:35:36 ID:OV9cTqcS
>>353 始まってるんです。CADではちゃんとでるから、ソフトウェアのせいかな。
>>352 ある回路の一部に使おうとおもっています。
ある出力Aを一度確認したら、その後Aが出力される条件になっても
値を0にする(マスクする)ための回路です。
はじめにAが出る条件になったら、それをこの回路のstb信号とし
そして回路の出力がそれ以降ずっと1となるのでそれを使ってマスクしようというわけです。
なんでAはできないのか謎です。
DFFのクロックのところにstbを入れて、入力は1で固定するというものです。
>>354 DFFに初期値がないと実際は'1'か'0'かどちらになるか
わからないとおもいます。なのでリセットを入れた方がいいと思うのですが。
あと、
シミュレーションの結果をリスト出力するとすべての入力信号は'U'だったとおもう。
もしかして、シミュレーションの始めはが'U'になってて、
>always @(posedge stb)begin
ここで'U'とか'X'とかでもこの条件に当てはまるのかも、
だから なのかも
>Aの場合シミュレーションするとシミュレーションを始めた瞬間出力が1を出します。
>stbが1でないのにです
それにシミュレーションできても合成できない文法かもしれません。
>>354 >CADではちゃんとでるから
といっても、
初期値か0であるとはいえない。
どこで、だれが、どのように0にしている?
みんな甘いなぁ。
>>354 シミュレーション開始直後0秒の状態はシミュレータ依存だから、
とりあえず、リセットするなどして、初期値を与えるべし。
あと、
>DFFのクロックのところにstbを入れて、入力は1で固定するというものです。
ってことはあまりしません。posedge X のX部分はクロックを入れるように。
で if stb==1の時、レジスタに1を代入するように記述するのが普通。
359 :
350 :2009/05/23(土) 11:58:43 ID:OV9cTqcS
みなさんありがとうございます。
>>356 CADではリセットもプリセットもセットしてません。
>>358 システムクロックをいれてif(stb==1)にしたところできました。
ありがとうございます。
グリッチ ひげ スパイク メタステーブル レーシング デッドロック ファンアウト
マイコンとFPGAをつないで、FPGAにPIO(パラレルポートI/O)を作りました。 実機でちゃんと動きましたので、これを増設しようと、 このPIOをインスタンス化して、top層で複数つないだら、 ISEにマルチソースというエラーが出てしまいました。 FPGAはSpartan3、ISE10.1、Verilogです。 modeule top ( inout wire [15:0] H8basu; PIO U1 ( ..... .BUS(H8basu), .......); PIO U2 ( ..... .BUS(H8basu), .......); PIO U3 ( ..... .BUS(H8basu), .......); このような感じです。PIOの内部では、自分のアドレス番地をデコードしてH8のRD信号とANDを取って、 H8basuを駆動していますので、どれか1つだけ出力となり、FPGAが同時に出力になることはありません。 しかし、top階層だけを見ればマルチソースに見えてしまうかのようです。 こういう場合の何か特別な記述があるのでしょうか? あるいは、ISEのどこかの設定によりOKになるものでしょうか?
>>361 どうみてもマルチソースです。ありがとうございました。
>>362 そうなんですか?
実際のハード配線でもバスはそのまま直接接続しますので、
いいと思うんですが。
PIOの中での3ステートの制御部分です。
BUS = ( (自分adr==H8adr) && (CS==1'b0) && (RD==1'b0) )? DATBasu : 16'bz;
>>363 PCBでは許されても、FPGA内では許されない。
手抜きをしないで、inoutはトップのみで、下層には、inputとoutputを別にして、
各モジュールからOutputEnableを出してきて、セレクトしないと駄目。
>>364 どうもありがとうございます。今からちょっとやってみます。
>>364 動きました!!! ありがとうございました。マルチソースなしです。
modeule top (
inout wire [15:0] H8basu;
output wire [15:0] O1,O2,O3;
PIO U1 ( ..... .BUS(H8basu), .myRD(RD1), .......);
PIO U2 ( ..... .BUS(H8basu), .myRD(RD2), .......);
PIO U3 ( ..... .BUS(H8basu), .myRD(RD3), .......);
assign H8basu=SEL(RD1,RD2,RD3, O1,O2,O3);
function [15:0] SEL;
input S1,S2,S3;
input [15:0] BUS1, BUS2, BUS3;
if (S1==1'b1) SEL = BUS1;
else if(S2==1'b1) SEL = BUS2;
else if(S3==1'b1) SEL = BUS3;
else SEL = 16'hzzzz;
endfunction
endmodule
module PIO (....myRD, ....
output myRD;
wire myRD;
assign myRD=((自分adr==H8adr) && (CS==1'b0) && (RD==1'b0));
こんな感じです。どうもありがとうございました。
top階層のセレクタの部分で悩みました。教科書的には「ケース文を使う」と思うのですが、
上記のように3つのRD信号が「バラバラで」上がって来ます。これをケースの条件に
当てはめられませんでした。case(RD1,RD2,RD3)とは書けないですし。
なので、プライオリティがついてしまいますが、if文で書きました。
どうもありがとうございました。勉強になりました。
assign H8basu=(RD1)? O1: (RD2)? O2: (RD3)? O3: 16'hzzz;もアリ
なのかもしれませんが(...)?の多重
・wire a; a={RD1,RD2,RD3};と連接で
>>366 case( { RD1, RD2, RD3 } )
でいいよ。
>>367 おー、ありがとうございます。そうなんですか、と言うことは、
case ( {RD1,RD2,RD3} )
3'b100 : SEL=BUS1;
3'b010 : SEL=BUS2;
3'b001 : SEL=BUS3;
default : SEL=16'hzzzz;
endcase
ということでしょうか? なるほどなるほど。早速、明日やってみます。
どうもありがとうございました。
しかしVerilogって何でもありで、便利な言語ですね。
連投すみません。 なんかHDLが面白く感じてきたので、この際PCを新しくしようかと思います。 使用するアプリの中でISEの動作が一番遅いので、ほぼISE用に買うつもりです。 そこで質問です。 PCのスペックもいろいろあると思いますが、ISEのコンパイルを高速で済むようにするには、 どのようにするのがベストでしょうか。いくつか考えてみました。違うものがあれば教えてください。 ・OSはVISTAよりXPの方が速い。 ・OSは、WindowsよりLinuxの方が速い。 ・CPUは、32bitより64bitの方が速い。 ・メモリをたくさん積んだ方が速い。 ・CPUはCore2Duoが良い ・シングルCPUよりDual CPUのほうが速い。 どうでしょうか? 宜しく教えてください。
>>369 以下、俺の意見。
XPの方が安定しているし、多分速い。
Linux版はバグが多いので、Windows版の方がいい。
64bitの方がいいが、巨大な回路を合成するのでなければ、32bitで十分。
メモリは最低2G、できれば4G。64bitだと8G以上を推奨。
Core2Duoで十分。Cor2Duadなら合成中でも裏でいろいろ出来る。
基本的にシングルスレッドなので、シングルで十分。
372 :
774ワット発電中さん :2009/05/29(金) 00:35:09 ID:sh4DhUCU
verilogの勉強がしたいです。どんなほんがいいですか?
>>370-371 どうもありがとうございました。
現在のところ、いかに大量のメモリをISEに使うか、みたいですね。
安定度の点からXPがいいみたいですが、XPだとメモリが4GB最大。
う〜ん、考えどころですね。
DELLのInspiron? 545が安くてよさげなので、買ってみようと思います。
すでにXPモデルはないみたいなので、ダウングレードのXPインストールですね。
ありがとうございました。
375 :
774ワット発電中さん :2009/05/31(日) 00:23:05 ID:rPVeWP+4
質問です。 Xilinx Virtex4で、ユーザーガイドを読んだのですが、Clock入力ピンの使い分けがよくわかりません。 ・Clock入力ピンとして、_GC_ピン、_CC_ピン、_LC_ピンの3種類があり、 ・GCは、グローバルクロック領域用の入力ピンで、 ・CCピンは「Clock Capableピン」で、クロック入力にもなるピン、 ・LCピンは「Low Capacitanceピン」で、入力容量が少ない入力ピン、 まではわかりましたが、はて、どのように使い分けるものでしょうか。 ISE10で実際にCCピンからのクロック入力でカウンタを構成してみると、 「キミの指定は正しいクロックピンではない」と、エラーになります。 ucfを追加すれば、ウオーニングになりますが。 そこで教えてください。 1.CCピン、LCピンは、どういう時に使うのでしょうか。 2.CCピン、LCピンが、なぜあるのでしょうか。全部GCピンで良いと思うのです。 3.CCピン、LCピンは、どういう時に使うのでしょうか。 4.LCピンという低容量ピンは、このピンだけなぜ低容量を謳うのでしょうか? 5.一般ピンをClock入力ピンにすることは許されないのでしょうか? 一般ピン→IBUF→BUFIO→BUFR→ResionalClockとすれば良いと思うのですが。 4.CCピンを入力にしたら「正しくないピン使い」と怒られ、エラーになりましたが、 ISEにそのような推論をさせない書き方というのが、あるのでしょうか? CCピン→IBUF→BUFIO→BUFR→ を、HDLであえて記述すれば、 ISEのご指摘はなくなるのでしょうか?
>>376 1/3. リージョナルクロックバッファ(BUFIO,BUFR)を使う時に CC Pin を使用します。
http://japan.xilinx.com/xcell/xl52/jp52xcell_15.pdf 2. 全部のピンをGC付きにしちゃうと、配線領域でロジック容量がスゲー減るからじゃないでしょうか。
4. 単に「高速クロック入力に特化した GC/CC ピンは低負荷容量になってますよ」ってだけの話かと。
5. CCが付いてないピンは BUFIO に接続できません。
SerDes等のBUFIO必須なデザインを考えている場合、基板設計時に注意しておく必要があります。
6. シングルエンドのクロック入力を CCピンの「N」側に接続してるとか?シングルエンドの場合は
「GC/CCピン」を指定するだけじゃダメで、作動ペアの「P」側に接続する必要があります。
遅延が大きくなってもかまわないという事であれば、
環境変数「XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING」に「1」を設定する事で警告扱いにできます。
>>377 打ち合わせが長引いてしまい、ご連絡が遅くなってすみません。
ご回答どうもありがとうございました。具体的でわかりやすい文章ですね。
ありがとうございます。
1のpdfはXcellジャーナルみたいですね。以前は取っていましたがやめてしまいました。
大きいダイの中を低スキューでクロックを通すための工夫として、
GCとCCとしてクロックピンが分かれて端子に出ているということのようですね。
FPGAには、GlobalClockピンにしても複数本あり、CCもかなりたくさん複数本ありますが、
こんになにたくさんの種類のClockが必要なものでしょうか?
1つのシステムクロックで処理するというワケにはいかないのでしょうか。
clockが1系統しかないと、一番細かいclockを使ってmsオーダーのタイマを作ると
FFがとてもたくさん要る。だから複数あった方が良い、ということなのでしょうか。
今回のエラーは、6のようにP/N間違いではありません。ちゃんとP側に接続したんですけどね。
結局、ucfに、dedicate...の1行を追加しました。
ISEが自動的にIBUFを入れてくれるのですが、その出力はこのBUFと接続できない等の
制約があるみたいです。かなりつまづいたので勉強してみましたが、
Clock系の縦列接続のルールがわかりません。
もっと精進したいと思います。ありがとうございました。
例えばSDRAMのDQSは8ビットで1本だから、64ビットで8本とかになる。
VHDLを勉強したいのですが、お勧めの書籍はありますか? 地方なので、関連書籍は殆ど置いてなく、ネットでの購入を考えています。 ちなみに、VerilogHDLはマスターしていますので、 VHDLでの書き方とか、文法等を重要視しています。 よろしくお願いします。
オレなんか、10年以上仕事でVerilog使ってるけど、 マスターしたなんて言えないよ。 最近、generate文の便利さが分かって来た。
VerilogとVHDLは、表現が異なるけど考えは同じなので、
Verilogをマスターした
>>380 なら、どの本でもOKなんでは?
>>381 普通、言語をマスターってへんだろ。
そういうことを言うのはだいたい基地だろ
基地は相手にしない
言語って、文法覚えただけでマスターしたって言っちゃう人もいるからなぁ。
>>380 VerilogマスターはやっぱりVHDLのIEEE規格書でVHDLマスターになる
それ以外は読む価値ないよ
>ちなみに、VerilogHDLはマスターしていますので、 現在進行形と見た。勉強始めたばっかり。
何この粘着・・・
おまえら別に>380自分でマスターしたっていってるだけなんだから、 そんなに粘着にならなくてもええやん。
粘着も粘着だけど、380フルボッコわろた。
前にもどこかにいたな、「ソフトマスターしたから次はハード」見たいなこと 言ってたやつ。
2chマスターしたから、次はmixi インターネットマスターしたから、次はGENOへアクセス
HDLに限った話じゃないけど、別に文法全部使えるようになったからマスターって分けでもないしな
うんうん 博士前期過程を2年かけて終了しないとマスターとは言えないよな いまは最短1年で取れるんだっけ?
修士を1年で取得できるやつって、修士2回目でなおかつネタを持っていて論文書くだけという奴だろ。
専門職大学院の事か?
398 :
774ワット発電中さん :2009/06/06(土) 14:33:42 ID:3aypF/lT
就職したくなくて修士行ってるのに1年で修了しちゃ意味ないじゃーん
なら博士の方が
オーバードクターだと仕事したくても仕事ないぞ
就職したくないんだから気にしない気にしない
あげ
みなさん、なんか仕事に関連した資格持ってます? それ、仕事の役に立ってます? すげぇ資格持ってるけど、役に立ってない? 「これを取っておけばよかった」的な資格とそれを実感するときは? さげ
>みなさん、なんか仕事に関連した資格持ってます? ワインソムリエ >それ、仕事の役に立ってます? 仕事の憂さ晴らしするとき、きれいに酔える >これを取っておけばよかった」的な資格とそれを実感するときは? 気象予報士 傘を忘れて濡れて風邪引いたとき
>>403 > みなさん、なんか仕事に関連した資格持ってます?
玉掛、ガス溶接
> それ、仕事の役に立ってます?
クソでかい機器を運ぶようなことになったら役に立つことも
ないでもないかもしれない
> 「これを取っておけばよかった」的な資格とそれを実感するときは?
小型移動式クレーン
付いたトラックが走ってるのをみたとき
>みなさん、なんか仕事に関連した資格持ってます? 二種免許。 >それ、仕事の役に立ってます? 全く。 >「これを取っておけばよかった」的な資格とそれを実感するときは? 医師免許。 仕事がなくて困った時。
407 :
403 :2009/06/09(火) 23:02:14 ID:oZFfP+jF
> みなさん、なんか仕事に関連した資格持ってます? 教職 > それ、仕事の役に立ってます? 意味不明な事をほざくドカタ上司避けに多少は・・・ > 「これを取っておけばよかった」的な資格とそれを実感するときは? 電気工事士 妻に「電気の仕事してるくせに、壁コンセント一つ追加できないの。」と云われた時
>>407 関係ない話振るんじゃねぇ
このスレじゃ少し微妙だけど、ソフト系の新人なら1〜2年目で基本情報とるだろう
3〜5年以内に応用情報、エンベデットは少し難しいかな
RTL系の資格があればいいのにね
自社グループのとかじゃ取ってもあまり役に立たないし・・・
>>408 あれは欲しいけど、工業高校でもないと、実技必要だから無理だよね
どちらかと言えば、電検三種の方をとっておけば良かったかな・・・
つ 「STARC認定 設計技能検定試験 ESA」 役に立つとは思えないけどな
他人の書いたVerilogソースコードがなかなか読めるようになれず、悩んでます。 RTL記述から機能が見えてこないというか・・・ (設計書は概略的なものばかりで、詳しいことは書かれていません) C言語などのソフトのコードなら理解する力はあるのですが。 RTL記述から機能を理解できるようになるには 何かコツはあるのでしょうか? ソフトのコードの読解力とはまた違った能力が必要ですよね・・・
>>412 それ俺も入社当時同じ経験をした。
Cはシーケンシャルだけど、Verilogはパラレルだもんね。
上から下の順に読んでも見えてこないのは仕方が無い。
で、今思うことは、そのソースコード&設計書を書いた人が悪いってこと。
設計者には、後々のことを考えて容易に引継げるようにしておく責任があると思う。
オナニー設計は仕事といわない。
で、コツだけど、機能をスムーズに理解するとき、
概略的なブロック図を頭に入れてから読むのとそうじゃないのとでは
雲泥の差だと思うから、まずは最低責任としてブロック図を描いてもらうべし。
仕様書見て、in/outの信号を押さえて、ブロック図みて、シミュレーションして、 それでも分からないコードなんか解読しても時間の無駄。
>>413 > Cはシーケンシャルだけど、Verilogはパラレルだもんね。
> 上から下の順に読んでも見えてこないのは仕方が無い。
言語でしかロジック設計したことが無いとそうなるんじゃね?
つか、将来的にはどんな実回路になるか見当もつかないコード
が普通になったりして。
>>415 今どき実回路で設計できても自慢にならないよ。
むしろ無駄に時間かかって迷惑だからやめてほしい。
古い人に多いよね。そういうこというの。
実回路で設計したつもりが、製品でその通りの回路になってるかなんて誰が保証してくれるんだろう。
>>416 だからって何も知らないほうがいいの?誰が保証してくれるの?
>>416 このスレみてたら、どんな回路が出来るか分からずむちゃくちゃな記述して、動きませんって質問が多いことに気づけ
>>416 >その通りの回路になってるか
それを確認しないで、どうするの?
僕の肛門も論理合成されそうです><
>>416 >実回路で設計したつもりが、製品でその通りの回路になってる
等価な論理回路になればOKじゃね
記述に関してはかなり個人差が大きいからね。 C言語だって差はあるんだし。 ブロック図を書いてから記述を始めたほうがいいと思うよ。 使う信号と要らない信号の切り分けにもなるし。 あと、先頭でぜーんぶ wire とか reg とか宣言するのはやめて欲しい。 使うときに宣言しようよ。
>>423 >あと、先頭でぜーんぶ wire とか reg とか宣言するのはやめて欲しい。
>使うときに宣言しようよ。
俺はむしろ最初に書いてくれないと訳わかんなくなる。好みの問題だけど。
コーディングスタイルと言うよりは、コーディング規約で決めるべき話かな。
必要なものだけ宣言しろ、って事では?
中身を追っかける気はないから 先頭にもれなく、かつ、余らないように 記述しておいて欲しい。
各信号の値の意味を詳しくコメントしてほしいな。 ということで、Quartusで日本語使えないのが不便
>>426 気が合うなぁ。同意見。
まぁ、余った信号はシミュレーションしたら赤くなるからすぐわかるけどね。
逆に、足りない信号は1ビット信号と思われてバグる、ってのがVerilog最大の欠点ですよねぇ。
同一処理が扇状に広がって行くような演算器の割り振りとかパイプラインの割当とか、
シーケンス(というか状態推移?)なんかはブロック図レベルの仕様を意識しないと
コーディングしづらいかもね。
>>427 そんなあなたにVHDL(違
FPGAは、回路図入力でも記述可能だが、回路規模が大きくなるとHDLの方がよいと言われますが、 それはなぜでしょうか? 回路図だってインスタンシエーション(ライブラリ化?)できます。 そもそもHDLで書くときでも、回路図を意識して書いてますよね? だったら、はじめから回路図で書けばいいと思うんです。
移植性だろ HDLならどの処理系にも楽に移植可能できるが (そのための標準規格) 回路図だと処理系依存になってしまう
432 :
412 :2009/06/16(火) 07:16:56 ID:+RQw/w7p
皆さんありがとうございました。(特に
>>413 さん)
大変勉強になりました。
前設計者にはブロック図を残してもらえるよう頼んでみます。
>>430 ステートマシンを書くにはHDLのほうがいい。
ってか、回路図で書きたくないよ。
あとは演算系とか。
上位モジュールの結線だけなら回路図のほうがいいかも。
信号名を考えるのも面倒だし。
>ステートマシンを書くにはHDLのほうがいい。 別に、人様がかかんでも、 まともな状態遷移図があるなら、誰が見ても納得できるHDL出力してくれる。
つか、ツールが使えて便利じゃん>>HDLでステートマシン
すみません。 ちょっと困っていて、教えて欲しいのですけど。。 signal A : std_logic; の信号を A = A + 1; したのですが、エラーとなってしまいます。 どうしたら、よいのでしょうか。。
A<=A+1;
あ、ごめんなさい。 記述は、A<=A+A;になっています。 でも、 Line 26. + can not have such operands in this context. こういうエラーになるんです。 + が使えない?ということでしょうか。
× A<=A+A; ○ A<=A+1;
コンカレント文脈だからだろ シーケンシャル文脈(processブロック内)ならできる
あ 違った std_logic型じゃ + は使えないよ 1ビットに対して加減算って変だろ? std_logic_vector型ならば + 使える
>>439 vectorかどうかもあるかもしれないが、「A」はstd_logicで「1」はintだよね?
VHDLは型に対して厳しいから、「1」を「'1'」にしてみるとか、Aをintにしてみるとか色々
>>428 先頭に書くのもそうだけど、
inputをズラー、outputをズラー、wireをズラー、regをズラーっと
機能別もへったくれもなく、無意味にソートしてる人は、読む人のことを考えてないなと思う。
>>435 HDL Designerもつかったことないのかバカタレ
436です。 以下、試した記述です。 ・std_logic; 〜 A<=A+'1'; ・std_logic_vector( 3 downto 0); 〜 A<=A+1;およびA<=A+'1'; どちらもうまくいきませんでした。 自分でも試して、いろいろ調べてみます。 お手数かけてすみません。 ありがとうございました。。
つぎはintで試してみるんだ!(w
ieee.なんとか、いうのを入れ忘れてるんじゃないの?
質問なんですがverilogを書くツールって ないんですか?
>>448 ある。 PCとテキストエディタと自分の手。
紙、鉛筆、消しゴム。これ最強ツール そして、誰かにPCに入力してもらう
>>445 エラーメッセージは変わったかい?
+ can not have such operands in this context. のままかな?
やっぱりテキストファイルしかないのか?
テキストファイルはツールじゃないだろ。
>>451 いえ、ぜんぜん(笑)
問題箇所の検証用に切り抜きで試しているんだ。
それをちょっと貼り付けて見ます。
entity TEST01 is
port (CLK : in std_logic;
RESET: in std_logic;
Y : out std_logic_vector (3 downto 0) );
end TEST01;
architecture DATAFLOW of TEST01 is
signal A: std_logic_vector (3 downto 0 ) := "0000";
begin
process ( CLK , RESET ) begin
if ( CLK = '1' ) then
A <= A + 1;
end if;
Y <= A;
end process;
end DATAFLOW;
俺、馬鹿なのかな。
自身なくしそう。。
ごめん!わかった! IEEE.STD_LOGIC_ARITHとIEEE.STD_LOGIC_UNSIGNEDが無かった。 記述ばっかり見てたよ。 ありがとう、ごめんなさい。
>>454 ,455
クロックの記述も間違えているぞ。
if(CLK' event and CLK = '1')then
これで書かないとクロック同期にならない。
>>456 本ソースでは、同期するようにしてあります。
もっと勉強します。。
ありがとうね。
>>457 ,
>>454 現状でやっているつもりってこと?
なんかレスでは問題ないような風に読めるんだが?
。が2つ使われていたりしているのは見苦しい。日本語もう少し勉強した方がいいよ。
おまけで指摘するけど、RESET信号を使っていないのもダメ。
書いていないなら指摘しないけど、process文で記述しているんだからコードの中にちゃんと書けよ。
>>455 で自分で理解したように書いているけど、
>>447 できがついたんじゃね?
459 :
447 :2009/06/18(木) 18:48:38 ID:Th8XoeHY
まぁいいんでね? 本人ヨシとしたんだし。身にならなくて困るかどうかは本人次第。 「ieee.なんとか」じゃ理解できなくて読み飛ばしてたかもしれんし。 あんなレスでも、ちゃんと読んでくれてる人もいるのが判ってよかったよ。
質問です。 1からnまでの和を求める回路を作れという課題が出ました。 トップモジュールは与えられています。 まだverilogは始めたばかりで 手が付けられないのですがヒントだけでも教えてください。 module top; reg tclk, tres; reg [7:0] tn; wire [7:0] tresult; wire trflg; sumint sumint1 (tclk, tres, tn, tresult, trflg); initial begin $dumpfile("sumint.vcd"); $dumpvars(0, top); tclk = 1'b1; tn = 8'd10; tres = 1'b1; #2 tres = 1'b0; #2 tres = 1'b1; #30 $finish; end always #1 tclk = ~tclk; endmodule
>>460 まずは紙と鉛筆でどんな波形が欲しいか書いてみるべきじゃね。
・tresが0だったらゼロクリアするアップカウンタを作る。
・tresが0だったらゼロクリア、それ以外はクロック毎にアップカウンタの値を足し込むレジスタtresultを作る。
・アップカウンタの値がtnと等しくなったらtrflgレジスタを0→1にする。
nが小さな値という事ならROMにしちゃうのも手。
・ Excelやなんやらで入力nに対する答えを全て計算しておく。
・ case文で入力nに対する答えをレジスタに入れて返す。
たぶんTop Moduleの不備を指摘する事も課題の内に入ってるんだろうなぁ。
sum=0; for(i=0; i<n; i=i+1) sum=sum + i;
間違えた sum=0; for(i=1; i<=n; i=i+1) sum=sum + i; でした
>>464 普通はn(n+1)*0.5で求めるだろ....
結果が8ビットしかないから、有効な入力は0〜15だけだね。
>>465 そうだけど、何を計算してるか分からないのはどうかと思う。
普通に分かるだろう。というか、分からないってどんだけ?
ウハッ、俺もパッとみて分かんねーw 言われても[0..n-1]or[1..n]で悩む。
入力が8ビットくらいだったらテーブルで持っちゃえ、ってのはだめ?
だめです。将来最大32bitまで拡張される可能性があります
32ビットなら、4T で済むじゃん
>>471 K=2^10
M=2^20
G=2^30
T=2^40
一部地域を除く
VHDLとverilogHDLをどちらから勉強したらいいですかね? ABEL + GAL の時代から久しぶりに、さわる者です。 とりあえず、トラ技の付属基板でI2Cスレーブにトライしてみるたいと思っているのですが。
回路図入力からで
>>475 自分は完璧であると信じられるのであればVerilog。
ミスが多いのであまり信用できないのであればVHDL。
これからはシステムC 10年後には真っ当な合成が出来るようになってる・・・といいな
とりあえずシステムverilog 案件がやって来たら・・・どうしよう。
>>475 俺、ABEL + GAL って知らんのだが、
>>475 は相当なおっさん、いや、引退世代の人?
書き込み時間からして引退世代かな。で、老後の暇つぶし・趣味に電子回路いじりってとこ
ま、趣味なら見て目でこっちがよさげだから、これでな感じで選んでいいんじゃないかな
>>475 どっちも大して変わらないから、適当に選ぶのが良いかと
LINT-checkをかける環境があるなら、迷わずVerilogHDLだと思う。
PALのヒューズマップを手書きしてた世代もまだ現役だろ(w
>>483 もう、実務隠居世代だな。
>>484 PALのヒューズマップを手書きしてた世代は現業できない、経営できない
のダメポ現役。でも、給料は実力をはるかに超える額を貰っている会社の穀潰し
という事にして「俺はまだマシ」だと思いたいんですね。 哀れです。
>>480 人とのコミュニケーションがうまくできない馬鹿造か、若いふりをしているあほ爺のどちらかだな。
多分使っているのはVerilogのパターンだと思う。
厳格にきっちりと書かないと動かないVHDLは書けない。
>>486 その通り。俺はまだマシだ。
ちゃんと給料分以上の仕事を強制的にさせられている
現役なら給料分ぐらいの仕事はして欲しいよ
475です。 私のスペックは、30才後半でSE兼回路設計、ファームソフト開発です。 今までに使用していたハード資産があったので、FPGA,CPLDを使用せずにCPUで行っていたのですが、そろそろディスコンの風が吹きそうな状況で、新規開発に至ってます。 とりあえず、VHDL + MAXUで作ってみたいと思ってます。今、MAXUのマニュアルを熟読中です。 I2Cマスター側はSH7137でデバック中です。 MAXU側のデバックは、やっぱり、シュミレーターにかけてから実機に流して確認になるんですかね〜? シュミレーターの時も、言語はVHDLの方がデバックが楽なんですかね〜? すみません、諸先輩方の生の意見聞かせてください。
改行ばっかりでスカスカなやつだな。 さぞかしお頭の中も・・・
>>489 普通は自分で初心者だと思うなら、 趣味レータ でデバックしてからだろうね
事あるごとに唐突に上の世代を罵倒してる奴って何か根深いコンプレックスでもあるのかね? 心の闇抱えてるのはわかるがここで排泄しないでくれるか?
不況だからだよ、きっと景気よくなれば直るだろう。
>>489 兄貴ほどの回路設計のベテランなら、I2C程度ならSimなしで即実機動作でOK
で、ソフト開発のベテランでもあるから、Verilogの方がC言語っぽくて
コーディング効率・デバッグ効率がVHDLよりはるかに良いですよ
Verilogってコンカレント動作対応のC言語みたいなもんだって感じで、兄貴ならすぐに対応できる
475です。 とりあえず、VHDLでテストを行ってみて、できる事がわかったら verilogHDLで行いたいと思います。 現在はテストボード(I2C to 32bit入出力)の手配線ジャンパーが終わった ところで、MAXUに火を入れたところです。 が、ちょっと問題がありますが、その問題は他スレで質問します。 みなさんありがとうございました。
シュミなら自分のやりたいようにやればよかろう
EDAツール使ったルーチンワーク設計なんかおそらく近い将来日本からほとんど姿消して新興国に移管してしまいそうな気がする。 実際、EDAに絡んだ中華サイトとかの熱気とか凄いんだよな。翻訳ツールで翻訳しながら見てるけど、 日本でやってるエンジニアも近々異動させられるんじゃないかい? 日本でモノつくっても今の値段じゃ勝負にならんのよね。
>>497 そんな事あるわけない。
客の望む物を聞き出して作り上げる地道な仕事を中華が出来るわけない。
いや、言い過ぎた。出来るやつはめったにいない。
中華はもうじきバブルが爆発するから、あまりのめりこむと痛い目にあうよ。
経費が安いといって中華などにアウトソーシングした話を良く聞くけど、日本の現場はその尻拭いでひどい事になっている。
ちゃんとできる会社に最初から頼んだほうが安く確実なケースはすくなくないと思う。
しかし、上の方としては失敗したとは言えないので、負担現場が背負い込んでいる。
ルーチンワーク設計を若手にさせて経験を積む必要があるから外にばかり出せないよ。
多少は経費的に赤字かもしれないが、経験をつませる事でまともな技術者が生まれる。
某大手メーカとかはアウトソーシングしすぎて中堅どころの技術者が本当の技術じゃなくて、プロデュースなどのスキルしか上がっていなくて、トラブルになった時に原因究明できなくなりつつある。
中共のコピー商法にはひどいものがあるけど 対岸の火事と日本も遠巻きに見てる場合じゃない 最近の学生は課題でも論文でも 平気でネットからのコピペを提出する時代
500 :
774ワット発電中さん :2009/07/16(木) 14:18:37 ID:FarOQJ9O
バブル前夜は名実共に技術立国だったが バブル以降はピンハネ立国に成り下がってしまった
>>498 >ルーチンワーク設計を若手にさせて経験を積む必要があるから外にばかり出せないよ。
>多少は経費的に赤字かもしれないが、経験をつませる事でまともな技術者が生まれる
ちがうんだなぁ。アウトソーシングじゃないんだよ。
日本人スタッフを現地に行かせて現地採用した人間といっしょに設計させんの。
おそらく再チャレンジの3G携帯電話輸出あたりはその流れだ。
ルーチン設計でいい開発設計は国外、日本側との御用聞き要員といってもいい。
国内では公的スペックを作るようなルーチン設計では対応できない研究開発部門だけが残る
>そんな事あるわけない。
そうおもってんおはおまえだけ。おめでてーな。
大体、客の仕様を聞き出してそれぞれ個別にカスタマイズする部分があまりに多いことが、
日本のソフトウェア産業の収益が上がってない最大の問題ってことがわかってんのか。
世界の流れは、
"スタンダード仕様のものを客に慣れさせる"
だ。
>ルーチンワーク設計を若手にさせて経験を積む必要があるから外にばかり出せないよ。
>多少は経費的に赤字かもしれないが、経験をつませる事でまともな技術者が生まれる。
まともでなくてもういいんだよ。情報家電なんかじゃもう稼げないんだから。おそらく電機3社は重電の方により舵を切らざるを得ない。
東芝のFLASHもおそらくサムに負けて、インフラと重電に賭けざるを得なくなるだろ。
シャープの液晶もサムとLGのウォン安見てるといくら品質をうたい文句にしても、限りなく勝ち目がない。
強いのは品質にこだわる日本国内だけ。だからこそ将来不安で太陽電池の電力インフラにも色気見せてるんだろ。
お前のいうチャンコロの御用聞き資質はともかくあいつらのサイト見てると、決してレベルは低くない。
何より活気が日本と全然違う。その証拠にEDAメーカ自体日本より中国対応を優先しつつある。
>>500 そのバブル前後の電気業界の好調ぶりも、
ライセンス生産の歩留まりと、ビデオなんかの地道な機械技術が主体
DRAMなんか回路技術じゃなくて設備産業が強かったからだし、
純粋なエレクトロニクスで日本が世界をリードしたことなんてコレまでないんだな。
全く新規の技術開発という意味では武器を輸出できるようにして、
軍事技術開発を国内産業が主体でとりくむことだと思うんだがどーかな?
輸出できないと自衛隊だけではあまりにも市場規模が小さすぎる。
多くの日本人は在日について嘘の情報を教え込まれており、連中の本当の正体を知りません。 在日朝鮮人、韓国人が日本人から嫌われているのは当たり前なんです。奴らは日本人が敗戦の悲しみをこらえ 必死になって祖国の再建を目指して努力していたときに、土地を不法に占拠したり、日本女性を強姦したり 「俺達は戦勝国の国民だ。」と威張り散らして警察官にさえ暴行を加えた連中なんだから。 奴らはやがて、日本に秩序が戻り自衛隊もできて自分達が思うように暴れることができなくなると 「ウリたちは日本人に差別され続けて生きてきたニダ。」などとお得意の捏造話を語るようになった。 こんな連中を日本国内において置くだけでもずいぶんお人よしなのだが、奴らはそれを見てつけあがり 被害者の振りをして要求すればたいていのことは押し通せるということに味を占めてしまったのだ。 こんなになってしまったのは、社会党を始め自民党の中にもいる売国議員や朝日新聞、日教組などの 捏造宣伝によるところも多い。 国民が在日の正体をしっかりと理解して反日的なマスコミの記事に批判的に対処できるようにならなければ ならない。最も良いのは、朝日、毎日、中日、西日本などの明らかに反日的な新聞は購読しないことだ。
なるほど、オバマだったのね。確かに色があればわかるね。 オバマ、フランス、北朝鮮、韓国、 このあたりは、内心ではチャイナはやっかいだと思いつつ、 政府が経済的な面であまり対立するのは得策ではないと判断しているところが共通してるな。 ジャッキーに関しては本心がどうなのかわからんな。 中共や在外チャイナ人からの圧力があるからかもしれんし。 香港自体も民主化を求めると言う面からみれば中共嫌いに見えるかもしれんが、 金儲けできればそんなことはどうでもいいと考えている人間が多いのも確か。 こういう奴らは台湾や日本にもたくさんいる。 結局全ての問題の根は、チャイナ経済なんだよな。 ここが崩壊すれば事態がかなり動き出すと思うんだが。 周りの国がとばっちりを受けない形でチャイナ経済を崩壊させることが この問題解決の一番の近道だと思うが、なにをどうすればいいかが難しいね。 チャイナ製品、チャイナ産製品の不買運動を続けていくぐらいしかないのかな。
そういう話、いまどきは民主党絡めるのが流行り。 ま、盛大にスレ違い。
>>501 スレ違いだがとりあえず測定結果待ちなので相手してやろう。
>日本人スタッフを現地に行かせて現地採用した人間といっしょに設計させんの。
なんで日本人がわざわざ外国まで出向いて仕事せにゃならんのよ。
それくらいだったら呼んだ方が安い。
>国内では公的スペックを作るようなルーチン設計では対応できない研究開発部門だけが残る
日本語ちょっとおかしくない?
頭がドーナッツなんだね。
幸せ回路発動中とはうらやましいよ。
研究開発部門だけで物はできんよ。
>>そんな事あるわけない。
>そうおもってんおはおまえだけ。おめでてーな。
>大体、客の仕様を聞き出してそれぞれ個別にカスタマイズする部分があまりに多いことが、
>日本のソフトウェア産業の収益が上がってない最大の問題ってことがわかってんのか。
>世界の流れは、
>"スタンダード仕様のものを客に慣れさせる"
というおごりを持つ会社は淘汰されていくよ。(藁)
あんたの会社と取引がなくてほんとうれしいわ。
ソフトウェア産業とここでの話される設計は別物。
回路設計なんて、カスタマイズの塊だろうが。
>まともでなくてもういいんだよ。情報家電なんかじゃもう稼げないんだから。おそらく電機3社は重電の方により舵を切らざるを得ない。
>東芝のFLASHもおそらくサムに負けて、インフラと重電に賭けざるを得なくなるだろ。
>シャープの液晶もサムとLGのウォン安見てるといくら品質をうたい文句にしても、限りなく勝ち目がない。
>強いのは品質にこだわる日本国内だけ。だからこそ将来不安で太陽電池の電力インフラにも色気見せてるんだろ。
>お前のいうチャンコロの御用聞き資質はともかくあいつらのサイト見てると、決してレベルは低くない。
>何より活気が日本と全然違う。その証拠にEDAメーカ自体日本より中国対応を優先しつつある。
なんだ、チョンだったのか。
東芝はSUNDISKと一緒に高速SSD技術を使ってHDD市場を食っていくつもりと思われるけどサム損はなにか特許あったけ?
サム損はDDR3の歩留まり上がったの?色々発表はあるけど、現物出てきていないのはなぜ?
LGはまずまずだけど、サム損のはひどいのが多いと聞くけど改善した?
won安になると原材料の輸入が大変になるけど大丈夫?
この間中華製激安液晶を見に行ったけど最悪だったよ。
スペックはすごいんだけど、実際に表示される画面はヘロヘロ。42インチでフルハイビジョンだったけど、37インチの国産の方がはるかに画質が上。
活気というか、中華は今バブル末期のジョーカーのなすりつけ合いの真っ最中だろう。
EDAが中華対応しよう日本対応をサボろうと関係ない。
所詮道具だ。道具の出来が多少悪くても良いものを作り上げるのが日本人ってやつだよ。
334 :可愛い奥様:2007/06/26(火) 09:46:19 ID:raxdPvfD0 OLだった頃、会社で働いていた日本に超詳しいベルギー人が言ったことに納得してた。 日本文化は身内受けの凝り性文化だそう。 外国文化に負けまいとしているのではなく、 世に意図的にインパクトを与えようとしているのでもなく、 今ここにいる同じ価値観を共有する仲間からの喝采を浴びたいと考える。 その結果、同じものを志す者同士の「これすごいだろ、おもしろいだろ」合戦が始まり、 そこで生み出される物が自然と研ぎ澄まされていく。 でもその競争は、敵対的なものではなく、お互いを尊敬しあいながら、静かに深く進行していく。 そしてある日、偶然目撃した異文化出身の人間(外国人)から、 それがすごいものであることを知らされる。 ほとんどの日本人はその日が来るまで、自分たちが作り上げた物がすごいものとは知らない。 もろもろの伝統文化、芸能、電化製品、アニメ、他、みんな同じパターンで世界に広まっていった。 だから、日本がここまで発展してきたのも必然的なものだし、 この精神が衰えない限り、これからも日本は誰に頼まれることもなく、 知らないうちに勝手に世界にインパクトを与え続けていくだろうと。
>>507 > 日本文化は身内受けの凝り性文化だそう。
逆に考えると「身内」以外には興味がないということ。
残念なことに、今の日本では団塊世代という一つの世代が
日本そのものであるかのごとく膨張してしまっているために
団塊世代の中だけで競争が行われている。
しかも、団塊世代は枯れた年寄りだからそれは競争と言うより停滞だ。
日本を救いたいなら団塊世代を日本の表舞台から排除することから始めなければならない。
なんだRubyのことか
>>509 Rubyコミュニティがうらやましくて仕方がないんですね。
ユダヤ人がうらやましくて仕方が無かったドイツ人みたいに。
ヘ_ヘ ミ ・ ・ ミ < ということにしたいのですね ( ° )〜
>>506 >なんで日本人がわざわざ外国まで出向いて仕事せにゃならんのよ。
>それくらいだったら呼んだ方が安い。
バカかお前。ちょっとは新聞でも読め。アホクサ
>日本語ちょっとおかしくない?
なんかおかしい文章かと思って読みなおして全くおかしくないんだが。あ、おまえのオツムがおかしかったか。
その程度の読解力じゃスペック読めてねぇだろ。どうせ突っ返されて、手直しのオンパレードだろお前。
>回路設計なんて、カスタマイズの塊だろうが。
ソフトウェアと違うことほざきながら、新規設計の部分じゃなくて、流用とも言えるカスタマイズを強調するってアホかお前。
>なんだ、チョンだったのか。
>東芝はSUNDISKと一緒に高速SSD技術を使ってHDD市場を食っていくつもりと思われるけどサム損はなにか特許あったけ?
>サム損はDDR3の歩留まり上がったの?色々発表はあるけど、現物出てきていないのはなぜ?
>LGはまずまずだけど、サム損のはひどいのが多いと聞くけど改善した?
>won安になると原材料の輸入が大変になるけど大丈夫?
>この間中華製激安液晶を見に行ったけど最悪だったよ。
>スペックはすごいんだけど、実際に表示される画面はヘロヘロ。42インチでフルハイビジョンだったけど、37インチの国産の方がはるかに画質が上。
>:活気というか、中華は今バブル末期のジョーカーのなすりつけ合いの真っ最中だろう。
>EDAが中華対応しよう日本対応をサボろうと関係ない。
>所詮道具だ。道具の出来が多少悪くても良いものを作り上げるのが日本人ってやつだよ
それなりでしかない製品を世界中にばらまくのがサムの手法だ。現に日本の半導体、液晶は完敗状態。
それで着実にシェアとってるんだから会社として何の罪悪感もない。
HDD代替のSSDにしてもHDD市場を食わなくてもサム自身HDDの製造メーカだろが。適当なところで、市場投入すれば痛くもかゆくもない。
むしろ急速なSSD市場の立ち上がりはHDD事業にとっては迷惑なんだよ。
DRAMにしろ対するエルピーダは公的資金の注入をあおぐへろへろ状態。政府からもらった金をいつ使うかしらんが、設備つくったところで、
今の経済状況からして、生産量あげるわけにもいかず、サムとすりゃゆっくり対応してても痛くもかゆくもないだろ。
そういう日本の不利な現状を恥ずかしげもなく逆にアドバンテージであるかのように書き綴って、お前は電気業界で飯食ってんのかホントに。
現状把握のかけらもできてない。業界がバラ色の将来が待ってるならなんで、電気系の学生の偏差値がここまで落ちてるか説明してみろマヌケが。
しかし、コイツ >>ID:hQYrpXfr >なんで日本人がわざわざ外国まで出向いて仕事せにゃならんのよ。 >それくらいだったら呼んだ方が安い。 まったく、仕事の仕方を知らんのだな。よっぽどの下請け仕事しかさせてもらってない吹けばとぶよな糞企業勤務と見た。 マーケットにできるだけ近いところで設計しないと競争に勝てるスピーディーな対応なんてできねぇんだよ馬鹿たれ。 よっぽどの汎用品でもない限り、日本であぐら書いてて、市場の要求なんか読み取れるかアホ。 てか、こんな話すら、おまえの会社じゃしねぇってか?マーケット動向になーんも関係ない下っ端ドカタちゃんよ。
でも発展途上国で働くくらいなら転職するよ
俺は国連のインターンでアフリカ行ったぞ
あくまでも一般論だが 中華の人は威圧感のあるお目付け役を駐在させないと全然働かないよ そこらへんがオフショア開発のノウハウ
>>516 自由意志を育む環境を揃えず、そういう方法論が最良だとか言ってるやつは
目先のことしか考えられない団塊世代に多いね。
来年就職でHW設計の仕事に就く予定なんですが、HDL書く人は結構暇なんですね HDL書く仕事に希望出したいと思います
暇で給料もちゃんともらえてクビにならないならいいけどね
マジで、暇で給料をもらってる奴はクビにすべきだと思うねぇ。 それを指摘したら「俺らは社員を教育するために必要だ」などとほざきやがる。 ・・・反面教師ですか?w いや、あんたらいないほうが世の中うまくいきますからw
韓国は潰れて、中国のバブルははじける。数年前から語り継がれる伝説ですね。
伝説っていうか、願望
>>511 そのキャラとその言葉って同一人物だっけ?
>>513 >マーケットにできるだけ近いところで設計しないと競争に勝てるスピーディーな対応なんてできねぇんだよ馬鹿たれ。
マーケットって中国ですか〜?
確かに中国市場は見た目はうまいが、利益はどうなんだろうね?
すぐに製品をパクられて投資金額回収できるの?
どこかで中国製の闇携帯を輸入禁止しているところなかったけ?
>>512 >バカかお前。ちょっとは新聞でも読め。アホクサ
新聞だけ読むと馬鹿になるぞ。
新聞はフィルタリングが強すぎて必要な情報が欠如しているからさっくりと見る程度で十分。
半島と中華にマンセーしているみたいだけど怪我しないようにがんばってね。
>>522 そうそう、伝説だから信じちゃだめだよ。
TVでダメです。と流れた時にはもう手遅れだから。
アイスランドのデフォルトだってちょっと前ににサムライ債発行してアボーンですから。
日本のバブルもはじけるはじける・・・・とうわさされ初めてから1−2年は続いたくらいだから、中国は上海万博までは全力でがんばるかも?
韓国だって貿易収支は黒字になっているくらいだから、まだまだ大丈夫。
はじけて初めて伝説が現実になるんだよ。
今の中国はドーピングしまくって強いように見せているだけ。
日本のように公害対策とかまじめにやっていない。
だから利益を上げられる。
日本も昔はそうだった。いろいろ痛い目にあって今がある。
中国は日本よりもやっている事がひどそうなのではじけた後の処理は大変だろうね。
塩の偽物とか売られているそうだからすごいよね。
ながい。
活気というか、中華は今バブル末期のジョーカーのなすりつけ合いの真っ最中だろう。
韓国は通貨スワップ絶賛発動中。
529 :
774ワット発電中さん :2009/07/17(金) 19:34:45 ID:7vHmciGz
Verilogについて教えてください。 同じモジュールを複数インスタンスしたいのですが、 generateを使った記述をおしえていただけないでしょうか?
いいとも!
531 :
774ワット発電中さん :2009/07/18(土) 14:49:29 ID:1FESTssW
やっぱりスパコン開発なんて政府にいやいやつき合わされてたんだな。 しかし、数値計算用なのにベクトルプロセッサ無しのSPARCベースのスパコンってどーなんよ?
ベクトルプロセッサとかウンコだろ。 GPUで十分。
533 :
774ワット発電中さん :2009/07/18(土) 17:48:02 ID:1FESTssW
は? GPUなんてベクトルそのものじゃーか。
それ、元締めは同じとこじゃなかったか?
曖昧な質問ですいません Verilogでパイプラインの設計を行っているのですが、出力が上手く出来ません。 プログラムカウンタが0のまま進まず、最初のクロックの立ち上がりの時のみ命令メモリからアドレスを読み込みそれ以降は一切読み込まず、他の出力も全て0のまま、という状態なのですがなぜでしょうか? もっと具体的な質問がしたいのですが、いかんせん量的にも、また原因がさっぱりわからないということもあってこんな質問になってしまいました… ありがちなミスとかでもいいので、何かヒントをいただけるとありがたいです
プログラムカウンタが0のまま
リセット系のミスじゃないかな? たまの失敗は、スパイスかもね〜!
>>536 なんのパイプライン?cpu?
順序回路になってないとか、クロック自体入ってないとか・・。
>>536 すばらしい回答だ。答えが凝縮されている。
>>537 シミュレーションでやっているのか、実機でやっているのかわからんが読み込んだ後の処理が動いていないだろうね。
パイプラインとあるから、多分パイプラインの仕掛けを入れる前は動いていたと思われから状態遷移図を見てどこまで処理が動いているか確認汁。
パイプライン処理部分に間違いがあると思われる。
つーか宿題くさい
> プログラムカウンタが0のまま進まず、 まずはこれをがんばれ。
先生、質問! \___ __________ V ∧_∧∩ ( ´∀`)/ _ / / / \⊂ノ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| Velilogでモジュールを一つずつ作っていきます。 んで、最後に連結。という方法ってあるんですか? 構造体とか関数化とかではなくて、本当に単独。(その場合、ポート宣言とか出来るの?)
>>543 Fishing?
まあ、全体をまとめるモジュール以下の階層に、
各モジュールを置く構成は一般的だと思うけど。
階層構造を作らないで設計してるの?
545 :
543 :2009/07/22(水) 21:18:33 ID:yhWIvu2y
いえ、単に習いたてというか、ぺーぺーなのでよくわかっていません。 \___ __________ V ∧_∧∩ ( ´∀`)/ _ / / / \⊂ノ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| 単純にmodule〜endmodule間を完全に分断させて、独立出来たら便利かな? と思っただけでして。 あれ?階層構造をちゃんとやれば、それで十分なような気もするかもしれない。 う〜ん。 すみません、出直してきます。
先生、質問! \___ __________ V ∧_∧∩ ( ´∀`)/ _ / / / \⊂ノ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| SWのチャタリング防止なんですけど、これって、SW1個1個でカウンター取るのくらいしか思い浮かばないんですけど、 状況によっては、べらぼうに記述が増えるじゃないですか? 関数化とか考えてみても同時押しとかを考えると、何か変に感じる。 粛々と必要な個数分を打ち込んでいくのか? それとも、「実はこんなに便利な方法が!」というのがあるのか? ヒントください。
実は便利な方法がある
夏休みか・・・
抵抗とコンデンサーを記述すればいいのさ
rsff
3bitくらいのregを用意して、 10msとかの低速clockを作って、 その↑毎にSWを取り込み、reg[0]に入れ、シフト。 assignでreg==111になったらSW=on
552 :
546 :2009/07/23(木) 20:12:17 ID:K856p1ww
>>551 ありがとうございます!
くそう、こんな程度の事も気づかないなんて・・・・。
修行してきます。
ご迷惑をおかけしました。
>>551 マスタークロック200MHzが普通の現状で
チャタリング防止ためだけに10msとかの低速clockを作るのもなって感じだな
でもFPGAで時間待ちって言ったら、FFで刻むしかないでしょ? 200MHzで10msだと0x1E8480ということで、21bit有ればOK。
pll使えば? pll内で使ってると言えばそうだけど、 rtl的には使ってないってことで。
外付けで単純なCR発振付けてもOK?
74123 だな。2個入りだし。
夏休みの季節。 机上の空論大好き人間が現れますな。
少ピンマイコンにしちゃうかな、めんどうだから。
>>557 しばらくこなかったのね。
バグだして缶詰になっていたのかな?
おめでとう。
良かったね。年末までこの調子でいけたら万々歳だね。(棒)
将軍様の容態が怪しくて情勢が不安定みたいだから、できるだけ長生きできるようにお祈りしてあげるよ。
562 :
学生 :2009/07/27(月) 20:05:37 ID:EXDeFOlZ
VHDLわかる方お願いします。 桁上げ選択加算器というものを作成しなければなりません。 条件というか作成手順は以下ものです。 全く手つかずなので宜しくお願いいたします。 なお、Model Simを使っています。 1. 論理素子に1nsの遅延を導入 2. 16桁の逐次桁上げ加算器を設計 3. 4桁の桁上げ選択加算器を設計 4. 桁上げ選択加算器を4つ並べた16桁の加算器を設計 5. 2つの桁上げ方式の違いをテストベッドで観察
566 :
学生 :2009/07/27(月) 22:19:43 ID:EXDeFOlZ
わかりません。全くわかんないんです。
わからないのは「丸投げ」の意味?それとも「禁止」の意味?
VHDLで質問です。 トップ階層からインスタンス化したモジュール内のsignalの値を 参照したいのですが、どのように書けばよろしいのでしょうか? 例えば、test_sub_module.vhdの中でsub_module.vhdをport mapしていて、 sub_module.vhd内のsignal reg_aの値を出力したい、という状況です。 Verilogだとドットで区切って、 $display(sub_module.reg_a); みたいに参照できるのですが、VHDLでどう書くのかわかりません。。 ご存知でしたらお願いします。
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ VHDLは解らねんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
>>568 俺も色々調べたけど出来ないという結論に達しました。
回路はVHDLで書いてもテストベンチはVerilogになってしまうなぁ
> 回路はVHDLで書いてもテストベンチはVerilogになってしまうなぁ 最近は、混在シミュレーションできるから楽になったね。
>学生さん 『桁上げ選択式加算器』はもしかしたら、 先生が研究している新しい回路方式かもしれないから、 先生に聞いてからここに書き込んだ方がいいよ
574 :
568 :2009/07/27(月) 23:32:15 ID:OAU8Xm7a
>>570 どうもありがとうございます。
やっぱり無理そうなのですね・・orz
VerilogとVHDLの混在はやったことなかったです。
テストベンチをVerilogで書けばVHDLで書いたRTLのレジスタ値を
$displayできるのでしょうか?
576 :
568 :2009/07/28(火) 00:09:35 ID:pHi54na0
>>575 解決しました。
ModelSimを使ってテストベンチをVerilog、DUTをVHDLとして混在シミュをしましたが、
そのままVerilogの文法で$display(sub_module.reg_a)としたらエラーが出ました。
ちょっと調べたところ、ModelSimのsignal_spyというのを使ったらインスタンス内部の
信号を引き出せました。
577 :
質問 :2009/07/28(火) 00:13:15 ID:gGd7j3eY
module test(a, b, c); input a,b; output c; assign c = (a == 1'b1 && b == 1'b0)? 1:0; endmodule と module test(a, b, c); input a,b; output c; reg c; always @(a or b)begin if(a == 1'b1 && b == 1'b0)begin c <= 1'b1; end else begin c <= 1'b0; end end endmodule 前者を@、後者をAとしたときの振る舞いは同じなの? どう違うか教えてくれ。
578 :
質問 :2009/07/28(火) 00:16:22 ID:gGd7j3eY
できれば回路のイメージも添えてお願いします。 DFFがあって云々..
>>577 Aは、それであってるか?
ノンブロッキングでいいの?
FFは無いだろ、JK
JK-FF かと思った
>>576 どうやらシミュレータに依存する形のようですね、
以前、内部信号をトリガーにしてイベントするテストベンチを作ったような気がしたので出来たと思ってましたが・・・
ところで加算器を書くとき assign a[10:0] = b[9:0] + c[9:0]; か assign a[10:0] = {b[9],b[9:0]} + {c[9],c[9:0]}; みなさんどっち?DC結果は違うのかな。
585 :
577 :2009/07/28(火) 10:00:01 ID:ptwAkQr8
自分では同じ回路になると思ったのですが、違うのかな。
>>579 いいのかどうかはわからない、回路的に違うものになるのかなぁと。
586 :
573 :2009/07/28(火) 10:35:23 ID:jHnYoKMo
>>582 サンクス
なるほど、キャリー入力によって、使う加算器を切り替えるわけね。
>>584 どっちって、signed か unsigned の違いだろ
>>577 は何をテストしているニダか? 誰か教えるあるね
テストベンチ記述ないあるから分らないニダ
テストもクソもこんなモン、ISEWEBPACKインストールしてどんな回路になるか見れば、一発じゃん?
>>587 unsignedの場合
assign a[10:0] = {1'b0,b[9:0]} + {1'b0,c[9:0]};
とはしない?
$signed,$unsigned使えと
GAやCB等でASIC化する時って論理設計や合成で 1chipのレイアウト設計を考慮して回路設計するものですか? 考慮する場合、どこをポイントとするものでしょうか?
593 :
774ワット発電中さん :2009/07/29(水) 05:09:20 ID:z/zwLwEF
GAというのは遺伝アルゴリズムのことか?
>>588 また、日本の技術を朴るつもりか?チョン公
>>590 計算式に unsigned があると、signed があっても unsigned で
評価されてしまうのが verilog の仕様。
正直、わけわかめになるよ。
確かに自分で符号も含めて式を書いた方がいい。
>>593 GA ゲートアレイ
CB セルベース
だろJK
JKって、黒ブラの女子高生ですか? いいですね。
>>596 GA Gigabyte Assy、 ギガバイトのマザボ
CB シチズンバンド無線
だよッ!
つまらん
GA Gameboy Advance CB Circuit Breaker
>>592 >GAやCB等でASIC化する時って論理設計や合成で
>1chipのレイアウト設計を考慮して回路設計するものですか?
>考慮する場合、どこをポイントとするものでしょうか?
レイアウトではタイミング制約を満たす配置配線を行う。--@
@のためフロアプランで階層ブロックの配置を設定して調整する。
@ではファンアウト調整が行われる。駆動力を小さいものから大きいものに変えられる。
@では回路規模が大きいと配線長が伸びて遅延がつくのでスピードがおちる。
@ではタイミングドリブンレイアウトがおこなわれる。それは
パスが最短距離になるように調整してくれる。手動で配置することもできる。
@では回路の論理最適化をおこなわない。(フィジカル合成ならおこなう。)
論理合成ではタイミング制約や遅延モデルをもとに論理最適化を行う。--A
Aのタイミング制約や遅延モデルの設定によって例えば、加算回路がスピードが速く、回路規模が大きい
またはスピードが遅く、回路規模が小さい。
@の詳細に計算された遅延モデルとAの遅延モデルで差異がある。
@の遅延よりもAの遅延が小さくなっていることが多くなっている。
プロセス?が小さくなって配線遅延が大きくなってきているため。
Aの制約ではその分も含めて、仕様のスピードよりも速めの設定をします。
Aではバッファリングやファンアウト調整は@でやるので必要ありません。
回路設計後の論理合成の時点でクリティカルパスがあって、
論理最適化でもレイアウト最適化でもタイミング制約が満たす見込みは
薄いと考えたら、回路を修正することになると思います。
自分でもまとまってなくよくわかりませんが、書いてみました。
腕時計やなんかのスイッチ長押し処理ってどうやってるんですか? @練習としてメタ・ステーブル対策を書く(FF2段) Aシフトレジスタ数段の出力の論理積でチャタ防止(正論理) BFFで1段遅らせた出力の否定と元との信号の論理積でワンショット作成 このあとスイッチの長押し処理を入れたいと思ったんですけど、どうしたらいいのかなと。 考え方としてはワンショットからカウンタを開始して1.5秒程度数えたら…どうするんだろう。
>>602 ワンショットじゃなくて、SWの閉期間のみカウント
>>603 (_ひ)b 通常の押し離しで時刻合わせの+1、長押しで早送りカウントアップって気持ち。
@スイッチの閉時間をカウント(1.5秒とする)
A1.5秒以上押されていたら、『押されている間』早送りカウントアップ処理。
ってことですね。
>腕時計やなんかのスイッチ長押し処理ってどうやってるんですか? 割り込み、大麻、大麻割り込みのあるCPUを使います。
607 :
774ワット発電中さん :2009/08/05(水) 21:27:31 ID:4npasmaL
>>512 将来がまったく見えないあほ。見てるか。
東芝がフラッシュで白旗掲げて、電力に舵切るってよ。
東芝、設備投資5400億円削減 攻めの経営を凍結
東芝は5日、2011年度を最終年度とする3カ年の中期経営計画を発表した。
期間合計の設備投資を1兆1000億円と、前の3カ年に比べて約 5400億円削減する。
09年3月期に過去最大の赤字に陥った直後に就任した佐々木則夫社長は、
西田厚聡前社長時代の攻めの経営をひとまず凍結。投資の厳選や固定費圧縮を
優先する堅実路線で難局を乗り切り、その後の反転攻勢につなげる構えだ。
設備投資は総額を減らすと同時に事業分野ごとの配分を大きく見直す。
06〜08年度では電子デバイスが全体の68%を占めたが、半導体の不振を映して49%まで圧縮。
かわりに原発などが好調な社会インフラの比率を28%へと13ポイント高め、電力関連事業への傾斜を強める。
>>607 どっちがあほなのかほかの人に聞いてみたいもんだ。
攻められるようなニュースを待っていたんだね。ご苦労さん。
君の愛しているサムスンも設備投資は半減させているよ。(笑)
今は余分な設備を持つ体力はどこもない。
生産性が向上すればよいけど、昔のように日本の技術をパクレなくなっているので大変でしょう。
電力への注力は今稼げる数少ない技術だからだよ。
【ソウル=尾島島雄】韓国のサムスン電子が2009年の連結の設備投資を前年実績に比べ半減となる6兆〜7兆ウォン(約4800億〜5600億円)程度で調整していることが分かった。
液晶パネルの大型投資が昨年までに一巡しているうえ、半導体の設備更新も小幅にとどめるのが主因とみられる。4〜6月期に業績が急回復したサムスンだが、市況の先行きは依然読みにくいため、設備投資よりも各工場の生産性改善に注力する。
WH買収に代表されるように原発には相当注力してるだろ
>>608 あほはお前確定。
サムスンが設備投資を抑制してる今こそ、設備投資しないで、いつサムスンに勝つつもりだ。
サム打倒でずっと設備投資を続けてきたが、懸命にがんばっても3位維持がせいぜいで、体力切れだ。
東芝半導体はこのままフェードアウト。最後までがんばった東芝もついに半導体はあきらめて、
総合電機3社は今後、電力でやっていく、そんな常識もわからんあほは死にな。
自作自演をして遊んでいるのか?
夏だな。
あぁ・・・暑いな
>>611 自作自演ではないよ。
サムスンホルホルのキティを弄っているだけ。
しばらく現れなかったのは規制食らっていた可能性は高いかも。
たしか新聞社とか規制解除されたってあったらか、会社からアクセスしているのかな?
>東芝半導体はこのままフェードアウト。最後までがんばった東芝もついに半導体はあきらめて、
>総合電機3社は今後、電力でやっていく、そんな常識もわからんあほは死にな。
おもわずお茶吹いちまったよ。
なんで東芝が半導体を止める事になるんだよ。(大笑)
自分の願望をここで書くと自分は馬鹿ですって大声で叫んでいるようなもんだね。
総合電気3社ってあと2社はどこだよ。
適当な事言ってんじゃないよ。
今設備投資を控えるのは今回の不況が長引く可能性が高いって事だろう。
半島メーカのようにダンピングでとにかく安売りしてシェアを取るだけじゃやっていけないからね。
そういえば現行のPS3が市場から姿を消しているとか。
それなのになぜかSONYはあちこちから部品を集めているとか・・・・。
PSP goは11月発売、PS3の後継はいつ頃出るのかな?もしもPS3の後継がそれなりに台数が出ると東芝からICの供給は大丈夫かな?
蝉の鳴き声がうっとーしさに輪を掛ける・・・ 長々と書いてるけど、引用と煽り文句を消すと 中身が無くなるようなやつのうっとーしさに似てる。
project6ぐらいから覗いていなかったけど
めちゃくちゃ進んでるね。良スレ?
>>602 module sw_gate;
input clk; //クロック
input reset_X; //リセット
input sw_X; //スイッチ
output sw_out; //出力?
reg [1:0] sw_reg; //チャタリング除去
reg [15:0] sw_cnt; //長押しカウンタ
wire sw_one_shot; //ワンショット出力
wire sw_nagaosi; //sw_X長押し検出
wire sw_reg_full; //長押しカウンタfull
wire sw_reg_c_up; //長押しカウンタスタート
always @(posedge clk or negedge reset_X) begin //チャタリング除去レジスタ
if(!reset_X)
sw_reg <= 2'b11; //リセット
else
sw_reg <= {sw_reg[0],sw_X} //トレースし続ける
end
always @(posedge clk or negedge reset_X) begin //長押しカウンタレジスタ
if(!reset_X)
sw_cnt <= 16'h0; //リセット
else if(sw_reg_c_up) ///長押し&カウントがfullじゃないとき
sw_cnt <= sw_cnt + 16'h1; //カウント
else if(!sw_nagaosi) ///ボタンが離されたとき
sw_cnt <= 16'h0; //カウントリセット
else ///カウントfullで押されっぱなしのとき
sw_cnt <= sw_cnt; //カウント保持
end
//ここいらは省略
assign sw_one_shot = (sw_reg == 2'b10);
assign sw_nagaosi = !(| sw_reg);
assign sw_reg_full = (& sw_reg);
assign sw_reg_c_up = sw_nagaosi & !sw_reg_full;
assign sw_out = sw_one_shot | sw_reg_full; //ワンショットか、カウントFULLだと1
endmodule
うーん・・・あってるかな。久々書いた。
カレー以来だ
残念ながら糞スレです。
622 :
774ワット発電中さん :2009/08/07(金) 01:17:23 ID:H0AAg1iV
>>616 >総合電気3社ってあと2社はどこだよ。
総合電気ってバカかお前は。常識のかけらもないなコイツは。
ゆっくり罵倒していってね!!
電気業界で飯食ってて総合電機知らないって? しかも >総合電気3社ってあと2社はどこだよ。 総合電気?こいつ仕事の仕方もこの調子なんだろな。 お前の上司に成り代わって言ってやるわ。死ね。 それか、さっさと辞めてくれ
>>625 就業時間中に2chアクセスするやつが上司だったら、下っ端はやっていられないね。
10:00出社で、19:00上がりだとすると、40分も仕事していないのかよ。
627 :
774ワット発電中さん :2009/08/07(金) 12:56:00 ID:f+RTGjrf
もう盆休みだろ
あ
>>626 >10:00出社で、19:00上がりだとすると、40分も仕事していないのかよ。
夏期休暇もそうだが、
コアタイムなんてまともな会社はなくなってることすら知らないって?
重電業界なら 大手3社 日立 東芝 三菱(重工+電機) / 中堅2社 富士電機 明電舎 って感じかな?
総合電機三社といえば、日立、東芝、三菱なんて、まともなサラリーマンなら誰でも知ってるでしょ。 旧電々ファミリのFNOHとかは関係者でもないかぎりあんまり有名じゃないけど。
三菱電機は総合電機メーカーじゃない。原発とかつくってないだろ。 三菱グループの中でも地位が低いし、三菱重工の下請けってイメージだな
>>632 そういうことじゃないんだけどな、総合電機はTHMであってる。
総合電機という言い方に何の意味もないけど
総合電機ってGE、ジーメンスとかだろ なんで、極東のちんけな会社の名が出るんだ
総合電機知らなくていいからまともなコード書ける人が欲しい
636 :
774ワット発電中さん :2009/08/08(土) 22:01:38 ID:hBabNgsB
>>632 >三菱電機は総合電機メーカーじゃない。原発とかつくってないだろ。
こいつ真性馬鹿だな。オマエアホすぎるから死んだらどうだ。
三菱は電機は重工と一緒に以前から原発やってるし、原発が好調だから携帯電話なんかさっさと切った。
総合電機はいずれも20年スパンで見通しのたつ原発が好調すぎて、経営の足をひっぱってばっかりの
半導体やら、ITやらの見通しの立たない事業からの撤退を検討してる。家電あたりも事実上チョンからのOEMでごまかすことにした。
しかも、電機が重工の子会社?電機 は重工より会社としては古いんだよアホが。
造船工業は電機が独立した後、航空機と合併して重工に改名してるんだから。
戦時中、大西洋で沈められたイ号のエンジニアはMitsubishi Electricの社員だ。三菱グループの中核が電機。
まったくものを知らんにもほどがあるな。アホ杉で笑える。失笑
っていうか電気関係者なら、総合電機、関西家電3社、旧電々ファミリ(日立重複)、NTT、電力各社の概要ぐらいは知ってるだろ。
同窓会開けば同級生はみんなここらの社員だろうし。なんでそんなにアホなん?情弱ってのはこういうやつのことだろな。
独り言おじちゃんがいるスレはここですか?
638 :
774ワット発電中さん :2009/08/08(土) 22:05:31 ID:hBabNgsB
>>632 >総合電機、関西家電3社、旧電々ファミリ(日立重複)、NTT、電力
まさか、専門卒とかしょぼすぎる大学出身で、まともな大学なら、学校推薦でサンダル履きでも採用されるここらの会社に
入社できなかったとかじゃねーよな。まさかな。
>>636 、638
おいおい、そんな古の昔繁栄したの古代企業の話を自慢げにするって
失笑ものだぞ、おじちゃん
640 :
774ワット発電中さん :2009/08/09(日) 00:36:49 ID:1vQEhwfx
>>639 古の昔?アホかおまえは。この程度の教育しか受けてねえんだなオマエ。
しかも古代企業?電気系でまともな大学出ればおおよそ、ここらへんの会社に就職するのはイマも昔もかわらないんだ戯けが。
毎年送付されてくる卒業生便りは今も昔も就職先なんて大差あるかい。
学校とはいえないよっぽどの糞学校出身だなオマエは。
>>638 >半導体やら、ITやらの見通しの立たない事業からの撤退を検討してる。
>家電あたりも事実上チョンからのOEMでごまかすことにした。
低脳雇うと将来が無いと言うことだな
>同窓会開けば同級生はみんなここらの社員だろうし
これが今の現状を生んでいる原因だな
身銭切って大学行っている訳では無いのだから、当たり前だろ?
>>632 投稿日: 2009/08/08(土) 12:27:37 ID:Ew/ZwT7r
>三菱電機は総合電機メーカーじゃない。原発とかつくってないだろ。
>三菱グループの中でも地位が低いし、三菱重工の下請けってイメージだな
>>634 名前: 774ワット発電中さん [sage] 投稿日: 2009/08/08(土) 16:25:05 ID:zobu4dnw
>総合電機ってGE、ジーメンスとかだろ
>なんで、極東のちんけな会社の名が出るんだ
>>639 名前: 774ワット発電中さん [sage] 投稿日: 2009/08/08(土) 22:27:53 ID:tzRFLHsy
>>636 、638
>おいおい、そんな古の昔繁栄したの古代企業の話を自慢げにするって
>失笑ものだぞ、おじちゃん
およそ、電電板に出入りしてる奴の知識じゃないわな。おそらく
ID:Ew/ZwT7r、 ID:zobu4dnw、 ID:tzRFLHsy
は同一人物、このスレに2人も3人も居るはずがない。
社会常識のかけらもないアホ露呈して何してんの
>>639 >おいおい、そんな古の昔繁栄したの古代企業の話を自慢げにするって
笑えるっ!
じゃ、社員であることが自慢できる繁栄してる現代企業ってどこだい。電気に限定して挙げてみろ。
サムスンとかノキアとか?
つ 自慢 ロシアの下僕だったフィン人が崇拝する日本、チョンは略
>>645 日本にあるわけないだろ
この不況下でもしっかり黒字出せないようじゃ、繁栄してるっていえないよな
黒字というのが何基準の黒字なのやら。
>>645 >繁栄してる現代
一瞬ヒュンデの事かと思った。
夏休みってすごいな こんな過疎スレにまで・・・ VHDL使いだったのだけど、Verilogの部署の方に配置転換がありそう そっちの部署では、もうVHDLはダメだとか言っている VHDL→C系 みたいな夢は持っちゃダメかな 出来ればVerilog飛ばしたいんだけど・・・
VHDLもVerilogも文法ほとんど同じだよ。 Verilog打ってるときにVHDLが出てきて困ったりするけど。 C系って使いやすいのかな? 構造体へのポインタとか軽くコンパイルしてくれないと魅力無いよね。
> VHDL使いだったのだけど、Verilogの部署の方に配置転換がありそう > 出来ればVerilog飛ばしたいんだけど・・・ この世界、向いてないと思うよ。
VerilogとVHDLでそんなに違いがあるとは思えない。
[Verilog]: 記述が柔軟(ある意味いい加減)、モジュールが多数あってもサクサク結線 [VHDL]: 記述が厳密(頭固い堅物)、attribute、generateが便利、vhdl-mode.elが無いとtype量多くて面倒 私は書く人によって記述がぶれにくいVHDLの方が好きだな。
>>651 夢はおいといて、その部署に行ったらVerilog使うんだろ、
なら、Verilogも覚えるだな。
>>651 は将来メジャーになる(と思う)C系の勉強を今気合を入れてしてるのに、
いまさらVerilogの勉強しなければならないのか、はぁ、って感じ?
>>655 SystemCはもっともっと好きになるんじゃない。C++サイコーって感じ
でも、俺、SystemCもC++も知らないけどね
System Verilogも忘れないでください(´Д`;)
初心者なんだけど、Verilogって面白いと思うんだけどなあ・・・。
うん、おもしろいと思うよ。 どこかの言語のように、おまじないみたいな3行はいらないので、 文字タイプが少なくて済む。 簡潔でわかりやすいしね。
660 :
774ワット発電中さん :2009/08/09(日) 20:09:43 ID:t62COu3Y
VHDLをマスターしてるならVerilogなんて3日あれば マスターできるだろ
マスターとかそういう問題じゃなくてさぁ、あのいい加減さが性に合わない。 勿論Cもダメなヴィルトのシンパ。
662 :
774ワット発電中さん :2009/08/10(月) 02:20:44 ID:97hQ3g/h
規則だらけで窮屈なよりいいと思う。 柔軟性があると考えるべき。
> エルピーダ1位、EFA高い企業 もうダメボ
>>619 頭の中でカチっとつながりました。すごく助かります。
ありがたし。
そんな! 間違った配線でつなげられても
ええぇ…
60進カウンタとかの早送りカウントアップがしたくて。 @長押し判定カウンタを用意(1.5秒くらいかな) A長押し処理用カウンタを用意(0.2秒で+1かな) 「順序回路で」 スイッチ開で@<=0、A<=0(正論理) スイッチ閉で@をカウントアップ、MAX(1.5秒〜)になったら閉の間MAX維持。 @がMAXの間Aをカウントアップ。MAX(0.2秒)の次は0代入。 「組み合わせ回路で」 ワンショットパルスか、AがMAXのたびにOUT<=1する。めでたし。 619はこんなことだと解釈したんですけど。 課題的にメタステーブル対策のモジュール(といってもFF2個)とチャタリング防止のモジュールを別個に分けることになってまして。 カウントアップに割り当ててるスイッチも状態遷移に使われてるので余計なところで長押しするとクルクル回りますが・・・。 チャタ防止モジュールからワンショット作成モジュールと長押しモジュールへ並列に分割すれば回避できそうですけど(めんどう) とりあえず紙にブロック図書いてみます。問題無いようならISEで。 どうもありがとうー。
assign out1 = |in; assign out2 = ∈ (in[7:0] out1とout2は1ビット) この式いったいどんな回路になってるのでしょうか? シミュレーションしてみたのですが創造できません。
シミュレーションすれば分かりそうなもんだけど。 |in &in 00 → 0 0 01 → 1 0 02 → 1 0 : FE → 1 0 FF → 1 1 だったろ
何が間違っているのかわからないので教えてください library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; entity counter is Port ( CLK:in STD_LOGIC; RST:in STD_LOGIC; Q :out STD_LOGIC_VECTOR (7 downto 0)); end counter architecture structual of counter is signal WORK :STD_LOGIC_VECTOR (7 downto 0); process (CLK) begin if CLK'event and CLK='1' then if RST = '0' then --reset WORK <= "00000000"; elsif(WORK = "11111110" then WORK <= "00000000"; else WORK <= WORK + '1'; end if; end if; end process; Q <= WORK; end counter;
673 :
672 :2009/08/15(土) 23:23:05 ID:a4BcoPDd
以下のようなエラーが出てしまいました・・・ ご指導よろしくお願いします test.vhd(14): ERROR: syntax error near architecture test.vhd(17): ERROR: syntax error near process test.vhd(39): ERROR: unit counter ignored due to previous errors
>>673 なんか、VHDLの入門書を読んでから出直して来い…って感じだが。
まずは";"を付けてこいってところか。
それだけじゃ、次のエラーが出て直らないだろうけど。
>>674 入門書みながらやってるんだけど
どこが間違っているのかよくわからない・・・・
>>672 >elsif(WORK = "11111110" then
右括弧が抜けてる
signal宣言の後にbeginが無い
高校レベルの数学が分からずに量子力学にちょうせんする位に無駄だと思うぞ。
>>672 余りにもアレなんで、でっかい釣り針が見えている気もするが、暇だったので添削。
とりあえず、シンタックスエラーが出ないとこまで。細かいとこまで見てないんで
検証掛けると問題でるかもしれんが、後は自力でやれ。
とりあえず、何で自分が書いたのが間違ってたのか理解できるまで戻ってくんな。
-----
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter is
Port ( CLK:in STD_LOGIC;
RST:in STD_LOGIC;
Q :out STD_LOGIC_VECTOR (7 downto 0));
end counter;
architecture structual of counter is
signal WORK :STD_LOGIC_VECTOR (7 downto 0);
begin
process (CLK,RST,WORK)
begin
if CLK'event and CLK='1' then
if RST = '0' then --reset
WORK <= "00000000";
elsif(WORK = "11111110") then
WORK <= "00000000";
else
WORK <= WORK + "00000001";
end if;
end if;
end process;
Q <= WORK;
end structual;
どっかにうpれよ池沼
681 :
619 :2009/08/17(月) 17:27:31 ID:JYjIYqR0
>>667 流れをぶっちぎりたくて長いのを書いてみたり・・・
しかしメタステーブルとチャタリングってちがうんすね。
ぐぐるまで同じだと・・・
FPGAだと思うけど
メタステーブルってそんなに意識しないといけないの?
FFはすべて可能性はあるんじゃね? 7474とかも。
685 :
774ワット発電中さん :2009/08/17(月) 21:13:57 ID:oVaW3r6a
>>681 単一クロックでも、入出力は気をつけて制約をかけないとダメ。
687 :
619 :2009/08/18(火) 15:13:43 ID:lG1rZicP
うーん、チャタリングぐらいしか入れてなかったなぁ
(いれりゃFF介するけど)
そろそろROMろう。
>>685 まず下り(sage)を攻め続けないと
ふと思った スレが10とかになったら ProjectAとかになる?
>>681 レスとしては遅いけど、気がついたので・・・・。
ぶっちゃけクロックが数MHz程度だったら無視してもまず問題はでない。。
ところが100MHzくらいまで上がったら、メタステーブルを考慮した設計をしないとだめ。
データの取りこぼしやゴミが発生する。
690 :
667 :2009/08/22(土) 13:10:14 ID:HszQy+Wg
システムクロックが50MHzのFPGAです。課題としてやっていたので、メタステーブルは理論上の話だったんです。 講師「スイッチみたいに外部から非同期に入力があると、 セットアップタイムやホールドタイムを守りようがないから 次段のFFがほぼ不可避にメタステーブル状態になるから対策しようね」と。 この場合チャタリング防止のシフトレジスタを介していれば必要ないけど、という話も聞いてあります。 24時間時計は単相同期なので非同期なのは入力スイッチだけです。
692 :
667 :2009/08/22(土) 13:29:34 ID:HszQy+Wg
メタステーブル状態って言葉が間違ってますね。ステーブル状態って何だ…。 FPGA始めたのが今年の6月からで、まだちょっとブロック図とかRTL記述とか怪しいです。 トップモジュールなんかのブロック図作成にはISEで書いたスケマティックを、RTL記述はVerilogで、シミュレータはModel Simです。 現在は24時間時計(24時間表示、時刻合わせ、目覚まし設定(アラーム)、キッチンタイマー、ストップウォッチ(ラップタイム付き))を、 ステートマシンの勉強のためにワンホット型で設計中です。 なんというかまだ上手いことステートマシンが掴めてないですが・・・。
metastabe=準安定と言う意味で自分は理解しています。
ステートマシンって一応本では勉強するが、実際作るときはコンパイラに任せっきりだなぁ
ワンホットって何?
696 :
667 :2009/08/22(土) 14:25:18 ID:HszQy+Wg
ちょっと質問なんですが、ワンホット型を念頭に、 メインステートがスイッチ1を使って、 【⇒24時間表示⇒sw1=1⇒アラーム設定⇒sw1=1⇒キッチン⇒sw1=1⇒ストップ→sw1=1⇒時刻合わせ⇒sw1=1】 といったリング構造をしているとき、ステート選択モジュールを作り、 5個のステートなので、5ビット幅の出力を各モジュールへ選択ビットを分配しました。 ここでメインステート上からサブステートへ状態遷移する場合を考えます。スイッチ2を使って、 【→時刻合わせトップ→sw2=1→時設定→sw2=1→分設定→sw2=1】 これを実現するにあたって、 @メインステート選択はメイン用ステート選択モジュールを使い、サブステート選択は各モジュール内でcase分けする。 Aメイン・サブすべてについて、1つのステート選択モジュール内でcaseのネスト構造にする。 の2通り考えました。 @だとメイン1個+サブ5個のステート選択回路が出来、 Aだとあくまで1個のステート選択回路で実現します。 どちらでも実現できると思うんですが、どちらが一般的でしょうか。
>>696 メインステートとかサブステートと、というものとか、
> 【⇒24時間表示⇒sw1=1⇒アラーム設定⇒
> sw1=1⇒キッチン⇒sw1=1⇒ストップ→sw1=1⇒
> 時刻合わせ⇒sw1=1】
のような、自分では理解しているのだろうけど、
一般的ではない表現方法なので、他人には意味不明すぎる。。
何をステートと定義しているのか、遷移条件、矢印の意味とかぐらい、
明確にわかるように書かないと。(簡潔に)
特に、メイン・サブって何を言ってるの?
698 :
667 :2009/08/22(土) 19:35:21 ID:HszQy+Wg
すません。 まず24時間表示の状態にあり、 sw1を1回押すとアラーム設定の状態に遷移するという意味です。 sw1を押す度に状態が遷移していき5回目で24時間表示に戻るリング状の構造です。 この5つの状態をとりあえずメインと呼んでいました。 ここで例えばアラーム設定の状態から、sw2押下をイベントとして、 さらに詳細の「時を設定する状態」⇒「分を設定する状態」〜にリング状に遷移しいずれトップに戻ります。 このメインと呼んだステートに対して、各々のステートの詳細の状態遷移をサブと呼びました。
俺ならもともとメイン・サブなんて分け方はしなくて、2番の方法で記述するかな
>>698 ステートっていう言葉の使い方間違ってる気がする。
が、ともかく、sw1とsw2に親子関係があるなら分ければいいけど、
そうではないなら、ひとつのステートマシンにすべきでしょう。
まとまってないなら状態遷移図描けば?
701 :
667 :2009/08/24(月) 01:15:47 ID:gvp9V3EH
どうもすいません。 なんというかシーケンサというのが自分にはまだ雲か幽霊でも掴むみたいな話だもんで。 とりあえず遷移図や仕様書を作っては頭捻ってみます。 ありがとうございます。
ステートがいくら複雑だろうと 結局はレジスタ値を上げたり下げたりするだけなんだよね・・・
レジスタ値の上げ下げ?
デジタル回路って電圧がH,Lしてるだけなんだぜ?
どんな複雑なプログラムの0と1の組み合わせなんだぜ。 っていう、あれのことか!
いいから宿題済ませろよ。
夏休みがおわったっぽいが Verilogとかの宿題がある方々は9月いっぱい休みなんだっけ
自分で決める。
710 :
774ワット発電中さん :2009/09/05(土) 15:00:33 ID:+Iut2iW/
教えてください。 verilogで、次のような記述をしたところ、思うような結果が得られません。 原因を考えたのですが、私には reg [7:0] count; reg outA; always @ ( negedge reset or posedge clock ) begin if( reset == 1'b0 ) begin count <= 0; outA <= 0; end else begin if( count < 100 ) begin outA <= 1'b1; end else if( count < 200 ) begin outA <= 1'b0; end else begin count <= 0; end end count <= count + 1; end outAの期待する動作は、 ______(100clock)____|~~~~~~~(100clock)~~~~~~ の繰り返しです。 ところが動作結果は、 ______(100clock)____|~~~~~~~~~~~~~~~~~~(155clock)~~~~~~~~~~~~~~~ の繰り返しになってしまいます。 予想では、 end else if( count < 200 ) begin outA <= 1'b0; end else begin count <= 0; end が記述してあるので、count = 199の次は、count = 0になり、頭から始まると思っています。 199の次のとき、count <= 0; と count <= count + 1; が同時に発生することがいけないのかと思い、 if( count < 100 ) begin outA <= 1'b1; end else if( count < 200 ) begin outA <= 1'b0; end if( count < 200 ) begin count <= count + 1; end else begin count <= 0; end のように変更したところ、ちゃんと動きました。 しかし、前者の書き方で、なぜあのように255まで行ってしまうのか、わかりません。 宜しく教えてください。
711 :
774ワット発電中さん :2009/09/05(土) 15:06:50 ID:+Iut2iW/
補足です。 レジスタの代入が重複しているときの動作は「不定」。 だからお前の期待通りにならなくてもいいだろ! という感じがしてきました。 このように、レジスタの代入が重複しているときに 「オッサン! レジスタの代入が重複してまっせ。 結果はどうなるかわからんで。ええんかいな?」という Warningメッセージは出ないものでしょうか? 初心者の私には 助かるのですが。
>>711 ハンバーガーショップ♪もたいな
関西弁のウォーニングメッセージは、出んぞ。
訂正 ×ハンバーガーショップ♪もたいな ○ハンバーガーショップ♪みたいな
ifネストの中のこの行 と、 count <= 0; 並列記載のこの行 count <= count + 1; これが平行評価(解釈)されたとき、 最終記述行になってる count <= count + 1; が優先されるんじゃねーのかな。
あと、このカウンタロジックだと0〜200までのカウントになるから、 outAのデューティがおかしくありませんか?
>>710 verlogを使う人がよくやるミス。
VHDLで経験をつむと起こさない。
end else begin
if( count < 100 ) begin
outA <= 1'b0;
end else if( count < 200 ) begin
outA <= 1'b1;
end else begin
count <= 0;
outA <= 1'b0;
end
end
カウンターの初期化の時に、出力の初期化を行っていないのが問題。
VHDLだと変更点と出力変化はすべて記述するのがデフォルトになっているから手抜きになれたverlog使いがやる簡単なミス。
面倒だけど、信号やカウンターの切り替え時にはすべての信号を記述するVDHLだとミスを犯さないか、すぐにわかるよ。
そもそも初心者というか慣れてない人はalways文は分けた方が良いと思うけどな。
alwaysを分けるってどういうこと?
>>719 上記の場合countとoutAは別のalwaysで記述するということ。
あとoutAをどう使うかによりけりだけど、俺ならoutAはFFにしないなぁ
>>716 今回の問題に関しては関係ないね。
VHDL使いはverilog使いを上から目線で馬鹿にして、
結果だれからも相手にされなくなる典型的な人にみえる。
直したほうがいいよ。
>>719 一個のalways(process)ブロックでは
一個のレジスタ出力だけを記述するようにすること。
合成語の回路のイメージがしやすい利点があるかな。
ステートマシーンではわざとやらないこともある。
722 :
710 :2009/09/05(土) 23:49:37 ID:Vgn1wRAq
まとめるとこんな感じですか? // 0 - 199 counter, count always @ ( negedge resetn or posedge clock ) begin if( resetn == 1'b0 ) count <= 0; else if(count < 199 ) count <= count + 1; else count <= 0; end // outA /****************************************** always @( negedge resetn or posedge clock ) begin if( resetn == 1'b0 ) outA <= 1'b0; else if ( count < 99 ) outA <= 1'b0; else if( count < 199 ) outA <= 1'b1; else // count >= 199 outA <= 1'b0; end ******************************************/ always @( count ) begin if ( count <= 99 ) outA = 1'b0; else if( count <= 199 ) outA = 1'b1; else // count >= 200 outA = 1'b0; end
723 :
774ワット発電中さん :2009/09/06(日) 00:19:49 ID:viKeu25u
8時間たってIP変わったんじゃね? 俺はモデムが熱暴走で落ちてIP変わるけどw
>>710 always @ ( negedge reset or posedge clock ) begin
if( reset == 1'b0 ) begin
count <= 0;
outA <= 0;
end else begin
if( count < 100 ) begin
outA <= 1'b1;
end else if( count < 200 ) begin
outA <= 1'b0;
end else begin
count <= -1;
end
end
count <= count + 1;
end
もう#遅延使えよ
合成されるんだっけ?
遅延素子が入ってないFPGAで 遅延したいけど手作業は嫌だからといって 実装した奴がいる。
always @ ( negedge resetn or posedge clock ) begin if( resetn == 1'b0 ) count <= 0; else if( count == 199 ) count <= 0; else count <= count + 1; end assign outA = (count < 100) ? 0 : 1;
まーなんというかoutAには髭が出てもOKならば組み合わせ出力でよいが。 当人はどうなの?
732 :
>>730 :2009/09/06(日) 22:49:45 ID:dm+psbrN
>>731 ん?当人以外かな?
>内部クロック
という呼び方の確認だけど、いわゆるDFFクロッキング利用でなくて、
イネーブル扱い的なクロック(タイミング同期信号とか)ですね。
ならば理解。
>>731 assign clk200 = outA
always @ posedge clk200
beign
〜
で死亡確定
内部信号ならハザードフリーでGo。
735 :
>>730 :2009/09/07(月) 09:38:26 ID:Ei34A0JS
>>733 そんな恐ろしいことをwwwwwやめてwwwww
なんで恐ろしいの?
>>710 ずばり言うと、count<= count + 1; を最初にもってこい
always @ ( negedge reset or posedge clock ) begin
if( reset == 1'b0 ) begin
count <= 0;
outA <= 0;
end else begin
count <= count + 1;
if( count < 100 ) begin
outA <= 1'b1;
end else if( count < 200 ) begin
outA <= 1'b0;
end else begin
count <= 0;
end
end
end
always @ ( negedge resetn or posedge clock ) begin if( resetn == 1'b0 ) count <= 0; else if( count == 199 ) count <= 0; else count <= count + 1; end assign outA = (count < 100) ? 0 : 1;
>>736 >>730 で言われてるようにclk200の出力はヒゲがでるんだよね、そんな信号をクロックに使うとどうなるか想像してみてくれ
ここらがプログラムなどの論理だけで動いてる物の違いだと思う、あくまでもハードウェアなんだよね。
他の方が書かれてるように、同期信号として使えば何ら問題は無いけど
ある意味引っかけとして
>>729 を書いた
>>742 countが変化する時に髭が出るってこと?
outAをクロックで使う場合はたたけばおK?
>>743 おk
けどそのままだと1cycleずれる
じゃあおれも always @ (posedge clock or negedge reset) begin if(!reset) begin count <= 8'd0; outA <= 1'b0; end else begin if(count < 8'd100) begin count <= count + 8'd1; end else begin count <= 8'd0; outA <= ~outA; end end end
半角スペース使っても無駄だってことわかって。
っ
wire b; wire [15:0] c; wire a = b & ( c[15:0] != 16'd0); を wire a = b && c[15:0]; って書いたら怒られたんだけどこれ駄目?
文法的には、wire a = b & (&c[15:0]); で合ってるけど コンテクストは wire a = b & (| c[15:0]); じゃまいか?
コンテクストって何? コンテクストメニューとか 良く聞くけど。
context 文脈。 コンテクスト(コンテキスト)が何を指してるからコンテキストに依存する。
指してるから→指してるかは
753 :
748 :2009/09/09(水) 02:58:42 ID:dyAxCs0U
演算子&&を!=0の代わりに使ってしまうのは問題?
>>749 そういう書き方もあるんですね。
>>753 動作はするんじゃないかな?
そもそも、誰に怒られたの?
その人に理由を聞いてみたら?
755 :
sage :2009/09/09(水) 13:06:50 ID:3jrW4rH9
module CLK_GEN( CLK, RST_X, GCLK ) input CLK; input RESET_X; output GCLK; reg GCLK; reg [15:0] g_cnt; wire g_cnt_clr_flg; wire g_pos_flg; wire g_neg_flg; parameter P_gen_clk = 200; parameter P_gen_pos_clk = (P_gen_clk / 2); parameter P_gen_neg_clk = P_gen_clk - P_gen_pos_clk; always @(posedge CLK or negedge RST_X) begin if(!RST_X) g_cnt <= 16'd0; else if(g_cnt_clr_flg) g_cnt <= 16'd0; else g_cnt <= g_cnt + 16'd1; end always @(posedge CLK or negedge RST_X) begin if(!RST_X) GCLK <= 1'b0; else if(g_cnt_clk_flg) GCLK <= !GCLK; else GCLK <= GCLK; end assign g_pos_flg = !GCLK & (g_cnt == P_gen_pos_clk); assign g_neg_flg = GCLK & (g_cnt == P_gen_neg_clk); assign g_cnt_clr_flg = g_pos_flg | g_neg_flg; endmodule コメント書こうかと思ったけどやめましたOTL なんていう便利なものがあったんだ・・・ そっちのほうがうれしい・・
ごみん、ageちゃった
>wire a = b & ( c[15:0] != 16'd0); >を >wire a = b && c[15:0]; 動作違うじゃん。
拾い物。どうなるの?
【FPGA/CPLD】 XILINX/ALTERA/Lattice/Actel 11
http://science6.2ch.net/test/read.cgi/denki/1246360585/822 822 名前:774ワット発電中さん[sage] 投稿日:2009/09/10(木) 23:49:20 ID:cDeXdPUB
ISEにおいて以下の状態でselが1であった場合、aの値はどうなりますか?
always @( posedge clk ) begin
a <= 1'b0;
if ( sel == 1 ) begin
a <= 1'b1;
end
end
>>758 ノンブロッキング代入だから不定になって終わりじゃないの?
何がやりたいのか知らないけど
>>758 always @( posedge clk ) begin // clkの立ち上がり毎に
a <= 1'b0; // a出力=1になる
if ( sel == 1 ) begin // 次に、もしsel入力が1なら
a <= 1'b1; // a出力=0になる
end
end
ということで、別に間違っていないのでは?
a=0の後、次のifでa=1になり、次のclockでスグにa=0になるので、
ヒゲがでるかもしれないけど、フィルター通せば良いと思う。
762 :
774ワット発電中さん :2009/09/12(土) 13:32:02 ID:dz4thIQD
>>761 おまえ、ソフトしか書いたことないだろ?
>>761 ノンブロッキング代入という記述になっているので、
aには0と1が同時に代入されることになります。
ブロッキング代入を用いて、
always @( posedge clk ) begin // clkの立ち上がり毎に
a = 1'b0; // a出力=1になる
if ( sel == 1 ) begin // 次に、もしsel入力が1なら
a = 1'b1; // a出力=0になる
end
end
とすれば、aに0が代入された後、
selが1なら次のifでaに1が代入されることになるでしょう。
>>762 Verilogもソフトじゃないですか。
僕はCと、Verilogを使っています。
コメントが逆なのはわざとなのか?
FPGAスレの差別発言者といい、 なんだか香ばしいのが沸いてるなあw 雨の日はみんなマッタリ2chだよね、 オイラもみんなの農園やりながらだけどw
>>766 よう、基地外!
>FPGAスレの差別発言者といい、
>なんだか香ばしいのが沸いてるなあw
2chは日本人特有の精神疾患"基地外"を患ってる人専用の掲示板だから
まともなの居ないぞ
>>764 always @( posedge clk ) begin
if ( sel == 1 ) begin
a <= 1'b1;
end
else begin
a <= 1'b0 ;
end
end
769 :
>>766 :2009/09/12(土) 14:45:00 ID:AqpaV+rn
>>764 ブロッキング、ノンブロッキングを勉強した方が・・・
けど実際はブロッキング代入ってあんまり使わないような気がするな
>>764 Verilogはソフトかもしれないけど、目的はHDLだから。誰が見てもわかる安全な記述でお願いします。
772 :
774ワット発電中さん :2009/09/12(土) 15:40:57 ID:dz4thIQD
>>764 ぷぷぷ。
おまえの書いたverlogを回路図にしてみればわかるよ。ソフト屋。
試しにコンパイルしてみた。QII。 ブロッキング・ノンブロッキング、どっちも同じ回路になったよ。selがD、aがQにつながったDFFが一つ。 process (clk) begin if (clk'event and clk = '1') then a <= '0'; if (sel = '1') then a <= '1'; end if; end if; end process; これも通った。 でも気持ち悪い〜自分はこの書き方はしないなぁ。 するときはvariable使う。
おっと、tabのままだった。
なあ、Lintチェックって知ってるか?
>>773 GJ
こんな記述も通ってしまうんですね、俺こそ勉強不足でした
けどさすがVerilogというかなんというか・・・
>>776 まあASICフローじゃはねられるよね
ATRENTA SpyGlass
Synopsys LEDA
あたり使ってるのかな。
まあFPGAは後から直せるから暢気なんだろう。
そういう自分もFPGA屋だが。
>>773 prcess内で、同じ先に出力した場合、最後に出力したものが有効になるのは、
VHDLでは仕様になってたんじゃないかな。
条件外の時の値を冒頭に書いておいて、その後で条件分けすれば、複数のelseに
またがる場合に、書き落とすことがなくなる。
Verilogは知らない。
>>773 その書き方OpenCoresなんかでよく見るんだが・・・
俺も普通の書き方だと思って多用してた
else使うより見た目スマートにかけることも多いし
まあ俺の場合趣味でしかHDL使わないから正しくなくてもいいのかもしれないけどな
>Verilogもソフトじゃないですか。 htmlもプログラム言語だと言いはってたやつを思い出した。
>>781 process (clk)
variable tmp : std_logic;
begin
if (clk'event and clk = '1') then
tmp := '0';
if (sel = '1') then
tmp := '1';
end if;
a <= tmp;
end if;
end process;
やるときはこういう書き方にする。
でも、これも問題あって、a <= tmp;をif (clk'event...の下に持って行くと
挙動変わっちゃう(記述の順番で動作が変わる)ので、注意しながら使ってる。
非同期入力の同期化とかでは意図的に順番変えたりも。
ということで、一つの値を変化させるのは、一つのif〜elsif〜end if;だけにする、
とかルール付けてます。HDLはまだまだ学習中。
ソフト屋っていうより学生が多いんだと思う。 コンパイルが通る、またはシミュレーションが動く = 実用可能なRTL ではないので注意が必要。 このあたりがソフトと違う所なので勉強がんばれ。
正直言えば、質の悪いHW屋がどんどん増えてくれるのも いいと思う。 結果的にベテラン勢の企業に仕事が回るから。 ソフト屋がハード設計できるようになります!と愚民化 政策をEDAベンダがやってくれたおかげで、業種差別化 が加速化されていて、かなりウハウハ。
>>785 どうにかしてくれよ。稀にハングするFPGAを。。。
納期には絶対無理、たまたま動く版を提出して終わりにしたい
>>786 一番安いとこに出して、デスマーチが増えるだけだと思うよ
>>786 ウハウハ →実際今現在ウハウハですか? いいなあ。
>>787 デスマ
あはは 笑えないねえ(苦笑)
そういう話は最近伝え聞くよ。
正直関わりあいたくないよね。
たださ、そのせいでFPGA(ASIC)=ハードは駄目だ
やっぱりプロセッサかDSPだな、とか向きが行くとヤダよね。
>>781 をみると、
>>758 がジョークネタとして笑いをとれる環境なら幸せなんだろな。
これを見るまでこんな書き方が出来るとは思いもしなかった人と、
あくまでネタとして書いてみせる人がいるような環境。
>>761 >>763 >>764 は分かってて書いてるだろw
>>789 してはいけない記述だが、仕様の理解度を試すには良いネタじゃね
(
>>758 はそんな感じで転載したんじゃね)
結果がどうなるか答えられないようじゃ、まだ、お前言語仕様よく分ってなよと
>>790 sel==1の時はaは不定(ツール依存)
sel==0の時はa=0
でFA?
寺でも照でも財でも、みな同じ結果が出る?
>>791 仕様的には許されていて、QuartusやISEではフリフロになるらしい
よってselが1の時は、aは1になる(当然だが、こう書くべきではない)
恥ずかしながら、不定でエラーでると思ってました。意外と面白いネタだったね
早い話が仕様では always @( posedge clk ) begin a <= 1'b0; a <= 1'b1 ; end で許されると言うことか、なんだかな LINTチェックは通らないことを祈るが・・・
always @( posedge clk ) begin if( x <= 100 ) begin a <= 1; end if( x >= 90 ) begin a <= 2; end end うっかりミスでこんな感じの記述したのにコンパイル通っちゃった記憶がある。
>>786 だけど、外注に出すと、“質の悪い記述”で戻ってくるんだぜ orz
個人的には、STARC ガチガチの読みにくい記述より
読みやすいほうがありがたいけどね。
>>795 always@構文で条件の記述を追加したのに、
センシティビティリストに追加するの忘れて動かねーなぜだって事はあった。
>>796 STARCガチガチはヤダねwww
まあ、いいとこどりというか、
STARCカスタマイズルールをLINTツールには仕込むもんじゃないのかしら?
@* はVerilog2001からサポートだね。 これは素晴らしい気がして感心した。
>>794 とか
>>795 のような、
辻褄が変な記述を、チェックしてくれるようなソフトはないですかね?
「オッサン、212行目と356行目で、reg HOGEがマルチソースになっとるで。」とか
あと、変数名(信号線名)のリストを作ってくれるようなソフトはないかなぁ。
802 :
>>779 :2009/09/13(日) 14:45:00 ID:zPiH6EkN
>>801 だからそれは文法エラーじゃないと(ry
>>802 ,
>>803 ありがとうございます。そうなんですか。ちょっと調べて来ます。
一つ教えてください。
ISE10.1を使っていますが、画面一番下の横長のconsole windowに出る
エラーやワーニングのメッセージが、文章の途中でとぎれてしか表示されません。
全文を表示しない理由も納得できないのですが、これを全部表示する方法はあるでしょうか?
・Σメニュー(?)の中に入って進んでいけば、全部見えるようですが、入っていくのが面倒ですし、
consoleに比べて横幅が短いので、結局改行されてしまい見にくいんです。
・consoleのそのメッセージの上にカーソルポインターを合わせてしばらく待つとOSの機能?で
全文が表示されますが、ポインターを持っていくのも面倒ですし、待つのもツライです。
console上で全文表示してくれれば、すべて解決なのですが。
宜しくお願いします。
805 :
>>779 :2009/09/13(日) 16:04:30 ID:fCJ6fUoW
>>804 導入できればより良いね。
オイラはこう書いてても導入失敗orz
上司の理解がorz終了orz
まあ安価では無いし。
SynopsysはDC-ULTRA買ったら激安で付けてやる とかゆーてましたわ
>>805 >オイラはこう書いてても導入失敗orz
って、そんなに高いものなんですか?
LINT あるいは、ALINTで 検索したら、だいぶわかりました。
Verilogだけではないみたいですね。
みなさんの言うSTRACとは、この半導体・・・センターのことだったですね。
僕も、半導体・・・センターの出してるVerilogの本、持っています。6000円のやつ。
ところで、LINTについては、いっぱい検索できるのですが、
LINTが何の略なのか見つけられませんでした。Wikiにも書かれていない。
これはいったい何の略なのでしょうか。
Language Inspection N.... Tool かしらん、と思っていますが。
807 :
>>805 :2009/09/13(日) 16:30:14 ID:fCJ6fUoW
>>806 まあ高いかどうかは企業判断のところもあるしな、価値の見出し次第。
LINTの語源ですか、
正しいか知らないが、
スーツとかに付着した毛ぼこリを取るブラシありますよね。
繊維質の逆毛になってる生地がついたブラシ。
あれで毛ぼこリ取るのをLINTとか言う ってカリフォルニアな御仁がゆうてましたわ。
>>805 うちは、お前がテイノウだからlintいるんだろって感じがあるな
IC屋ならともかく、FPGA屋だとお気楽にバグ修正できるから
わざわざlintを高い金を出して部署に導入するのもどうかってあるだろうがな
FPGA屋で部署にlintを標準開発ツールとして導入しているところっって多いのか?
>>807 ありがとうございます。ちょっと嬉しいです。
Lintって、省略語ではないんですね。だからちっとも出てこなかったんですね。
Lintそのものは、こんなのが出てきました。
lint【名】
1. 糸くず、綿ほこり
・Get the lint off of the drier [dryer] before you run, OK? : 乾燥機を使う前に綿ほこりを取ってね。
2. リント布◆衛生用品
ありがとうございました。
そりゃFPGAがいくら簡単に書き換えられるとは言え、製品出荷した後に同じことが言えるとは思えないし。 タイとか南アメリカとか南アフリカとかの顧客から、「ここまで書換えに来い、何で客に書き換えさせる?」とか言われたりするかもだし。 というか製品では書換え不可にしているかもしれない。
lint って、ソフト屋で、cもやるなら、名前くらいは知らないとダメだろ。 KRの頃から、cには標準装備だろうに。 パソコン用のはついてるかどうか知らんがな。
Lintと warningの違いがわからないです
LINTと行ってもルールがいくつもありまして・・・ それこそ上記で出てるSTARCルールとかね、その上STARCルールでもランク分けしたりとか LINTを使うのも楽じゃないんだよね 会社で品質管理の部門などが、STARCルールなどをベースにきっちり作ってくれるところならいいが 大体は各設計者が好き勝手にやってるのが現実じゃないかな?
>>809 lint trap でぐぐると幸せかも。
816 :
>>805 :2009/09/13(日) 21:30:42 ID:Eh+1yhLs
>>808 主な趣旨は
>>810 氏指摘の通りだよ。
あと誤解させたが、
ASSP開発でのスタセルIC化におけるFPGAプロトタイピングとして関わったFPGA屋ですた。
#でも前々職時代は純粋なFPGA最終形態での受託だったけど。
チーム設計、過去の遺産、IPとか活用・流用しようとすると
結構クセのあるコードとかあるよ。
あとうっかり自分もやらかす可能性もそれはある。
あわてて修正入れた時とか。
確かに費用対効果の説得力は課題だね。
結局これは、過信・慢心対策だとは思う。
まあ
>>808 の態度はまさに危険な香りがするがwww
っっ →まさにLintだなあw ちょっとホノボノしたよw
>>808 >うちは、お前がテイノウだからlintいるんだろって感じがあるな
会社勤めのフリをしているが
実のところグループ作業をしたことがない引き籠もり(藁)
818 :
>>805 :2009/09/13(日) 21:40:15 ID:Eh+1yhLs
うちは必ずLintはかけるよ。 FPGAとASICが半々くらいで、IPベンダみたいな面もあるからだけどね。 大きいところと話をすると、必ずカバレッジとLintの話は出てくる。 「Lintかけません」=「品質が悪いです」と認識してる。
820 :
>>805 :2009/09/13(日) 22:38:07 ID:BRPkW7Tc
>>819 なるほどですね。
IPベンダみたいな側面とありますが、メインは受託か何かですか?
カバレッジとかリントチェックとかで出てくるバグもあるにはあるんだけど、 仕様抜けとか、基本設計のミスとかのほうが大きいんだよね。 チップが出てきてから、オーバーフローしてましたとかね、もうね、
822 :
>>805 :2009/09/14(月) 01:22:04 ID:Ly7nHT+z
>>821 それを言ったらね、まあねwww ありがちwww
それぞれ大事だけども、
バグ全体の中のウェイトでは少数ということか=カバレッジ・リント
だからこそ導入が遅れ気味だったり、重要視され難いんだよね。
でもプロセス微細化でICなんかは失敗がシャレにならないから
普及の牽引役になってる、と。
で、
FPGAはいまいち旧態依然とはしているが、
>>819 氏みたいなところがASICフローと同様に導入するようになり、
業界全体では徐々に あたりまえ になっていくのかな?
まあ、ユーザーサイドの要求度合いもあるけど。
例えば、大トヨタ様なんかの仕事は必須なのかな?
まあFPGAあるかわ知らないが。
lint使う場合って完全OKになるまでソース修正するの?
ちなみにLINTって、いくらぐらいするの? 5〜6万円なら、俺も欲しい。
ALINTだと$13000くらい。ちょっと手を出しにくい。 コンパイラの構文チェックを単機能化して特化したツールということで、コンパイラのWarningレベルを上げてもある程度は代用できる。 LINTが出す指摘事項は結構どうでもいいのもあるから、その取捨選択は適当に判断して、プロジェクト毎にルール化するとかしたらいい。
$13000って、超高いじゃないか。うちでは導入なんて出来ないな、orz おまえらの会社ってリッチ...
>>826 $13000 なら安くね?タイムベースかな?
だれか Lint チェッカー作ってくれよ。
フリーとは言わないから・・・5000円くらいなら出すよ。
130万円か 高いな
大手上位2社はもっと高価なのは確実w
>>827 $10000 で メンテが月 $10000 くらいでどうですか
CQ出版のFPGAボードで学ぶ論理回路設計の付属基板がシリアルポートなんだけど、 シリアル(:基板)<->USB(:PC)で通信できる? PCが壊れたから買い換えて、シリアルポートが無くなってたの忘れてた。
>>820 ほぼ受託。
リーマンショックから、案件が激減して大変みたいです。
>>823 完全OKはまずないよ。
クロックドメインの変更とかあればダメだから。
だから、ERRORとMANDATORYは取れるだけとって、
残ったところは、その理由をコメントしたログを納めてる。
>>835 なるほどやっぱりそうなんですね。
数が何百個になると、その理由(仕様上避けられない)を全部説明するのが本当に大変で無駄な作業だと言ってた人がいました。
>>835 仕様上避けられない ってのがよく分からないけど、
Lint のルール(ポリシー)を変更したほうがいいかもね。
エラーが多いと本当に必要なものを見逃しかねないし・・・
まあ、確かに無駄な作業とも言えるけど。
だいたい、DCとかの合成ツールがきちんとエラーを吐けば
いいだけなのに、別途 Lint ツールを買えってのがねぇ。
フォーマリティチェックもそうだよね。
>いいだけなのに、別途 Lint ツールを買えってのがねぇ。 >フォーマリティチェックもそうだよね。 まいどおおきに(手もみUSオヤヂ
エラーを吐くどころか 間違った合成しやがるから油断ならねぇ
>>839 それはあまりないでしょう。
記述が悪いんですよ。きっと。
>>833 USB-serial変換器で動くものと動かないものがあると思う
>>840 つまりはLintの使いようがある、と。
超高機能LINTツールが無料だったらツール作ってるところ(ALINT)とかは困るが 世界のHDLの質は全体的に上がるのかねぇ
ならないと思う
無料のLINTがあるC/C++の世界でも、そんなにコード品質上がってない状況を見渡せば、あがんないよね。 まあ、Verilog⇒VHDL⇒Verilog変換でチェックするとかかなあ。
modelsimでこんな感じの↓VHDLコードをシミュレーションしているんですが 全部Uになってうまくいきません なにか知っている方おられましたら教えてください process(clk) begin If rising_edge(clk) then for L in 0 to 7 loop array(L+1) <= array(L); end loop; end if; end process;
>>847 "00000001"みたいな8ビットデータです
>>846 リセット信号入れて初期化しな。
初期化されていないので出力が'U'になる。
>>849 ありがとうございます
うまくいきました!
たとえば除算の結果とタイミング合わせるために遅延させるにはこんな方法であってます?
>>840 これが合成されんのよ
always @(posedge clk) begin
if (!reset_n) begin
b <= 1'b0;
c <= 1'b0;
end
begin
b <= a;
c <= b;
end
end
これだとok
always @(posedge clk) begin
if (!reset_n) begin
b <= 1'b0;
c <= 1'b0;
end
begin
c <= b;
b <= a;
end
end
reset時と通常時は、elseにしなくてもいいの?
おっと抜けてたか あとスペース消えてて見づらかったね always @(posedge clk) begin if (!reset_n) begin b <= 1'b0; c <= 1'b0; end else begin b <= a; c <= b; end end
それなら いいんじゃないの? ちなみに a <= a; とか y = (y==1'b0)? 1 : 0; ってできるんですか?
>>846 8bitのデータで、Lを0〜7まで振っちゃったら、はみ出しちゃうでしょ?
>>851 「これが合成されんのよ 」は、「これが合成されないんだよ」なのか
「これが合成されるのよ」なのか、関東人には良くわからないが、
always @(posedge clk or negedge reset_n) だと思うよ。
>>854 どちらもできると思うけど
aはレジスタならelseでよくやる
yはassign文としてまず参照演算子が嫌いだからあんまりしない
(双方向だと仕方なく使うけど)
assign y=z自体もあんまりするな、って聞いた気がする
>>856 同期リセットだとしても、合成できないのはおかしいな。
>>857 >a <= a;
これは、1clock待ち合わせに使うということですよね? きっと。
>y = (y==1'b0)? 1 : 0;
これはどんな回路ができるのか、想像がつかない。
デッドロック?
>a <= a; ラッチ >y = (y==1'b0)? 1 : 0; y = ~y; じゃないかな。
>>853 合成されると思うけど、
使ったEDAツールは何?
>>856 たしかに。
関西人の俺にもわからない。
富山人じゃね?
>>856 「これが合成されるのよ」
->「これが合成されんのよ 」
「これが合成されないんだよ」
->「これが合成されへんのよ」
>>864 じゃねってチョン系言葉(それより派生したダイハン民国語)?
倭人系日本人はこれを疑問文に使わないな。じゃまたね(サヨナラ)を略したものだからね
富山人さよなら?...何を言っているのか分らん
〜んのよ って多摩弁じゃね? じゃね? って多摩弁じゃね?
じゃね? って、〜じゃないの?が鈍ったんじゃね?
DPIについて教えていただきたいのですが 下記環境にて DPI を試してみようと試みました OS : Windows Vista 64bit Soft : ModelSim Altera版 6.4a Ccompiler : gcc (cygwin) ModelSimのマニュアル通りに vlog -dpiheader hoge.h hoge.v で export するタスクの C用ヘッダファイルを作成し、次にオブジェクトファイルを作成しようと vsim -dpiexportobj exportobj -c hoge_top を実行しましたが、下記エラーが出力されます # vsim -dpiexportobj exportobj -c hoge_top # Loading sv_std.std # Loading work.hoge_top # ** Fatal: (vsim-7019) Can't locate a C compiler for compilation of DPI export tasks/functions. # # Time: 0 ps Iteration: 0 Instance: /hoge_top File: hoge_top.v # FATAL ERROR while loading design # Error loading design エラーを見る限り、vsimに対してCコンパイラの場所を教える必要があるように思えるのですが どの様にしたらよろしいのでしょうか? どなたか知っている方おられましたらお教え下さい
教えてください。 Verilogで、インスタンス化により、top階層からドンドンとモジュール階層が深くなっていきますが、 その下の方の階層のレジスタの内容を、FPGAのpinに取り出したいとき、 通過するモジュール全部にwireで入出力宣言をしないといけないのでしょうか? 何か特別な文法があって、直接pinとやりとりできる、とかは無いでしょうか? ちょっとオシロで波形を確認してみたいだけなので、確認が終わるとまた元通りに 戻すことになるので、とても面倒なんです。 美しいと思う方法は、 目的のモジュールのセンシティビティリスト部分は、残したままで、 別記述により、FPGA空きpinを指定して、デバイスに焼き込み、波形確認。 終わったら、その別記述を削除すれば、元通りになる。 という感じですが、無理なのでしょうか。
>>872 それがないのよ。
シミュレーションだったら、インスタンス指定で出来るのにね。
まあ、そのための専用ツールなら出てるけど。
Xilinx なら Chipscope とか。
面倒でなければ、必要な信号を全部取り出して繋ぐっと。
不要になったら FPGA の出力ポートから削除すればいいじゃん。
>>872 module a ();
reg a1;
endmodule;
module b ();
a u1 ();
a u2 ();
endmodule;
module c ();
b u3 ();
endmodule;
module cからa1にアクセスするにはu3.u1.a1とu3.u2.a1でできたと思う。
>>874 上にも書いてあるけどsimでは出来るけど、合成してpinに出せるの?
>>863 DC使ってた。もう何年も前の話。
みんなして???状態。
じゃね?ってじゃんの疑問系じゃね?
俺は横浜訛りだって聞いてたけど、多摩→横浜の流れかな。
>>873 >不要になったら FPGA の出力ポートから削除すればいいじゃん。
でもFPGAのピンが余ってないの。
PQ208で、余りピンが10ピン程度。この10ピンで勝負しないといけないんです。
ChipScopeでもいいと思うけど、オシロで見たいときって無いですか?
あと、その空き10pinを、debug_pin[9:0]とかにして、
いろいろ使い回してるんだけど、使わなくなったときにソースだけ削除しても
「知らないucfの記述があるがや」と言う理由で、Paceは起動しないし。
assign debug_pin = { 10{1'b0} }; ってやって逃げてはいますけど、
とにかくFPGAのI/Oピンの登録/削除って面倒だと思う。
そうは思いませんか? → おーる
それともISEが融通を利かせてくれれば済むんですが。
>>874 ありがとうございます。
まるで DOSのFullPath指定みたいですね。
具体的にはどのように記述するのでしょうか。
module c (
wire [9:0] debug_pin
);
b u3 ();
assign debug_pin = u3.u1.a1;
endmodule;
という感じでよいのでしょうか。
>>876 elseがあれば、合成できる。
elseがなければ、ツール依存。
あるのに合成されないから困ったんだよ。
>>880 少なくとも、今はどんなツールでも合成はでけると思うな。
あと、elseがなければ合成されないんじゃなくて、保持されるんだよ。暗黙の保持といいます。
>>880 そりゃあ、ツールにバグもあるだろう。
で、困っただけ?
教えてください。 verilogを勉強しています。次のような記述はできないでしょうか? wire [23:0] zentai; // 全24bitのzentai 1. この24bitの、上中下の3byteを、別々に扱いたいのですが、方法はありますでしょうか。今は assign zentai[23:16] = xxx; assign zentai[15:08] = yyy; assign zentai[07:00] = zzz; と、添え字が必要な書き方しか知りません。この書き方の問題点は、 いちいち添え字の数字を書かなければならず、面倒なところです。 また、[ ] の中の数値は、間違えやすいと思うのです。 これをCと同じように、 assign higher_byte = xxx; // zentai[23:16] = xxxxと同じ働き assign middle_byte = yyy; // 同上 assign lower_byte = zzz; // 同上 という簡潔な表記ができないものでしょうか。 defineを使って、 `higher_byte zentai[23:16] と定義すれば良いのかもしれませんが、これだと定義の部分でも、使用する部分でも 頭に「`」をつけなければならないという煩わしさがあると思います。 Cのように「`」なしで、higher_byte = xxx; とかできればよいのですが。 2. assign WR = 1'b0; のように、zentai[0]の1bitを、WRという名前で アクセスしたりは、できないでしょうか。 C言語の struct や union のように使えると、上記の問題は解決だと思うのですが。 3. begin end を「{」、「}」で記述することはできないでしょうか? begin endは、明らかに{、}と置き換えができると感じでいます。 連接で{ }を使用するので、単純にdefineというワケにもいかないのですが、 Cのように、{ }で書く方法というのは、無いものでしょうか。 4. assignの省略はできないてしょうか。 wireに接続するときに、assign middle_byte = yyy; など、assignと 書く必要がありますが、これは、代入ですので、省略しても良いのではないかと 思うのですが。どうでしょうか。 BASICの記述の「LET」と同じだと考えています。 以上です。宜しくお願いします。
>>883 1. 代入される側に連接演算子を使って結合しる
2. wire定義してassign代入しる
3. ツールによる。使ってるツールのマニュアルよく嫁
4. できない。少なくとも記述間違いが発見しにくくなるので止めとけ
>>878 シミュレーション記述だから、合成不可。
signaltapとか使えば?
>>883 verilogは、cではないから、そういう記述をしたいという発想自体があまりお勧めできない。
間違えやすいとか、簡潔な、と言うのは、あなたの個人的感想だし。。
だから、どうしても、cっぽくしたいなら、プリプロセッサ書いた方が早そう。
簡単な置換マクロでもいいけど。
>>883 vb厨が、cやpascal使うときによく言ってることと、かわらんな。
言語仕様が違うんだから、文句言うなよ。
でなきゃ、お得意のcでさっさとプリプロセッサ作れよ。
始めたばかりの人はbegin〜endに文句言う人が多いね。
>>887 確かにalways文とかbegin-endだとインデントしにくいけどね。
他人のソース読むなら慣れなきゃ。自分だけの世界の住人なら他人に聞くな。
>>883 なんか
>>886 で結論が出ているが。
1.
assign zentai[23:16] = higher_byte;
assign zentai[15:08] = middle_byte;
assign zentai[07:00] = lower_byte;
としておけばできる。
2.
assign zentai[0] = WR;
としておけばできる
3.
無理
4.
省略できない。単純代入と継続的代入(assign)は別物ですよ。
>>890 おいおいw
>>883 の質問の意図を理解できてるかい?
1,2あたりはHDL記述の意味が良く判ってないっぽいが
別に、assignなしで代入したいとか(代入先の属性みてくれ)とか
begin-endじゃ冗長だから{}にしたいというのは、普通の疑問だよ。
>>891 普通の疑問じゃなくて、ただのc厨の疑問なだけ。
Pascalから入った俺は全然気にならん。
アメリカでは学校で習う言語処理系がpascalだから、
begin〜endがスタンダードなだけ。
悔しかったら、自分でプリプロセッサか処理系作れ。
rubyみたいに作ってる人も実際いるんだから。
今北産業
>>891 >>883 の
>verilogを勉強しています。次のような記述はできないでしょうか?
が質問なのだから、Verilog の文法で可能かどうかという意味なのだと思うが。
むしろ
>>884 の
>3. ツールによる。使ってるツールのマニュアルよく嫁
可能なツールを提示して欲しい。
>>892 の言うように、
> 悔しかったら、自分でプリプロセッサか処理系作れ。
> rubyみたいに作ってる人も実際いるんだから。
に同意見。私も時間があれば Ruby 風の記述から Verilog を吐き出す
ツールを作りたいところではあるのだが。
*** 現在、スルー検定実施中です ***
ISE10.1のVerilogで、指導ください。 always @ ( negedge res or posedge CLK ) begin → OK always @ ( negedge res or posedge CLK or negedge AAA) begin if( res==1'b0 ) begin 処理0 end else begin if( clk==1'b0 ) begin 処理1 end else if( AAA=1'b0 )begin 処理2 end end end という記述ではNGになります。 センシテビテイーリストの括弧の中に3つのorはだめなのでしょうか? あるいは私の書き方に問題があるのでしょうか。 宜しくお願いします。
>>897 きっと他に適切な書き方があるはずだから、論理を箇条書きにしてくれないかな?
あと、DFFとLATCHを勉強しとくのをおすすめします。
>センシテビテイーリストの括弧の中に3つのorはだめなのでしょうか? は大丈夫です。順序回路としてなら、クロック条件が1つと、リセット条件が複数。ただし、ASICではリセットに論理が絡むのがデザイン制約違反になるので、おすすめできない記述です。
いつも思うのだが、シミュレーション記述と実際の回路をごっちゃにするな。 質問者は、合成できないのか、シミュレーションできないのか、 文法を知りたいのかはっきり汁。
897です。
みなさん、ありがとうございました。
>>898 シミュレーションはしていませんので、わかりません、すみません。
>>899 >>901 >DFFって、どんなものか知ってる?
ありがとうございます。そういうことですか。やっと「もやもやが晴れた」という感じです。
もしかすると、このような考え方は正しいでしょうか?
1. 「always @ ( )という部分は、D-FFのイメージで書けば良い」ということでしょうか。
D-FFは、「↑動作のclock端子」と「レベル動作のRESET、D、Q、/Q」があり、
sensitivity list中の信号メンバーは、D-FFのそれぞれのピンに対応している、
ということですね?
2. 1の理由から「clock以外のedge動作信号」を併記することはできない、で正しいでしょうか?
3. またD-FFには、「clockのようなedge動作のピン」は 他に無いし、
また「clockが複数」というのは、動作上の辻褄が合わないので、
sensitivity listには、clockは1本だけしか記述できない、という理解で。
4. ところが、RSESTは、複数箇所から来ても良いので、次のように
reset1, reset2, reset3をorでくくって、RESETピンにつなぐということができる。
よって、sensitivity listに複数のRESET信号が書いてあっても、良い。
この理解で良いでしょうか?
always @ ( negedge reset1 ornegedge reset2 or negedge reset3 or posedge clock ) beginという記述なら、
if( (rsest1==1'b0) || (rsest1==1'b0) || (rsest1==1'b0) ) begin
reset処理
end else begin
clockで駆動される通常処理
end
何か、ちょっとわかってきた気がします。ありがとうございます。
>>903 >1. 「always @ ( )という部分は、D-FFのイメージで書けば良い」ということでしょうか。
良くない。
> D-FFは、「↑動作のclock端子」と「レベル動作のRESET、D、Q、/Q」があり、
> sensitivity list中の信号メンバーは、D-FFのそれぞれのピンに対応している、
> ということですね?
ちがう。
> 4. ところが、RSESTは、複数箇所から来ても良いので、次のように
> reset1, reset2, reset3をorでくくって、RESETピンにつなぐということができる。
> よって、sensitivity listに複数のRESET信号が書いてあっても、良い。
> この理解で良いでしょうか?
良くない。
単に、verilogとして書けるか、ということとは別にして、
fpgaなり、asicなり、のRTLを書くのには良くない記述、という意味でね。
>>904 さっそくありがとうございます。
>単に、verilogとして書けるか、ということとは別にして、
>fpgaなり、asicなり、のRTLを書くのには良くない記述、という意味でね。
ありがとうございます。
べき論があって初めて納得ができるものと思っていますので、「こうあるべき」というお話を
ぜひ聞きたいです。よかったら教えてください。
always @ ( )のsensitivty list部分は、何をイメージして書けば良いでしょうか。
本には「このlist内に書いた信号が'変化したら'〜」と書いてあるのですが、
そもそも本のこの表現では、回路図をイメージできずにいます。
変化したらったことは、ISEが「D-FF2個と2入力ANDによる変化を検出する回路」を
それぞれの信号に対して組み込んでくれるのだろう、と思っていました。
今まで、(negedge RESET or posedge CLOCK)しか書いたことがありません。
()内の意味を良く理解していないから、怖くて書けないんです。
いいチャンスだと思いますので、sensitivity listの意味をぜひ知りたいと思っています。
宜しくお願いします。
DFFと非同期リセット、同期リセットを勉強
>>906 ありがとうございます。
非同期/同期のresetは、この程度しか知りません。
always @ ( negedge reset or posedge clock ) begin // clock変化もreset変化も受け付ける
if( rsest==1'b0 ) begin // 先にresetを評価するので、非同期reset
reset処理
end else begin
clockで駆動される通常処理
end
end
always @ ( posedge clock ) begin // clockの変化しか受け付けない
if( rsest==1'b0 ) begin // そのclockによりresetが評価されるので、同期reset
reset処理
end else begin
clockで駆動される通常処理
end
end
このように理解しています。
sensitivity listに、3つ以上書くのが良くない理由が・・・・ワカリマセン
>>907 DFFでは、
1.エッジ駆動ができるのは、クロックだけ。
2.非同期のセット/リセットがある。
3.後は、DとQ。
でしょ?
なら、センシビリティリストには、クロックとリセットだけだよね?
それ以外のイベントでは、Qは変化しないんだから。
ついでに、VHDLでは、DFF正確に記述できるが、
VerilogHDLでは、DFFを正確に記述する事ができない。
クロックエッジと、セット/リセットのエッジを使う事になるから、
暗黙の了解として、
always @(negedge reset or posedge clock)
等と記述する。
あと、ラッチや非同期の場合も、always @を使うけど、
その場合、センシビリティリストは関係あるもの全てとなる。
私の場合は、always @(*)で逃げるけどね。
alwaysブロックが組み合わせ回路であれば、
センシティビティリストに全ての入力信号を
記述しなければならないが、
フリップフロップを記述する場合は、
クロックとリセット以外は通常記述しない。
というのは、D-FFはリセット信号と、クロックによってのみ駆動されるためで、
>>>>always @ ( negedge res or posedge CLK or negedge AAA) begin
のように
>>897 で、センシティビティリストに記述されているAAA信号は、
クロックまたはリセットの入力が2本あるD-FFとして解釈される可能性がある。
おそらく、上記の記述であればAAA信号はalwaysブロック内で
記述されていれば、クロックの立ち上がりエッジに同期して値が
評価されるので、センシティビティリストに入れる必要はない。
>>907 >sensitivity listに、3つ以上書くのが良くない理由が・・・・ワカリマセン
同期リセット、非同期リセットの理解はあっていると思います。
リセット条件が複数あるのがいけない理由はFPGAでは関係ありません。関係あるのはASICでスキャンテストをする時です。外ピンから全てのフリップフロップのリセット、クロックが制御出来る必要があります。
回路の流用性を考えても、FPGAとASICで記述が異なるのを避ける意味でも、リセット条件が複数あるのは、あまらおすすめできない記述です。
907です。みなさん、どうもありがとうございました。
おかげで少しわかってきたような気がします。
私の、そもそもの勘違いというか理解不足な点は、
「always文は、clock同期の回路に使う書き方」と思い込んでいた事です。
組み合わせ回路にも使えるんですね。知りませんでした。
以前に本を呼んだときに、(a or b or c or ...)のように複数書かれていたのを記憶していて、
「clock動作の物で、あの書き方もできるんだ」と思っていました。すみません。
>>908 >なら、センシビリティリストには、クロックとリセットだけだよね?
>それ以外のイベントでは、Qは変化しないんだから。
同期回路の記述をするときのalways()では、やはり、D-FFのイメージで良かったんですね。
ありがとうございます。
>>909 >クロックまたはリセットの入力が2本あるD-FFとして解釈される可能性がある。
この文章のおかげで、理解できました。ありがとうございます。
>>910 ありがとうございます。ご紹介のページ、明日読んでみます。
>>911 夜分に、ありがとうございました。
Verilogはシミュレーション言語だというのを、すっかり忘れていました。
実機を動かすために、へたくそなHDLばっかり書いているので、すっかり。
手持ちの本を読み返してみたら、木村さんの本に
「always@()は、組み合わせ回路でも使えるが、混乱しやすいので、同期回路だけで話を進める」
と書かれていました。今になって、その意味がわかりそうです。
HDLを書くときは、いつも「回路図を思い浮かべながら」書くようにしていますが、
a <= b; が2カ所にあると、出力が喧嘩するからいけないとか、case文のセレクタは
ロータリーSWと同じだとかです。しかし、always()は、結びつける実態がわからずに
今まで過ぎてきましたが、D-FFだとすれば、合点がいきます。
今回の私の結論です。
・always()は、D-FFの接続を考える。
・always()は、同期回路だけに使おう。
・always()は、( negedge nRESET or posedge CLOCK )のみを使うようにしよう。
みなさん、本当にありがとうございました。
>>911 >リセット条件が複数あるのがいけない理由はFPGAでは関係ありません。
>関係あるのはASICでスキャンテストをする時です。外ピンから全ての
>フリップフロップのリセット、クロックが制御出来る必要があります。
別に、複数のリセット条件があっても別に関係なくね?
LSI全体のリセットと特定ブロックのリセットがある場合もあるし。
always に CLK と RESET しか書けないのは、合成ツールの都合だと思うけど。
>>908 >あと、ラッチや非同期の場合も、always @を使うけど、
>その場合、センシビリティリストは関係あるもの全てとなる。
>私の場合は、always @(*)で逃げるけどね。
always @* 使ったら、ラッチは出来ないぜ
ってか、ラッチが出来ないようにするためじゃね?
センシティビティリストの中でどれがクロックイベントなのか明示できればいいのにね
>>913 >別に、複数のリセット条件があっても別に関係なくね?
>LSI全体のリセットと特定ブロックのリセットがある場合もあるし。
その場合でも、外ピンから全てのフリップフロップのリセット、クロックが制御出来る様に回路を挿入する必要があります。
>always に CLK と RESET しか書けないのは、合成ツールの都合だと思うけど。
リセット条件は複数でもalwaysに書くことができるし、合成もできます。リセット端子の手前に論理が絡むだけです。
ただ多くの場合はちゃんと考えればリセット条件が複数ある必要はないはずですので、推奨としてはclk, rst_x だけの方がいいです。
ISEで、Verilogの書き方について教えてください。 現在VerilogでHDLを書いてますが、top階層のファイルに、HDLがズラ〜っと長く並んでいます。 機能ごとなどで ////////// とか /* ------- */ とかで区切って、見やすくする 工夫はしていますが、大まかなブロック的なことも、a[0]のような細かいことまでが、 1ファイルに長くなって見にくいし、間違って触ってしまう危険もあると考えています。 そこで、次のような方法を考えたのですが、実現できるのでしょうか? まず、topレベル階層を回路図でブロック図を書く。 次に、そのブロック図をダブるクリックしたら、 今度はVerilog HDLの画面になるというふうにできないか?と考えています。 こんなこと、ISEにできるのでしょうか?
>>916 Top階層の.vには接続だけが書いてあるんですよね?
小さなプロジェクトならそれも便利だと思います。方法は知りません。すいません。
ただ、デザインがおおきくなってくると処理が重くなるばかりで、現実的じゃないので別のドキュメントを用意した方がいいでしょうね。
ISE以外も使えるなら、HDL DesignerとかVerdiとかあるんですが。なかなか思う様にはなってくれません。
>>917 ありがとうございます。
>ただ、デザインがおおきくなってくると処理が重くなるばかりで、現実的じゃないので
ということは、やはりtop階層も含めて、全身Verilogで書いた方が良い、
ということでしょうか?
>>918 それが一般的ですね。
あまりアイデアないです。すいません。
了解です。ありがとうございました。 今は、////////// とか /* ------- */ で区切ることと、 `includeで別Fileにすること、 DCM #(xx) U1 ( .a(), .b(), .... ) などで、接続を分かり易くしていますが、 果たして1年先に見たときに、良くわかるかどうか。 ありがとうございます。
ブロック図描いて、ブロック=モジュール=ファイル、にすれば?
>>916 quartusは出来たから、多分ISEでもできるんじゃないかな?
トップをスケマで指定する。
次にソースからブロックモジュールを生成。
トップのスケマでソースから生成したブロックモジュールを接続して出力ピン指定すればよかったはず。
ISEかquartusか忘れちまったが、ピンの追加、削除が面倒だったような記憶がある。
処理が重くなるってのは、確認したわけじゃないだろうから気にしなくてもいいと思う。
でかいモジュールを設計したら、ソースレベルでもブロックレベルでも変わらないと思う。
オレも比べたわけじゃないけど、配置配線の負荷にくらべれば、ネットリストの変換なんて屁みたいなものだろうと思うぞ。
>>921 ,
>>922 ありがとうございます。
できるみたいですね。Xilinxのページに行って、ISEのチュートリアルを読んでみます。
みなさんは、どのようにして見やすくしているのか、興味があります。
本来の回路図は大規模なものまで書いたことがあり、それぞれ部品の位置やICの大きさや形状が違っていて個性的なので、
「これは差動アンプだな」、「DAコンバータだね」と視覚的にすぐにわかって、調子良いです。
一方、これがHDLでは、全部が全部 always@()で始まる「文字列ばっかり」なので、何か工夫できればと思っています。
特にtop階層が回路図のように書けたら、各moduleが四角い箱で表せていいなぁ、って。
HDL書きながら、いつも自動車の配線?をイメージしています。
・module()は、ECUに相当して
・wireはそれらを結ぶハーネス
・各ECUには「エンジンECU」とか「ABS ECU」とかの名前がついていますが、それはVerilogのmodule名、
・ECUのコネクタは、port listに相当するようか気がします。
・さらに、module内に組み込むインスタンスは、ECU基板上のICみたい。
TC74HC00 IC101 ( .pin1(SW1), .pin2(SW2), .pin3(wire0), ..... );
TC74HC00 IC102 ( .pin1(SW4), .pin2(SW5), .pin3(wire1), ..... );
TC74HC00 IC103 ( .pin1(wire0), .pin2(wire1), .pin3(SOL1), ..... ); という感じ。
>>923 僕は使うツールがISEとも限らないので、Visioとかお絵描きソフトを使ってます。
その方がブロックの持つ機能や信号パスがよく整理できて良いと思っています。
が、1対1になる様にメンテナンスするのが大変です。おすすめはまず、絵を書いてからRTLを書く。その方が、記述ミスも格段に減るので良いですよ。
ASIC屋はやっぱりVerdiが多いのかな?
>>924 は大丈夫だろうけど。
1対1になってなかったがためにバグ混入させた先輩がいた。
visioで1対1回路図描いてる人って、それだけで満足しちゃってるんだよね。
仕事の大半を1対1の付け合せ作業してる。
そして、挙句の果てに面倒だから後輩にそれをさせる始末。
自分の趣味でそういうボトムアップ設計やってんだから、自分で面倒見ろよって話。
そんなことするよりも日本語でちゃんと仕様書を書いた方がいい。
ちなみに、上の先輩の設計仕様書はたった3ページ。
日本語のないvisio(図面オンリー)は20ページ。
あなたの仕事は引き継げません。
>>923 上のようにならないようにね。
ああ、言いたかったのは、 図を描くのは重要なんだけど、概略図的なもので十分で、 こまごまと1対1の回路図なんかを自己満足で書いて、 本来の仕事を見失ってる人にはならないようにねってこと。 そもそも、1対1の図を一生懸命描いた時点でHDLの存在意義って? って考えにならないのかな?結局、同じことを2回繰り返してるわけで。。
>>913 always @(*)でも、ラッチは生成されるよ。
>>927 機能仕様書も設計仕様書(Visio)も例え完璧だったとしても、HDLに存在意義は
あるよ。安全な設計の為なら2回くらい同じことしたっていいじゃないですか?というのが1つと、信号の関係やクリティカルパスをつかむのも簡単だし、仮にECOになってもすごく楽だと思う。
あと、さらに加えるとタイミングチャートも必要ですね。
個人的な趣味になっちゃうかもしれませんが、同じ機能仕様であっても、RTLに落とす時にそれぞれ担当者がどう考えたかが知れるので、設計仕様は必要だと思います。思想が垣間見れるので面白いです。
always @(*) って、 「このalways @(*)begin 〜 end 間に記述する信号は全て」という意味の「*」 という意味で合っているでしょうか?
>>931 何か意見があるんだったら教えてください。
>>929 私も同感です。
>安全な設計の為なら2回くらい同じことしたっていいじゃないですか?
その通りだと思います。やっているうちに間違いに気づくことも多いです。
>RTLに落とす時にそれぞれ担当者がどう考えたかが知れるので、
これは重要なことだと思います。
後日に他人がメンテしなくても、自分で1年後に見たときに、動作がわかる
あるいは、そのような記述に至った理由を知ることは重要だと思います。
私は、1行毎にコメント入れています。
あるいは、コメント部分を作って
// 今回の○○の処理は、○○の方法で実施した。理由は、次の2つ。
// 1 ○○課長の指示
// 2 デバイス商社の技術の○○さんのアドバイスによる。
// 私は、○○の方法のほうが良いと思ったが、課長が言うのでやむなく。
// 後日修正するときは、注意して行うこと。
などと、書き込んでいます。
>>929 2回同じことをすることが安全な設計になるならいいんだが、
それは1対1になってることが大前提であって、それが崩れるとかなり危険だよ。
そして、その大前提を保証するものは何もない。
あと、そうやって立ち上げたRTLって、visioありきのRTLだから可読性に欠けるものをよく見る。
TATが要求されるこの時代に、昔のスケマ設計に戻っちゃってることに気づいてほしい。
エンジニアなら、最新の方法で効率的な設計を探求したくならない?
ECOやクリティカルパスとかってのはツールで一発。visioで眺めるより見逃しないし。
タイムチャート云々以下はもちろん同意。
ただし、visio回路図だけでこれが設計仕様書だとかいっちゃう奴は消えてほしい。
文章をかけと。
>>935 何も書かないよりもはるかにいいし、一見脱線かつチラシの裏に近いものでも、
心情描写には当人の記憶を呼び戻す効果が強まるから「未来の自分」のための
コメントとしては結構役に立つよ。
CAMみたいなものか
>>936 1対1対応とは言うものの、図面とHDL設計では実は1階層下がっているんでないかい?
スケマ通りのロジックを作って一本一本接続を記述してるわけでもなかろう。
まぁ、“対応の検証が出来ないのはどうよ?”とは思うが。
>>927 以前居た会社の社長がそういう図面を、VISIOとかの作図ツールじゃなくて
MAC系のDTPツール書かせるものだから、えらく生産性が低くなっていた。
それで納期が遅れたとか何とか、馬鹿か阿呆かと(-_-#
DTPソフトはともかく、 VISIOってそんなにいいの? (使ったこと無いけど) 機械CADよりもいいのかな。
ビジネス用の図を描くのに特化してるから その手のものを描く"だけ"なら生産性は高いよ。 創造的なことと作業的なことは根本的に違うってことかな。 早く出来てもチェックという名の駄目だしで結局止められて タイムアップで実質そのままリリースとかホントに生産性の 向上が必要なのは組織体制だったりするけどな。
ISEだったら、SynthesisのとこのView RTL Schematicで、RTL記述から回路図を表示してくれるけど、それじゃだめなの? モジュールの箱の位置を移動できれば、導線がもっと見易くなるとか思うけど、無料なWEBPACKだし仕方ない気もする。 見易いかどうかはともかくとして、RTLと回路図が一致する訳だし。
945 :
936 :2009/09/26(土) 10:54:45 ID:klbKFqfI
>>940 うちの先輩はFFとワイヤとセレクタのレベルで図面書いてた。
しかもセレクタの制御線の出所は、省略されてたり、
すごい遠くはなれた図面からやってきたりで・・・
>>944 そそ。それならいいと思うよ。Verdiとかもできるね。
でも
>>929 とかが言ってるのは、回路図が先でそれを描いてからRTLを書くという手順。
むかし、回路図からRTL生成ツールってあった気がするが、
そんなRTL読めたもんじゃないだろうし。
そもそもRTLの存在意義が本末転倒だしね。
>>944 僕は、ISEのその回路図をよく見ている。改造した部分が、予想通りになっているか、ってね。
でも、回路図がわかりにくい。
ALTERAの方が3.14159倍見易いと思う。
>>945 compassだっけ?確かそんなツールがあったような。
VISIOの代わりにOpenOfficeのDrawでやってます
そういうのはどうでもいい
950 :
929 :2009/09/28(月) 21:40:57 ID:eifXG5zo
>>945 回路図もRTLも抽象度を意識して書くべきだと思うよ。FFとセレクタとワイアまで落として読み易いはずがないし。
どのレベルまで落とすのが適切か?は事前に話しておくべき。その後も実際書いたものとの差分を設計レビューでさらうのがいいかなと思ってます。
できるだけ多くの人に読み易いと思ってもらえた方がいいと思うので。
951 :
929 :2009/09/28(月) 21:52:37 ID:oWdOEWxi
>>936 下手するとスケマ設計に戻るかもしれないですね。RTLのメリットが出る様に考えて書かないとだめってことです。
>>946 >ALTERAの方が3.14159倍見易いと思う。
これ、ALTERAの方が分かりにくいって意味?
へんなところで文章に独自性を発揮されると真意が伝わらないわけで・・・
> これ、ALTERAの方が分かりにくいって意味? どこをどう読めば・・・
ただ単に数倍と書くのもつまらないから、3.14倍とつまらないことを書いただけなのに・・・
だよな? この文章でどう曲解したらALTERAの方が分かりにくい方向へ解釈されるのかwww
たまに抽象度が高いクロック系統図がリリースされることがある。 こんなのでCTS張れるかってやつ。
sin(π)だと0になるので・・・ まあsinを付けるのがありなら、logを付ける奴も出てきてわけわからんことに。
n倍と f(n) を比較する方がわけわからん。。
スケジュールチキンとは言ったものだな・・・ ガクブル
962 :
774ワット発電中さん :2009/10/01(木) 20:40:39 ID:Kozkf/p/
すみません、verilogで質問があります。おしえてください。 a = ( sw==1'b1 )? b : c; d = ( sw==1'b1 )? e : f; g = ( sw==1'b1 )? h : i; という記述で、現在動いています。これは、SWのon/offに応じて切り替える、まるで 3連スイッチのような回路です。 ところで、同じ( sw==1'b1 )?が何回も登場しますが、もっと簡便な記述はないものでしょうか? たとえば、 { a, d, g } = ( sw==1'b1 )? { b, e, h } : { c, f, i }; のような感じです。 もっとも wire x [2:0]; wire y [2:0]; wire z [2:0]; x = ( sw==1'b1 )? y : z; と書けるのは了解していますが、 変数名がxxx[2], xxx[1]とかになってしまうと、ソースが読みにくくなるので、 それぞれの信号名が生かしたいのです。そんな都合のいい記述方法はないでしょうか。
963 :
929 :2009/10/01(木) 20:56:41 ID:GOApCJX9
>>962 >{ a, d, g } = ( sw==1'b1 )? { b, e, h } : { c, f, i };
よりも、
>a = ( sw==1'b1 )? b : c;
>d = ( sw==1'b1 )? e : f;
>g = ( sw==1'b1 )? h : i;
の方が簡便だと思いますが。
>>962 always @ * begin
if( sw == 1'b1) begin
か、 function でも書ける。
しかし、always で組み合わせ回路書くのを嫌う人もいるし、
3つ程度なら、元のままでいい気がする。
965 :
774ワット発電中さん :2009/10/01(木) 22:35:00 ID:Kozkf/p/
さっそくありがとうございます。 そうですか、そのままのほうが見やすいですか。 私も慣れるようにしないといけないかも。ありがとうございます。 always @ とくれば、clockに合わせて動作する範囲だ、と思い込んでいますので (*)も使ったことがありません。 assign 文が結構好きで、特に a = ( xxx )? b : c; が好きです。 折り返して、 a = ( xxx )? b : ( yyy )? c : ( yyy )? d : e ; とか使ったりもします。 STARCの本には「2つまでにしとけ」と書いてありますが。 ありがとうございました。
966 :
774ワット発電中さん :2009/10/03(土) 01:23:23 ID:NYFQ0Rb4
教えてください。 ISEの吐くメッセージで、よく見かける次のエラーメッセージがあります。 line 122 Reference to vector wire 'HOGE' is not a legal reg or variable lvalue. 実は、この文章を何度読んでも、意味がわからないのです。 「あ、いつものこれか」と理解し、wire と regの代入間違いを修正していますが、 実際には、どのように訳すべき文章なのでしょうか。 具体的に上記の文章は、 「行番号122で参照したvector wire 'HOGE' は、legal reg または variable lvalueではありません」 という感じだと思うのですが、その次がわかりません。 1. vector wire 2. legal reg 3. variable lvalue 「legal reg」のregは、registerのことだと思いますが、 legalという単語については、いくら調べても「法的な」としか訳が見つけられません。 でもきっと、Verilog HDLにぴったりの語訳があると思うのです。 lvalueについては、調べてわかりました。これがなんと、「左辺値」だそうです。 L(左) + value でlvalueでした。ちょっとビックリです。
このスレの住人に英語はちょっと・・・・_
>>966 修飾の順序関係は、こう。
Reference (to vector wire 'HOGE') is not a legal ((reg or variable) lvalue).
助詞を足して日本語の語順にすると
vector wire 'HOGE'のReferenceはlegalなreg or variableのlvalueではありません。
あとは単語を適当に訳してくれ。
Verilog/VHDL混在デザインの論理シミュレーションってどうやってます? やっぱ ModelSim PE を買うしか無いんかな・・・。
>>966 英辞郎で調べた?
4番目に「合法な、適法な」と出てくるよ。
今の場合の「法」は「文法」のこと。
つまり「文法的に正しい」という意味。
972 :
774ワット発電中さん :2009/10/03(土) 12:40:36 ID:NYFQ0Rb4
996です。みなさん、ありがとうございました。とても参考になりました。
>>968 >多分これじゃねえの
はい、まさしくそれです。
>>969 >修飾の順序関係は、こう。
>Reference (to vector wire 'HOGE') is not a legal ((reg or variable) lvalue).
ありがとうございます。括弧でくくると、とてもよくわかりますね。
つまり、vector wire 'HOGE'の参照は合法ではない。ということですね。
「legal reg」という括りではなかったんですね。お恥ずかしい。
>助詞を足して日本語の語順にすると
すばらしいです。ありがとうございました。
>>971 ありがとうございます。
はい、アルクは愛用していますので、それで調べました。そうしたら法的なという語訳でした。
>今の場合の「法」は「文法」のこと。
>つまり「文法的に正しい」という意味。
今考えるとその通りですね。ありがとうございました。
単語の意味をその通りにしか解釈できないのは、私の勉強不足ですが、
>>969 のような、修飾の順序関係をうまく読めないのも、英文の苦手な原因です。
「正しい情報は、英文データシートでないとね」とか良く言われますが、
私にとっては、「余計にわからない」です。
もう一つ教えてください。
ちょくちょく出てくる「vector wire」とは、どのように理解すればよいのでしょうか?
wireは、reg , wire のwireだと思うのですが、vectorの意味がわかりません。
アルクとかIT用語辞典とか調べましたが、ピンと来る解釈が見つかりませんでした。
束の線? 配列の線? 大きさを持つ線?
>>972 vector wireとして示される信号線は、バスじゃありませんか?
974 :
774ワット発電中さん :2009/10/03(土) 13:04:38 ID:NYFQ0Rb4
>>973 ありがとうございます。
はい、おっしゃる通り、wire [15:0] HOGE で、バス線です。
「vector wire」とは「複数の線」という解釈でしょうか。
vectorという単語に、「複数の」という意味がある・・・・でしょうか。
すみません。
>>974 文字通り「ベクトル」だろ
ベクトルの数学的意味は何かでしらべてくれ
・Verilogの入門書(若しくはサイト)を見る ・使用しているツールのドキュメントを読む ぐらいのことはしてから質問してください
977 :
774ワット発電中さん :2009/10/03(土) 14:55:55 ID:NYFQ0Rb4
>>975 ありがとうございました。
はい、数学的なベクトルの意味は了解しています。方向と大きさをもつ物理量ですね。
vectorの対義語として、scalarがありますが、これは方向を持たない大きさです。
vector, scalar どちらの単語にも「大きさ」という意味はあるので、
複数のwireを「vector wire」、1本のwireを「scalar wire」と表すならば、
方向の意味を持つかどうかの違いだと思うのです。
ですので、「方向が、wireの複数を表現しているのではないだろう」と考え、
はてvectorとは何ぞや?という疑問に至りました。
すみません。
>>976 ありがとうございました。
さっそくご指示の通り、調べてみたところ、
XilinxのXST guideに、Nビット幅(ベクタ)、1ビット幅(スカラ)と書いてありました。
しかし、なぜ複数本のことをVECTORと言うのか、見つけられませんでした。
ありがとうございました。
vectorはアルクで調べてみてください。
>>966 N88-BASIC で、Illegal function call とか出てきたのを覚えてないのか?
>>970 VCS も NC もOKじゃまいか?
いまどきBASICを共通知識と思うなよ...
BASICはいいだろ。N88とか付けるあたりは糞。
VBとN88は別モンでしょうからね。
>>980 いまはFORTRAN 77が共通知識だよな
一般に数学では 複数のスカラ値の集まりであれば、それだけでベクトルと呼ぶんだよ スカラ値が量を意味してもいいし、しなくしてもいいのと同じように ベクトルが有向量を意味してもいいし、しなくてもいい
>>984 そうすると、なぜ「vector」という単語が、複数のwireのことを表しているのか
ますますわからなくなりますね。
あるいは、用語の由来を深く追求してはいけないのでしょうか?
古駄汁かよ
>>985 だから、984氏がscalarが複数集まったものがwireだと教えてくれてるだろ。
今の場合はwireがscalarで、wireが複数集まったもの、例えば
wire [1:0] がvectorでしょ。
英語力とかではなくて、物事を抽象化する事が苦手なのでは?
>>988 失礼。
(誤) だから、984氏がscalarが複数集まったものがwireだと教えてくれてるだろ。
(正) だから、984氏がscalarが複数集まったものがvectorだと教えてくれてるだろ。
素朴な疑問、おしえてください。 verilogで、for()というのがあります。 配列とかメモリの初期化に使用するみたいです。 合成したとき、このfor()は実際にどのような動きをするのでしょうか? 例えば、メインクロック100MHzの回路の記述の中にfor()で10回繰り返すような記述を合成した場合、 ・次のクロックまでの間に、クロックの10倍の早さ(1GHz)でfor()内が処理される。←違うと思います。 ・それ以降のメインクロック10個期間で処理される。他の処理はそれまで(100ns)待たされる。 ・その他 宜しくご教示お願いします。
> ・次のクロックまでの間に、クロックの10倍の早さ(1GHz)でfor()内が処理される。←違うと思います。 それに似た結果かもな。 > ・それ以降のメインクロック10個期間で処理される。他の処理はそれまで(100ns)待たされる。 非同期回路だったらどうする木田。 > ・その他 正解。
>>990 for文で合成が前提なら時間軸上での繰り返しを指定するものではないよ。
データバスなんかの回路をイメージするといい。8ビットのバス全てが同じ
回路を構成しているとき、各ビットごとに回路を記述するのが面倒なので、
for文で繰り返し部分を記述する。
990です。
>>991 >非同期回路だったらどうする木田。
仰るとおり、たしかにマズイですね。for()のイメージが、まったくわかりません。
>>992 ありがとうございます。
>for文で合成が前提なら
なるほど、シミュレーション用の言葉ですか。納得です。
>各ビットごとに回路を記述するのが面倒なので、for文で繰り返し部分を記述する。
ということは、次のような理解で良いでしょうか?
・for()は、コンパイラーに対して、例えば
「forで簡単に書いてあるけど、<この回路>が64回路分あると思ってくださいよ」と
依頼する時に使用する記述。
・そのため、実際にFPGA内に繰り返し回路が配置されるわけではないので、回路はイメージできない。
(イメージするものではない)
reg [7:0] hoge [0:63]; for(i=0; i<64; i=i+1) hoge[i]<= 0; と hoge[0]<= 0; hoge[1]<= 0; : hoge[63]<= 0; は、どっちがいいかってだけの話じゃね?
パラメタライズを推し進める時には重宝しますね。>for 上位階層から与えるparameterを変更するだけで中の記述を使い回せるので。 parameter WIDTH = 8; parameter NUM = 64; reg [WIDTH-1:0] hoge [0:NUM-1]; for(i=0; i<NUM; i=i+1) hoge[i]<= 0;
996 :
992 :2009/10/05(月) 08:28:26 ID:5ZO63/dI
>>993 >>for文で合成が前提なら
>なるほど、シミュレーション用の言葉ですか。納得です。
シミュレーションにも使えるが、合成の場合にはの意味。
従って、時間的な遅れを表現するものではない。
>>各ビットごとに回路を記述するのが面倒なので、for文で繰り返し部分を記述する。
>ということは、次のような理解で良いでしょうか?
>・for()は、コンパイラーに対して、例えば
>「forで簡単に書いてあるけど、<この回路>が64回路分あると思ってくださいよ」と
> 依頼する時に使用する記述。
>・そのため、実際にFPGA内に繰り返し回路が配置されるわけではないので、回路はイメージできない。
> (イメージするものではない)
回路が64回路あるということは、実際の回路として64回路実装される。つまり、繰り返しの
記述を圧縮している。
>>994 の説明そのもの。
forの、合成について言うなら、 C言語で言うところの プリプロセッサ命令や、♯defineのイメージ。 コンパイル前に終了してしまう話ね。
>>993 > 依頼する時に使用する記述。
>・そのため、実際にFPGA内に繰り返し回路が配置されるわけではないので、回路はイメージできない。
> (イメージするものではない)
繰り返しというより、並列記述じゃないかなぁ。
あと、回路はイメージしないとだめだと思う。
もうちょっと抽象度の高い言語だとイメージは難しいけど、
verilogなら、意識しないと、意図しない回路が生成されたときに
気づかないことになる。
制御文と回路記述がごっちゃに論議されてるんでね?
1000 :
774ワット発電中さん :2009/10/05(月) 12:35:38 ID:pC32x4wK
>>999 ID がカッコよすぎるぜ!
でも言ってることは違うと思うYO!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。