我正在写一个项目是systemC,我有几个sc_in<bool>
和sc_out<bool>
我的模块之间的通信。当我合成项目时,在 vhdl 代码中生成每个sc_in
并sc_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
}
}