Synthesis 用Vivado和x27合成SystemC;不能给出所需的VHDL信号
我正在写一个名为systemC的项目,我有两个Synthesis 用Vivado和x27合成SystemC;不能给出所需的VHDL信号,synthesis,systemc,vivado,register-transfer-level,Synthesis,Systemc,Vivado,Register Transfer Level,我正在写一个名为systemC的项目,我有两个sc_-in和sc_-out模块之间进行通信。当我综合该项目时,在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
sc_-in
和sc_-out
模块之间进行通信。当我综合该项目时,在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);
valid_in : IN STD_LOGIC
sc_bit asdf = 0;
sc_bit asdf = '0';
这对于我的硬件设计来说太复杂了,因为我只想声明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
sc_bit asdf = 0;
sc_bit asdf = '0';
将变量声明为sc_位
,我对生成的VHDL没有问题,但在我尝试在信号中使用sc_in
而不是sc_in
来在模块之间进行通信后,项目不再编译。如果我这样赋值:
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
sc_bit asdf = 0;
sc_bit asdf = '0';
我得到以下信息:
../../../source.cpp:67:16:错误:从“int”转换为
已请求非标量类型“sc_dt::sc_位”
如果我这样赋值:
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
sc_bit asdf = 0;
sc_bit asdf = '0';
我得到以下信息:
../../../source.cpp:68:14:错误:中的“operator=”不匹配
“((source*)this)->source::asdf='0”
有没有其他方法可以在SystemC中声明I/O信号,以便在合成后,VHDL中只有1std_逻辑
信号
测试台中源代码的SC_模块
如下所示
头文件:
# 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
这是一个内存类型的接口……你能分享你的SC_模块吗?@如果我知道它是一个内存类型的接口,但我不希望它是那样的。@vermaete如果你需要任何其他信息,请毫不犹豫地问meSorry没有Vivados C到Vhdl的经验。仅使用cadences选项,您必须明确指出什么时候是记忆。当然有一些简单的例子,你可以从这个工具开始。。。