时序逻辑电路浅析
时序电路时状态依赖的,所以又称为状态机。这里只限于讨论有限数量的存储单元构成的状态机,因而其状态数是有限的,称为有限状态机FSM(Finite State Machine)
。
时序逻辑电路具有以下主要特征:
- 时序逻辑电路由组合电路和存储电路组成;
- 时序逻辑电路的状态与时间因素有关,即时序电路在任一时刻的状态变量不仅是当前输入信号的函数,而且还是电路以前状态的函数,时序电路的输出信号由 输入信号和电路的状态共同决定。
用Verilog HDL描述时序逻辑电路
组合电路可以在逻辑门级通过调用内置的逻辑门元件进行描述,也可以使用数据流描述语句和行为级描述语句进行描述,而触发器通常使用行为级描述语句进行描述。
由于时序逻辑电路通常由触发器和逻辑门构成,所以可以将数据流描述语句和行为级描述语结合起来对它点逻辑功能(行为)进行描述。
移位寄存器的Verilog建模
通过行为级描述语句always
描述了一个4位双向一位寄存器,功能与74HCT194类似。
// Behavioral description of Universal shift register
module shift74x194(S1, S0, D, Dsl, Dsr, Q, CP, CR);
input S1, S0; // Select inputs
input Dsl, Dsr; // Serial Data inputs
input CP, CR; // Clock and Reset
input [3:0] D; // Prarllel Data input
output [3:0] Q; // Register output
reg [3:0] Q;
always @(posedge CP or negedge CR) begin
if ( ~CR ) begin
Q <= 4'b0000;
end else begin
case ({S1,S0})
2'b00: Q <= Q; // No change
2'b01: Q <= {Q[2:0], Dsr}; // Shift right
2'b10: Q <= {Dsl, Q[3:1]}; // Shift left
2'b11: Q <= D; // Parallel load input
endcase
end
end
endmodule
计数器的Verilog建模
同步二进制计数器
为提高计数速度,可采用同步计数器。(此处可能是因为异步计数器会因为传输延迟造成稳定工作的频率有限)
其特点是,计数脉冲作为时钟信号同时接于各位触发器的时钟脉冲输入端,在每次时钟脉冲沿到来之前,根据当前计数器状态,利用组合逻辑控制,准备号适当的条件。
当技术脉冲沿到来时,所有应翻转的触发器同时翻转,同时也使所有应保持原状的触发器不改变状态。
由于不存在异步计数器那种纹波进位造成的延迟时间积累,所以能取得较高的计数速度,输出编码也不会发生纹波进位时的那种混乱。
// Binary counter with parallel load and enable
module counter74x161( CEP, CET, PE, D, CP, CR, Q, TC);
input CEP, CET, PE, CP, CR;
input [3:0] D; // Data input
output TC; // Output carry
output [3:0] Q; // Data output
reg [3:0] Q;
wire CE;
assign CE = CEP & CET;
assign TC = CET & ( Q == 4'b1111);
always @ (posedge CP or negedge CR) begin
if ( ~CR ) begin
Q <= 4'b0000;
end else if ( ~PE ) begin
Q <= D;
end else if ( ~CE ) begin
Q <= Q;
end else begin
Q <= Q + 1'b1;
end
end
endmodule
异步二进制计数器
异步二进制计数器的原理,结构简单,因个触发器不是同时反转,而是逐级脉动反转实现计数进位的,故亦称为纹波计数器Ripple Counter
。
// Ripple counter
module ripplecounter(Q0, Q1, Q2, Q3, CP, CR);
output Q0, Q1, Q2, Q3,;
input CP,CR;
// Instantiate D flip-flop
D_FF FF0 (Q0, ~Q0, CP, ~CR);
D_FF FF1 (Q1, ~Q1, Q0, ~CR);
D_FF FF2 (Q2, ~Q2, Q1, ~CR);
D_FF FF3 (Q3, ~Q3, Q2, ~CR);
endmodule
// module D_FF with asyncchronous reset
module D_FF (Q, D, CP, Rd);
output Q;
input D, CP, Rd;
reg Q;
always @(negedge CP or negedge Rd) begin
if ( ~Rd ) begin
Q <= 1'b0;
end else begin
Q <= D;
end
end
endmodule
状态图的Verilog建模
这里的内容在书中介绍的比较简单,对于状态机行为描述,后续会参考其他资料另行补充。