提交 bb7d033b 编写于 作者: 饶先宏's avatar 饶先宏

202108130608

上级 9d7d3711
......@@ -121,9 +121,10 @@ DEFINE_FUNC(cncell_coeffbuf_gen_info, "") {
} END_DEFINE_FUNC
DEFINE_FUNC(cncell_coeffbuf_gen_CoeffRead, "read") {
vput(wCoeffReadValid, 1);
vput(wCoeffReadValid, 0);
if (vget(read)) {
vput(bCoeffReadData, *(unsigned int*)&(pobj->databuf[vget(readaddr)]));
vput(wCoeffReadValid, 1);
}
} END_DEFINE_FUNC
......
......@@ -106,6 +106,14 @@ int main(int argc, char* argv[])
objectCall2(vcdfile, AddSignal, "/top/net/convolution_13", "writeline");
objectCall2(vcdfile, AddSignal, "/top/net/convolution_13", "readline");
objectCall2(vcdfile, AddSignal, "/top/net/convolution_13", "lineindex");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "wCoeffRead");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "wCoeffReadValid");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "bCoeffReadAddr");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "bCoeffReadData");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "bCoeffOffset");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "read");
objectCall2(vcdfile, AddSignal, "/top/net/coeffbuf_13", "readaddr");
objectCall1(vcdfile, SetTopModule, topmodule);
objectCall0(vcdfile, StartRecord);
......@@ -121,12 +129,12 @@ int main(int argc, char* argv[])
if (clocks == 2)
objectCall1(sim, SetReset, 1);
clocks++;
if ((clocks & 0x3FFF) == 0) {
if ((clocks & 0xFFFF) == 0) {
time_t thistime = time(NULL);
printf("clocks: %lld, TSPD=%lfcps, LSPD=%lfcps\n",
clocks,
(double)clocks / (double)(thistime - starttime),
4096.0 * 4 / (double)(thistime - lasttime));
4096.0 * 16 / (double)(thistime - lasttime));
lasttime = time(NULL);
}
} while (running);
......
......@@ -91,7 +91,10 @@ typedef struct _sGeneralModule {
MODULE_FUNC init_func;
MODULE_FUNC deinit_func;
THREADLOCK lock;
void* pobj;
const char* clktick_depend;
void* pobj;
void* priv_data;
void* func_param;
int canruninthread;
......@@ -116,6 +119,7 @@ typedef struct sModuleVariable {
sGeneralModule *moduledata;
IHDL4SEModuleVar* module;
int moduleportindex;
char* depend_list;
PointerArray functions; /* 依赖它的函数 */
PointerArray variables; /* 依赖它的变量 */
int updatedisset;
......@@ -296,6 +300,7 @@ int hdl4se_module_Valid(sGeneralModule* pobj);
int hdl4se_module_GetName(sGeneralModule* pobj, const char** pname);
int hdl4se_module_ConnectInput(sGeneralModule* pobj, int index, HOBJECT from, int fromindex);
int hdl4se_module_GetValue(sGeneralModule* pobj, int index, int width, ModuleVariable* value);
int hdl4se_module_InitDepend(sGeneralModule * pobj);
int hdl4se_module_ClkTick(sGeneralModule* pobj);
int hdl4se_module_Setup(sGeneralModule* pobj);
int hdl4se_module_AddPort(sGeneralModule* pobj, const char* name, int width, int isunsigned, int portdirect);
......@@ -390,6 +395,7 @@ static int M_ID(Create)(const PARAMITEM* pParams, int paramcount, HOBJECT* pObje
#define END_MODULE_INIT(module_name) \
hdl4se_module_InitDepend(pobj->pmodule); \
return EIID_OK; \
} \
\
......@@ -426,6 +432,7 @@ static int M_ID(_module_init)(sGeneralModule* pdata) {\
pobj->pmodule = pdata; \
#define END_GEN_MODULE_INIT \
hdl4se_module_InitDepend(pdata); \
return EIID_OK; \
} \
\
......@@ -528,7 +535,12 @@ do { \
} while (0)
#define SETUP_FUNC(func) pobj->pmodule->setup_func = func
#define CLKTICK_FUNC(func) pobj->pmodule->clktick_func = func
#define CLKTICK_FUNC(func) \
do { \
pobj->pmodule->clktick_func = func; \
pobj->pmodule->clktick_depend = STRDUP(__##func##_depend_list); \
}while (0)
#define DEINIT_FUNC(func) pobj->pmodule->deinit_func = func
#define INIT_FUNC(func) pobj->pmodule->init_func = func
......
......@@ -479,6 +479,7 @@ int hdl4se_module_Init(sGeneralModule* pobj, void* obj, const PARAMITEM* pParams
pointerarrayInit(&pobj->funcs);
pobj->pobj = obj;
pobj->name = NULL;
pobj->clktick_depend = NULL;
pobj->parent = NULL;
pobj->func_param = obj;
pobj->setup_func = NULL;
......@@ -517,6 +518,8 @@ void hdl4se_module_DeInit(sGeneralModule* pobj)
{
if (pobj->name != NULL)
mt_free(pobj->name);
if (pobj->clktick_depend != NULL)
free(pobj->clktick_depend);
pointerarrayDestroy(&pobj->variables, variableDestroy);
pointerarrayDestroy(&pobj->modules, objRelease);
pointerarrayDestroy(&pobj->parameters, mt_free);
......@@ -858,13 +861,20 @@ long long hdl4seGetParam(PointerArray* list, int index)
return varGet_S64(temp);
}
static int hdl4se_set_depend_variable(ModuleVariable* v, ModuleVariable* depend);
int hdl4se_set_depend_variables(ModuleVariable* v, const char* depend_list)
{
v->depend_list = STRDUP(depend_list);
return 0;
}
static int hdl4se_set_depend_variable(ModuleVariable* v, ModuleVariable* depend);
static int hdl4se_set_depend_variable_list(ModuleVariable* v)
{
const char* token;
if (v == NULL)
return -1;
token = strtok(depend_list, ", ");
if (v->depend_list == NULL)
return -2;
token = strtok(v->depend_list, ", ");
while (token != NULL) {
int i;
for (i = 0; i < v->moduledata->variables.itemcount; i++) {
......@@ -881,6 +891,18 @@ int hdl4se_set_depend_variables(ModuleVariable* v, const char* depend_list)
return 0;
}
int hdl4se_module_InitDepend(sGeneralModule* pobj)
{
int i;
for (i = 0; i < pobj->variables.itemcount; i++) {
ModuleVariable* d = (ModuleVariable*)pobj->variables.array[i];
if (d == NULL)
continue;
hdl4se_set_depend_variable_list(d);
}
return 0;
}
int hdl4se_setgen_func_by_index(sGeneralModule* pobj, int index, MODULE_FUNC func)
{
ModuleVariable* var = (ModuleVariable*)pobj->variables.array[index];
......
......@@ -67,6 +67,7 @@ ModuleVariable* variableCreate(int type, int width, int portdirect, int isunsign
return NULL;
}
strcpy(var->name, name);
var->depend_list = NULL;
var->moduledata = NULL;
var->genfuncindex = -1;
var->module = NULL;
......@@ -101,6 +102,8 @@ int variableDestroy(ModuleVariable* var)
objectRelease(var->data);
objectRelease(var->data_reg);
#endif
if (var->depend_list != NULL)
free(var->depend_list);
var->data = 0;
mt_free(var);
return 0;
......
......@@ -133,7 +133,7 @@ static int hdl4sesimCreate(const PARAMITEM* pParams, int paramcount, HOBJECT* pO
REG(reset, 1);
GEN_FUNC("wClk", hdl4sesim_gen_wClk);
GEN_FUNC("nwReset", hdl4sesim_gen_nwReset);
hdl4se_module_InitDepend(pobj->pmodule);
vartempInit();
crtinit();
......@@ -238,7 +238,7 @@ static int hdl4sesim_hdl4se_simulator_SetReset(HOBJECT object, int reset)
return 0;
}
#define THREADCOUNT 3
#define THREADCOUNT 9
static int hdl4sesim_hdl4se_simulator_ClkTick(HOBJECT object)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册