FC2カウンター FPGAの部屋 Vivado 2104.2でSystemVerilog をやってみた6(アンパック型配列とパック型配列)

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

FPGAの部屋

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

Vivado 2104.2でSystemVerilog をやってみた6(アンパック型配列とパック型配列)

今回は、”AR# 51836 Vivado 合成のデザイン アシスタント - SystemVerilog - 集合体データ型”のアンパック型配列サンプル (aggregate_data_types_example1.zip) とパック型配列サンプル (aggregate_data_types_example2.zip) を同時にやってみる。

アンパック型配列は、(aggregate_data_types_example1.zip の array_unpacked.sv から引用)

reg [DATA_WIDTH-1:0] mem [ADDR_WIDTH-1:0]; //Unpacked array declaration

で、パック型配列は、(aggregate_data_types_example2.zip の array_packed.sv から引用)

reg [DATA_WIDTH-1:0] [ADDR_WIDTH-1:0] mem ; //packed array declaration

ということだ。

まずは、aggregate_data_types_example1.zip の array_unpacked.sv からインプリメントしてみよう。このファイルは .sv とSystemVerilog の拡張子がついていても、Verilog で書かれているファイルだ。プロジェクトのボードは、ZedBoardを使用した。
インプリメントは成功したので、Implemented Design を表示してみる。
SystemVerilog_28_140811.png

address が3ビットしか無くなっている。それもそのはず、

reg [DATA_WIDTH-1:0] mem [ADDR_WIDTH-1:0]; //Unpacked array declaration

は、reg [DATA_WIDTH-1:0] mem を ADDR_WIDTH 個インスタンスしたということであるので、ADDR_WIDTH = 8 なので、8個インスタンスするには、3ビットしかアドレスが必要ないため後の5ビットのアドレスは消されてしまった。。。

次に、パック型配列の aggregate_data_types_example2.zip の array_packed.sv のプロジェクトを作成して、インプリメントしてみた。プロジェクトのボードは、ZedBoardを使用した。
array_packed.sv のアドレスは 1024ビット幅で、データは 16ビット幅だったので、 array_packed_top.sv を作成して、アンパック型配列同様のアドレス 8ビット幅、データ 8ビット幅に書きなおした。
array_packed_top.sv を下に貼っておく。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2014/08/11 05:26:43
// Design Name: 
// Module Name: array_packed_top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module array_packed_top(
    input clk,
    input [7:0] address,
    inout [7:0] data,
    input cs,
    input we,
    input oe
    );
    
    array_packed #(
        .DATA_WIDTH(8),
        .ADDR_WIDTH(8)
    ) array_packed_i (.*);
    
endmodule


インプリメントを行ったところ成功した。Implemented Design を表示してみると、address が8ビット分残っている。256個のメモリセルをインスタンスできていると思われる。
SystemVerilog_29_140811.png

アンパック型配列とパック型配列の違いは、実際にはこの辺りの違いが大きいのではないか?と思う。

(2014/08/12:追記)
アンパック型配列とパック型配列では、同じく8個のメモリがインスタンスされていた。
パック型配列では、8ビットのアドレスが残っていたが、アドレスは1つずつ8ビット単位のメモリ素子のイネーブルに接続されているようだった。
SystemVerilog_31_140812.png 

アンパック型配列では、8個のメモリ素子に接続されている。
SystemVerilog_32_140812.png

アンパック型配列は普通のメモリになっているが、パック型配列はこれでよいのだろうか?
  1. 2014年08月12日 14:10 |
  2. SystemVerilog
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/2899-6f56b174
この記事にトラックバックする(FC2ブログユーザー)