推荐答案
测试一下
题目
写 verilog 代码。题目大概的意思:输入 in,输出 out,对输入 in 维持的周期
参考答案与知识点
参考答案
题目描述较为简略,常见理解为:输入in,输出out,要求out在in为高电平期间维持一个时钟周期的高电平脉冲(即上升沿检测)。实现方法:使用两级触发器对in进行同步与延迟,通过组合逻辑检测上升沿(in_d1 && ~in_d2),输出一个时钟周期宽度的脉冲。另一种理解是直接输出in本身(out=in),但过于简单,不符合编程题典型考点。以下给出标准上升沿检测Verilog代码:
module edge_detector (
input clk,
input rst_n,
input in,
output reg out
);
reg in_d1, in_d2;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
in_d1 <= 1'b0;
in_d2 <= 1'b0;
end else begin
in_d1 <= in;
in_d2 <= in_d1;
end
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
out <= 1'b0;
end else begin
out <= in_d1 & ~in_d2;
end
end
endmodule
注意:out在时钟沿赋值,保证同步输出;若需组合逻辑,可将out定义为wire并assign out = in_d1 & ~in_d2;复位采用异步低有效。本题主要考察同步设计、边沿检测原理及Verilog时序描述。
涉及知识点
- 同步设计(多级触发器)
- 边沿检测原理(上升沿/下降沿)
- 时序逻辑与组合逻辑区别
- Verilog reg与wire声明
- 异步复位与同步释放