Verilog HDL刷题笔记(08)(Circuit-Sequential Logic-Latches anf flip-flops)
81.A D flip-flop is a circuit that stores a bit and is updated periodically, at the (usually) positive edge of a clock signal.
D flip-flops are created by the logic synthesizer when a clocked always block is used (See alwaysblock2). A D flip-flop is the simplest form of "blob of combinational logic followed by a flip-flop" where the combinational logic portion is just a wire.
Create a single D flip-flop.
module top_module (
input clk, // Clocks are used in sequential circuits
input d,
output reg q );//
always@(posedge clk)
q<=d;
// Use a clocked always block
// copy d to q at every positive edge of clk
// Clocked always blocks should use non-blocking assignments
endmodule
82.Create 8 D flip-flops. All DFFs should be triggered by the positive edge of clk.
module top_module (
input clk,
input [7:0] d,
output [7:0] q
);
always@(posedge clk)
q<=d;
endmodule
83.Create 8 D flip-flops with active high synchronous reset. All DFFs should be triggered by the positive edge of clk.
module top_module (
input clk,
input reset, // Synchronous reset
input [7:0] d,
output [7:0] q
);
always@(posedge clk) begin
if(reset)
q<=8'b00000000;
else
q<=d;
end
endmodule
84.Create 8 D flip-flops with active high synchronous reset. The flip-flops must be reset to 0x34 rather than zero. All DFFs should be triggered by the negative edge of clk.
Hint:Resetting a register to '1' is sometimes called "preset"
[注]十六进制数的表示方式为0x开头,0x34 = 48+4 = 52=8'b00110100。
module top_module (
input clk,
input reset,
input [7:0] d,
output [7:0] q
);
always@(negedge clk) begin
if(reset)
q<=8'b00110100;
else
q<=d;
end
endmodule
85.Create 8 D flip-flops with active high asynchronous reset. All DFFs should be triggered by the positive edge of clk.
Hint:The only difference in code between synchronous and asynchronous reset flip-flops is in the sensitivity list.
注意敏感列表写法
module top_module (
input clk,
input areset, // active high asynchronous reset
input [7:0] d,
output [7:0] q
);
always@(posedge areset or posedge clk) begin
if(areset)
q<=8'b00000000;
else
q<=d;
end
endmodule
86.Create 16 D flip-flops. It's sometimes useful to only modify parts of a group of flip-flops. The byte-enable inputs control whether each byte of the 16 registers should be written to on that cycle. byteena[1] controls the upper byte d[15:8], while byteena[0] controls the lower byte d[7:0].
resetn is a synchronous, active-low reset.
All DFFs should be triggered by the positive edge of clk.
module top_module (
input clk,
input resetn,
input [1:0] byteena,
input [15:0] d,
output [15:0] q
);
always@(posedge clk) begin
if (~resetn)
q<=16'd0;
else begin
if (byteena[1])
q[15:8]<=d[15:8];
else
;
if (byteena[0])
q[7:0]<=d[7:0];
else
;
end
end
endmodule
87.Implement the following circuit:
Note that this is a latch, so a Quartus warning about having inferred a latch is expected.
Hint:
- Latches are level-sensitive (not edge-sensitive) circuits, so in an always block, they use level-sensitive sensitivity lists.
- However, they are still sequential elements, so should use non-blocking assignments.
- A D-latch acts like a wire (or non-inverting buffer) when enabled, and preserves the current value when disabled.
module top_module (
input d,
input ena,
output reg q);
always@(*) begin
if (ena)
q <= d;
end
endmodule
88.Implement the following circuit:
module top_module (
input clk,
input d,
input ar, // asynchronous reset
output q);
always@(posedge clk or posedge ar) begin
if (ar)
q<=0;
else
q<=d;
end
endmodule
89.Implement the following circuit:
module top_module (
input clk,
input d,
input r, // synchronous reset
output q);
always@(posedge clk) begin
if (r)
q<=0;
else
q<=d;
end
endmodule
90.Implement the following circuit:
module top_module (
input clk,
input in,
output out);
wire d;
always@(posedge clk)
out<=d;
assign d=in^out;
endmodule
91.Consider the sequential circuit below:
Assume that you want to implement hierarchical Verilog code for this circuit, using three instantiations of a submodule that has a flip-flop and multiplexer in it. Write a Verilog module (containing one flip-flop and multiplexer) named top_module for this submodule.
module top_module (
input clk,
input L,
input r_in,
input q_in,
output reg Q);
wire d;
always@(posedge clk)
Q<=d;
assign d=(L)?r_in:q_in;
endmodule
92.Consider the n-bit shift register circuit shown below:
Write a Verilog module named top_module for one stage of this circuit, including both the flip-flop and multiplexers.
module top_module (
input clk,
input w, R, E, L,
output Q
);
wire d1,d2;
always@(posedge clk)
Q<=d2;
assign d1=(E)?w:Q;
assign d2=(L)?R:d1;
endmodule
//PS.20.07.18
module top_module (
input clk,
input w, R, E, L,
output Q
);
always@(posedge clk) begin
case({E,L})
2'b00:Q<=Q;
2'b01:Q<=R;
2'b10:Q<=w;
2'b11:Q<=R;
endcase
end
endmodule
93.Given the finite state machine circuit as shown, assume that the D flip-flops are initially reset to zero before the machine begins.
Build this circuit.
module top_module (
input clk,
input x,
output z
);
wire d1,d2,d3;
reg q1=0,q2=0,q3=0;
assign d1 = q1^x;
assign d2 = x&~q2;
assign d3 = x|~q3;
dff dff1 (d1,clk,q1);
dff dff2 (d2,clk,q2);
dff dff3 (d3,clk,q3);
assign z = ~(q1|q2|q3);
endmodule
module dff (input d,
input clk,
output reg q);
always@(posedge clk) begin
q <= d;
end
endmodule
//因为没设定初始值错了好多次;
94.A JK flip-flop has the below truth table. Implement a JK flip-flop with only a D-type flip-flop and gates. Note: Qold is the output of the D flip-flop before the positive clock edge.
module top_module (
input clk,
input j,
input k,
output Q);
always@(posedge clk)
case ({j,k})
2'b00: ;
2'b01: Q <= 0;
2'b10: Q <= 1;
2'b11: Q <= ~Q;
endcase
endmodule
95.For each bit in an 8-bit vector, detect when the input signal changes from 0 in one clock cycle to 1 the next (similar to positive edge detection). The output bit should be set the cycle after a 0 to 1 transition occurs.
Here are some examples. For clarity, in[1] and pedge[1] are shown separately.
module top_module (
input clk,
input [7:0] in,
output [7:0] pedge
);
reg [7:0] d;
always@(posedge clk) begin
d <= in;
pedge <= (~d)∈
end
endmodule
96.For each bit in an 8-bit vector, detect when the input signal changes from one clock cycle to the next (detect any edge). The output bit should be set the cycle after a 0 to 1 transition occurs.
Here are some examples. For clarity, in[1] and anyedge[1] are shown separately.
module top_module (
input clk,
input [7:0] in,
output [7:0] anyedge
);
reg [7:0] d;
always@(posedge clk) begin
d <= in;
anyedge <= d^in;
end
endmodule
沒有留言:
張貼留言