Lab4实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Product Category:ALL
Family:Spartan3E
Device:XC3S500E
Package:FG320
Speed:-4
Synthesis Tool:XST(VHDL/Verilog)
Simulator: ISim(VHDL/Verilog),也可用Modelsim仿真。
Preferred Language:Verilog
inputclock_in,
input [25:21] readreg1,
input [20:16] readreg2,
input [4:0] writereg,
input [31:0] writedata,
output [31:0] readdata1,
output [31:0] readdata2,
parameter DELY = 200;
// Instantiate the Unit Under Test (UUT)
registeruut (
.clock_in(clock_in),
.readreg1(readreg1),
.readreg2(readreg2),
.writereg(writereg),
writereg = 5'b01010;
writedata = 32'b00000000000000000000000000001111;
//readreg1 = 5'b10101;
//readreg2 = 5'b00000;
#200;
readreg1 = 5'b10101;
readreg2 = 5'b01Biblioteka Baidu10;
6.双击Processes中的Simulate Behavioral Model,保持默认即可。若需要可选中Process Properties调整仿真运行时间。
7.ISim进行仿真,观察波形,查看仿真结果是否满足设计。如果有错,修改代码逻辑,重新仿真。(操作小技巧:小键盘-,+,快速缩放波形视野)
1
1.1
简单的类MIPS单周期处理器实现–寄存器与内存
1.2
1.理解CPU的寄存器与内存
1.3
本次实验将覆盖以下范围
1.ISE的使用
2.Spartan-3E实验板的使用
3.使用Verilog HDL进行逻辑设计
4.Register的实现
5.Data Memory的实现
6.有符号扩展的实现
1.4
1.本实验的逻辑设计工具为Xilinx ISE11.1。
begin
readdata2 = regfile[readreg2];
end
always @(negedgeclock_in)
begin
if(regwrite)
regfile[writereg] = writedata;
end
endmodule
6.2 test_for_register
moduletest_for_register;
wire [31:0] readdata;
parameter DELY = 200;
// Instantiate the Unit Under Test (UUT)
data_memoryuut (
.clock_in(clock_in),
.address(address),
.writedata(writedata),
确认Enable Enhanced Design Summary已勾选
5. 点击Next
6. 在New Project Wizard – Create New Source中点击Next
7. 在 New Project Wizard – Add Existing Sources中点击Next
8. 在New Project Wizard – Project Summary中点击Finish,结束建立工程
memread = 1'b0;
#250;
memread = 1'b1;
// Add stimulus here
end
endmodule
2.5 signext
modulesignext(
input [15:0] inst,
output [31:0] data
);
reg [31:0] data;
always @(inst)
#250;
memread = 1'b1;
memwrite = 1'b0;
#50;
memread = 1'b0;
address = 16;
writedata = 32'b00000000000000000000000011111111;
#50;
memread = 1'b1;
#100;
memwrite = 1'b1;
3.文件类型为Verilog Test Fixture,文件名可取test_for_register
4.Associate Source中选择register,Next。
5.添加激励信号如下图,进行行为仿真。使用clock_in作为时钟输入,仿真周期自定,至少仿真3个周期,这里设为3000ns。时钟周期暂设为200ns。
readreg1 = 0;
readreg2 = 0;
writereg = 0;
writedata = 0;
regwrite = 0;
// current time
#285;
regwrite = 1'b1;
writereg = 5'b10101;
writedata = 32'b11111111111111110000000000000000;
// Inputs
reg [15:0] inst;
// Outputs
wire [31:0] data;
// Instantiate the Unit Under Test (UUT)
signextuut (
.inst(inst),
.data(data)
// Inputs
regclock_in;
reg [25:21] readreg1;
reg [20:16] readreg2;
reg [4:0] writereg;
reg [31:0] writedata;
regregwrite;
// Outputs
wire [31:0] readdata1;
wire [31:0] readdata2;
begin
if(inst[15] == 0)
assign data = {16'b0000000000000000,inst};
else
assign data = {16'b1111111111111111,inst};
end
endmodule
2.6 test_for_signext
moduletest_for_signext;
// Add stimulus here
end
endmodule
6
moduledata_memory(
inputclock_in,
input [31:0] address,
input [31:0] writedata,
inputmemwrite,
inputmemread,
output [31:0] readdata
2
2
1.启动ISE 11.1。
2.选择File > New Project…出现New Project Wizard。
3.Project Name填写lab5,选择工程Project Location,Top-level Source Type选择HDL。点击Next。
4. Device Properties中各属性填写如下:
3
这里需要注意的是,由于不确定WriteReg, WriteData, RegWrite信号的先后次序,我们采用时钟的下降沿作为写操作的同步信号,防止发生错误。
写完代码后在综合选项中,如图运行语法检查:
3.
1.将Sources for:下拉框选择为Behavioral Simulation
2.在register(register.v)模块上点击右键,选择New Source
inputregwrite
);
reg [31:0] readdata1;
reg [31:0] readdata2;
reg [31:0] regfile[31:0];
always @(readreg1)
begin
readdata1 = regfile[readreg1];
end
always @(readreg2)
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)
所以-7的补码是11111001。
带符号扩展只需要在前面补足符号即可。
5
5.3
将符号补齐
#200;
writereg = 5'b01010;
writedata = 32'b00000000000000001111111111111111;
#150;
regwrite = 1'b0;
readreg1 = 5'b10101;
readreg2 = 5'b01010;
#100;
regwrite = 1'b1;
);
reg [31:0] memfile[63:0];
reg [31:0] readdata;
always @(memread)
begin
readdata = memfile[address];
end
always @(negedgeclock_in)
begin
if(memwrite == 1'b1)
5.4
1.可创建test_for_ signext.v测试文件,添加激励信号,进行行为仿真。
2.在testBench中设定不同的输入。覆盖所有不同控制的情况,多选取一些输入数据,以保证逻辑的正确。
3.打开ISim进行仿真,观察波形是否满足设计逻辑。如果有错,检查代码,重新仿真。
6
6
module register(
8.下面给出一个仿真波形样例:
4
4.1
内存本模块与register类似,由于写数据也要考虑信号同步,因此也需要clock_in。
内存单元的实现,也可用系统Block Memory来生成。参见本手册最后附录的部分图示。
4.2
4
4.4
1.根据之前叙述的方法仿真测试,文件类型为Verilog Test Fixture,文件名可取test_for_datamemory
2.添加激励信号如下图,修改代码进行行为仿真。在testBench中设定不同的输入。请覆盖所有的情况,以保证逻辑的正确
3.观察波形是否满足逻辑,如果有错,检查代码,重新仿真。
4.下面给出参考样例:
5
5.1
将16位有符号数扩展为32位有符号数。
补码:
(1)正数的补码:与原码相同。
+9的补码是00001001。
memfile[address] = writedata;
end
endmodule
6
moduletest_for_mem;
// Inputs
regclock_in;
reg [31:0] address;
reg [31:0] writedata;
regmemwrite;
regmemread;
// Outputs
writedata = 0;
memwrite = 0;
memread = 0;
// Wait 100 ns for global reset to finish
#185;
memwrite = 1'b1;
address = 15;
writedata = 32'b11111111000000000000000000000000;
3
3
寄存器是指令操作的主要对象,MIPS中一共有32个32位的寄存器。
3
1.新建文件命令:菜单栏-- Project–New Source…
或:Hierarchy窗口中,在正确设备名(xc2vp30-7ff896或类似)上右键鼠标,弹出菜单中点击New Source…
设置输入输出,这里加入了时钟信号clock_in
.writedata(writedata),
.readdata1(readdata1),
.readdata2(readdata2),
.regwrite(regwrite)
);
always #(DELY/2) clock_in = ~clock_in;
initial begin
clock_in = 0;
.memwrite(memwrite),
.memread(memread),
.readdata(readdata)
);
always #(DELY/2) clock_in = ~clock_in;
initial begin
// Initialize Inputs
clock_in = 0;
address = 0;
Family:Spartan3E
Device:XC3S500E
Package:FG320
Speed:-4
Synthesis Tool:XST(VHDL/Verilog)
Simulator: ISim(VHDL/Verilog),也可用Modelsim仿真。
Preferred Language:Verilog
inputclock_in,
input [25:21] readreg1,
input [20:16] readreg2,
input [4:0] writereg,
input [31:0] writedata,
output [31:0] readdata1,
output [31:0] readdata2,
parameter DELY = 200;
// Instantiate the Unit Under Test (UUT)
registeruut (
.clock_in(clock_in),
.readreg1(readreg1),
.readreg2(readreg2),
.writereg(writereg),
writereg = 5'b01010;
writedata = 32'b00000000000000000000000000001111;
//readreg1 = 5'b10101;
//readreg2 = 5'b00000;
#200;
readreg1 = 5'b10101;
readreg2 = 5'b01Biblioteka Baidu10;
6.双击Processes中的Simulate Behavioral Model,保持默认即可。若需要可选中Process Properties调整仿真运行时间。
7.ISim进行仿真,观察波形,查看仿真结果是否满足设计。如果有错,修改代码逻辑,重新仿真。(操作小技巧:小键盘-,+,快速缩放波形视野)
1
1.1
简单的类MIPS单周期处理器实现–寄存器与内存
1.2
1.理解CPU的寄存器与内存
1.3
本次实验将覆盖以下范围
1.ISE的使用
2.Spartan-3E实验板的使用
3.使用Verilog HDL进行逻辑设计
4.Register的实现
5.Data Memory的实现
6.有符号扩展的实现
1.4
1.本实验的逻辑设计工具为Xilinx ISE11.1。
begin
readdata2 = regfile[readreg2];
end
always @(negedgeclock_in)
begin
if(regwrite)
regfile[writereg] = writedata;
end
endmodule
6.2 test_for_register
moduletest_for_register;
wire [31:0] readdata;
parameter DELY = 200;
// Instantiate the Unit Under Test (UUT)
data_memoryuut (
.clock_in(clock_in),
.address(address),
.writedata(writedata),
确认Enable Enhanced Design Summary已勾选
5. 点击Next
6. 在New Project Wizard – Create New Source中点击Next
7. 在 New Project Wizard – Add Existing Sources中点击Next
8. 在New Project Wizard – Project Summary中点击Finish,结束建立工程
memread = 1'b0;
#250;
memread = 1'b1;
// Add stimulus here
end
endmodule
2.5 signext
modulesignext(
input [15:0] inst,
output [31:0] data
);
reg [31:0] data;
always @(inst)
#250;
memread = 1'b1;
memwrite = 1'b0;
#50;
memread = 1'b0;
address = 16;
writedata = 32'b00000000000000000000000011111111;
#50;
memread = 1'b1;
#100;
memwrite = 1'b1;
3.文件类型为Verilog Test Fixture,文件名可取test_for_register
4.Associate Source中选择register,Next。
5.添加激励信号如下图,进行行为仿真。使用clock_in作为时钟输入,仿真周期自定,至少仿真3个周期,这里设为3000ns。时钟周期暂设为200ns。
readreg1 = 0;
readreg2 = 0;
writereg = 0;
writedata = 0;
regwrite = 0;
// current time
#285;
regwrite = 1'b1;
writereg = 5'b10101;
writedata = 32'b11111111111111110000000000000000;
// Inputs
reg [15:0] inst;
// Outputs
wire [31:0] data;
// Instantiate the Unit Under Test (UUT)
signextuut (
.inst(inst),
.data(data)
// Inputs
regclock_in;
reg [25:21] readreg1;
reg [20:16] readreg2;
reg [4:0] writereg;
reg [31:0] writedata;
regregwrite;
// Outputs
wire [31:0] readdata1;
wire [31:0] readdata2;
begin
if(inst[15] == 0)
assign data = {16'b0000000000000000,inst};
else
assign data = {16'b1111111111111111,inst};
end
endmodule
2.6 test_for_signext
moduletest_for_signext;
// Add stimulus here
end
endmodule
6
moduledata_memory(
inputclock_in,
input [31:0] address,
input [31:0] writedata,
inputmemwrite,
inputmemread,
output [31:0] readdata
2
2
1.启动ISE 11.1。
2.选择File > New Project…出现New Project Wizard。
3.Project Name填写lab5,选择工程Project Location,Top-level Source Type选择HDL。点击Next。
4. Device Properties中各属性填写如下:
3
这里需要注意的是,由于不确定WriteReg, WriteData, RegWrite信号的先后次序,我们采用时钟的下降沿作为写操作的同步信号,防止发生错误。
写完代码后在综合选项中,如图运行语法检查:
3.
1.将Sources for:下拉框选择为Behavioral Simulation
2.在register(register.v)模块上点击右键,选择New Source
inputregwrite
);
reg [31:0] readdata1;
reg [31:0] readdata2;
reg [31:0] regfile[31:0];
always @(readreg1)
begin
readdata1 = regfile[readreg1];
end
always @(readreg2)
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)
所以-7的补码是11111001。
带符号扩展只需要在前面补足符号即可。
5
5.3
将符号补齐
#200;
writereg = 5'b01010;
writedata = 32'b00000000000000001111111111111111;
#150;
regwrite = 1'b0;
readreg1 = 5'b10101;
readreg2 = 5'b01010;
#100;
regwrite = 1'b1;
);
reg [31:0] memfile[63:0];
reg [31:0] readdata;
always @(memread)
begin
readdata = memfile[address];
end
always @(negedgeclock_in)
begin
if(memwrite == 1'b1)
5.4
1.可创建test_for_ signext.v测试文件,添加激励信号,进行行为仿真。
2.在testBench中设定不同的输入。覆盖所有不同控制的情况,多选取一些输入数据,以保证逻辑的正确。
3.打开ISim进行仿真,观察波形是否满足设计逻辑。如果有错,检查代码,重新仿真。
6
6
module register(
8.下面给出一个仿真波形样例:
4
4.1
内存本模块与register类似,由于写数据也要考虑信号同步,因此也需要clock_in。
内存单元的实现,也可用系统Block Memory来生成。参见本手册最后附录的部分图示。
4.2
4
4.4
1.根据之前叙述的方法仿真测试,文件类型为Verilog Test Fixture,文件名可取test_for_datamemory
2.添加激励信号如下图,修改代码进行行为仿真。在testBench中设定不同的输入。请覆盖所有的情况,以保证逻辑的正确
3.观察波形是否满足逻辑,如果有错,检查代码,重新仿真。
4.下面给出参考样例:
5
5.1
将16位有符号数扩展为32位有符号数。
补码:
(1)正数的补码:与原码相同。
+9的补码是00001001。
memfile[address] = writedata;
end
endmodule
6
moduletest_for_mem;
// Inputs
regclock_in;
reg [31:0] address;
reg [31:0] writedata;
regmemwrite;
regmemread;
// Outputs
writedata = 0;
memwrite = 0;
memread = 0;
// Wait 100 ns for global reset to finish
#185;
memwrite = 1'b1;
address = 15;
writedata = 32'b11111111000000000000000000000000;
3
3
寄存器是指令操作的主要对象,MIPS中一共有32个32位的寄存器。
3
1.新建文件命令:菜单栏-- Project–New Source…
或:Hierarchy窗口中,在正确设备名(xc2vp30-7ff896或类似)上右键鼠标,弹出菜单中点击New Source…
设置输入输出,这里加入了时钟信号clock_in
.writedata(writedata),
.readdata1(readdata1),
.readdata2(readdata2),
.regwrite(regwrite)
);
always #(DELY/2) clock_in = ~clock_in;
initial begin
clock_in = 0;
.memwrite(memwrite),
.memread(memread),
.readdata(readdata)
);
always #(DELY/2) clock_in = ~clock_in;
initial begin
// Initialize Inputs
clock_in = 0;
address = 0;