2

我正在写一个项目是systemC,我有几个sc_in<bool>sc_out<bool>我的模块之间的通信。当我合成项目时,在 vhdl 代码中生成每个sc_insc_out创建如下信号块:

valid_in_address0 : OUT STD_LOGIC_VECTOR (2 downto 0);
valid_in_ce0 : OUT STD_LOGIC;
valid_in_we0 : OUT STD_LOGIC;
valid_in_d0 : OUT STD_LOGIC_VECTOR (0 downto 0);
valid_in_q0 : IN STD_LOGIC_VECTOR (0 downto 0);
valid_in_address1 : OUT STD_LOGIC_VECTOR (2 downto 0);
valid_in_ce1 : OUT STD_LOGIC;
valid_in_we1 : OUT STD_LOGIC;
valid_in_d1 : OUT STD_LOGIC_VECTOR (0 downto 0);
valid_in_q1 : IN STD_LOGIC_VECTOR (0 downto 0);

这对于我的硬件设计来说太复杂了,因为我只想像这样声明 1 个信号:

valid_in : IN STD_LOGIC

将变量声明为sc_bit,我对生成的 VHDL 没有任何问题,但是在我尝试在我的信号中使用sc_in<sc_bit>而不是sc_in<bool>在模块之间进行通信之后,项目不再编译。如果我分配这样的值:

sc_bit asdf = 0;

我收到以下消息:

../../../../source.cpp:67:16:错误:请求从“int”转换为非标量类型“sc_dt::sc_bit”

如果我分配这样的值:

sc_bit asdf = '0';

我收到以下消息:

../../../../source.cpp:68:14: 错误: '((source*)this)->source::asdf = '0'' 中的 'operator=' 不匹配

有没有其他方法可以在 SystemC 中声明 I/O 信号,以便在综合后我std_logic在 VHDL 中只有 1 个信号?

测试台中的SC_MODULE源代码是这样的

头文件:

# ifndef SOURCE_H  
# define SOURCE_H  
# include "systemc.h"

using namespace std;

SC_MODULE(source) {    
    sc_in_clk clk;       
    sc_out<sc_bit > valid_out;           
    void do_cycle();       

    SC_CTOR(source) {        
    {       
        //irrelevant initializations
    }            

    SC_THREAD(do_cycle) {
        //i know sc_thread is unsynthesizable but source is testbench     
        //and i need the signal to be sc_out<sc_bit> to give it as            
        //input in my top function to be synthesized              
    }      
};          
#endif //SOURCE_H       

cpp文件:

#include "source.h"          

void source::do_cycle() {          
    valid_out = '0';         
    while(true) {         
        wait(clk.posedge_event());       
    //do different kind of stuff         
    }   
}       
4

0 回答 0