|
- module hc299( //具有三态双向IO的8位左右移位寄存器 VCC:Pin20 GND:Pin10
- input D0, //左移最低位输入 Pin11
- input D7, //右移最高位输入 Pin18
- input S0, //状态控制0 Pin1
- input S1, //状态控制1 Pin19
- input CLK, //时钟(上升沿触发) Pin12
- input OE1, //输出使能1 Pin2
- input OE2, //输出使能2 Pin3
- input MR, //异步下降沿将移位寄存器清零(复位) Pin9
- output Q0, //寄存器最低位(LSB)映射 Pin8
- output Q7, //寄存器最高位(MSB)映射 Pin17
- inout [7:0] IO //[8位宽] 双向IO 数据出入口 Pin:16,4,15,5,14,6,13,7
- );
- reg [7:0] Q = 8'd0; //8位移位寄存器Q
- assign {Q0,Q7} = {Q[0],Q[7]};
- assign IO = (OE1 || OE2 || (S0 && S1)) ? 8'bz : Q;
- always @(posedge CLK or negedge MR) begin
- if(!MR) begin
- Q <= 8'd0;
- end else begin
- case({S1,S0})
- 2'b00:Q <= Q; //保持
- 2'b01:Q <= {Q[6:0],D0}; //左移
- 2'b10:Q <= {D7,Q[7:1]}; //右移
- 2'b11:Q <= IO; //输入
- endcase
- end
- end
- endmodule
- module main(
- input D0,
- input D7,
- input S0,
- input S1,
- input CLK,
- input OE1,
- input OE2,
- input MR,
- output Q0,
- output Q7,
- inout [7:0] IO
- );
- hc299 U1(
- .D0(D0),
- .D7(D7),
- .S0(S0),
- .S1(S1),
- .CLK(CLK),
- .OE1(OE1),
- .OE2(OE2),
- .MR(MR),
- .Q0(Q0),
- .Q7(Q7),
- .IO(IO)
- );
- endmodule
复制代码 |
|