新手遇到了困难,求解答:指令译码电路的设计实例
程序如下指令译码电路的设计实例
(利用电平敏感的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 有什么作用
希望大神解答小弟感激不尽 我也是新手哦,来说下吧,不过不一定对,仅供参考:
因为你要进行的是加减乘除运算,但加减乘除没法直接识别,就必须给他们都赋一个值,以供判定。
所以在开始你已经定义了//`define plus 3'd0,在之后调用的`plus就是3'd0。
case(opcode)就是对括号内的opcode进行判定,就和if语句的原理一样,当opcode==0时,为了方便起见就不写“0”,写成`plus,
这样就能进行你想要的运算了。。
讲的可能有点晕,不好意思啦 MARK case(opcode) 就像c中的switch(opcode)
`plus就像c中的case `plus ,用前面define
的内容(`define plus 3'd0)替换掉就是
switch(opcode){
case 3'd0 :
out=a+b;
..........
} 。。。
楼主先学一下verilog的简单语法吧,真的,老是纠结于这些基础性的东西很难提高的。
另:代码要自己写的,不能随便复制黏贴了事 回复【4楼】pontiff
。。。
楼主先学一下verilog的简单语法吧,真的,老是纠结于这些基础性的东西很难提高的。
另:代码要自己写的,不能随便复制黏贴了事
-----------------------------------------------------------------------
是啊,简单代码都不知,还是闭门炼修吧!
我也是新手,正在苦读verilog
页:
[1]