• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的简易计算器设计VHDL代码Quartus仿真

07/24 08:15
151
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2405131ZU0539.doc

共1个文件

名称:基于FPGA的简易计算器设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

简易计算器

设计要求:

1.系统主要外设:矩阵键盘(4×4)、数码管6个、系统时钟(50MHz);

2.系统主要功能:可以实现十位以内的加、减、乘、除运算;用户通过矩阵键盘进行输入,并用数码管来显示当前的输入数值和最终的计算结果。

*备注:矩阵键盘大小为4×4,可以自行设计每个按键的功能。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
--计算器
ENTITY?calculator_tb?IS
END?calculator_tb;
ARCHITECTURE?trans?OF?calculator_tb?IS
???
???COMPONENT?state_ctrl?IS
??????PORT?(
?????????clk????????:?IN?STD_LOGIC;
?????????esc????????:?IN?STD_LOGIC;
?????????add????????:?IN?STD_LOGIC;
?????????sub????????:?IN?STD_LOGIC;
?????????mul????????:?IN?STD_LOGIC;
?????????div????????:?IN?STD_LOGIC;
?????????enter??????:?IN?STD_LOGIC;
?????????current_state?:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);
?????????calcul?????:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0)
??????);
???END?COMPONENT;
???
???COMPONENT?num_in?IS
??????PORT?(
?????????clk????????:?IN?STD_LOGIC;
?????????esc????????:?IN?STD_LOGIC;
?????????key_0??????:?IN?STD_LOGIC;
?????????key_1??????:?IN?STD_LOGIC;
?????????key_2??????:?IN?STD_LOGIC;
?????????key_3??????:?IN?STD_LOGIC;
?????????key_4??????:?IN?STD_LOGIC;
?????????key_5??????:?IN?STD_LOGIC;
?????????key_6??????:?IN?STD_LOGIC;
?????????key_7??????:?IN?STD_LOGIC;
?????????key_8??????:?IN?STD_LOGIC;
?????????key_9??????:?IN?STD_LOGIC;
?????????current_state?:?IN?STD_LOGIC_VECTOR(2?DOWNTO?0);
?????????calcul?????:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0);
?????????OP_A???????:?OUT?integer;
?????????OP_B???????:?OUT?integer;
?????????OP_Result??:?OUT?integer
??????);
???END?COMPONENT;
????SIGNAL??clk????????:?STD_LOGIC;--时钟
?SIGNALreset???????:?STD_LOGIC;--低电平复位
??????
????SIGNAL??OP_A???????:?integer;--输入的操作数A
????SIGNAL??OP_B???????:?integer;--输入的操作数B
????SIGNAL??OP_Result??:?integer;--结果
???SIGNAL???esc????????:??STD_LOGIC;--ESC键
???SIGNAL???add????????:??STD_LOGIC;--加
???SIGNAL???sub????????:??STD_LOGIC;--减
???SIGNAL???mul????????:??STD_LOGIC;--乘
???SIGNAL???div????????:??STD_LOGIC;--除
???SIGNAL???enter??????:??STD_LOGIC;--Enter键
???
???SIGNAL?current_state???:?STD_LOGIC_VECTOR(2?DOWNTO?0);
???SIGNAL?calcul??????????:?STD_LOGIC_VECTOR(1?DOWNTO?0);
???
???SIGNAL?key_0_p?????????:?STD_LOGIC;
???SIGNAL?key_1_p?????????:?STD_LOGIC;
???SIGNAL?key_2_p?????????:?STD_LOGIC;
???SIGNAL?key_3_p?????????:?STD_LOGIC;
???SIGNAL?key_4_p?????????:?STD_LOGIC;
???SIGNAL?key_5_p?????????:?STD_LOGIC;
???SIGNAL?key_6_p?????????:?STD_LOGIC;
???SIGNAL?key_7_p?????????:?STD_LOGIC;
???SIGNAL?key_8_p?????????:?STD_LOGIC;
???SIGNAL?key_9_p?????????:?STD_LOGIC;
???
???--?Declare?intermediate?signals?for?referenced?outputs
???SIGNAL?OP_A_buf??????:?integer;
???SIGNAL?OP_B_buf??????:?integer;
???SIGNAL?OP_Result_buf?:?integer;
BEGIN
???--?Drive?referenced?outputs
???OP_A?<=?OP_A_buf;
???OP_B?<=?OP_B_buf;
???OP_Result?<=?OP_Result_buf;
???
???--状态控制模块
???i_state_ctrl?:?state_ctrl
??????PORT?MAP?(
?????????clk????????????=>?clk,--时钟
?????????esc????????????=>?esc,--ESC键
?????????add????????????=>?add,--加
?????????sub????????????=>?sub,--减
?????????mul????????????=>?mul,--乘
?????????div????????????=>?div,--除
?????????enter??????????=>?enter,--Enter键
?????????current_state??=>?current_state,--当前状态
?????????calcul?????????=>?calcul--计算
??????);
???
???
???--数字输入模块
???i_num_in?:?num_in
??????PORT?MAP?(
?????????clk????????????=>?clk,--时钟
?????????esc????????????=>?esc,
?????????key_0??????????=>?key_0_p,
?????????key_1??????????=>?key_1_p,
?????????key_2??????????=>?key_2_p,
?????????key_3??????????=>?key_3_p,
?????????key_4??????????=>?key_4_p,
?????????key_5??????????=>?key_5_p,
?????????key_6??????????=>?key_6_p,
?????????key_7??????????=>?key_7_p,
?????????key_8??????????=>?key_8_p,
?????????key_9??????????=>?key_9_p,
?????????current_state??=>?current_state,--当前状态
?????????calcul?????????=>?calcul,--计算方式,--00表示加--01表示减--10表示乘--11表示除
?????????OP_A???????????=>?OP_A_buf,--输入的操作数A
?????????OP_B???????????=>?OP_B_buf,--输入的操作数B
?????????OP_Result??????=>?OP_Result_buf--结果
??????);
--仿真
init?:?PROCESS??????????????????????????????????????????????????????????????????????????????????
BEGIN?
reset<='0';
?wait?for?200?ns;?
reset<='1';
??wait?for?200?ns;?
??
esc<='0';?--ESC键
add<='0';--加
sub<='0';?--减
mul<='0';--乘
div<='0';?--除
enter<='0';?--Enter键
?key_0_p<='0';
?key_1_p<='0';
?key_2_p<='0';
?key_3_p<='0';
?key_4_p<='0';
?key_5_p<='0';
?key_6_p<='0';
?key_7_p<='0';
?key_8_p<='0';
?key_9_p<='0';
?
?wait?for?200?ns;
?esc<='1';?
?wait?for?200?ns;
?esc<='0';???
?wait?for?200?ns;?
?
?key_1_p<='1';?
?wait?for?200?ns;
?key_1_p<='0';???
?wait?for?200?ns;
?--加
?add<='1';?
?wait?for?200?ns;
?add<='0';???
?wait?for?200?ns;
?key_2_p<='1';?
?wait?for?200?ns;
?key_2_p<='0';???
?wait?for?200?ns;
?
?enter<='1';?
?wait?for?200?ns;
?enter<='0';???
?wait?for?200?ns;?
--////////////////////////////////////////////?
?esc<='1';?
?wait?for?200?ns;
?esc<='0';???
?wait?for?200?ns;
?
?
?key_5_p<='1';?
?wait?for?200?ns;
?key_5_p<='0';???
?wait?for?200?ns;
?sub<='1';?
?wait?for?200?ns;
?sub<='0';???
?wait?for?200?ns;
?key_3_p<='1';?
?wait?for?200?ns;
?key_3_p<='0';???
?wait?for?200?ns;
?
?enter<='1';?
?wait?for?200?ns;
?enter<='0';???
?wait?for?200?ns;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=745

  • 2-2405131ZU0539.doc
    下载

相关推荐