Cosmo-ZデザインのVivado化(2)
Cosmo-ZデザインをVivadoに移行して、動いたようです。
先週試したときに動かなかった原因は、リセットやクロックの接続、ペリフェラルのアドレス、などがだったようでした。
○○のモジュールに行くクロックは△△で、というのを直したところ、動くようになったとこのとです。
リセット信号は、ISEの時にはaxis_resetという信号だったのが、Vivadoではperipheral_aresetn[0:0]になったり、ISEのときにはCPUのコアから出る信号がprocessing_system7_0_…という冗長な名前だったのが、Vivadoではスッキリしています。
正確には測っていませんが、論理合成時間も半分くらいに減ったような気がします。
![]()
リソースの使用率
8chのCosmo-ZをVivadoで論理合成したときは、


でした。
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の信号の宣言に初期値を書いてはいけないと昔、教わったのですが、今は書かなければならないのでしょうか。
| 固定リンク



コメント