|
- module cd4021( //8位并行输入串行3输出异步移位寄存器 VCC:Pin16 GND:Pin8
- input SIN, //级联串行输入 Pin11
- input [7:0] D, //[8位宽] 并行输入D Pin:1,15,14,13,4,5,6,7
- input CLK, //CLK时钟 (上升沿触发) Pin10
- input PS, //高电平:Q=D透明 低电平:允许Q移位 Pin9
- output Q5, //串行输出Q5 Pin2
- output Q6, //串行输出Q6 Pin12
- output Q7 //串行输出Q7 Pin13
- );
- reg [7:0] Q = 8'd0;
- wire [7:0] R = PS ? ~D : 8'd0;
- wire [7:0] S = PS ? D : 8'd0;
- assign {Q7,Q6,Q5} = Q[7:5];
- genvar i;
- generate
- for(i=0;i<8;i=i+1) begin:gen
- always @(posedge R[i] or posedge S[i] or posedge CLK) begin
- if(R[i]) begin
- Q[i] <= 1'b0;
- end else if(S[i]) begin
- Q[i] <= 1'b1;
- end else begin
- Q[i] <= i ? Q[i-1] : SIN;
- end
- end
- end
- endgenerate
- endmodule
- module main(
- input SIN,
- input [7:0] D,
- input CLK,
- input PS,
- output Q5,
- output Q6,
- output Q7
- );
- cd4021 U1(
- .SIN(SIN),
- .D(D),
- .CLK(CLK),
- .PS(PS),
- .Q5(Q5),
- .Q6(Q6),
- .Q7(Q7)
- );
- endmodule
复制代码
|
|