3.2.1.14 Create circuit from turth table
问题陈述:
JK 触发器具有以下真值表。实现一个只有 D 型触发器和门的 JK 触发器。注意:Qold 是正时钟沿之前 D 触发器的输出。
Verilog代码:
module top_module (
input clk,
input j,
input k,
output Q);
wire D;
assign D=j&~Q|~k&Q;
always @(posedge clk)
begin
Q<=D;
end
endmodule
3.2.1.15 Detect and edge
问题陈述:
对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期的 0 变为下一个时钟周期的 1(类似于上升沿检测)。输出位应在发生 0 到 1 转换后的周期设置。
Verilog代码:
module top_module (
input clk,
input [7:0] in,
output [7:0] pedge
);
reg [7:0] mid;
always @(posedge clk)
begin
mid<=in;
pedge<=~mid∈
end
endmodule
3.2.1.16 Detect an edge
问题陈述:
对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期的 0 变为下一个时钟周期的 1(类似于上升沿检测)。输出位应在发生 0 到 1 转换后的周期设置。
这里有些例子。为清楚起见,in[1] 和 pedge[1] 分别显示。
Verilog代码:
module top_module (
input clk,
input [7:0] in,
output [7:0] pedge
);
reg [7:0] mid;
always @(posedge clk)
begin
mid<=in;
pedge<=~mid∈
end
endmodule
3.2.1.17 Detect both edges
问题陈述:
对于 8 位向量中的每一位,检测输入信号何时从一个时钟周期变为下一个时钟周期(检测任何边沿)。输出位应在发生 0 到 1 转换后的周期设置。
这里有些例子。为清楚起见,in[1] 和 anyedge[1] 分别显示
Verilog代码:
module top_module (
input clk,
input [7:0] in,
output [7:0] anyedge
);
reg [7:0]mid;
always@(posedge clk)
begin
mid<=in;
anyedge<=mid^in;
end
endmodule
3.2.1.18 Edge capture register
问题陈述:
对于 32 位向量中的每一位,在输入信号从一个时钟周期的 1 变为下一个时钟周期的 0 时进行捕捉。“捕获”表示输出将保持为 1,直到寄存器复位(同步复位)。
每个输出位的行为类似于 SR 触发器:输出位应在 1 到 0 转换发生后的周期设置(为 1)。当复位为高电平时,输出位应在正时钟沿复位(为
0)。如果上述两个事件同时发生,则重置优先。在下面示例波形的最后 4
个周期中,“reset”事件比“set”事件早一个周期发生,因此这里不存在冲突。在下面的示例波形中,为清楚起见,reset、in[1] 和 out[1] 再次分别显示。
Verilog代码:
module top_module (
input clk,
input reset,
input [31:0] in,
output [31:0] out
);
reg [31:0]mid;
always@(posedge clk )
begin
mid<=in;
if(reset)
out<=32'b0;
else
out<=mid&~in|out;
end
endmodule
3.2.1.19 Dual-edge triggered flip-flop
问题陈述:
您熟悉在时钟上升沿或时钟下降沿触发的触发器。在时钟的两个边沿触发双边触发触发器。但是,FPGA 没有双边触发触发器,并且始终不接受
@(posedge clk 或 negedge clk)作为合法的敏感度列表。 构建一个功能类似于双边触发触发器的电路:
(注意:它不一定完全等效:触发器的输出没有毛刺,但模拟这种行为的更大组合电路可能会。但我们将在这里忽略这个细节。)
Verilog代码:
module top_module (
input clk,
input d,
output q
);
reg q0,q1;
always@(posedge clk)
begin
q0<=d;
end
always@(negedge clk)
begin
q1<=d;
end
assign q=clk?q0:q1;
endmodule