背景:裸数据的封装,通过PCIE通道传输,需要进行封装和提取。
白话思路:分别开启模块的使能信号,使用状态机控制其使能的开启,随着地址增加,输出参数值。
遇到的几个问题:
(1)PN16程序设置使能开启接口(ena_1),ROM自带使能开启接口;
(2)状态机的控制信号:地址控制使能的开启;
(3)使能信号总是需要提前开启,延迟一拍关闭;
(4)第三个模块,在第一个和第二个模块发送一遍之后,第三个模块循环发送1000次。
(4)设置三个状态的话,第一个状态ena_0开启,其他关闭,第二个状态 ena_1开启,其他关闭,第三个状态ena_2开启,其他关闭。地址为127时跳转。这样的话,从第二个模块相比,每次 都会丢掉第一个数据。
几点总结:
代码编辑相关的总结:(1)模块连接不要怕,正常按照规则连接即可,注意变量类型,以及变量是输入还是输出信号。核心:需要用wire将模块中的信号引到reg中。
此次编辑的过程中, 驱动信号错设置为了输出,所以一直报错,与信号的类型无关。
状态增加时,参数的位宽也要跟着增加。
针对使能提前开启,延迟关闭的特性,将第二个模块的使能信号提前一个clk,将重合的状态重新设置为一个状态。
将重合部分单独设置一个新的状态。 第一模块和第二各模块,重叠部分,第二和第三个模块重叠部分。增加两个状态。
错误误区:将三个模块全部连接到一个wire [15:0] q上,想着三个值轮流通过这个参数输出,结果验证不正确,分别使用q_0,q_1,q_2,连接。然后再输出即可。
最后一个问题
最后一步将wire类型的q_0,q_1,q_2,复制到寄存器中,由于又是赋值到寄存器中,又会延迟一拍,搞了三个小时才搞出来,搞得难受了。之前再使能开启时也同时赋值给DATAOUT,但是使能的开启和关闭并不能直接使用。总是丢掉一个数据,最后调试时,发现不能直接使用ena_0,ena_1,ena_2,作为使能,需要将其都打一拍,然后,将其作为DATAOUT输出的判断条件。
总结:PN16伪随机码的一个clk内产生16bit随机码;状态机控制不同模块的输出以控制不同模块的输出顺序和次数;确定状态机的控制参数;使能开启之后的数据输出延迟,需要提前开启下一模块的使能信号的处理;三个模块输出之后,将其放入到一个寄存器中,作为一个接口;
标签:ena,使能,AOC,一帧,输出,开启,信号,模块,数据 From: https://blog.csdn.net/sunsheets/article/details/143171091