Files
fpga-stuff/gate/div3.v
2025-08-14 13:07:35 -07:00

48 lines
1.7 KiB
Verilog

`default_nettype none
/* verilator lint_off RISEFALLDLY */
/* verilator lint_off DECLFILENAME */
/* verilator lint_off PINCONNECTEMPTY */
/* verilator lint_off UNUSEDPARAM */
/* verilator lint_off ASSIGNDLY */
`include "../ice-chips-verilog/includes/helper.v"
`include "../ice-chips-verilog/source-7400/7404.v"
`include "../ice-chips-verilog/source-7400/7408.v"
`include "../ice-chips-verilog/source-7400/7432.v"
`include "../ice-chips-verilog/source-7400/7474.v"
/* verilator lint_on ASSIGNDLY */
/* verilator lint_on UNUSEDPARAM */
/* verilator lint_on PINCONNECTEMPTY */
/* verilator lint_on DECLFILENAME */
/* verilator lint_on RISEFALLDLY */
// cribbed from the baudrate generator here:
// https://gitlab.alfter.us/salfter/68b50-dual-serial/-/raw/202e1a1a8720a4ca1aa0a76b04521c2a77b40721/68b50-dual-serial.pdf?inline=false
// (which, in turn, can be found at https://www.onsemi.com/pub/Collateral/AND8001-D.PDF#page=3)
module div3(clk, r, q);
input wire clk;
input wire r;
output wire q;
wire [1:0] U3_A;
wire U3_Y;
ttl_7408 #(.BLOCKS(1), .WIDTH_IN(2)) U3(.A_2D(U3_A), .Y(U3_Y));
wire U1A_Q;
ttl_7474 #(.BLOCKS(1)) U1A(.Preset_bar(1'b1), .Clear_bar(r), .D(U3_Y), .Clk(clk), .Q(U1A_Q), .Q_bar(U3_A[0]));
wire U1B_Q;
ttl_7474 #(.BLOCKS(1)) U1B(.Preset_bar(1'b1), .Clear_bar(r), .D(U1A_Q), .Clk(clk), .Q(U1B_Q), .Q_bar(U3_A[1]));
wire U2C_Y;
ttl_7404 #(.BLOCKS(1)) U2C(.A(clk), .Y(U2C_Y));
wire U4A_Q;
/* verilator lint_off PINCONNECTEMPTY */
ttl_7474 #(.BLOCKS(1)) U4A(.Preset_bar(1'b1), .Clear_bar(r), .D(U1B_Q), .Clk(U2C_Y), .Q(U4A_Q), .Q_bar());
/* verilator lint_on PINCONNECTEMPTY */
ttl_7432 #(.BLOCKS(1), .WIDTH_IN(2)) U8(.A_2D({U1B_Q, U4A_Q}), .Y(q));
endmodule