`timescale 1ns / 1ps
|
`timescale 1ns / 1ps
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
// Company:
|
// Company:
|
// Engineer:
|
// Engineer:
|
//
|
//
|
// Create Date: 00:16:54 11/16/2009
|
// Create Date: 00:16:54 11/16/2009
|
// Design Name: i8255
|
// Design Name: i8255
|
// Module Name: /home/malasar/projects/fpga/i8080/tsti8255.v
|
// Module Name: /home/malasar/projects/fpga/i8080/tsti8255.v
|
// Project Name: i8080
|
// Project Name: i8080
|
// Target Device:
|
// Target Device:
|
// Tool versions:
|
// Tool versions:
|
// Description:
|
// Description:
|
//
|
//
|
// Verilog Test Fixture created by ISE for module: i8255
|
// Verilog Test Fixture created by ISE for module: i8255
|
//
|
//
|
// Dependencies:
|
// Dependencies:
|
//
|
//
|
// Revision:
|
// Revision:
|
// Revision 0.01 - File Created
|
// Revision 0.01 - File Created
|
// Additional Comments:
|
// Additional Comments:
|
//
|
//
|
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
module tsti8255;
|
module tsti8255;
|
|
|
// Inputs
|
// Inputs
|
reg reset;
|
reg reset;
|
reg ncs;
|
reg ncs;
|
reg nrd;
|
reg nrd;
|
reg nwr;
|
reg nwr;
|
reg [1:0] addr;
|
reg [1:0] addr;
|
// Bidirs
|
// Bidirs
|
wire [7:0] data;
|
wire [7:0] data;
|
wire [7:0] pa;
|
wire [7:0] pa;
|
reg pae;
|
reg pae;
|
wire [7:0] pb;
|
wire [7:0] pb;
|
reg pbe;
|
reg pbe;
|
wire [3:0] pch;
|
wire [3:0] pch;
|
reg pche;
|
reg pche;
|
wire [3:0] pcl;
|
wire [3:0] pcl;
|
reg pcle;
|
reg pcle;
|
wire clk;
|
wire clk;
|
reg oflag;
|
reg oflag;
|
reg pause;
|
reg pause;
|
reg [7:0] newval;
|
reg [7:0] newval;
|
reg [7:0] step;
|
reg [7:0] step;
|
reg [7:0] wrtport;
|
reg [7:0] wrtport;
|
reg [7:0] resetret;
|
reg [7:0] resetret;
|
reg [7:0] writeret;
|
reg [7:0] writeret;
|
clck clk1(clk);
|
clck clk1(clk);
|
// Instantiate the Unit Under Test (UUT)
|
// Instantiate the Unit Under Test (UUT)
|
i8255 uut (
|
i8255 uut (
|
.data(data),
|
.data(data),
|
.reset(reset),
|
.reset(reset),
|
.ncs(ncs),
|
.ncs(ncs),
|
.nrd(nrd),
|
.nrd(nrd),
|
.nwr(nwr),
|
.nwr(nwr),
|
.addr(addr),
|
.addr(addr),
|
.pa(pa),
|
.pa(pa),
|
.pb(pb),
|
.pb(pb),
|
.pch(pch),
|
.pch(pch),
|
.pcl(pcl)
|
.pcl(pcl)
|
);
|
);
|
|
|
initial begin
|
initial begin
|
// Initialize Inputs
|
// Initialize Inputs
|
reset <= 1;
|
reset <= 1;
|
pae<=0;
|
pae<=0;
|
pche<=0;
|
pche<=0;
|
wrtport<=0;
|
wrtport<=0;
|
pause<=0;
|
|
ncs <= 1;
|
ncs <= 1;
|
nrd <= 1;
|
nrd <= 1;
|
nwr <= 1;
|
nwr <= 1;
|
addr <= 2'b11;
|
addr <= 2'b11;
|
oflag<=0;
|
oflag<=0;
|
newval<=0;
|
newval<=0;
|
step<=6;
|
step<=6;
|
resetret<=0;
|
resetret<=0;
|
writeret<=0;
|
writeret<=0;
|
#10 $finish();
|
#10 $finish();
|
|
|
// Add stimulus here
|
// Add stimulus here
|
|
|
end
|
end
|
assign data=(oflag)?newval:8'bz;
|
assign data=(oflag)?newval:8'bz;
|
assign pa=(pae)?wrtport:8'bz;
|
assign pa=(pae)?wrtport:8'bz;
|
assign pch=(pche)?wrtport[7:4]:8'bz;
|
assign pch=(pche)?wrtport[7:4]:8'bz;
|
|
|
always @(posedge clk) begin
|
always @(posedge clk) begin
|
if (reset==1) begin
|
if (reset==1) begin
|
ncs<=0;
|
ncs<=0;
|
reset<=0; //#2
|
reset<=0; //#2
|
end
|
end
|
else begin
|
else begin
|
case (step)
|
case (step)
|
0: begin
|
0: begin
|
newval<=8'b10000000; //#4
|
newval<=8'b10000000; //#4
|
oflag<=1;
|
oflag<=1;
|
step<=33;
|
step<=33;
|
resetret<=2;
|
resetret<=2;
|
writeret<=32;
|
writeret<=32;
|
ncs<=0;
|
ncs<=0;
|
end
|
end
|
2: begin
|
2: begin
|
newval<=8'h35; //#10
|
newval<=8'h35; //#10
|
oflag<=1;
|
oflag<=1;
|
addr<=0;
|
addr<=0;
|
step<=33;
|
step<=33;
|
resetret<=3;
|
resetret<=3;
|
writeret<=32;
|
writeret<=32;
|
end
|
end
|
3: begin
|
3: begin
|
newval=8'h0;
|
newval<=8'h0;
|
nrd=1;
|
nrd<=1;
|
nwr=1;
|
nwr<=1;
|
step=4;
|
step<=4;
|
end
|
end
|
4: begin
|
4: begin
|
newval=8'b10100000;
|
newval<=8'b10100000;
|
addr=2;
|
addr<=2;
|
nrd=1;
|
nrd<=1;
|
nwr=0;
|
nwr<=0;
|
step=5;
|
step<=5;
|
end
|
end
|
6: begin
|
6: begin
|
newval=8'b10010000; //a-output, c -input //#4
|
newval<=8'b10010000; //a-output, c -input //#4
|
addr=3;
|
addr<=3;
|
oflag=1;
|
oflag<=1;
|
pae=0;
|
pae<=0;
|
step=33;
|
step<=33;
|
resetret=7;
|
resetret<=7;
|
writeret=32;
|
writeret<=32;
|
end
|
end
|
7: begin
|
7: begin
|
wrtport=8'b11010000; //#10
|
wrtport<=8'b11010000; //#10
|
pae=1;
|
pae<=1;
|
//pche=1;
|
//pche=1;
|
oflag=0;
|
oflag<=0;
|
addr=0;
|
addr<=0;
|
nrd=0;
|
nrd<=0;
|
nwr=1;
|
nwr<=1;
|
step=32;
|
step<=32;
|
resetret=8;
|
resetret<=8;
|
end
|
end
|
8: begin
|
8: begin
|
newval=8'b10100000;
|
newval<=8'b10100000;
|
//pae=0;
|
//pae=0;
|
pche=1;
|
pche<=1;
|
oflag=1;
|
oflag<=1;
|
addr=0;
|
addr<=0;
|
nrd=1;
|
nrd<=1;
|
nwr=0;
|
nwr<=0;
|
step=10;
|
step<=10;
|
end
|
end
|
9: begin
|
9: begin
|
pae=0;
|
pae<=0;
|
addr=0;
|
addr<=0;
|
nrd=0;
|
nrd<=0;
|
nwr=1;
|
nwr<=1;
|
step=10;
|
step<=10;
|
end
|
end
|
32: begin
|
32: begin //reset step
|
oflag=0;
|
oflag<=0;
|
nrd=1;
|
nrd<=1;
|
nwr=1;
|
nwr<=1;
|
step=resetret;
|
step<=resetret;
|
end
|
end
|
33: begin //write routine
|
33: begin //write routine
|
nwr=0;
|
nwr<=0;
|
nrd=1;
|
nrd<=1;
|
step=writeret;
|
step<=writeret;
|
end
|
end
|
|
|
endcase
|
endcase
|
end
|
end
|
end
|
end
|
|
|
|
|
endmodule
|
endmodule
|
|
|
|
|