使用Vivado合成SystemC不会提供所需的VHDL信号

时间:2015-10-16 09:54:45

标签: synthesis systemc vivado register-transfer-level

我正在写一个项目是systemC,我有几个2015-06-30 23:59:59sc_in<bool>在我的模块之间进行通信。当我合成项目时,在生成的vhdl代码中,每个sc_out<bool>sc_in都会创建一个这样的信号块:

sc_out

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

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);

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

sc_in<bool>

我收到以下消息:

  

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

如果我指定这样的值:

sc_bit asdf = 0;

我收到以下消息:

  

../../../../ source.cpp:68:14:错误:不匹配'operator ='in   '((source *)this) - &gt; source :: asdf ='0''

有没有其他方法可以在SystemC中声明I / O信号,以便在合成后我只能在VHDL中有1个sc_bit asdf = '0'; 信号?

测试平台中源代码的std_logic就像这样

头文件:

SC_MODULE

cpp文件:

# 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       

0 个答案:

没有答案