目录
一.实例的内容
使用Verilog HDL设计一个简单8位处理器,可以实现两个8位操作数的4种操作。在设计的过程中,使用了函数调用的设计方法。
二.实例目标
- 掌握使用Verilog函数设计的方法
- 张伟Verilog设计的一般方法
1.原理简介
实现的处理器是一个8位处理器,只实现简单的4中操作:相加、相减、操作数减1和操作数加1。
2.代码分析
如下所示的简单处理器的代码:
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 = [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)
begin
out = op1 + op2; //实现两数相加或操作数1加1操作
end
else
begin
out = op1 - op2; //实现两数相减或操作数1减1操作
end
end
endmodule
这样就简单的实现了8位处理器进行4中操作的功能。可以添加其它的相关功能。