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

📄 alu.v

📁 这个是用可编程器件进行仿真CPU的程序
💻 V
字号:
//**************************************************
//** Revision    :  0.1
//** File name   :  ALU.v
//** Module name :  ALU
//** Discription :  本文件描述了算术逻辑部件,此部件有功能
//** Simulator   :  Max+plus II
//** Synthesizer :  Max+plus II
//** Author      :  IamFree
//** Last modify :    @ 2006///
//** Create date :  2006/03/08
//**************************************************

module ALU(ALU_O,ALU_Co,ALU_P,ALU_Z,ALU_Ci,ALU_Op,ALU_A,ALU_B);
//Parameter define
parameter width=8;

//ALU opcode define
parameter ALU_ADD=5'b00001;
parameter ALU_SUB=5'b00010;
parameter ALU_AND=5'b00011;
parameter ALU_OR =5'b00100;
parameter ALU_XOR=5'b00101;
parameter ALU_SHL=5'b00110;
parameter ALU_SHR=5'b00111;
parameter ALU_NOT=5'b01000;
parameter ALU_TA =5'b01001;
parameter ALU_TB =5'b01010;

//Port define
output [width-1:0] ALU_O;
output ALU_Co;
output ALU_P;
output ALU_Z;
input  ALU_Ci;
input  [4:0] ALU_Op;
input  [width-1:0] ALU_A;
input  [width-1:0] ALU_B;

//Port Type
reg    [width-1:0] ALU_O;
reg    ALU_Co;

//Body
always @(ALU_A or ALU_B or ALU_Ci or ALU_Op)
begin
   //避免生成不可预知的锁存器
   ALU_Co=1'b0;
   ALU_O=8'b0000_0000;

 case(ALU_Op)
   ALU_ADD: begin {ALU_Co,ALU_O}=ALU_A+ALU_B+ALU_Ci ;end  //带进位加法
   ALU_SUB: begin {ALU_Co,ALU_O}=ALU_A-ALU_B-ALU_Ci ;end  //带借位减法
   ALU_SHL: begin {ALU_Co,ALU_O}={ALU_A,ALU_Ci} ;end      //带进位(借位)循环左移一位
   ALU_SHR: begin {ALU_O,ALU_Co}={ALU_Ci,ALU_A} ;end      //带进位(借位)循环右移一位
   ALU_AND: begin {ALU_Co,ALU_O}={ALU_Ci,ALU_A & ALU_B} ;end  //按位与,进位不变
   ALU_OR : begin {ALU_Co,ALU_O}={ALU_Ci,ALU_A | ALU_B} ;end  //按位或,进位不变
   ALU_NOT: begin {ALU_Co,ALU_O}={ALU_Ci,~ALU_A}        ;end  //按位取反,进位不变
   ALU_XOR: begin {ALU_Co,ALU_O}={ALU_Ci,ALU_A ^ ALU_B} ;end  //按位异或,进位不变
   ALU_TA : begin {ALU_Co,ALU_O}={ALU_Ci,ALU_A}         ;end  //传送A,进位不变
   ALU_TB : begin {ALU_Co,ALU_O}={ALU_Ci,ALU_B}         ;end  //传送B,进位不变
   default: begin {ALU_Co,ALU_O}={ALU_Ci,8'b0000_0000}  ;end
   //如果操作码不正确,则进位不变,结果为0
 endcase
end

assign ALU_P=ALU_A[7];
assign ALU_Z=~|ALU_O;  //Zero判决

endmodule

⌨️ 快捷键说明

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