mirror of
https://github.com/aap/pdp6.git
synced 2026-01-13 15:27:46 +00:00
304 lines
5.1 KiB
Verilog
304 lines
5.1 KiB
Verilog
// input 100mhz, output ~60hz
|
|
module clk60hz(
|
|
input wire clk,
|
|
output wire outclk
|
|
);
|
|
reg [21:0] cnt = 0;
|
|
assign outclk = cnt == 1666666;
|
|
always @(posedge clk)
|
|
if(outclk)
|
|
cnt <= 0;
|
|
else
|
|
cnt <= cnt + 22'b1;
|
|
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 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 + 3'b1;
|
|
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 synchronized. */
|
|
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 + 3'b1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 4 || r == 5 || r == 6 || r == 7;
|
|
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 + 3'b1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 7;
|
|
endmodule
|
|
|
|
module dly70ns(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 + 4'b1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 9;
|
|
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 + 4'b1;
|
|
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 + 5'b1;
|
|
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 + 5'b1;
|
|
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 + 5'b1;
|
|
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 + 6'b1;
|
|
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 + 7'b1;
|
|
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 + 7'b1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 102;
|
|
endmodule
|
|
|
|
module ldly1us(input clk, input reset, input in, output p, output reg l);
|
|
reg [6:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset) begin
|
|
l <= 0;
|
|
r <= 0;
|
|
end else begin
|
|
if(r)
|
|
r <= r + 7'b1;
|
|
if(in) begin
|
|
l <= 1;
|
|
r <= 1;
|
|
end
|
|
if(r == 101) begin
|
|
l <= 0;
|
|
//r <= 0;
|
|
end
|
|
end
|
|
end
|
|
assign p = r == 102;
|
|
endmodule
|
|
|
|
module ldly1_5us(input clk, input reset, input in, output p, output reg l);
|
|
reg [7:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset) begin
|
|
l <= 0;
|
|
r <= 0;
|
|
end else begin
|
|
if(r)
|
|
r <= r + 8'b1;
|
|
if(in) begin
|
|
l <= 1;
|
|
r <= 1;
|
|
end
|
|
if(r == 151) begin
|
|
l <= 0;
|
|
//r <= 0;
|
|
end
|
|
end
|
|
end
|
|
assign p = r == 152;
|
|
endmodule
|
|
|
|
module ldly2us(input clk, input reset, input in, output p, output reg l);
|
|
reg [7:0] r;
|
|
always @(posedge clk or posedge reset) begin
|
|
if(reset) begin
|
|
l <= 0;
|
|
r <= 0;
|
|
end else begin
|
|
if(r)
|
|
r <= r + 8'b1;
|
|
if(in) begin
|
|
l <= 1;
|
|
r <= 1;
|
|
end
|
|
if(r == 201) begin
|
|
l <= 0;
|
|
//r <= 0;
|
|
end
|
|
end
|
|
end
|
|
assign p = r == 202;
|
|
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 + 16'b1;
|
|
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 + 16'b1;
|
|
if(in)
|
|
r <= 1;
|
|
end
|
|
end
|
|
assign p = r == 10002;
|
|
assign l = r != 0 && r < 10002;
|
|
endmodule
|
|
|