SystemC中的绑定
端口与信号的连接,以及端口到端口的直接连接在在Syst中都称作绑定。绑定方法分为位置关联和名字关联。位置关联是一种隐含关联,节省代码但是在设计较为复杂时容易出错;而名字是一种显式关联,代码量多但是能够保证正确性。在实际设计中,更多的使用名字关联。
下面讲述这两种关联的具体用法。
顾名思义,名字关联就是让端口和信号的名字一一对应来,比如_slave_if->wr_en(sram_wr_en)就是将pwb_slave_if的端口wr_en与信号sram_wr_en连接在一起。使用名字关联,设计者可以任意顺序的创建信号和端口间的连接而不会产生错误。
在位置关联中,所有端口都是按照声明的顺序位置进行一一对应的。如下面的例子:
- SC_CTOR(wb_sram)
- {
- pwb_slave_if = new wb_slave_if("wb_slave_if");
- assert(pwb_slave_if);
- psram = new sram6("sram");
- assert(psram);
- (*pwb_slave_if)(clk_i,stb_i,rst_i,cyc_i,we_i,ack_o,adr_i,dat_i,
- dat_o,sram_wr_en,dat_wb_to_sram,sram_addr,dat_sram_to_wb);
- (*psram)(clk_i,sram_wr_en,dat_wb_to_sram,sram_addr,dat_sram_to_wb);
- };
- ~wb_sram()
- {
- if(pwb_slave_if) delete pwb_slave_if;
- if(psram) delete psram;
- }
- };
在位置关联中在已经初始化的模块的关联里每一个信号都有一个相匹配的端口。在关联表中的第一个信号对应第一个端口,第二个信号对应第二个端口,以次类推。