八位运算器实验报告
《组成原理》实验报告
姓名:赵帅____________
专业:网络工程________
学号:0121121394______
日期:2014年11月25日
实验一:8位运算器的设计
1,设计目的:
学习并练习verilog语言
了解8位加法器实现原理
2,设计目标:
使用verilog语言编写8为运算器并进行仿真模拟
3,模块设计规格及输入输出端变量说明
1)3模块设计规格及输入输出端变量说明:
输入:[2:0]s(操作指令), LDA,LDB(输入控制),
[7:0]IN(输入数);
输出:[7:0]A,B(操作数), ALU(结果寄存器),
FZ(判零), FC(进位);
操作指令表:
运算类型 S2 S1 S0功能逻辑运算 000ALU=A 001ALU=A&B 010ALU=A|B 011ALU=~A移位运算 100ALU=A逻辑左移一位算术运算 101ALU=A+B 110ALU=A+1 111ALU=A-1
4,程序原理连接图
5,程序代码
Moduletest (T4,s,A,B,LDA,LDB,FZ,FC,IN,ALU);
input [2:0] s;
input LDA,LDB,T4;
input [7:0] IN;
output [7:0] A,B,ALU;
output FZ,FC;
reg [7:0] A,B,ALU;
reg FZ,FC;
/*
*输入模块,当clk上升沿时,如果LDA为1,则把IN的值给A,否则赋给B
*/
always @ (posedge CLK)
begin
if(LDA==1'b1)
begin
A<=IN;
end
else if(LDB==1'b1)
begin
B<=IN;
end
end
/*
*计算模块,根据操作数s的不同值为A和B进行八种不同的计算,其中当A+B
*进行加法计算时,把进位值赋给FC
*/
always @ (s[2] or s[1] or s[0])
begin
case ({s[2],s[1],s[0]})
3'b000:ALU<=A;//直接赋值
3'b001:ALU<=A&B;//A与B按位与
3'b010:ALU<=A|B;//A与B按位或
3'b011:ALU<=~A;//非A
3'b100:ALU<=(A<<1);//A左移一位
3'b101:{FC,ALU}<=A+B;//ALU=A+B,FC为A+B的进位
3'b110:ALU<=A+1;//加一操作
3'b111:ALU<=A-1;//减一操作
endcase
end
/*
*该模块的作用是判断ALU是否为,若是FZ赋为1
*/
always @ (negedge T4)
begin
if(ALU==8'
FZ<=1'b1;
else
FZ<=1'b0;
end
endmodule
6时序仿真图: