加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 4.8  典型实例8:使用函数实现简单的处理器
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

硬件描述语言Verilog HDL设计进阶之:使用函数实现简单的处理器

2013/08/26
1
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

4.8  典型实例8:使用函数实现简单的处理器

4.8.1  实例的内容及目标

1.实例内容

本实例使用Verilog HDL设计一个简单8位处理器,可以实现两个8位操作数的4种操作。在设计过程中,使用了函数调用的设计方法。

2.实例目标

通过本实例,读者应达到下面的一些目的。

·  掌握使用Verilog函数设计的方法。

·  掌握Verilog设计的一般方法。

4.8.2  原理简介

处理器发展到现在,已经变成一个功能极其强大,设计也极为复杂的单元。现在一颗小小的CPU的运算能力远远的超过了以前的超级计算机的能力。虽然处理器处理能力的提高和很多方面的因素有关,可是处理器最终要完成的目标还是早期CPU设计时的那个目标,那就是使用操作码实现对操作数的控制和计算。

在本实例中,实现的处理器是一个8位处理器,只实现简单的4种操作:相加、相减、操作数减1和操作数加1。通过这4种操作向读者展示如何使用Verilog语言设计看似复杂的CPU单元。

当然,这个处理器只是一个算术单元,处理器还包括很多其他的功能,在此不进行介绍,感兴趣的读者可以查阅相关的书籍,按照本实例提供的设计方向补充和完善这个处理器。

4.8.3  代码分析 

下面给出这个处理器的Verilog源代码,读者可以将此处理器模块实例化至自己的工程设计中。

module mpc(instr,out);
          //端口说明
          input[17:0] instr;               //输入指令
          output[8:0] out;           //输出结果
          //内部信号说明
          reg[8:0] out;
          reg func;                     //指令中提取出的操作码的内部变量
          reg[7:0] op1,op2;        //从指令中提取的两个操作数
          //函数声明
          function[16:0] code_add;  //函数的定义,返回一个17位的指令
            input[17:0] instr;       //函数的输入,采用与模块输入同样的命名,可不同
            //函数内部信号说明
            reg add_func;             //函数内部的操作码变量
            reg[2:0] code;          //操作码
            reg[7:0] opr1,opr2;    //两个操作数
           
            begin
                 code=instr[17:16]; //输入指令instr的高2位为操作码code
                 opr1=instr[7:0];   //输入指令instr的低8位为操作数opr1
                 //通过case语句判断操作码的类型,获得操作数opr2
                 case(code)
                       2'b00: begin
                             add_func=1;
                             opr2=instr[15:8]; //从instr中取第二个操作数
                             end
                       2'b01: begin
                             add_func=0;
                             opr2=instr[15:8]; //从instr中取第二个操作数
                             end
                       2'b10: begin
                             add_func=1;
                             opr2=8'd1;           //第二个操作数取为1,实现+1操作
                             end
                       2'b11: begin
                             add_func=0;
                             opr2=8'd1;           //实现-1操作
                             end
                       endcase
                       code_add={add_func,opr2,opr1}; //函数的返回值
            end
            endfunction
            //函数调用模块
            always @(instr) begin
              {func,op2,op1}=code_add(instr);   //调用函数
              if(func==1)
                      out=op1+op2;                  //实现两数相加或操作数1加1操作
              else
                      out=op1-op2;                  //实现两数相减或操作数1减1操作
              end
endmodule

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
A3P400-FGG256I 1 Microsemi Corporation Field Programmable Gate Array, 9216 CLBs, 400000 Gates, 350MHz, CMOS, PBGA256, 17 X 17 MM, 1.60 MM HEIGHT, 1 MM PITCH, GREEN, FBGA-256
$60.81 查看
EP2C8Q208C7N 1 Intel Corporation Field Programmable Gate Array, 516 CLBs, 450MHz, 8256-Cell, CMOS, PQFP208, LEAD FREE, PLASTIC, QFP-208

ECAD模型

下载ECAD模型
$358.54 查看
LFE3-35EA-8FN484C 1 Lattice Semiconductor Corporation Field Programmable Gate Array, 500MHz, 33000-Cell, PBGA484, 23 X 23 MM, LEAD FREE, FPBGA-484

ECAD模型

下载ECAD模型
$48.92 查看

相关推荐

电子产业图谱

华清远见(www.farsight.com.cn)是国内领先嵌入师培训机构,2004年注册于中国北京海淀高科技园区,除北京总部外,上海、深圳、成都、南京、武汉、西安、广州均有直营分公司。华清远见除提供嵌入式相关的长期就业培训、短期高端培训、师资培训及企业员工内训等业务外,其下属研发中心还负责嵌入式、Android及物联网方向的教学实验平台的研发及培训教材的出版,截止目前为止已公开出版70余本嵌入式/移动开发/物联网相关图书。企业理念:专业始于专注 卓识源于远见。企业价值观:做良心教育、做专业教育,更要做受人尊敬的职业教育。