基于Verilog的简易计算器 您所在的位置:网站首页 Verilog密码锁lcd1602 基于Verilog的简易计算器

基于Verilog的简易计算器

2024-01-24 15:18| 来源: 网络整理| 查看: 265

1.任务

设计一个四位数简易计算器,数字键由矩阵键盘输入,显示由用四位数码管输出,能够正确实现+、-、*、/ 四种运算(不考虑小数的运算)。

2.系统框图

主要由五个模块组成,分别是矩阵键盘扫描模块、数码管显示模块、二进制转BCD模块、运算模块,框图如下图所示: 在这里插入图片描述

3.模块化设计 3.1顶层模块编写

顶层模块作为程序的入口处,分别去调用每个模块,实现各个模块的功能。源码如下:

module cal_top( Clk,Rst_n,key_c,key_r,dig_sel,dig_data ); // 输入 input Clk; //50MHz input Rst_n; //复位 低电平有效 input [3:0]key_r; //矩阵键盘 行 // 输出 output wire [3:0]key_c; //矩阵键盘 列 output wire[7:0]dig_data; //数码管段码 output wire[3:0]dig_sel; //4位数码管位选 wire key_in; wire [3:0]key_out; wire key_flag; //按键按下标志位 wire key_state; //按键状态 reg [4:0]key_num; //按键按下的键值 reg [13:0]num_a; //操作数 a reg [13:0]num_b; //操作数 b reg dis_flag; reg [3:0]opera_flag; wire [13:0]out_a; wire [13:0]out_b; wire dis_flago; wire [3:0]opera_flago; wire out_flagd; reg [13:0]num_sel; wire [3:0]data_q; //千位 wire [3:0]data_b; //百位 wire [3:0]data_s; //十位 wire [3:0]data_g; //个位 reg en; wire [13:0]out_num; wire num_flag; key_filter my_key_filter( .Clk(Clk), .Rst_n(Rst_n), .key_in(key_in), .key_flag(key_flag), .key_state(key_state) ); key_array my_array( .Clk(Clk), .Rst_n(Rst_n), .key_c(key_c), .key_out(key_out), .key_r(key_r), .key_in(key_in) ); dig_dynamic my_dig_dynamic( .Clk(Clk), .Rst_n(Rst_n), .En(1'b1), .disp_data({data_q[3:0],data_b[3:0],data_s[3:0],data_g[3:0]}), .dig_sel(dig_sel), .dig_data(dig_data) ); bcd_d my_bcd_d( .binary(num_sel), .g(data_g), .s(data_s), .b(data_b), .q(data_q) ); add my_add( .num_a(num_sel), .en(en), .key_num(key_num), .out_a(out_num), .num_flag(num_flag) ); opera my_opera( .num_a(num_a), .num_b(num_b), .en(en), .dis_flag(dis_flag), .opera_flag(opera_flag), .key_num(key_num), .out_a(out_a), .out_b(out_b), .dis_flago(dis_flago), .opera_flago(opera_flago), .out_flagd(out_flagd) ); /********选择数******/ always@(posedge Clk or negedge Rst_n) if(!Rst_n) begin num_a


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有