BeMicro Max10 をUSBポートに接続した所、LEDがカウントを始めた。

・しかし、デバイス マネージャーを見ると、USB-Blaster が認識されていなかった。(Qaurtus II 14.0.2)

・USB-Blaster を右クリックして、右クリックメニューからドライバソフトウェアの更新(P)... を選んだ。
・ドライバー ソフトウェアを手動で検索してインストールします。の方をクリックした。

・14.0\quartus\drivers を選択して、次をクリックした。(USB-Blaster のフォルダを選んでもダメでした)

・ドライバがインストールされ、Altera USB-Blaster として認識された。
- 2014年10月13日 05:54 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:0
”
AlteraのFPGAでのクロック出力とデータ出力2(Assignment Editorを使ってみる1)”では、Assignment Editorを使用してFAST_OUTPUT_REGISTER属性を入れてみた。今回は、FAST_INPUT_REGISTER属性を試してみることにする。(Quartus II 10.0 SP1を使用)
前回同様に、Assignment Editorで、今度はdinにFast input Registerを設定する。下が設定している途中。

Createボタンをクリックすると、8ビットのdinにFast input Register属性が指定された。

これでコンパイルして、din[0]を見てみると、I/Oセル内のレジスタが使われていなかった。

実際にdin[0]がd0[0]にどうつながっているかと言うと下の図の用に普通の配線でつながっている。

Fast input Registerを設定したのになぜ?というところだが、”
HardCopy シリーズ・ハンドブック Volume 1”(なぜか?HardCopyだが)この20ページによると、fast_input_registerは、”I/O セルまたは隣接LAB に、高速入力レジスタを実装。”だそうだ。必ずしもI/Oセルに実装されるものではないらしい?
CLK_DATA_test.qsfを貼っておく。
set_global_assignment -name FAMILY "Cyclone III"
set_global_assignment -name DEVICE EP3C16F484C6
set_global_assignment -name TOP_LEVEL_ENTITY CLK_DATA_test
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "10.0 SP1"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "05:20:24 OCTOBER 21, 2010"
set_global_assignment -name LAST_QUARTUS_VERSION "10.0 SP1"
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V
set_global_assignment -name VERILOG_FILE CLK_DATA_test.v
set_global_assignment -name QIP_FILE clk_data_test_pll.qip
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"
set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"
set_global_assignment -name MISC_FILE "H:/HDL/Altera/qdesigns/DE0/Test/CLK_DATA_test/CLK_DATA_test.dpf"
set_location_assignment PIN_AA3 -to clk_out
set_location_assignment PIN_Y2 -to dout[0]
set_location_assignment PIN_Y1 -to dout[1]
set_location_assignment PIN_M8 -to dout[2]
set_location_assignment PIN_N8 -to dout[3]
set_location_assignment PIN_T3 -to dout[4]
set_location_assignment PIN_M7 -to dout[5]
set_location_assignment PIN_P3 -to dout[6]
set_location_assignment PIN_M5 -to dout[7]
set_location_assignment PIN_G1 -to reset
set_location_assignment PIN_G2 -to clk
set_location_assignment PIN_V1 -to din[0]
set_location_assignment PIN_N2 -to din[1]
set_location_assignment PIN_V4 -to din[2]
set_location_assignment PIN_T4 -to din[3]
set_location_assignment PIN_W1 -to din[4]
set_location_assignment PIN_U2 -to din[5]
set_location_assignment PIN_U1 -to din[6]
set_location_assignment PIN_V2 -to din[7]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[0]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[1]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[2]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[3]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[4]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[5]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[6]
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to dout[7]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[0]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[1]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[2]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[3]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[4]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[5]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[6]
set_instance_assignment -name FAST_INPUT_REGISTER ON -to din[7]
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
- 2010年10月27日 04:36 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:0
さて、”
AlteraのFPGAでのクロック出力とデータ出力1”では、Verilogだけ書いて、Quartus IIおまかせでやってみたが、今度は、Assignment Editorを使ってみることにした。長船さんに教えていただいたFAST_OUTPUT_REGISTER属性と、FAST_INPUT_REGISTER属性を試してみることにする。(Quartus II 10.0 SP1を使用)
最初に、Assignment Editorを立ち上げる。Assignmentメニューから、Assignment Editorを選択する。もしくは、Assignment Editorアイコンをクリックする。

Assignment Editorが起動した。でも、何も項目が入っていない。これでは、Assignmentできない。

これは。。。というわけで、IOピンを制約しないとだめなんだろうと思った。そこで、Assignment Editorを終了して、バックアノテーションしてみることにした。
AssignmentメニューからBack-Annotate Assignments... を選択する。

Back-Annotate Assignmentsダイアログが開く。Pin & device assignmetsのラジオボタンをチェックしてOKボタンをクリックすると、Pinとデバイスを固定できるはず。。。OKボタンを押した。

Assignment Editorを開くと今度は、固定されたIOピンが表示された。
(後で、IOピンをバックアノテーションしなくても大丈夫そうということがわかりました)(とりあえず書いたので、このままにします、IOピンなどのバックアノテートのサンプルとします。ただしAlteraのコンフィグ関係のIOマップは消去しました)

次に、出力ピンにFast Output Register属性を付加する。
下のTo Create New assignmentsからToの下のスペースを ダブルクリックすると、Node Finderのアイコンが出てくるので、それをクリックする。

Node Finderのダイアログが出てくるので、Listボタンをクリックする。

ノードが左のNodes Found:に表示されれる。8個のdoutを選択して、真ん中の>ボタンをクリックすると、右のSelected Nodes:に8このdoutが表示される。これでOKボタンをクリックする。

これで8このdoutがToの項に入った。次にAssignment Nameを入力する。これは、プルダウンメニューで、Fast Output Registerを選択する。

次に、Valueを入力する。これもプルダウンメニューでOnを選択する。

必要な値は全部入った。Createボタンをクリックする。

これで、dout[0]~dout[8]にFast Output Register属性が設定された。

Saveして、Assignment Editorを終了し、もう一度コンパイルする。
Chip Plannerを起動して、dout[3]をResource Property Editorで見てみた。d2[3]のFFがI/Oセルに実装された。

FAST_INPUT_REGISTER属性を試すところまで行かなかったが、次回試してみることにする。
# Alteraの
アサインメント・エディタの日本語マニュアルが古くて、10.0 SP1のGUIにあってなかった。どうやってやるのか迷ってしまった。英語のマニュアルも詳しい説明書が見つからなかった。
- 2010年10月26日 05:34 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:0
遅くなってしまったが、”
MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる1”の続き。
今度はテストベンチを作る。XilinxのISEだとテストベンチのテンプレートを生成してくれる機能があるが、Quartus II では見つからなかったので、全部自分で書いた。即興で書いてみたテストベンチを下に示す。
// SFIFO_test_tb.v
`default_nettype none
`timescale 1ns / 1ps
module SFIFO_test_tb;
reg clk;
reg [16:0] data;
reg rdreq;
reg wrreq;
wire empty;
wire full;
wire [16:0] q;
wire [3:0] usedw;
integer i;
parameter CLK_PERIOD = 40;
parameter DELAY_TIME = 10;
SFIFO_test SFIFO_test_inst (
.clock(clk),
.data(data),
.rdreq(rdreq),
.wrreq(wrreq),
.empty(empty),
.full(full),
.q(q),
.usedw(usedw)
);
always begin
#(CLK_PERIOD/2) clk = 1'b1 ;
#(CLK_PERIOD/2) clk = 1'b0 ;
end
initial begin
data = 17'd0;
rdreq = 1'b0;
wrreq = 1'b0;
#(DELAY_TIME*2);
@(posedge clk);
#DELAY_TIME;
for (i=0; i<9; i=i+1) begin
@(posedge clk);
#DELAY_TIME;
data = data + 17'd1;
wrreq = 1'b1;
end
@(posedge clk);
#DELAY_TIME;
wrreq = 1'b0;
@(posedge clk);
#DELAY_TIME;
for (i=0; i<9; i=i+1) begin
@(posedge clk);
#DELAY_TIME;
rdreq = 1'b1;
end
@(posedge clk);
#DELAY_TIME;
rdreq = 1'b0;
@(posedge clk);
#DELAY_TIME;
@(posedge clk);
#DELAY_TIME;
$stop;
end
endmodule
これをModelSim AE 6.5eでシミュレーションしようとして起動したら、ライセンス・エラーになってしまった。

何ででしょう?ModelSim AE 6.5bは問題なく起動するだけど?ネットで検索してもわからなかった。
(2010/10/01:追記) インストールしたModelSim AE 6.5eは購入バージョンでFreeバージョンではありませんでした。ダウンロード・センターから種別を選んでダウンロードすると、購入版になってしまいます。Quartus II ウェブ・エディション ソフトウェアから、Windows 用 ModelSim-Altera Starter Edition v10.0 のサービスパック 1 (541 MB)のリンクをクリックすると、ModelSim-Altera Starter Editionの6.5eがダウンロードできました。インストールすると問題なく立ち上がりました。アプロさん、ありがとうございました。
しょうがないので、ModelSim AE 6.5bを起動して、シミュレーションすることにした。ModelSimを家で起動するのは久しぶりだ。しかもVerilog HDL で、Altera では”
無償ツールで実践する「ハード・ソフト協調検証」をやってみる”以来だと思う。
さて、ModelSim AE 6.5bを起動して、プロジェクトを作り、Verilog HDLファイルをADDして、コンパイルした。Simulationをスタートさせようとしたのだが、scfifoがないと怒られてしまった。

あれ?これはどのライブラリをADDすればよいのだったか?良くわからないので、ライブラリが付け易いVeritakでやってみることにした。
alteraのライブラリを下のように選択したところ、シミュレーションが成功した。

シミュレーション波形を下に示す。

emptyが0になった時に、qに00001が出ているので、Show-ahead synchronous FIFO mode となっているのがわかった。
ModelSim AE 6.5bに戻って、SimulateメニューからStart Simulation...を選択して、Start Simulationダイアログを出す。libraries タグから220model_verとaltera_mf_verを選択した。

これでOKボタンをクリックしところシミュレーションをスタートすることができた。Transcriptウインドウでrun -all コマンドを実行すると、シミュレーションを実行することができた。(当然、信号はWaveウインドウにいれました)

次に、fullが1になるのを見るために、16回データを書き込むようにしてみた。(for (i=0; i<16; i=i+1) begin)
これで、ModelSim AE 6.5bでシミュレーションしてみた結果が下の図だ。

やはり、usedwが0、fullが1になっているのがわかった。
- 2010年09月30日 05:43 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:4
Xilinx用に作ったSDR SDRAMコントローラには、FIFOモジュールがあって、それは分散RAM(ルックアップテーブルを使用したRAM)を使用している。Altera の
AN307では、MLABという小さい容量のメモリがあったので、それを使おうと思っていたら、どうやらCycloneシリーズにはMLABはないようだ。仕方がないので、勿体無いがM9K Memory Blockを使うしかない。
それだったら、Altera の同期FIFOの動作を見たことがなかったので、MegaWizard Plug-In Manager で生成してシミュレーションを行うことにした。
Quartus II のバージョンは10.0SP1。最初にQuartus II のToolsメニューからMegaWizard Plug-In Manager を選択する。そうするとMegaWizard Plug-In Manager ダイアログが開く。Next >をクリックする。

次のダイアログで、左のペインのMemory Compilerを展開して、FIFOを選択する。Verilogを使うので、Verilog HDLのラジオボタンをクリックする。FIFOのファイル名を書く。Next >をクリックする。

FIFOのダイアログが開く。FIFOの幅と深度を設定する。同期FIFOなので、ReadもWriteも同じクロックを選択する。Next >をクリックする。

次は、fullやempty, usedwなどの設定だ。デフォルトのままNext >をクリックする。
Show-ahead synchronous FIFO modeに設定する。Next >をクリックする。

次はどれをクリックしてもResource Usageは変わらなかったし、デフォルトとする。Next >をクリックする。

次もデフォルトのままとする。Next >をクリックする。

Verilog HDL black-box file(SFIFO_module_bb.v)にはすでにチェックが入っているので、Instantiation template file(SFIFO_module_inst.v) ファイルにもチェックを入れて、Finishボタンをクリックする。

なぜか?今生成したIPを自分のデザインに加えても良いか?というダイアログが出てきた。これは、自分のデザインに加えたくてIPを生成しているので、Automatically add Quartus II IP Files to all projects にチェックを入れてYseボタンをクリックした。

これでSFIFO_moduleが生成された。SFIFO_module_bb.vの中身を下に示す。その他はコメントがいっぱいだが、実際のコードはこれだけだ。
module SFIFO_module (
clock,
data,
rdreq,
wrreq,
empty,
full,
q,
usedw);
input clock;
input [16:0] data;
input rdreq;
input wrreq;
output empty;
output full;
output [16:0] q;
output [3:0] usedw;
endmodule
Instantiation template fileのSFIFO_module_inst.vを下に示す。
SFIFO_module SFIFO_module_inst (
.clock ( clock_sig ),
.data ( data_sig ),
.rdreq ( rdreq_sig ),
.wrreq ( wrreq_sig ),
.empty ( empty_sig ),
.full ( full_sig ),
.q ( q_sig ),
.usedw ( usedw_sig )
);
さて、トップファイルのSFIFO_test.vファイルを作って、プロジェクトに入れた。下にSFIFO_test.vファイルを示す。
// SFIFO_test.v
`default_nettype none
module SFIFO_test(
input wire clock,
input wire [16:0] data,
input wire rdreq,
input wire wrreq,
output wire empty,
output wire full,
output wire [16:0] q,
output wire [3:0] usedw
);
SFIFO_module SFIFO_module_inst (
.clock ( clock ),
.data ( data ),
.rdreq ( rdreq ),
.wrreq ( wrreq ),
.empty ( empty ),
.full ( full ),
.q ( q ),
.usedw ( usedw )
);
endmodule
これで、一旦コンパイルしてみたところ、正常に終了した。

Chip Plannerを立ち上げて、どのようにCyclone III の素子が使われているかを見てみた。

ピンクの四角の中に、ちょっとだけだが使われている。この部分を拡大すると。

M9K Memory Blockが使われているのがわかる。
今回はこの辺で。次はテストベンチを作って、シミュレーションをしてみるが、Quartus II ではテストベンチのテンプレートを生成してくれる方法はないのかな?
- 2010年09月24日 06:06 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:4
なひたふさんが、OV7670を使って1日でカラー画像をUSB経由でホストPCに表示するようにしたそうです。その記事は”
OV7670のカラー表示”です。凄い技術力とバイタリティーですね。尊敬します。設定をUSB経由でGUIでいじれるようにしたのが素敵ですね。Spartan-3A Starter Kitでは、内部プロセッサでロータリーエンコーダーを使って、いじれるようにすれば良さそうですね。液晶画面に表示して。
それはそのうち、やることにして、DE0でCMOSカメラの出力をディスプレイに表示する回路を進めています。
現在はSCCBインターフェース回路をVHDLからVerilogに変換するところです。大体、変換は終了しました。
SCCB_reg_values_ROM.vhdはXilinx独自の記述でROMを生成しているが、Alteraでも生成できるのか?確かめてみることにした。VHDLからVerilogのXilinxのXST用ROM生成、初期化データロードファイルを作って、Quartus II 10.0SP1でコンパイルしてみることにした。
バグの修正が完了してコンパイルできたが、RAMの初期化データを見る方法がわからない。Chip Plannerでも初期化データを見ることは出来ないみたい?下がChip Plannerの画面。

SCCB_reg_values_ROM.vで使用しているM9K Embedded Memory BlockをChip Planner上からダブルクリックすると、Resource Property Editor が起動した。

これでも、初期化データは見れる気配がない。どうやって初期化データを見るのか?
ちなみに、書き換えたSCCB_reg_values_ROM.vを下に示す。
// SCCB_reg_valuse_ROM.v
// ROM生成、初期化データロード
`default_nettype none
module SCCB_reg_values_ROM (
input wire clk,
input wire [7:0] address,
output reg [15:0] dout
);
reg [15:0] ram [0:255];
initial begin
$readmemh("SCCB_reg_values.data", ram, 0, 255);
end
always @(posedge clk) begin
dout <= ram[address];
end
endmodule
`default_nettype wire
初期化がうまく入っているのか?それとも無視されているのか?はQuartus IIのMessageウインドウを見ていたのではわからなかった。

結局、Memory Blockが初期化されているか?いないかが良くわからないので、どうやって初期化するか、調べてみた。そうしたら、
7. Quartus II インテグレーテッド・シンセシスの48ページに、ram_init_file 属性を適用する例が載っていた。下に引用する。
例7–35. Verilog-2001 例:ram_init_file 属性を適用
(* ram_init_file = "my_init_file.mif" *) reg [7:0] mem[0:255];
やはり、MIFファイルを作る必要がありそうだ。MIFファイルは前回、”
QuartusⅡでSignalTapⅡを試してみるまでの準備3(キャラジェネROMデータをMIFに変換)”で、Rubyを使って、キャラジェネデータをMIFファイルに変換しているので、今回も変換するRubyスクリプトを作ることにする。
でも、MIFファイルでMemory Blockを初期化しても、本当に初期化されているかツールで見えないと困りますよね?どうやってみるんでしょうか?
(2010/9/23:追記)
FPGA BBSでくりさんに教えていただいたのですが、コンパイル時に、Memory Blockにどのファイルを読み込んだかは、Compilation ReportのFitter->Resource Section->RAM Summaryで確かめることができるそうです。くりさん、いつもありがとうございます。
早速確かめてみました。RAM Summaryを見ると、CamDisp_SDRAM.ram0_SCCB_reg_values_ROM_c9d0e141.hdl.mifという名前のMIFファイルが指定されていました。

CamDisp_SDRAM.ram0_SCCB_reg_values_ROM_c9d0e141.hdl.mifの内容を見てみると、$readmemh("SCCB_reg_values.data", ram, 0, 255);で指定したファイルのデータが入っていました。
SCCB_reg_values.dataの内容に一部を下に示します。
1713
1801
32B6
1902
1A7A
030A
73F0
7A20
7B10
7C1E
下に、CamDisp_SDRAM.ram0_SCCB_reg_values_ROM_c9d0e141.hdl.mifの内容の一部を示します。
-- begin_signature
-- SCCB_reg_values_ROM
-- end_signature
WIDTH=16;
DEPTH=256;
ADDRESS_RADIX=UNS;
DATA_RADIX=BIN;
CONTENT BEGIN
..... 省略 ......
10 : 0111110100110101;
9 : 0111110000011110;
8 : 0111101100010000;
7 : 0111101000100000;
6 : 0111001111110000;
5 : 0000001100001010;
4 : 0001101001111010;
3 : 0001100100000010;
2 : 0011001010110110;
1 : 0001100000000001;
0 : 0001011100010011;
END;
同じ内容になっている。ということはXilinxと同じ方法でMemory Blockの初期化ができることがわかりました。Quartus II のバージョンは10.0SP1です。
- 2010年09月21日 05:58 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:0
Quartus2 Ver.9.1からNios2/eコアが無償化されたということを聞いたので、確かめてみた。つまり、なんちゃらかんちゃらtime_limited.sof ではなく、ちゃんとスタンドアロンで動く.sof ができるはず。。。
Quartus2 Ver.9.1をインストールしたので、以前の7セグメントLEDのダイナミック点灯AvalonMMスレーブを作った時点のVer.9.1のプロジェクト(”
Avalon-MMスレーブペリフェラル4(Nios2 IDEで7セグLEDをテスト”)をコピーして、Quartus2 Ver.9.1からプロジェクトを起動してみたところ、問題なく変換出来て、Quartus2が立ち上がった。
さて、さっそくSOPC Builder を立ち上げる。問題なく変換して立ち上がった。CPUを見てみると、Nios2/s だった。そのままにしてGenerate。Quartus2に戻ってコンパイルした。

コンパイルが通って、Programmerを立ち上げるとnios2_sdram_led_time_limited.sof がプログラムできるようになる。ファイルの日付を見ると今日の日付になっているし、以前と同様に限定されたSOFファイルは出来るようだ。
次に、SOPC Builder を立ち上げ、CPUをNios2/e に変更した。

Generate して、Quartus2 でコンパイルし、プロジェクトのフォルダを見ると、nios2_sdram_led.sof が出来ていました。

ちゃんと、nios2_sdram_led.sof が出来て、機能を確認できたけど、JTAG-UART でやり取りなので、今までとあまり変わらないはず。とりあえず、基板を取りだすのが面倒なので、今日はこの辺で終了。
- 2009年11月08日 06:25 |
- QuartusⅡ
-
| トラックバック:0
-
| コメント:0