1
0
mirror of https://github.com/aap/pdp6.git synced 2026-01-21 18:24:44 +00:00
aap.pdp6/verilog/modules.v

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