« FPGAで作るHyperFFTのアルゴリズム | トップページ | Cosmo-ZのVivado化(3) »

2016.06.22

Cosmo-ZデザインのVivado化(2)

Cosmo-ZデザインをVivadoに移行して、動いたようです。

先週試したときに動かなかった原因は、リセットやクロックの接続、ペリフェラルのアドレス、などがだったようでした。

○○のモジュールに行くクロックは△△で、というのを直したところ、動くようになったとこのとです。

Cszvivado

リセット信号は、ISEの時にはaxis_resetという信号だったのが、Vivadoではperipheral_aresetn[0:0]になったり、ISEのときにはCPUのコアから出る信号がprocessing_system7_0_…という冗長な名前だったのが、Vivadoではスッキリしています。

正確には測っていませんが、論理合成時間も半分くらいに減ったような気がします。

リソースの使用率

8chのCosmo-ZをVivadoで論理合成したときは、

Cszvivado3

Cszvivado4

でした。

ISEでは、

Number of Slice Registers   16,085/157,200   10%
Number of Slice LUTs   16,083/78,600  20%
Number of occupied Slices  6,985/19,650  35%
Number of RAMB36E1/FIFO36E1s  58/265  21%
Number of RAMB18E1/FIFO18E1s 16/530  3%
Number of DSP48E1s  72/400 18%

だったので、リソース利用量が格段に減っています。特にDSP48が32個も減っているのが気になります。

これで良いのかどうか不安になります。(何か大事なものが削除されていないだろうか、という意味)

困ったことがもう1つあって、PHYにリセット信号を作っていたタイマーが動かなくなったことでした。

こういう回路でPHYチップに短いリセット信号を送っているのですが、Vivadoに移行したらうまく動かなかったとのことでした。

    process(clk100m) begin
        if(clk100m'event and clk100m = '1') then
            if(phy_timer(phy_timer'left) = '0') then
                phy_timer <= phy_timer + 1;
            end if;
            if(phy_timer = 0) then
                phy_resetn <= '0';
            elsif(phy_timer(phy_timer'left) = '1') then
                phy_resetn <= '1';
            end if;     
        end if;
    end process;
    phy_resetn_op <= phy_resetn;

このタイマーで使っている信号phy_timerを宣言しているところの

signal phy_timer  : std_logic_vector(19 downto 0);
signal phy_resetn : std_logic;

にしたら動くようになったとのことです。

signal phy_timer  : std_logic_vector(19 downto 0) := (others => '0');
signal phy_resetn : std_logic;

どうやら信号の初期値が0になっていないようだとのことなのですが、VHDLの信号の宣言に初期値を書いてはいけないと昔、教わったのですが、今は書かなければならないのでしょうか。

|

« FPGAで作るHyperFFTのアルゴリズム | トップページ | Cosmo-ZのVivado化(3) »

コメント

コメントを書く



(ウェブ上には掲載しません)




« FPGAで作るHyperFFTのアルゴリズム | トップページ | Cosmo-ZのVivado化(3) »