基于Verilog的下三角矩阵求逆设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Verilog的下三角矩阵求逆设计与实现
杨丰瑞1,熊军洲2
(1.重庆重邮信科(集团)股份有限公司重庆400065)
(2.重庆邮电大学通信与信息工程学院重庆400065)
摘要:矩阵运算广泛应用于各类电路计算中,矩阵运算的硬件实现能够充分发挥硬件的速度和并行性,其中矩阵求逆是矩阵运算中重要的运算。根据矩阵求逆算法的基本思想,本文提出了一种最大阶数可达16×16的矩阵求逆方案,通过硬件描述语言Verilog建模,用Design Compile进行综合及进行modelsim仿真,仿真结果表明这种设计结构能够正确的计算出下三角矩阵的逆矩阵。
关键词:矩阵求逆,Verilog, 实现
【中图分类号】TN492 【文献标识码】A
Design and Implementation of Inverse Down Triangle Matrix Calculation Based on Verilog
Yang Fengrui1,Xiong Junzhou2
(1.Chongqing Chongyou Information Technolog (Group)CO.,LTD.Chongqing)
(2.Chongqing University Of Post and Telecommunications
School Of Communication and Information Engineering,Chongqing) Abstract: Matrix operation is widely used in different kinds of circuit calculation. Hardware implementation of matrix operation can fully realize the speed and parallel of the hardware. Matrix inversion is a kind of very important matrix operation. According to the algorithm of inverse matrix calculation ,this article gives a design on inverse matrix which can reach a biggest rand of 16×16.The system is described in Verilog, which is compiled by Design Compile and verified in modelsim. The result shows that this design structure can be used for inverse matrix calculation.
Key words: inverse matrix; Verilog; implementation
1 引言
矩阵运算是数字信号处理领域的基本操作,广泛应用于各类电路计算当中。而矩阵求逆的难点在于矩阵求逆。目前传统的矩阵求逆算法多用处理器串行计算来实现,严重制约着计算速度的提高。为此,作者在研究并行处理结构和并行算法[1~2]的基础上,试图寻求一种适合硬件实现的求逆算法及其硬件结构。此外,在专用集成电路设计方面我国起步较晚,在矩阵求逆的硬件实现方面的研究还不多。随着集成电路制造工艺的提高,采用大量超大规模集成单元和微处理器构成多处理器并行系统已经成为提高计算速度的有效手段。因而,矩阵求逆算法的研究实现有着十分重要的意义。由于可逆矩阵都可以通过LU分解分成一个上三角矩阵和一个下三角矩阵[3],而要求的原矩阵的逆可以通过这两个三角矩阵的逆相乘得到[4],所以本文主要探讨的是下三角矩阵求逆的硬件实现。
2 算法介绍
假设以下矩阵A 为原矩阵,1-A 是A 的逆矩阵,n 是A 的维数。则: 11
0...001 (00)
0 (00)
0...1E A A -==⨯11112122212212120...00...0...0...0..............................n n nn n n nn a b a a b b a a a b b b =⨯ 由矩阵的乘法可知:
,,,()i i j i k k j k j
c a b ==*∑ (j<=i )
而:0,=j i c (j i ≠); 1,=j i c ( j i = )
根椐以上可知,可首先得到一些初始值:i i i i a b ,,/1= (i=1,2,…,n)
然后可得出计算1
-A 其他值的递推公式: ∑-=*-=1
,,,,)(1i j k j k k i i i j i b a a b =1,,,()i i i i k k j k j b a b -=-*∑(i=1,2,…,n ; j=1,2….,i -1) 3 硬件实现
3.1 总体设计结构
本文所设计的矩阵求逆算法模块(matrix_top )共分为:接口模块(regif ),控
制模块(ctrl),地址产生模块(addrgen),运算处理模块(proc ),和存储器模块(mem )。其中存储器模块包括输入存储器模块(inbuf )和输出存储器模块(outbuf )。总体结构图如图1所示:
图1 总体结构图
3.2 模块介绍
3.2.1接口模块(regif)
与外部的ZSP总线相连实现接口功能,数据通过接口模块写入到输入存储器或是控制寄存器中,当zio_sel为高电平时,写入数据到输入寄存器中,当zio_sel 为低电平时,写入数据到控制寄存器中,控制寄存器指示矩阵的维数和启动信号;当运算完成,数据都存放到输出寄存器后,此接口模块产生一个中断,通知ZSP从输出存储器(outbuf)中读出数据。
3.2.2控制模块(ctrl)
为一个状态数为5的有限状态机,产生整个运算状态信息,控制运算的进行。如图2所示
图2 ctrl模块中状态机示意图
当处于IDLE(即空闲)状态时,表示运算还未开始或是运算结束,此时finish信号为零。一旦接收到来自接口模块的启动运算信号时,即转为CHECK状态,CHECK状态用于对原矩阵对角线上的数据求倒数,并找出最大值,根据所求的最大值计算出矩阵归一化时的移位个数,当求得此归一化的移位个数时,即转为DIAG状态。DIAG状态表示对原矩阵对角线上的数据进行求倒运算,并根据归一化的移动个数进行截位,此运算完成后,即转为OTHER 状态,根据前面所述原理计算非对角线上的数据,全部数据运算完毕后,发出一个finish 信号,并转入FINISH状态。FINISH状态根据信号finish的反馈信号,对finish信号进行清零,并转入到下一个状态,即IDLE状态。
3.2.3地址产生模块(addrgen)
该模块主要用于产生读写数据的地址。当处于CHECK和DIAG两个状态时,该模块产生原矩阵对角线上的地址和逆矩阵对角线的地址。当处于计算非对角线的数据时,该模块根据矩阵在存储器中存放的位置(矩阵数据在存储器中按行存放)及计算原理,依次计算时原矩阵和逆矩阵的读地址和逆矩阵的写数据地址。
3.2.4处理模块(proc)
对矩阵进行求逆运算,从输入存储器中读取原矩阵的信息,求逆后将所得的结果数据存