ARM内核ALU Verilog代码分析:自顶向下与自底向上设计.pdfVIP

  • 0
  • 0
  • 约6.86万字
  • 约 39页
  • 2026-02-06 发布于北京
  • 举报

ARM内核ALU Verilog代码分析:自顶向下与自底向上设计.pdf

ARM内核的ALU代码(verilog)分析

本文分析的是一份从网上down下来的ARM内核ALU的代码(verilog),

该代码可以完成加、减、反向减、带进位加等16条指令。

整个ALU代码分3部分组成,分别写在3个verilog源代码文件里,各部分

的作用如下:

1.ALU_ARM.v:ALU的部分,控制并执算;

2.components.v:原件部分,实现ALU底层的门电路,包括累加器(ADDER)、多路复用器

(multi)、或门(ORE)、与门(ANDE)、非门(NOTE)、异或门(XORE)、

BIC阵列(BICE)、32位扩展(EXTEND)、1位0扩展(ZERO_EXTEND)。

3.shift.v:桶形移位器

4.lpm_add.v:加法器

本文将先用自顶而下的方式来分析ALU的设计思想,再用自底而上的方式来具体讨论电

路模型的verilog代码实现。

_

ALUARM.v中的模型

该文件定义了ALU最的运算部分,其他文件都是为该文件定义的子

模块。

模块ALU_ARM(输入[31:0]dataIN_A,输入[31:0]dataIN_B,输入[3:0]ALUop,

输入[7:0]shiftCtr,输入扩展,输入c,输出[31:

0]结果,输出小于,输出零,输出溢出,输出进位);

_

这个模型是ALUARM的最主要的部分,相当于C语言中的main()函数,

各个子模块都会在主模块里被实例化。

dataI__

NA、dataINB分别为两个输入。ALUop作为输入,是

ALU运作的4位的机器指令码,它控制了ALU要进行什么运算。ShiftCtr为

桶形移位器控制符,在shift.v文件中会看到它的应用。extend用于控制扩展,

也是在桶形移位器中使用的。输入c是进位标识符。Result是输出的运算结果,

s表示的是向低位的借位标志符,Zero表示的是判断加法结果是否为0,

Overflow表示的是溢出标记,Carry是输出进位标志符。

modu出小于,输出零,输出溢出,输出进位);

leALU(输入[31:0],输出[31:0]dataIN_A结果,,输入输[31:0]dataIN_B,输入c,输入[3:0]ALUop

这个模块是ALU中的计算模块,里面会实例化许多component中的门

电路,用来实现ALU中的所有运算过程。

__

各输入输出的定义同ALUARM,在ALUARM中也是通过实例化

ALU模块来运算的。

模块ALU_Ctrl(输入[3:0]ALUop,输出[2:0]ALUctr);

控制运算模块,在moduleALU中被实例化,输出ALUctr是用来控制

ALU模块的输出值的。由于ALU模块加、减等各种基本运算是并行进行的,

同时得到所有运算的结果,因此需要一个ALUctr控制多路复用器来选择所需

的运算结果。

module输入多路复用器(输入[31:0]dataIN_A,输入[31:0]dataIN_B,输入[3:0]ALUop,

outputreg[31:0]wireA,outputreg[31:0]wireB);

输入多路复用器,选择性输入信号。作用是根据ALUop的值,选择

__

性地将dataINA、dataINB输出到wireA和wireB中,方便后续的运算。

Component.v中的模型

模块加法器(输入[31:0]dataIN_A,输入[31:0]dataIN_B,输入Cin,输出[31:0]

result,输出Carry_f,输出寄存器Zero,输出

溢出,

ALU_

文档评论(0)

1亿VIP精品文档

相关文档