卷积计算的verilog 实现

卷积计算的verilog 实现_第1张图片

目录

1.问题分析
2.工作框图
3.工作方式
4.数据选取
5.文件说明
6.端口说明
7.工作说明
8.仿真说明
9.仿真结果
1)波形
2)Transcript
10.Matlab 验证

1. 问题分析

构造一个3 * 3的卷积核,并利用该卷积核完成与6*6矩阵的卷积运算,数据位宽8bit补码数, 结果位宽20bit补码数

卷积的基本过程如下:

对卷积核进行180度翻转(数据读写顺序的调度)将33卷积核的中心对准66矩阵的每个数进行对应数据乘累加得出结果,如此往复作业给出实现结构以及RTL代码

ModelSim SE10.1a

Matlab R2010a

输入数据补码8bit,实际有效7bit,输出数据补码20bit,实际有效19bit,卷积增加位数3*3=9,所以单个乘法最多增加19-7-9=3bit。所以卷积核采用3bit数,即4bit补码数。

2. 工作框图

卷积计算的verilog 实现_第2张图片

卷积计算的verilog 实现_第3张图片

3. 工作方式

系统内置3*3的4bit补码数的卷积核
在这里插入图片描述

外部输入6*6的8bit补码数
卷积计算的verilog 实现_第4张图片

工作过程:系统将反转后的卷积核与上图某一深色数据和其周围一圈进行相乘并相加。直到所有深色部分均进行过卷积操作。

举例如下,对应第一个要进行卷积操作的数D22
卷积计算的verilog 实现_第5张图片

O22= D11*C33 + D12*C32 + D13*C31输出数据为:
   + D21*C23 + D22*C22 + D23*C21
   + D31*C13 + D32*C12 + D33*C11

4. 数据选取

卷积核固定选取为:
在这里插入图片描述

输入数据为:(Data_input.txt 有符号16进制)
卷积计算的verilog 实现_第6张图片

转换成10进制
卷积计算的verilog 实现_第7张图片

5. 文件说明

在这里插入图片描述

6. 端口说明

卷积计算的verilog 实现_第8张图片

7. 工作说明

每次启动后TB读取要卷积的数据,并将此数据传输给CONV,每次传输一个数据即8bit
CONV接收完数据后开始卷积
卷积结束后把数据传输给TB,每次传输一个数据即20bit
卷积计算的verilog 实现_第9张图片

8. 仿真说明

在仿真前Transcript中命令:do wave.do加载预设波形
输出结果在Transcript中查看

9. 仿真结果

  1. 波形

  2. Transcript
    卷积计算的verilog 实现_第10张图片

10. Matlab 验证

Matlab验证结果(Matlab_Verify.m)
卷积计算的verilog 实现_第11张图片

与verilog输出吻合

你可能感兴趣的:(数字IC设计)