module alu(
input [:] a, //OP1
input [:] b, //OP2
input [:] aluc, //controller
output [:] r, //result
output zero,
output carry,
output negative,
output overflow); parameter Addu = 'b0000; //r=a+b unsigned
parameter Add = 'b0010; //r=a+b signed
parameter Subu = 'b0001; //r=a-b unsigned
parameter Sub = 'b0011; //r=a-b signed
parameter And = 'b0100; //r=a&b
parameter Or = 'b0101; //r=a|b
parameter Xor = 'b0110; //r=a^b
parameter Nor = 'b0111; //r=~(a|b)
parameter Lui1 = 'b1000; //r={b[15:0],16'b0}
parameter Lui2 = 'b1001; //r={b[15:0],16'b0}
parameter Slt = 'b1011; //r=(a-b<0)?1:0 signed
parameter Sltu = 'b1010; //r=(a-b<0)?1:0 unsigned
parameter Sra = 'b1100; //r=b>>>a
parameter Sll = 'b1110; //r=b<<a
parameter Srl = 'b1101; //r=b>>a parameter bits=;
parameter ENABLE=,DISABLE=; reg [:] result;
wire signed [:] sa=a,sb=b; always@(*)begin
case(aluc)
Addu: begin
result=a+b;
end
Subu: begin
result=a-b;
end
Add: begin
result=sa+sb;
end
Sub: begin
result=sa-sb;
end
Sra: begin
if(a==) {result[:],result[]}={b,'b0};
else {result[:],result[]}=sb>>>(a-);
end
Srl: begin
if(a==) {result[:],result[]}={b,'b0};
else {result[:],result[]}=b>>(a-);
end
Sll: begin
result=b<<a;
end
And: begin
result=a&b;
end
Or: begin
result=a|b;
end
Xor: begin
result=a^b;
end
Nor: begin
result=~(a|b);
end
Sltu: begin
result=a<b?:;
end
Slt: begin
result=sa<sb?:;
end
Lui1,Lui2: result = {b[:], 'b0};
default:
result=a+b;
endcase
end assign r=result[:];
assign carry = result[];
assign zero=(r=='b0)?1:0;
assign negative=result[];
assign overflow=result[];
endmodule

Verilog MIPS32 CPU(三)-- ALU的更多相关文章

  1. Verilog MIPS32 CPU(八)-- 控制器

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  2. Verilog MIPS32 CPU(六)-- MDU

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  3. Verilog MIPS32 CPU(七)-- DIV、DIVU

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  4. Verilog MIPS32 CPU(五)-- CP0

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  5. Verilog MIPS32 CPU(四)-- RAM

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  6. Verilog MIPS32 CPU(二)-- Regfiles

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  7. Verilog MIPS32 CPU(一)-- PC寄存器

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  8. Verilog MIPS32 CPU(九)-- 顶层文件

    `timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...

  9. 【第一季】CH06_FPGA设计Verilog基础(三)

    [第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...

随机推荐

  1. 浪潮openStack云

  2. 关于jquery中的parent的认定

    <li><label class='checkbox inline'><input type='checkbox' name='type[]' value='{$item ...

  3. 【读书笔记】 DevOps实践 - 驭DevOps之力强化技术栈并优化IT运行

    读书小结 DevOps实践 - 驭DevOps之力强化技术栈并优化IT运行 这本书共200页,读完大概三天:(我指的不是fulltime的一天,而是工作时间以外的一天) 本书是参加16年QConf开发 ...

  4. ffmpeg编译选项汇总

    编译禁用“jack” 和 “crystalhd” : --disable-crystalhd--disable-indev=jack ================================= ...

  5. Spring 学习记录5 BeanFactory

    主题 记录我对BeanFactor接口的简单的学习. BeanFactory我感觉就是管理bean用的容器,持有一堆的bean,你可以get各种bean.然后也提供一些bean相关的功能比如别名呀之类 ...

  6. PHP - 闭合标签

    最最开始的时候经常遇到这个问题,就是如果一个文件里面全部都是php代码的话,我写了前闭合和后闭合的时候,文件一多就容易报错,老是说什么有关输出的错误,貌似大概就是header已经发了. 手册上面这个样 ...

  7. 前面部分(WCF全面解析1)

    WCF全面解析 [同力推荐] 我经历了COM时代,一直把Don BOx的<COM本质论>奉为我的指路明灯.能把SOA机理和WCF这种特定厂商实现的技术讲得如<COM本质论>一样 ...

  8. 搭建Git Server - Centos+Gitosis

    参考并部分转载自:http://www.pfeng.org/archives/757 1. 安装依赖 yum -y install curl-devel expat-devel gettext-dev ...

  9. pl/sql中if语句的使用

  10. 网络编程基础之粘包现象与UDP协议

    一.粘包现象原理分析 1.我们先来看几行代码,从现象来分析: 测试程序分为两部分,分别是服务端和客户端 服务端.py #!/usr/bin/env python3 #-*- coding:utf-8 ...