FPGA入门教程 FPGA架构教程 Verilog教程 Verilog-2001SystemC教程
返回首页
当前位置: FPGA主页 > FPGA教程 > SystemC教程 >

2.9 SystemC-多驱动

时间:2010-03-25 23:59来源:未知 作者:admin 点击:
在实际电路中多驱动也是很常见的。 如下图,模块1~3的输出同时连接到信号result上,那么result的值到底应该如何选择呢?比如图中所示情况,driver2和driver3是关闭的,而只有driver1在驱动

     在实际电路中多驱动也是很常见的。

     如下图,模块1~3的输出同时连接到信号result上,那么result的值到底应该如何选择呢?比如图中所示情况,driver2和driver3是关闭的,而只有driver1在驱动,所以result应该为0。

 

一个多驱动的例子


     如果上图中driver2的值为1,那么这时result的值该如何决定呢?由于1与0的驱动强度一样,所以result应该为X。SystemC定义的逻辑值解析表如下,它定义了多驱动情况下如何进行逻辑值解析。

1 SystemC的逻辑值解析

 

0 1 Z X
0 0 X 0 X
1 X 1 1 X
Z 0 1 Z X
X X X X X

     SystemC中引入了解析逻辑向量信号(Resolved Logic Vector signal)来解决多驱动的问题。可以使用下面的方法定义解析型端口:
     sc_in_rv<n> x;   //x被定义为n比特宽的解析逻辑向量型输入端口
     sc_out_rv<n> y;  //y被定义为n比特宽的解析逻辑向量型输出端口
     sc_inout_rv<n> z; //z被定义为n比特宽的解析逻辑向量型双向端口
     这里n是任意正值。值得注意的是解析型的端口比普通的端口需要更多的仿真时间,如果不是必须,最好不要使用。

     类似的,解析型信号的定义方法如下:
     sc_signal_rv<n> x;   //宽度为n比特的解析型向量信号x。 
     下面举一个使用解析向量信号的例子,如图2-8。

2 213态驱动输出逻辑

      给出源代码如下:

  1.   #ifndef __TRISTATE_H  
  2.   #define __TRISTATE_H  
  3.   #include <systemc.h>  
  4.   // Three-state buffer inference with resolved logic output  
  5.   #include "systemc.h"  
  6.  SC_MODULE(Tristate) {  
  7.     sc_in<bool> in_sela, in_selb;  
  8.     sc_in<bool> in_a;   
  9.     sc_in<bool> in_b;  
  10.     sc_out_rv<1> out_1;  
  11.   // Method for first three-state driver  
  12.     void tristate_a();  
  13.   // Method for second three-state driver  
  14.     void tristate_b();  
  15.   // Constructor  
  16.  SC_CTOR( Tristate) {  
  17.     SC_METHOD( tristate_a);  
  18.     sensitive << in_sela << in_a;  
  19.     SC_METHOD( tristate_b);  
  20.     sensitive << in_selb << in_b;  
  21.   }  
  22.   };  
  23.  void Tristate::tristate_a() {  
  24.      if (in_sela.read()){  
  25.   out_1.write(in_a.read());  
  26.      }else{  
  27.   out_1.write("Z");//SC_LOGIC_Z  
  28.    }  
  29.  }  
  30.   void Tristate::tristate_b() {  
  31.     if (in_selb.read()){  
  32.   out_1.write(in_b.read());  
  33.  }else{  
  34.  out_1.write("Z");  
  35.  }  
  36.  }  
  37. #endif   
 
(责任编辑:admin)
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容