Overtone NSL Support

NSLサポートページ



3 入力 多数決回路


機能

3input MAJORITY logic function / 3入力多数決回路

信号機能

A_i = 入力信号A
B_i = 入力信号B
C_i = 入力信号C
Q_o = 出力信号

記述特徴

any { … }を使用した3入力多数決回路のサンプルコードです.
anyステートメントは,入力値の評価を行います.
A_i,B_iとC_iの3つの信号を確認し,いずれか2つ以上の信号がHレベルであると出力Q_oをHにします
any{ … }動作は,C/C++等のcase()構文と同一の動作です.

NSL記述例

/* ************************************************************ */
declare MAJORITY3 {

    input       A_i ;
    input       B_i ;
    input       C_i ;

    output      Q_o ;

}

/* ************************************************************ */
// Declare module
module MAJORITY3 {

/* ************************************************************ */
// Internal operation signals
    wire        in_value[3] ;

/* ************************************************************ */
// Equation

    {
    // Connection statement.
        in_value = { A_i, B_i, C_i } ;

    // Evaluate input value.
        any {
            in_value == 3'b011 : Q_o = 1'b1 ;       // TRUE
            in_value == 3'b101 : Q_o = 1'b1 ;       // TRUE
            in_value == 3'b110 : Q_o = 1'b1 ;       // TRUE
            in_value == 3'b111 : Q_o = 1'b1 ;       // TRUE
            else               : Q_o = 1'b0 ;       // FALSE
        }
    }
}
/* ************************************************************ */

Verilog変換例

/*
 Produced by NSL Core(version=20110725), IP ARCH, Inc. Wed Sep 07 17:01:09 2011
 Licensed to :LIMITED EVALUATION USER:
*/
/*
 EVALUATION COPY!   DO NOT USE ANY PART OF THIS FILE FOR COMMERCIAL PRODUCTS.
*/

module MAJORITY3 ( p_reset , m_clock , A_i , B_i , C_i , Q_o );
  input p_reset, m_clock;
  wire p_reset, m_clock;
  input A_i;
  wire A_i;
  input B_i;
  wire B_i;
  input C_i;
  wire C_i;
  output Q_o;
  wire Q_o;
  wire [2:0] in_value;
  wire _net_0;
  wire _net_1;
  wire _net_2;
  wire _net_3;

   assign  in_value = {A_i,B_i,C_i};
   assign  _net_0 = (in_value)==(3'b111);
   assign  _net_1 = (in_value)==(3'b110);
   assign  _net_2 = (in_value)==(3'b101);
   assign  _net_3 = (in_value)==(3'b011);

// synthesis translate_off

// synopsys translate_off
always @(posedge m_clock or posedge p_reset)
  begin
if ((((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))&_net_3)|((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)&_net_2))|(((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)|_net_2)&_net_1))|((((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)|_net_2)|_net_1)&_net_0))
 begin $display("Warning: assign collision(MAJORITY3:Q_o) at %d",$time);
if ((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3)) $display("assert ((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3)) line 33 at %d\n",$time);
if (_net_3) $display("assert (_net_3) line 29 at %d\n",$time);
if (_net_2) $display("assert (_net_2) line 30 at %d\n",$time);
if (_net_1) $display("assert (_net_1) line 31 at %d\n",$time);
if (_net_0) $display("assert (_net_0) line 32 at %d\n",$time);
 end
 end

// synthesis translate_on

// synopsys translate_on
   assign  Q_o =
// synthesis translate_off

// synopsys translate_off
((((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))&_net_3)|((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)&_net_2))|(((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)|_net_2)&_net_1))|((((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)|_net_2)|_net_1)&_net_0))? 1'bx :((((((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))|_net_3)|_net_2)|_net_1)|_net_0)?
// synthesis translate_on

// synopsys translate_on
(((((~_net_0)&(~_net_1))&(~_net_2))&(~_net_3))?1'b0:1'b0)|
    ((_net_3)?1'b1:1'b0)|
    ((_net_2)?1'b1:1'b0)|
    ((_net_1)?1'b1:1'b0)|
    ((_net_0)?1'b1:1'b0)
// synthesis translate_off

// synopsys translate_off
:1'bx
// synthesis translate_on

// synopsys translate_on
;
endmodule
/*
 Produced by NSL Core(version=20110725), IP ARCH, Inc. Wed Sep 07 17:01:09 2011
 Licensed to :LIMITED EVALUATION USER:
*/
PAGE TOP