Vivado 2015.4 のチュートリアルの続きをやっていこう。
まずは、C Validation tutorialのディレクトリに移動し、以下のコマンドを叩く。
vivado_hls -f run_hls.tcl
これは実際には、C言語でのシミュレーションおよびValidationが行われているだけだ。
... ###Specify a Xilinx device and clock period ###- Do not specify a clock uncertainty (margin) ###- Let the margin to default to 12.5% of clock period set_part {xc7k160tfbg484-1} create_clock -period 5 #set_clock_uncertainty 1.25 ###Simulate the C code csim_design ###Do not perform any other steps ###- The basic project will be opened in the GUI exit
次に、hamming_window_prjを開いて、Windowを起動する。
vivado_hls -p hamming_window_prj
hamming_window_test.c の構造はどのようになっているのか
テストベンチと、回答を作成する。
for (i = 0; i < WINDOW_LEN; i++) { // Generate a test pattern for input to DUT test_data[i] = (in_data_t)((32767.0 * (double)((i % 16) - 8) / 8.0) + 0.5); // Calculate the coefficient value for this index in_data_t coeff_val = (in_data_t)(WIN_COEFF_SCALE * (0.54 - 0.46 * cos(2.0 * M_PI * i / (double)(WINDOW_LEN - 1)))); // Generate array of expected values -- n.b. explicit casts to avoid // integer promotion issues sw_result[i] = (out_data_t)test_data[i] * (out_data_t)coeff_val; }
test_dataは入力データであり、sw_resultは、C言語での計算結果となる。
シミュレーションの実行
// Call the DUT printf("Running DUT..."); hamming_window(hw_result, test_data); printf("done.\n");
そもそも、hamming_windowは、一定量の入力を受け取り、出力を行う機構になっている。だから、これでも上手く行く構造になっているのか。
結果の確認
// Check the results returned by DUT against expected values fp=fopen("result.dat","w"); printf("Testing DUT results"); for (i = 0; i < WINDOW_LEN; i++) { fprintf(fp, "%d %d \n", hw_result[i],sw_result[i]); if (hw_result[i] != sw_result[i]) { err_cnt++; check_dots = 0; printf("\n!!! ERROR at i = %4d - expected: %10d\tgot: %10d", i, sw_result[i], hw_result[i]); } else { // indicate progress on console if (check_dots == 0) printf("\n"); printf("."); if (++check_dots == 64) check_dots = 0; } } fclose(fp); printf("\n");
hw_resultとsw_resultを比較し、一致すればOK、不一致ならばエラーカウントを上げる。
C言語でのシミュレーション
まずは、C言語でのシミュレーションを行う。
この場合は、通常通りシミュレーションが実行される。
デバッグ環境でシミュレーションを実行する
デバッグ機能を有効化してシミュレーションを行ってみる。どうなるだろう。 [Project]→[Run C Simulation]をクリックする。下記の画面が表示されるが、ここで[Launch Debugger]を選択する。
デバッガ画面が表示された。
Variableペインに、それぞれの変数の値が表示されている。あるいは、ブレークポイントの機能も利用できる。
ブレークポイントに到達すると、そこでストップし、変数の値を表示できる。