【Verilog】記述言語で論理設計 Project2【VHDL】
■ このスレッドは過去ログ倉庫に格納されています
0001792= ◆YMO/ALTERA
04/09/03 12:21ID:p+kby74r安価で入手できるようになってきました。
このスレが目に入ったおまえ! 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何をわけわからんこと書いてるんだ?
お前こそがんばれや。
0785774ワット発電中さん
2005/06/24(金) 19:50:19ID:SF7gkNx80786774ワット発電中さん
2005/06/24(金) 20:56:08ID:pOB0xwE8そんなもん無くても構わないだろ、本人が宿題っていっているんだし。
0787774ワット発電中さん
2005/06/24(金) 21:45:43ID:4PHoRlc30788sage
2005/06/24(金) 23:43:12ID:N9s+7dXzreg 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+q3Oehinputclk, 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
0790758
2005/06/25(土) 01:50:29ID:RRAZhokE実装することはできないんだが、本物の >>752 は
どこ行った ?
しょうがないからとりあえず、以下の仮定をする。
(1) resetは clkに非同期。
(2) clkの立ち上がりとresetの立ち上がりが同時に
起きた場合 (正確には、使用するフリップフロ
ップの setup timeと hold timeの間に resetの
立ち上がりがあった場合)は出力 qはそれ以外の
場合より遅れてもよい。
(3) resetの立ち上がりから qの highパルスまでは
できる限り短い時間で出力すること。
(4) qはそれ以降の回路でクロック信号として使用さ
れない。
(5) q の high幅は 1clk周期とする。
以下次号
0791758
2005/06/25(土) 01:51:25ID:RRAZhokE(6) resetにグリッチはないものとする。
(7) モジュール名は mkpulseとする。
(8) Verilog-HDL (RTL)で記述すること。
(9) 負論理なのに resetという名前はいやらしいが、
そういう仕様なので従う。
以下次号
0792774ワット発電中さん
2005/06/25(土) 01:53:01ID:TsEjQbYg0793758
2005/06/25(土) 01:55:27ID:RRAZhokEreset,
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
以下次号
0794758
2005/06/25(土) 01:56:06ID:RRAZhokE仮定をしたが、今のところそのような指定はない。
よって resetは clkに同期していると仮定することも
できる。
すると、以下次号
0795758
2005/06/25(土) 01:58:27ID:RRAZhokEreset,
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:qLwyTd700797火魔人
2005/06/25(土) 04:37:57ID:4D+YN02Ainitial 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/Xfparameterを別のファイルに書いて、`includeで読み込むようにしてたよ。
今はVHDLなんで使ってないが。
0800774ワット発電中さん
2005/07/01(金) 18:00:38ID:4oZSX0ys0801774ワット発電中さん
2005/07/01(金) 19:29:01ID:UB9KQarK0802774ワット発電中さん
2005/07/01(金) 21:09:25ID:4oZSX0ys0803774ワット発電中さん
2005/07/01(金) 21:49:57ID:UB9KQarKNatural, Positiveなどあるがいずれも31bitまで。
0804774ワット発電中さん
2005/07/01(金) 22:39:15ID:4oZSX0ysしょうがないから単純なカウンタなんで
std_logic_vectorにします
0805774ワット発電中さん
2005/07/01(金) 23:05:14ID:6YAH5rTH試せると思うが。
やらないと言う事じゃ所詮その程度の知力と能力しかない証拠だわな。
0806774ワット発電中さん
2005/07/02(土) 00:27:55ID:naY8xhRTそこまでは試して31ビットまでは動くことがわかったけど
論理合成で蹴られる理由がわからなくて
もしかして言語仕様かと思ったらあらやっぱりみたいな・・・
0807774ワット発電中さん
2005/07/02(土) 00:36:30ID:GL5nQR4k0808774ワット発電中さん
2005/07/02(土) 00:43:23ID:naY8xhRTそんなところで引っ掛かると思ってないから
スマソ
0809774ワット発電中さん
2005/07/02(土) 08:39:25ID:Zjc91X2Tしかし、これで学習しただろう。
このスレに圧倒的に多いパターンなので萎えまくりだが。
0810774ワット発電中さん
2005/07/02(土) 18:59:32ID:aRXfQTr10811774ワット発電中さん
2005/07/03(日) 20:48:47ID:BJiFlm7C読んでないけど、Integerは32bitとして扱うツールが一般的、って話じゃなかったっけ?
VHDLとしては。
0812774ワット発電中さん
2005/07/04(月) 00:40:48ID:29+tKHsl一般的じゃなくてVHDLの仕様ですね。
0813774ワット発電中さん
2005/07/04(月) 01:27:25ID:3sPfcV160814774ワット発電中さん
2005/07/04(月) 01:45:54ID:/UNyKoG70815774ワット発電中さん
2005/07/04(月) 10:01:40ID:YFhH4slBそれは合成ツールの仕様なんじゃないの?
0816774ワット発電中さん
2005/07/04(月) 10:55:30ID:xEY162hW1のLibero 6.0って所に登録してCDが来るまで待たなきゃいけないんですかね…
できてばDL版が欲しいのですが
0817774ワット発電中さん
2005/07/04(月) 11:53:18ID:QhGD2vPGVerilogのfunctionに相当する書式がVHDLにあるか?
0818774ワット発電中さん
2005/07/04(月) 12:11:26ID:Ij/MgU4Mサブプログラムじゃだめ?
0819774ワット発電中さん
2005/07/04(月) 17:28:51ID:FQoAvdtf0820774ワット発電中さん
2005/07/04(月) 21:08:40ID:K2+JnxjRVHDLだとそれが出来ないってことやね。
0821774ワット発電中さん
2005/07/04(月) 21:35:22ID:mFXlXXTDiverilog いいお。
つ ttp://www.ice.gunma-ct.ac.jp/~kimsyn/verilog/FreeSim/iverilog/iverilog.html
0822774ワット発電中さん
2005/07/05(火) 01:05:45ID:iMF+7k6+おれも普段つかってるよぉ。
あとは文法チェッカがあればのぉ、できればPC-UNIXとWinで使える奴…
0823774ワット発電中さん
2005/07/05(火) 07:45:17ID:EV2MvFVzハァ?まったく違う
0824774ワット発電中さん
2005/07/05(火) 10:07:24ID:VfZmOgLGなんだ、戻り値が一個欲しいんじゃないのか(w
0825774ワット発電中さん
2005/07/05(火) 11:24:35ID:C/UCYGWV0827774ワット発電中さん
2005/07/05(火) 23:49:48ID:4WUJ+4FQ非同期のFFを記述すればVerilogの不完全さがよく解る。
>>820には理解不能だろうけどね。
でも、現実社会では好みと仕事に応じて好きな方を選べばいい。
0828774ワット発電中さん
2005/07/05(火) 23:58:05ID:hhh9apiQ別に言語の優劣の話ではなくて、>>813の話を受けてVHDLのはまりやす
い点を挙げただけだと思うけど。
出来る出来ないの話ならどちらかというと分が悪いのは・・・
0829774ワット発電中さん
2005/07/05(火) 23:58:47ID:bVnJSGyJ0830774ワット発電中さん
2005/07/06(水) 00:10:09ID:JKUczYPV0831774ワット発電中さん
2005/07/06(水) 00:30:40ID:PBXbLLS3なにかな。
0832821
2005/07/07(木) 20:33:45ID:2EifYSI9学生さん?かな。 今後のことを考えるのであればメジャーなシミュレータにも慣れておいたほうがいいかも。
Model-Simとか。
0833774ワット発電中さん
2005/07/07(木) 23:21:28ID:IJfAtQBC素質無し。
既にエンジニアと言い張るなら辞めた方が良い低レベル。
0834774ワット発電中さん
2005/07/08(金) 13:55:10ID:/Zw+xZjk0835774ワット発電中さん
2005/07/08(金) 13:56:30ID:/Zw+xZjk0836774ワット発電中さん
2005/07/08(金) 20:39:21ID:J+I8gBZp0837774ワット発電中さん
2005/07/08(金) 20:42:58ID:O7AOTj/2罵倒するやつにはさせとけばいい。
>>833
わざわざ糞忠告するぐらいならその間に答え書いてやれ。
それが嫌なら、何も書き込む必要は全くない。別にお前に聞いてるわけじゃねえ。黙ってな。
0838774ワット発電中さん
2005/07/08(金) 22:48:43ID:ofL5amLB自分で自分の道を拓けぬ者は、人の親切を簡単に無駄に出来る奴だ。
何を言われるか解らないからそんな的外れなレスを返すのだろうね。
そろそろ気付いたらどうだ自分の無能に。
0839774ワット発電中さん
2005/07/08(金) 22:55:08ID:O7AOTj/2そろそろ気付いたらどうだ自分の糞ぶりに
0840774ワット発電中さん
2005/07/08(金) 23:45:53ID:ofL5amLB真摯な意見を聞く勇気がない者は改善も無理だろうね。
0841774ワット発電中さん
2005/07/09(土) 00:36:36ID:EdHgZlXPそろそろゴミは死ねや!
0842774ワット発電中さん
2005/07/09(土) 10:31:30ID:75PwG5FO0843774ワット発電中さん
2005/07/09(土) 12:18:21ID:7VfOAgWB漏れの知人はいまだに頭の病気で入院中なのだが
0844774ワット発電中さん
2005/07/09(土) 21:26:32ID:xG9jSyxv大丈夫。
ナガシマさんだって復活したんだ!
0845774ワット発電中さん
2005/07/10(日) 11:00:57ID:C0xlfYHCFPGAの評価基板でやってるんだけど、トップモジュールで
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:66iy9pzT0847論理合成版「孫子」
2005/07/10(日) 13:55:03ID:p8SrZu5+0848774ワット発電中さん
2005/07/10(日) 14:07:40ID:2MKTggdHXilinxには、両エッジFFがあったと思うぞ。
全てのデバイスにはないと思うけど
0849774ワット発電中さん
2005/07/10(日) 15:45:50ID:8oXrPuTZ0850774ワット発電中さん
2005/07/10(日) 20:29:47ID:Q0c6Q6wf0851845
2005/07/11(月) 05:15:38ID:ZDld/4j6でも、他の場所では、使えるたりするんですが、何しろまだ始めたばかり
なんで、いろいろ模索中。
>>848
Spartan-3なんですが、データシートとか読んでいたら、IOブロックは、
二つのFFを組み合わせてDDR用に両エッジ使えるようにしてあると書いてありました。
>>849
あ、本当はcount <= count + 1;とかやって、いたんですが、いろいろ実験
中で。
0852774ワット発電中さん
2005/07/11(月) 13:01:01ID:C0RpkdSn寺で普通のLEで両エッジなんて無かったような。財はあるの?
846の通り、教えてやるしかないんじゃない?
0853774ワット発電中さん
2005/07/11(月) 13:34:37ID:VcyrKdD9>でも、他の場所では、使えるたりするんですが、
他の場所って何なんだよ。
立ち上がりと立下りをひとつのalwaysに書いて一体どこの会社の製品がが論理合成できるのか言ってみろや。
0854774ワット発電中さん
2005/07/11(月) 14:27:20ID:biAEerWT0855774ワット発電中さん
2005/07/11(月) 22:51:04ID:ek6Ebflc0856774ワット発電中さん
2005/07/12(火) 00:00:37ID:+fG7zAXH>立ち上がりと立下りをひとつのalwaysに書いて一体どこの会社の製品がが論理合成できるのか言ってみろや。
845じゃないが、普通にできると思うが。XSTやSymplifyでもできる。
できないのは845にあるように両エッジをクロックエッジとして使う場合。
これはいままで合成するツールは見たことが無い。
845さん、Spartan−IIIのDDRレジスタをつかうなら、残念だけれどプリミティブライブラリ
(FDDRSE)とかを使いな。残念ながら合成はできないんだよ。
0857774ワット発電中さん
2005/07/12(火) 01:46:29ID:1cgUSnqllatchとかって使えるの?
チップの入出力がF/Fじゃなくて
Latch構成のものって言われたんですが、、作れるのか不安
0858774ワット発電中さん
2005/07/12(火) 09:04:31ID:BGTRq6vo>845じゃないが、普通にできると思うが。XSTやSymplifyでもできる。
あのなぁ
always@(posedge A, negedge B)
はできて当たり前だろうが。そんなことをわざわざ書き込むな。
俺は >>845の
always@(posedge A, negedge A)
を言ってるんだ。
>できないのは845にあるように両エッジをクロックエッジとして使う場合。
クロックかどうかは関係ないね。一般に信号線に対して合成できないんだ。
0859774ワット発電中さん
2005/07/12(火) 09:10:18ID:BGTRq6vonegedge A と posegde Aで処理が独立してる(それぞれ別のレジスタに出力する)場合。
always@(negedge A)
alwasy@(posedge A)
と独立させれば、合成可能だ。
0860774ワット発電中さん
2005/07/12(火) 09:34:28ID:bnsCC1Rn全てのFPGAで可能かどうかは知らんがXILINXは可能。
別の答えとしてDFF+ゲート回路でgated D latchを作れるよな。
0861774ワット発電中さん
2005/07/12(火) 10:33:36ID:AGOdb+2hD-latchのマクロがあるならそれを構造記述で
インスタンスする方法もあるだろうし、
D-FFとMUXの組み合わせでD-latctと同様の動作をする
合成可能な回路を記述することもできるし、
いろいろやり方はあるけど。
0862774ワット発電中さん
2005/07/12(火) 11:34:38ID:gzKS2aJ/大昔の知識で喋るな。たとえば剤でFDDを推論させるために
always @ (posedge C or negedge C) begin
Q <= D;
end
という実例がライブラリガイドに載っている。
Dual edge FF を推論させるにはこう書くしかないから、
今は書けるようになっているのが普通だ。
0863774ワット発電中さん
2005/07/12(火) 12:01:55ID:BGTRq6vo実際7.1のXSTとSynplify 8.1でやってやるからデバイスとオプションを書けや。
それと合成できるというならそのソース示せや。ライブラリじゃなくな。
0865774ワット発電中さん
2005/07/12(火) 12:14:01ID:BGTRq6voalways@( 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:uwnjmqUs0867774ワット発電中さん
2005/07/12(火) 12:24:06ID:OUt/xt3H素直に2倍クロックでやればいいじゃん
0868774ワット発電中さん
2005/07/12(火) 12:28:23ID:BGTRq6voC <= ~B;
end
はクールランナーではそのまま合成できるようだな。オプションもデフォでOKだった。
http://edaboard.com/ftopic105815.html
0869774ワット発電中さん
2005/07/12(火) 12:38:04ID:BGTRq6vo>>862
逃亡か?さっさとソース示せや。
0870774ワット発電中さん
2005/07/12(火) 12:56:32ID:gzKS2aJ/おまえさんの主張が >858 から >869 まで矮小化してくれれば
俺としては必要十分なんでこれ以上何か書くことはない。すまんね。
0871774ワット発電中さん
2005/07/12(火) 13:02:14ID:BGTRq6voFPGAではライブラリを使わず合成するHDL記述法は全く一般的ではないのに、
何を戯言ほざいてるんだ?CPLDの世界でチマチマ生きとれ。
>今は書けるようになっているのが普通だ。
普通ねー。FPGAではすべてエラーになるのに普通か?
これは、現時点でクールランナーだけはそういう書き方が許されていると表現するんだ。
一部で局所的に成立することを全体がそうであるように言うなアホが。
0872774ワット発電中さん
2005/07/12(火) 17:34:06ID:ZlBvECkI0873774ワット発電中さん
2005/07/12(火) 18:51:18ID:uRSf/uPG0874774ワット発電中さん
2005/07/12(火) 18:53:28ID:OUt/xt3H0875774ワット発電中さん
2005/07/12(火) 21:12:40ID:bnjcyq7P私のために喧嘩はやめて
0876774ワット発電中さん
2005/07/12(火) 23:36:10ID:CbBtYPpt0877774ワット発電中さん
2005/07/13(水) 00:24:48ID:0RHL68ir0878774ワット発電中さん
2005/07/13(水) 01:15:44ID:TgJ2B+vs0879774ワット発電中さん
2005/07/13(水) 16:19:17ID:d/JO85hT0880774ワット発電中さん
2005/07/13(水) 16:46:34ID:cHpl5gAj0881774ワット発電中さん
2005/07/13(水) 17:27:54ID:JIV4AdAm2値でレベルが変化するってことは信号のエッジが必ずできるってことだよな?
俺としてはalways(A)と書くんじゃなくて
function foo;
assign binbin = foo(A);
とかして組み合わせ回路にしちゃう。
0882774ワット発電中さん
2005/07/13(水) 17:38:07ID:d/JO85hT0883774ワット発電中さん
2005/07/13(水) 19:35:17ID:Nlbzabenalways@(edge A) と記述したいのでは?
■ このスレッドは過去ログ倉庫に格納されています