您的位置 首页 软件

硬件描绘言语Verilog HDL规划进阶之:运用函数完成简略的处理器

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

4.8典型实例8:运用函数完结简略的处理器

4.8.1实例的内容及方针

1.实例内容

本实例运用VerilogHDL规划一个简略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)
2b00: begin
add_func=1;
opr2=instr[15:8]; //从instr中取第二个操作数
end
2b01: begin
add_func=0;
opr2=instr[15:8]; //从instr中取第二个操作数
end
2b10: begin
add_func=1;
opr2=8d1; //第二个操作数取为1,完结+1操作
end
2b11: begin
add_func=0;
opr2=8d1; //完结-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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/194304.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部