Overtone NSL Support

NSLサポートページ



8ワードx8ビット幅 PROM


機能

8word x 8bit PROM モジュール

信号機能

AD_i[3] = アドレス入力
CS_i = チップセレクト入力
REN_i = 読み出しイネーブル入力

DB_o[8] = データ出力

記述特徴

メモリを推論させるためにはmemを使います。
mem メモリ名 [n][m] = { 初期値,初期値, … } ;

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

NSL記述例

/* ************************************************************ */
declare RAM_PROM {

    input       AD_i[3] ;       // Address (in)
    output      DB_o1[8] ;      // Read Data (out)  / Asynchronous
    output      DB_o2[8] ;      // Read Data (out)  / Clock synchronous

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

/* ************************************************************ */
// Declare module
module RAM_PROM {

/* ************************************************************ */
// Internal operation signals
    mem mem_array [8][8] = { 0x01, 0x02, 0x03, 0x04,    // C like statement
                             8'b10010110,               // Binary data
                             8'o70,                     // Octal data
                             8'd254,                    // Decimal data
                             8'hAC                      // Hex decimal data
                           } ;
            // In this case, initial values are setted as follows :
            // mem_array[0] = 1
            // mem_array[1] = 2
            // mem_array[2] = 3
            // mem_array[3] = 4
            // mem_array[4] = 0x96
            // mem_array[5] = 0x38
            // mem_array[6] = 0xFE
            // mem_array[7] = 0xAC

    reg     clocked_rdout[8] ;

/* ************************************************************ */
// Equation
{
// Asynchronized output
    if ( CS_i & REN_i ) {
        DB_o1 = mem_array[AD_i] ;
    } else {
        DB_o1 = 8'h00 ;
    }

// Clock synchronized output
    if ( CS_i & REN_i ) {
        clocked_rdout := mem_array[AD_i] ;
    } else {
        clocked_rdout := 8'h00 ;
    }
    DB_o2 = clocked_rdout ;

}

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

Verilog変換例

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

 Licensed to :EVALUATION USER:
*/

module RAM_PROM ( p_reset , m_clock , AD_i , DB_o1 , DB_o2 , CS_i , REN_i );
  input p_reset, m_clock;
  input [2:0] AD_i;
  output [7:0] DB_o1;
  output [7:0] DB_o2;
  input CS_i;
  input REN_i;
  reg [7:0] mem_array [0:7];
  reg [7:0] clocked_rdout;
  wire _net_0;
  wire _net_1;

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

//synthesis translate_off
always @(posedge m_clock or posedge p_reset)
  begin
if ((~_net_0)&_net_0)
 begin $display("Warning: assign collision(RAM_PROM:DB_o1) at %d",$time);
if (~_net_0) $display("assert (~_net_0) at 44\n");
if (_net_0) $display("assert (_net_0) at 42\n");

  end
  end
//synthesis translate_on
   assign  DB_o1 =
//synthesis translate_off
((~_net_0)&_net_0)? 8'bx :((~_net_0)|_net_0)?
//synthesis translate_on
((~_net_0)?8'b00000000:8'b0)|
    ((_net_0)?mem_array[AD_i]:8'b0)
//synthesis translate_off
:8'bx
//synthesis translate_on
;
   assign  DB_o2 = clocked_rdout;
initial begin
    mem_array[0] <= 8'b00000001;
    mem_array[1] <= 8'b00000010;
    mem_array[2] <= 8'b00000011;
    mem_array[3] <= 8'b00000100;
    mem_array[4] <= 8'b10010110;
    mem_array[5] <= 8'b00111000;
    mem_array[6] <= 8'b11111110;
    mem_array[7] <= 8'b10101100;
end
always @(posedge m_clock)
  begin

//synthesis translate_off
if ((~_net_1)&#038;_net_1)   clocked_rdout <= 8'bx;
  else
//synthesis translate_on
if (~_net_1)
      clocked_rdout <= 8'b00000000;
else if (_net_1)
      clocked_rdout <= mem_array[AD_i];
end

//synthesis translate_off
always @(posedge m_clock)
  begin
if (((~_net_1)|_net_1=='b1) ||
 ((~_net_1)|_net_1=='b0) ) begin
 if ((~_net_1)&#038;_net_1)
 begin $display("Warning: assign collision(RAM_PROM:clocked_rdout) at %d",$time);

  end
 end
 else
 $display("Warning: register set hazard(RAM_PROM:clocked_rdout) at %d",$time);
  end
//synthesis translate_on
endmodule
/*
 Produced by NSL Core, IP ARCH, Inc. Fri Jun 04 17:54:57 2010

 Licensed to
*/
PAGE TOP