用yacc编写的算术运算计算器_10天学会四则运算小计算器设计之第5天

02b0d76dfa455c5d7153f8e168d2367a.png

4517ebef3dfdb2bc7c956a66c168cf09.png

写在前面的话

    我大学本科学的是测控专业,2012年考取首都师范大学物理系研究生。我从未学习过数字电路设计,对FPGA和Verilog语言没有任何概念,更没有设计数字电路系统的基础和经验,也从未自己动手装配和完成过一台能实际运行的电子系统。但我从小就对电子设计有浓厚的兴趣。为什么小小的计算器按几下就能完成非常复杂的数学计算,一直困惑着我,激起我年轻的好奇心。大学四年里,虽然学习过“数字电路”和“模拟电路”课程,考试成绩也很不错,但对我而言,计算器是如何设计的,仍旧是一头雾水。

    听同学们说,如果掌握了FPGA设计,这个谜就能找到答案。我用关键字“FPGA培训”在百度搜索,发现一个公司正在开设FPGA就业培训(100天)班,也知道这个班由北京航空航天大学的夏宇闻教授亲自讲授和管理。于是下定决心抽出3个月时间,认真学习一下FPGA。经过100天的学习和练习,我初步掌握了如何用FPGA芯片设计和搭建复杂数字系统。现在我有充分的信心,只要设计需求明确,我完全有能力独立设计并完成一个较复杂的数字系统,并能可靠地完成预先设定的数据 处理任务。这个阶段的学习给了我很多启发,也增强了我的信心,很想把自己的感受和学习心得编写成小册子与大家分享。我的想法得到夏宇闻教授的支持。于是我把学习期间的心路历程和学到的知识、经验略加整理,以日记的形式写出来,与大家分享,希望能给打算学习Verilog和FPGA设计的初学者一些帮助和启发,起到抛砖引玉的作用。

    本书使用的硬件为至芯科技的四代开发板、Altera CycloneⅣ的芯片,软件为QuartusⅡ13.0 sp1。 

——作者

1

设计需求讲解

今天的设计任务有两项:1)完成计算器中负责二进制四则运算的算术逻辑模块(即alu0)。2)改写计算控制状态机模块(即key2bcd1)。算术逻辑模块是计算机设计中最后一个小模块。它运行所需的准备工作几乎都是由以前调试通过的模块完成的。操作数a和b,以及操作符opcode都可以从键盘输入,并转换为二进制数存入寄存器A、B。算术逻辑模块 alu0只需做相应的算术运算即可。

b1ad00efded9e2e3fba700f1d381e039.png

2

设计工具使用讲解

我们需要新建一个文件来作为计算模块。

选择File–New–Verilog HDL File,如图5-1所示,然后点击下面的OK按钮。

dedc2e2927564a93ef6f589a07572a88.png

图5-1 新建文件

1、计算模块的可综合代码

计算模块的可综合代码如下:

module alu0(a, b, clk, rst_n, opcode, bin_data);

    input [23:0] a,b;
    input clk;
    input rst_n;
    input [3:0] opcode;

    output reg [24:0] bin_data;

    always @ (posedge clk or negedge rst_n)
    begin
        if(!rst_n)
        begin
            bin_data <= 0;
        end
        else
        begin
            case(opcode)
                10: begin bin_data <= a + b; end  
                11: begin bin_data <= a - b; end  
                12: begin bin_data <= a * b; end  
                13:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值