⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 the_6th_alu.v

📁 一个自己写的8位CPU程序
💻 V
字号:
// **************************************************************
// ** Revision     :1.0
// ** File name    :The_6th_ALU.v
// ** Module Name  :The_6th_ALU
// ** Discription  :本模块描述了算术逻辑运算部件,此部件有20种功能。
// ** PS           :对GR的赋值操作在CU中运行。
// **************************************************************

`timescale 1ns / 1ps

module The_6th_ALU(ALU_O,ALU_C,C_in,op,AC_in,GR_in);

     parameter width = 8;

     output ALU_C;                         //经过ALU计算后的进位输出端口
     output [width-1:0] ALU_O;             //经过ALU计算后的结果输出端口
     input  C_in;                          //来自C标志寄存器的进位输入
     input  [4:0] op;                      //操作码
     input  [width-1:0] AC_in;             //来自累加寄存器AC的数据
     input  [width-1:0] GR_in;             //来自通用寄存器GR的数据

     reg    [width-1:0] ALU_O;
     reg    ALU_C;

     always @(C_in or op or AC_in or GR_in)
       begin

          case(op)

           5'b00100:
            begin
               {ALU_C,ALU_O} = {C_in,AC_in};                    //传输AC,进位不变
            end
           5'b00101:
            begin
               {ALU_C,ALU_O}={C_in,GR_in};                      //传输GR,进位不变
            end
           5'b00110:
            begin
               {ALU_C,ALU_O}=AC_in+GR_in;                       //不带进位加法
            end
           5'b00111:
            begin
               {ALU_C,ALU_O}=AC_in+GR_in+C_in;                  //带进位加法
            end
	   5'b01000:
            begin
               {ALU_C,ALU_O}=AC_in+1;                           //自增
            end
	   5'b01001:
            begin
               {ALU_C,ALU_O}=AC_in-GR_in;                       //不带借位减法
            end
           5'b01010:
            begin
               {ALU_C,ALU_O}=AC_in-GR_in-C_in;                  //带借位减法
            end
           5'b01011:
            begin
               {ALU_C,ALU_O}=AC_in-1;                           //自减
            end
           5'b01100:
            begin
               {ALU_C,ALU_O}=~GR_in+1;                          //求补
            end
           5'b01101:
            begin
               {ALU_C,ALU_O}=AC_in-GR_in;                       //比较
            end
           5'b01110:
            begin
               {ALU_C,ALU_O}={C_in,AC_in&GR_in};                //按位与,进位不变
            end
           5'b01111:
            begin
               {ALU_C,ALU_O}={C_in,AC_in|GR_in};                //按位或,进位不变
            end
           5'b10000:
            begin
               {ALU_C,ALU_O}={C_in,AC_in^GR_in};                //按位异或,进位不变
            end
           5'b10001:
            begin
               {ALU_C,ALU_O}={C_in,~GR_in};                     //按位取反,进位不变
            end
	   5'b10010:
            begin
               {ALU_C,ALU_O}={GR_in[7],GR_in[6:0],1'b0};        //逻辑左移,末位补0
            end
           5'b10011:
            begin
               {ALU_C,ALU_O}={GR_in[0],1'b0,GR_in[7:1]};        //逻辑右移,最高位补0
            end
	   5'b10100:
            begin
               {ALU_C,ALU_O}={GR_in,C_in};                      //带进(借)位循环左移一位
            end
	   5'b10101:
            begin
               {ALU_C,ALU_O}={GR_in[0],C_in,GR_in[7:1]};        //带进(借)位循环右移一位
            end
           5'b10110:
            begin
               {ALU_C,ALU_O}={GR_in[7],GR_in[6:0],GR_in[7]};    //不带进(借)位循环左移一位
            end
           5'b10111:
            begin
               {ALU_C,ALU_O}={GR_in[0],GR_in[0],GR_in[7:1]};    //不带进(借)位循环右移一位
            end
	   default:
            begin
               {ALU_C,ALU_O}={C_in,8'b0};                       //如果操作码不正确,则结果为0,进位不变
            end

          endcase

     end

endmodule
	  


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -