最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验1 运算器设计与仿真

来源:动视网 责编:小OO 时间:2025-09-28 20:55:32
文档

实验1 运算器设计与仿真

预做实验报告1运算器设计与仿真一、实验目的理解并掌握运算器的基本电路结构及其设计方法,学会使用VerilogHDL对电路进行行为建模、结构建模以及仿真测试。二、实验内容利用VerilogHDL设计一个运算器模型,并进行仿真测试。要求该运算器的字长为32位,能够实现加法、减法、逻辑与、逻辑或四种运算,并产生N(结果为负)、Z(结果为零)、V(结果溢出)、C(进位)四个标志位。要求采用层次化的建模方法,即先搭建低层模块,然后再逐级搭建高层模块。三、实验环境PC机1台、Modelsim仿真软件1套。
推荐度:
导读预做实验报告1运算器设计与仿真一、实验目的理解并掌握运算器的基本电路结构及其设计方法,学会使用VerilogHDL对电路进行行为建模、结构建模以及仿真测试。二、实验内容利用VerilogHDL设计一个运算器模型,并进行仿真测试。要求该运算器的字长为32位,能够实现加法、减法、逻辑与、逻辑或四种运算,并产生N(结果为负)、Z(结果为零)、V(结果溢出)、C(进位)四个标志位。要求采用层次化的建模方法,即先搭建低层模块,然后再逐级搭建高层模块。三、实验环境PC机1台、Modelsim仿真软件1套。
预做实验报告1  运算器设计与仿真

一、实验目的

理解并掌握运算器的基本电路结构及其设计方法,学会使用Verilog HDL对电路进行行为建模、结构建模以及仿真测试。

二、实验内容

利用Verilog HDL设计一个运算器模型,并进行仿真测试。要求该运算器的字长为32位,能够实现加法、减法、逻辑与、逻辑或四种运算,并产生N(结果为负)、Z(结果为零)、V(结果溢出)、C(进位)四个标志位。要求采用层次化的建模方法,即先搭建低层模块,然后再逐级搭建高层模块。

三、实验环境

PC机1台、Modelsim仿真软件1套。

四、实验步骤

1、电路结构设计

2、建立Verilog模型

module fadd(a,b,s,ci,co);

input a,b,ci;

output s,co;

reg s,co;

always @ (a or b or ci)

begin 

s<=(a&~b&~ci)|(~a&b&~ci)|(~a&~b&ci)|(a&b&ci);

co<=(a&b)|(a&ci)|(b&ci);

end

endmodule

module add(a,b,sub,s,c,v,n);

input [31:0]a;

input [31:0]b;

input sub;

output [31:0]s;

output c,v,n;

wire [31:0]a;

wire [31:0]b;

wire c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,c20,c21,c22,c23,c24,c25,c26,c27,c28,c29,c30,c31;

fadd f0(a[0],b[0]^sub,s[0],sub,c1);

fadd f1(a[1],b[1]^sub,s[1],c1,c2);

fadd f2(a[2],b[2]^sub,s[2],c2,c3);

fadd f3(a[3],b[3]^sub,s[3],c3,c4);

fadd f4(a[4],b[4]^sub,s[4],c4,c5);

fadd f5(a[5],b[5]^sub,s[5],c5,c6);

fadd f6(a[6],b[6]^sub,s[6],c6,c7);

fadd f7(a[7],b[7]^sub,s[7],c7,c8);

fadd f8(a[8],b[8]^sub,s[8],c8,c9);

fadd f9(a[9],b[9]^sub,s[9],c9,c10);

fadd f10(a[10],b[10]^sub,s[10],c10,c11);

fadd f11(a[11],b[11]^sub,s[11],c11,c12);

fadd f12(a[12],b[12]^sub,s[12],c12,c13);

fadd f13(a[13],b[13]^sub,s[13],c13,c14);

fadd f14(a[14],b[14]^sub,s[14],c14,c15);

fadd f15(a[15],b[15]^sub,s[15],c15,c16);

fadd f16(a[16],b[16]^sub,s[16],c16,c17);

fadd f17(a[17],b[17]^sub,s[17],c17,c18);

fadd f18(a[18],b[18]^sub,s[18],c18,c19);

fadd f19(a[19],b[19]^sub,s[19],c19,c20);

fadd f20(a[20],b[20]^sub,s[20],c20,c21);

fadd f21(a[21],b[21]^sub,s[21],c21,c22);

fadd f22(a[22],b[22]^sub,s[22],c22,c23);

fadd f23(a[23],b[23]^sub,s[23],c23,c24);

fadd f24(a[24],b[24]^sub,s[24],c24,c25);

fadd f25(a[25],b[25]^sub,s[25],c25,c26);

fadd f26(a[26],b[26]^sub,s[26],c26,c27);

fadd f27(a[27],b[27]^sub,s[27],c27,c28);

fadd f28(a[28],b[28]^sub,s[28],c28,c29);

fadd f29(a[29],b[29]^sub,s[29],c29,c30);

fadd f30(a[30],b[30]^sub,s[30],c30,c31);

fadd f31(a[31],b[31]^sub,s[31],c31,c);

assign n=s[31];

assign v=c^c31;

endmodule

module mux21_32(f,a,b,s);

output[31:0] f;

input[31:0] a,b;

input s;

reg [31:0] f;

always @(s or a or b)

case(s)

1'd0: f=a;

1'd1: f=b;

endcase

endmodule

module ALU(op,a,b,s,n,v,c,z);

input [1:0]op;

input [31:0]a,b;

output[31:0]s;

output n,v,c,z;

wire [31:0]d,e,f,s1;

assign d=a&b;

assign e=a|b;

mux21_32 u0(f,d,e,op[0]);

add u2(a,b,op[0],s1,c,v,n);

mux21_32 u1(s,f,s1,op[1]);

assign z=~(|s);

endmodule

3、设计测试文件

`timescale 1ns / 1ns

module ALUtest;

reg clk;

reg [1:0]op;

reg [31:0]a,b;

wire [31:0]s;

wire n,v,c,z;

//op=00 AND;

//op=01 OR;

//op=10 ADD;

//op=11 SUB;

ALU A(op,a,b,s,n,v,c,z);

//clock generation                   

initial clk = 1;

always #50 clk = ~clk;

initial

  begin

#20  a=32'b0100_0101_0100_0000_0010_0010_0101_0001;

     b=32'b1010_0101_0010_0000_0100_0010_0011_0010;

     op=2'b00;

#100 a=32'b0100_0101_0100_0000_0010_0010_0101_0001;

     b=32'b1010_0101_0010_0000_0100_0010_0011_0010;

     op=2'b01;

#100 a=32'b0100_0101_0100_0000_0010_0010_0101_0001;

     b=32'b1010_0101_0010_0000_0100_0010_0011_0010;

     op=2'b10;

#100 a=32'b0100_0101_0100_0000_0010_0010_0101_0001;

     b=32'b1010_0101_0010_0000_0100_0010_0011_0010;

     op=2'b11;

#100 a=32'b0111_1011_1101_1110_1111_1111_1111_1111;

     b=32'b0111_1011_1101_1110_1111_1111_1111_1111;

     op=2'b11;

#100 a=32'd15;

     b=32'd9;

     op=2'b11;

#100 a=32'd9;

     b=32'd15;

     op=2'b11;

#100 $stop;

  end

Endmodule

 $display("a= %b, b= %b, op= %b, s= %b,n=%b,z=%b,v=%b,c=%b\\n",a,b,op,s,n,z,v,c);

注意:测试的完备性。

4、将设计文件和测试文件输入Modesim仿真工具,并进行编译和功能仿真。

5、观测仿真波形图,分析结果是否正确。若有错误,则修改设计文件或测试文件,重新编译和仿真。

五、实验结果

序号输入数据仿真结果正确结果仿真结果的正确性
1a=32'h4540_2251; b=32'hA520_4232;

op=2'b00

S=?n=?z=?v=?c=?S=?n=?z=?v=?c=?正确或错误?
2
3
六、实验分析与总结

七、实验思考题

1、设计一个32位的原码乘法器并进行仿真测试。

文档

实验1 运算器设计与仿真

预做实验报告1运算器设计与仿真一、实验目的理解并掌握运算器的基本电路结构及其设计方法,学会使用VerilogHDL对电路进行行为建模、结构建模以及仿真测试。二、实验内容利用VerilogHDL设计一个运算器模型,并进行仿真测试。要求该运算器的字长为32位,能够实现加法、减法、逻辑与、逻辑或四种运算,并产生N(结果为负)、Z(结果为零)、V(结果溢出)、C(进位)四个标志位。要求采用层次化的建模方法,即先搭建低层模块,然后再逐级搭建高层模块。三、实验环境PC机1台、Modelsim仿真软件1套。
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top