1. module alu(
  2. input [:] a, //OP1
  3. input [:] b, //OP2
  4. input [:] aluc, //controller
  5. output [:] r, //result
  6. output zero,
  7. output carry,
  8. output negative,
  9. output overflow);
  10.  
  11. parameter Addu = 'b0000; //r=a+b unsigned
  12. parameter Add = 'b0010; //r=a+b signed
  13. parameter Subu = 'b0001; //r=a-b unsigned
  14. parameter Sub = 'b0011; //r=a-b signed
  15. parameter And = 'b0100; //r=a&b
  16. parameter Or = 'b0101; //r=a|b
  17. parameter Xor = 'b0110; //r=a^b
  18. parameter Nor = 'b0111; //r=~(a|b)
  19. parameter Lui1 = 'b1000; //r={b[15:0],16'b0}
  20. parameter Lui2 = 'b1001; //r={b[15:0],16'b0}
  21. parameter Slt = 'b1011; //r=(a-b<0)?1:0 signed
  22. parameter Sltu = 'b1010; //r=(a-b<0)?1:0 unsigned
  23. parameter Sra = 'b1100; //r=b>>>a
  24. parameter Sll = 'b1110; //r=b<<a
  25. parameter Srl = 'b1101; //r=b>>a
  26.  
  27. parameter bits=;
  28. parameter ENABLE=,DISABLE=;
  29.  
  30. reg [:] result;
  31. wire signed [:] sa=a,sb=b;
  32.  
  33. always@(*)begin
  34. case(aluc)
  35. Addu: begin
  36. result=a+b;
  37. end
  38. Subu: begin
  39. result=a-b;
  40. end
  41. Add: begin
  42. result=sa+sb;
  43. end
  44. Sub: begin
  45. result=sa-sb;
  46. end
  47. Sra: begin
  48. if(a==) {result[:],result[]}={b,'b0};
  49. else {result[:],result[]}=sb>>>(a-);
  50. end
  51. Srl: begin
  52. if(a==) {result[:],result[]}={b,'b0};
  53. else {result[:],result[]}=b>>(a-);
  54. end
  55. Sll: begin
  56. result=b<<a;
  57. end
  58. And: begin
  59. result=a&b;
  60. end
  61. Or: begin
  62. result=a|b;
  63. end
  64. Xor: begin
  65. result=a^b;
  66. end
  67. Nor: begin
  68. result=~(a|b);
  69. end
  70. Sltu: begin
  71. result=a<b?:;
  72. end
  73. Slt: begin
  74. result=sa<sb?:;
  75. end
  76. Lui1,Lui2: result = {b[:], 'b0};
  77. default:
  78. result=a+b;
  79. endcase
  80. end
  81.  
  82. assign r=result[:];
  83. assign carry = result[];
  84. assign zero=(r=='b0)?1:0;
  85. assign negative=result[];
  86. assign overflow=result[];
  87. 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. from 组件

    知识补充 :  location.href="/index/"                                      加路径或者网址都可以 location.h ...

  2. WampServer之php、mysql环境安装

    WampServer之php.mysql环境安装 WampServer介绍: WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以及MySQL数据库的整合软件包.免去了开 ...

  3. 设置Eclipse中的tab键为4个空格

    在工具栏上找到window,点击 window->preference 然后在打开的界面中选择 General->Editors->Text Editors, 再选中右侧的 inse ...

  4. 解决MySql 数据库 提示:1045 access denied for user 'root'@'localhost' using password yes

    今天想用用MySQL 数据库  谁知道老提示 1045 access denied for user 'root'@'localhost' using password yes 最后在csdn 上找到 ...

  5. Spark-Mllib中各分类算法的java实现(简易教程)

    一.简述 Spark是当下非常流行的数据分析框架,而其中的机器学习包Mllib也是其诸多亮点之一,相信很多人也像我那样想要快些上手spark.下面我将列出实现mllib分类的简明代码,代码中将简述训练 ...

  6. Android自定义view与activity的传值

    昨晚在写团队项目的时候,遇到一个问题,直到今天早上才解决...即在自定义view"转盘"结束转动后获取结果的处理中,我是想吧值传到activity中的一个textview中的,但我 ...

  7. 简述 ascii、unicode、utf-8、gbk 的关系 (全网最全!!!)

    ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符, Unicode是为了统一世界各国语言的不用,统一 ...

  8. 【LA2238 训练指南】固定分区内存管理 【二分图最佳完美匹配,费用流】

    题意 早期的多程序操作系统常把所有的可用内存划分为一些大小固定的区域,不同的区域一般大小不同,而所有区域的大小之和为可用内存的大小.给定一些程序,操作系统需要给每个程序分配一个区域,使得他们可以同时执 ...

  9. Hibernate核心API

    ------------------------siwuxie095 (一)Configuration 1.一般情况 或: 加载核心配置文件:在 src 下找到名称为 Hibernate.cfg.xm ...

  10. Java中的对象要怎样才算相等

    一.引用相等性与对象相等性 1. 引用相等性 引用到堆上同一个对象的两个引用是相等的,这就是引用的相等性. 如果想要知道两个引用是否相等,可以使用==来比较变量上的字节组合,如果引用到相同的对象,字节 ...