Overtone NSL Support

NSLサポートページ



8ワード x 8ビット幅 SRAM(メモリアレイ)


機能

8word x 8bit SRAM モジュール

信号機能

AD_i[2] = アドレス入力
DB_i[8] = 書き込みデータ入力
CS_i = チップセレクト入力
WEN_i = 書き込みイネーブル入力
REN_i = 読み出しイネーブル入力

DB_o[8] = データ出力

記述特徴

メモリを推論させるためにはmemを使います。

mem メモリ名 [n][m] = { 初期値,初期値, … } ;

上記の例だと、nワードでmビットのメモリ名という名前のメモリが作られます。
{}で初期値を与えることができます。初期値がメモリの数より少ない場合、足りない分は0で初期化されます。

NSL記述例

/* ************************************************************ */
declare RAM_SRAM {

    input       AD_i[2] ;       // Address (in)
    input       DB_i[8] ;       // Write Data (in)
    output      DB_o[8] ;       // Read Data (out)

    input       CS_i ;          // Chip select (in)
    input       WEN_i ;         // Write enable (in)
    input       REN_i ;         // Read enable (in)
}

/* ************************************************************ */
// Declare module
module RAM_SRAM {

/* ************************************************************ */
// Internal operation signals
    mem     mem_array [4][8] ;

/* ************************************************************ */
// Equation
{
    if ( CS_i & WEN_i ) {
        mem_array[AD_i] := DB_i ;
    }

    if ( CS_i & REN_i ) {
        DB_o = mem_array[AD_i] ;
    } else {
        DB_o = 8'h00 ;
    }
}

/* ************************************************************ */
}

Verilog変換例

/*
 Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:55:03 2010

 Licensed to :EVALUATION USER:
*/

module RAM_SRAM ( p_reset , m_clock , AD_i , DB_i , DB_o , CS_i , WEN_i , REN_i );
  input p_reset, m_clock;
  input [1:0] AD_i;
  input [7:0] DB_i;
  output [7:0] DB_o;
  input CS_i;
  input WEN_i;
  input REN_i;
  reg [7:0] mem_array [0:3];
  wire _net_0;
  wire _net_1;

   assign  _net_0 = CS_i&WEN_i;
   assign  _net_1 = CS_i&REN_i;

//synthesis translate_off
always @(posedge m_clock or posedge p_reset)
  begin
if ((~_net_1)&_net_1)
 begin $display("Warning: assign collision(RAM_SRAM:DB_o) at %d",$time);
if (~_net_1) $display("assert (~_net_1) at 32\n");
if (_net_1) $display("assert (_net_1) at 30\n");

  end
  end
//synthesis translate_on
   assign  DB_o =
//synthesis translate_off
((~_net_1)&_net_1)? 8'bx :((~_net_1)|_net_1)?
//synthesis translate_on
((~_net_1)?8'b00000000:8'b0)|
    ((_net_1)?mem_array[AD_i]:8'b0)
//synthesis translate_off
:8'bx
//synthesis translate_on
;
always @(posedge m_clock)
  begin
   if (_net_0 )
     mem_array[AD_i] <= DB_i;
end
endmodule
/*
 Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:55:03 2010

 Licensed to
*/
PAGE TOP