|
- module hc166( //具有异步复位8位并入串出移位寄存器 VCC:Pin16 GND:Pin8
- input SI, //串行移位输入 (接上一片的SO,第一片接地) Pin1
- input [7:0] D, //[8位并行输入] Pin:14,12,11,10,5,4,3,2
- input CLK, //上升沿串行移位 (必须SHLD高电平且INH低电平) Pin7
- input INH, //低电平使能CLK Pin6
- input SHLD, //低电平:异步并行输入寄存器 高电平:寄存器串行移位 Pin15
- input MR, //异步低电平复位 Pin9
- output SO //串行移位输出 (接控制芯片或下一片的SI) Pin13
- );
- reg [7:0] Q; //数据移位寄存器
- wire [7:0] R = SHLD ? 8'd0 : ~D;
- wire [7:0] S = SHLD ? 8'd0 : D;
- assign SO = Q[7];
- genvar i;
- generate
- for(i=0;i<8;i=i+1) begin:gen
- always @(posedge R[i] or posedge S[i] or posedge CLK or negedge MR) begin
- if(!MR || R[i]) begin
- Q[i] <= 1'b0;
- end else if(S[i]) begin
- Q[i] <= 1'b1;
- end else if(!INH) begin
- Q[i] <= i ? Q[i-1] : SI;
- end
- end
- end
- endgenerate
- endmodule
- module main(
- input SI,
- input [7:0] D,
- input CLK,
- input INH,
- input SHLD,
- input MR,
- output SO
- );
- hc166 hc166(
- .SI(SI),
- .D(D),
- .CLK(CLK),
- .INH(INH),
- .SHLD(SHLD),
- .MR(MR),
- .SO(SO)
- );
- endmodule
复制代码 |
|