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

2.1 从完整的SystemC实例开始

时间:2010-03-01 20:40来源:未知 作者:admin 点击:
一个SystemC双端口异步读写RAM实例: #ifndefRAM_DP_AR_AW #defineRAM_DP_AR_AW #includesystemc.h #defineDATA_WIDTH8 #defineADDR_WIDTH8 #defineRAM_DEPTH1ADDR_WIDTH SC_MODULE(ram_dp_ar_aw){ sc_insc_uintADDR_WIDTHaddress_0; sc_in bool

一个SystemC双端口异步读写RAM实例:

 

  1. #ifndef RAM_DP_AR_AW  
  2. #define RAM_DP_AR_AW  
  3. #include "systemc.h"  
  4.  
  5. #define DATA_WIDTH        8   
  6. #define ADDR_WIDTH        8   
  7. #define RAM_DEPTH         1 << ADDR_WIDTH  
  8.  
  9. SC_MODULE (ram_dp_ar_aw) {  
  10.   sc_in    <sc_uint<ADDR_WIDTH> > address_0;  
  11.   sc_in    <bool> cs_0 ;  
  12.   sc_in    <bool> we_0 ;  
  13.   sc_in    <bool> oe_0  ;  
  14.   sc_in    <sc_uint<ADDR_WIDTH> > address_1;  
  15.   sc_in    <bool> cs_1 ;  
  16.   sc_in    <bool> we_1 ;  
  17.   sc_in    <bool> oe_1  ;  
  18.   sc_inout_rv <DATA_WIDTH> data_0;  
  19.   sc_inout_rv <DATA_WIDTH> data_1;  
  20.  
  21.   //-----------Internal variables-------------------  
  22.   sc_uint <DATA_WIDTH> mem [RAM_DEPTH];  
  23.  
  24.   //-----------Methods------------------------------  
  25.   void  READ_0 ();  
  26.   void  READ_1 ();  
  27.   void  WRITE_0 ();  
  28.   void  WRITE_1 ();  
  29.  
  30.   //-----------Constructor--------------------------  
  31.   SC_CTOR(ram_dp_ar_aw) {  
  32.     SC_METHOD (READ_0);  
  33.       sensitive << address_0 << cs_0 << we_0 << oe_0;  
  34.     SC_METHOD (READ_1);  
  35.       sensitive << address_1 << cs_1 << we_1 << oe_1;  
  36.     SC_METHOD (WRITE_0);  
  37.       sensitive << address_0 << cs_0 << we_0 << data_0;  
  38.     SC_METHOD (WRITE_1);  
  39.       sensitive << address_1 << cs_1 << we_1 << data_1;  
  40.   }  
  41. };  
  42. #endif  
  43. cpp:  
  44. #include "ram_dp_ar_aw.h"  
  45.  
  46. void  ram_dp_ar_aw::READ_0 () {  
  47.   if (cs_0.read() && oe_0.read() && !we_0.read()) {  
  48.     data_0 = mem[address_0.read()];  
  49.   }  
  50. }  
  51.  
  52. void  ram_dp_ar_aw::READ_1 () {  
  53.   if (cs_1.read() && oe_1.read() && !we_1.read()) {  
  54.     data_1 = mem[address_1.read()];  
  55.   }  
  56. }  
  57.  
  58. void  ram_dp_ar_aw::WRITE_0 () {  
  59.   if (cs_0.read() && we_0.read()) {  
  60.     mem[address_0.read()] = data_0.read();  
  61.   }   
  62. }  
  63.  
  64. void  ram_dp_ar_aw::WRITE_1 () {  
  65.   if (cs_1.read() && we_1.read()) {  
  66.     mem[address_1.read()] = data_1.read();  
  67.   }   

 

 

(责任编辑:admin)

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容