Arithmetic Woloop
Arithmetic Woloop
reg [15:0]out;
always@(command_in)
begin
case(command_in)
ADD: out=a+b;
INC: out=a+1;
SUB: out=a-b;
DEC: out=a-1;
MUL: out=a*b;
DIV: out=a/b;
SHL: out=a<<b;
SHR: out=a>>b;
AND: out=a&b;
OR: out=a|b;
INV: out=~a;
NAND:out=~(a&b);
NOR:out=~(a|b);
XOR:out=a^b;
XNOR:out=~(a^b);
BUF:out=a;
default: out=16'h0000;
endcase
end
reg [4*8:1]string_cmd;
alu_wo_loop dut(a,b,command,enable,out);
task initialize;
begin
{a,b}=16'h0000;
end
endtask
task delay();
begin
#10;
end
endtask
always@(command)
begin
case (command)
ADD : string_cmd = "ADD";
INC : string_cmd = "INC";
SUB : string_cmd = "SUB";
DEC : string_cmd = "DEC";
MUL : string_cmd = "MUL";
DIV : string_cmd = "DIV";
SHL : string_cmd = "SHL";
SHR : string_cmd = "SHR";
INV : string_cmd = "INV";
AND : string_cmd = "AND";
OR : string_cmd = "OR";
NAND : string_cmd = "NAND";
NOR : string_cmd = "NOR";
XOR : string_cmd = "XOR";
XNOR : string_cmd = "XNOR";
BUF : string_cmd= "BUF";
endcase
end
initial
begin
initialize;
en_oe(1);
inputs(8'd25,8'd17);
cmd(ADD);
delay ;
$finish;
end
initial
$monitor("Input oe=%d, a=%d, b=%d, command=%s, Output
out=%d",enable,a,b,string_cmd,out);
endmodule