投稿

verilog~generate文とfor文による連続モジュールの生成

イメージ
初めに 今回はmoduleを複数一気に生成し、かつそのmoduleに受け渡すパラメータや変数、逆に受け取る変数や信号を別々に扱う方法を紹介したいと思います。 generate文とfor文 今回使う関数はgenerate 文と for 文です。for 文はC言語などでの使い方とそんなに変わりません。generate 文とfor 文を使って、dividerのmoduleを一気に6個生成します。かつその6個のdividerは1,2,3,4,5,6分周をそれぞれ担うような形を作っていきたいと思います。 それでは早速コードを見ていきましょう。 parameter num = 6; wire [num-1:0]div_out; generate genvar k; for (k = 0; k < num; k = k + 1) begin:generate_divider divider #( .div_number (k+1) )divider1( .div_in (clk), .div_out (div_out[k]) ); end endgenerate 順番に見ていきましょう。まず、 parameter num = 6; これはいくつmoduleを生成するかをparameterで宣言しています。 wire [num-1:0]div_out; これはdividerの出力を6bitのワイヤで表現しています。 generate この文より下に生成するmoduleの記述をしていきます。 genvar k; これはgenerate文内で使う変数をgenvarで宣言し、kという変数として定義しています。 for (k = 0; k < num; k = k + 1) ここからがfor文です。かっこの中は(変数の初期値;変数の終わりの条件;変数の変化の条件)のように記述していきます。今回はk=0から1づつ増えて、numつまり6未満までとしていますので、0,1,2,3,4,5のkという表現となります。

Quartus Primeの基本的な使い方(Verilogでの使い方)

イメージ
初めに  こんにちは、Keymaleです。Quartusのバージョンは現在の最新版よりは少し古いですが、参考になると思います。 Quartus Primeの使い方 Quartus Primeを用いたverilogの使い方について説明していこうと思います。 バージョンは18.0を使います。 Quartus PrimeはIntelのホームページから ダウンロードできます。無料のlite editionを使っていきます。 早速Qurtus Primeを開いてみましょう。 こんな画面が表示されます。 次にプロジェクトを作成します。 FileからNew Project Wizardを開いてください。 こんな画像が出てきますのでNextを押しましょう。 真ん中のボックスにプロジェクト名を入れてください。ここではkeymaleと入力しました。すると、自動的にしたのボックスにプロジェクト名と同じものが入力されます。これは、verilogの最上位ファイルの名前になります。これは後ほどまた使います。後から変更もできますが、同じ名前にしておきましょう。Nextを押しましょう。 ここもデフォルトのまま、Empty projectを選択して、Nextを押しましょう。 ここでは、すでにあるverilog及びvhdlファイルをprojectに追加できます。後からでも追加できます。今回は初めてということで、特に何もせずそのままNextを押しましょう。 ここでは作成したverilog等のファイルをFPGAに書き込む際のデバイスを選択できます。これも後から変更できます。今回はデフォルトのままNextを押しましょう。 ここも特にデフォルトのまま変更せず、Nextを押しましょう。 Nextを押してばっかりですが、これでようやく終わりです。Finishボタンを押しましょう。 これでプロジェクトが完成しました。デフォルトだとintel_liteの18というフォルダの直下にプロジェクト名.qpfというプロジェクトファイルができているかと思います。ここに適当にプロジェクト名のフォルダを作り、そこに移動しておきましょう。 次にverilogファイルを作っていきます。FileのNewを選ん

Python~高速リスト作成(内包表記、Numpy)~

リストの作成 Pythonでは標準で用意されているListの作り方として、for文を使ってappendで順番に増やしていくやり方と内包表記があります。また、Numpyを用いてarange関数で作成する方法もあります。それぞれの速さを計測してみましょう リスト作成の速さ それでは早速コードを見ていきましょう。 # Numpy def genlist0(n,m): return np.arange(n,m) %timeit genlist0(1,10**7) # Python list def genlist1(n,m): ans = [] for i in range(n,m,1): ans.append(i) return ans %timeit genlist1(1,10**7) def genlist2(n,m): return [i for i in range(n,m,1)] %timeit genlist2(1,10**7) 比較として、1-10000000までの1ずつ増える配列の生成にかかる時間を比較します。 NumpyでのArangeによる生成、リストでAppendして生成、リストの内包表記での生成です。 結果は以下の通りです。 100 loops, best of 5: 17.7 ms per loop 1 loop, best of 5: 1.14 s per loop 1 loop, best of 5: 714 ms per loop なんということでしょう。 Numpyは17.7msecなのに対して、リストのfor文による生成は1.14sec、高速といわれる内包表記ですら714msecかかっております。 以下にNumpyが速いかがわかりますね。
 初めまして 初めまして、Keymaleです。ずっとAWSでサーバーを立てて、Wordpressでブログを運営しておりました。こちらの サイト です。 サイトのメンテナンスが結構面倒で、やだなーと思っていたところ、GooleのBloggerというサービスを発見。試しにですが、こちらのサイトを運用していって、問題なさそうならば、完全にこちらに移行しようかと思います。