3.2.1.14 Create circuit from truth table
问题描述
JK 触发器具有以下真值表。实现一个只有 D 型触发器和门的 JK 触发器。注意:Qold 是正时钟沿之前 D 触发器的输出。
代码:
module top_module (
input clk,
input j,
input k,
output Q);
always @(posedge clk) begin
case({j,k})
2'b00: Q <= Q;
2'b01: Q <= 0;
2'b10: Q <= 1;
2'b11: Q <= ~Q;
endcase
end
endmodule
3.2.1.15 Detect an edge
问题描述
对于8位向量中的每一位,检测输入信号在一个时钟周期内从0变化到下一个时钟周期的1(类似于正边缘检测)。输出位应在发生 0 到 1 转换后的周期设置。
分析:我们要判断当前时钟周期下输入位为1并且前一个时钟周期下输入位为0,我们可以利用D触发器,将当前输入in滞后一个时钟周期设为previous_in(也是保存了前一个时钟周期的in),与当前输入in进行比较(~previous_in&in //前一个时钟输入位为0当前时钟输入位为1)
代码:
module top_module (
input clk,
input [7:0] in,
output [7:0] pedge
);
reg [7:0] previous_in;
always @(posedge clk) begin
previous_in <= in;
pedge <= ~previous_in∈
end
endmodule
3.2.1.16 Detect both edges
问题描述
对于 8 位向量中的每一位,检测输入信号从一个时钟周期变为下一个时钟周期时发生变化(检测任何边沿)。输出位应在发生 0 到 1 转换后的周期设置。
分析:和上一题相同,只是输入位无论从0到1还是从1到0都要检测到,previous_in^in //改成异或即可
代码:
module top_module (
input clk,
input [7:0] in,
output [7:0] anyedge
);
reg [7:0] previous_in;
always @(posedge clk) begin
previous_in <= in;
anyedge <=previous_in^in;
end
endmodule