Files
nand2tetris_verilog/alu_tb.v
2024-06-14 13:55:39 -07:00

77 lines
1.9 KiB
Verilog

`include "alu.v"
module ALU_test;
reg [15:0] x, y;
reg zx, nx, zy, ny, f, no;
wire [15:0] out;
wire zr, ng;
integer i;
initial begin
$dumpfile("alu_tb.vcd");
$dumpvars;
x=16'hAA55;
y=16'h5555;
{zx, nx, zy, ny, f, no}=6'b101010; // 0
#1; // should get 0
{zx, nx, zy, ny, f, no}=6'b111111; // 1
#1; // should get 1
{zx, nx, zy, ny, f, no}=6'b111010; // -1
#1; // should get -1
{zx, nx, zy, ny, f, no}=6'b001100; // x
#1; // should return 0xAA55
{zx, nx, zy, ny, f, no}=6'b110000; // y
#1; // should return 0x5555
{zx, nx, zy, ny, f, no}=6'b001101; // !x
#1; // should return 0x55AA
{zx, nx, zy, ny, f, no}=6'b110001; // !y
#1; // should return 0xAAAA
{zx, nx, zy, ny, f, no}=6'b001111; // -x
#1; // should return 0x55AB
{zx, nx, zy, ny, f, no}=6'b110011; // -y
#1; // should return 0xAAAB
{zx, nx, zy, ny, f, no}=6'b011111; // x++
#1; // should return 0xAA56
{zx, nx, zy, ny, f, no}=6'b110111; // y++
#1; // should return 0x5556
{zx, nx, zy, ny, f, no}=6'b001110; // x--
#1; // should return 0xAA54
{zx, nx, zy, ny, f, no}=6'b110010; // y--
#1; // should return 0x5554
{zx, nx, zy, ny, f, no}=6'b000010; // x+y
#1; // should return 0xFFAA
{zx, nx, zy, ny, f, no}=6'b010011; // x-y
#1; // should return 0x5500
{zx, nx, zy, ny, f, no}=6'b000111; // y-x
#1; // should return 0xAB00
{zx, nx, zy, ny, f, no}=6'b000000; // x&y
#1; // should return 0x0055
{zx, nx, zy, ny, f, no}=6'b010101; // x|y
#1; // should return 0xFF55
$finish();
end
ALU u1(.x(x), .y(y), .zx(zx), .nx(nx), .zy(zy), .ny(ny), .f(f), .no(no), .out(out), .zr(zr), .ng(ng));
endmodule