|
- module hc191( //四位可预置值的可逆二进制加减计数器 VCC:Pin16 GND:Pin8
- input [3:0] D, //[4位宽] 计数输入 Pin:9,10,1,15
- input CLK, //上升沿计数 Pin14
- input E, //低电平使能CLK并允许计数 高电平不计数 Pin4
- input DU, //低电平:加计数 高电平:减计数 Pin5
- input PL, //低电平装入计数(Q=D透明锁存) 高电平锁存并允许计数 Pin11
- output reg [3:0] Q, //[4位宽] 计数输出 Pin:7,6,2,3
- output RCO, //Pin13 CLK高电平或E高电平或TC低电平置1,否则清0 (级联接下一片CLK)
- output TC //Pin12 加计数Q全1或减计数Q全0置1,否则清0
- );
- initial Q = 4'd0;
- assign TC = DU ? !Q : &Q;
- assign RCO = |{!TC,CLK,E};
- wire [3:0] R = PL ? 4'd0 : ~D;
- wire [3:0] S = PL ? 4'd0 : D;
- wire [3:0] T = Q + {{3{DU}},1'b1};
- genvar i;
- generate
- for(i=0;i<4;i=i+1)begin:gen
- always @(posedge R[i] or posedge S[i] or posedge CLK) begin
- if(R[i] || S[i]) begin
- case({R[i],S[i]})
- 2'b01:Q[i] <= 1'b1;
- 2'b10:Q[i] <= 1'b0;
- default:Q[i] <= 1'bx;
- endcase
- end else if(CLK && !E) begin
- Q[i] <= T[i];
- end
- end
- end
- endgenerate
- endmodule
- module main(
- input clk, //50Mhz输入 Pin17
- output out //3.125Mhz输出(16分频) Pin40
- );
- wire [3:0] Q;
- hc191 U1(
- .D(4'd0),
- .CLK(clk),
- .E(1'b0),
- .DU(1'b0),
- .PL(1'b1),
- .Q(Q),
- .RCO(),
- .TC()
- );
- assign out = Q[3];
- endmodule
复制代码 |
|