计算机组成原理Verilog实验--Verilog初体验
Charles-Lafite
编辑于 2020年05月20日 09:38
收录于文集
共8篇

第1关:全加器设计

module fa_behavioral(a,b,ci,s,co);//考虑进位的加法器模块 

       input a,b;

       input ci;

       output  s;

       output co;

// 请在下面添加代码,完成一位全加器功能

/* Begin */

assign{co,s}=a+b+ci;

/* End */

endmodule

第2关:无符号二进制数加法器的实现

module adder(a,b,cin,cout,sum);

  parameter bit_width=8;

  output[bit_width-1:0] sum;

  output cout;

  input [bit_width-1:0] a,b;

  input cin;

// 请在下面添加代码,完成n=8位的无符号二进制数加法器功能

/* Begin */

assign{cout,sum}=a+b+cin;

/* End */

endmodule

第3关:减法运算器

module substractor(a,b,cin,cout,sum);

  parameter bit_width=8;

  output[bit_width-1:0] sum;

  output cout;

  input [bit_width-1:0] a,b;

  input cin;//carry

// 请在下面添加代码,完成n位的无符号二进制数减法器功能

/* Begin */

assign{cout,sum}=a-b-cin;

/* End */

endmodule

第4关:定点二进制数的补码加减法运算器

module add_sub(a,b,control,cout,overflow,sum);

  parameter bit_width=4;

  output[bit_width-1:0] sum;     output cout,overflow;

  input [bit_width-1:0] a,b;         input control;//carry

  reg overflow,cout;                      reg [bit_width-1:0] sum;

  reg [bit_width:0] a2,b2,sum2;  

   // 请在下面添加代码,完成定点二进制数的补码加减法运算器功能

        /********** Begin *********/

always@(a or b or control)

        /********** End *********/

    begin

       a2[bit_width]=a[bit_width-1];    //将a符号位扩展成2位并赋值给a2

       a2[bit_width-1:0]=a[bit_width-1:0];

      // 请在下面添加代码,将b符号位扩展成2位并赋值给b2

        /********** Begin *********/

        b2[bit_width]=b[bit_width-1];    //将b符号位扩展成2位并赋值给b2

       b2[bit_width-1:0]=b[bit_width-1:0];

        /********** End *********/ 

    if (control==0) {cout,sum2}=a2+b2;

    else  {cout,sum2}=a2+(~b2)+control;  

    if((sum2[bit_width]^sum2[bit_width-1])==1)   overflow=1;    

    else overflow=0;   //用双符号位判溢出

     sum[bit_width-1:0]=sum2[bit_width-1:0];   

  end           

endmodule