状态机链模型图
一、状态机链模型图上图为两个状态机模块级联模型。二、状态机级联模型代码结构void fsm_top(ap_uint8 din,ap_uint8 *dout){#pragma HLS DATAFLOW#pragma HLS INTERFACE ap_ctrl_none portreturn#pragma HLS INTERFACE ap_ovld portdoutap_uint8 temp1,temp2;fsm_sub1(din,temp2,temp1);//module1fsm_sub2(temp1,temp1,temp2);//module2*dout temp2;}templateint IDvoid fsm_sub(ap_uint8 din0,ap_uint8 din1,ap_uint8 *dout){#pragma HLS INLINE offstatic ap_uint8 Latch 0;//down-module*dout din0 Latch;//up-moduleLatch Latch din1;}注意上述代码中第一个module需要拿到tmp2这个变量这个变量是第二个module产生的由于两个函数有依赖所以是阻塞执行的那么造成第一个函数没办法拿到第二个函数产生的tmp2所以上述代码是没有办法实现top_ordering的框架功能的。三、正确的做法class fsm_class{public:ap_uint8 Latch;//锁存器fsm_class(){//构造函数Latch 1;}void fsm_sub_lower(ap_uint8 din0,ap_uint8 *dout){*dout Latch*din0;}void fsm_sub_upper(ap_uint8 din1){Latch Latch din1;}};void fsm_top(ap_uint8 din,ap_uint8 *dout){#pragma HLS INTERFACE ap_ctrl_none portreturn#pragma HLS INTERFACE ap_ovld portdoutstatic fsm_class fsm_module1,fsm_module2;//类的实例化ap_uint8 temp1,temp2;fsm_module1.fsm_sub_lower(din,temp1);fsm_module2.fsm_sub_lower(temp1,temp2);*dout temp2;fsm_module1.fsm_sub_upper(temp2);fsm_module2.fsm_sub_upper(temp1);}