当前位置:文档之家› 计组实验报告3

计组实验报告3

begin
case(F_LED_SW)
3'b000:LED[7:0] = F[7:0];
3'b001:LED[7:0] = F[15:8];
3'b010:LED[7:0] = F[23:16];
3'b011:LED[7:0] = F[31:24];
3'b111: begin LED[7] = ZF; LED[0] = OF; LED[6:1] = 6'b0; end
#100;
ALU_OP = 101;
AB_SW = 101;
F_LED_SW = 000;
#100;
ALU_OP = 110;
AB_SW = 110;
F_LED_SW = 000;
#100;
ALU_OP = 111;
AB_SW = 111;
F_LED_SW = 000;
end
endmodule
二、仿真波形
output OF;
always@(*)
bБайду номын сангаасgin
case(AB_SW)
3'b000: begin A=32'h0000_0000; B=32'h0000_0000; end
3'b001: begin A=32'h0000_0003; B=32'h0000_0607; end
3'b010: begin A=32'h8000_0000; B=32'h8000_0000; end
default: begin LED[7] = ZF; LED[0] = OF; LED[6:1] = 6'b0; end
endcase
end
endmodule
仿真测试
module ALUTest;
// Inputs
reg [2:0] ALU_OP;
reg [2:0] AB_SW;
reg [2:0] F_LED_SW;
NET "LED[3]"LOC = "V15";
NET "LED[4]"LOC = "M11";
NET "LED[5]"LOC = "N11";
NET "LED[6]"LOC = "R11";
NET "LED[7]"LOC = "T11";
五、调试
1刚开始不知道怎么去设计,后来查书发现使用always (*)可以把这个搞定
2做运算的时候灯不亮,看了下源代码才发现忘记给LED灯赋值了,然后在选择这一个
这个程序的复杂度比之前的2个难了好多,不管是复杂度还是在设计上的难度,不过最后模块化设计以后还是比较好做,但是也花了很长时间的查错和调试,毕竟接触的时间不是很长,很多错误都要调试半天才能够解决,但是最后通.F(F),
.LED(LED),
.ZF(ZF),
.OF(OF)
);
initial begin
// Initialize Inputs
ALU_OP = 0;
AB_SW = 0;
F_LED_SW = 0;
// Wait 100 ns for global reset to finish
#100;
ALU_OP = 000;
NET "F_LED_SW[0]"LOC = "T10";
NET "F_LED_SW[1]"LOC = "T9";
NET "F_LED_SW[2]"LOC = "C4";
NET "LED[0]"LOC = "U16";
NET "LED[1]"LOC = "V16";
NET "LED[2]"LOC = "U15";
AB_SW = 001;
F_LED_SW = 000;
#100;
ALU_OP = 001;
AB_SW = 001;
F_LED_SW = 000;
#100;
ALU_OP = 010;
AB_SW = 010;
F_LED_SW = 000;
#100;
ALU_OP = 100;
AB_SW = 100;
F_LED_SW = 000;
3'b110: begin A=32'hFFFF_FFFF; B=32'h8000_0000; end
3'b111: begin A=32'h1234_5678; B=32'h3333_2222; end
default: begin A=32'h9ABC_DEF0; B=32'h1111_2222; end
实验报告
成绩:
姓名
黄涛
卢玉琦
学号
13084220
13084225
班级
13080211
专业
信息安全
课程名称
《计算机组成原理》
任课老师
戴钧
指导老师
戴钧
机位号
实验序号
1
实验名称
多功能ALU的设计
实验时间
2015.9.8
实验地点
1教235
实验设备号
一、实验程序源代码
module ALU(ALU_OP, AB_SW, F_LED_SW, F, LED, ZF, OF);
// Outputs
wire [31:0]F;
wire [7:0]LED;
wire ZF;
wire OF;
// Instantiate the Unit Under Test (UUT)
ALU uut (
.ALU_OP(ALU_OP),
.AB_SW(AB_SW),
.F_LED_SW(F_LED_SW),
3'b111:begin F<=B<<A; end
default: F<=32'h0000_0000;
endcase
end
always@(*)
begin
if(F===32'h0000_0000)
ZF<=1;
else
ZF<=0;
end
assign OF=A[31]^B[31]^F[31]^C32;
always@(*)
reg[31:0]A;
reg[31:0]B;
input[2:0]ALU_OP;
input[2:0]AB_SW;
input[2:0]F_LED_SW;
reg[31:0]F;
reg[7:0]LED;
reg ZF;
wire OF;
reg C32;
output F;
output LED;
output ZF;
3'b011: begin A=32'h7FFF_FFFF; B=32'h7FFF_FFFF; end
3'b100: begin A=32'hFFFF_FFFF; B=32'hFFFF_FFFF; end
3'b101: begin A=32'h8000_0000; B=32'hFFFF_FFFF; end
三、电路图
四、引脚配置(约束文件)
NET "ALU_OP[0]"LOC = "U8";
NET "ALU_OP[1]"LOC = "V8";
NET "ALU_OP[2]"LOC = "T5";
NET "AB_SW[0]"LOC = "V9";
NET "AB_SW[1]"LOC = "M8";
NET "AB_SW[2]"LOC = "N8";
endcase
end
always@(*)
begin
case(ALU_OP)
3'b000:F<=A&B;
3'b001:F<=A|B;
3'b010:F<=A^B;
3'b011:F<=A~^B;
3'b100:{C32,F}<=A+B;
3'b101:{C32,F}<=A-B;
3'b110:begin if(A<B) F<=32'h0000_0001; else F<=32'h0000_0000; end
相关主题