ALU设计

ALU模块:

//
//创建日期:2022/11/6 20:06:00
//设计名称:ALU算术逻辑单元
//课程名称:alu
//说明:
//输入:   [11:0] alu_control;  // ALU控制信号
//        [31:0] alu_src1;     // ALU操作数1
//        [31:0] alu_src2;     // ALU操作数2
//输出:   [31:0] alu_result;   // ALU结果
//依赖项:
//
//版次:
//版本0.01-文件已创建
//其他注释:
//
//
module alu(alu_control,alu_src1,alu_src2,alu_result);input  [11:0] alu_control;  // ALU控制信号input  [31:0] alu_src1;     // ALU操作数1input  [31:0] alu_src2;     // ALU操作数2output [31:0] alu_result;   // ALU结果reg [31:0] alu_result;// 控制信号为独热编码always @(*)begincase(alu_control)   // 下面的1,2指操作数1,操作数212'b000000000001:alu_result<=alu_src1<<16;         // 高位加载       112'b000000000010:alu_result<=alu_src1>>>alu_src2;         // 算术右移       212'b000000000100:alu_result<=alu_src1>>alu_src2; // 逻辑右移      412'b000000001000:alu_result<=alu_src1<<alu_src2; // 逻辑左移      812'b000000010000:alu_result<=alu_src1^alu_src2; // 按位异或    1612'b000000100000:alu_result<=alu_src1|alu_src2;// 按位或    3212'b000001000000:alu_result<=~(alu_src1|alu_src2); // 按位或非       6412'b000010000000:alu_result<=alu_src1&alu_src2; // 按位与       12812'b000100000000:alu_result<=alu_src1<alu_src2?32'd1:32'd0;// 无符号比较,小于置位  25612'b001000000000:alu_result<=$signed(alu_src1)<$signed(alu_src2)?32'd1:32'd0;// 有符号比较,小于置位  51212'b010000000000:alu_result<=alu_src1+alu_src2;// 1加     102412'b100000000000:alu_result<=alu_src1-alu_src2;// 1减     2048default: alu_result<=alu_src1;endcaseend
endmodule

alu_display.v

//*************************************************************************
//   > 文件名: alu_display.v
//   > 描述  :ALU显示模块,调用FPGA板上的IO接口和触摸屏
//   > 作者  : LOONGSON
//   > 日期  : 2016-04-14
//*************************************************************************
module alu_display(//时钟与复位信号input clk,input resetn,    //后缀"n"代表低电平有效//拨码开关,用于选择输入数input [1:0] input_sel, //00:输入为控制信号(alu_control)//10:输入为源操作数1(alu_src1)//11:输入为源操作数2(alu_src2)//触摸屏相关接口,不需要更改output lcd_rst,output lcd_cs,output lcd_rs,output lcd_wr,output lcd_rd,inout[15:0] lcd_data_io,output lcd_bl_ctr,inout ct_int,inout ct_sda,output ct_scl,output ct_rstn);
//-----{调用ALU模块}beginreg   [11:0] alu_control;  // ALU控制信号reg   [31:0] alu_src1;     // ALU操作数1reg   [31:0] alu_src2;     // ALU操作数2wire  [31:0] alu_result;   // ALU结果alu alu_module(.alu_control(alu_control),.alu_src1   (alu_src1   ),.alu_src2   (alu_src2   ),.alu_result (alu_result ));
//-----{调用ALU模块}end//---------------------{调用触摸屏模块}begin--------------------//
//-----{实例化触摸屏}begin
//此小节不需要更改reg         display_valid;reg  [39:0] display_name;reg  [31:0] display_value;wire [5 :0] display_number;wire        input_valid;wire [31:0] input_value;lcd_module lcd_module(.clk            (clk           ),   //10Mhz.resetn         (resetn        ),//调用触摸屏的接口.display_valid  (display_valid ),.display_name   (display_name  ),.display_value  (display_value ),.display_number (display_number),.input_valid    (input_valid   ),.input_value    (input_value   ),//lcd触摸屏相关接口,不需要更改.lcd_rst        (lcd_rst       ),.lcd_cs         (lcd_cs        ),.lcd_rs         (lcd_rs        ),.lcd_wr         (lcd_wr        ),.lcd_rd         (lcd_rd        ),.lcd_data_io    (lcd_data_io   ),.lcd_bl_ctr     (lcd_bl_ctr    ),.ct_int         (ct_int        ),.ct_sda         (ct_sda        ),.ct_scl         (ct_scl        ),.ct_rstn        (ct_rstn       ));
//-----{实例化触摸屏}end//-----{从触摸屏获取输入}begin
//根据实际需要输入的数修改此小节,
//建议对每一个数的输入,编写单独一个always块//当input_sel为00时,表示输入数控制信号,即alu_controlalways @(posedge clk)beginif (!resetn)beginalu_control <= 12'd0;endelse if (input_valid && input_sel==2'b00)beginalu_control <= input_value[11:0];endend//当input_sel为10时,表示输入数为源操作数1,即alu_src1always @(posedge clk)beginif (!resetn)beginalu_src1 <= 32'd0;endelse if (input_valid && input_sel==2'b10)beginalu_src1 <= input_value;endend//当input_sel为11时,表示输入数为源操作数2,即alu_src2always @(posedge clk)beginif (!resetn)beginalu_src2 <= 32'd0;endelse if (input_valid && input_sel==2'b11)beginalu_src2 <= input_value;endend
//-----{从触摸屏获取输入}end//-----{输出到触摸屏显示}begin
//根据需要显示的数修改此小节,
//触摸屏上共有44块显示区域,可显示44组32位数据
//44块显示区域从1开始编号,编号为1~44,always @(posedge clk)begincase(display_number)6'd1 :begindisplay_valid <= 1'b1;display_name  <= "SRC_1";display_value <= alu_src1;end6'd2 :begindisplay_valid <= 1'b1;display_name  <= "SRC_2";display_value <= alu_src2;end6'd3 :begindisplay_valid <= 1'b1;display_name  <= "CONTR";display_value <={20'd0, alu_control};end6'd4 :begindisplay_valid <= 1'b1;display_name  <= "RESUL";display_value <= alu_result;enddefault :begindisplay_valid <= 1'b0;display_name  <= 40'd0;display_value <= 32'd0;endendcaseend
//-----{输出到触摸屏显示}end
//----------------------{调用触摸屏模块}end---------------------//
endmodule

tp仿真

`timescale 1ns / 1ps
module tb;reg   [11:0] alu_control;  // ALU控制信号reg   [31:0] alu_src1;     // ALU操作数1reg   [31:0] alu_src2;     // ALU操作数2wire  [31:0] alu_result;   // ALU结果alu alu_module(.alu_control(alu_control),.alu_src1   (alu_src1   ),.alu_src2   (alu_src2   ),.alu_result (alu_result ));initial beginalu_control=12'd0;alu_src1=32'd0;alu_src2=32'd0;#10;alu_control=12'b000000000001;     // 1#10;alu_src1=32'd1024;#10;alu_src1=32'd512;#10;alu_src2=32'd64;#50;alu_control=12'b000000000010;   // 2#10;alu_src2=32'd1024;#10;alu_src2=32'd512;#10;alu_src1=32'd64;#50;alu_control=12'b000000000100;     // 4#10;alu_src1=32'd192;#10;alu_src2=32'd192;#10;alu_src2=32'd16;#50;alu_control=12'b000000001000;     // 8#10;alu_src1=32'd192;#10;alu_src2=32'd192;#10;alu_src2=32'd16;#50;alu_control=12'b000000010000;     // 16#10;alu_src1=32'd128;#10;alu_src2=32'd127;#10;alu_src2=32'd0;#50;alu_control=12'b000000100000;     // 32#10;alu_src1=32'd128;#10;alu_src2=32'd127;#10;alu_src2=32'd0;#50;alu_control=12'b000001000000;     // 64#10;alu_src1=32'hffffffff;#10;alu_src2=32'h1;#10;alu_src2=32'hffffffff;#50;alu_control=12'b000010000000;     // 128#10;alu_src1=32'h0fffffff;#10;alu_src2=32'h1;#10;alu_src1=32'h0;#50;alu_control=12'b000100000000;     // 256#10;alu_src1=32'hffffffff;alu_src2=32'd1;#10;alu_src2=32'd3;#10;alu_src2=32'd5;#50;alu_control=12'b001000000000;     // 512#10;alu_src1=32'd1;#10;alu_src1=32'd3;alu_src2=32'hffffffff;#10;alu_src1=32'd5;#50;alu_control=12'b010000000000;     // 1024#10;alu_src1=32'd1;#10;alu_src1=32'd2048;#10;alu_src1=32'hf0000000;#50;alu_control=12'b100000000000;     // 2048#10;alu_src1=32'd1;#10;alu_src1=32'd2048;#10;alu_src1=32'hf0000000;end
endmodule

约束(COE2020)(板不一样的不要用这个约束)

#时钟信号连接
set_property PACKAGE_PIN AC19 [get_ports clk]#脉冲开关,用于输入作为复位信号,低电平有效
#set_property PACKAGE_PIN Y3 [get_ports resetn]
set_property PACKAGE_PIN AB21 [get_ports resetn]#拨码开关连接,用于输入,依次为sw0,sw1
#set_property PACKAGE_PIN AE20 [get_ports input_sel[0]]
set_property PACKAGE_PIN AE17   [get_ports input_sel[0]]
#set_property PACKAGE_PIN AD24 [get_ports input_sel[1]]
set_property PACKAGE_PIN AF17 [get_ports input_sel[1]]set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports resetn]
set_property IOSTANDARD LVCMOS33 [get_ports input_sel[1]]
set_property IOSTANDARD LVCMOS33 [get_ports input_sel[0]]#触摸屏引脚连接
#set_property PACKAGE_PIN J25 [get_ports lcd_rst]
#set_property PACKAGE_PIN H18 [get_ports lcd_cs]
#set_property PACKAGE_PIN K16 [get_ports lcd_rs]
#set_property PACKAGE_PIN L8 [get_ports lcd_wr]
#set_property PACKAGE_PIN K8 [get_ports lcd_rd]
#set_property PACKAGE_PIN J15 [get_ports lcd_bl_ctr]
#set_property PACKAGE_PIN H9 [get_ports {lcd_data_io[0]}]
#set_property PACKAGE_PIN K17 [get_ports {lcd_data_io[1]}]
#set_property PACKAGE_PIN J20 [get_ports {lcd_data_io[2]}]
#set_property PACKAGE_PIN M17 [get_ports {lcd_data_io[3]}]
#set_property PACKAGE_PIN L17 [get_ports {lcd_data_io[4]}]
#set_property PACKAGE_PIN L18 [get_ports {lcd_data_io[5]}]
#set_property PACKAGE_PIN L15 [get_ports {lcd_data_io[6]}]
#set_property PACKAGE_PIN M15 [get_ports {lcd_data_io[7]}]
#set_property PACKAGE_PIN M16 [get_ports {lcd_data_io[8]}]
#set_property PACKAGE_PIN L14 [get_ports {lcd_data_io[9]}]
#set_property PACKAGE_PIN M14 [get_ports {lcd_data_io[10]}]
#set_property PACKAGE_PIN F22 [get_ports {lcd_data_io[11]}]
#set_property PACKAGE_PIN G22 [get_ports {lcd_data_io[12]}]
#set_property PACKAGE_PIN G21 [get_ports {lcd_data_io[13]}]
#set_property PACKAGE_PIN H24 [get_ports {lcd_data_io[14]}]
#set_property PACKAGE_PIN J16 [get_ports {lcd_data_io[15]}]
#set_property PACKAGE_PIN L19 [get_ports ct_int]
#set_property PACKAGE_PIN J24 [get_ports ct_sda]
#set_property PACKAGE_PIN H21 [get_ports ct_scl]
#set_property PACKAGE_PIN G24 [get_ports ct_rstn]
set_property PACKAGE_PIN E5  [get_ports lcd_rst]
set_property PACKAGE_PIN G7  [get_ports lcd_cs]
set_property PACKAGE_PIN H7  [get_ports lcd_rs]
set_property PACKAGE_PIN E6  [get_ports lcd_wr]
set_property PACKAGE_PIN D5  [get_ports lcd_rd]
set_property PACKAGE_PIN J5  [get_ports lcd_bl_ctr]
set_property PACKAGE_PIN C4  [get_ports {lcd_data_io[0]}]
set_property PACKAGE_PIN C3  [get_ports {lcd_data_io[1]}]
set_property PACKAGE_PIN D4  [get_ports {lcd_data_io[2]}]
set_property PACKAGE_PIN D3  [get_ports {lcd_data_io[3]}]
set_property PACKAGE_PIN F5  [get_ports {lcd_data_io[4]}]
set_property PACKAGE_PIN G6  [get_ports {lcd_data_io[5]}]
set_property PACKAGE_PIN F4  [get_ports {lcd_data_io[6]}]
set_property PACKAGE_PIN E3  [get_ports {lcd_data_io[7]}]
set_property PACKAGE_PIN G5  [get_ports {lcd_data_io[8]}]
set_property PACKAGE_PIN H6  [get_ports {lcd_data_io[9]}]
set_property PACKAGE_PIN F2  [get_ports {lcd_data_io[10]}]
set_property PACKAGE_PIN F3  [get_ports {lcd_data_io[11]}]
set_property PACKAGE_PIN G4  [get_ports {lcd_data_io[12]}]
set_property PACKAGE_PIN G2  [get_ports {lcd_data_io[13]}]
set_property PACKAGE_PIN H4  [get_ports {lcd_data_io[14]}]
set_property PACKAGE_PIN H3  [get_ports {lcd_data_io[15]}]
set_property PACKAGE_PIN K6  [get_ports ct_int]
set_property PACKAGE_PIN J6  [get_ports ct_sda]
set_property PACKAGE_PIN L8  [get_ports ct_scl]
set_property PACKAGE_PIN K7  [get_ports ct_rstn]set_property IOSTANDARD LVCMOS33 [get_ports lcd_rst]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_cs]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_rs]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_wr]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_rd]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_bl_ctr]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports ct_int]
set_property IOSTANDARD LVCMOS33 [get_ports ct_sda]
set_property IOSTANDARD LVCMOS33 [get_ports ct_scl]
set_property IOSTANDARD LVCMOS33 [get_ports ct_rstn]

Verilog 简易ALU相关推荐

  1. Verilog简易电梯控制系统(2层)

     工程文件链接:Verilog简易电梯控制系统设计(两层,含附加项蜂鸣器和流水灯)-单片机文档类资源-CSDN下载 一.实验项目名称:简易电梯控制系统(2层) 二.实验学时:2 三.设计目标: 1.实 ...

  2. verilog简易密码锁设计

    使用Verilog语言设计密码锁,在vivado下创建工程,并使用testbench在vivado下仿真,得到正确的结果.该密码锁具有设置密码的功能,当输入正确的密码时可以输出open信号,当错误时输 ...

  3. gvim for verilog简易配置

    目录 前言 一.gvim的主题和字体资源 二.gvim编辑器基本配置 三.gvim针对verilog配置 总结 前言 分别介绍了gvim的主题和字体资源推荐,gvim编辑器基本配置和针对verilog ...

  4. Verilog 简易寄存器

    目录 寄存器,长版 寄存器,简短版 仿真 tp 约束(COE2020)(板不一样的不要用这个约束) 寄存器,长版 // // //创建日期:2022/10/16 21:37:00 //设计名称:寄存器 ...

  5. 实验二 CPU 部件实现之 ALU 和寄存器堆

    1.1设计要求 理解和掌握 CPU 中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作原理,并使用 Verilog 和 ModelSim 进行设计和仿真. 1. 使用 Ver ...

  6. 【此后无良辰】实验二 CPU部件实现之ALU和寄存器堆

    一. 实验目的 理解和掌握CPU中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作原理,并使用Verilog和ModelSim进行设计和仿真. 二. 实验内容 使用Veril ...

  7. CPU部件实现之ALU、寄存器堆、PC、RAM

    系统硬件综合设计-多周期CPU的设计与实现 计算机组成原理 实验五 单周期CPU设计与实现--十条指令CPU 文章目录 ALU和寄存器堆 一.实验目的: 二.实验内容: 三. 源代码 PC和半导体存储 ...

  8. Synopsys逻辑综合及DesignCompiler的使用

    逻辑综合 一. 基础知识 逻辑综合的目的:决定电路门级结构.寻求时序(性能)和面积的平衡.寻求功耗与时序的平衡.增强电路的测试性. 二. 逻辑综合流程 Design Compiler使用 使用Desi ...

  9. FPGA数字系统设计(4)——行为级建模

    行为级建模有两种标志性的结构: initial结构和always结构 initial结构与always结构在一个module可以出现很多次,与数据流建模assign一样. 一个module中所有的in ...

最新文章

  1. Jquery UI dialog 详解
  2. 一个详尽的面向 SAP UI5 初学者的教程 - 如何在 SAP UI5 中绘制图表 Chart
  3. TensorFlow 分布式
  4. 转自云界漫步:同步容灾100公里的限制来自哪里
  5. windows下文件系统格式介绍
  6. python教程-4.数据处理numpy-pandas
  7. 9款很棒的网页绘制图表JavaScript框架脚本
  8. Jenkins持续集成学习-搭建jenkins问题汇总
  9. dw中html颜色的设置颜色代码,利用Dreamweaver(DW)快速输入CSS颜色代码值
  10. 雷达初学者必读 | 毫米波雷达信号处理入门教程
  11. 项目成本管理的5项原则
  12. 软件项目管理 7.3.敏捷历时估算
  13. 赔97.6万元!腾讯一程序员违反竞业协议,三年白干了!
  14. DDD 实战 (11):冲刺 1 代码 TDD 实现之道
  15. SPSS(十七)SPSS之判别分析进阶(图文+数据集)
  16. 传奇服务器如何修改装备,架设传奇私服时怎样修改装备图标
  17. L1-027 出租 (20 分) java
  18. 从零玩转第三方登录之WeChat公众号登陆-cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi-wechat-gong-zhong-hao-deng-lu...
  19. hjr-内梅罗综合指数法
  20. 15-当头炮攻屏风马--左马盘河局

热门文章

  1. java中的GC原理
  2. 双边指数信号matlab,matlab课程设计参考题目
  3. 【全奖博士生】悉尼科技大学ReLER实验室招收CV/AI方向
  4. 使用TensorFlow拟合三元函数
  5. dns劫持工具,局域网内的DNS劫持的方法和防范技巧
  6. Mac 系统占用100g的解决办法
  7. 小米为何拒绝鸿蒙?它已决定以MIUI+velaOS走向世界
  8. SSL证书详解和CFSSL工具使用
  9. 六神磊磊读唐诗中的敏捷:(三)晚唐:知遇
  10. 金牌汉马首推人脸识别直播,Sioeye开启马拉松新时代