大家好:我是毛华望。目前在参加紫光同创PGL22G开发平台试用。连载第6篇。
在第三篇里,不进行modelsim仿真了,而是直接上板在线逻辑分析仪去完成的原因,是因为我使用modelsim的仿真能力有限。通信模块串口已经验证可以了,边缘检测模块也可以了。剩下的内容就是一个存储数据和控制数据了,内容相对来说不难。感觉问题不大。最好的仿真其实是应该在tb.v文件里面写入sobel数据的,然后在读回来,进行整套仿真的。当然凭能力的了。我只会局部仿真一下。
程序部分的整体流程。首先串口的数据进来,模块已经写好了。数据缓存就是一个ram存储器。同样的数据缓存2也是一个ram缓存区。 Sobel已经仿真验证过了。目前就剩下控制单元来调度数据和控制指令了。
仿真的时候有看到,3行,计算出一行的结果。所以,用串口调试工具,发3行图像数据,然后让串口回1行结果。最后在拼接起来形成一张整图。
第一部分:程序篇。
前面已经把主要模块的内容都写完了。现在就是要把模块连接起来完成功能。
主要模块的内容呢?? 4个存储单元。 RAM256X8 。
Sobel 计算单元 compute。
Rx 和tx
这4个存储器中。 第1个,存入上一行视频数据。 第 2个,存入当前行数据。 第 3个存入下一行数据。 第4个,存入输出数据。 就是因为这样的结构,所以,再用串口传送数据的时候,一定要按照要求存入数据才行。必须是前一行, 当前行,下一行。不是直接发送就可以了的。
这是框图“数据缓存RAM”,双端口 RAM,用了3个。
这里是框图的“sobel计算单元”。连接上。
这里就是框图中的,“数据缓存RAM 2”
这里是框图 “控制单元”。我没有单独写一个模块,直接在顶层写的控制状态机。
我这里用了8个状态机去完成。
分别是写入状态0前一行数据200个, 状态1写入当前行数据200个,状态2写入后一行数据200个。状态3,sobel计算。 状态4,读前一行数据, 状态5,读当前行数据。状态6,读后一行数据。 状态7,tx返回计算结果。
状态0. 写入前一行数据。 写地址增加, rx来的数据写入存储器。 打开使能。
写入到200的时候。换状态机,写当前行。
状态1,内容是一样的。只是写入的是当前行。 地址,数据和使能换到当前行存储器。
状态2,差不多一样的。
状态3是把sobel计算完的结果,写入到存储器里。
写地址增加,打开写使能。
状态4,5,6. 内容是一样的。
读地址加1, 打开读使能。 轮着打开不同的存储器。
状态机7, tx发送给上位机。
第二部分:matlab篇。
略:
第三部分: modelsim仿真
略:
边缘检测三部曲就这样完成了。再会。