基于FPGA的CPU的ALU数据通路设计Verilog代码VIVADO仿真

名称:基于FPGA的CPU的ALU数据通路设计Verilog代码VIVADO仿真(文末获取)

软件:VIVADO

语言:Verilog

代码功能:

CPU的ALU数据通路设计.docx

ALU数据通路

一、分析

1.ALU模块(alu8.v)的控制信号:

综合考虑,确定ALU输入输出信号如下:

方向

信号名

说明

输入

a[7:0]

操作数1

输入

b[7:0]

操作数2

输入

alusel[3:0]

运算功能选择。实验任务1要求设计加/减法器电路,实验任务2要设计具有13个功能的ALU模块。所以,确定该信号位宽位4bits。

输出

y[7:0]

运算结果

输出

zf

0标志。运算结果=0时,zf=1;否则,zf=0

输出

cy

进位标志。运算结果有进位或借位时,cy=1;否则,cy=0。仅用于算术运算。

输出

of

溢出标志。运算结果溢出时,of=1;否则,of=0。仅用于算术运算。

输出

nf

负数标志。运算结果为负时,nf=1;否则,nf=0。仅用于算术运算。

2. 输入/输出缓冲器(threeStBuff.v)模块的控制信号:

综合考虑,确定输入/输出缓冲器的输入输出信号如下:

方向

信号名

说明

输入

DataIn[7:0]

输入数据

输入

nDataToBus

输入控制,nDataToBus=0时,缓冲器打开;否则输出端为高阻态。

输出

DataOut[7:0]

输出数据,三态

本次实验的输入缓冲和ALU的输出缓冲采用此模块。

3. 寄存器(不带输出控制)(dr.v)模块的控制信号:

综合考虑,确定寄存器(不带输出控制)的输入输出信号如下:

方向

信号名

说明

输入

d[7:0]

输入数据

输入

lddr

输入数据锁存信号。上升沿时刻,输入存入。

输入

clrn

输入控制。clrn =0时,寄存器复位,即输出q[7:0]为0。

输出

q[7:0]

输出数据

本次实验的DR1和DR2采用此模块。

4. 三态缓冲寄存器(register.v)模块的控制信号:

综合考虑,确定寄存器(不带输出控制)的输入输出信号如下:

方向

信号名

说明

输入

DataIn[7:0]

输入数据

输入

ldreg

输入数据锁存信号。上升沿时刻,输入存入。

输入

nDataToBus

输入控制,nDataToBus=0时,寄存器锁存的值输出;否则输出端为高阻态。

输出

DataOut[7:0]

输出数据

本次实验的R0,R1,R2和R3采用此模块。

请参考下列源文件,设计具有上述功能的电路模块。

(1)修改参考文件alu8.v的内容,分别实现实验任务1和实验任务2的要求。

(2)参考dr.v和threeStBuff.v,设计三态缓冲寄存器模块。

(3)根据实验指导书电路原理图要求,参考下图所示电路,设计本次实验的顶层模块。

(4)参考alu_dataPath_sim.v,编写测试文件,分别仿真测试各电路模块以及顶层模块。仿真测试通过后,上板验证。自行设计仿真和上板验证(可选)过程,并分析仿真和上板验证(可选)结果。

设计出的运算器数据通路实验顶层电路图如下(alu_dataPath.v):

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图(顶层电路图)

部分代码展示:

`timescale 1ns / 1ps
//顶层文件
module alu_dataPath(
input ldr0,
input nr0_bus,
input ldr1,
input nr1_bus,
input ldr2,
input nr2_bus,
input ldr3,
input nr3_bus,
input [7:0] in,
input nsw_bus,
input lddr1,
input lddr2,
input nalu_bus,
input [3:0] alusel,
output cy,
output zf,
output of,
output nf,
output [7:0] DBUS
);
wire [7:0] data_in;
wire [7:0] data_out;
wire [7:0] q_a;
wire [7:0] q_b;
wire [7:0] ALU_y;
//寄存器模块
register R0(
.DataIn     (data_in),
.ldreg      (ldr0),
.nDataToBus (nr0_bus),
.DataOut    (data_out)
);
//寄存器模块
register R1(
.DataIn     (data_in),
.ldreg      (ldr1),
.nDataToBus (nr1_bus),
.DataOut    (data_out)
);
//寄存器模块
register R2(
.DataIn     (data_in),
.ldreg      (ldr2),
.nDataToBus (nr2_bus),
.DataOut    (data_out)
);
//寄存器模块
register R3(
.DataIn     (data_in),
.ldreg      (ldr3),
.nDataToBus (nr3_bus),
.DataOut    (data_out)
);
dr DR1(
.clrn (1'b0),
.d    (data_out),
.lddr (lddr1), 
.q    (q_a)
);
dr DR2(
.clrn (1'b0),
.d    (data_out),
.lddr (lddr2), 
.q    (q_b)
);
alu8 ALU( 
.a     (q_a),
.alusel(alusel),
.b     (q_b),
.cy    (cy),
.nf    (nf),
.of    (of),
.y     (ALU_y),
.zf    (zf)
);
threeStBuff SWtoBus(
.nDataToBus(nsw_bus),
.DataIn    (in),
.DataOut   (data_in)
);
threeStBuff ALUtoBus(
.nDataToBus(nalu_bus),
.DataIn    (ALU_y),
.DataOut   (data_in)
);
assign DBUS=data_in;
endmodule
源代码

 扫描文章末尾的公众号二维码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值