もう16時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]女性必見!ネットで高収入バイト[PR]  
レス数が900を超えています。1000を超えると表示できなくなるよ。

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

1 : ◆MXILINXS4E :2008/03/08(土) 03:22:50 ID:BzTCKM0A
HDLの処理系も、それを実際に動かすシミュレータ・評価基板も
安価で入手できるようになってきました。

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

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

前スレ
【Verilog】記述言語で論理設計 Project5【VHDL】
http://science6.2ch.net/test/read.cgi/denki/1174319964/

857 :774ワット発電中さん:2008/08/17(日) 13:25:13 ID:l8Te1WU+
>>856
CNT が 0、4 以外のときの OUT_CLK の状態が不明だからじゃね?


858 :774ワット発電中さん:2008/08/17(日) 13:33:29 ID:nqnPZJea
always @ (posedge CLK8);
↑セミコロンが余分

859 :774ワット発電中さん:2008/08/17(日) 15:04:25 ID:pLwk6RJG
>>856
input CLK8;
output reg OUT_CLK;
reg [2:0] CNT;

always @ (posedge CLK8)begin
if(CNT == 0)
OUT_CLK <= 0;
else if(CNT)
CNT <= CNT - 1;
else if(CNT==4)
OUT_CLK <= 1;
else
CNT <= 7;
end

まとめるとこんな感じだけど、

else if(CNT)

この書き方はどうかと思う

860 :774ワット発電中さん:2008/08/17(日) 16:02:25 ID:ayBG5qY/
えー?

861 :774ワット発電中さん:2008/08/17(日) 19:02:29 ID:nTbQ3Z4W
>856
答えは858さんが書いているので省略。
ただシミュレーションするとCNTがXで動作確認できないはずだけど
いいのかな。
初期化しないのはこれぐらいの回路では頭の中で読めるのでいいけれど
もっと複雑な回路ではそうはいかないよ。
>859
その回路では同じようには動かないよ。

862 :774ワット発電中さん:2008/08/17(日) 21:14:36 ID:rS1oUaOU
input CLK8;
output OUT_CLK;

reg [2:0]cnt;
wire OUT_CLK;

assign OUT_CLK = cnt[2];

always @(posedge CLK8)begin
cnt <= cnt + 1;
end


初期化とか省いてるけどこゆのでいいんじゃないの?


863 :774ワット発電中さん:2008/08/18(月) 01:13:27 ID:YXcPnPhf
862の解答が見事な解だと思う。
>>859
多分それは動かない。
always @ (posedge CLK8)begin
if(CNT>4 && CNT>0)
OUT_CLK <= 0;
CNT <= CNT - 1;
else if(CNT > 0)
OUT_CLK <= 1;
CNT <= CNT - 1;
else
OUT_CLK <= 7;
end
こんな感じ?

個人的には
reg CLK4,CLK2,CLK1;
always @(posedge CLK8) CLK4=~CLK4;
always @(posedge CLK4) CLK2=~CLK2;
always @(posedge CLK2) CLK1=~CLK1;
こんな風にしちゃうとどうなるんだろう、と気になる。
教えてエロい人

864 :774ワット発電中さん:2008/08/18(月) 07:04:17 ID:zQuMwEeF
↑普通にリップルキャリカウンタ

865 :774ワット発電中さん:2008/08/18(月) 09:55:08 ID:FaTBdL15
そういえば
小さい規模だと、各レジスタ毎にalwaysで区切ったほうが親切なんですかねぇ

866 :774ワット発電中さん:2008/08/18(月) 12:02:13 ID:eV8f1nWJ
>松下部品は社外秘の社内ランク持ってるよな

あははは

867 :774ワット発電中さん:2008/08/18(月) 14:45:34 ID:1VJivPnB
>>865
むしろ大規模の方がalways区切らないと訳がわからないと思うが

868 :774ワット発電中さん:2008/08/18(月) 19:39:38 ID:4rMsHaoj
>>866
一酸化炭素を噴出すストーブのランクは?


869 :774ワット発電中さん:2008/08/19(火) 02:34:41 ID:5h9aPwQ+
見やすいようにalwaysで細かくブロックを区切る場合と
ベターっと全部一つのalwaysにしてしまう場合で論理合成のどの部分が違うわけ?


870 :774ワット発電中さん:2008/08/19(火) 08:21:09 ID:3RpDPAK0
小さい順序回路をたくさん作ろうとするか、
巨大な順序回路を1個作ろうとするか、じゃない?

871 :774ワット発電中さん:2008/08/19(火) 13:51:01 ID:xWXK0mW9
どなたか教えて欲しいんですけど、ISEで

assign BUS_B[15:0] = BUS_A[0:15];

でエラーが出るんだけど、どこかの設定で回避できないかな?
1ビットずつ繋げば、一応動くんだけど。


872 :774ワット発電中さん:2008/08/19(火) 16:32:43 ID:9R+QOxCZ
じゃあ1ビットずつ繋げばいいじゃない

873 :774ワット発電中さん:2008/08/19(火) 19:20:16 ID:WmNZkrqu
>>870
そうなんか?
論理合成するのにいったん全always文を解析して、全信号のスケジューリングするんじゃないの?
ソフトウェアコンパイラだと関数はアセンブラのサブルーチンにほぼ1対1対応するけど、
論理合成の場合alwaysってのはあくまで人間側からみた一つのブロックで、
それに対応してハードウェアモジュールが構成されるものじゃないと思ってるんだが違うのか?

874 :774ワット発電中さん:2008/08/19(火) 19:55:10 ID:xWXK0mW9
>>872
それはそうなんだけど、16ビットの反転が6個で、
相互に繋がなくちゃいけないから、見づらくてややこしくて。
何とかなりませんか?

875 :774ワット発電中さん:2008/08/19(火) 19:57:15 ID:MZUqZvUC
そういうモジュールなり関数なりを作ればいいのでは?

876 :774ワット発電中さん:2008/08/19(火) 22:09:03 ID:+Er4Evan
>>871
宣言時の MSB,LSB をビット範囲指定で入れ替える記述が許されない
ということだろう。つか俺もハマった。

wire [0:15] BUS_A;
wire [15:0] BUS_B;
の場合は
assign BUS_B[15:0] = BUS_A[0:15];
は(何やってるのか記述者がわかってれば)問題ナシ。

とりあえず
assign BUS_B[15:0] = {BUS_A[15], BUS_A[14], ... BUS_A[0]};
じゃダメ?

877 :871:2008/08/20(水) 09:11:50 ID:AhwOq8H2
>>875
Quartusでは特に考えなくても出来てたから、
ISEでも大丈夫だろうなと思ってて、ハマってしまいました。

>>876
参考にさせてもらいます、ありがとうございました。

878 :774ワット発電中さん:2008/08/20(水) 12:17:45 ID:eqXJR0rP
>>873
下手にelseなんて忘れるとラッチ入るとかの違いじゃないのかな

879 :774ワット発電中さん:2008/08/20(水) 17:49:42 ID:wvOOLtp6
>>873
その通り。

880 :774ワット発電中さん:2008/08/22(金) 21:58:55 ID:g+chUrJc
:>>786
for 文で回すのはどうよ?

881 :774ワット発電中さん:2008/08/23(土) 06:54:45 ID:f+NZr7dn
>>880
そういうソフト屋的発想は好きになれん

882 :774ワット発電中さん:2008/08/23(土) 11:48:12 ID:StxHXeuV
>>881
でもfor文ってそういう目的のためにあるんだしなぁ。

forにするか、16本の順序を逆順にする専用のモジュールを作るか。
このどっちかがスマートな書き方だと思う。

883 :774ワット発電中さん:2008/08/23(土) 13:37:48 ID:PcnPReO+
always @(posedge 仕事)
動かない回路は素晴らしい;


884 :774ワット発電中さん:2008/08/23(土) 18:21:53 ID:yuy8JgiZ
ビットの並び替えってハードの最も得意とするところだよな(笑)
ゼロクロックで出来るぜ!

885 :774ワット発電中さん:2008/08/23(土) 22:32:36 ID:28TO8gda
流れをぶった切って質問
verilogでCの int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; に相当する記述ってどうすればいいの?


886 :774ワット発電中さん:2008/08/23(土) 23:39:43 ID:to7SY3oX
>>885
intの長さは実機依存のはずだが

reg[31:0] array[9:0];
always@ (posedge clk,negedge reset_n) begin
if(!reset_n) begin
array[0]<=1;
array[1]<=2;
arr......
end else if(clk) begin
以下略

verilogをCの兄弟みたいなもんだと思ってるのなら速やかに退散した方がいい

887 :774ワット発電中さん:2008/08/24(日) 01:19:04 ID:mcPDPi1H
>>886
舌足らずな質問ですまんかった
例えば転送モードがいろいろあって AC タイミングのパラメータが複数あるシミュレーションモデルを
作るとき、シンプルに書けないかなと思ったもので…
今 parameter を沢山書いて if, case や ifdef などで切り替えててちょっと見難いなと思ってるんで、
なにかよい方法があればと…

888 :774ワット発電中さん:2008/08/24(日) 01:43:12 ID:tN9k0yfP
>>887
定数の初期化がしたいの?
とか、連続した値なのか?
など、いまいち条件が不明ですが、
連続した値なら、
for でいいんじゃないかな。

889 :774ワット発電中さん:2008/08/24(日) 07:46:23 ID:ln+Ztdg7
シミュレーション用ならtask文でいいんじゃないか

シミュレーション記述

--回路最上位層
module
reg [31:0] out_array0;
reg [31:0] out_array1;
(回路本体)
endmodule

--タスク記述
task task_sample
input [31:0] in_array0;
input [31:0] in_array1;
begin
out_array0 = in_array0;
out_array1 = in_array1;
end
endtask

--シミュレーション処理
initial
begin
case(sel)
0 : task_sample( 0, 1 ); //pat a
1 : task_sample( 2, 3 ); //pat b
endcase
#100
task_sample( 4, 5 ); //pat c
end

890 :774ワット発電中さん:2008/08/27(水) 11:51:29 ID:yJ7UPwlh
>>887
>AC タイミングのパラメータが複数あるシミュレーションモデル
あ、これ便利そう。
うまく行く案ないですかねぇ。

最悪、シェルとかに頼るんですかね

891 :774ワット発電中さん:2008/08/28(木) 09:49:03 ID:ir8Qjr8Y
ところで
include "file.h";


`include "file.h"


違いってありますか?

892 :774ワット発電中さん:2008/08/30(土) 20:27:49 ID:F5SV3g5P
なんちゃってー仕様書 をよみなさい。


893 :774ワット発電中さん:2008/09/02(火) 16:40:20 ID:eru5wMvD
http://mainichi.jp/select/today/news/images/20080902k0000m010167000p_size5.jpg

やかましいんだよッ。キィッ!


894 :名無しさん@Vim%Chalice:2008/09/03(水) 14:08:31 ID:A8OT84CH
>>892
なんちゃってー仕様書ってなんですか?

895 :774ワット発電中さん:2008/09/03(水) 21:06:10 ID:WUrgcx1t
質問させてください。
すみません、ちょっとうるさくなってしまうので
気が向いたときに気が向いたやつを教えていただければ嬉しいっす

@xilinxの資料を読んでたら、
  always @(posedge clk or posedge rst)
    if (rst)  hoge1 <= #1 1 'b0;
    else   hoge1 <= #1 hoge2;

という記述があったのだが、この#1は何を表しているのでしょうか。
テストベンチの時間? 実機に実装できるの?
俺が知らないまったく別の文法?


Averilogでいう
  input [MSB-1:0] hoge3;
を、VHDLで実現する方法はありますか?
ポートの宣言をbit可変にしたいです。


BVHDLにリダクション演算はあるのでしょうか。
検索してたらand_reduce(hoge4)とかあったけど、
Quartusではエラーになった。対応してないのかな


Cverilogの8'b0のように、[n]bitを0で埋めるような書き方はVHDLであります?

以上です。


896 :774ワット発電中さん:2008/09/03(水) 21:29:30 ID:MXojET2Y
>>895
(1) 「#遅延式」で遅延の制御が可能。テストベンチ用。
(2) 「generic文」を使ってパラメタライズ設計をします。
(3) 「use ieee.std_logic_misc.all」が抜けてるとか?
(4) 「hoge <=(others=>'0');」でOK。


897 :895:2008/09/03(水) 21:52:36 ID:WUrgcx1t
>>896
ありがとうございます!!!

(1)解決しました!
(2)解決しました!
(3)解決しました! ……orz コールすべきライブラリがいまいち解ってないらしいです。。

(4)フルbit埋めではなく、一部bit幅を埋めたい場合は方法ありますか?
hoge(15 downto 0) <= hoge(7 downto 0) & <残りは0埋め>;
みたいな。


(2)にすごくすごく悩んでたので本当に感謝です!



898 :774ワット発電中さん:2008/09/04(木) 01:21:00 ID:ATdzg/Mn
>>897
特定bit値の指定は「集合体」で可能です。1bitづつの指定になりますが。
hoge <= (7=>'1', 0=>'1', others=>'0'); -- bit7とbit0を'1', 他を'0'で埋める

「hoge <= moge & "残りを自動で0埋め";」のように、hogeとmogeのbit幅で
良きに計らって欲しいということであれば、attribute を使うのがよろしいかと。
hoge(hoge'left downto hoge'left-moge'length+1) <= moge;
hoge(hoge'left-moge'length downto 0) <= (others=>'0');


899 :895:2008/09/04(木) 07:04:38 ID:g9siD6F6
>>898
ありがとうございます。試してみます。
attributeは使ったことなかったです。

900 :774ワット発電中さん:2008/09/05(金) 15:26:58 ID:onqOhax6
Verilogでモジュール間接続に2次元配列は使用できないのでしょうか?

inout [7:0] port[7:0];

みたいな書き方をするとエラーがでます。


901 :774ワット発電中さん:2008/09/05(金) 17:08:43 ID:3VFks9h8
>>900
うーん・・・メモリですか?
addressとdataに分けて書いていいのなら・・・

module memori(ADDR, CE_X, WE_X, OE_X, DQ);
input [7:0] ADDR;
input CE_X;
input WE_X;
input OE_X;

inout [7:0] DQ; //毎度毎度inout見難い・・・

reg [7:0] mem [0:7];

always @(negedge WE_X) begin
  if(!CE_X)
    mem[addr] <= DQ;
end

assing DQ = (!CE_X && !OE_X)? mem[addr]: 8'hzz;
endmodule

非同期メモリ・・・こんなんでいいっけ?

メモリじゃなかったらすんませんです。
つうかADDRがinoutじゃない・・・

902 :774ワット発電中さん:2008/09/05(金) 18:16:58 ID:F6HWrvnr
mem[addr]
なんて書き方が出来たのか…。

903 :774ワット発電中さん:2008/09/05(金) 19:09:24 ID:dn5JMtlL
合成するとあっという間にメモリ不足に陥るから注意な(笑)

>>900
inout [63:0] port;
でガマンかな…

904 :774ワット発電中さん:2008/09/05(金) 22:08:00 ID:5Iu8XPVv
>900
System Veriogなら・・・じゃ回答になってないかな?

二次元配列になるほど口が多いモジュールだと、配置配線で死にそう

905 :900:2008/09/05(金) 23:33:00 ID:onqOhax6
>>903

その方法でやってみます。
単純に8ビットのI/Oポートを8個配置しただけで、
記述量を減らしたいなぁという程度なんです。
Verilogって融通効かないんですね。


906 :774ワット発電中さん:2008/09/05(金) 23:41:44 ID:YyQR+hro
×融通が利かない
○機転が足りない

[8*8-1]でとか色々やりようがあるだろに

255 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

取りに行ったけどなかった。次は一時間後に取りに行くです。
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.3 2008/07/26
FOX ★ DSO(Dynamic Shared Object)