トップページ⇒denki
1001コメント354KB

【Verilog】記述言語で論理設計 Project2【VHDL】

■ このスレッドは過去ログ倉庫に格納されています
0001792= ◆YMO/ALTERA 04/09/03 12:21ID:p+kby74r
HDLの処理系も、それを実際に動かすシミュレータ・評価基板も
安価で入手できるようになってきました。

このスレが目に入ったおまえ! HDLで何か作って遊んでみませんか。

日曜工作のHDL書き、学生さん、プロの方、カキコお待ちしております。
関連情報は >>2-10 あたり。

前スレ
【Verilog】プログラムで作る回路 Project1【VHDL】
http://science3.2ch.net/test/read.cgi/denki/1072330555/l50
0784774ワット発電中さん2005/06/24(金) 18:18:35ID:1SWoqVpN
>>783
何をわけわからんこと書いてるんだ?
お前こそがんばれや。
0785774ワット発電中さん2005/06/24(金) 19:50:19ID:SF7gkNx8
そもそも752が回路設計に必要な知識があるのかどうかが気になる…
0786774ワット発電中さん2005/06/24(金) 20:56:08ID:pOB0xwE8
>>785
そんなもん無くても構わないだろ、本人が宿題っていっているんだし。
0787774ワット発電中さん2005/06/24(金) 21:45:43ID:4PHoRlc3
回路図入力が一番簡単だな。
0788sage2005/06/24(金) 23:43:12ID:N9s+7dXz
module(clk,xrst,datain,q)
reg ff1, ff2;
always@(posedge clk or negedge xrst)
if(!xrst)begin
ff1<=1'b0;
ff2<=1'b0;
end
else begin
ff1<=datain;
ff2<=ff1;
end
assign q=~ff2 & ff1;
endmodule

ここまで書いてて気づいた。
入力はresetかー。こりゃ、俺にははかけないや。
だれか答えを俺にも教えて。
0789774ワット発電中さん2005/06/25(土) 00:28:47ID:Il+q3Oeh
module pulse (clk, xrst, q);
inputclk, xrst;
outputq;
regq;
regq_mask;
always @(posedge clk or negedge xrst) begin
if (!xrst)
q <= 1'b0;
else if (xrst == 1'b1 && q == 1'b0 && q_mask == 1'b0)
q <= 1'b1;
else
q <= 1'b0;
end
always @(posedge clk or negedge xrst) begin
if (!xrst)
q_mask <= 1'b0;
else if (q == 1'b1)
q_mask <= 1'b1;
else
q_mask <= q_mask;
end
endmodule
07907582005/06/25(土) 01:50:29ID:RRAZhokE
もれが >>758で書いたことが明確にならんと回路を
実装することはできないんだが、本物の >>752 は
どこ行った ?

しょうがないからとりあえず、以下の仮定をする。

(1) resetは clkに非同期。
(2) clkの立ち上がりとresetの立ち上がりが同時に
起きた場合 (正確には、使用するフリップフロ
ップの setup timeと hold timeの間に resetの
立ち上がりがあった場合)は出力 qはそれ以外の
場合より遅れてもよい。
(3) resetの立ち上がりから qの highパルスまでは
できる限り短い時間で出力すること。
(4) qはそれ以降の回路でクロック信号として使用さ
れない。
(5) q の high幅は 1clk周期とする。

以下次号
07917582005/06/25(土) 01:51:25ID:RRAZhokE
その他

(6) resetにグリッチはないものとする。
(7) モジュール名は mkpulseとする。
(8) Verilog-HDL (RTL)で記述すること。
(9) 負論理なのに resetという名前はいやらしいが、
そういう仕様なので従う。

以下次号
0792774ワット発電中さん2005/06/25(土) 01:53:01ID:TsEjQbYg
次号マダー?
07937582005/06/25(土) 01:55:27ID:RRAZhokE
module mkpulse (
 reset,
 clk,
 q
);
 input reset; // Active-low asynchronouse reset
 input clk; // Using positive edge
 output q; // Pulse width is one clock cycle

 reg delay1reset;
 reg delay2reset;
 reg delay3reset;

 // Synchronize asynchronous reset signal
 always @(negedge reset or posedge clk) begin
  if (~reset)
   delay1reset <= 1'b0;
  else
   delay1reset <= 1'b1;
 end
 always @(posedge clk) begin
  delay3reset <= delay2reset;
  delay2reset <= delay1reset;
 end

 // Make one clock cycle width pulse for rising edge of delay2reset
 assign q = ~delay3reset & delay2reset;

endmodule

以下次号
07947582005/06/25(土) 01:56:06ID:RRAZhokE
一方、resetという名前から非同期リセットという
仮定をしたが、今のところそのような指定はない。
よって resetは clkに同期していると仮定することも
できる。

すると、以下次号
07957582005/06/25(土) 01:58:27ID:RRAZhokE
module mkpulse (
 reset,
 clk,
 q
);
 input reset; // Active-low synchronouse reset
 input clk; // Using positive edge
 output q; // Pulse width is one clock cycle

 reg delay1reset;

 always @(posedge clk)
  delay1reset <= reset;

 // Make one clock cycle width pulse for rising edge of reset
 assign q = ~delay1reset & reset;

endmodule

以上
0796774ワット発電中さん2005/06/25(土) 02:17:58ID:qLwyTd70
ばーーーーか ----->>> >>758 ID:RRAZhokE 死ねよ
0797火魔人2005/06/25(土) 04:37:57ID:4D+YN02A
reg q;

initial begin
q = 1'b0;
end

always @(posedge reset) begin
@(posedge clk) q = 1'b1 ;
@(posedge clk) q = 1'b0 ;
end

合成できる物って言ってなかったから・・・
0798774ワット発電中さん2005/06/30(木) 20:38:43ID:cTpDojFz
初心者です

`define STATE1 3'b000
と
parameter STATE1 3'b000

はどう使い分ければいいのでしょうか?

parameterだとモジュールごとに同じのを書かないとだめみたいだし、
`defineだとレオナルドでは警告がでたし、
同じ定義を複数のモジュールやファイルで共用はできないのでしょうか?



0799774ワット発電中さん2005/07/01(金) 11:46:24ID:Gq1lU/Xf
>>798
parameterを別のファイルに書いて、`includeで読み込むようにしてたよ。
今はVHDLなんで使ってないが。
0800774ワット発電中さん2005/07/01(金) 18:00:38ID:4oZSX0ys
VHDLのintegerは32ビットは扱えないの?
0801774ワット発電中さん2005/07/01(金) 19:29:01ID:UB9KQarK
扱える(符号付)。
0802774ワット発電中さん2005/07/01(金) 21:09:25ID:4oZSX0ys
符合なし32ビットはダメ?
0803774ワット発電中さん2005/07/01(金) 21:49:57ID:UB9KQarK
だめ。
Natural, Positiveなどあるがいずれも31bitまで。
0804774ワット発電中さん2005/07/01(金) 22:39:15ID:4oZSX0ys
知らなかったorz
しょうがないから単純なカウンタなんで
std_logic_vectorにします
0805774ワット発電中さん2005/07/01(金) 23:05:14ID:6YAH5rTH
つーか、おかしいと思ったら少ないbitのカウンタ等を記述しSimして自分で納得する迄
試せると思うが。
やらないと言う事じゃ所詮その程度の知力と能力しかない証拠だわな。
0806774ワット発電中さん2005/07/02(土) 00:27:55ID:naY8xhRT
>>805
そこまでは試して31ビットまでは動くことがわかったけど
論理合成で蹴られる理由がわからなくて
もしかして言語仕様かと思ったらあらやっぱりみたいな・・・
0807774ワット発電中さん2005/07/02(土) 00:36:30ID:GL5nQR4k
(´-`).。oO(なぜ言語仕様を最初に読まないの)
0808774ワット発電中さん2005/07/02(土) 00:43:23ID:naY8xhRT
>>807
そんなところで引っ掛かると思ってないから
スマソ
0809774ワット発電中さん2005/07/02(土) 08:39:25ID:Zjc91X2T
これって全てに於いて共通することだよ。>先ず仕様確認

しかし、これで学習しただろう。
このスレに圧倒的に多いパターンなので萎えまくりだが。
0810774ワット発電中さん2005/07/02(土) 18:59:32ID:aRXfQTr1
すみません、言語仕様が何に書かれてるかもわかりません
0811774ワット発電中さん2005/07/03(日) 20:48:47ID:BJiFlm7C
> なぜ言語仕様を最初に読まないの
読んでないけど、Integerは32bitとして扱うツールが一般的、って話じゃなかったっけ?
VHDLとしては。
0812774ワット発電中さん2005/07/04(月) 00:40:48ID:29+tKHsl
>>811
一般的じゃなくてVHDLの仕様ですね。
0813774ワット発電中さん2005/07/04(月) 01:27:25ID:3sPfcV16
VHDLではまりやすい言語仕様ってどんなものがある?
0814774ワット発電中さん2005/07/04(月) 01:45:54ID:/UNyKoG7
組み合わせロジックを明示的に記述する文法がない
0815774ワット発電中さん2005/07/04(月) 10:01:40ID:YFhH4slB
>>814
それは合成ツールの仕様なんじゃないの?
0816774ワット発電中さん2005/07/04(月) 10:55:30ID:xEY162hW
verilogHDLのモジュールを動かして波形を表示できるフリーソフトって無いですか?
1のLibero 6.0って所に登録してCDが来るまで待たなきゃいけないんですかね…
できてばDL版が欲しいのですが
0817774ワット発電中さん2005/07/04(月) 11:53:18ID:QhGD2vPG
>>815
Verilogのfunctionに相当する書式がVHDLにあるか?
0818774ワット発電中さん2005/07/04(月) 12:11:26ID:Ij/MgU4M
>>817
サブプログラムじゃだめ?
0819774ワット発電中さん2005/07/04(月) 17:28:51ID:FQoAvdtf
サブプログラムが組み合わせロジックになる保障はどこにあるんだ?
0820774ワット発電中さん2005/07/04(月) 21:08:40ID:K2+JnxjR
verilogだとwireかregかで明示的に書けるけど、
VHDLだとそれが出来ないってことやね。
0821774ワット発電中さん2005/07/04(月) 21:35:22ID:mFXlXXTD
>>816
iverilog いいお。

つ ttp://www.ice.gunma-ct.ac.jp/~kimsyn/verilog/FreeSim/iverilog/iverilog.html
0822774ワット発電中さん2005/07/05(火) 01:05:45ID:iMF+7k6+
>>821
おれも普段つかってるよぉ。
あとは文法チェッカがあればのぉ、できればPC-UNIXとWinで使える奴…
0823774ワット発電中さん2005/07/05(火) 07:45:17ID:EV2MvFVz
>>820
ハァ?まったく違う
0824774ワット発電中さん2005/07/05(火) 10:07:24ID:VfZmOgLG
>>819
なんだ、戻り値が一個欲しいんじゃないのか(w
0825774ワット発電中さん2005/07/05(火) 11:24:35ID:C/UCYGWV
function文を何のために使うかわかってないアホ発見-----> >>824
08268162005/07/05(火) 14:18:37ID:VAPy/rIO
>>821さんありがとうございます!
ロゴにちょっとビビりましたが、これで宿題が終わりそうです!
0827774ワット発電中さん2005/07/05(火) 23:49:48ID:4WUJ+4FQ
てか記述量の問題を除けば信号の状態動きをきちんとかけるのはVHDL。
非同期のFFを記述すればVerilogの不完全さがよく解る。
>>820には理解不能だろうけどね。
でも、現実社会では好みと仕事に応じて好きな方を選べばいい。
0828774ワット発電中さん2005/07/05(火) 23:58:05ID:hhh9apiQ
>>827
別に言語の優劣の話ではなくて、>>813の話を受けてVHDLのはまりやす
い点を挙げただけだと思うけど。
出来る出来ないの話ならどちらかというと分が悪いのは・・・
0829774ワット発電中さん2005/07/05(火) 23:58:47ID:bVnJSGyJ
つか、論点は何処? 単に記述に関する宗教論なのか?
0830774ワット発電中さん2005/07/06(水) 00:10:09ID:JKUczYPV
明示的って言葉にアレを持ち出す無知さを笑ってるだけ。
0831774ワット発電中さん2005/07/06(水) 00:30:40ID:PBXbLLS3
明示的に他モジュールを宣言するcomponentに相当するverilogの記述は
なにかな。
08328212005/07/07(木) 20:33:45ID:2EifYSI9
お役に立てたようでよかったです。
学生さん?かな。  今後のことを考えるのであればメジャーなシミュレータにも慣れておいたほうがいいかも。
Model-Simとか。
0833774ワット発電中さん2005/07/07(木) 23:21:28ID:IJfAtQBC
このスレで既に常識になってる事、過去ログ読めば解る事を一々聞いてる様ではその時点でエンジニアの
素質無し。
既にエンジニアと言い張るなら辞めた方が良い低レベル。
0834774ワット発電中さん2005/07/08(金) 13:55:10ID:/Zw+xZjk
「そんなこと習ってません!」って逆ギレするエンジニアも辞めた方が良い
0835774ワット発電中さん2005/07/08(金) 13:56:30ID:/Zw+xZjk
人間を
0836774ワット発電中さん2005/07/08(金) 20:39:21ID:J+I8gBZp
人間は辞めなくていいよ。そこまでは言わない。
0837774ワット発電中さん2005/07/08(金) 20:42:58ID:O7AOTj/2
わざわざ時間を使って、過去スレ読むより、新たに問い直したほうが手っ取り早く答えが返ってくる場合が多い。
罵倒するやつにはさせとけばいい。

>>833
わざわざ糞忠告するぐらいならその間に答え書いてやれ。
それが嫌なら、何も書き込む必要は全くない。別にお前に聞いてるわけじゃねえ。黙ってな。
0838774ワット発電中さん2005/07/08(金) 22:48:43ID:ofL5amLB
>>837
自分で自分の道を拓けぬ者は、人の親切を簡単に無駄に出来る奴だ。

何を言われるか解らないからそんな的外れなレスを返すのだろうね。
そろそろ気付いたらどうだ自分の無能に。
0839774ワット発電中さん2005/07/08(金) 22:55:08ID:O7AOTj/2
>>838
そろそろ気付いたらどうだ自分の糞ぶりに
0840774ワット発電中さん2005/07/08(金) 23:45:53ID:ofL5amLB
ここは学校でも親切な人の寄合場でもない。
真摯な意見を聞く勇気がない者は改善も無理だろうね。
0841774ワット発電中さん2005/07/09(土) 00:36:36ID:EdHgZlXP
>>ID:ofL5amLB
そろそろゴミは死ねや!
0842774ワット発電中さん2005/07/09(土) 10:31:30ID:75PwG5FO
本当の事を言われて切れ間栗の厨ってマジ格好悪いね。
0843774ワット発電中さん2005/07/09(土) 12:18:21ID:7VfOAgWB
人間辞めるのはとびきり優秀なエンジニアくらいでしょ?
漏れの知人はいまだに頭の病気で入院中なのだが
0844774ワット発電中さん2005/07/09(土) 21:26:32ID:xG9jSyxv
> 頭の病気で入院中なのだが
大丈夫。
ナガシマさんだって復活したんだ!
0845774ワット発電中さん2005/07/10(日) 11:00:57ID:C0xlfYHC
初心者です。おまいら教えてください。
FPGAの評価基板でやってるんだけど、トップモジュールで

module test(CLK,SIGOUT)
input CLK;
reg count = 0;
output SIGOUT;

always @ (posedge CLK or negedge CLK)
count <= 〜count;
・・・後略

とやると count <= 〜count;のラインで
The logic for <count> does not match a known FF or Latch template.
というエラーが出るんだけど何故でしょう。
always @ (posedge CLK)にすると大丈夫なんですが。
お願いします。
0846774ワット発電中さん2005/07/10(日) 11:23:58ID:66iy9pzT
両エッジで動作するFFの構造を論理合成ツールに教えてやれよ
0847論理合成版「孫子」2005/07/10(日) 13:55:03ID:p8SrZu5+
ターゲットデバイスの仕様を知り、己の無知さ加減を思い知れば、百戦危うからず
0848774ワット発電中さん2005/07/10(日) 14:07:40ID:2MKTggdH
>>846
Xilinxには、両エッジFFがあったと思うぞ。
全てのデバイスにはないと思うけど
0849774ワット発電中さん2005/07/10(日) 15:45:50ID:8oXrPuTZ
なんとも非常識な使い方だな。
0850774ワット発電中さん2005/07/10(日) 20:29:47ID:Q0c6Q6wf
寺で実装しようとしたらどうするのかな?
08518452005/07/11(月) 05:15:38ID:ZDld/4j6
>>846
でも、他の場所では、使えるたりするんですが、何しろまだ始めたばかり
なんで、いろいろ模索中。
>>848
Spartan-3なんですが、データシートとか読んでいたら、IOブロックは、
二つのFFを組み合わせてDDR用に両エッジ使えるようにしてあると書いてありました。
>>849
あ、本当はcount <= count + 1;とかやって、いたんですが、いろいろ実験
中で。
0852774ワット発電中さん2005/07/11(月) 13:01:01ID:C0RpkdSn
DDR I/F用なら廉価版のCycloneでも持ってたな
寺で普通のLEで両エッジなんて無かったような。財はあるの?
846の通り、教えてやるしかないんじゃない?
0853774ワット発電中さん2005/07/11(月) 13:34:37ID:VcyrKdD9
>>851
>でも、他の場所では、使えるたりするんですが、

他の場所って何なんだよ。
立ち上がりと立下りをひとつのalwaysに書いて一体どこの会社の製品がが論理合成できるのか言ってみろや。
0854774ワット発電中さん2005/07/11(月) 14:27:20ID:biAEerWT
「己の無知さ加減を知る」がまだ足りないようだな
0855774ワット発電中さん2005/07/11(月) 22:51:04ID:ek6Ebflc
無知の知ってやつな。
0856774ワット発電中さん2005/07/12(火) 00:00:37ID:+fG7zAXH
>>853
>立ち上がりと立下りをひとつのalwaysに書いて一体どこの会社の製品がが論理合成できるのか言ってみろや。
845じゃないが、普通にできると思うが。XSTやSymplifyでもできる。

できないのは845にあるように両エッジをクロックエッジとして使う場合。
これはいままで合成するツールは見たことが無い。

845さん、Spartan−IIIのDDRレジスタをつかうなら、残念だけれどプリミティブライブラリ
(FDDRSE)とかを使いな。残念ながら合成はできないんだよ。
0857774ワット発電中さん2005/07/12(火) 01:46:29ID:1cgUSnql
FPGAって、、D-FFじゃなくて
latchとかって使えるの?
チップの入出力がF/Fじゃなくて
Latch構成のものって言われたんですが、、作れるのか不安
0858774ワット発電中さん2005/07/12(火) 09:04:31ID:BGTRq6vo
>>856
>845じゃないが、普通にできると思うが。XSTやSymplifyでもできる。
あのなぁ

always@(posedge A, negedge B)

はできて当たり前だろうが。そんなことをわざわざ書き込むな。
俺は >>845の

always@(posedge A, negedge A)

を言ってるんだ。

>できないのは845にあるように両エッジをクロックエッジとして使う場合。

クロックかどうかは関係ないね。一般に信号線に対して合成できないんだ。
0859774ワット発電中さん2005/07/12(火) 09:10:18ID:BGTRq6vo
あと

negedge A と posegde Aで処理が独立してる(それぞれ別のレジスタに出力する)場合。

always@(negedge A)

alwasy@(posedge A)

と独立させれば、合成可能だ。
0860774ワット発電中さん2005/07/12(火) 09:34:28ID:bnsCC1Rn
>857
全てのFPGAで可能かどうかは知らんがXILINXは可能。
別の答えとしてDFF+ゲート回路でgated D latchを作れるよな。
0861774ワット発電中さん2005/07/12(火) 10:33:36ID:AGOdb+2h
>>857
D-latchのマクロがあるならそれを構造記述で
インスタンスする方法もあるだろうし、
D-FFとMUXの組み合わせでD-latctと同様の動作をする
合成可能な回路を記述することもできるし、
いろいろやり方はあるけど。
0862774ワット発電中さん2005/07/12(火) 11:34:38ID:gzKS2aJ/
>858
大昔の知識で喋るな。たとえば剤でFDDを推論させるために
always @ (posedge C or negedge C) begin
Q <= D;
end
という実例がライブラリガイドに載っている。
Dual edge FF を推論させるにはこう書くしかないから、
今は書けるようになっているのが普通だ。
0863774ワット発電中さん2005/07/12(火) 12:01:55ID:BGTRq6vo
>>852
実際7.1のXSTとSynplify 8.1でやってやるからデバイスとオプションを書けや。
それと合成できるというならそのソース示せや。ライブラリじゃなくな。
0864774ワット発電中さん2005/07/12(火) 12:02:32ID:BGTRq6vo
>>852じゃなくて>>862だ
0865774ワット発電中さん2005/07/12(火) 12:14:01ID:BGTRq6vo
Spa3E オプションスイッチデフォルト

always@( posedge A, negedge A ) begin
C <= ~B;
end

その場合のXSTは
The logic for <C> does not match a known FF or Latch template.

でエラーだ。
0866774ワット発電中さん2005/07/12(火) 12:18:53ID:uwnjmqUs
always@(cocacola)
0867774ワット発電中さん2005/07/12(火) 12:24:06ID:OUt/xt3H
ねえ、今のFPGAって中にPLL持ってるんだから
素直に2倍クロックでやればいいじゃん
0868774ワット発電中さん2005/07/12(火) 12:28:23ID:BGTRq6vo
always@( posedge A, negedge A ) begin
C <= ~B;
end

はクールランナーではそのまま合成できるようだな。オプションもデフォでOKだった。

http://edaboard.com/ftopic105815.html
0869774ワット発電中さん2005/07/12(火) 12:38:04ID:BGTRq6vo
結局、CoolRunner以外Virtex 4, Spa3いずれも合成はできない。

>>862
逃亡か?さっさとソース示せや。
0870774ワット発電中さん2005/07/12(火) 12:56:32ID:gzKS2aJ/
>869
おまえさんの主張が >858 から >869 まで矮小化してくれれば
俺としては必要十分なんでこれ以上何か書くことはない。すまんね。

0871774ワット発電中さん2005/07/12(火) 13:02:14ID:BGTRq6vo
>>870
FPGAではライブラリを使わず合成するHDL記述法は全く一般的ではないのに、
何を戯言ほざいてるんだ?CPLDの世界でチマチマ生きとれ。

>今は書けるようになっているのが普通だ。

普通ねー。FPGAではすべてエラーになるのに普通か?
これは、現時点でクールランナーだけはそういう書き方が許されていると表現するんだ。
一部で局所的に成立することを全体がそうであるように言うなアホが。
0872774ワット発電中さん2005/07/12(火) 17:34:06ID:ZlBvECkI
アホはどっちかな?
0873774ワット発電中さん2005/07/12(火) 18:51:18ID:uRSf/uPG
とアホの代表が申しております
0874774ワット発電中さん2005/07/12(火) 18:53:28ID:OUt/xt3H
うわ〜ん!アホゆうやつがアホなんや〜!
0875774ワット発電中さん2005/07/12(火) 21:12:40ID:bnjcyq7P

私のために喧嘩はやめて
0876774ワット発電中さん2005/07/12(火) 23:36:10ID:CbBtYPpt
アホという奴がアホってのを数学的に証明する事は可能である。
0877774ワット発電中さん2005/07/13(水) 00:24:48ID:0RHL68ir
というお前がアホであることは証明するまでもなく明らかである。
0878774ワット発電中さん2005/07/13(水) 01:15:44ID:TgJ2B+vs
always@(bothedge A)とか記述させてくれんかのぅ。
0879774ワット発電中さん2005/07/13(水) 16:19:17ID:d/JO85hT
それはalways@(A)と同じでない?
0880774ワット発電中さん2005/07/13(水) 16:46:34ID:cHpl5gAj
レベルとエッジの違いがわかるかな?
0881774ワット発電中さん2005/07/13(水) 17:27:54ID:JIV4AdAm
レベルとエッジトリガの違いはあっても目的としては同じことになると思うが?
2値でレベルが変化するってことは信号のエッジが必ずできるってことだよな?
俺としてはalways(A)と書くんじゃなくて

function foo;

assign binbin = foo(A);
とかして組み合わせ回路にしちゃう。
0882774ワット発電中さん2005/07/13(水) 17:38:07ID:d/JO85hT
両エッジってつまりレベルやん
0883774ワット発電中さん2005/07/13(水) 19:35:17ID:Nlbzaben
あほか! 「レベルでカウンター回ったらどないなんねん。」 と突っ込んでおこう。
always@(edge A) と記述したいのでは?
■ このスレッドは過去ログ倉庫に格納されています