我正在写一个项目是systemC,我有几个2015-06-30 23:59:59
和sc_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