mirror of
https://github.com/aap/pdp6.git
synced 2026-01-21 18:24:44 +00:00
222 lines
3.7 KiB
Verilog
222 lines
3.7 KiB
Verilog
/*module pireq(
|
|
input wire piok_in,
|
|
input wire pih,
|
|
input wire pir,
|
|
output wire pireq,
|
|
output wire piok_out
|
|
);
|
|
wire a = piok_in & ~pih;
|
|
assign pireq = a & pir;
|
|
assign piok_out = a & ~pir;
|
|
endmodule*/
|
|
|
|
module pg(
|
|
input clk,
|
|
input reset,
|
|
input in,
|
|
output p
|
|
);
|
|
reg [1:0] x;
|
|
always @(posedge clk or posedge reset)
|
|
if(reset)
|
|
x <= 0;
|
|
else
|
|
x <= { x[0], in };
|
|
assign p = x[0] & !x[1];
|
|
endmodule
|
|
|
|
module pa(input clk, input reset, input in, output p);
|
|
reg p;
|
|
always @(posedge clk or posedge reset)
|
|
if(reset)
|
|
p <= 0;
|
|
else
|
|
p <= in;
|
|
endmodule
|
|
|
|
/* "bus driver", 40ns delayed pulse */
|
|
module bd(input clk, input reset, input in, output p);
|
|
reg [2:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 4;
|
|
endmodule
|
|
|
|
/* Same as above but with longer pulse. Used to pulse mb
|
|
* because one more clock cycle is needed to get the data
|
|
* after the pulse has been synchronizes. */
|
|
module bd2(input clk, input reset, input in, output p);
|
|
reg [2:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 4 || r == 5;
|
|
endmodule
|
|
|
|
module dly50ns(input clk, input reset, input in, output p);
|
|
reg [2:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 7;
|
|
endmodule
|
|
|
|
module dly100ns(input clk, input reset, input in, output p);
|
|
reg [3:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 12;
|
|
endmodule
|
|
|
|
module dly150ns(input clk, input reset, input in, output p);
|
|
reg [4:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 17;
|
|
endmodule
|
|
|
|
module dly200ns(input clk, input reset, input in, output p);
|
|
reg [4:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 22;
|
|
endmodule
|
|
|
|
module dly250ns(input clk, input reset, input in, output p);
|
|
reg [4:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 27;
|
|
endmodule
|
|
|
|
module dly400ns(input clk, input reset, input in, output p);
|
|
reg [5:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 42;
|
|
endmodule
|
|
|
|
module dly800ns(input clk, input reset, input in, output p);
|
|
reg [6:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 82;
|
|
endmodule
|
|
|
|
module dly1us(input clk, input reset, input in, output p);
|
|
reg [6:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 102;
|
|
endmodule
|
|
|
|
module dly100us(input clk, input reset, input in, output p);
|
|
reg [15:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 10002;
|
|
endmodule
|
|
|
|
module ldly100us(input clk, input reset, input in, output p, output l);
|
|
reg [15:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset)
|
|
r <= 0;
|
|
else begin
|
|
if(r)
|
|
r <= r + 1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 10002;
|
|
assign l = r != 0 && r < 10002;
|
|
endmodule
|
|
|