FC2カウンター FPGAの部屋 2014年08月08日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado 2104.2でSystemVerilog をやってみた2(data_types_example1)

Vivado 2104.2でSystemVerilog をやってみた1(data_types_example1)”をやってみると、Total On-Chip Power が 7.997W になっていて、大変なことになっていた。
SystemVerilog_6_140808.png

On-Chip にするとこんな感じ。I/OとDSPの消費電力が多い。
SystemVerilog_7_140808.png

どんな回路になっているか概略を見てみよう。まずは、Flow Navigator -> RTL Analysis -> Schematic をクリックした。
SystemVerilog_8_140808.png

ごく常識的な回路になっている。
次に、実際のマッピングを見るために、Flow Navigator -> Synthesis -> Schematic をクリックした。
SystemVerilog_9_140808.png

左右真ん中、上下で上の方の大きな2つの四角を拡大してみよう
SystemVerilog_10_140808.png

DSP48E1が使われているのがわかる。

パワーを食い過ぎているのは、クロックのタイミング制約が無い為と思われるので、クロックのタイミング制約を追加する。

タイミング制約を生成してみよう。Flow Navigator -> Implementation -> Edit Timing Constraints を選択した。

clock信号のPERIOD制約を生成する。
SystemVerilog_11_140808.png

制約をXDCファイルとしてセーブした所。
SystemVerilog_12_140808.png

もう一度インプリメントを行うと、Total On-Chip Power は 0.148Wとなった。良かった。
SystemVerilog_13_140808.png

やはり、PERIOD制約をかけないと、Total On-Chip Power の計算がまずくなるようだ。
  1. 2014年08月08日 17:06 |
  2. SystemVerilog
  3. | トラックバック:0
  4. | コメント:0

Vivado 2104.2でSystemVerilog をやってみた1(data_types_example1)

仙台からブログを書きます。

Vivado 2014.2 でSystemVerilog がサポートされているので、確かめてみることにした。

Vivado 2014.2 のSystemVerilog サポートの情報は、”AR# 51360 Vivado 合成のデザイン アシスタント - SystemVerilog のサポート”に色々と情報があり、その下に行くとサンプルコードもある。
その内の最初の”AR# 51327 Vivado 合成のデザイン アシスタント - SystemVerilog データ型のサポート”がある。そこに4つのサンプルデータがある。それは、data_types_example1.zip、data_types_example2.zip, data_types_example3.zip, data_types_example4.zip だ。
最初の data_types_example1.zip を解凍すると、ALU.sv、definitions.sv、data_type_example1_readme.txt が入っていた。このサンプルはALUの動作を表すサンプルコードとなっている。
SystemVerilog_1_140808.png

その内の ALU.sv、definitions.sv を使用して、Vivado 2014.2 で data_t_ex1 プロジェクトを作成した。
試してに論理合成、インプリメントをしてみたが、クリティカル・ワーニングは出たが、正常に行うことが出来た。(プロジェクトは、ZedBoardのプロジェクトです)
SystemVerilog_2_140808.png

ALU の入出力ポートの記述引用する。


`include "definitions.sv"
import definitions::*;
module ALU(
input instruction_t IW,
input logic clock,
output logic [31:0] result
);


IWの宣言は、以下の通り。これも引用する。


typedef struct{
logic [31:0] a, b;
opcodes_t opcode;
} instruction_t;


これらの入出力ポートがどのようにインスタンスされているかを見ると、以下の図の通りになった。
SystemVerilog_3_140808.png

IWは、IW[a], IW[b], IW[opcode] の3つのポートから構成されている。ちゃんと実装されているようだ。

次にテストベンチを作成して、Behavioral Simulation を実行したが、下のエラーが出て、どうしてもシミュレーションすることができない。
SystemVerilog_4_140808.png

ERROR: [VRFC 10-2063] Module <ALU> not found while processing module instance <ALU_i> [C:/Users/ono/Documents/HDL/Vivado/SV_Examples/data_t_ex1/data_t_ex1.srcs/sim_1/new/ALU_tb.sv:33]
ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.


現在もこのエラーが原因でシミュレーションを行うことができない。下にテストベンチ (ALU_tb.sv) を貼っておくので、なにかお気づきの点がありましたら、コメント欄でお知らせください。よろしくお願いします。
`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2014/08/07 08:18:52
// Design Name: 
// Module Name: ALU_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////

`timescale 1ns / 1ps

`include "definitions.sv"
import definitions::*;
module ALU_tb;
    parameter DELAY    = 5;
    
    instruction_t     IW;
    logic             clock; 
    logic [31:0]    result;

    ALU ALU_i (
//        .IW(IW),
//        .clock(clock),
//        .result(result)
        .*
     );
    
    initial begin
        clock = 1'b0;
        forever begin
            clock = #10 ~clock;
        end 
    end
    
    initial begin
        IW.a = 5;
        IW.b = 2;
        IW.opcode = ADD;
        
        @(posedge clock);    // 次のクロックへ
        #DELAY;
        @(posedge clock);    // 次のクロックへ
        #DELAY;
        
        IW.opcode = SUB;
        @(posedge clock);    // 次のクロックへ
        #DELAY;

        IW.opcode = MUL;
    end    
endmodule


(追加)
ModelSim ASE 10.1d でやってみました。
run 1us コマンドを実行した所、問題なくシミュレーションすることが出来ました。
SystemVerilog_5_140808.png

Vivado 2014.2 のSimulator は SystemVerilog をシミュレーションする用途には、使わない方が良さそうですね。。。
  1. 2014年08月08日 05:11 |
  2. SystemVerilog
  3. | トラックバック:0
  4. | コメント:0