简单运算器的设计与仿真

若对你有用,记得点赞、关注我哦!

计算机组成原理期末复习【超实用】

一位全加器的设计与仿真

四位全加器的设计与仿真

八位比较器的设计与仿真

1/2分频器的设计和仿真

四选一多路选择器的设计与仿真

1. 实验题目

       简单运算器的设计与仿真

2. 实验内容

       设计一个运算器模型,并进行仿真测试。

3. 实验要求

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

4. 程序代码

VerilogHDL代码:
1.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
2. 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
3. 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
4. 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

测试代码:
`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;
  ALU A(op,a,b,s,n,v,c,z);
  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;
    #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

5. 实验结果

根据测试代码中的输入数据在波形图中分析得:

序号

输入数据

仿真结果

仿真结果是否正确

1

a=32’h45402251;b=32’hA5204232;

op=2’b00

S=32’h05000210;n=1’b1;

z=1’b0;v=1’b0;c=1’b0

正确

2

a=32’h45402251;b=32’hA5204232;

op=2’b01

S=32’he5606273;n=1’b1;

z=1’b0;v=1’b1;c=1’b0

正确

3

a=32’h45402251;b=32’hA520-4232;

op=2’b10

S=32’hea606483;n=1’b1;

z=1’b0;v=1’b0;c=1’b0

正确

4

a=32’h45402251 ; b=32’hA5204232;

op=2’b11

S=32’ha01feo1f;n=1’b1;

z=1’b0;v=1’b0;c=1’b0

正确

 

  • 12
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logisim运算器设计实验是一项通过使用logisim软件进行计算机运算器设计的实验。在这个实验中,我们使用logisim软件来模拟和构建一个简单的计算机运算器。 首先,我们需要确定运算器的功能和输入输出的规格。比如,我们可以设计一个简单的加法器,它接收两个二进制数作为输入,并将它们相加后输出结果。 然后,我们需要使用logisim软件中的逻辑门、触发器和多路选择器等组件来构建运算器的电路。对于加法器的实现,我们可以通过级联连接多个半加器和全加器来实现。每个半加器用于处理两个输入位的相加,而全加器用于处理两个输入位以及来自上一个进位的相加。 在构建电路时,我们要注意每个组件的输入输出连接,确保正确的信号传递和逻辑运算。我们还需要使用logisim软件中的时钟和开关等工具来模拟电路的运行,并观察输出结果是否符合预期。 完成电路的构建后,我们可以使用模拟模式来测试运算器的功能。通过输入不同的二进制数,并观察输出结果,我们可以验证运算器的正确性。 最后,我们可以进一步优化运算器设计,例如添加进位预测器、位移器或乘法器等功能来扩展其功能。并通过logisim软件的仿真功能进行验证和测试。 总之,logisim运算器设计实验可以帮助我们理解计算机运算器的构造和原理,并通过软件模拟来验证和测试电路的功能。这个实验既锻炼了我们的逻辑思维能力,也提高了我们对计算机组成和数字电路设计的理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值