eon_ionのプロフィール

@eon_ion eon_ion
ありがとう数36
質問数20
回答数32
ベストアンサー数
7
ベストアンサー率
30%
お礼率
86%

  • 登録日2005/11/26
  • Verilog HDLについて質問

    以下のプログラムを入力し、試してもうまくいきません。どこがいけないのでしょうか。 しようとおもっていることを大まかにいうと、 ・x1の立ち上がりに、money1に1を足す ・x2の立ち上がりに、money2に2を足す ・クロックの立ち上がりに、sumにmoney1とmoney2を足したものを入れて、 sumが3だったら、z1に割り当てたLEDを光らせる sumが4だったら、z2に割り当てたLEDを光らせる というものです。 試してみると結果はz1,z2両方のLEDが、x1,x2を立ち上げなくても最初から光ってしまいます。 module vendmachine(x1,x2,z1,z2,clk); input x1,x2,clk; output z1,z2; reg [2:0] money1; reg [2:0] money2; reg [2:0] sum; reg ledz1,ledz2; always@(posedge x1) begin money1=money1+3'd1; end always@(posedge x2) begin    money2=money2+3'd2; end always@(posedge clk) begin sum=money1+money2; if(sum==3'd3)begin ledz1=1'b1; end if(sum==3'd4)begin ledz1=1'b1; ledz2=1'b1; end end assign z1=ledz1; assign z2=ledz2; endmodule

    • inu999
    • 回答数3
  • Verilog プライオリティエンコーダ?の作り方

    現在、ある検索スタート位置からアドレスをインクリメントしていき、一番初めに有効なData Vectorを検索する回路(プライオリティエンコーダ?)を製作しようとしていて、手こずっております。 例えば検索を開始するstartアドレスを示すstartという入力があり、a~dの4つの入力があるとします。それにはそれぞれ10,20,30,40というデータが入っていて、それらの入力されているデータが有効であれば1となる、a_v~d_vというvalid_bitがあるとします。 input [1:0] start; //検索を開始するアドレス input a_v, b_v, c_v, d_v; //1で有効(a_vが1であれば下のaが有効データ) input [5:0] a, b, c, d; //a=10, b=20, c=30, d=40 とする output [5:0] dataout; ここで、startが0で、a_v~d_vがそれぞれ0, 0, 1, 1(c_v, d_vが有効)という状態の時、dataoutには30が出力され、 startが1で、a_v~d_vがそれぞれ1, 0, 0, 1(c_v, d_vが有効)という状態の時、dataoutには40が出力されるような、与えられたstartのアドレスをインクリメントしていき、一番初めにvalidになっているvectorを出力する回路を作りたいと考えています。 しかし、forと、ラベルを使ったbrake相当の方法をを使って以下のように実装したところ、シミュレータでは動きましたが、論理合成ができませんでした。(検索対象を16個としています) begin : BREAK for(i = 1; i <= 16; i = i + 1)begin if(i == 16)begin valid <= 1'b0; end else if(valid[(count+i) & 4'hFF])begin valid <= 1'b1; count <= (count + i) & 4'hF; disable BREAK; end end end 色々考えましたが、なかなか良い方法が思いつかず、調べてもでてこないため非常に困っております。 詳しい方、アドバイスを頂けないでしょうか? また、Verilogのgenerateについて調べており、generateについて詳しく書かれてあるおすすめの参考書などがありましたら教えていただきたいです。

  • verilogでの記述、always@の使い方

    verilogでの記述の仕方について質問です。 画像のようなタイミングチャートを考えています。 clkとplsは入力、dataが出力です。 構成は、  pls↑の次のclk↑で、dataをアサートする。 というのを考えています。 pls↑やclk↑は、posedgeを使えばよいと思うのですが、 私の考え通りに記述すると always @(posedge pls)begin @(posedge clk)begin data <= 1; end end こんな感じになるのか?となってしまいます。 @()begin end の中に@()beginを記述することが出来るのか というところから疑問です。 出来たとしても、これが私が意図したとおりに動作するのかがよくわかりません。 ネットで、 always @() @() と記述すると順序回路ができるとあったのですが、いまいち動作が分かりません。 どなたか、動作を教えていただけないでしょうか。 また、pls↑の次のclk↑で、dataをアサートする方法を教えていただけないでしょうか。 よろしくお願い致します。

  • SystemC言語の文法(関数の引数にポインタ?)

    SystemC言語の文法について質問です。 ある雑誌で、ビット宣言変数のアドレスを関数に渡しており、 私も真似て作ってみたのですが、エラーが発生してしまいます。 --- (例) 引数にポインタを入れる処理 // 引数 sc_uint<32> *s の関数 void test::Calc_func( sc_uint<32> *s ) { cout << "s[0] = " << s[0]; // 32bitのデータ出力? } // これがmain文の代わりです void test::A_func(void) { sc_biguint<2048> a; sc_uint<12> i; for( i = 0; i < 2048; i++ ) { a[i] = 0; } Calc_func( &a[0] ); // ←問題! } // Error内容 Calc_funcの引数の入れ方が駄目! --- 色々、Calc_funcへの型を変えてやってみたのですが、 全くびくともしません。 雑誌が間違っている可能性は低いと思いまして、 今回、このような質問をさせていただきました。 インターネット上の情報でも、このような処理を 見つけることができませんでした。 どうぞよろしくお願いいたします。

  • iTunes→iPod Touch同期中に固まる・・

    タイトルどおりです。 iTunes単体、iPod単体は問題ないのですが、同期を行うとiTunesが固まります。 iPodの同期をキャンセルし、iTunes、VISTAを再起動するのですが、また同期中に固まります。 ちなみに、OS1.1.4→2.2.1にVerUpした途端、です。 対処法はありますでしょうか?? 自分が考えているのが、iTunesの再インストールぐらいしか思い浮かばないのですが。。 その場合、OSのバージョンアップなど、消えてしまうのでしょうか。。 また\1,200で購入してやらないと??