a14730497 发表于 2011-10-21 21:27:21

新手遇到了困难,求解答:指令译码电路的设计实例

程序如下
指令译码电路的设计实例
(利用电平敏感的always块来设计组合逻辑)
//操作码的宏定义
`define plus   3'd0
`define minus    3'd1
`define band   3'd2
`define bor   3'd3
`define unegate 3'd4

module alu(out,opcode,a,b);
output out;
input opcode;
input a,b;
reg    out;

always @(opcode or a or b)
//用电平敏感的always块描述组合逻辑
begin
case(opcode)
//算术运算
`plus: out=a+b;
`minus: out=a-b;
//位运算
`band: out=a&b;
`bor:out=a|b;
//单目运算
`unegate: out=~a;
default:out=8'hx;
endcase
end
endmodule

期中
case(opcode)
//算术运算
`plus: out=a+b;
`minus: out=a-b;
//位运算
`band: out=a&b;
`bor:out=a|b;
//单目运算
`unegate: out=~a;

能不能解答下是什么意思   
case(opcode)   什么作用
`plus          有什么作用

希望大神解答小弟感激不尽

majk1990 发表于 2011-10-21 21:47:26

我也是新手哦,来说下吧,不过不一定对,仅供参考:
因为你要进行的是加减乘除运算,但加减乘除没法直接识别,就必须给他们都赋一个值,以供判定。
所以在开始你已经定义了//`define plus   3'd0,在之后调用的`plus就是3'd0。
case(opcode)就是对括号内的opcode进行判定,就和if语句的原理一样,当opcode==0时,为了方便起见就不写“0”,写成`plus,
这样就能进行你想要的运算了。。

讲的可能有点晕,不好意思啦

cAso 发表于 2011-10-21 22:00:33

MARK

.oOo. 发表于 2011-10-22 07:46:59

case(opcode) 就像c中的switch(opcode)
`plus就像c中的case `plus ,用前面define
的内容(`define plus   3'd0)替换掉就是
switch(opcode){
    case 3'd0 :
      out=a+b;
    ..........
}

pontiff 发表于 2011-10-22 14:29:54

。。。
楼主先学一下verilog的简单语法吧,真的,老是纠结于这些基础性的东西很难提高的。
另:代码要自己写的,不能随便复制黏贴了事

cexo 发表于 2011-10-22 16:30:31

回复【4楼】pontiff
。。。
楼主先学一下verilog的简单语法吧,真的,老是纠结于这些基础性的东西很难提高的。
另:代码要自己写的,不能随便复制黏贴了事
-----------------------------------------------------------------------

是啊,简单代码都不知,还是闭门炼修吧!

我也是新手,正在苦读verilog
页: [1]
查看完整版本: 新手遇到了困难,求解答:指令译码电路的设计实例